باستخدام السادس كيف يمكنني البحث واستبدال البيان التالي؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

أحتاج إلى استبدال ما يلي:

CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`

إلى

CREATE TABLE IF NOT EXISTS `access`

لقد حاولت

:%s/\/\*\!\d+(.*)\*\//\1/g

لكن هذا لا يبدو أنه يذهب. ما الخطأ الذي افعله؟

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

المحلول

يتطلب VIM التراجع الخلفي + (أو استخدم * بدلاً من ذلك). أيضًا ، تحتاج إلى تراجع عن أقواس التجميع في VIM. هكذا:

:%s/\/\*\!\d\+\(.*\)\*\//\1/g

نعم ، تمتص Posix على الطراز القديم لـ Vim:/

تحرير: كما هو مذكور في التعليقات أدناه ، + يعمل + إذا هربت كـ +. و d في الواقع مدعوم ، عفوًا. تم تحرير مثال Regex لتصحيح هذا. انظر أيضًا مثال Brian Carper للحصول على نسخة أكثر إيجازًا وقابلة للقراءة.

نصائح أخرى

استخدم "السحر للغاية" ، واستخدم المحددات بخلاف الافتراضي لتسهيل القراءة (وتذكر).

:%s@\v/\*!\d+(.*)\*/@\1@g

بدون "السحر للغاية" عليك وضع ضربة خلفية أمام + و () (ولكن ليس أمام * أو بعض الأشياء الأخرى). هذا ليس متسقًا جدًا.

مختلف قليلاً وأكثر كفاءة مع [^*]+ :-)

1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top