Vim - загляните в регистр поиска
Есть ли простой/быстрый способ "выдернуть" в регистр "последний поиск" vim ("/)?
Из документации vim кажется, что ответ отрицательный, но его можно назначить с помощью команды "let":
It is writable with ":let", you can change it to have 'hlsearch' highlight
other matches without actually searching. You can't yank or delete into this
register.
В идеале то, что я хотел бы сделать, это что-то вроде:
"/5yw
который выдержит следующие 5 слов под курсором и поместит их в последний буфер поиска
В качестве альтернативы, если есть способ поиска содержимого именованного регистра, это тоже сработает. Другими словами, если бы я мог:
"A5yw
а затем выполните поиск того, что находится в регистре A, и это будет работать.
Ближайшим, к которому я могу прийти, является вытащить в именованный регистр и затем скопировать этот регистр в последний регистр поиска, например.
"A5yw
:let @/[email protected]
С риском сделать длинный вопрос дольше, я хочу сказать, что это не всегда 5 слов, которые я хотел бы "выдернуть и искать" - иногда это 17 символов, иногда это до конца строки и т.д.... так что жестко закодированный макрос не дает мне гибкости, я бы хотел.
Ответы
Ответ 1
После нажатия /
, чтобы ввести строку поиска, вы можете использовать Ctrl-R
, а затем введите букву, представляющую регистр, который вы хотите использовать.
например.
- Во-первых,
"Ayw
, чтобы вырвать слово в регистр A
- Затем
/ ^R A
помещает содержимое регистра A в строку поиска.
Ответ 2
Если вы не использовали какой-либо регистр для хранения выдернутого текста, vim использует регистр 0
. Вы можете найти это, набрав Ctrl-R 0
после /
.
Более сложный пример. Скажите, что вы хотите искать в другом буфере текст внутри кавычек, который находится под курсором прямо сейчас:
- Вы можете сделать это с помощью
yi"
(внутренняя цитата yank)
- Перейдите в буфер, где вы хотите выполнить поиск
- Тип
/Ctrl-R 0
Ответ 3
Я использую следующий код для этого:
vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR>
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR>
function! VisualSearch(dirrection)
let l:[email protected]@
normal! gvy
let l:search=escape(@@, '$.*/\[]')
if a:dirrection=='/'
execute 'normal! /'.l:search
else
execute 'normal! ?'.l:search
endif
let @/=l:search
normal! gV
let @@=l:register
endfunction
Ответ 4
Итак, в основном расширенная версия команд # и *, правильно? Похоже, вы хотите определить пользовательский оператор (команда, ожидающая движения). Я никогда не делал этого, но я нашел плагин который выглядит так, как будто это может сделать это проще. Есть несколько примеров.
Ответ 5
Поиск выбора:
если вы хотите сначала вынуть часть строки, а затем использовать "v" и перемещаться с помощью курсоров до тех пор, пока вы не отметите то, что хотите, затем нажмите y для yank и теперь выбор находится в регистре 0
вы можете ввести /Ctrl-R 0