Vim - виберіть текст, виділений пошуком?


51

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

Скажіть, у мене цей текст:

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

Я набираю /an arrowі натискаю Enter. Ця фраза виділена, і я стрибаю до неї n.

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

Оскільки мій курсор знаходиться на букві "а" на початку "стрілки", я можу натиснути v, а потім натисніть eпару разів, щоб виділити всю фразу. Але я маю відчуття, що існує коротший і більш семантичний шлях. Зрештою, я вже вказав текст, який мене цікавить.

Як я можу скласти команду сказати "візуально вибрати поточний вибір пошуку?"

Відповіді:


36

Ви можете використовувати gnу версії 7.4 і далі (та gNйти назад). Це замінює v//eхитрість.

Шукайте вперед за останнім вживаним шаблоном пошуку, наприклад, з `n`, і запустіть режим Visual, щоб вибрати відповідність.

Дивіться :help gnабо цей Vimcast для отримання додаткової інформації.


Це дублює коментар до іншої відповіді і не дуже корисно, як є. Це може бути хорошою ідеєю, якщо ви цитуєте документацію, щоб відповідь могла стояти самостійно.
bwDraco

2
Радий зробити відповідь краще, але я не впевнений, чи допоможе це. Питання чітко викладає ціль ("візуально виберіть наступний результат пошуку") і gnвиконує саме так, як задано. Подання його як окремої відповіді підкреслює, що це повна заміна v//e. Я щойно відредагував свою відповідь, щоб додати документацію, це краще?
Давид лорд

Це добре, дякую. Якщо вам потрібна допомога, обов’язково ознайомтесь із екскурсійним та довідковим центром . Ласкаво просимо до Super User, і ми сподіваємося, що вам сподобається ваше перебування.
bwDraco

Фантастичний! Дякуємо за оновлення цієї теми за допомогою останніх і найкращих. :)
Натан Лонг


8

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

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

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

Ура.


Для симетрії: nnoremap g? ??b<cr>v//e<cr>(робить те саме, але шукаючи назад, а не вперед)
Kyle Strand

2

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


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. (Див.: Підбір довідки)
Джонні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.