मैं एक आंतरिक vim कमांड (शेल कमांड नहीं) को एक नए बफर में कैसे डंप करूं?
उदाहरण के लिए, मैं में सभी प्लग-इन की एक सूची डंप करना चाहते :enew
से :scriptnames
इतना है कि मैं इसे खोज सकते हैं।
मैं एक आंतरिक vim कमांड (शेल कमांड नहीं) को एक नए बफर में कैसे डंप करूं?
उदाहरण के लिए, मैं में सभी प्लग-इन की एक सूची डंप करना चाहते :enew
से :scriptnames
इतना है कि मैं इसे खोज सकते हैं।
जवाबों:
आप :redir
आउटपुट को चर, रजिस्टर या फ़ाइल में पुनर्निर्देशित कर सकते हैं । अनाम रजिस्टर पर पुनर्निर्देशित करने का उदाहरण:
:redir @">|silent scriptnames|redir END|enew|put
वैकल्पिक रूप से टिम पोप की scriptease.vim:Scriptnames
कमांड प्रदान करती है जो :scriptnames
कि क्विकफिक्स लिस्ट में लोड होगी और :copen
।
यदि आप अपने आप को कई आदेशों को पुनर्निर्देशित करते हैं, तो आप इसे एक कमांड में लपेटना चाहते हैं:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
अब आप :Redir
आउटपुट को एक नए बफर में पुनर्निर्देशित करने के लिए कमांड का उपयोग कर सकते हैं । जैसे :Redir scriptnames
या :Redir ls
।
नए execute()
समारोह के साथ 8 जहाजों को विम करें । आप पूर्व-कमांड आउटपुट को कैप्चर execute()
करने के बजाय फ़ंक्शन का उपयोग कर सकते हैं :redir
।
:enew|pu=execute('scriptnames')
अधिक मदद के लिए देखें:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
:redir END
संदेशों को पुनर्निर्देशित करने के लिए विम को बताता है। देखें:h :redir
पूर्णता के लिए, मैं इस भयानक कार्य को प्रस्तुत करना चाहता हूं जिसे मैंने रोमेल से एकत्र किया (चुराया था)
" 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>)
यह सामान्य या सिस्टम कमांड आउटपुट लेगा और एक नए टैब में डाल देगा। लाइन बदलने के लिए स्वतंत्र महसूस tabnew
करने के लिए vsplit
या split
आदि
बफ़रेज.विम प्लगइन भी है :
:Bufferize scriptnames
जो मूल रूप से स्वीकृत उत्तर (उपयोग :redir
) का एक पैकेज्ड संस्करण है और कुछ के लिए अधिक सुविधाजनक हो सकता है।
END
मतलब है?