微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VIM增量搜索,如何复制光标下匹配的字符串?

在VIM中,您可以搜索指定的字符串.然后,您可以按n或N导航下一个或上一个匹配.按n或N时,光标将移动到匹配的文本.我的问题是,如何快速复制光标下匹配的文本?

编辑:

我需要的是光标下的当前匹配,而不是文档中的所有匹配.

谢谢,

可以编写一个函数提取最后一个搜索模式的匹配
在游标周围,并创建一个映射来调用它.
nnoremap <silent> <leader>y :call setreg('"',MatchAround(@/),'c')<cr>
function! MatchAround(pat)
    let [sl,sc] = searchpos(a:pat,'bcnW')
    let [el,ec] = searchpos(a:pat,'cenW')
    let t = map(getline(sl ? sl : -1,el),'v:val."\n"')
    if len(t) > 0
        let t[0] = t[0][sc-1:]
        let ec -= len(t) == 1 ? sc-1 : 0
        let t[-1] = t[-1][:matchend(t[-1],'.',ec-1)-1]
    end
    return join(t,'')
endfunction

上述函数确定匹配的开始和结束位置
并仔细取出匹配的文本,正确处理多行
模式和多字节字符.

一个选项是创建文本对象映射(请参阅:help text-object)
操作光标下的最后一个搜索模式匹配.

vnoremap <silent> i/ :<c-u>call Selectmatch()<cr>
onoremap <silent> i/ :call Selectmatch()<cr>
function! Selectmatch()
    if search(@/,'bcW')
        norm! v
        call search(@/,'ceW')
    else
        norm! gv
    endif
endfunction

要使用这些映射复制当前匹配,请使用yi /.至于其他文字对象,例如,也可以使用vi /在视觉上选择它,或使用di /删除它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐