একাধিক কার্সার ব্যবহার করা কোন ভিমার জিনিস নয়
আমি যেমন মাল্টিমি কার্সার (এমনকি একটি প্লাগইন সহ) ব্যবহার করে মন্তব্যে বলেছিলাম যে আসলেই "ভিম পথে অনুসরণ করা" নয়, আমি পুরোপুরি বুঝতে পারি যে সাব্লাইম-টেক্সট থেকে আগত কারও পক্ষে এটি আকর্ষণীয় তবে আপনি প্রায়শই বিকল্প খুঁজে পেতে পারেন যা কমপক্ষে ভিম অন্তর্নির্মিত বৈশিষ্ট্যগুলির সাথে দক্ষ হিসাবে।
অবশ্যই, এই বিকল্প সমাধানগুলি সন্ধান করা সর্বদা সহজ নয় এবং কখনও কখনও সময় লাগে তবে এটি আপনার ভিমের অভিজ্ঞতার সাথে সহজ হয়ে যায় এবং আপনি দেখতে পাবেন যে সময়ের সাথে একাধিক কার্সার আপনার কাছে সম্পূর্ণ অকেজো বলে মনে হবে।
এটি দুর্দান্ত তবে আমি কীভাবে বিকল্প উপায় খুঁজে পাব?
কোনও সার্বজনীন উত্তর নেই যেহেতু এটি আপনি যা করার চেষ্টা করছেন তার উপর অনেক নির্ভর করে, আমি প্রথমে চেষ্টা করার জন্য প্রথমে কিছু ইঙ্গিত দেওয়ার চেষ্টা করব:
ডট কমান্ড .
ডট কমান্ড সম্ভবত ভিমের অন্যতম শক্তিশালী সরঞ্জাম, এটি আমাদের শেষ পরিবর্তনটি পুনরাবৃত্তি করতে দেয়। আমি তার প্র্যাকটিকাল ভিমে ড্রু নীলের চেয়ে এর চেয়ে ভাল ব্যাখ্যা করতে পারিনি । আমি মনে করি যে প্রতিটি ভিমারের এই বইটি পড়া বিবেচনা করা উচিত।
এই কমান্ডটির শক্তি হ'ল শেষ পরিবর্তনটি একটি চরিত্র, একটি লাইন বা একটি সম্পূর্ণ ফাইলের সাথে কাজ করা একটি ক্রিয়া হতে পারে। উদাহরণস্বরূপ, আপনি সন্নিবেশ মোডটি প্রবেশ করার মুহুর্তের সাথে এবং আপনি স্বাভাবিক মোডে ফিরে যাওয়ার মুহুর্তের মাধ্যমে একটি পরিবর্তন সীমিত করা যায়।
এটি মনে রেখে আপনি মাল্টিকার্সারের সাথে যা করতে চেয়েছিলেন তা করা সহজ:
প্রথমে আমাদের পরিবেশটি সেট আপ করা যাক: আপনার পরামর্শ অনুসারে লিখুন
\section[]{}
তারপরে পুনরাবৃত্তিযোগ্য পরিবর্তন করুন
কার্সারটি এখন চলছে }
, চরিত্রটিতে F[
ফিরে যেতে আঘাত করুন [
। তারপরে সন্নিবেশ মোডটি প্রবেশ করুন i
এবং টাইপ করুন My first section in this book
এবং এর সাথে স্বাভাবিক মোডে ফিরে যান ESC
:
\section[My first section in this book]{}
এবং এখানে ম্যাজিক অংশটি আসে: আসুন f{
অক্ষরটিতে কার্সারটি লিখুন {
এবং .
শেষ পরিবর্তনটির পুনরাবৃত্তি করতে আঘাত করুন :
\section[My first section in this book]{My first section in this book}
ডট কমান্ডের সমস্ত চ্যালেঞ্জ হ'ল পুনরাবৃত্তীয় পরিবর্তনগুলি কীভাবে করা যায় তা শিখতে হবে: এটি ভিমকে গ্রুকিংয়ের সাথে আসবে তবে মূলটি কীভাবে আপনার পরিবর্তনকে পুনরাবৃত্তিমূলকভাবে করা যায় তা বোঝা।
উদাহরণস্বরূপ কোনও রেখার শেষে একটি আধা কোলন সন্নিবেশ করানোর জন্য আপনি এর A;
পরিবর্তে ব্যবহার করতে পছন্দ করবেন
$a;
। কেন?
কারণ A;
একটি পারমাণবিক ক্রিয়া তৈরি করে তাই আপনি যখন .
অন্য লাইনে ব্যবহার করবেন তখনই আপনি লাইনটিতে থাকুন না কেন আপনি শেষ প্রান্তে আধা কোলন প্রবেশ করান। যখন $a;
আপনি ব্যবহার করার সময় আপনার পরিবর্তনটিকে দুটি অংশে বিভক্ত করেন $a
এবং সন্নিবেশ করানো হয় তবে এটি ;
ব্যবহার .
করা হলে কার্সারের বর্তমান অবস্থানে আধা কোলন প্রবেশ করানো হবে।
দ্রষ্টব্য ভিমে ম্যাজিক সূত্রটি n.
। সত্যিই শীতল ওয়ার্কফ্লো হল:
- আপনি যে জায়গাটি দিয়ে একটি সম্পাদনা করতে চান তার জন্য অনুসন্ধান করুন
/pattern
- আপনার পুনরাবৃত্তিযোগ্য সম্পাদনা করুন
n
সম্পাদনা করার জন্য পরবর্তী জায়গায় যেতে ব্যবহার করুন
.
সম্পাদনা পুনরাবৃত্তি করতে ব্যবহার করুন
- শেষ দুটি পদক্ষেপ পুনরাবৃত্তি: আপনি বিশ্বের রাজা (বা কমপক্ষে সম্পাদনা)
ম্যাক্রো
ম্যাক্রোস ভিমের আরও একটি অত্যন্ত গুরুত্বপূর্ণ সরঞ্জাম, যেহেতু এটি আপনাকে কীস্ট্রোকের ক্রম রেকর্ড করতে এবং পুনরায় টাইপ করার মতো পুনরাবৃত্তি করতে দেয়।
আমি উদাহরণ হিসাবে আপনার দ্বিতীয় ব্যবহারের কেসটি ব্যবহার করব:
variable1 = 2
my_variable2 = 12
var3 = 14
আবারও গুরুত্বপূর্ণটি হল আপনার ম্যাক্রোগুলিকে কীভাবে দক্ষ করা যায় তা শিখতে হবে (আমি ঠিক এর পরে একটি পাল্টা উদাহরণ দেব):
শব্দের উপর আপনার কার্সার রাখুন variable1
এবং এর সাথে আপনার ম্যাক্রো রেকর্ড করতে শুরু করুন
qq
। এর অর্থ "নামের রেজিস্টারে আমার ভবিষ্যতের সমস্ত কীস্ট্রোক রেকর্ড করা শুরু করুন q
"।
আপনার সম্পাদনা টাইপ করা শুরু করুন:
0
লাইনের শুরুতে যেতে
e
প্রথম শব্দের শেষে যেতে
a
আপনার কার্সার পরে সংযোজন
.someStuff
চেয়েছিলেন পাঠ্য সংযোজন
<Esc>
সন্নিবেশ বন্ধ করতে
j
পরের লাইনে যেতে
q
ম্যাক্রো রেকর্ডিং বন্ধ করতে
তুমি পাবে:
variable1.someStuff = 2
my_variable2 = 12
var3 = 14
- এখন আপনি নিজের সম্পাদনার পুনরাবৃত্তি করতে ম্যাক্রো ব্যবহার করতে পারেন। আপনি সম্পাদনার জন্য ডান লাইনে থাকায় আপনি কেবল ম্যাক্রোর সাথে এটি সম্পাদন করতে পারেন
@q
। যেহেতু আমরা এটি ব্যবহার করতে পারছি এটি দু'বার কার্যকর করতে চাই 2@q
এবং আপনি নিম্নলিখিত ফলাফল পাবেন:
variable1.someStuff = 2
my_variable2.someStuff = 12
var3.someStuff = 14
দ্রষ্টব্য 1 আপনি যেমন খেয়াল করেছেন, 0ea
ম্যাক্রোর শুরুতে ব্যবহার করা সত্যিই গুরুত্বপূর্ণ ছিল। প্রকৃতপক্ষে, আপনি যদি ম্যাক্রো রেকর্ডিং করে আবার কার্যকর করার আগে প্রথম শব্দের শেষে আপনার কার্সারটি রেখেছিলেন তবে আপনার ফলাফলটি এমন হত:
variable1.someStuff = 2
my_variable2 = 12.someStuff
var3 = 14.someStuff
আপনার কার্সার হিসাবে পাঠ্যটি লাইন পরিবর্তনের পরে কার্সারের অবস্থানে প্রবেশ করানো হত (যেমন এই ক্ষেত্রে রেখার শেষ)
দ্রষ্টব্য 2 ম্যাক্রোগুলি অত্যন্ত শক্তিশালী এবং আপনি যখন তাদের সাথে স্বাচ্ছন্দ্য বোধ করেন আপনি এমনকি পুনরাবৃত্ত ম্যাক্রোগুলি তৈরি করতে পারেন। এখানে আপনার ম্যাক্রো হতে পারে:
`0ea.someStuff<Esc>j@q`
ফাইনালটি @q
ব্যবহারের পরিবর্তে নিজেই ম্যাক্রো ডাকত 2@q
; আপনি সবেমাত্র ব্যবহার করেছেন @q
এবং সমস্ত কাজ সম্পন্ন করা হয়েছে।
ভিজ্যুয়াল ব্লক
এখানে আরও একটি কৌশল এসেছে যা সরাসরি আপনার ব্যবহারের ক্ষেত্রে প্রয়োগ হয় না তবে একই সাথে একটি বিশাল সংখ্যক লাইন সম্পাদনা করতে সত্যই কার্যকর হতে পারে। আসুন সিএসএস কোডের এই এক্সট্রাক্টটি পান:
li.one a{ background-image: url('/images/sprite.png'); }
li.two a{ background-image: url('/images/sprite.png'); }
li.three a{ background-image: url('/images/sprite.png'); }
আপনি যদি sprites থেকে সরানো images
হয় components
?
আচ্ছা আপনি উপর আপনার কার্সার লাগাতে পারেন i
এর images
টিপুন <C-v>
। এটি ভিজ্যুয়াল ব্লক মোড শুরু করবে যা ব্লকগুলি নির্বাচন করতে দেয়। আপনি t/
যে শব্দটি পরিবর্তন করতে চান তা নির্বাচন করতে এবং শব্দের 2j
সমস্ত উপস্থিতি নির্বাচন করতে পারেন ।
এর পরে আপনাকে কেবল c
শব্দটি পরিবর্তন করতে টাইপ করতে হবে এবং তারপরে components
। আপনি যখন সন্নিবেশ মোড থেকে বাইরে যাবেন আপনি দেখতে পাবেন:
li.one a{ background-image: url('/components/sprite.png'); }
li.two a{ background-image: url('/components/sprite.png'); }
li.three a{ background-image: url('/components/sprite.png'); }
গ্লোবাল কমান্ড
গ্লোবাল কমান্ড হ'ল একটি সরঞ্জাম যা প্যাটার্নের সাথে মিল রেখে লাইনগুলিতে প্রাক্তন মোড কমান্ড প্রয়োগ করতে দেয়, আবার একাধিক কার্সার প্রয়োজন না করে ভিন্ন জায়গায় একই পরিবর্তন প্রয়োগ করার এক ভাল উপায়।
বাক্য গঠনটি নিম্নলিখিত:
:[range] g / pattern / command
[range]
প্যারামিটার সম্পর্কে আরও তথ্যের জন্য দয়া করে দেখুন :h :range
। আমি এখানে এটি বিশদ করব না, আমি কেবল স্মরণ করিয়ে দেব যে %
পুরো ফাইলটি '<,'>
উপস্থাপন করে, সর্বশেষ নির্বাচনকে 1,5
উপস্থাপন করে এবং ফাইলটির 1 থেকে 5 লাইন উপস্থাপন করে।
এই পরামিতিটি লাইনগুলি সংজ্ঞায়িত করে যা বৈশ্বিক কমান্ড দ্বারা চিকিত্সা করা হবে। যদি কোনও ব্যাপ্তি নির্দিষ্ট না করা থাকে, তবে গ্লোবাল কমান্ড %
ডিফল্টরূপে ব্যবহার করবে ।
[প্যাটার্ন] যুক্তি হ'ল অনুসন্ধানের ধরণ যা আপনি অনুসন্ধান ইঞ্জিনের সাথে ব্যবহার করতে ব্যবহৃত হয়। এটি অনুসন্ধানের ইতিহাসকে সংহত করার সাথে সাথে আপনি এই ক্ষেত্রটি ফাঁকা ছেড়ে দিতে পারেন এবং বৈশ্বিক কমান্ড অনুসন্ধানের ইতিহাসে সর্বশেষ অনুসন্ধান প্যাটার্নটি ব্যবহার করবে।
অবশেষে [কমান্ড] প্যারামিটারটি একটি প্রাক্তন কমান্ড হিসাবে আপনি সম্ভবত অভ্যস্ত হন।
এখন গ্লোবাল কমান্ডের আচরণটি বেশ সহজ:
- [পরিসীমা] প্যারামিটারে সংজ্ঞায়িত সমস্ত লাইনের মধ্য দিয়ে আইট্রেট করুন
- যদি বর্তমান লাইনটি নির্ধারিত প্যাটার্নের সাথে মেলে, কমান্ডটি প্রয়োগ করুন
[কমান্ড] প্যারামিটারটি হ'ল প্রাক্তন কমান্ড, আপনি অনেক কিছুই করতে পারেন। আসুন নীচের সিউডো কোডটি গ্রহণ করুন যা আকর্ষণীয় নয় এবং প্রচুর ডিবাগিং বার্তা রয়েছে:
var myList = null
var i = 0
myList = new List()
echo "List instantiated"
for (i=0; i<10; i++)
myList.Add(i)
echo i . " added to the list"
echo "end of for loop"
এখন বলি যে আপনি নিশ্চিত যে এই কোডটি কাজ করে এবং আপনি এই অকেজো echo
বিবৃতি মুছতে চান :
আপনি সম্পূর্ণ বিশ্বব্যাপী আপনার বিশ্বব্যাপী কমান্ড প্রয়োগ করতে পারেন যাতে আপনার কমান্ডটি %
(বা %
পূর্বনির্ধারিত পরিসীমা না হওয়ায় কিছু না দিয়ে ) প্রেন্ডিং করতে হবে ।
আপনি জানেন যে আপনি যে লাইনগুলি মুছতে চান তা সমস্ত ধরণের সাথে মেলে echo
আপনি এই রেখাগুলি মুছতে চান যাতে আপনাকে কমান্ডটি ব্যবহার :delete
করতে হবে যা সংক্ষেপে সংক্ষেপিতও হতে পারেd
সুতরাং আপনাকে কেবল নিম্নলিখিত ফাংশনটি ব্যবহার করতে হবে:
:%global/echo/delete
যা সংক্ষিপ্ত হিসাবেও করা যেতে পারে
:g/echo/d
লক্ষ্য করুন %
অদৃশ্য, global
যেমন সংক্ষিপ্ত করা হয় g
এবং delete
যেমন d
। আপনি কল্পনা করতে পারেন ফলাফল হিসাবে:
var myList = null
var i = 0
myList = new List()
for (i=0; i<10; i++)
myList.Add(i)
দ্রষ্টব্য 1 একটি গুরুত্বপূর্ণ বিষয় যা আমাকে বুঝতে সময় লাগল তা হ'ল
normal
কমান্ডটি একটি প্রাক্তন কমান্ড যার অর্থ আপনি এটি বিশ্বব্যাপী কমান্ড দিয়ে ব্যবহার করতে পারেন। এটি সত্যই শক্তিশালী হতে পারে: আসুন আমরা বলি যে আমি সমস্ত লাইন প্রতিলিপি করতে চাই যার প্রতিধ্বনি রয়েছে, আমার কোনও ম্যাক্রো বা এমনকি যাদু সূত্রের প্রয়োজন নেই n.
। আমি সহজভাবে ব্যবহার করতে পারেন
:g/echo/normal YP
এবং ভয়েলা:
var myList = null
var i = 0
myList = new List()
echo "List instantiated"
echo "List instantiated"
for (i=0; i<10; i++)
myList.Add(i)
echo i . " added to the list"
echo i . " added to the list"
echo "end of for loop"
echo "end of for loop"
দ্রষ্টব্য 2 "আরে আমি যদি লাইনগুলিতে আমার কমান্ডটি ব্যবহার করতে চাই যা কোনও নির্দিষ্ট প্যাটার্নের সাথে মেলে না?"
global
একটি বিপরীত কমান্ড vglobal
সংক্ষেপিত হয়েছে v
যা হ'ল কমান্ডটি global
[প্যাটার্ন] প্যারামিটারের সাথে মেলে না এমন লাইনে প্রয়োগ করা হবে ঠিক এর মতোই কাজ করে । আমরা যদি আবেদন করি এইভাবে
:v/echo/d
আমাদের পূর্ববর্তী উদাহরণে আমরা পাই:
echo "List instantiated"
echo i . " added to the list"
echo "end of for loop"
delete
কমান্ড লাইন যা অন্তর্ভুক্ত করা হয়নি উপর প্রয়োগ করা হয়েছে echo
।
এখানে আমি আশা করি যে এই কয়েকটি ইঙ্গিতগুলি আপনার মাল্টি কার্সার প্লাগইন থেকে কীভাবে মুক্তি পাবে এবং ভিমকে ভিম উপায়ে ব্যবহার করবে সে সম্পর্কে ধারণা দেবে ;-)
যেহেতু আপনি কল্পনা করতে পারেন এই উদাহরণগুলি বেশ সহজ এবং স্রেফ এটি প্রমাণ করার জন্য তৈরি করা হয়েছে যে আপনি যখন ভিমের পথ অনুসরণ করেন তখন আপনাকে খুব কমই বেশ কয়েকটি কার্সারের প্রয়োজন হয়। আমার পরামর্শটি এমন হবে যখন আপনি এমন কোনও পরিস্থিতির মুখোমুখি হন যেখানে আপনি মনে করেন এটি কার্যকর হবে, এটিকে লিখুন এবং আরও ভাল সমাধানের জন্য কিছু সময় নিন। 99% সময় আপনি শেষ পর্যন্ত এটি করার জন্য একটি দ্রুত / আরও দক্ষ উপায় খুঁজে পাবেন।
এছাড়াও আমি নিজেকে আরও একবার পুনরাবৃত্তি করব তবে আমি আপনাকে ড্রইউ নিলের প্রাকটিক্যাল ভিম পড়তে উত্সাহিত করি
কারণ এই বইটি "ভিমে কীভাবে বা এটি করা যায়" সম্পর্কিত নয়, এটি "ভিম পদ্ধতিতে কীভাবে ভাবতে শিখতে হবে" সম্পর্কে নয় যা আপনাকে আপনার ভবিষ্যতের সমস্যার নিজের সমাধানটি একটি ভাল উপায়ে তৈরি করতে দেয়।
পিএস বিশেষভাবে তার লেখার সম্পাদনার কাজ এবং তিনি এই দীর্ঘ পোস্টে সংশোধন করেছেন বলে @ অ্যালেক্স স্ট্রাগিজকে ধন্যবাদ জানায়।