如何使vimdiff检测行结束字符的差异(dos vs unix)

smb*_*yan 0 vim vimdiff

当比较具有相同内容但具有行结尾的两个文件时,vim diff不会检测到差异.有没有办法让vimdiff显示出差异.

Ing*_*kat 5

当文件具有不一致(dos与unix)行结尾时,Vim会将它们检测为unix,并且行将显示尾随CR(^M),也在diff中.

当一个文件始终使用dos时,您描述的内容(未检测到更改)发生,而另一个文件始终使用unix行结尾.Vim然后"抽象" :help 'fileformat'选项值中的一致行结尾.

一些用户将'fileformat'值放入'statusline',并使用它来注意差异.(我使用条件来执行此操作,只有在它与平台的默认值不同时才显示它.)

如果要在diff本身内部显示行结束差异'fileformat',可以在启动时强制执行unix:

$ vimdiff --cmd 'set fileformats=unix' file1 file2
Run Code Online (Sandbox Code Playgroud)

或者在Vim里面:

:windo e! ++ff=unix
Run Code Online (Sandbox Code Playgroud)

  • vimdiff 命令行是“永远不要将 `set nocompatible` 放入你的 `vimrc`”的第一个硬参数(我经历过)。 (2认同)
  • @user7369280:没错;这确实会恢复像“文件格式”这样的设置。如果存在 vimrc,无论如何 Vim 将切换到不兼容。尽管如此,人们(通常是出于迷信或无知)还是把它放进去了。 (2认同)