Digamos que eu tenho uma função, chamada StripWhitespace
.
Eu posso executá-lo em um único arquivo, abrindo e executando :StripWhitespace
.
Como posso executar automaticamente essa função em uma pasta de arquivos e salvar os resultados à medida que avanças?
macro
multiple-files
squarefrog
fonte
fonte
Respostas:
Você pode usar o
-c
argumento para executar um comando na inicialização, emvim(1)
:Exemplo:
Para sair depois, adicione
| :wqa
:fonte
Se você já estiver no Vim, poderá usar os comandos
:argdo
ou:bufdo
para executar um comando em todos os itens da lista de argumentos ou da lista de buffers, respectivamente.por exemplo, para executar um
:
comando em todos os arquivos da lista de argumentos:Ou para invocar uma função de cada arquivo na lista de buffers:
Ou, para executar a macro
q
em todos os arquivos da lista de argumentos:Você pode salvar todos os buffers alterados com
:wall
ou salvar todos e sair do Vim com:wqall
.Se você quiser gravar os arquivos à medida que avança, poderá adicionar uma chamada para
:update
:Existem várias maneiras de obter os arquivos no Vim em primeiro lugar, incluindo:
vim *
(isso adiciona todos os arquivos à lista de argumentos),:args
comando (que suporta expressões curinga e backtick) para preencher a lista de argumentos ou o:argadd
comando para adicionar arquivos a ela,:e
,:Ex
ou um plugin arquivo de abertura.fonte
'hidden'
ser definido; (2) o: update
comando é uma ligeira melhoria em relação:w
porque ele só escreve se uma alteração foi feita, por isso:bufdo update
ou:argdo update
vai escrever todos os tampões ou argumentos modificados.update
. Pensei em mencionarhidden
quando estava escrevendo a resposta, mas decidi contra, porque não queria complicar demais. Na reflexão, porém, deveria estar lá. Atualizarei a resposta para incluir as duas sugestões atualmente.:wall
, que também tem a vantagem de não percorrer os amortecedores e afastá-lo de onde você começou. Suponho que:argdo update
ainda seja uma história diferente - talvez você não queira escrever para buffers que não estão na sua lista de argumentos.