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