![为什么 CR 序列 (\r) 被输入到 .vimrc 文件中?](https://linux22.com/image/77699/%E4%B8%BA%E4%BB%80%E4%B9%88%20CR%20%E5%BA%8F%E5%88%97%20(%5Cr)%20%E8%A2%AB%E8%BE%93%E5%85%A5%E5%88%B0%20.vimrc%20%E6%96%87%E4%BB%B6%E4%B8%AD%EF%BC%9F.png)
请查看下面我的 '~/.vimrc' 文件。
:map g :w
:map g :w
看,同一行重复了。写完第一行后,我按了“Enter”键。
现在查看下面 od 命令的输出。
ravi@ravi-Aspire-5315:~$ od -bc .vimrc
0000000 072 155 141 160 040 147 040 072 167 015 012 072 155 141 160 040
: m a p g : w \r \n : m a p
0000020 147 040 072 167 015 012
g : w \r \n
0000026
ravi@ravi-Aspire-5315:~$
我想知道为什么在这里输入 CR (\r) 序列,因为这是 Linux 而不是 Windows 机器。
现在我更改 .vimrc 文件的内容如下:
:set showmode
现在,当我运行od
命令时,它输出:
ravi@ravi-Aspire-5315:~$ od -bc .vimrc
0000000 072 163 145 164 040 163 150 157 167 155 157 144 145 015 012
: s e t s h o w m o d e \r \n
0000017
现在vim
每当我通过命令打开任何文件时都会抛出错误vim
vim .vimrc
Error detected while processing /home/ravi/.vimrc:
line 1:
E488: Trailing characters: showmode^M
Press ENTER or type command to continue
我知道该错误是由于与“^M”相同的 CR (\r) 序列造成的。
2 个问题
1)为什么在序列命令vim
中抛出错误,但在命令中没有抛出错误。set
\r
map
2) 令人惊讶的是,为什么\r
要进入,因为这是 Linux 而不是 Windows 机器。我正在使用 Ubuntu 15.10。
答案1
通常,诸如这样的行
:map g :w
会有一个字面意思^M
结束,允许用户的地图命令无需按 即可完成Enter。
如果.vimrc
足够短,例如,仅由几行组成,其中大多数都有^M
结尾,vim 会猜测该文件使用 DOS(回车/换行)结尾,并始终使用该约定将更新存储到文件中。
供进一步阅读
- 23.1 DOS、Mac 和 Unix 文件(Vim 文档)
- 文件格式(Vim 文档)
- 文件格式(Vim 维基)
- 在 vim 中将 DOS 行结尾转换为 Linux 行结尾
该文件.vimrc
就像任何其他文本文件:vim 会猜测它是阅读时的行结尾。事实上,您应该能够在原始文件的末尾创建一个包含两个 ^M 的文件:(1) 用于结束命令map
,(1) 用于结束行。