W vi / vim, jak dołączyć do pliku zamiast go zastąpić?

11

Wiem, że mogę pisać do pliku, po prostu robiąc :w <file>. Chciałbym jednak wiedzieć, jak mogę zapisać plik, dołączając go zamiast nadpisywać.

Przykładowy przypadek użycia: chcę pobrać niektóre próbki z pliku dziennika do innego pliku. Aby to osiągnąć dzisiaj, mogę:

  1. Otwórz plik dziennika
  2. Wybierz niektóre linie za pomocą Shift+v
  3. Napisz do pliku: :w /tmp/samples
  4. Wybierz więcej linii za pomocą Shift+v
  5. Dołącz do /tmp/samplesz:w !cat - >> /foo/samples

Niestety krok 5 jest długi, brzydki i podatny na błędy (brak a >powoduje utratę danych). Mam nadzieję, że Vim ma tutaj coś lepszego.

Bruno Polaco
źródło
3
Jeśli chcesz lepiej korzystać z Vima, skorzystaj z kasy siostrzanej witryny Vi i Vim .
mur 4.04.16

Odpowiedzi:

26

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

Tak więc, jeśli zaznaczyłeś tekst w trybie wizualnym, po prostu zrób :w >> /foo/samples( :'<,'>zostanie automatycznie dodany). Jeśli przegapisz >Vim, narzeka:

E494: Use w or w>>
muru
źródło
To jest idealne :) Nie ma to jak czytanie dokumentów. :hJednak nie wiedziałem o tym . Użyje go więcej
Bruno Polaco
1
@BrunoPolaco :hjest po prostu skrótem :help. Zacznij od :help helphelp? : D
mur
0

Zdefiniuj funkcję:

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

Wywołaj funkcję:

call App('/foo/samples')
techraf
źródło