Bagaimana saya bisa menyalurkan output dari perintah shell ke buffer baru di Vim? Jelas berikut ini tidak akan berfungsi, tetapi Anda dapat melihat apa yang saya maksud:
:!echo % | :newtab
Bagaimana saya bisa menyalurkan output dari perintah shell ke buffer baru di Vim? Jelas berikut ini tidak akan berfungsi, tetapi Anda dapat melihat apa yang saya maksud:
:!echo % | :newtab
Jawaban:
Anda tidak bisa menyalurkan output dari perintah shell ke perintah yang membuat buffer baru, tetapi Anda bisa membuat buffer baru dan membaca output dari perintah shell ke buffer itu dengan satu entri pada baris perintah Vim. Versi contoh kerja Anda akan menjadi
:tabnew | r !echo <c-r>=bufname("#")<cr>
Perhatikan bahwa simbol pipa dalam hal ini adalah pemisah antara perintah Vim ex, bukan pipa shell. Lihat juga
:help :tabnew
:help :r!
:help :bar
:r!echo
tanpa mengubah buffer.
Inilah yang saya lakukan. Itu disinggung dalam komentar di jawaban di atas.
:new | r ! <cmd>
:new | r ! <cmd> # (# is replaced with filename)
Contoh 1 : Temukan semua file teks di/tmp
:new | r ! find /tmp -name '*.txt'
Contoh 2 : Anda sedang mengedit file foo.txt dan Anda ingin menjalankannyals -la foo.txt
dan mendapatkan output dalam buffer:
:new | r ! ls -la #
The #
diganti dengan nama file aslinya penyangga Anda mengedit sedang. Ini sangat berguna untuk perintah kontrol sumber ad-hoc misalnya
:new | r ! hg annotate -un #
:new
membuat pemisahan horizontal, gunakan :vnew
jika Anda ingin pemisahan vertikal dan :tabnew
untuk tab baru.
:tabnew | enew | r ! <your shell cmd>
bekerja untukku.
Jika Anda benar-benar perlu menyimpan hasil dalam buffer baru, tetapi memerlukan info dari buffer saat ini yang lama, maka Anda dapat menggunakan system()
:
:let res = system('echo '.expand('%'))
:tabnew
:put=res
atau simpan nama buffer saat ini untuk nanti :
:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>