Bagaimana cara membuang perintah vim internal (bukan perintah shell) ke buffer baru?
Misalnya, saya ingin membuang daftar semua plugin :enewdari :scriptnamessehingga saya dapat mencarinya.
Bagaimana cara membuang perintah vim internal (bukan perintah shell) ke buffer baru?
Misalnya, saya ingin membuang daftar semua plugin :enewdari :scriptnamessehingga saya dapat mencarinya.
Jawaban:
Anda dapat menggunakan :rediruntuk 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 :Scriptnamesperintah yang akan dimuat :scriptnameske 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 :Redirperintah untuk mengarahkan output ke buffer baru. misalnya :Redir scriptnamesatau :Redir ls.
Vim 8 dikirimkan dengan execute()fungsi baru . Anda dapat menggunakan execute()fungsi ini alih-alih :rediruntuk 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()
:redir ENDmemberitahu Vim untuk mengakhiri mengarahkan pesan. Lihat:h :redir
Untuk kelengkapan, saya ingin mempresentasikan fungsi luar biasa yang saya kumpulkan (mencuri) dari romainl
" redirect the output of a Vim or external command into a scratch buffer
function! Redir(cmd)
if a:cmd =~ '^!'
execute "let output = system('" . substitute(a:cmd, '^!', '', '') . "')"
else
redir => output
execute a:cmd
redir END
endif
tabnew
setlocal nobuflisted buftype=nofile bufhidden=wipe noswapfile
call setline(1, split(output, "\n"))
put! = a:cmd
put = '----'
endfunction
command! -nargs=1 Redir silent call Redir(<f-args>)
Ini akan mengambil output perintah sistem atau normal dan meletakkannya di tab baru. Jangan ragu untuk mengubah jalur tabnewke vsplitatau splitdll.
Ada juga plugin bufferize.vim :
:Bufferize scriptnames
yang pada dasarnya merupakan versi paket dari jawaban yang diterima (menggunakan :redir) dan mungkin lebih nyaman bagi sebagian orang.
ENDartinya