2012-05-17 38 views
16

Um jedes Vorkommen von „&“ zu ersetzen „& &“ im Bereich von der aktuellen Zeile 30 weiteren Linien auf, ich ausgeben :.,+30s/\\&/\\&\\&/g aber Vim sagt „Pattern nicht gefunden ". Ich entziehe das Sonderzeichen "&" durch doppelten Backslash "\".vim: Suchen und Ersetzen für „&“

Antwort

13

Versuchen Sie, nicht alles zu entkommen - :.,+30s/&/&&/g scheint für mich zu arbeiten.

+12

Um zu verdeutlichen: Dies ist nicht wegen '&' ist kein Metazeichen: während im Muster ist es wahr (es sei denn '&' wurde mit Escape oder sehr-magischen Modus aktiviert), im Ersetzungsstring '&' bedeutet das gleiche wie '\ 0': die ganze Übereinstimmung Teilzeichenfolge. Da "der gesamte übereinstimmende Teilstring" ein kaufmännisches Und-Zeichen ist, funktioniert diese Lösung. Beachten Sie auch, dass die Anweisung "& in Ersetzung das gesamte übereinstimmende Muster darstellt" in einer Reihe von Befehlen einschließlich ": s" falsch ist, wenn die Option "magic" deaktiviert wurde. – ZyX

10

Sie müssen nicht im ersten Teil eines regulären Ausdrucks dem Und-Zeichen entkommen. Es hat nur eine spezielle Bedeutung im zweiten (Ersetzungs-) Teil.

Sie suchen nach Mustern, die "\ &" sagen und ersetzen sie durch Muster, die sagen "\ & \ &".

Die einfache Art und Weise zu ersetzen ist einfach:

:.,+30s/&/&&/g 
1

es auch nützlich Bemerkung sein, dass, wenn Sie die & Position zum Beispiel ändern müssen: _& zu &_ die & entkommen werden muss nur in den Replace-Anweisungen des Ersatzausdrucks:

:.,+30s/ &/\& /g 
     ^