lor*_*age 3 vim text-processing
这是我的另一个vim问题(他们似乎在这里成为我的商标。)。我有一个非常长的文件,基本上由以下形式的行组成:
;07 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T1_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
;08 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
09 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
;10 :ANZ textv S9_1 9_1_K4_2 S9_3 S9_4 9_1_K4_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T1_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V4n E3
;11 :ANZ textv S9_1 9_1_K4_2 S9_3 S9_4 9_1_K4_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V4n E3
12 :ANZ textv S9_1 9_1_K4_2 S9_3 S9_4 9_1_K4_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V4n E3
13 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T1_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
;14 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
;15 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
Run Code Online (Sandbox Code Playgroud)
如您所见,这些行的列未对齐,例如,行13相对于行未对齐,14并且15由于;. 但是还有更困难的错位情况。例如有这样的行:
;14 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
;15 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
Run Code Online (Sandbox Code Playgroud)
或者任何你能想到的。我想要的是对齐所有列,以便每列之间有四个空格距离。例如,我希望线条;07-09看起来像这样:
;07 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T1_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
;08 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
09 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
Run Code Online (Sandbox Code Playgroud)
有没有办法以vim有效的方式做到这一点?
在command模式下,运行:
:%!column -t
Run Code Online (Sandbox Code Playgroud)
但这并没有对齐第一列。您应该使用Align插件以获得更多高级选项。
或者你可以格式化它没有vim,一种perl方式:
perl -anle 'BEGIN{$"="\t"} $F[0] = sprintf("%3s", $F[0]);print "@{[@F]}"' file
Run Code Online (Sandbox Code Playgroud)
设置$"为您想要的任何分隔符。