如何在Vim中按指定列位置实现正则搜索替换并对齐内容
Vim按指定列对齐的动态搜索替换方案
要实现让(精准对齐到第10列的替换,不能用固定空格数的替换命令,得用Vim的表达式替换动态计算需要补充的空格数,具体命令如下:
%s/\(\w\+\),/\=submatch(1) . repeat(' ', 9 - len(submatch(1))) . '(' . submatch(1) . '),/g
命令拆解
%s/:全局范围(所有行)执行替换\(\w\+\),:匹配目标格式(字母/数字/下划线组成的字符串+逗号),并把前面的字符串捕获为分组1\=:开启Vim表达式替换模式,后面的内容会作为Vim脚本表达式计算后生成替换文本submatch(1):引用捕获到的原字符串(比如port_a)repeat(' ', 9 - len(submatch(1))):动态计算空格数:因为要让(落在第10列,所以原字符串+空格的总长度需要是9(第9列结束),用9减去原字符串长度,得到需要填充的空格数,再重复对应次数的空格'(' . submatch(1) . '),:拼接括号包裹的原字符串和结尾逗号
效果示例
原文本:
port_a, port_xyz, port_longname,
替换后((精准对齐第10列):
port_a (port_a), port_xyz (port_xyz), port_longname(port_longname),
如果需要对齐到其他列(比如第15列),只需把命令中的9改成14(目标列数-1)即可。
内容的提问来源于stack exchange,提问作者Poorvaja S
相关产品推荐
相关产品推荐

