Linux文件和windows文件在 换行符的区别

Linux或Unix文件,和windows文件,在来回处理时,若是不注意 换行符的区别,可能致使程序错误!!!深入的教训。。。。正则表达式

 

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

fileformats选项,用于处理文件格式问题。如下命令,告诉vim将UNIX文件格式作为第一选择,而将MS-DOS的文件格式作为第二选择:windows

:set fileformats=unix,dos编辑器

检测到的文件格式会被存放在fileformat选项中,咱们能够用如下命令来查询:spa

:set fileformat?unix

咱们还能够利用fileformat选项,来转换种文件格式。例如,使用如下命令将名为readme.txt的MS-DOS格式的文件,转换为UNIX格式的文件。code

:set fileformat=unixorm

在默认状况下,Vim认为文件是由行组成的,而且文件最后一行是以<EOL>为结束符的。若是你想设置文件以<EOL>结束符结尾,则能够用如下命令:ip

:set endoflineio

若是你想设置文件不以<EOL>结束符来结尾,则可使用如下命令:

:set noendofline

显示换行

若是你使用如下命令进入<list mode>,那么就能够清楚的看到以“$”表示的换行符和以“^I”表示的制表符。

:set list

你可使用如下命令退出<list mode>:

:set nolist

删除换行

能够用如下命令删除换行符:

:%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是不会自动换行的,也就是说咱们须要本身决定回车的位置。可是咱们也能够经过指定textwidth选项,让Vim自动在指定位置换行。例如,使用如下命令指定在30列时自动换行。因为在遇到空格时才会自动换行,因此换行的精确位置可能会小于你指定的列宽。

:set textwidth=29

而如下命令告诉Vim从右面算起当达到10个字符的空格时要换行:

:set wrapmargin=10

在指定了文本宽度的状况下,当咱们将一行中的前几个文字删掉时,Vim并不会将后面行中的文本移动上来,而是造成了一些长短不一的段落,这样看起来不是很好。能够有几种方法处理这个问题:

一种方法是,在可视化模式下选中这些文本,而后用gp命令来格式化选中的段落。另外一种方法是,使用gqmotion命令来完成格式。例如要格式化5行,就能够用命令:gq4j。这个命令告诉Vim要格式化本行,同时要格式化下面的4行,这样就达到了格式化5行的目的。若是要格式化整个段落,能够将光标放在段落的第一行上,而后执行命令gq}。而使用命令gqip能够格式化当前段落,并且并没必要要将光标放在段落的第一行上。

若是要想格式化一行,可使用命令gqgq,也能够简记为gqq

注意:选项textwidth优先于wrapmargin。若是要使wrapmargin选项生效,必须将textwidth设置为0(这也是默认值)。

合并行

命令J使两行合并为一行,同时用空格分隔这两行。

经过设置joinspace选项,能够控制合并两行时的分隔符(若是一行是以标点符号来结尾)。若是设置:set nojoinspaces,用J命令合并两行时会用一个空格来分隔;若是设置:set joinspaces,用J命令合并两行时会用两个空格来分隔。若是不但愿用空格来分隔合并的行,可使用gJ命令。

咱们也可使用:join命令,将几行合并为一行并使用空格来分隔各行。若是不但愿加入空格,那么可使用:join!命令。

相关文章
相关标签/搜索