باستخدام السادس كيف يمكنني البحث واستبدال البيان التالي؟
سؤال
أحتاج إلى استبدال ما يلي:
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
لا تنتمي إلى StackOverflow