NVim(Vim)搜索模式中\<与\>的含义及去除方法
Vim快速替换单词问题解答
核心问题解决
去除搜索寄存器中的\<和\>
当你用*命令后,搜索寄存器/里会自动带上单词边界符\<和\>,可以通过以下两种方式清理:
直接重置搜索寄存器
在命令行执行::let @/ = expand('<cword>')这条命令会把光标下的纯单词直接赋值给搜索寄存器,完全去掉边界符,之后再用
:%s//<c-r>//g就只会显示纯单词。实时清理边界符
如果不想提前修改寄存器,也可以在替换命令里直接处理::%s//\=substitute(@/, '^\<\|\>$', '', 'g')/g利用
substitute()函数把搜索内容里的首尾边界符剔除,直接在替换时使用纯单词。
更高效的批量编辑方案
除了你目前用的yiw+粘贴方法,还有这些更顺手的方式:
用
g*替代*g*搜索当前单词时不会自动添加单词边界符,搜索寄存器里只会存纯单词。之后直接用:%s//修正后的单词/g就能批量替换,适合不需要精确匹配单词的场景。cgn精准批量修改
这是Vim里非常灵活的修改方式:- 光标移到目标单词上,按
*定位第一个匹配项 - 按
cgn修改当前匹配的单词,输入修正内容后按<Esc> - 按
.重复修改下一个匹配项,按n/N跳转匹配位置,能精准控制哪些内容需要修改,避免全局替换的误操作。
- 光标移到目标单词上,按
\<和\>的含义与用途
这两个是Vim正则表达式的单词边界锚点:
\<:匹配单词的起始位置,也就是该位置之前的字符不属于'iskeyword'选项定义的单词字符(默认包括字母、数字、下划线)\>:匹配单词的结束位置,也就是该位置之后的字符不属于单词字符
它们的作用是实现精确单词匹配,比如搜索\<foo\>时,只会匹配单独的foo单词,不会匹配foobar或barfoo里的foo部分,避免不必要的部分匹配。
内容的提问来源于stack exchange,提问作者Alexandre Huot
相关产品推荐
相关产品推荐

