VIM:用冒号分隔的交换列

时间:2016-06-19 15:15:23

标签: vim

如何在VIM编辑器中交换由':'分隔的多个列? (通缉令是2,3,4,1,(...))

例如。 1:2:3:4:5:6 - > 2:3:4:1:5:6

编辑:我需要一次交换多行。

3 个答案:

答案 0 :(得分:2)

这样可行:

:s/\v(.*):(.*):(.*):(.*):(.*):(.*)/\2:\3:\4:\1:\5:\6

答案 1 :(得分:2)

如果您的系统上有awk,我会使用外部awk执行此操作,它看起来比正则表达式更直接:

%!awk -F: -v OFS=":" '{print $2,$3,$4,$1,$5,$6}'

还有一个名为“交换”的插件,它也可以让它变得更容易。

答案 2 :(得分:1)

为了处理超过5个字段,应使用非贪婪重复运算符(.{-}而不是.*):

:s/\v(.{-}):(.{-}):(.{-}):(.{-}):/\2:\3:\4:\1:/