Preciso executar a substituição da consulta regex, de modo que
foo
in foo bar
é correspondido, mas foo
in foo baz
não é. Normalmente, eu usaria regex antecipadamente, por exemplo foo(?=bar)
.
No entanto, parece que o Emacs não pode fazer isso? Vim parece capaz , mas o modo maligno no espaço não pode.
regular-expressions
Heisenberg
fonte
fonte
Respostas:
Não, as expressões regulares do Emacs não suportam asserções arbitrárias de look-ahead / behind de largura zero.
Nota: Evil e Spacemacs (como todas as bibliotecas elisp) são irrelevantes quando se trata de perguntas sobre a implementação da linguagem Emacs Lisp.
fonte
foo
nofoobar
, mas não emfoobaz
? Esta é uma operação bastante comum que eu pensei que deveria haver uma solução. Talvez olhar para frente e para trás seja a abordagem errada?foo\(bar\)
porbaz\1
será suficiente em todos os casos embar
que não tiverem mais correspondências.foo
por\,(if (looking-at "bar") "baz" \&)
substituiráfoo
porbaz
se o texto a seguir forbar
(e substituafoo
porfoo
outro). O que ainda não é a mesma coisa que apenas corresponderfoo
quando é seguido porbar
, mas é outra opção.