是否有任何简单/快捷的方式"猛烈"进入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.
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想做的是:
"/5yw
Run Code Online (Sandbox Code Playgroud)
这会将光标下的下5个单词拉出来并将它们放在最后一个搜索缓冲区中
或者,如果有办法搜索命名寄存器的内容,那也可以.换句话说,如果我能做到:
"A5yw
Run Code Online (Sandbox Code Playgroud)
然后搜索寄存器A中的内容,这也可以.
我最接近的是抓到一个命名的寄存器然后将该寄存器复制到最后一个搜索寄存器,例如
"A5yw
:let @/=@A
Run Code Online (Sandbox Code Playgroud)
冒更长时间问题的风险,我想说的是,我并不总是5个单词,我想"猛拉和搜索" - 有时它是17个字符,有时它是在行尾,等等......所以一个硬编码的宏并没有给我我想要的灵活性.
a'r*_*a'r 99
按下/以输入搜索字符串后,您可以使用Ctrl-R然后键入代表您要使用的寄存器的字母.
例如.
"Ayw 将一个单词写入寄存器A./ ^R A 将寄存器A的内容放入搜索字符串中.csi*_*rra 33
如果你没有使用任何寄存器来存储被拔出的文本vim使用0寄存器.您可以通过键入Ctrl-R 0后搜索/.
一个更复杂的例子.假设您要在另一个缓冲区中搜索当前位于光标下的引号内的文本:
yi"(猛烈的内部报价)做到这一点/Ctrl-R 0我正在使用以下代码:
vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR>
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR>
function! VisualSearch(dirrection)
let l:register=@@
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
Run Code Online (Sandbox Code Playgroud)