In vi / vim, come posso aggiungere un file invece di sovrascriverlo?


11

So di poter scrivere su un file semplicemente :w <file>. Vorrei sapere come posso scrivere su un file accodandogli invece di sovrascriverlo.

Esempio di caso d'uso: desidero estrarre alcuni campioni da un file di registro in un altro file. Per raggiungere questo obiettivo oggi posso fare:

  1. Apri il file di registro
  2. Seleziona alcune righe con Shift+v
  3. Scrivi in ​​un file: :w /tmp/samples
  4. Seleziona alcune altre righe con Shift+v
  5. Aggiungi a /tmp/samplescon:w !cat - >> /foo/samples

Sfortunatamente il passaggio 5 è lungo, brutto e soggetto a errori (mancare un >ti fa perdere dati). Spero che Vim abbia qualcosa di meglio qui.


3
Se sei interessato ad usare meglio Vim, fai un checkout sul sito gemellato Vi e Vim .
muru,

Risposte:


26

Da :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.

Quindi, se hai selezionato il testo usando la modalità visiva, fai semplicemente :w >> /foo/samples( :'<,'>verrà automaticamente anteposto). Se ti manca un >, Vim si lamenterà:

E494: Use w or w>>

Questo è perfetto :) Niente come leggere i documenti. Non lo sapevo :hperò. Lo userò di più
Bruno Polaco

1
@BrunoPolaco :hè solo una scorciatoia per :help. Inizia con :help helphelp? : D
muru,

0

Definire una funzione:

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

Chiama una funzione:

call App('/foo/samples')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.