иногда мои глобальные субстуции не заменяют все совпадения в строке. Это подтверждается тем фактом, что я могу видеть это, когда я делаю замены с подтверждением, совпадение найдено в строке с несколькими возможными совпадениями, но затем оно переходит на другую строку.
Я использую параметры g
или gc
для всего файла с %
.
В этом файле:
hello hello
hello
hello hello hello
hello
Если %s/hello/goodbye/g
я получу
goodbye hello
goodbye
goodbye hello hello
goodbye
Все, что я имею в моем .vimrc
о поиске / замене
set hlsearch
set ignorecase
set incsearch
substitute
Николас Скотто Ди Перто
источник
источник
vimrc
.:echo &gd
и что произойдет, если вы добавите второйg
флаг, например, такой:%s/hello/goodbye/gg
или если вы удалитеg
флаг полностью? Если вывод:echo &gd
-1
попробуйте добавитьset nogdefault
в конце вашегоvimrc
.set nogdefault
как вы сказали, и теперь, кстати, это работает. Спасибо!Ответы:
Возможно, вы или плагин включили эту опцию
'gdefault'
. Эта опция добавляет флагg
автоматически всякий раз, когда вы выполняете замену.Таким образом, когда вы вручную добавляете флаг,
g
пока'gdefault'
он включен, это как если бы у вас было 2g
флага, которые имеют тот же эффект, что и ни один. Поэтому Vim заменяет только первое вхождение шаблона в каждой строке.По умолчанию эта опция отключена, но , чтобы убедиться , что вы могли бы добавить в конце вашего
vimrc
:set nogdefault
.Кроме того, если вы подозреваете, что плагин мог включить эту опцию, вы можете отследить его с помощью:
verb set gd?
Или вы можете привыкнуть к опции, которая означает, что когда вы хотите заменить все вхождения шаблона, вы не добавляете
g
флаг (потому что этоgdefault
уже сделали), а когда вы хотите заменить только 1-е вхождение шаблона в строке вы добавляетеg
флаг (потому что 2g
флага - то же самое, что ни один).источник