Поиск и замена vim ограничены выделением в режиме визуального блока - PullRequest
24 голосов
/ 03 июня 2011

У меня часто есть текст в столбцах, и мне нужно заменить некоторые вещи, не забивая похожие вещи в одной строке ... Ниже приведен простой пример:

vim visual block-mode screenshot

Предположим, я выделил текст серым цветом в режиме визуального блока vim и хочу заменить 80 на 81; однако мне нужны только замены в выделенном визуальном блоке.

Я уже пробовал Cntl v : s/80/81/g; однако это заменяет текст внутри и снаружи визуального блока. (основываясь на отзывах Рэнди, это потому, что : s это линейная команда).

Я знаю, что мог бы использовать замену линейного визуального блока в данном конкретном случае ( Shift v : s/80\.1/81.1/g); Тем не менее, я пытаюсь найти общее решение проблемы отсутствия простых средств для замены внутри нестрочного визуального блока (разве это не та проблема, которую должен решать режим визуального блока?). Ответы, требующие подтверждения, например : s/80/81/gc, не являются тем, что я ищу.

Я повторю вопрос для ясности: как я могу заменить 80 на 81, используя подсветку режима визуального блока vim?

Ответы [ 3 ]

26 голосов
/ 03 июня 2011

Вам необходимо добавить \%V к вашему шаблону.С :help \%V:

Match inside the Visual area.  When Visual mode has already been
stopped match in the area that gv would reselect.
This is a /zero-width match.  To make sure the whole pattern is
inside the Visual area put it at the start and end of the pattern.

OP EDIT : явное решение заключается в использовании : s/\%V8\%V0/81/g

6 голосов
/ 08 июня 2011

Решением является, очевидно, атом регулярного выражения \% V, но обратите внимание, что это все еще немного глючит.

Обновление : Это не ошибка.Этот поток объясняет поведение.

5 голосов
/ 03 июня 2011

Блок визуального выбора должен быть идентифицируемым с% V

:'<,'>s/\%V80/81/g
...