Ich muss Regex-Abfrage ersetzen, so dass
foo
in foo bar
ist übereinstimmend, foo
in foo baz
jedoch nicht. Normalerweise würde ich Regex Look Ahead verwenden, z foo(?=bar)
.
Es scheint jedoch, dass Emacs dies nicht kann? Vim scheint fähig zu sein , aber der böse Modus in Spacemacs kann es nicht.
regular-expressions
Heisenberg
quelle
quelle
Antworten:
Nein, reguläre Emacs-Ausdrücke unterstützen keine willkürlichen Vorausschau- / Hinter-Behauptungen mit einer Breite von Null.
nb Evil und Spacemacs (wie alle elisp-Bibliotheken) spielen bei Fragen zur Implementierung der Emacs Lisp-Sprache keine Rolle.
quelle
foo
infoobar
aber nicht infoobaz
? Dies ist eine Operation, die häufig genug ist, dass ich dachte, es müsste eine Lösung geben. Vielleicht ist ein Blick nach vorne und hinten der falsche Ansatz?foo\(bar\)
durchbaz\1
ist in allen Fällen ausreichend, in denenbar
keine weiteren Übereinstimmungen enthalten waren.foo
mit\,(if (looking-at "bar") "baz" \&)
ersetzenfoo
mit ,baz
wenn der folgende Text istbar
(und ersetzenfoo
mitfoo
anderen Gründen ). Was immer noch nicht dasselbe ist wie nur Matching,foo
wenn es folgtbar
, aber es ist eine andere Option.