Вопрос по – Есть ли в Vim / Vi команда для перемещения курсора в конец подсветки поиска?

74

Есть ли в Vim / Vi какие-либо команды для перемещения в пределах выбранного сегмента поиска?

Например, если я ищу слово, есть ли команды для перемещения курсора в конец выделенного сегмента? Скажи, что у меня есть слово "FishTaco" и я хочу найти все экземпляры & quot; Рыбы & quot; и вставьте что-нибудь после него. Я знаю, что могу сделать глобальную замену, но что если я захочу внести изменения только в пару непоследовательных экземпляров?

Я мог видеть, где было бы удобно иметь возможность перемещать курсор в конец текущего выделенного сегмента для выполнения действия.

@ JimStewart Я понятия не имею, почему в этом комментарии по крайней мере столько же +1, сколько и в ответе. Это уровень ниндзя vim. Still.Tony
Это не ответ на вопрос, а достижение конечной цели замены всехFish сFishTaco, ты мог бы сделать:%s/Fish\(Taco\)\@!/&Taco/, который найдет каждыйFish не сопровождаетсяTaco и заменить его наFishTaco. Объединяет поиск с негативным прогнозом с заменой, включающей соответствующий термин, за которым следуетTaco. Jim Stewart

Ваш Ответ

6   ответов
113

/Fish/e

The/e в конце устанавливает курсор в конец области поиска (вместо первого символа по умолчанию.

Отметьте, что вы можете добавить + П или -N поставить курсорn символы до или после конца. Nathan Fellman
+ 1 Я использую vim уже 20 лет, так как мне было 12 лет, но я до сих пор этого не знал ... Benj
Стоит отметить, что после того, как вы уже сделали/Fish поиск вы можете перейти к концу с//e и из Vim 7.4 вы можете использоватьgn чтобы визуально выделить найденный результат. smathy
71

тогда вы можете использовать

/Fish/e+1

который поместит курсор после h. (Без+1 курсор окажется слева от последнего символа.)

Если вам особенно интересно поместить курсор после Fish, но только когда он появляется в «FishTaco», вы можете попробовать один из следующих вариантов:

Вы можете использоват

/FishTaco/s+4

и ваш курсор окажется между рыбой и тако./s+4 помещает курсор на 4 позиции после начала поискового запроса.

Точно так же можно использовать

/FishTaco/e-3

который поместит курсор на 3 позиции слева от левой части последнего (конечного) символа.

Вы также можете использовать

/FishTaco/b+4 

потому что/b+4 будет рассматриваться как/s+4.

Отличное объяснение, но теперь я просто голоден. kenny
24

/Fish, вы можете быстро изменить поиск, чтобы перейти к концу матча через//e, который повторяет последний поиск, но добавляет символe модификатор, который уже был объяснен.

е + номер + это именно то, что я искал! здорово arkod
9

/ long-regexp1 \zs long-regexp2 / .. курсор остановится на \ zs, смотри: help \ zs

11

o для переключения позиции курсора между началом и концом выбранного блока. Когда выделение является линейным, это переключает символлини position, то есть курсор перемещается к начальной и конечной строке выделения, но не к начальному или конечному символу. Если выбор является символьным, то движение также символьным.

Вы также можете использовать`< а также`> для переключения курсора между началом и концом визуального блока, однако это влияет на сам выбор, поэтому он используется для сброса или корректировки границ выбора.

Редактировать: Ах, но для основных моментов поиска это не будет работать, потому чтоo инициирует вставку строки. Я думаю, подсветка поиска отличается от визуального выделения, извините

Я тоже этого не знал. Это замечательно, чтобы изменить начало выделения без начала заново. (например, вы начали выделение одним словом слишком рано или слишком поздно) Timothée Boucher
7

курсор в конце матча" уже дан ответ.

Ты можешь сделать:%s/Fish/FishTaco/c. Это дает вам возможность подтвердить или отклонить каждую замену и пропустить весь бизнес «курсор в конце матча».

Отличный совет. Если я введу 'y', он выполнит замену только первым. Как мне сделать это для каждого подтверждения? Jordan Parmer
Он переходит к следующему совпадению и ждет, пока вы наберетеy илиn и так до тех пор, пока не останется ни одного совпадения. Чтобы принять все дальнейшие замены, введитеa, чтобы отклонить их, введитеq. romainl
На самом деле мне не хваталоg после финала/ так что это не продолжалось в моей линии. Спасибо за совет Jordan Parmer

Похожие вопросы