vim编辑器逗号切分列 Vim给数值加逗号不需要使用lookaround - Linux - 服务器之家

服务器之家

专注于服务器技术!
当前位置:首页 > 服务器系统 > Linux

vim编辑器逗号切分列 Vim给数值加逗号不需要使用lookaround

发布时间:2017-10-25 来源:服务器之家

1234567890
变成
1,234,567,890
其中使用了正则表达式的Lookaround特性,即Look ahead assertion和Look behind assertion。作者认为Lookaround和anchor相似。确实如此,因为它们不“吃掉”字符,它们可以用来标定位置。在书中的例子里,Look behind assertion用来确定插入逗号的位置前面有一个数字,Look ahead assertion则保证了插入逗号的位置后面的数字字符的个数为三的整数倍,因此能够正确地插入逗号。书中这一部分使用的是Perl正则表达式:(?<=\d)(?=(\d\d\d)+$)
        Vim的Look ahead assertion为:
\@=
Look behind assertion为:
\@<=
上面的Perl正则表达式改成Vim风格,就成了:
\(\d\)\@<=\(\(\d\d\d\)\+$\)\@=
替换命令就应该写成(range是光标所在行.):
:.s/\(\d\)\@<=\(\(\d\d\d\)\+$\)\@=/,/g
看起来好古怪!和Perl不同,像(, +, {这样的正则表达式符号均需要转义,于是写出来的表达式看起来实在有点……
    实际上使用Vim的正则表达式的话,可以不必完全遵循Perl的思路。这个例子中我们就完全没使用Lookaround的必要。通过使用\zs, \ze来标定插入逗号的位置,可以使用一个简单的正则表达式来实现:
:.s/\d\zs\ze\(\d\d\d\)\+$/,/g
这个表达式仅仅适用于一行仅有一个数值的情况,如果一行中有多个数值需要处理,可以将表达式中的$改成\>,如
:.s/\d\zs\ze\(\d\d\d\)\+\>/,/g