用cabbrev覆盖内置命令

时间:2016-12-16 18:09:21

标签: vim viml

我试图覆盖' w'在vim中,它会调用外部程序并过滤缓冲区而不是写入文件。互联网上有关于如何做到这一点的非常好的例子。我从vim.wikia.com尝试了一个,但是vim总是抱怨E488: Trailing characters。这是我的vimrc中的命令:

cabbrev w <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'W' : 'w')<CR>

我对vim脚本不太熟悉。我尝试从行尾删除<CR>但没有运气。

更新

由于我想尽可能自定义运行vim,因此我使用-u标志运行它。我注意到vim在使用该标志时的行为与在没有它的情况下运行它时的行为不同

使用-u标志,扩展缩写是需要作为代码进行评估的内容。 enter image description here

没有标志,缩写就是它的目的(这里我从vim的提示符输入cabbrev规则) enter image description here

1 个答案:

答案 0 :(得分:0)

关于-u标志,vim的手册页说明了这一点:

  

-u {vimrc}使用文件{vimrc}中的命令   初始化。所有其他初始化                被跳过了。用它来编辑一种特殊的文件。它也可以用来跳过所有                通过给出名称“NONE”进行初始化。有关更多信息,请参阅vim中的“:help initialization”                的信息。

显然当使用此标志时从初始化开始 vim / etc / vimrc没有执行,我找到了这个选项:

set nocompatible

vim对兼容选项的帮助:

  

此选项可以使Vim更兼容Vi,或者   使Vim以更有用的方式运行。这是一种特殊的   选项,因为在设置或重置时,其他选项也会更改   作为副作用。小心:设置或重置此选项可以   很多意想不到的效果:映射以另一种方式解释,   撤消行为不同等。如果在vimrc中设置此选项   文件,你应该把它放在最开始。

     

...

     

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

set nocompatible从问题工作

中生成cabbrev语法