Barebones vim与`nocp`

时间:2015-06-10 00:54:46

标签: vim

我正在尝试加载准系统vim。所以我定义了~/.slimvimrc,其中包含以下内容

syntax on map q :q <cr>

然后我使用vim -u ~/.slimvimrc加载vim。当我按q时,由于上面的映射,我希望vim关闭。然而,vim只是坐着#39;在命令行上打印q<CR>并等待输入。

但是,如果我将nocp设置添加到上述vimrc

syntax on set nocp map q :q <cr>

映射工作正常。我查看了nocp的文档,但无法找到它与<CR>的关系。你能指出我正确的地方吗?

2 个答案:

答案 0 :(得分:0)

您的映射无法在“兼容模式”下运行,因为<无法识别为启动密钥代码。

您的~/.slimvimrc应如下所示:

set nocompatible
syntax on
nnoremap q :q<CR>

请注意nnoremap的特殊性:

  • 第一个n表示“正常模式”,
  • nore表示“非递归”,

以及:q<CR>之间删除的空格。

无论如何,q<char>用于在注册<char>中开始录制。这个功能太棒了!用自定义映射覆盖它并不是一个好主意。

此外,您可以使用-N参数调用Vim来强制'nocompatible'

$ vim -N -u ~/.slimvimrc

答案 1 :(得分:0)

原因是在vi兼容模式下,Vim不解析像<CR>这样的特殊键;这由'cpoptions'设置控制,特别是:help cpo-k:help cpo-<

为什么Vim处于vi兼容模式?通常,当找到'nocompatible'时,Vim会设置~/.vimrc,但您使用-u会将其关闭。来自:help 'compatible'

  

当Vim启动时找到vimrc或gvimrc文件时,   此选项已关闭,所有选项均未关闭   modified将设置为Vim默认值。实际上,这意味着   当存在vimrc或gvimrc文件时,Vim将使用Vim   默认值,否则它将使用Vi默认值。 (注意:这不是   发生表示系统范围的vimrc或gvimrc文件,表示给定的文件   使用-u参数)。

解决方案是在set nocompatible的顶部明确~/.slimvimrc,或在-N之外传递-u