আরও কিছুক্ষন ঝাঁকুনির পরে, দেখা যাচ্ছে যে ভিএম স্ক্রিপ্টিং ছাড়াই একটি একক কমান্ড দিয়ে এটি করতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত সমস্ত নম্বরে 50 টি যোগ করার জন্য <obj param="
আপনি ব্যবহার করতে পারেন:
:%s@<obj param="\(\d\+\)@\='<obj param="' . (submatch(1) + 50)@g
আমাকে এটা ভেঙে দিন।
:
ভিএম-তে কমান্ড-লাইন মোডে প্রবেশ / সাইনাইফ করার সাধারণ উপায়।
%
পুরো ডকুমেন্টের আওতার মধ্যে অর্থ; আপনি একটি সংখ্যা পরিসীমা স্থাপন করতে পারেন, উদাহরণস্বরূপ, 1,50
পরিবর্তে প্রথম 50 লাইনের মধ্যে এটি করতে to
s
বিকল্পের জন্য সংক্ষিপ্তকরণ (আপনি যদি পছন্দ করেন তবে পুরো শব্দটি লিখতে পারেন)
@
সীমানা হয়; আপনি যে কোনও চরিত্রটি এতক্ষণ ব্যবহার করতে পারবেন যেহেতু এটি আপনি সন্ধান করছেন না। এটি তিনবার ব্যবহার করুন। (বাক্যবিন্যাস অনুরূপ sed
।)
বিভেদক পরবর্তী সংঘটন করতে সবকিছু আপ @ জন্য অনুসন্ধান করতে এই ক্ষেত্রে REG প্রাক্তন প্যাটার্ন <obj param="
দ্বারা অনুসরণ \d\+
, যা সংখ্যার কোনো সংখ্যা। \(
এবং \)
সেখানে একটি একক REG প্রাক্তন গ্রুপ যা মত backreferences মেলে করবে ডিজিটের এই সমগ্র ক্রম সেট করতে হয় \1
, অথবা তেজ এর submatch
কমান্ড।
তারপরে ডিলিমিটারটি @
চিহ্নিত করে যে প্রতিস্থাপন পাঠ্যটি কি অনুসরণ করে।
\=
এখানে শুরু উপায়ে এ বরং একটি REG প্রাক্তন প্যাটার্ন বা স্ট্রিং, যা এখানে চাবিকাঠি চেয়ে কিছু মূল্যায়ন মত প্রকাশের ফলাফলের খেলোয়াড়রা।
তারপরে আমাদের '<obj param="'
প্রতিস্থাপন পাঠ্য শুরু করার জন্য রয়েছে। .
যা অনুসরণ করে স্ট্রিং concatenating জন্য তেজ এর ফাংশন।
submatch(1)
একটি ভিআইএম অন্তর্নির্মিত ফাংশন যা কেবলমাত্র প্রতিস্থাপন কমান্ডের মধ্যে ব্যবহার করা যেতে পারে এবং স্ট্রিংটি রিজেক্সের মতোই দেয় \1
; আপনি submatch(2)
রেগেক্স এর সমতুল্য এবং এর জন্য ব্যবহার করবেন \2
। ( \0
পুরো ম্যাচিং প্যাটার্নটি, তবে আমরা এখানে এটি চাই না \(
and ) এবং \)
অনুসন্ধান প্যাটার্নটিতে কী গণনা করা হয়েছে তা চিহ্নিত করতে ব্যবহার করা হয় submatch(1)
।
সুতরাং অনুসন্ধানের ধরণ আকারে (submatch(1) + 50)
অঙ্কগুলি অনুসরণ করে এমন সংখ্যায় 50 যুক্ত করার ফলাফল দেয় <obj param="
।
@
প্রতিস্থাপন পাঠ্যের শেষ চিহ্ন চিহ্নিত করতে আবার ডিলিমিটার ব্যবহার করা হয়।
g
বিকল্পটি বিশ্বব্যাপী করতে পতাকা ব্যবহার করা হয়; আপনি যদি প্রতিটি লাইনে কেবল প্রথম উদাহরণটি প্রতিস্থাপন করতে চান তবে আপনি এটি বাদ দিতে পারেন।
আপনি সম্ভবত সেখান থেকে কাজ করতে পারেন কীভাবে বিভিন্ন সংখ্যা যুক্ত করবেন, বা বিয়োগ করবেন বা ভাগ করবেন ইত্যাদি
vim
এবংemacs
এই জাতীয় জিনিসটি করতে পারি তবে এটির জন্য একটি কমান্ড ব্যবহার না করে স্ক্রিপ্ট লেখার প্রয়োজন হতে পারে।