首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vim - yank进入搜索寄存器

Vim - yank进入搜索寄存器
EN

Stack Overflow用户
提问于 2010-02-23 01:44:11
回答 5查看 26.7K关注 0票数 86

有没有什么简单快捷的方法可以“拖入”vim的“最后一次搜索”寄存器(“/”)?

从vim文档来看,答案似乎是否定的,但可以通过"let“命令进行分配:

代码语言:javascript
复制
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.

理想情况下,我想要做的是:

代码语言:javascript
复制
"/5yw

它会将光标下接下来的5个单词放到最后一个搜索缓冲区中

或者,如果有一种方法可以搜索指定寄存器的内容,也可以这样做。换句话说,如果我可以这样做:

代码语言:javascript
复制
"A5yw

然后搜索寄存器A中的内容,这也是可行的。

我能做到的最接近的方法是进入一个指定的寄存器,然后将该寄存器复制到最后一个搜索寄存器中,例如

代码语言:javascript
复制
"A5yw
:let @/=@A

冒着让问题变得更长的风险,我想说我并不总是想要5个单词"yank & search“--有时是17个字符,有时是行尾,等等……因此,硬编码宏不会给我带来我想要的灵活性。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-23 01:51:36

/键输入搜索字符串后,可以使用Ctrl-R,然后键入代表要使用的寄存器的字母。

例如:

  • First,"Ayw将一个单词拖入寄存器A
  • 然后,/ ^R A将寄存器A的内容放入搜索字符串。
票数 119
EN

Stack Overflow用户

发布于 2013-09-03 17:56:23

如果您没有使用任何寄存器来存储被拉取的文本,则vim使用0寄存器。您可以通过在/之后键入Ctrl-R 0来搜索它。

一个更复杂的例子。假设您想要在另一个缓冲区中搜索当前光标下的引号内的文本:

  • 您可以使用yi" (yank内引号)
  • 转到您要在其中搜索
  • 类型yank的缓冲区
票数 44
EN

Stack Overflow用户

发布于 2010-02-24 17:25:40

为此,我使用了以下代码:

代码语言:javascript
复制
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
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2312844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档