Як шукати вибраний текст у Vim?


61

Я знаю, що /для пошуку чогось можу скористатися повторним виразом. І я можу використовувати ?для пошуку назад. І я можу використовувати nі Nдля повторення пошуку вперед і назад.

Також є дві приємні ярлики: *або #буде шукати слово під курсором (вперед / назад). Це дуже корисно! (є також g*і g#варіанти)

Але ... Після того як я вибрав текст у візуальному режимі ( v), як я можу попросити Vim шукати саме той текст? Швидкий погляд на :helpце не ... так ... допоможіть мені.


3

Дякуємо за поради з *та #! Було б добре, якби ваше питання також пояснило, що g*і g#що робити;)
winklerrr

Відповіді:


22

Наступна послідовність виконує те, що ви хочете, враховуючи вже вибраний блок тексту:

  • y(дістаньте вибраний текст до "реєстру за замовчуванням)
  • / (увійти в режим пошуку)
  • ( \ V) (необов’язково, введіть режим "не магія" *)
  • Ctrl+ r "(вставити текст з "реєстру)
  • Enter (Займайтесь!)

(*) Режим "дуже не магія" інтерпретує наступний текст як звичайний текст, а не як регулярний вираз. відзначити , однак , що \і /до сих пір спеціальні і повинні бути оброблені іншими способами. Якщо в тексті немає жодних символів, які вважаються спеціальними, ви можете пропустити цей крок.

Джерело: Vim Tips Wiki


1
Дякую! Це набагато більш зрозумілим , ніж «How-To» на vim.wikia сторінці
winklerrr

64

Ви можете стерти виділений текст спочатку. Тоді

  • /

  • Ctrlr

  • "

Яка вклеїть те, що ви потягнули після /.


7
Хороша ідея ... за винятком того, що вставлений текст буде інтерпретуватися як регулярний вираз, що не бажано. :-(
Denilson Sá Maia

4
Якщо це для вас майже добре, то ви можете зробити це /\V<C-r>"замість цього. Заздалегідь \Vдо пошукового запиту, ви скажете vim використовувати "дуже не магія". Підкидання волосся може все-таки створити у вас проблеми. Дивіться:help \V
idbrii

3
Це може допомогти пояснити, Ctrl+Rяк ви отримуєте доступ до реєстру, а *це просто регістр системного буфера обміну. Наприклад, ви також можете зробити: yawзібрати слово в регістр "( регістр за замовчуванням), а потім /<C-r>"шукати цей рядок.
Бен Девіс

5
@ DenilsonSá - Ви можете використовувати це рішення, але замість того, /щоб виконувати пошук, використовуйте ?замість цього, оскільки зворотний пошук ухиляється від косої риски за замовчуванням. Потім ви можете натиснути, Nщоб продовжити пошук у напрямку вперед.
Бред Паркс

7

Я ніколи не відчував необхідності в такій функції, але, вважаючи, що ви можете знайти потребу в будь-якій функції на Vim, я думаю, що це повинно допомогти:

Пошук візуально вибраного тексту

Я не перевіряв цього, але, дивлячись на код, здається, саме те, що ви шукаєте.



1

Це рішення дає змогу вашому пошуку vim візуально обраного контексту навіть із багаторядковими та знаками втечі.

Додайте у себе наступний код та виконайте .vimrcпошук у візуально вибраному вмісті //. Ви також можете глобально замінити вибраний вміст на /s. Або локально замініть вибраний контекст //спочатку, а потім візуально виберіть регіон та :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

Наведена вище конфігурація стосується лише пошуку. Щоб отримати всю конфігурацію vim, відвідайте .vimrc


0

У моїх конфігураціях на двох окремих машинах, якщо я виділяю текст, а потім натискаю, /автоматично шукає вибраний текст.


Це не поведінка за замовчуванням. Тут, коли я натискаю / (перебуваючи у візуальному режимі), він просто показує порожню підказку регулярного виразу, чекаючи, коли я щось введіть.
Denilson Sá Maia

Як це не дивно, тому що я ніколи нічого не робив для цього.
Натан Фелман

3
Багато дистрибутивів поставляють нестандартний конфігурацію vim як типовий (можливо, тому що стандартний конфігурація vim вимикає багато корисних функцій, переважно для сумісності з vi).
sleske
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.