Linux文件和windows文件在 换行符的区别
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文件在 换行符的区别的更多相关文章
- linux下与windows下的换行符
[原文有些许错误,已作了修改] 回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传 ...
- Linux换行符和Windows换行符的区别与转换
不同系统文本文件的行尾换行符不同: Windows为一个回车'\r'(CR或^M)和一个换行'\n'(NL或LF)(括号内是其它显示方法) Linux为一个换行'\n' Mac为一个 ...
- WINDOWS和UNIX换行符的理解
# WINDOWS和UNIX换行符的理解 **file1.txt**17.143.161.37 其他 美国54.163.255.40 其他 美国 弗吉尼亚州 亚马逊公司 **[ro ...
- Linux下去掉Windows文件的^M
Windows下文件换行符为\r\n 而Linux下文件的换行为\n 因此在Linux下可以使用vim编辑文件 使用全文替换命令 :%s/\r//g 将\r全部替换掉 也可以在Linux使用dos ...
- linux与windows回车换行符的区别
转自:http://www.cnblogs.com/dartagnan/archive/2010/12/14/2003499.html “回车”(carriage return)VS “换行”(li ...
- linux命令 把Windows 文件拷贝到linux
scp build.zip mesadmin@dpydalapp01.sl.bluecloud.ibm.com:/tmp // 把Windows上的build.zip拷贝到mesadmin@dpy ...
- Linux中去除windows文件中的控制字符
Windows下的文本文件拿到Linux下时,会在文本行最后面出现很多字符:^M Linux下去除掉的方法是:dos2unix file(需要软件包dos2unix) 当然逆转的方法为unix2dos ...
- Linux中使用Vim快速更换文档中Windows换行符为Linux平台
一.简述 平时我们把Windows编写好的sh文件放在linux上跑时,经常出现换行符的问题.快速切换的解决方法如下: 二.解决 vim test.sh :set ff? 如果出现fileforma= ...
- git在不同平台windows、linux、mac 上换行符的问题
0.01 不同平台上换行符的问题 1,不同平台对换行符的制定不同 windows <回车换行> (carriage return AND line feed) “\n\r” CRLF Un ...
随机推荐
- 斯坦福第十七课:大规模机器学习(Large Scale Machine Learning)
17.1 大型数据集的学习 17.2 随机梯度下降法 17.3 微型批量梯度下降 17.4 随机梯度下降收敛 17.5 在线学习 17.6 映射化简和数据并行 17.1 大型数据集的学习
- C# 图片盖章功能实现,支持拖拽-旋转-放缩-保存
实现图片盖章功能,在图片上点击,增加“图章”小图片,可以拖拽“图章”到任意位置,也可以点击图章右下角园框,令图片跟着鼠标旋转和放缩. 操作方法:1.点击增加“图章”2.选中移动图标3.点中右下角放缩旋 ...
- python 静态方法,类方法 ,类的继承
转自: http://cowboy.1988.blog.163.com/blog/static/75105798201091141521583/ 1.关于定义类的一些奇特之处 今天在Python中 ...
- hdu 5748(求解最长上升子序列的两种O(nlogn)姿势)
Bellovin Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...
- 作死遇到的坑--view向下偏移
好大一个坑.--谈谈view偏移问题: 先上张图, 图中白色部分.上面的是从网上找的资源.将导航栏隐藏之后用collectionView加上去而实现的滑动标签功能.开始以为是代码中的问题.然后仔细推敲 ...
- MVC中使用RazorPDF创建PDF
这篇文章主要介绍使用Nuget package中的RazorPDF简单的创建PDF的方法. 关于RazorPDF 这个Nuget Package由Al Nyveldt创建.它内部使用ITextShar ...
- [WinAPI] API 1 [桌面上画一个简单彩色图形]
#include<Windows.h> void GdiOut(HDC hdc); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hP ...
- 云端持续集成——AppVeyor拥抱GitHub
想着你正在做一个网站 终于大功告成了,提交了代码后,你按下了开发环境的Build菜单,一杯咖啡后,Build Succeed,然后连接服务器,开始部署 当你乐滋滋的享受着你的开发成果时,突然发现了一个 ...
- Spring-Context之二:使用Spring提供的测试框架进行测试
Spring框架是无侵入性的,所以你的代码可以完全是POJO(plain old java object),直接使用Junit就可以完成大部分的单元测试.但是在集成测试方面就比较吃力了.单元测试层面你 ...
- mac下缺乏make wget怎么办?
1.下载command Line tools for Xcode http://www.mkyong.com/mac/how-to-install-gcc-compiler-on-mac-os-x/ ...