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 /删除它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |