今天在git上使用Vim的时候发现一个BUG,就是在Vim下编辑的内容包含换行,但是在WIN下的记事本中打开发现没有换行处理,所有字符都堆在了同一行内。
解决这个问题需要介绍一下有关不同平台上的换行符。
关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别要追溯到很久以前,老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车, <CR>),另一个字符把纸上移一行 (称为换行, <LF>)。
当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾
UNIX 开发者决定他们可以用
Line Feed
一个字符来表示行尾。
Apple 开发者规定了用CR
。
开发 MS-DOS (以及微软视窗) 的那些家伙则决定沿用老式的CRLF
。。
系统 | 换行符 |
---|---|
windows | nr |
unix | n |
mac | r |
那意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方面的麻烦。如果你用往日美好的 Vi 来尝试编辑一个采用 MS-DOS 格式的文件,你将会发现每一行的末尾有个 ^M 字符。(^M 就是 <CR>)。
那么这里就知道了问题的根本原因,Vim其实是有这个设置的,在刚刚学习git的时候遇到过这么一个问题:
$ git add .
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory.
为了解决上面这个问题,我把autocrlf
设置为了false
git config --global core.autocrlf false #签出签入均不转换
git config --global core.autocrlf input #签出时不转换换行符,签入时转换回 LF
git config --global core.autocrlf true #签出时将换行符转换成CRLF,签入时转换回 LF。
但是Vim还提供了一个种方法来解决,那就是Vim 编辑器能自动识别不同文件格式,并且不劳你操心就把事情给办妥了。选项 'fileformats' 包含各种各样的格式,Vim 会在编辑一个新文件之初尝试该选项定义得各种格式。
:set fileformats=dos
:set fileformats=unix
:set ff=unix #fileformats可以简写为ff
在保存退出Vim编辑器前设置正确的fileformats
,就可以解决这个问题了。
打字有惊喜。
啊啊啊啊啊啊,你们这些垃圾评论,给我滚犊子
跨系统有很多东西需要兼容处理的,不过你的打字已经没有惊喜了
这就是在win下开发的蛋疼之处。打字已经有惊喜了,前几天改了一下代码,出了点BUG,多谢提醒( ̄▽ ̄)
啊又有惊喜了