如何让 vim :source 命令接受不同的行尾格式?

6
在使用带有dos行尾的vim脚本文件时,使用vim的:source命令会出现无法处理^M字符的错误。 ^M字符是dos行尾的一部分,但不是unix行尾。 因此,它正在尝试使用unix文件格式:source文件。
问题在于,我已经设置了:set fileformats = unix,dos。 当打开和编辑文件(而不是:source:)时,没有行尾问题。 Vim看到一个具有纯dos行尾的文件,并根据fileformats进行相应调整。 :help fileformats只给出最基本的线索,即在 dos系统 上,如果您设置了:set fileformats = unix,dos,vim会执行一种特定检测以确定应该使用哪个格式(作为一个无关紧要的细节,这个:source检测将混合行尾与 打开文件不同对待)。
我在现代mac系统上,如何使其:source一个dos行尾文件?
1个回答

6
这个问题在:h :source_crnl中有讨论。
在UNIX系统(包括Mac OS X)中,没有自动的CRLF检测,行末的实际CR会导致错误(例如在映射中),因此需要注意。根据帮助文档:

在其他系统上,Vim期望被“:source”的文件以<NL>结尾。这样做总是没问题的。如果您使用的是包含<CR><NL> <EOL>的文件(例如在MS-DOS上生成的文件),所有行都将包含一个结尾的<CR>

为了最佳兼容性,在Vim脚本文件中最好始终使用NL换行符。只要脚本的第一行不以CR结尾,并且'fileformats'不为空(默认情况下不为空),则这些换行符将始终起作用。
简而言之,请考虑将行尾转换为LF以提高兼容性。

进行文件格式转换的简便方法是执行 :set ff=unix 命令,然后保存文件。...如果 :set ff? 命令返回 dos 的话... - dash-tom-bang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接