আপনি নিম্নলিখিত আদেশটি চেষ্টা করতে পারেন:
:let c=0 | g/^* /let c+=1 | s//\=c.'. '
প্রথমে এটি পরিবর্তনশীল c
( let c=0
) আরম্ভ করে , তারপরে এটি বৈশ্বিক কমান্ড কার্যকর করে g
যা প্যাটার্নটি দেখায় ^*
(রেখার সূচনা, তারপরে একটি তারকাচিহ্ন এবং একটি স্থান)।
যখনই এই প্যাটার্ন সম্বলিত একটি লাইন পাওয়া যায়, বিশ্বব্যাপী কমান্ড কমান্ড executes:
let c+=1 | s//\=c.'. '
এটা পরিবর্তনশীল বৃদ্ধি c
( let c+=1
), তারপর ( |
) এটিকে পরিপূরক ( s
) পূর্ববর্তী ধরণ (অনুসন্ধান //
একটি অভিব্যক্তি (মূল্যায়ন সহ) \=
):
পরিবর্তনশীল বিষয়বস্তু c
ঘনিভূত ( .
) স্ট্রিং সহ'. '
আপনি যদি নিজের বাফার থেকে সমস্ত লাইন পরিবর্তন করতে না চান তবে কেবল একটি নির্দিষ্ট অনুচ্ছেদে, আপনি বিশ্বব্যাপী কমান্ডের মধ্যে একটি পরিসীমা দিতে পারেন। উদাহরণস্বরূপ, কেবলমাত্র লাইনগুলি সংশোধন করতে যাদের সংখ্যা 5 এবং 10 এর মধ্যে রয়েছে:
:let c=0 | 5,10g/^* /let c+=1 | s//\=c.'. '
আপনার যদি রূপান্তর করতে চান এমন বেশ কয়েকটি অনুরূপ তালিকাগুলি সমন্বিত একটি ফাইল থাকে তবে উদাহরণস্বরূপ এই জাতীয় কিছু:
some random stuff some random stuff
* foo 1. foo
* bar 2. bar
* baz 3. baz
some other random stuff some other random stuff
==>
some random stuff some random stuff
* foo 1. foo
* bar 2. bar
* baz 3. baz
* qux 4. qux
some other random stuff some other random stuff
আপনি নিম্নলিখিত কমান্ড দিয়ে এটি করতে পারেন:
:let [c,d]=[0,0] | g/^* /let [c,d]=[line('.')==d+1 ? c+1 : 1, line('.')] | s//\=c.'. '
এটি পূর্ববর্তী কমান্ডের কেবল একটি বৈকল্পিক, যা c
আপনি যখন অন্য তালিকায় স্যুইচ করেন তখন চলকটি পুনরায় সেট করে । আপনি অন্য তালিকায় আছেন কিনা তা সনাক্ত করতে, চলকটি d
সর্বশেষ লাইনের নম্বর সংরক্ষণ করতে ব্যবহৃত হয় যেখানে প্রতিস্থাপন করা হয়েছিল।
গ্লোবাল কমান্ড বর্তমান লাইন নম্বর ( line('.')
) এর সাথে তুলনা করে d+1
। যদি সেগুলি একই হয় তবে এর অর্থ আমরা আগের c
তুলনায় একই তালিকাতে রয়েছি যেমন বাড়ানো ( c+1
), অন্যথায় এর অর্থ আমরা পৃথক তালিকায় আছি, তাই c
পুনরায় সেট করা ( 1
)।
কোনও ফাংশনের অভ্যন্তরে, কমান্ডটি let [c,d]=[line('.')==d+1 ? c+1 : 1, line('.')]
এভাবে পুনরায় লেখা যেতে পারে:
let c = line('.') == d+1 ? c+1 : 1
let d = line('.')
বা এই মত:
if line('.') == d+1
let c = c+1
else
let c = 1
endif
let d = line('.')
কিছু কীস্ট্রোক সংরক্ষণ করতে, আপনি কাস্টম কমান্ডটিও সংজ্ঞায়িত করতে পারেন :NumberedLists
, এটি এমন একটি পরিসীমা গ্রহণ করে যার ডিফল্ট মান 1,$
( -range=%
):
command! -range=% NumberedLists let [c,d]=[0,0] | <line1>,<line2>g/^* /let [c,d]=[line('.')==d+1 ? c+1 : 1, line('.')] | s//\=c.'. '
কখন :NumberedLists
কার্যকর করা হবে <line1>
এবং <line2>
আপনি ব্যবহৃত ব্যাপ্তির সাথে স্বয়ংক্রিয়ভাবে প্রতিস্থাপন করা হবে।
সুতরাং, বাফারে সমস্ত তালিকা রূপান্তর করতে, আপনি টাইপ করতে পারেন: :NumberedLists
10 এবং 20 লাইনের মধ্যে কেবল তালিকা: :10,20NumberedLists
শুধুমাত্র চাক্ষুষ নির্বাচন: :'<,'>NumberedLists
আরও তথ্যের জন্য, দেখুন:
:help :range
:help :global
:help :substitute
:help sub-replace-expression
:help list-identity (section list unpack)
:help expr1
:help :command