Vim – 进入search注册
有没有简单/快速的方法来“插入”vim的“上次search”寄存器(“/)?
从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个单词并放到最后一个search缓冲区中
另外,如果有一种方法来search一个已命名的寄存器的内容,那也可以。 换句话说,如果我能做到的话:
"A5yw
然后search寄存器A中的内容,那也可以。
最接近的我可以进入一个已命名的寄存器,然后将该寄存器复制到最后一个search寄存器中,例如
"A5yw :let @/=@A
在长时间提出问题的风险中,我想指出,并不总是5个字我想“抽屉&search” – 有时它是17个字符,有时是到行尾,等等…所以一个硬编码的macros并不能提供我想要的灵活性。
按/
inputsearchstring后,可以使用Ctrl-R
,然后键入代表您要使用的寄存器的字母。
例如。
- 首先,
"Ayw
把一个单词放入寄存器A中 - 然后,
/ ^RA
将寄存器A的内容放入searchstring中。
如果你没有使用任何寄存器来存储被抽出的文本vim使用0
寄存器。 您可以通过在/
之后键入Ctrl-R 0
来search。
一个更复杂的例子。 假设您想在另一个缓冲区中search光标右侧的引号内的文本:
- 你可以用
yi"
来做这个yi"
(内省的内引号) - 转到您要search的缓冲区
- 键入
/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
所以基本上是#和*命令的扩展版本,对吧? 这听起来像是你想要定义一个自定义操作符(一个需要运动的命令)。 我从来没有真正做到这一点,但我find了一个插件 ,看起来可能会更容易做到这一点。 有一些例子提供。
searchselect:
如果你想先抽出一行的一部分,然后用“v”和光标移动,直到你已经标记了你想要的,然后按y进行抽签,现在select在寄存器0
你可以input/Ctrl-R 0