ভিজ্যুয়াল নির্বাচনের প্রতিটি লাইনে ভিম ম্যাক্রো


86

আমি আমার মাথার রেখার সংখ্যা নির্ধারণের চেয়ে নির্বাচনের প্রতিটি লাইনে ম্যাক্রো চালাতে চাই to উদাহরণস্বরূপ, আমি রূপান্তর করতে ম্যাক্রো লিখতে পারি:

Last, First

ভিতরে

First Last

এবং আমি এটি এই সমস্ত লাইনে চালিত করতে চাই:

Stewart, John 
Pumpkin, Freddy
Mai, Stefan
...

ভিম গুরু কোন ধারণা?

সম্পাদনা: এটি কেবল একটি উদাহরণ, স্পষ্টতই এটি তুচ্ছ রিজেক্সেবল, তবে এমন অন্যান্য উদাহরণ রয়েছে যা এতো সহজ নয় যে আমি ম্যাক্রো ব্যবহার করতে পছন্দ করব।


4
সত্যি কথা বলতে কি, আমি সম্ভবত রেগেক্সের সাথে এই বিশেষ কাজটি করব। তবে প্রশ্নটি আরও জটিল মামলার জন্য এখনও বৈধ।
জ্যামি ওং

ভিম কেন? আমার মতে সেড বেশি কৃতজ্ঞ।
26:51

8
@ কোগুট: কেন আপনার সম্পাদককে এক লাইনের রেজেক্স দিয়ে আপনার পাঠ্য সম্পাদনা করতে প্রস্থান করবেন?
স্টিফেন

4
ঠিক আছে, আপনি পয়েন্টটি পেয়েছেন;)
কোকোসিং

উত্তর:


154

মনে করুন আপনার কাছে এমন একটি ম্যাক্রো রয়েছে qযা একক লাইনে চলে (এবং থেকে যায়)। তারপরে আপনি এটিকে আপনার নির্বাচনের প্রতিটি লাইনে চালাতে পারেন:

:'<,'>normal @q

(আপনার যদি ইতিমধ্যে একটি গ্রুপের লাইনের বাছাই থাকে তবে কমান্ড লাইনে হিটিং :উত্পাদন :'<,'>করে)

উদাহরণস্বরূপ, নিম্নলিখিত ম্যাক্রো প্রতিটি শব্দের মূলধন করে তবে একটি লাইনে প্রথম:

:let @q="^dwgU$P"

সুতরাং এটি নিম্নলিখিতটিতে চালিত করুন (যেখানে +লাইনগুলি নির্বাচিত হয়েছে)

 0000: a long long time ago
 0001: in a galaxy far away
+0002: naboo was under an attack
+0003: and i thought me and qui-gon jinn
+0004: could talk the federation in
 0005: to maybe cutting them a little slack.

উপরের normal @qআদেশটি দিয়ে, উত্পাদিত হয়:

 0000: a long long time ago
 0001: in a galaxy far away
 0002: naboo WAS UNDER AN ATTACK
 0003: and I THOUGHT ME AND QUI-GON JINN
 0004: could TALK THE FEDERATION IN
 0005: to maybe cutting them a little slack.

@ রজার পেট: আচ্ছা, হ্যাঁ আপনি এটি গল্ফ করতে চেয়েছিলেন :)
রাউম্পিয়ান

4
@ ইম্পিয়ান: আপনার কমান্ডে টাইপো আছে? : আমার জন্য এটি শুধুমাত্র এই মত কাজ করে:'<,'>normal! @q
অলিভার

4
@ অলিভার: আপনার ম্যাপিংগুলি পরীক্ষা করুন - আপনি পুনরায় তৈরি করতে পারেন @q। থেকে :help normal- "যদি [!] দেওয়া হয়, ম্যাপিং ব্যবহার করা হবে না।"
রামপিন

4
@ ইরাম্পোন: ধিক্কার! ... ঠিক বলেছেন! আমি ইয়াঙ্ক্রিং ব্যবহার করি এবং স্পষ্টতই এটির সাথে একটি সমস্যা রয়েছে: ... আপনি ": সাধারণ @ এ" দিয়ে ম্যাক্রো চালাতে পারবেন না। : এটা এখনো সম্ভব নয়, কিন্তু আপনার সাথে নির্বাহ করতে পারেন "স্বাভাবিক @a!" (Yankring সাহায্যে ডক্স থেকে)
অলিভার

4
আমি ব্যক্তিগতভাবে ম্যাপ পছন্দ @ভালো চাক্ষুষ মোডে: vnoremap @ :normal @। আপনি যেভাবে @aপ্রত্যাশা করেছিলেন সেভাবে আপনি এখনও করতে পারেন (তবে আপনাকে প্রবেশের পরেও আঘাত করতে হবে :()
লন্ডন রব

19

লাইনগুলি নির্বাচন করুন এবং :কমান্ড মোডে প্রবেশ করতে টিপুন। ভিম স্বয়ংক্রিয়ভাবে পূরণ করবে '<,'>, যা নির্বাচিত লাইনে সীমাটি সীমাবদ্ধ করে। উদাহরণস্বরূপ আপনি :sঅদলবদল করতে কমান্ডটি ব্যবহার করতে পারেন :

:'<,'>s/\(\w\+\), \(\w\+\)/\2, \1/

এটি ভিজ্যুয়াল নির্বাচনের প্রতিটি লাইনে কমা দ্বারা পৃথক করা দুটি শব্দের অদলবদল করবে।

এছাড়াও আপনি ব্যবহার করতে পারেন '<এবং '>অন্য কোন বুকমার্ক বা লাইন অবস্থান, যেমন একটি আন্দোলন কমান্ডের অংশ হিসাবে, স্বাভাবিক মোডে তাই মত d'<চাক্ষুষ নির্বাচন প্রথম লাইনের শুরু পর্যন্ত বর্তমান কার্সার অবস্থানে থেকে মুছে ফেলবে। ব্লকটি আরও দৃশ্যমানভাবে হাইলাইট না করা হলেও চিহ্নগুলি কার্যকর থাকে।

আপনি যদি প্রতিটি লাইনে একটি রেকর্ড করা ম্যাক্রো পুনরায় খেলতে চান তবে আপনাকে :normalকমান্ডটি দিয়ে ম্যাক্রো চালানো দরকার । দুর্ভাগ্যক্রমে :normalকমান্ডটি বিভিন্ন লাইনে কাজ করে না, তবে আপনি :globalকমান্ডের সাহায্যে এটি ঠিক করতে পারেন । এটি :exপ্রতিটি লাইনে একটি কমান্ড চালায় যা একটি রেজেক্সের সাথে মেলে, তাই আপনি এটি করতে পারেন:

:'<,'>g/^/ norm @a

ব্যাখ্যা:

:'<,'>       for every line in the visual block
g/^/         on every line that matches the regex /^/ - i.e. every line
norm         run in normal mode
@a           the macro recorded in a

এটি গৃহীত উত্তরের চেয়ে ভাল কারণ এটি ম্যাক্রোগুলিকে সমর্থন করে যা নতুন লাইন যুক্ত করে।
জান ওয়ার্চো

@Dave, কারবি হয়তো ভাল বিনিময় হবে ^সঙ্গে .শুধুমাত্র লাইন কিছু টেক্সট আছে উপর ম্যাক্রো রান করতে, না?
সেরজিওআরাউজো

1

আপনি নীচে ফাংশনটি আপনার যুক্ত করতে পারেন ~/.vimrcবা কেবল এটি আপনার ব্রাউজারে এবং চলমান অনুলিপি করতে পারেন:@+

fun! RunMacroOverSelection(macroname)
    execute "'<,'>normal @". a:macroname
endfun
com -nargs=1 Rover :call RunMacroOverSelection(<f-args>)
nnoremap <leader>r :Rover<space>

সুবিধাটি হ'ল আপনি ভিজ্যুয়াল নির্বাচনের উপর যে কোনও ম্যাক্রো প্রয়োগ করতে পারেন। আপনাকে যুক্তি হিসাবে ম্যাক্রো চিঠিটি দেওয়া দরকার, যেমন:

:Rover a
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.