Dalam vi / vim, bagaimana cara menambahkan file daripada menimpanya?

10

Saya tahu saya bisa menulis ke file hanya dengan melakukan :w <file>. Saya ingin tahu bagaimana saya bisa menulis ke file dengan menambahkannya daripada menimpanya.

Contoh use case: Saya ingin mengambil beberapa sampel dari file log ke file lain. Untuk mencapai itu hari ini saya bisa melakukan:

  1. Buka file log
  2. Pilih beberapa baris dengan Shift+v
  3. Menulis ke file: :w /tmp/samples
  4. Pilih beberapa baris dengan Shift+v
  5. Tambahkan /tmp/samplesdengan:w !cat - >> /foo/samples

Sayangnya langkah 5 panjang, jelek dan rentan kesalahan (hilang >membuat Anda kehilangan data). Saya harap Vim memiliki sesuatu yang lebih baik di sini.

Bruno Polaco
sumber
3
Jika Anda tertarik untuk menggunakan Vim lebih baik, lakukan checkout situs saudara Vi dan Vim .
muru

Jawaban:

25

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

Jadi, jika Anda telah memilih teks menggunakan mode visual, lakukan saja :w >> /foo/samples( :'<,'>akan ditambahkan secara otomatis). Jika Anda melewatkan a >, Vim akan mengeluh:

E494: Use w or w>>
muru
sumber
Ini sempurna :) Tidak seperti membaca dokumen. Tidak tahu tentang itu :h. Akan lebih banyak menggunakannya
Bruno Polaco
1
@BrunoPolaco :hhanya singkatan untuk :help. Mulai dengan :help helphelp? : D
muru
0

Tentukan fungsi:

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

Panggil fungsi:

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