有没有简单/快捷的方法可以“猛烈”进入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个字,我想“抽搐和搜索” - 有时它是17个字符,有时它是在行的末尾,等...所以一个硬编码的宏不能给我我想要的灵活性。
答案 0 :(得分:97)
按/
输入搜索字符串后,您可以使用Ctrl-R
然后键入代表您要使用的寄存器的字母。
例如。
"Ayw
将一个单词划入注册A / ^R A
将寄存器A的内容放入搜索字符串。答案 1 :(得分:30)
如果您没有使用任何寄存器来存储被拽的文本,则vim使用0
注册。您可以在Ctrl-R 0
之后键入/
来搜索该内容。
一个更复杂的例子。假设您要在另一个缓冲区中搜索当前位于光标下的引号内的文本:
yi"
(yank inner quote)/Ctrl-R 0
答案 2 :(得分:9)
我正在使用以下代码:
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
答案 3 :(得分:5)
所以基本上是#和*命令的扩展版本,对吗?听起来你想要定义一个自定义操作符(一个需要运动的命令)。我从来没有真正做到这一点,但我找到了plugin,看起来它可能会更容易这样做。提供了一些例子。
答案 4 :(得分:4)
搜索选择:
如果你想首先抽出一行的一部分,那么使用&#34; v&#34;然后用光标移动,直到你标记了你想要的东西,然后按y选择yank,现在选择位于寄存器0
然后,您可以输入/Ctrl-R 0