vim字符串替换命令substitute是Vim常用命令之一(简写s)。

通过指定将被替换的源字符串以及目标字符串,以及替换操作的执行范围等信息,可以指示Vim在特定范围进行字符串匹配和替换操作。

下面我们介绍vim把字符串替换成换行符的命令

在某些场景下,需要将当前文件中的某些语句进行换行显示,以达到对文件排版等目的。

例如我们希望将如下的文本内容进行逐句按行显示:

Vim教程网(https://vimjc.com)是由一个小女生苦苦支撑和维护的Vim相关网站。虽然一直没什么人气,但是她仍然坚持更新了6年的博文。目前已经写了100+篇vim命令和技巧相关的文章。希望能给有需要的同学提供一点点帮助。

如果您是一个Vim入门者,您最先想到的命令可能是在Vim命令行模式下执行替换命令::%s/。/。\n/g。不过很遗憾,这条命令并不会如你所愿,并不能将当前文件中的所有“。”替换成换行的效果。

这里主要涉及到Vim下的换行符以及Vim替换命令。

首先,Vim替换命令substitute的语法格式为::[range]s/源字符串/目标字符串/[option];其次,换行符在替换命令的 源字符串 和 目标串 分别具有不同的含义。

替换命令的 源字符串 部分,用于指定搜索目标,要在替换命令的源字符串部分匹配行尾,需要使用 \n;

替换命令的 目标字符串 部分,用于指定要替换出的目标,如果要通过替换命令插入新行,需要使用 \r。

因此,对于本文举例的文本使用以下Vim命令 

:%s/。/。\r/g 

可对其实现逐句按行显示的效果,如下所示。

Vim教程网(https://vimjc.com)是由一个女生苦苦支撑和维护的Vim相关网站。

虽然一直没什么人气,但是她仍然坚持更新了6年的博文。

目前已经写了100+篇Vim命令和技巧相关的文章。

希望能给有需要的同学提供一点点帮助。

反之,如果需要将上面逐句按行显示的文本转换成本文开头描述的文本,可以使用下面的Vim命令

:%s/。\n/。/g。

vim替换新行

一句话总结上述内容就是:对于Vim替换命令s来说,如果要vim替换掉换行符,需使用 \n 作为搜索串;如果要vim替换字符串生成新行,请使用 \r 作为目标串。

vim删除换行

可以用以下命令删除换行符:

:%s/\n//g

可以用以下命令删除DOS文件中的回车符“^M”:

:%s/\r//g

可以用以下命令转换DOS回车符“^M”为真正的换行符:

:%s/\r/\r/g

可以用以下命令删除行尾的空格以及DOS回车符。它没有使用“/”字符作为替换命令各个参数间的分隔符,而是使用了“#”字符。命令还使用了“\?”正则表达式,用来匹配它前面出现的字符0次或1次。

:%s#\s*\r\?$##

可以用以下命令删除三行空行:

:%s/^\n\{3}//

可以用以下命令将连续的两个空行替换成一个空行:

:%s/\n\n/\r/g

vim删除空行

:g/^s*$/d

简单解释一下:

g :全区命令

/ :分隔符

^s*$ :匹配空行,其中^表示行首,s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。

/d :删除该行

vim删除行尾空格:

:%s= *$==

该命令全局查找文本文件的行尾空格并删除。

解释:

%s全局查找替换

=为%s命令的分隔符,如果把=换为/,则该命令可以写为:%s/ *$//

” *$”, $表示行尾,*匹配前面0个到n个字符,*前面是空格,因此此正则表达式匹配行尾的0个到n个字符。

==,分隔符没有中间没有内容,表示删除匹配空格, 在这里表示删除行尾空格。

vim换行方式

在早期的打印机时代,开始新的一行要占用两个字符的时间。如果到了一行的结尾处,你要快速回到新的一行的开头,需要打印针头在纸面上飞快地掠过,常常会在纸面上留下污点。解决这个问题的办法就是,用两个字符:一个字符<Return>来移到第一列,另一个字符<Line feed>来新增一行。计算机产生以后,存储较为昂贵,在如何解决回车换行这个老问题上,人们产生了不同的意见。UNIX人认为在到达一行的结尾时新增一行<Line feed> (LF),而Mac人则认同<Return> (CR)的解决办法,MS则坚持古老的<Return><Line feed> (CRLF)的方法。这就意味着如果你将一个文件从一个系统转移到另一个系统,就面临着回车换行的问题。而Vim编辑器则会自动的认出这种文件格式方面的区别,并做出相应处理。



作者:i林筱程
链接:https://www.jianshu.com/p/e2f4618e9abd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐