سؤال

كيف يمكنني استبدال أول عشرة أحرف خط فيها تلك عشرة أحرف تطابق نمط معين مع أول عشرة أحرف من خط أعلاه ؟

تحرير:لم يكن واضحا ما إذا كنت تطلب استبدال أول عشر حرفا فيها المباراة يمكن أن تظهر في أي مكان داخل الخط, لذلك ربما أن الجواب إذا كان يتعامل مع هذه الحالة (دعوة هذه الحالة ب و المقصود حالة واحدة؟)

هل كانت مفيدة؟

المحلول

وPrehaps:

:%s/^\(.\{10}\)\(.*\n\)abcdefghij\(.*\)/\1\2\1\3/

وأين ABCDEFGHIJ "عبارة عن سلسلة 10 حرف على خط 2ND

نصائح أخرى

وشيء من هذا القبيل سوف تعمل:

%s/^.\{10\}/\=strpart(get(getbufline("", line(".")-1), 0, ""), 0, 10)/

وحيث ^.\{10\} هو النمط الفعلي.

%s/                      # substitute all lines matching…
^.\{10\}                 # your pattern
/                        # …with…
\=                       # an expression:
strpart(                 # gets the part of a string
  get(                   # gets an element of a list
    getbufline(          # gets a list of lines from the current buffer
      "", line(".")-1)   # getbufline() the line before the current line
  , 0, "")               # get() first line in buffer, default to ""
, 0, 10)                 # strpart() first ten characters
/                        # …end of substitution
:2,$g/<pattern>/s/^.\{10}/\=strpart(getline(line(".")-1),0,10)
  • 2,$ لدينا مجموعة (كما في السطر الأول لا يوجد لديه السطر السابق)
  • g// يتيح لك تشغيل الأوامر على الخطوط التي تتطابق مع نمط معين.
  • s/^.\{10}/ سيتم استبدال أول 10 شخصيات من خط
  • \= يتيح لك استبدال نتيجة همة التعبير في :s//
  • line(".") هو رقم السطر الحالي
  • getline(line(".")-1) نص السطر السابق
  • strpart(getline(line(".")-1),0,10) هو أول 10 شخصيات من السطر السابق

على سبيل المثال 2,$g/frog/s/^.\{10}/\=strpart(getline(line(".")-1),0,10) تغيير:

أنا أحب أكلing mangos
قبل أن تقلىing frogs legs
أتمنى حad a puppy
أعطت Dad a frog

إلى هذا:

أنا أحب أكلing mangos
أنا أحب أكلing frogs legs
أتمنى حad a puppy
أتمنى حad a frog

وإذا كان لدي عمل معقد مثل أنني عادة تسجيل ماكرو باستخدام الأمر q. شيء من هذا القبيل (غير مجربة):

/<pattern>
qq
10x
k
10yl
j
P
n
q

وبعد ذلك قضية repeatedy أن الماكرو @q مسبوقة اختياريا مع العد.

هل يمكن استخدام البحث والاستبدال:

:7,9 s/foo/bar/c

وهذا المثال بالبحث عن خط 7-9 لكل قوع "فو"، ويستبدلها مع "بار"، يسأل عن تأكيد على كل ضرب. إذا كنت لا تريد التأكيد، إسقاط ج في نهاية المطاف. اختيار مجموعة النحو الذي تراه مناسبا، وهذا يجب أن تحصل على المكان الذي تريد

فقط باستخدام همة طلبات وإخراج/لصق..نظرا محتويات الملف من..

1234567890abcdef
qwertyuiopasdfgh

مع المؤشر على س ، 10x, الملف يصبح:

1234567890abcdef
asdfgh

نقل المؤشر إلى السطر الأول (باستخدام k سوف تفعل ذلك) ، ثم القيام 10yl (نثر 10 شخصيات صحيح)

ثم نقل مرة أخرى إلى أسفل سطر واحد ، j, و لصق P (الحالة العلوي ، للصق تحت المؤشر) و الملف يصبح:

1234567890abcdef
1234567890asdfgh

باختصار, بدءا المؤشر على سؤال:

10xk10yljP

..والتي يمكن لصق أو تعيين ماكرو

سيكون أقصر إذا كان هناك واضح اختصار لصق عن طريق الكتابة لكن لم أجد شيء من هذا القبيل

خيار واحد هو بشكل لا يصدق غامضة تبحث regex بحث/استبدال..

البصرية الخط حدد الهدف خطوط تشغيل البحث التالية-و-استبدال:

:'<,'>s/\(\(.\{10\}\).*\)\n\(.\{10\}\)\(.*\)$/\1\r\2\4/

أساسا الاستيلاء عليه..

  • \1 - كامل السطر الأول
  • \2 - أول 10 شخصيات (في مجموعة متداخلة)
  • أ لينيبريك
  • \3 - أول عشرة أحرف من الخط الثاني
  • \4 - بقية السطر الثاني

ثم يبني على خطين كما \1\n\2\4 - استكمال الخط الأول ، لينيبريك ، أول 10 شخصيات أولا ما تبقى من الثانية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top