6

:source在带有 dos 行结尾的 vimscript 文件上使用 vim 的命令会给我带来无法处理^M字符的错误。

这些^M字符是 dos 行结尾的一部分,但不是 unix 行结尾的一部分。所以它正在尝试:source使用unix文件格式的文件。

问题是,我已经:set fileformats=unix,dos开始了。打开编辑文件(不是-ing)时:source:,没有行尾问题。Vim 看到一个带有纯 dos 行结尾的文件,并根据fileformats它进行相应的调整。

:help fileformats仅提供最简单的线索,即在dos 系统上,如果您有:set fileformats=unix,dos,vim 会执行它应该使用的临时检测(作为一个不相关的细节,此:source检测处理混合行结尾的方式与打开文件的方式不同)。

我在一个现代的 mac 系统上,我如何把它放到:source一个 dos 行结束文件中?

4

1 回答 1

6

这在 讨论:h :source_crnl

在包括 Mac OS X 在内的 UNIX 系统上,没有自动 CRLF 检测,并且行尾的实际 CR可能会引发 错误,例如在映射中。从帮助:

在其他系统上,Vim 期望 ":source"ed 文件以 <NL> 结尾。这些总是有效的。如果您正在使用带有 <CR><NL> <EOL> 的文件(例如,在 MS-DOS 上制作的文件),所有行都将有一个尾随 <CR>。

为获得最佳兼容性,最好让 Vim 脚本文件始终使用 NL 换行符。只要脚本的第一行由于某种原因没有以 CR 结尾并且'fileformats'不为空(默认情况下不为空),这些将始终在任何地方工作。

简而言之,考虑将行尾转换为 LF。

于 2012-12-20T19:09:54.510 回答