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 :enew
den :scriptnames
bunu 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 :enew
den :scriptnames
bunu 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 :Scriptnames
yüklenecek komutu sağlar :scriptnames
ve :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 scriptnames
veya :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 END
Vim'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 tabnew
için vsplit
ya split
vs.
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.
END
geliyor?