Die globale Substitution von Vim ersetzt nicht alle Übereinstimmungen in einer Zeile


12

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 goder gcParameter, 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/gbekomme ich

goodbye hello
goodbye
goodbye hello hello
goodbye

Alles, was ich .vimrcüber Suchen / Ersetzen habe, ist

set hlsearch
set ignorecase
set incsearch

3
Bitte geben Sie uns ein Beispiel aus der Praxis und zeigen Sie uns Ihr Beispiel vimrc.
Romainl

2
Was ist die Ausgabe von :echo &gdund was passiert, wenn Sie ein zweites gFlag wie dieses hinzufügen : %s/hello/goodbye/ggoder wenn Sie das gFlag vollständig entfernen ? Wenn die Ausgabe von :echo &gdist 1, versuchen Sie, set nogdefaultam Ende Ihrer hinzuzufügen vimrc.
user9433424

1
Fein! Ich weiß nicht warum, aber standardmäßig wurde es auf 0 gesetzt, also habe ich hinzugefügt, set nogdefaultwie Sie gesagt haben, und es funktioniert übrigens jetzt. Danke!
Nicolas Scotto Di Perto

Antworten:


12

Vielleicht haben Sie oder ein Plugin die Option aktiviert 'gdefault'. Diese Option fügt das Flag gautomatisch hinzu, wenn Sie eine Ersetzung durchführen.

Wenn Sie also das Flag manuell hinzufügen, gwährend 'gdefault'es aktiviert ist, ist es so, als hätten Sie zwei gFlags, 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 gFlag nicht hinzu (weil dies gdefaultbereits geschehen ist), und wenn Sie nur das erste Vorkommen des Musters ersetzen möchten In einer Zeile fügen Sie das gFlag hinzu (da 2 gFlags mit keinem identisch sind).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.