كيف أحدد "الكلمة الموجودة أسفل المؤشر" في سطر أوامر VIM؟

StackOverflow https://stackoverflow.com/questions/48642

  •  09-06-2019
  •  | 
  •  

سؤال

أريد أن أكتب أمرًا يحدد "الكلمة الموجودة أسفل المؤشر" في VIM.على سبيل المثال، لنفترض أن لدي المؤشر على الكلمة وأجعلها تظهر مرتين.على سبيل المثال، إذا كانت الكلمة "abc" وأريد "abcabc" فيمكنني كتابة:

:s/\(abc\)/\1\1/

ولكن بعد ذلك أود أن أتمكن من تحريك المؤشر إلى "def" واستخدام نفس الأمر لتغييره إلى "defdef":

:s/\(def\)/\1\1/

كيف يمكنني كتابة الأمر في سطر الأوامر بحيث يقوم بذلك؟

:s/\(*whatever is under the commandline*\)/\1\1
هل كانت مفيدة؟

المحلول

<cword> هي الكلمة الموجودة تحت المؤشر (:help <cword>).

آسف، كان يجب أن أكون أكثر اكتمالا في هذه الإجابة.

يمكنك تعيين أمر إليه، أو ستعمل هذه السلسلة من ضغطات المفاتيح للكسالى:

b #go to beginning of current word
yw #yank to register

وبعد ذلك، عندما تكتب النمط الخاص بك، يمكنك الضغط على <control-r>0<enter> والتي سوف تلصق في الأمر الخاص بك محتويات السجل 0.

يمكنك أيضًا إصدار أمر لهذا مثل:

:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/

والذي سيؤدي إلى تعيين ضرب "\" و "w" في نفس الوقت لاستبدال سطر الأوامر الخاص بك به

:s/\(<currentword>\)/

نصائح أخرى

أثناء وجودك في وضع سطر الأوامر، كنترول+ر كنترول+دبليو سيتم إدراج الكلمة تحت المؤشر.

انظر المساعدة ل c_CTRL-R للحصول على قائمة بجميع السجلات الخاصة الأخرى:

:help c_CTRL-R
yiwP

yiw:يانك الكلمة الداخلية (الكلمة تحت المؤشر).يقوم هذا الأمر أيضًا بنقل المؤشر إلى بداية الكلمة.

P:لصق قبل المؤشر.

يمكنك بعد ذلك تعيين على سبيل المثال: < ALT > - D إلى هذا الأمر:

:nmap < ALT >-D yiwP

طريقة أخرى سهلة للقيام بذلك هي استخدام * يأمر.

في الوضع العادي، عندما تكتب فوق كلمة واحدة

*:s//\0\0<Enter>

* يجعل نمط البحث هو الكلمة الحالية (على سبيل المثال\<اي بي سي\>).

:s// يقوم بالاستبدال باستخدام نمط البحث الحالي، و \0 في قسم الاستبدال هي السلسلة المتطابقة.

يمكنك بعد ذلك تكرار هذا السلوك، على سبيل المثال فوق كلمة "def"، إما عن طريق كتابة نفس الشيء مرة أخرى، أو عن طريق الكتابة

*@:

@: فقط يكرر الأمر ex الأخير، دون الحاجة إلى <Enter>، وهو الاستبدال في هذه الحالة.

يمكنك أيضًا تسجيل ماكرو سريع للقيام بذلك باستخدام ملف q يأمر

qd*:s//\0\0<Enter>q

ثم كرر ذلك لمحتوى قلوبكم عن طريق الكتابة

@d

عندما تريد مضاعفة الكلمة.نظرًا لأن هذا أقل بحرف واحد فقط من الحل السابق، فقد لا يكون الأمر يستحق ذلك بالنسبة لك - إلا إذا كنت ستنفذ أوامر سابقة أخرى بين مضاعفة الكلمات، مما قد يغير سلوك @:

تحتاج إلى الهروب من الخطوط المائلة العكسية داخل التعيين.يمكنك أيضًا تضمين السلسلة البديلة داخل التعيين.

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>
ywPx

سوف تفعل ما تصفه.

ywPxw

سيؤدي أيضًا إلى تقدم المؤشر إلى الكلمة التالية.

@user11211 لديه الطريقة الأكثر مباشرة لتكرار الكلمة تحت المؤشر:

yiwP

اسحب الكلمة الداخلية (يحرك المؤشر إلى بداية الكلمة)، ثم الصق (قبل المؤشر).

على سبيل المثال.straight[t]forward ----> straightforwar[d]straightforward

[] هو المؤشر

للتفصيل...

ربما تريد أن يكون المؤشر يتبع كلمتك المكررة:

yiwPea

مستقيم[t]إلى الأمام ----> مباشرمباشر[]

ملحوظة:

yiw

هي كلمة داخلية فارغة (بدون مسافة بيضاء)

yaw

يتم سحب كل الكلمات (بما في ذلك المسافات البيضاء الزائدة).

yawPea

وبالتالي فهي كلمة مكررة بما في ذلك المسافة البيضاء، وموضع المؤشر.

مستقيم[t]إلى الأمام ----> مباشر واضح[]

" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top