vimを使用して複数の行と列を固定距離で整列させる方法

vimを使用して複数の行と列を固定距離で整列させる方法

これは私が持っているもう一つの問題です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    

ご覧のとおり、これらの行の列は誤ってソートされています。つまり、行が行と比較して間違って13配置されています。ただし、ソートが難しい場合があります。たとえば、次のような行があります。1415;

;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    

それとも何でも想像できます。私が望むのは、各列の間に4つのスペースがあるようにすべての列を並べ替えることです。たとえば、;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  

vimこれを効率的に行う方法はありますか?

答え1

commandモードで以下を実行します。

:%!column -t

しかし、これは最初の列をソートしません。使用する必要があります調整高度なオプションのためのプラグイン。

または、以下を使用せずにvimフォーマットすることもできますperl

perl -anle 'BEGIN{$"="\t"} $F[0] = sprintf("%3s", $F[0]);print "@{[@F]}"' file

$"必要な区切り記号に設定してください。

関連情報