VIM:用冒号分隔的交换列

VIM:用冒号分隔的交换列,vim,Vim,如何在VIM编辑器中交换多个以“:”分隔的列? (通缉令是2,3,4,1,(…) 例如。 1:2:3:4:5:6->2:3:4:1:5:6 编辑:我需要一次交换多行 这将起作用: :s/\v(.*):(.*):(.*):(.*):(.*):(.*)/\2:\3:\4:\1:\5:\6 如果您的系统上有可用的awk,我会使用外部awk,它看起来比正则表达式更简单: %!awk -F: -v OFS=":" '{print $2,$3,$4,$1,$5,$6}' 还有一个名为“exchange”

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

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

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

这将起作用:

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

如果您的系统上有可用的awk,我会使用外部awk,它看起来比正则表达式更简单:

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

还有一个名为“exchange”的插件,它可能也会使它更简单。

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

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

非常感谢。如果总是有5列,但有时更多(5+),那会怎么样?我想是这样的::s/\v(.*):(.*):(.*):(.*)/\2:\3:\4:\1:\5(这不起作用)?酷!(+1)@Allemis,要处理5个以上的字段,我们需要非贪婪重复(请参见我的答案)。我使用:%s/\v(.*)/\2:\1谢谢,但这不起作用-要交换的列的长度不同(5-…),我认为只有在只有6列的情况下才起作用,如果我没弄错的话…@Allemis awk线很容易延伸。比方说,你有200列,只想交换3和6,你可以
%!awk-F:-v OFS=“:”{t=$3;$3=$6;$6=t}7'
@JJoao awk中的非零数字执行默认操作:
print
,您可以使用1,2,3,4…1000。。。萨米人知道吗,我只是想知道是否有什么地下崇高的原因☺...右食指(7)vs.左小指(1)?@JJoao