这是我的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 " " }'
经过测试并且工作完美。