Глобальна заміна 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.
romainl

2
Який результат :echo &gdі що станеться, якщо ви додасте такий gпрапор 2-го типу: %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вже було зроблено), а коли ви хочете замінити лише перше виникнення шаблону. у рядку ви додаєте gпрапор (адже 2 gпрапори - це те саме, що немає).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.