إذا كانت المتطابقة (G: الاحتمالات ، "استخدام REVEREFENCES بعد regex في Vim (Script )؟")
-
22-09-2019 - |
سؤال
أود أن أكون قادرًا على ، على سبيل المثال ، التحقق من قيمة $ 1 داخل الكتلة ، للحصول على المؤتمر الخلفي الأول. لكن Vimscript ليس بيرل.
هل هناك طريقة للقيام بذلك؟ أنا على دراية بإمكانية استخدام 1 ، 2 ، وما إلى ذلك ، داخل Regex ، لكني أرغب في مطابقة ثم استخدام القيم في العبارات اللاحقة ، قدر الإمكان في Perl ، PHP ، إلخ.
على سبيل المثال ، سيكون من الجيد حقًا أن يكون لديك في الجزء الذي تم تقييمه من أوامر G // ، حتى تتمكن من فعل أشياء مثل
:g/number: \(\d\+\)/b:number += v:matches[1] " or whatever the syntax is/could be
لإجمالي قيم بعض الأرقام في ملف.
هل يمكن هذا؟
إذا لم يكن الأمر كذلك ، فهل هناك سبب وجيه؟
المحلول
matchlist({expr}, {pat}[, {start}[, {count}]])
يعود 1 ، 2 ، 3 ، إلخ كما هو موجود عند البحث عن {pat}
في {expr}
مثال:
قائمة مطابقة الصدى ('ACD' ، '(a) ؟ (b) ؟ (c) ؟ (.*)')
النتائج في: ['ACD' ، 'A' ، '' ، 'C' ، 'D' ، '' ، '' ، '' ، '' ، '
نصائح أخرى
في مزيد من الوحي الذي قمت به :lhelpgrep submatch | lope
واكتشف مرفقًا مفيدًا آخر على الأقل: يمكنك استخدامه submatch({nr})
من الجانب الذي تم تقييمه من أ substitute
أمر. على سبيل المثال
:s/there a\(r\)e n\(o \)stupid questions, on\(ly\) stupid people/\=toupper(submatch(2).submatch(1).submatch(3)."?")/
لقد جربت هذا النهج من قبل ولكني أعتقد أنني كنت أبحث عن / backref / ولم أحصل على المعلومات التي كنت أبحث عنها.