:v/./$s/$/<ctrl-v><enter>./|'';/./-1j|$d
Replaces multiple blank lines with just one blank line.
大家看看,试着解释一下
我试了几次,都没有好用,命令的意思好像是把空行(不包括空格,TAB..行)删除掉,
用g/^$/ d 应该就可以。
:v/./$s/$/<ctrl-v><enter>./|'';/./-1j|$d
可以分解为:
1 :v/./$s/$/<ctrl-v><enter>./
意思是把所有空行选出来并且到最后一行然后添加N个行,N为查找到的空行数
2 | 命令的意思为循环执行
3 '' 跳转到上一次位置
4 ;/./ 查找到下一个非空行
5 -1j 合并一行
6 $d 把最后一行删除
总之我感觉此条命令太复杂,而太复杂的东西最好使用VIM中的宏记录,记录操作后,再重复执行,应该比这个好明白。
:v
怎么使用?
help :v如下:
:[range]g[lobal]/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} matches.
:[range]g[lobal]!/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} does NOT match.
*:v* *:vglobal*
:[range]v[global]/{pattern}/[cmd]
Same as :g!.
是的,要达与楼主同样效果,其实完全可以用简短得多的命令,
:g/^$/,/./-j
就行了。
甚至,只要用
cat -s
就行了
我在 vi 下面试试,能成。在 vim 下面就不稳定,有时行有时不行。