为什么我的简单脚本 vim 不适用于制表符?

为什么我的简单脚本 vim 不适用于制表符?

这是我的vim简单脚本

#!/usr/bin/vim

%norm f^ID
%norm $i,
%!awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'

第一行删除制表符(^I)后的所有内容,第二行在每行后添加“,”,第三行将行转换为列。如果我使用三个单独的命令是完美的但是当我这样做时

:source myscript.vim

仅应用第二个和第三个命令,第一个带有制表符编号。为什么?

答案1

如果^I是两个字符^I,那么第一个命令将查找该字符并在这些行的开头^插入 ( I) a 。D

你应该插入一个文字Ctrl+V Tab现在有^和 的制表符(带有) I

或者,只需使用(类似的东西)

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

这会选出第一个用 制表符分隔的列,cut然后将结果行重新格式化为逗号空格分隔的列。

更短,但结果列之间只有逗号(不是逗号空格):

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

答案2

找到替代解决方案,而不是输入^I,我只需输入 ..a 在 f (f+TAB D) 之后按下的选项卡所以我的脚本现在是

#!/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 " " }'

经过测试并且工作完美。

相关内容