Vim中无法通过八进制/十六进制值搜索特殊字符?如何解决?
解决Vim中通过Unicode码点的八/十六进制搜索字符的问题
这个问题的核心是没搞清楚Vim里两种编码转义的区别——针对字节的转义和针对Unicode码点的转义,我来给你一步步说清楚:
为什么你之前的搜索失败了?
你用ga看到的Octal 510和Hex 0148是这个字符的Unicode码点,但你用的\%o和\%x是用来匹配当前文件编码(utf-8)下的单个字节的转义符。而U+0148(也就是字符ň)在utf-8里是两个字节C5 88,单个字节的八进制最大是377(十进制255),510已经超出范围了,自然搜不到。
正确的搜索方法
根据你获取的码点信息,有两种直接的搜索方式:
1. 十六进制码点搜索(最推荐)
直接用Vim的Unicode码点转义符\%u,后面跟4位十六进制码点:
/\%u0148
如果你的Vim版本较新,也可以简化成:
/\u0148
2. 八进制码点搜索
用针对Unicode码点的八进制转义符\%O(大写O,注意和字节转义的\%o小写区分开),后面跟八进制码点:
/\%O510
额外补充:Vim编码转义符的区别
为了避免以后混淆,给你列下常用的转义符差异:
\%o:匹配单个字节的八进制值(对应文件编码的字节)\%O:匹配Unicode码点的八进制值(对应字符的Unicode编号)\%x:匹配单个字节的十六进制值(文件编码字节)\%u:匹配4位十六进制的Unicode码点(U+0000到U+FFFF范围)\%U:匹配8位十六进制的Unicode码点(支持更广泛的Unicode字符)
这样你再搜这个字符就没问题啦~
内容的提问来源于stack exchange,提问作者user364902
相关产品推荐
相关产品推荐

