Linux或Unix文件,和windows文件,在来回处理时,如果不注意 换行符的区别,可能导致程序错误!!!深刻的教训。。。。

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

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

:set fileformats=unix,dos

检测到的文件格式会被存放在fileformat选项中,我们可以用以下命令来查询:

:set fileformat?

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

:set fileformat=unix

在默认情况下,Vim认为文件是由行组成的,并且文件最后一行是以<EOL>为结束符的。如果你想设置文件以<EOL>结束符结尾,则可以用以下命令:

:set endofline

如果你想设置文件不以<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!命令。

Linux文件和windows文件在 换行符的区别的更多相关文章

  1. linux下与windows下的换行符

    [原文有些许错误,已作了修改] 回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传 ...

  2. Linux换行符和Windows换行符的区别与转换

    不同系统文本文件的行尾换行符不同:    Windows为一个回车'\r'(CR或^M)和一个换行'\n'(NL或LF)(括号内是其它显示方法)    Linux为一个换行'\n'    Mac为一个 ...

  3. WINDOWS和UNIX换行符的理解

    # WINDOWS和UNIX换行符的理解 **file1.txt**17.143.161.37   其他    美国54.163.255.40   其他    美国 弗吉尼亚州 亚马逊公司 **[ro ...

  4. Linux下去掉Windows文件的^M

    Windows下文件换行符为\r\n  而Linux下文件的换行为\n 因此在Linux下可以使用vim编辑文件  使用全文替换命令 :%s/\r//g 将\r全部替换掉 也可以在Linux使用dos ...

  5. linux与windows回车换行符的区别

    转自:http://www.cnblogs.com/dartagnan/archive/2010/12/14/2003499.html “回车”(carriage return)VS  “换行”(li ...

  6. linux命令 把Windows 文件拷贝到linux

    scp build.zip mesadmin@dpydalapp01.sl.bluecloud.ibm.com:/tmp   // 把Windows上的build.zip拷贝到mesadmin@dpy ...

  7. Linux中去除windows文件中的控制字符

    Windows下的文本文件拿到Linux下时,会在文本行最后面出现很多字符:^M Linux下去除掉的方法是:dos2unix file(需要软件包dos2unix) 当然逆转的方法为unix2dos ...

  8. Linux中使用Vim快速更换文档中Windows换行符为Linux平台

    一.简述 平时我们把Windows编写好的sh文件放在linux上跑时,经常出现换行符的问题.快速切换的解决方法如下: 二.解决 vim test.sh :set ff? 如果出现fileforma= ...

  9. git在不同平台windows、linux、mac 上换行符的问题

    0.01 不同平台上换行符的问题 1,不同平台对换行符的制定不同 windows <回车换行> (carriage return AND line feed) “\n\r” CRLF Un ...

随机推荐

  1. step by step 之餐饮管理系统三

    1.说明 表名的长度最长为18个字符 茶色的字段为主键或联合主键 浅黄色的字段为索引 浅灰底色的字段为临时表中比正式表多出的字段 数据库系统:Sqlserver2008 脚本工具:使用CodeGene ...

  2. H3C ipsec ike 协商配置

    1. 分几步设置 (1)定义ACL (2)创建 ipsec 安全建议 1.选择认证方式 ah 选择 ah头认证方式 不配置 ipsec不能建立成功 (3)创建IKE keychain 可以写多条key ...

  3. day4----生成器,迭代器

    迭代器,生成器,装饰器 1.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要 ...

  4. nginx安装启动

    参考:http://network.51cto.com/art/201005/198198_4.htm 下载nginx tar.gz安装包下载pcre tar.gz安装包 安装pcretar zxvf ...

  5. 关于Yaf的一些说明[转Yaf作者]

    关于Yaf的一些说明[转Yaf作者] 说明下,这篇文章转至于yaf作者鸟哥的博文,因为最近在系统的学习Yaf框架,发现了这篇文章,感觉对于了解Yaf框架还是很有用处,所以转过来和大家分享一下 Yaf是 ...

  6. poj 1021矩阵平移装换后是否为同一个矩阵

    2D-Nim Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3081   Accepted: 1398 Descriptio ...

  7. 设计模式->观察者模式

    观察者模式能非常大的减少模块之前的耦合.具体的观察者模式,客官们可以去看<设计模式>或者<Head first设计模式>等之类的书. 在java中,java.util库中封装了 ...

  8. GoDaddy自动续费信用卡被扣款后的退款方法

    今天突然收到信用卡被GoDaddy捐款的通知,上GoDaddy网站上一看,是去年购买后来没有使用的一个CA证书被自动续费了.原来在GoDaddy购买的CA证书默认是每年自动续费的,这是一个大坑啊! 当 ...

  9. 支持事件穿透?使用pointer-events样式

    使用绝对定位元素,让元素A完全盖住元素B时,如何通过元素A来响应元素B的事件呢? 上图可以用下面的SVG代码来实现: <svg width="200" height=&quo ...

  10. iOS YSMine 通用设置

    概述 我们在开发的过程中,经常需要重复的写个人中心设置的代码,很多情况下,我们都是通过if(indexPath.row)来判断操作以及要跳转的页面,这样的情况是非常不友好的,尤其是当我们需要调整显示顺 ...