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. linux环境变量查看及修改

    例如用命令 echo $PATH 则可以查看该环境变量为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 添加环境定义一个变量 ...

  2. 小程序 - c字符串表示大整数

    #define max(a, b) ((a) > (b) ? (a) : (b)) static char* reverse(char *str) { char *l, *r, c; ; l & ...

  3. 502 Server dropped connection

    在本地电脑上开启了,全局VPN代理后,出现 502 报错. 502 Server dropped connection The following error occurred while tryin ...

  4. Magicodes.WeiChat——WeChatOAuthTest(网页授权获取用户基本信息)

    Demo访问地址:http://wechat.magicodes.net/app/AppDemo/WeChatOAuthTest?tenantId=1 关于公众号如何获取用户信息,请参考此文档:htt ...

  5. 升级ruby版本那"不堪回首的经历"

    前段时间在玩Chef-一个IT基础设施自动化工具.由于Chef是由Ruby写的一个gem,那么就需要安装Ruby.当然Ruby我早就安装了,并且使用rvm来管理Ruby及Gem.本来一切看似正常,但是 ...

  6. baguetteBox.js响应式画廊插件(纯JS)

    baguetteBox.js baguetteBox.js 是一个简单和易于使用lightbox纯JavaScript脚本,拥有图像放大缩小并带有相应的CSS3过度,并能在触摸屏等设备上完美展示. D ...

  7. atitit. 集合groupby 的实现(2)---自定义linq查询--java .net php

    atitit.  集合groupby 的实现(2)---自定义linq查询--java .net php 实现方式有如下 1. Linq的实现原理流程(ati总结) 1 2. groupby  与 事 ...

  8. CSS入门级学习

    css入门学习1:认识CSS 1.1:css简介,css全称是层叠样式表,Cascading style sheets 1.2:css的作用,主要是用于定义html内容在浏览器内的显示样式,如文字大小 ...

  9. Socket通信实例(C#)

    SOCKET原理 一.套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息: ...

  10. MongoDB学习笔记——索引管理

    索引 索引能够提升查询的效率.没有索引,MongoDB必须扫描集合中的所有文档,才能找到匹配查询语句的文档. 索引是一种特殊的数据结构,将一小块数据集保存为容易遍历的形式.索引能够存储某种特殊字段或字 ...