আমি কীভাবে একটি অভ্যন্তরীণ ভিআইএম কমান্ড (শেল কমান্ড নয়) একটি নতুন বাফারে ফেলে দেব?
উদাহরণস্বরূপ, আমি সব থাকা প্লাগইনগুলির একটি তালিকা ডাম্প করতে চান :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
মানে?