همة:كيف أبحث عن كلمة لا تليها كلمة أخرى؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

سؤال أساسي جدًا، أحاول كتابة تعبير عادي في Vim لمطابقة أي عبارة تبدأ بـ "abc " يتبعها مباشرة أي شيء آخر غير "defg".

لقد استخدمت "[^defg]" لمطابقة أي حرف منفرد بخلاف d أو e أو f أو g.

كانت غريزتي الأولى هي المحاولة /abc [^\(defg\)] أو /abc [^\<defg\>] ولكن لا أحد من هؤلاء يعمل.

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

المحلول

وهنا سلسلة البحث.

/abc \(defg\)\@!

يُطلق على المفهوم الذي تبحث عنه تأكيد النظرة السلبية إلى الأمام.جرب هذا في vim لمزيد من المعلومات:

:help \@!

نصائح أخرى

يسبق أو يتبع؟

إذا كان أي شيء يبدأ بـ "abc" ولم يتبعه (على الفور) "defg"، فأنت تريد الحل bmdhacks.

إذا كان أي شيء يبدأ بـ "abc" ولم يسبقه (على الفور) "defg"، فأنت تريد نظرة خلفية سلبية:

/\%(defg\)\@<!abc /

سيطابق هذا أي ظهور لـ 'abc' طالما أنه ليس جزءًا من 'defgabc'.يرى :help \@<! لمزيد من التفاصيل.

إذا كنت تريد مطابقة 'abc' طالما أنها ليست جزءًا من 'defg.*abc'، فما عليك سوى إضافة .*:

/\%(defg.*\)\@<!abc /

مطابقة "abc" فقط على الأسطر التي لا يظهر فيها "defg" هي مطابقة:

/\%(defg.*\)\@<!abc \%(.*defg\)\@!/

على الرغم من ذلك، إذا كنت تفعل ذلك من أجل الاستبدال فقط، فيمكنك تسهيل ذلك من خلال الدمج :v// و :s//

:%v/defg/s/abc /<whatever>/g

سيؤدي هذا إلى استبدال "<whatever>" بـ "abc" في جميع الأسطر التي لا تحتوي على "defg".يرى :help :v للمزيد من.

هيا بنا، هذا شعر:

/\%(\%(.\{-}\)\@<=XXXXXX\zs\)*

(استبدل XXXXXX بكلمة البحث).سيؤدي هذا إلى البحث عن كل ما يفعله لا تحتوي على XXXXXX.أتخيل لو فعلت:

/abc \%(\%(.\{-}\)\@<=defg\zs\)*

قد يعمل هذا كما تريد.آمل أن يساعد هذا قليلا!

/abc\ [^d][^e][^f][^g]

إنه أمر مرهق جدًا بالنسبة للكلمات الكبيرة، لكنه يعمل كالسحر.

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