Wie kann ich in vi / vim eine Datei anhängen, anstatt sie zu überschreiben?


10

Ich weiß, dass ich einfach in eine Datei schreiben kann :w <file>. Ich möchte jedoch wissen, wie ich in eine Datei schreiben kann, indem ich sie anhänge, anstatt sie zu überschreiben.

Beispiel für einen Anwendungsfall: Ich möchte einige Beispiele aus einer Protokolldatei in eine andere Datei übernehmen. Um dies heute zu erreichen, kann ich Folgendes tun:

  1. Öffnen Sie die Protokolldatei
  2. Wählen Sie einige Zeilen mit Shift+v
  3. In eine Datei schreiben: :w /tmp/samples
  4. Wählen Sie weitere Zeilen mit Shift+v
  5. Anhängen an /tmp/samplesmit:w !cat - >> /foo/samples

Leider ist Schritt 5 langwierig, hässlich und fehleranfällig ( >wenn Sie a verpassen , verlieren Sie Daten). Ich hoffe, Vim hat hier etwas Besseres.


3
Wenn Sie daran interessiert sind, Vim besser zu nutzen, besuchen Sie die Schwesterseite Vi und Vim .
Muru

Antworten:


25

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

Wenn Sie den Text im visuellen Modus ausgewählt haben, tun Sie dies einfach :w >> /foo/samples( :'<,'>wird automatisch vorangestellt). Wenn Sie eine verpassen, >wird sich Vim beschweren:

E494: Use w or w>>

Das ist perfekt :) Nichts wie das Lesen der Dokumente. Wusste aber nichts davon :h. Wird es mehr verwenden
Bruno Polaco

1
@BrunoPolaco :hist nur eine Abkürzung für :help. Beginnen Sie mit :help helphelp? : D
Muru

0

Definieren Sie eine Funktion:

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

Rufen Sie eine Funktion auf:

call App('/foo/samples')
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.