فيم: كيف أستبعد كلمة بأكملها من بحثي؟

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

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

My first instinct was to try /abc [^\(defg\)] or /abc [^\] but neither one of those works.

0
هل تقصد مسبقا؟ أو متبوع؟ يبدو أن الأمثلة الخاصة بك تشير إلى أن يتبعها.
وأضاف المؤلف rampion, مصدر

4 إجابة

سابقة أو متبوعة؟

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

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

/\%(defg\)\@

This will match any occurance of 'abc ' as long as it's not part of 'defgabc '. See :help \@ for more details.

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

/\%(defg.*\)\@

لا تتطابق مطابقة "abc" فقط مع الأسطر التي لا يحدث فيها "defg":

/\%(defg.*\)\@

Although, if you're just doing this for a substitution, you can make this easier by combining :v// and :s//

:%v/defg/s/abc //g

This will substitute '' for 'abc ' on all lines that don't contain 'defg'. See :help :v for more.

0
وأضاف

هنا نذهب ، هذا هو واحد شعر:

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

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

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

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

0
وأضاف

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

إنه أمر مرهق للغاية للكلمات الأكبر ، ولكنه يعمل مثل السحر.

0
وأضاف
لن هذا أيضا لا تتطابق مع "abc daaa"؟
وأضاف المؤلف Paul Tomblin, مصدر

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

/abc \(defg\)\@!

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

:help \@!
0
وأضاف
+1 لدي هذا السؤال لفترة من الوقت. أضع تعليقًا كرسالة غير مرغوب فيها إذا لم أكن خائفة من أن يؤذي مندوبك.
وأضاف المؤلف xdhmoore, مصدر
للسجل ، أنا مستخدم emacs :-)
وأضاف المؤلف bmdhacks, مصدر