在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] 举报,一经查实,本站将立刻删除。