В 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.