これは私のvimの単純なスクリプトです。
#!/usr/bin/vim
%norm f^ID
%norm $i,
%!awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'
1行目はタブ文字(^ I)の後のすべての内容を削除し、2行目は各行の後に「、」を追加し、3行目は行を列に変換します。 3つの別々のコマンドを使用すると完璧ですが、そうすると
:source myscript.vim
2番目と3番目のコマンドのみが適用され、最初のコマンドにはタブ番号が付けられています。なぜ?
答え1
^I
2文字の^
場合、I
最初のコマンドはその文字を見つけてその行の先頭に^
()を挿入します。I
D
以下を挿入する必要があります。言葉Ctrl+V Tab^
これでタブ文字(with)とがありますI
。
または(同じもの)を使用してください。
%!cut -f 1 | awk -v ORS=', ' '{ print }'
これにより、タブで区切られた最初の列が選択され、cut
結果行がコンマ区切りの列に再フォーマットされます。
短いが、結果列の間にカンマ(カンマスペースではない)だけがあります。
%!cut -f 1 | tr '\n' ','
答え2
代替ソリューションが見つかりました。を入力する代わりに^I
f(f + TAB D)の後にタブを押してから..aと入力したので、スクリプトは次のようになります。
#!/usr/bin/vim
#the space after f is not a space,is a tab so press tab
%norm f D
%norm $i,
%!awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'
テストを経て完璧に動作します。