Поиск и замена vim ограничены подсветкой в режиме визуального блока
У меня часто есть текст в столбцах и вам нужно заменить некоторые вещи, не сбивая похожие вещи на одной строке... Ниже приведен простой пример:
![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 visual block mode?
Ответы
Ответ 1
Вам нужно добавить \%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
Ответ 2
Решение, очевидно, является\%V-выражением, но обратите внимание, что это все еще немного багги.
Обновить. Это не ошибка. Этот поток объясняет поведение.
Ответ 3
Блок визуального выделения должен быть идентифицирован с помощью% V
:'<,'>s/\%V80/81/g