আমি কীভাবে একটি অভ্যন্তরীণ ভিআইএম কমান্ড (শেল কমান্ড নয়) একটি নতুন বাফারে ফেলে দেব?
উদাহরণস্বরূপ, আমি সব থাকা প্লাগইনগুলির একটি তালিকা ডাম্প করতে চান :enewথেকে :scriptnamesযাতে আমি এটা অনুসন্ধান করতে পারেন।
আমি কীভাবে একটি অভ্যন্তরীণ ভিআইএম কমান্ড (শেল কমান্ড নয়) একটি নতুন বাফারে ফেলে দেব?
উদাহরণস্বরূপ, আমি সব থাকা প্লাগইনগুলির একটি তালিকা ডাম্প করতে চান :enewথেকে :scriptnamesযাতে আমি এটা অনুসন্ধান করতে পারেন।
উত্তর:
আপনি :redirআউটপুটটি একটি ভেরিয়েবল, রেজিস্টার বা ফাইলগুলিতে পুনর্নির্দেশ করতে ব্যবহার করতে পারেন । নামবিহীন নিবন্ধে পুনঃনির্দেশকরণের উদাহরণ:
:redir @">|silent scriptnames|redir END|enew|put
বিকল্পভাবে টিম পোপের স্ক্রিপ্টিজ.ভিম: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মানে?