49

В vim я часто выполняю поиск, чтобы перейти к слову или фразе, вместо того, чтобы переходить туда с помощью h/j/k/l . Тогда я ударил n прыгать между появлениями.

Скажи, что у меня есть этот текст:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

Я набираю /an arrow и нажимаю ввод. Эта фраза выделена, и я перескочу к ней с помощью n .

Теперь я хочу визуально выделить этот текст, возможно, изменить его или удалить. (Да, мне известна команда подстановки :s .)

Поскольку мой курсор находится на букве "а" в начале "стрелки", я могу нажать v , а затем пару раз нажать e чтобы выделить всю фразу. Но у меня есть ощущение, что есть более короткий и более семантический способ. В конце концов, я уже указал интересующий меня текст.

Как я могу составить команду, чтобы сказать «визуально выбрать текущий выбор поиска?"

5 ответов5

34

Вы можете использовать gn в версии 7.4 и далее (и gN чтобы вернуться назад). Он заменяет трюк v//e .

Найдите вперед последний использованный шаблон поиска, например, с помощью `n`, и запустите визуальный режим, чтобы выбрать совпадение.

Смотрите :help gn или этот Vimcast для получения дополнительной информации.

29

Попробуй это:

/an arrow
v//e

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

8

Я обнаружил, что само по себе v//e недостаточно, поскольку после выхода из визуального режима при переходе к следующему / предыдущему результату поиска курсор помещается в конец результата, а не в его начало, как вы обычно ожидаете.

Чтобы это исправить, мы должны сначала перейти к концу результата поиска (//e), а затем визуально выбрать его начало (v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

Приветствия.

2

Теперь есть плагин Vim-Search-Objects, который позволяет Vim обрабатывать совпадения поиска как обычные текстовые объекты, поэтому вы можете просто va/ (визуально выбрать совпадение) после выполнения поиска.

1

"Глупый" способ сделать это - сопоставить ключ (в данном случае F5), как показано ниже:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

После /an arrow попала в F5.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .