Di Vim, apa cara elegan untuk mengambil output dari command-line?

14

Jika saya di Vim dan ingin mendapatkan beberapa output dari command-line dan menempelkannya ke file saya saat ini, saya dapat menjalankan ini:

:! echo "foo" >> %

Itu akan menambahkan "foo" ke file saya saat ini, dan saya harus memuat ulang.

Apakah ada cara yang lebih elegan untuk melakukan ini - apakah output masuk ke buffer yang bisa saya tempel, misalnya?

Nathan Long
sumber

Jawaban:

24

Iya:

:r !echo "foo"

Lihat

:help :r!

Itu akan memasukkan output dari perintah setelah baris saat ini. Jika Anda ingin menangkap output perintah ke register yang bisa Anda tempel, Anda bisa melakukan ini:

:let @a = system('echo "foo"')

Sekarang output dari perintah (termasuk baris baru) berada di register a. Lihat

:help let-@
:help system()
garyjohn
sumber
Setelah melihat bantuan dan bereksperimen, saya melihat bahwa 1) :radalah kependekan dari "baca" (sehingga Anda dapat mengetikkan 'baca' atau hanya 'r' dan itu adalah perintah yang sama), dan 2) melakukan :r path/to/foo.txtakan memasukkan isi itu file setelah kursor.
Nathan Long
Juga - saya tidak tahu tentang systempanggilan itu. Itu luar biasa!
Nathan Long
1
Saya juga tidak tahu Anda bisa mengatur register secara manual seperti let @a = 'foo'. Satu ide keren adalah, setelah melakukan pencarian dan mengganti, Anda dapat menyimpan istilah pencarian ke register untuk menempel di tempat lain dengan melakukan let @a = @/- "membuat register berisi apa yang terdapat pada daftar / register, yaitu, pencarian terakhir saya."
Nathan Long
1
@Nathan Long: Sama-sama. Cara lain untuk menempel dari / register adalah 1) untuk mengeksekusi :put /untuk meletakkan konten register pada baris berikutnya dan 2) saat dalam mode insert, untuk mengetik Ctrl-R diikuti oleh /untuk memasukkan konten register pada posisi kursor. Untuk lebih lanjut tentang itu, lihat :help :putdan :help i_CTRL-R.
garyjohn