পার্সিংটি নিজেই করুন
আপনি যদি ব্যবহার করেন তবে আপনি :help <q-args>
একটি উদ্ধৃত স্ট্রিং পাবেন যা আপনি split()
দুটি স্থান-বিভাজিত অংশগুলিতে করতে পারেন :
command! -nargs=+ Sub execute '%substitute/' . split(<q-args>, ' ')[0] . '/' . split(<q-args>, ' ')[1] . '/g'
আমরা কিছুটা বিপাক ( call()
) এবং এর মাধ্যমে দুবার পার্সিং এড়াতে পারি printf()
:
command! -nargs=+ Sub execute call('printf', ['%%substitute/%s/%s/g'] + split(<q-args>, ' '))
এটি কাজ করে, তবে ত্রুটি সামলানো এখনও ভাল নয় (যদি আপনি কেবল একটি আর্গ পাস করেন তবে এটি অভিযোগ করবে E766: Insufficient arguments for printf()
)। আপনি একটিতে কোডটি বের করে আরও নিয়ন্ত্রণ পাবেন :function
।
ভিম যুক্তি পার্স করতে পারে
একটি পৃথক :function
বিম আপনার মাধ্যমে যুক্তির পক্ষে যুক্তি পার্সিংও করতে দেয় :help <f-args>
।
command! -nargs=+ Sub call Sub(<f-args>)
function! Sub( ... )
execute printf('%%substitute/%s/%s/g', a:1, a:2)
endfunction
একটি ফাংশন সহ, আপনি সহজেই আর্গুমেন্টের সঠিক সংখ্যাটি পরীক্ষা করতে পারেন:
function! Sub( ... )
if a:0 != 2
echo "Need two arguments"
return
endif
...
একটি ফাংশনের খারাপ দিকটি হ'ল ত্রুটিগুলি (যেমন প্যাটার্নটি মেলে না, বাফার পরিবর্তনযোগ্য নয়) বহু-লাইন, বন্ধুত্বপূর্ণ ত্রুটি বার্তা তৈরি করে। try...catch
একটি দুর্দান্ত, একক-লাইন ত্রুটি বার্তা প্রাপ্ত করতে ব্যবহার করতে হবে।
বোনাস: সেখান থেকে কোথায় নিয়ে যেতে হবে
- আপনি যেমন
:s
ব্যবহারকারীর কাছ থেকে কমান্ডটি (এবং ব্যবহৃত ডিলিমিটারগুলি) গোপন করছেন , তখন আমি মনে করি এটির ডিলিমিটরদের পালানোর প্রয়োজন হবে না। / এর escape(a:1, '/')
পরিবর্তে ব্যবহার করুন ।a:1
a:2
- এর সাহায্যে
:help :command-range
আপনি এখনও পুরো বাফারে কাজ করতে কমান্ডটি ডিফল্ট করতে পারেন, তবে অন্যান্য রেঞ্জগুলিও অতিক্রম করতে পারবেন।
কমান্ডটি সত্যই তার ওজন টানছে কিনা তাও বিবেচনা করুন। ব্যবহৃত পার্সিং নির্বিশেষে, আর্গুমেন্টগুলিতে সাদা স্থান সমস্যাযুক্ত, মূলটি এমনটি :s
নয় down কেবলমাত্র আমি দেখতে পাচ্ছি যে এটি টাইপ করা কিছুটা সহজ তবে ম্যাপিং (গুলি) এর মাধ্যমে এটিও অর্জন করা যেতে পারে যা কমান্ড-লাইনের একটি অসম্পূর্ণ :s
কমান্ডটি পূর্বে পূরণ করে এবং কার্সারটিকে ঠিক মাঝখানে অবস্থান করে।