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

53

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

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

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

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

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

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

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

Натан Лонг
источник

Ответы:

38

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

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

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

Дэвид Лорд
источник
Это дублирует комментарий к другому ответу и не очень полезно в его нынешнем виде. Это может быть хорошей идеей, если вы процитировали документацию, чтобы ваш ответ мог стоять самостоятельно.
bwDraco
2
Рад сделать ответ лучше, но я не уверен, поможет ли это. Вопрос аккуратно излагает цель («визуально выбирает следующий результат поиска») и gnвыполняет в точности так, как задано. Представление его в качестве отдельного ответа подчеркивает, что это полная замена v//e. Я только что отредактировал свой ответ, чтобы добавить документацию, это лучше?
Дэвид Лорд
Это хорошо, спасибо. Если вам нужна помощь, обязательно посетите тур и справочный центр . Добро пожаловать в Super User, и мы надеемся, что вам понравится ваше пребывание.
bwDraco
1
Фантастика! Спасибо за обновление этой темы с последней и самой лучшей. :)
Натан Лонг
29

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

/an arrow
v//e

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

Деннис Уильямсон
источник
1
С Vim 7.4 gnон тоже делает это (не меняя, что nзначит)
smathy
8

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

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

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

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

sunaku
источник
Для симметрии: nnoremap g? ??b<cr>v//e<cr>(делает то же самое, но ищет назад, а не вперед)
Кайл Стрэнд,
2

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

sunaku
источник
1

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

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

После /an arrowудара F5.

Джонни
источник
Это выбирает еще один символ из-за +1. Опустите это, и он выберет только ту часть, которую искали. С другой стороны, nnoremap <F5> v//e<CR>кажется, работает просто отлично.
Деннис Уильямсон
@ Денис Уильямсон, + 1 необходимо, чтобы выбрать именно то, что искали, если вы удалите +1, последний символ не будет выбран, потому что он не выбирает символ, в котором находится курсор. В любом случае nnoremap <F5> v // e <CR> намного лучше.
Джонни
Он выбирает персонажа для меня. Если я нажму xили cпосле выполнения вашего, F5но без +1вся строка поиска, включая символ под курсором, удаляется.
Деннис Уильямсон
@ Денис Уильямсон, я только что узнал, что моя опция выбора установлена ​​на «эксклюзив», но значение по умолчанию «включительно». Вот почему это работает для вас без +1. (См .: помощь в выборе)
Джонни