私の単純なvimスクリプトがタブ文字で機能しないのはなぜですか?

私の単純なvimスクリプトがタブ文字で機能しないのはなぜですか?

これは私の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

^I2文字の^場合、I最初のコマンドはその文字を見つけてその行の先頭に^()を挿入します。ID

以下を挿入する必要があります。言葉Ctrl+V Tab^これでタブ文字(with)とがありますI

または(同じもの)を使用してください。

%!cut -f 1 | awk -v ORS=', ' '{ print }'

これにより、タブで区切られた最初の列が選択され、cut結果行がコンマ区切りの列に再フォーマットされます。

短いが、結果列の間にカンマ(カンマスペースではない)だけがあります。

%!cut -f 1 | tr '\n' ','

答え2

代替ソリューションが見つかりました。を入力する代わりに^If(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 " " }'

テストを経て完璧に動作します。

関連情報