VIM видеть совпадения регулярных выражений при вводе

8

Если я наберу /regexтекст, курсор временно перейдет к первому совпадению, и все совпадения будут выделены. Это обновления, как я печатаю. Можно ли получить такое поведение, когда я собираюсь сделать замену? Например, когда я работаю над сложным регулярным выражением :%s/\<regex\>/, я хотел бы знать, что соответствует, прежде чем нажимать на триггер и все менять. Есть ли способ сделать это?

Джон Берриман
источник
Было бы хорошо, если бы это работало так, как это работает с поиском: выделение того, что в данный момент соответствует. Вы нашли лучший способ сделать это?
Антон Данейко

Ответы:

12

Начните с поиска, используя / (или ? ), Что позволит вам настроить регулярное выражение (так как вы используете incsearch)

Как только вы все это получите, вы можете использовать предыдущий шаблон поиска (тот, который вы только что использовали) в команде замены, используя два разделителя для элемента поиска:

/elephant                       " find the next elephant
:%s//rhino/gc                   " make then all rhinos!

Конечно, вы можете использовать выборки и диапазоны, как обычно.

:1,15s,,cougar,g
:'<,'>s::tiger:
lornix
источник
+1 за то, что научил меняs//
Стивен Лу
2

Одним из вариантов является то, что вы можете иметь флаг подтверждения c.

:%s;regex;replacement;gc

:h s_flags:

[c] Confirm each substitution.  Vim highlights the matching string.  You can type:              
        'y'     to substitute this match
        'l'     to substitute this match and then quit ("last")
        'n'     to skip this match
        <Esc>   to quit substituting
        'a'     to substitute this and all remaining matches
        'q'     to quit substituting

Вы также можете попробовать grepкоманду, чтобы увидеть отфильтрованный вывод и выделенный исходный файл.

:g/re/p или :g/re/

Принц Джон Уэсли
источник
Мне это нравится, но мне все еще требуется, чтобы я закончил регулярное выражение, прежде чем я увижу, что, если что-то было найдено.
Джон Берриман
0

Ну, краткий способ увидеть, что будет соответствовать вашему регулярному выражению, - выполнить поиск с /использованием желаемого регулярного выражения. Он перейдет к первому совпадению и пометит его, пока вы его печатаете. Попробуйте - vimне разочарует вас.


источник
Правда, хотя это то, что я изложил в вопросе. Я хотел бы, чтобы это обновилось, поскольку я готовлю замену. С вашим решением я должен попробовать регулярное выражение, а затем скопировать его (как?), А затем использовать его в качестве замены. Это не достаточно хорошо.
Джон Берриман