Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在vim中,重新排列以制表符分隔的文本文件中的列的最佳方式是什么?_Vim - Fatal编程技术网

什么';在vim中,重新排列以制表符分隔的文本文件中的列的最佳方式是什么?

什么';在vim中,重新排列以制表符分隔的文本文件中的列的最佳方式是什么?,vim,Vim,我已经知道怎么用它了 :%s/\(\S\+\)^I\(\S\+\)/\2^I\1/ 但我觉得我打字太多了。有没有更干净、更快捷的方法呢?如果列已对齐,您可以通过按Ctrl+V键使用可视块模式,然后进行剪切和粘贴。如果列未对齐,请先增加选项卡宽度,使其比相关列的内容长。在VIM中执行此操作的最佳方法是-不要使用VIM,并(重新)使用现有工具执行此作业*NIX特定解决方案: :%!awk -F \\t '{print $2 FS $1}' 将制表符分隔文件的内容通过管道传输到awk,并打印交换的

我已经知道怎么用它了

:%s/\(\S\+\)^I\(\S\+\)/\2^I\1/

但我觉得我打字太多了。有没有更干净、更快捷的方法呢?

如果列已对齐,您可以通过按Ctrl+V键使用可视块模式,然后进行剪切和粘贴。如果列未对齐,请先增加选项卡宽度,使其比相关列的内容长。

在VIM中执行此操作的最佳方法是-不要使用VIM,并(重新)使用现有工具执行此作业*NIX特定解决方案:

:%!awk -F \\t '{print $2 FS $1}'
将制表符分隔文件的内容通过管道传输到
awk
,并打印交换的前两列,用字段分隔符(FS)分隔<也可以在Windows中找到代码>awk


另外,最初我想用
cut
编写相同的代码,但无论出于何种原因,在我的系统上,
cut-f2,1
(-d是不需要的,因为制表符是默认的分隔符)以相同的顺序打印字段,而不是交换:|

谢谢,这似乎很有效。我不认为我已经充分利用了视觉块模式。块模式是伟大的。尝试选择一个块并使用I或a在块中的每一行之前或之后添加相同的文本(如注释代码)。Hrm。当我有不同数量的列时,我不需要改变它吗?这很容易用
\{42}
完成是的,我知道这个awk命令,但实际上我在寻找更优雅的东西。我也经常使用cut,但它不会重新排列列。