Ich habe eine Liste von Wörtern:
bau
ceu
diu
fou
gau
Ich möchte diese Liste in Folgendes verwandeln:
byau
cyeu
dyiu
fyou
gyau
Ich habe den Befehl erfolglos versucht:
:%s/(\w)(\w\w)/\1y\2/g
Was muss ich ändern, damit die Regex-Erfassungsgruppen in Vim funktionieren, da dies nicht funktioniert?
regex
vim
capturing-group
regex-group
Christian
quelle
quelle
:%norm ay<CR>
.l
, den Visual Block-Modus mitCtrl+v
aufrufen, die gesamte Spalte mit markieren,Shift+g
gefolgt vonl
, dann den Einfügemodus mit aufrufenShift+i
und 'y' eingeben . 7 Tastenanschläge, einschließlich AbschlussEsc
, um den Einfügemodus zu verlassen. Nicht als Antwort posten, da es nicht wirklich um Erfassungsgruppen geht (wonach ich gesucht habe, als ich diese gefunden habe). :-)Antworten:
Eine Möglichkeit, dies zu beheben, besteht darin, sicherzustellen, dass das Muster in Klammern eingeschlossen ist:
Etwas kürzer (und mehr Magie -al) zu verwenden ist
\v
, dass , nachdem sie alle ASCII - Zeichen außer im Muster bedeutet'0'-'9'
,'a'-'z'
,'A'-'Z'
und'_'
eine besondere Bedeutung haben:Sehen:
:help \(
:help \v
quelle
Wenn Sie den Erfassungsgruppen nicht mit Backslashes entkommen möchten (dies haben Sie verpasst), stellen Sie vor
\v
, um die Vim-Engine für reguläre Ausdrücke in einen sehr magischen Modus zu verwandeln :quelle
:exmode
; Gibt es eine Möglichkeit, dies im Dialogfeld Suchen / Ersetzen von gvim zu tun?\v...
Regexp-Arbeit zu finden; in der Ersatzzeichenfolge,&
funktioniert aber\
geschützt (\1\r
sind verloren):s
) überinputdialog()
und ein bisschen Vimscript erstellen.\1 \r
Behandlung ein GVIM-Fehler. Ich werde versuchen, es in einer vim-spezifischen Liste zu veröffentlichen. In der Zwischenzeit werde ich meinen einen vimscript-inputdialog ausprobieren.Sie können auch dieses kürzere Muster verwenden:
%s
Wendet das Muster auf die gesamte Datei an.^.
entspricht dem ersten Zeichen der Zeile.&y
fügt dasy
nach dem Muster hinzu.quelle
Sie müssen sich auch der Gruppierungsparanthesis entziehen:
Das macht den Trick.
quelle