有没有什么简单快捷的方法可以“拖入”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 @/=@A冒着让问题变得更长的风险,我想说我并不总是想要5个单词"yank & search“--有时是17个字符,有时是行尾,等等……因此,硬编码宏不会给我带来我想要的灵活性。
发布于 2010-02-23 01:51:36
按/键输入搜索字符串后,可以使用Ctrl-R,然后键入代表要使用的寄存器的字母。
例如:
"Ayw将一个单词拖入寄存器A/ ^R A将寄存器A的内容放入搜索字符串。发布于 2013-09-03 17:56:23
如果您没有使用任何寄存器来存储被拉取的文本,则vim使用0寄存器。您可以通过在/之后键入Ctrl-R 0来搜索它。
一个更复杂的例子。假设您想要在另一个缓冲区中搜索当前光标下的引号内的文本:
yi" (yank内引号)发布于 2010-02-24 17:25:40
为此,我使用了以下代码:
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
endfunctionhttps://stackoverflow.com/questions/2312844
复制相似问题