শিম কমান্ডের পাইপ আউটপুট (!) ভিমে একটি নতুন বাফারে রূপান্তরিত করে


35

আমি কীভাবে শিম কমান্ডের আউটপুটটি ভিমে নতুন বাফারে পাইপ করব? নিম্নলিখিতটি স্পষ্টতই কাজ করবে না, তবে আপনি কী দেখতে পাচ্ছেন তা দেখতে পারেন:

:!echo % | :newtab

উত্তর:


27

আপনি শেল কমান্ডের আউটপুটটি কোনও কমান্ডে পাইপ করতে পারবেন না যা একটি নতুন বাফার তৈরি করে, তবে আপনি একটি নতুন বাফার তৈরি করতে পারেন এবং শিম কমান্ডের আউটপুটটি ভিফের কমান্ড লাইনে একটি প্রবেশ দিয়ে সেই বাফারে পড়তে পারেন। আপনার উদাহরণের একটি কার্যকারী সংস্করণ হবে

:tabnew | r !echo <c-r>=bufname("#")<cr>

নোট করুন যে এই ক্ষেত্রে পাইপ প্রতীকটি শিমের পাইপ নয়, ভিম প্রাক্তন কমান্ডগুলির মধ্যে বিভাজক। আরো দেখুন

:help :tabnew
:help :r!
:help :bar

আমার প্রায় প্রয়োজন ঠিক এটিই, প্রায় অন্য উপায় যা আমি বর্তমান বাফারের ফাইল নামটি অ্যাক্সেস করতে পারি। দ্রষ্টব্য: প্রত্যাশিতভাবে পছন্দসই শেষ ফলাফলটি পরিষ্কার করতে প্রশ্ন আপডেট হয়েছে।
রিচি মার্কেজ

@ রিচার্ড মার্কেজ: আমি এই উত্তরটি আপডেট করেছি। নতুন ট্যাবটি এখন "পুরাতন" ফাইলের নাম দিয়ে খোলা হয়েছে, সুতরাং আপনি কল করতে পারেন
আকিরা

তবে :r!echoবাফারটি পরিবর্তন না করেই নয় ।
লুক হার্মিটে

2
@ গ্যারিজোহান, আকীরা: সহায়তার জন্য ধন্যবাদ। "<cr> = ..." অংশটি ভিম স্কো ত্রুটি করেছে, তবে আমি এটি ": ট্যাবনেউ | আর! প্রতিধ্বনি #" দিয়ে কাজ করতে সক্ষম হয়েছি।
রিচি মার্কেজ

1
আপনি যদি এটি আপনার .vimrc এর কোনও কীতে মানচিত্র করতে চান তবে আপনাকে | প্রতিস্থাপন করতে হবে note <bar> সহ অক্ষর।
রিচি মার্কেজ

16

আমি যা করি তা এখানে। উপরের উত্তরের মন্তব্যে এটি ইঙ্গিত দেওয়া হয়েছে।

:new | r ! <cmd>
:new | r ! <cmd> #   (# is replaced with filename)

উদাহরণ 1 : এর মধ্যে সমস্ত পাঠ্য ফাইল সন্ধান করুন/tmp

:new | r ! find /tmp -name '*.txt'

উদাহরণ 2 : আপনি foo.txt ফাইল সম্পাদনা করছেন এবং আপনি চালাতে চান ls -la foo.txtএবং আউটপুটটি একটি বাফারে পেতে চান :

:new | r ! ls -la #

#মূল ফাইলের নাম প্রতিস্থাপিত হয় তুমি সম্পাদনা বাফার। এটি অ্যাড-হক উত্স নিয়ন্ত্রণ আদেশের জন্য বিশেষত কার্যকর eg

:new | r ! hg annotate -un #

:newএকটি অনুভূমিক বিভাজন তৈরি করে, :vnewআপনি পরিবর্তে এবং :tabnewএকটি নতুন ট্যাব ব্যবহার করতে চাইলে ব্যবহার করুন want


আপনি কি এখানে এই প্রশ্নের উত্তর দিতে সক্ষম ? এটি %পরবর্তী বাফারটির সাথে বর্তমান বাফারটি ব্যবহার করার চেষ্টা করছে তবে E499।
এইচ এইচ


2

যদি আপনার সত্যিকারের ফলাফলটি কোনও নতুন বাফারে সঞ্চয় করতে হয় তবে পুরানো বর্তমান বাফার থেকে তথ্য প্রয়োজন হয়, তবে আপনি হয় ব্যবহার করতে পারেন system():

:let res = system('echo '.expand('%'))
:tabnew
:put=res

বা বর্তমান বাফারের নামটি পরের জন্য সংরক্ষণ করুন :

:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>

অন্য উত্তরটি দেখুন, আপনি একটি ভেরিয়েবলের মধ্যে নাম সংরক্ষণ না করে এটি করতে পারেন। তবে যাইহোক ভাল উত্তর।
আকির

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