Manchmal ersetzen meine globalen Untertitel nicht alle Übereinstimmungen in einer Zeile. Es wird durch die Tatsache bestätigt, dass ich es sehen kann, wenn ich Ersetzungen mit Bestätigung durchführe. Eine Übereinstimmung wird in einer Zeile mit mehreren möglichen Übereinstimmungen gefunden, aber dann geht es zu einer anderen Zeile.
Ich benutze die g
oder gc
Parameter, die für die gesamte Datei mit arbeiten %
.
In dieser Datei:
hello hello
hello
hello hello hello
hello
Wenn ich das tue, %s/hello/goodbye/g
bekomme ich
goodbye hello
goodbye
goodbye hello hello
goodbye
Alles, was ich .vimrc
über Suchen / Ersetzen habe, ist
set hlsearch
set ignorecase
set incsearch
substitute
Nicolas Scotto Di Perto
quelle
quelle
vimrc
.:echo &gd
und was passiert, wenn Sie ein zweitesg
Flag wie dieses hinzufügen :%s/hello/goodbye/gg
oder wenn Sie dasg
Flag vollständig entfernen ? Wenn die Ausgabe von:echo &gd
ist1
, versuchen Sie,set nogdefault
am Ende Ihrer hinzuzufügenvimrc
.set nogdefault
wie Sie gesagt haben, und es funktioniert übrigens jetzt. Danke!Antworten:
Vielleicht haben Sie oder ein Plugin die Option aktiviert
'gdefault'
. Diese Option fügt das Flagg
automatisch hinzu, wenn Sie eine Ersetzung durchführen.Wenn Sie also das Flag manuell hinzufügen,
g
während'gdefault'
es aktiviert ist, ist es so, als hätten Sie zweig
Flags, was den gleichen Effekt hat wie keines. Daher ersetzt Vim nur das erste Auftreten des Musters in jeder Zeile.Standardmäßig ist diese Option deaktiviert. Um dies jedoch sicherzustellen, können Sie am Ende Ihres
vimrc
:set nogdefault
.Wenn Sie den Verdacht haben, dass ein Plugin die Option aktiviert hat, können Sie sie alternativ aufspüren mit:
verb set gd?
Oder Sie könnten sich an die Option gewöhnen, dh wenn Sie alle Vorkommen eines Musters ersetzen möchten, fügen Sie das
g
Flag nicht hinzu (weil diesgdefault
bereits geschehen ist), und wenn Sie nur das erste Vorkommen des Musters ersetzen möchten In einer Zeile fügen Sie dasg
Flag hinzu (da 2g
Flags mit keinem identisch sind).quelle