সহায়তা থেকে :help backtick-expansion:
On Unix and a few other systems you can also use backticks for the file name
argument, for example:
:next `find . -name ver\\*.c -print`
:view `ls -t *.patch \| head -n1`
The backslashes before the star are required to prevent the shell from
expanding "ver*.c" prior to execution of the find program. The backslash
before the shell pipe symbol "|" prevents Vim from parsing it as command
termination.
যদি আমি সহায়তা থেকে নেওয়া আদেশটি টাইপ করি তবে আমি একটি ত্রুটি পেয়েছি:
:next `find . -name ver\\*.c -print
E79: Cannot expand wildcards
সাহায্যের উদাহরণটি কেন একের পরিবর্তে দুটি ব্যাকস্ল্যাশ ব্যবহার করে এবং কেন এটি কার্যকর হয় না?
নিম্নলিখিত কাজ:
যদি আমি সেই দুটি ব্যাকস্ল্যাশগুলির একটি অপসারণ করি যা কর্মক্ষেত্রের আগে শেল দ্বারা প্রসারিত হওয়া থেকে তারাকে রক্ষা করে
find::next `find . -name ver\*.c -print`যদি আমি উভয় ব্যাকস্ল্যাশগুলি সরিয়ে ফেলে এবং প্যাটার্নটির চারপাশে একক উদ্ধৃতি রাখি
ver*.c::next `find . -name 'ver*.c' -print`
এ পর্যন্ত, নিয়মটি মনে হচ্ছে:
যদি আপনার শেল কমান্ডটিতে একটি তারা থাকে এবং আপনি কমান্ডের আগে শেলটি প্রসারিত করতে না চান, তার সামনে একটি ব্যাকস্ল্যাশ রাখুন বা প্যাটার্নের চারপাশে একক উদ্ধৃতি রাখুন ।
তবে সহায়তা আরেকটি উদাহরণ দেয়:
:view `ls -t *.patch \| head -n1`
এই কমান্ডটি কোনও পরিবর্তন ছাড়াই, একক উদ্ধৃতির প্রয়োজন নেই, ব্যাকস্ল্যাশ প্রয়োজন নেই without
আমি মনে করি এটি কাজ করার কারণটি হ'ল lsআদেশটি (কমান্ডের -nameযুক্তির বিপরীতে find) একাধিক ফাইল আর্গুমেন্ট গ্রহণ করে এবং শেল প্রসারণে কোনও সমস্যা দেখেনি *.patch।
এখন, আসুন আমি বলি যে আমি ফোল্ডারের .confভিতরে এক্সটেনশন সহ সমস্ত ফাইল সন্ধান করতে চাই /etcএবং কেবল স্ট্রিংযুক্ত মিলগুলি পাওয়ার findজন্য আউটপুটটি পাইপ করি ।
শেলটিতে, যে কোনও কার্যনির্বাহী ডিরেক্টরি থেকে, আমি টাইপ করব:grepinput
find /etc -name '*.conf' | grep input
এবং এটি কাজ করবে।
ভিমে, আমি একই কমান্ডটি তার চারপাশে ব্যাকটিকস লাগিয়ে টাইপ করব এবং পাইপ প্রতীকটির সামনে একটি ব্যাকস্ল্যাশ কমান্ড সমাপ্তি হিসাবে এটি ব্যাখ্যা করতে বাধা দিতে পারি:
:next `find /etc -name '*.conf' \| grep input`
এবং এটি কাজ করে।
এখন, আমি যদি পাইপ এবং এটি ছাড়াই একই কমান্ডটি টাইপ করি তবে আমি grep inputএকটি ত্রুটি পেয়েছি:
:next `find /etc -name '*.conf'`
E79: Cannot expand wildcards
আমি একক উদ্ধৃতি দিয়ে তারাটিকে সুরক্ষিত করার পরেও কেন এই ক্ষেত্রে ত্রুটি রয়েছে?
এবং কেন এখন একটি ত্রুটি আছে তবে কেবল পাইপ এবং এর সাথে নয় grep input?
বোঝার চেষ্টা করার জন্য, আমি একটি সহজ কমান্ড নিয়ে এসেছি:
find . -name '*.conf'
এটি .confওয়ার্কিং ডিরেক্টরিতে এক্সটেনশন সহ সমস্ত ফাইল সন্ধান করে। কমান্ডটি শেলটিতে কাজ করে।
এটি ভিমে পরীক্ষার জন্য, আমি টাইপ করেছি: :next `find . -name '*.conf'`
এবং এটি কার্যকর হয়। সেক্ষেত্রে ডটটি আমার বর্তমান ওয়ার্কিং ডিরেক্টরিকে প্রাক্তন কমান্ড দ্বারা প্রদর্শিত হিসাবে দেখানো হয়েছে :pwdযা আমার হোম ডিরেক্টরি যা /home/usernameআমি এটি থেকে ভিআইএম সেশনটি চালু করেছি।
যখন আমি যখন স্বেচ্ছাসেবী ফোল্ডারে অনুসন্ধান করতে বলি তখন কাজ করে না কেন আমি যখন বর্তমান ওয়ার্কিং ডিরেক্টরিটি অনুসন্ধান করতে বলি তখন কেন এটি কাজ করে /etc?
এখন, আমি যদি আমার কাজ ডিরেক্টরি পরিবর্তন /home/usernameকরার /etcতেজ প্রাক্তন আদেশের সঙ্গে :cd /etcএবং একই কমান্ড আগের মতই, এটা ত্রুটি আউট পুনরায় চেষ্টা আবার
:next `find . -name '*.conf'`
E79: Cannot expand wildcards
আমি যখন আমার বাড়ির ফোল্ডারে থাকি কিন্তু আমি যখন থাকি না কেন কেন একই কমান্ডটি কাজ করে /etc?
আমি নিশ্চিত যে কিছু যুক্তি আছে, কিন্তু আমি এটি খুঁজে পাচ্ছি না।
একটি স্বেচ্ছাসেবী শেল কমান্ড (কোন তারকা, একটি পাইপ, কোনও কার্যকরী ডিরেক্টরি থেকে কোনও ডিরেক্টরিতে অনুসন্ধান করে) দিয়ে আরগলিস্টটি জনপ্রিয় করার জন্য সাধারণ এবং সঠিক বাক্য গঠন কী?
আমি ভিএম সংস্করণ 7.4.942 ব্যবহার করছি এবং zsh আমার ডিফল্ট শেল। আমি এই আদেশগুলি vim -u NORC -Nবাশ এবং zsh থেকে সর্বনিম্ন সূচনা ( ) দিয়ে পরীক্ষা করেছি ।
আমার কি ভিশকে কল করতে zim নয় কনফিগার করতে হবে?
vim $(find . -name ver\*.c -print), vim $(ls -t *.patch | head -n1), vim $(find /etc -name '*.conf' | grep input), vim $(find /etc -name '*.conf'),vim $(find . -name '*.conf')
--remote, দেখুন: vi.stackexchange.com/a/5618/4939 ) তবে আমি কীভাবে জানতে আগ্রহী এটি বর্তমান অধিবেশন থেকে সরাসরি করুন। যদি এটি সম্ভব না হয় তবে তা ভাল, তবে সহায়তাটি পড়ার পরে মনে হয় এটি করা সম্ভব। যদি এটি হয় তবে আমি বুঝতে চাই যে ভিম অনুরূপ কমান্ডের প্রতি কেন এত আলাদা প্রতিক্রিয়া দেখায়।
find /etc -name '*.conf'কাজ না করার ক্ষেত্রে , আমি মনে করি কিছু কৌতুকপূর্ণ নাম সেই আদেশটি থেকে বেরিয়ে এসেছে, এবং পাইপ দেওয়ার সময় এটি কাজ করার কারণ হতে পারে grep।
vim $(find . -name ver*.c)