我想在gvim for windows中删除文件中的空白行(不是来自cygwin的vim).
:g/^$/d # delete all blank lines correctly
:%s/^$//g #can not delete all blank lines
Run Code Online (Sandbox Code Playgroud)
这是一个如何表达行尾的问题,
我已经用命令详细检查了我的文件%!xxd
,
我发现在每一行的末尾有一个0d0a,
当行的结尾由特殊字符表示时$
,
它是否包含该0D0A?
表达the end of line
命令g和 s的概念是不同的?
:%s/^$\n//g #delete all blank lines correctly
Run Code Online (Sandbox Code Playgroud)
它混淆了我^$
将包含特殊字符\r\n
,也许^$
在s
命令中不包含特殊字符\r\n
,但^$
在g
命令中包含特殊字符\r\n
.哪个位置有特殊性能 $
指向?在... \r\n
之前或之后\r\n
.
不,这两个命令正在做不同的事情.:g/^$/d
说"找到空行并删除它们",同时:s/^$//g
意味着"在这个(当前)行中,用任何东西(仍然在同一行上)替换所有出现在线上的东西".正如你所注意到的,后者没有意义.
编辑为您的编辑:
在^$
不包含任何数据.字面意思是"行的开始,然后是行尾",其中"行"由Vim检测到.Vim就知道了\r\n
或\r
或\n
(具体取决于文件和哪个OS创建它,并在Vim的选项)标志线的末端,并相应地对待它.该分离器位于之间的^$
.
这就像你说"我家里的房间" - 这(至少对我而言)不包括墙壁.当你说^$\n
,你说的是"空荡荡的房间,还有旁边的木墙".s/^$//
是"空的(已空的)房间"; s/^$\n//
是"空荡荡的房间,打破它的墙".
相比之下,因为g
它再也没有说什么\n
.它找到空行(不关心任何分隔符),然后对它执行命令; 在您的情况下,命令是d
:删除一行.它会删除整行(以及任何换行符).例如,如果你写:g/DELETEME/d
,它会删除任何地方有DELETEME的行:它不关心匹配部分中的任何换行,它只是删除匹配的行.
归档时间: |
|
查看次数: |
714 次 |
最近记录: |