加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 17:04:06 所属栏目:安全 来源:网络整理
导读:在VIM中,您可以搜索指定的字符串.然后,您可以按n或N导航下一个或上一个匹配.按n或N时,光标将移动到匹配的文本.我的问题是,如何快速复制光标下匹配的文本? 编辑: 我需要的是光标下的当前匹配,而不是文档中的所有匹配. 谢谢, 可以编写一个函数来提取最后一个
在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 /删除它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读