MENU

Vim下unix和dos格式转换

2016 年 11 月 22 日 • 阅读: 1972 • 折腾

今天在git上使用Vim的时候发现一个BUG,就是在Vim下编辑的内容包含换行,但是在WIN下的记事本中打开发现没有换行处理,所有字符都堆在了同一行内。

vim-crlf.jpg

解决这个问题需要介绍一下有关不同平台上的换行符。

关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别要追溯到很久以前,老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车, <CR>),另一个字符把纸上移一行 (称为换行, <LF>)。

当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾

UNIX 开发者决定他们可以用 Line Feed 一个字符来表示行尾。
Apple 开发者规定了用 CR
开发 MS-DOS (以及微软视窗) 的那些家伙则决定沿用老式的CRLF。。

系统换行符
windows\n\r
unixn
macr

那意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方面的麻烦。如果你用往日美好的 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,就可以解决这个问题了。

标签: vim, 换行符
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码
添加新评论

已有 5 条评论
  1. 打字有惊喜。

  2. 啊啊啊啊啊啊,你们这些垃圾评论,给我滚犊子

  3. 跨系统有很多东西需要兼容处理的,不过你的打字已经没有惊喜了

    1. @苏格这就是在win下开发的蛋疼之处。
      打字已经有惊喜了,前几天改了一下代码,出了点BUG,多谢提醒( ̄▽ ̄)

    2. @Meekdai啊又有惊喜了