Bagaimana cara membuang perintah vim internal (bukan perintah shell) ke buffer baru?
Misalnya, saya ingin membuang daftar semua plugin :enew
dari :scriptnames
sehingga saya dapat mencarinya.
sumber
Bagaimana cara membuang perintah vim internal (bukan perintah shell) ke buffer baru?
Misalnya, saya ingin membuang daftar semua plugin :enew
dari :scriptnames
sehingga saya dapat mencarinya.
Anda dapat menggunakan :redir
untuk mengarahkan output ke variabel, daftar, atau file. Contoh pengalihan ke register yang tidak disebutkan namanya:
:redir @">|silent scriptnames|redir END|enew|put
Sebagai alternatif, scriptease.vim Tim Pope menyediakan :Scriptnames
perintah yang akan dimuat :scriptnames
ke dalam daftar perbaikan cepat dan :copen
.
Jika Anda menemukan diri Anda mengarahkan ulang banyak perintah, Anda mungkin ingin menyelesaikan ini dalam sebuah perintah:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
Sekarang Anda dapat menggunakan :Redir
perintah untuk mengarahkan output ke buffer baru. misalnya :Redir scriptnames
atau :Redir ls
.
Vim 8 dikirimkan dengan execute()
fungsi baru . Anda dapat menggunakan execute()
fungsi ini alih-alih :redir
untuk menangkap keluaran perintah sebelumnya.
:enew|pu=execute('scriptnames')
Untuk bantuan lebih lanjut lihat:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
END
artinya:redir END
memberitahu Vim untuk mengakhiri mengarahkan pesan. Lihat:h :redir
Untuk kelengkapan, saya ingin mempresentasikan fungsi luar biasa yang saya kumpulkan (mencuri) dari romainl
Ini akan mengambil output perintah sistem atau normal dan meletakkannya di tab baru. Jangan ragu untuk mengubah jalur
tabnew
kevsplit
atausplit
dll.sumber
Ada juga plugin bufferize.vim :
yang pada dasarnya merupakan versi paket dari jawaban yang diterima (menggunakan
:redir
) dan mungkin lebih nyaman bagi sebagian orang.sumber