অভ্যন্তরীণ ভিএম কমান্ডের আউটপুটটি বাফারে ফেলে দিন


18

আমি কীভাবে একটি অভ্যন্তরীণ ভিআইএম কমান্ড (শেল কমান্ড নয়) একটি নতুন বাফারে ফেলে দেব?

উদাহরণস্বরূপ, আমি সব থাকা প্লাগইনগুলির একটি তালিকা ডাম্প করতে চান :enewথেকে :scriptnamesযাতে আমি এটা অনুসন্ধান করতে পারেন।

উত্তর:


24

আপনি :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

ভিম 8+

নতুন execute()ফাংশন সহ 8 টি জাহাজ ভিম করুন । আপনি এক্স-কমান্ড আউটপুট ক্যাপচার execute()করার পরিবর্তে ফাংশনটি ব্যবহার :redirকরতে পারেন।

 :enew|pu=execute('scriptnames') 

আরও সহায়তার জন্য দেখুন:

:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()

কী ENDমানে?
ব্রাইস গিন্টা

1
এটি আউটপুটটিকে রেজিস্টারে পুনর্নির্দেশ বন্ধ করে দেয় যাতে আপনার আবার নিয়মিত আউটপুট থাকে।
টাম্বল 41

1
:redir ENDপুনর্নির্দেশ বার্তাগুলি শেষ করতে ভিমকে বলে। দেখুন:h :redir
পিটার রিঙ্কার

একটি বহিরাগত কমান্ড কার্যকর করতে এবং এর আউটপুটটি ভিম ভেরিয়েবলে ক্যাপচার করতে সিস্টেম () ব্যবহার করুন। : যাক হোস্টনেম = সিস্টেম ('হোস্টনেম')
ব্যবহারকারীর 75751385

2

সম্পূর্ণতার জন্য, আমি রোম্যানেল থেকে সংগ্রহ করা (চুরি) এই দুর্দান্ত কাজগুলি উপস্থাপন করতে চাই

" 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অন্যথায় নির্দ্বিধায়


@ রোমেনেলের গিস্ট gist.github.com/romainl/eae0a260ab9c135390c30cd370c20cd7
Fu

@ ডায়ানোফু, আমার উত্তরের সাথে যুক্ত লিঙ্ক।
ক্লাউস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.