《笨方法学Vimscript》第16章映射正则`\+$`作用疑问
问题核心解答
?^==\+$是Vim的反向搜索正则,其中\+$的作用可以拆分为两部分解释:
\+:匹配前面的字符(这里是等号=)1次及以上,结合开头的==,整体要求匹配的行至少有2个连续等号,避免误匹配到仅以单个等号开头的普通行$:行尾锚定,要求匹配的内容一直延伸到行尾,也就是整行除了等号之外没有任何其他字符,刚好对应「仅包含等号、无其他内容」的匹配要求。
为什么去掉后在你的示例里效果一致?
你的测试文本中的标题分隔线都是纯等号整行的情况,^==已经可以命中这些行,所以暂时看不出差异。但如果你的文本中存在开头是等号但后面有其他内容的行(比如== 待办清单 ==这种行内标记),去掉\+$的搜索规则会误匹配到这类行,导致cih操作的对象出错,只有带\+$的规则能严格匹配纯等号的标题分隔线。
为什么手动输入搜索指令会报错?
因为你看到的映射里写的是\\+,这是Vimscript双引号字符串的转义规则:双引号包裹的内容中,反斜杠本身需要转义才能被识别为正则的元字符。映射实际执行时,\\+会被自动转换为\+,你手动输入搜索指令时直接输入?^==\+$即可正常运行,不要多打一个反斜杠。
内容的提问来源于stack exchange,提问作者user16711485
相关产品推荐
相关产品推荐

