目前,在咱们讲述 Vim 的教程中,讨论过编辑器的模式行Modeline功能以及怎样用插件来扩展 Vim 的功能集。可正如咱们所知,Vim 提供了很是多的内置功能:所以在本教程中更进一步,咱们来谈谈在该编辑器启动时的可用模式。 |
但在咱们开始以前,请注意在本教程中说起的全部例子、命令及用法说明都是在 Ubuntu 14.04 上测试的,咱们测试用的 Vim 版本是 7.4 。vim
Vim 中的兼容模式与不兼容模式app
为了更好理解上述的 Vim 模式,你有必要先去了解下此编辑器初始化过程的一个重要方面。编辑器
系统级及本地 vimrc 文件测试
当 Vim 启动时,编辑器会去搜索一个系统级的 vimrc 文件来进行系统范围内的默认初始化工做。插件
这个文件一般在你系统里 $VIM/vimrc 的路径下,若是没在那里,那你能够经过在 Vim 里面运行 :version命令来找到它的正确存放位置。好比说,在我这里,这个命令的相关部分的输出结果以下:命令行
... ... ... system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/share/vim" ... ... ...
能够看到那个系统 vimrc 文件确实位于 $VIM/vimrc ,但我检查了我机子上没设置过$VIM 环境变量。因此在这个例子里 - 正如你在上面的输出所看到的 - $VIM 在我这的路径是 /usr/share/vim,是一个回落值(LCTT 译注:即若是前面失败的话,最终采用的结果)。因而我试着在这个路径寻找 vimrc ,我看到这个文件是存在的。如上便是个人系统 vimrc 文件,就如前面提过的那样 - 它在 Vim 启动时会被读取。教程
在这个系统级 vimrc 文件被读取解析完后,编辑器会查找一个用户特定的(或者说本地的)vimrc 文件。这个本地 vimrc 的搜索顺序是:环境变量 VIMINIT、$HOME/.vimrc、环境变量 EXINIT, 和一个叫 exrc的文件。一般状况下,会存在 $HOME/.vimrc或 ~/.vimrc这样的文件,这个文件可看做是本地 vimrc。io
咱们谈论的是什么兼容性table
就像咱们谈论 Vim 的兼容性模式和不兼容性模式那样,这些模式的开启和禁用会作出什么样的兼容性也值得了解。要了解这些,先要知道 Vim 是 VIMproved 的缩写,像这个全名暗示的那样,Vim 编辑器是 Vi 编辑器的改进版。变量
通过改进意味着 Vim 的功能集比 Vi 的更大。
当谈论 Vim 的兼容和不兼容模式时,咱们所说的兼容性是指 Vim 兼容 Vi。在兼容模式下运行时,Vim 大部分加强及改善的功能就不可用了。无论怎样,要记住这种模式下,Vim 并不能简单等同 Vi - 此模式只是设定一些相似 Vi 编辑器工做方式的默认选项。
不兼容模式 - 不用多说 - 使得 Vim 用起来跟 Vi 不兼容,也使得用户能够用到它的全部加强、改善及特征。
怎么启用/禁用这些模式?
在 Vim 中尝试运行 :help compatible 命令,接着你会看到以下语法:
'compatible' 'cp' boolean (默认开启 ,当 |vimrc| 或 |gvimrc| 存在时关闭)
描述中说到兼容模式默认开启的,不过当 vimrc 文件存在时会关闭。但说的是哪一种 vimrc 文件呢?答案是本地 vimrc。深刻研究下 :help compatible 命令给出的详情,你会发现下面内容说得更清楚:
事实上,这意味着当一个 |vimrc| 或 |gvimrc| 文件存在时,Vim 会用默认的 Vim,不然它会用 Vi 默认的。(注:若是系统级的 vimrc 或 gvimrc 文件中带有 |-u| 参数,则不会这样。)。
那么在 Vim 启动时,实际上进行的动做是,首先会解析系统 vimrc 文件 - 在这时处于兼容性模式默认开启状态。如今,不管什么时候发现一个用户(或成为本地) vimrc ,不兼容模式都会打开。:help compatible-default命令说的很清楚:
在 Vim 启动时,‘compatible’选项是打开的。这将在 Vim 开始初始化时应用。可是一旦以后发现用户级 vimrc 文件,或在当前目录有一个 vimrc 文件,抑或是 VIMINIT环境变量已设置,Vim 就会被设为不兼容模式。
假如你想无视默认的行为,要在编辑器开始解析系统 vimrc 文件时打开不兼容模式,你能够经过添加以下命令到那个文件的开头来完成这个操做。
:set nocompatible
其余有用细节
这儿是一些关于这些模式的更有用的细节:
如今经过建立一个 .vimrc 文件来设置或重置兼容性会有一个反作用:(键盘)映射(Mapping)在解释的时候会有冲突。这使得在用诸如回车控制符 <CR>等状况时会有影响。若是映射关系依赖于兼容性的某个特定值,在给出映射前设置或者重置它。
上述行为可以用如下方式能覆盖:
结论
咱们都以为,你可能不会发现你本身有机会处于一种你须要打开 Vim 的 Vi 兼容模式的情形中,可是那并不意味着你应该不知道 Vim 编辑器的初始化过程。毕竟,你毫不会知道这些知识何时会帮到你。