Мне нужно выполнить запрос регулярного выражения заменить, так что
foo
в foo bar
совпадает, но foo
в foo baz
нет. Обычно я бы использовал регулярное выражение, например foo(?=bar)
.
Тем не менее, похоже, что Emacs не может сделать это? Vim кажется способным , но злой режим в Spacemacs не может.
regular-expressions
Гейзенберг
источник
источник
Ответы:
Нет, регулярные выражения Emacs не поддерживают произвольные утверждения упреждения / отсчета нулевой ширины.
nb Evil и Spacemacs (как и все библиотеки elisp) не имеют отношения к вопросам о реализации языка Emacs Lisp.
источник
foo
в ,foobar
но не вfoobaz
? Это достаточно распространенная операция, и я подумал, что должно быть решение. Возможно, смотреть вперед и назад - неправильный подход?foo\(bar\)
наbaz\1
будет достаточной во всех случаях, когдаbar
не было найдено дальнейших совпадений.foo
на\,(if (looking-at "bar") "baz" \&)
будет заменятьfoo
на,baz
если следующий текстbar
(и заменитьfoo
на вfoo
противном случае). Что по-прежнему не то же самое, что только сопоставление,foo
когда за ним следуютbar
, но это еще один вариант.