Есть ли в Vim / Vi какие-либо команды для перемещения в пределах выбранного сегмента поиска?
Например, если я ищу слово, есть ли какие-нибудь команды для перемещения курсора в конец выделенного сегмента? Скажем, у меня есть слово «FishTaco», и я хочу найти все экземпляры «Fish» и вставить что-нибудь после него. Я знаю, что могу выполнить глобальную замену, но что, если я хочу внести изменения только в паре непоследовательных экземпляров?
Я мог видеть, где было бы удобно переместить курсор в конец текущего выделенного сегмента для выполнения действия.
Fish
наFishTaco
, вы могли бы сделать:%s/Fish\(Taco\)\@!/&Taco/
, что найдет все,Fish
за которыми еще не следуют,Taco
и заменит их наFishTaco
. Сочетает поиск с обратным просмотром вперед с заменой, которая включает совпавший термин, за которым следуетTaco
.Ответы:
Сделать это можно так:
/Fish/e
Значок
/e
в конце помещает ваш курсор в конец области поиска (вместо первого символа по умолчанию.источник
/Fish
поиск, вы можете перейти к концу с//e
Vim 7.4, а затем использовать егоgn
для визуального выделения найденного результата.Если вы просто хотите поместить курсор после последнего символа Fish, вы можете использовать
который поместит ваш курсор после h. (Без
+1
курсора курсор окажется слева от последнего символа.)Если вас особенно интересует размещение курсора после рыбы, но только когда он появляется в «FishTaco», вы можете попробовать один из следующих вариантов:
Вы можете использовать
и ваш курсор окажется между рыбой и тако.
/s+4
Помещает курсор 4 места после начала поиска.Вы также можете использовать
который поместит ваш курсор на 3 позиции слева от последнего (конечного) символа.
Вы также можете использовать
потому что
/b+4
будет рассматриваться как/s+4
.источник
Если вы уже выполнили поиск
/Fish
, вы можете быстро изменить поиск, чтобы перейти к концу совпадения через переход//e
, который повторяет последний поиск, но добавляетe
модификатор, который уже был объяснен.источник
/ long-regexp1 \zs long-regexp2 /
.. курсор остановится на \ zs , см .: help \ zsисточник
Когда у вас есть визуальный выбор, вы можете использовать его
o
для переключения положения курсора между началом и концом выбранного блока. Когда выделение является линейным, это переключает линию , то есть курсор перемещается к начальной и конечной строкам выделения, но не к начальному или конечному символу. Когда выбор зависит от персонажа, движение также зависит от персонажа.Вы также можете использовать
`<
и`>
для переключения курсора между началом и концом визуального блока, однако это влияет на сам выбор, поэтому он используется для сброса или настройки границ выделения.Изменить: Ах, но для выделения поиска это не сработает, потому
o
что инициирует вставку строки. Я предполагаю, что выделение поиска - это не то же самое, что визуальное выделение, извините :)источник
На часть вашего вопроса "курсор в конце совпадения" уже дан ответ.
Вы можете это сделать
:%s/Fish/FishTaco/c
. Это дает вам возможность подтвердить или отклонить каждую замену и пропустить весь бизнес «курсор в конце совпадения».источник
y
илиn
и так далее, пока не останется ни одного совпадения. Чтобы принять все дальнейшие замены, введитеa
, чтобы отклонить их, введитеq
.g
послефинала,/
поэтому он не продолжался в моей линии. Спасибо за совет.