Vim — выделить текст, выделенный поиском?

Vim — выделить текст, выделенный поиском?

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

Допустим, у меня есть такой текст:

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

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

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

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

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

решение1

Можно использовать gnв версии 7.4 и выше (и gNдля возврата назад). Заменяет v//eтрюк.

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

См :help gn. илиэтот VimcastЧтобы получить больше информации.

решение2

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

/an arrow
v//e

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

решение3

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

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

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

Ваше здоровье.

решение4

«Более глупый» способ сделать это — назначить клавишу (в данном случае F5), как показано ниже:

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

После /an arrowнажатия F5.

Связанный контент