Как искать выбранную строку (v
и y
)? Обычно я ищу с /
, но я не могу вставить выделенную строку после /
.
Как найти выделенный текст?
Ответ 1
В режиме вставки вы можете использовать CTRL-R для вставки содержимого регистров Vim. По умолчанию скопированный текст помещается в безымянный регистр "
, поэтому для вставки этого текста вы вводите <C-R>"
в режиме вставки. В приглашении поиска используется режим командной строки, который имеет свои собственные
CTRL-R, который почти идентичен работе в режиме Insert.
Итак, если я просто дернул текст foo
, набрав /<C-R>"
, он будет искать текст foo
после нажатия клавиши ввода.
Ответ 2
У меня есть это сопоставление, определенное в моем vimrc
, оно отображает *
, чтобы определить шаблон поиска как то, что в настоящее время выделено (экранирование всех потенциальных опасных символов и преобразование пробела в то, что выделено для любой последовательности пробелов)
xnoremap * :<C-U>let old_reg=getreg('"')|let old_regtype=getregtype('"')<CR>gvy/<C-R><C-R>=substitute(substitute(escape(@", '/\.*$^~['), '\s\+', '\\s\\+', 'g'), '\_s\+', '\\_s*', 'g')<CR><CR>gV:call setreg('"', old_reg, old_regtype)<CR>:let v:searchforward=1<CR>
Чтобы использовать его, запустите визуальный режим с помощью v
, а затем выделите, что вы хотите найти, и нажмите *
not y
.
Конечно, вы можете отобразить #
для поиска назад (точно так же, за исключением того, что v:searchforward
должно быть установлено на 0.
Ответ 3
:set hls
:vmap * y:let @/ = @"<CR>
-
set hls
(поиск по свету) -
v
= >hjkl
(выберите что-то) - нажмите
*
, скопируйте выделенный текст в реестр"
- установить содержимое reg
/
как"
- нажмите
n
/n
для навигации по
Ответ 4
Если вам интересны только поисковые запросы, вы можете использовать метод читов, который я использую. Янь слово через v или y + w, затем выполните команду
:%s//XYZ/gc
Это приведет к поиску последнего искомого слова. Затем, когда вы его найдете, он попросит подтверждение заменить на XYZ
, и все, что вам нужно сделать, это нажать q
, чтобы выйти.