Глобальная подстановка Vim не подставляет все совпадения в строку


12

иногда мои глобальные субстуции не заменяют все совпадения в строке. Это подтверждается тем фактом, что я могу видеть это, когда я делаю замены с подтверждением, совпадение найдено в строке с несколькими возможными совпадениями, но затем оно переходит на другую строку.

Я использую параметры 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

3
Пожалуйста, дайте нам пример из реального мира и покажите нам свой vimrc.
Ромен

2
Каков результат :echo &gdи что произойдет, если вы добавите второй gфлаг, например, такой: %s/hello/goodbye/ggили если вы удалите gфлаг полностью? Если вывод :echo &gd- 1попробуйте добавить set nogdefaultв конце вашего vimrc.
user9433424

1
Отлично! Я не знаю почему, но по умолчанию было установлено значение 0, поэтому я добавил, set nogdefaultкак вы сказали, и теперь, кстати, это работает. Спасибо!
Николя Скотто Ди Перто

Ответы:


12

Возможно, вы или плагин включили эту опцию 'gdefault'. Эта опция добавляет флаг gавтоматически всякий раз, когда вы выполняете замену.

Таким образом, когда вы вручную добавляете флаг, gпока 'gdefault'он включен, это как если бы у вас было 2 gфлага, которые имеют тот же эффект, что и ни один. Поэтому Vim заменяет только первое вхождение шаблона в каждой строке.

По умолчанию эта опция отключена, но , чтобы убедиться , что вы могли бы добавить в конце вашего vimrc: set nogdefault.

Кроме того, если вы подозреваете, что плагин мог включить эту опцию, вы можете отследить его с помощью: verb set gd?

Или вы можете привыкнуть к опции, которая означает, что когда вы хотите заменить все вхождения шаблона, вы не добавляете gфлаг (потому что это gdefaultуже сделали), а когда вы хотите заменить только 1-е вхождение шаблона в строке вы добавляете gфлаг (потому что 2 gфлага - то же самое, что ни один).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.