Dahili bir vim komutunu (shell komutu değil) yeni bir arabelleğe nasıl atabilirim?
Örneğin, içine tüm eklentilerin bir listesini dökümü istiyorum :enewden :scriptnamesbunu arama yapabilmesi.
Dahili bir vim komutunu (shell komutu değil) yeni bir arabelleğe nasıl atabilirim?
Örneğin, içine tüm eklentilerin bir listesini dökümü istiyorum :enewden :scriptnamesbunu arama yapabilmesi.
Yanıtlar:
:redirÇıkışı bir değişkene, kayıt defterine veya dosyaya yeniden yönlendirmek için kullanabilirsiniz . Adsız sicile yeniden yönlendirme örneği:
:redir @">|silent scriptnames|redir END|enew|put
Alternatif olarak Tim Pope's scriptease.vim , hızlı düzeltme listesine :Scriptnamesyüklenecek komutu sağlar :scriptnamesve :copen.
Kendinizi birçok komutu yeniden yönlendiriyorsanız bulursanız, bunu bir komutta tamamlamak isteyebilirsiniz:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
Şimdi :Redirçıktıyı yeni bir arabelleğe yönlendirmek için komutu kullanabilirsiniz . örneğin :Redir scriptnamesveya :Redir ls.
Vim 8 yeni execute()işlevle geliyor. Eski komut çıktısını yakalamak execute()yerine işlevini kullanabilirsiniz :redir.
:enew|pu=execute('scriptnames')
Daha fazla yardım için bkz:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
:redir ENDVim'e mesajları yeniden yönlendirmeyi sona erdirmesini söyler. Bakınız:h :redir
Bütünlük için , romainl'den topladığım (çaldığım) bu harika fonksiyonları sunmak istiyorum.
" 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>)
Bu normal veya sistem komut çıkışını alır ve yeni bir sekmeye yerleştirir. Satırını değiştirmek için çekinmeyin tabnewiçin vsplitya splitvs.
Ayrıca bufferize.vim eklentisi de var:
:Bufferize scriptnames
temel olarak kabul edilen cevabın paketlenmiş bir versiyonu (kullanma :redir) ve bazıları için daha uygun olabilir.
ENDgeliyor?