VIM:交换由空格分隔的两列

4re*_*l77 12 vim

我有两列:

cats dog  
dog cats
Run Code Online (Sandbox Code Playgroud)

我想交换两列:

dog cats
cats dog 
Run Code Online (Sandbox Code Playgroud)

使用vim我该怎么做?

rom*_*inl 26

我的第一个想法,一个替换,最终看起来太像Birei了所以我用AWK(我不太了解)用作过滤器:

:%!awk '{print $2, $1}'
Run Code Online (Sandbox Code Playgroud)

  • 如果用户在没有 AWK 的系统上怎么办? (2认同)

Bir*_*rei 9

您可以使用正则表达式来实现它,使用\S非空白字符和\s空格,例如:

:%s/\v^(\S+)\s+(\S+).*$/\2 \1/
Run Code Online (Sandbox Code Playgroud)

它产生:

dog cats
cats dog
Run Code Online (Sandbox Code Playgroud)

  • 如果有超过两列的话,其他人需要将第一列交换为最后一列:(狗雪貂猫 - >猫雪貂犬)`:%s /\v ^(\ S +)\ s +(\ S +) (.*)$ /\2\3\\ 1 /` (3认同)