No vi / vim, como anexo a um arquivo em vez de substituí-lo?

10

Eu sei que posso gravar em um arquivo simplesmente fazendo :w <file>. Eu gostaria de saber como escrever em um arquivo anexando-o em vez de sobrescrevê-lo.

Exemplo de caso de uso: quero tirar algumas amostras de um arquivo de log para outro arquivo. Para conseguir isso hoje eu posso fazer:

  1. Abra o arquivo de log
  2. Selecione algumas linhas com Shift+v
  3. Escreva em um arquivo: :w /tmp/samples
  4. Selecione mais algumas linhas com Shift+v
  5. Anexar a /tmp/samplescom:w !cat - >> /foo/samples

Infelizmente, o passo 5 é longo, feio e propenso a erros (a falta de um >faz você perder dados). Espero que o Vim tenha algo melhor aqui.

Bruno Polaco
fonte
3
Se você estiver interessado em usar o Vim melhor, faça o checkout do site irmão Vi e Vim .
Muni

Respostas:

25

De :h :w:

                                                :w_a :write_a E494
:[range]w[rite][!] [++opt] >>
                        Append the specified lines to the current file.

:[range]w[rite][!] [++opt] >> {file}
                        Append the specified lines to {file}.  '!' forces the
                        write even if file does not exist.

Portanto, se você selecionou o texto usando o modo visual, basta fazer :w >> /foo/samples( :'<,'>será anexado automaticamente). Se você perder um >, o Vim reclamará:

E494: Use w or w>>
muru
fonte
Isso é perfeito :) Nada como ler os documentos. Não sabia :hembora. Vai usá-lo mais
de Bruno Polaco
1
@BrunoPolaco :hé apenas uma abreviação de :help. Comece com :help helphelp? : D
muru 04/04
0

Defina uma função:

fun! App(filename)
    exec "w !cat - >> " . shellescape(a:filename)
endfunc

Chame uma função:

call App('/foo/samples')
techraf
fonte