Depois de um pouco mais bisbilhotando, o vim pode fazer isso com um único comando, sem scripts. Por exemplo, para adicionar 50 a todos os números a seguir, <obj param="
você pode usar:
:%s@<obj param="\(\d\+\)@\='<obj param="' . (submatch(1) + 50)@g
Deixe-me explicar isso.
:
é a maneira geral de entrar / significar o modo de linha de comando no vim.
%
meios dentro do escopo de todo o documento; você pode colocar em um intervalo numérico, por exemplo,1,50
apenas dentro das 50 primeiras linhas.
s
é uma abreviação para substituto (você pode escrever a palavra inteira, se preferir)
@
é o delimitador; você pode usar qualquer outro caractere, desde que não esteja no que está procurando. Apenas use três vezes. (A sintaxe é semelhante a sed
.)
Tudo até a próxima ocorrência do delimitador @ é o padrão regular a ser procurado, neste caso <obj param="
seguido por \d\+
, que é qualquer número de dígitos. O \(
e \)
está lá para definir toda essa sequência de dígitos como um único grupo reg ex que corresponderia a referências anteriores como \1
o submatch
comando vim .
Em seguida, o delimitador @
marca o que segue como texto de substituição.
O \=
começo aqui significa substituir o resultado de alguma expressão avaliada, em vez de um padrão ou sequência regular, que é a chave aqui.
Depois, temos '<obj param="'
o início do texto de substituição. A .
seguir, é apresentada a função do vim para concatenar seqüências de caracteres.
submatch(1)
é uma função interna do vim que pode ser usada apenas dentro de um comando de substituição e retorna a sequência que é igual à regex \1
; você usaria submatch(2)
para o equivalente a regex \2
e assim por diante. ( \0
é todo o padrão correspondente, mas não queremos isso aqui.) O \(
e \)
no padrão de pesquisa são usados para marcar o que conta submatch(1)
.
Daí (submatch(1) + 50)
o resultado da adição de 50 ao número que os dígitos seguintes<obj param="
no formulário de padrão de pesquisa.
O delimitador @
é novamente usado para marcar o final do texto de substituição.
A bandeira g
é usada para tornar as substituições globais; você pode omitir isso se quiser substituir apenas a primeira instância em cada linha.
Você provavelmente pode descobrir como adicionar números diferentes, subtrair, dividir etc.
vim
eemacs
posso fazer esse tipo de coisa, mas pode ser necessário escrever um script em vez de usar um único comando.