转过来:
· 阿富汗 Country1
· 阿爾及利亞 Country2
· 孟加拉 Country3
* · 不丹 Country4 (請參閱下列*說明處)
进入这个:
Country1,Country2,Country3,Country4
我执行以下操作:
%s/[^\x00-\x7F]//g
删除中文字符。
%s/\s\+$//g
删除尾随空格
%s/\s\+//g
删除剩余的白人步伐
g/^$/d
删除空行
%s/\n/,/g
将每一行连接成一行(每个单词用逗号分隔)。
现在我想在一个命令中执行此操作。所以我连接了所有这些命令:
%s/[^\x00-\x7F]//g|%s/\s\+$//g|%s/\s\+//g|g/^$/d|%s/\n/,/g
产生这个:
Country1,Country2,,Country3,,Country4,
我发现它很奇怪,因为如果我单独使用它们,命令就会起作用。
这里发生了什么?
答案 0 :(得分:4)
并非所有Ex命令都可以连接。某些命令(如:global
命令)本身可以接受一系列命令,因此会占用所有剩余的参数,包括|
命令分隔符。有关此类命令的列表,请参阅:help :bar
。如果您确实希望在序列中包含此类命令,则帮助还提供了解决方案:您需要将命令本身与:execute
括起来。适用于您的问题,这将成为:
%s/[^\x00-\x7F]//g|%s/\s\+$//g|%s/\s\+//g|exe 'g/^$/d'|%s/\n/,/g
这样,最后一个:s
命令应用于整个缓冲区,而不是:global
命令的范围。
答案 1 :(得分:2)
怎么样:
%s/[^\x00-\x7F]\|\s//g|%s/\n\{2,}/,/g