0

I'm trying to override 'w' in vim so it would call an external program and filter the buffer instead of writing to a file. There are very good examples across the internet about how to do that. I tried one from vim.wikia.com, but vim always complains with E488: Trailing characters. This is the command in my vimrc:

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

I'm not very familiar with vim script. I tried removing <CR> from the end of the line with no luck.

UPDATE

Since I want to run vim as customized as possible I run it with the -u flag. I noticed that vim behaves differently when using that flag compared to running it without it

With the -u flag the expanded abbreviation is what needs to be evaluated as code. enter image description here

Without the flag, the abbreviation is what it is intended to be (here I enter the cabbrev rule from vim's prompt) enter image description here

4

1 回答 1

0

关于-u标志 vim 的手册页是这样说的:

-u {vimrc} 使用文件 {vimrc} 中的命令进行初始化。跳过所有其他初始化。使用它来编辑特殊类型的文件。它还可以通过命名为“NONE”来跳过所有初始化。更多细节参见 vim 中的 ":help initialization"。

显然,当使用此标志时,不会执行来自 vim /etc/vimrc 的初始化,我在那里找到了这个选项:

set nocompatible

vim 关于兼容选项的帮助:

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

...

当Vim 启动时发现vimrcgvimrc文件时,此选项被关闭,所有未修改的选项将设置为 Vim 默认值。实际上,这意味着当vimrcgvimrc文件存在时,Vim 将使用 Vim 默认值,否则将使用 Vi 默认值。(注意:这不会发生在系统范围的 vimrc 或 gvimrc 文件中,也不会发生在带有-u参数的文件中)。

set nocompatible使问题中的 cabbrev 语法起作用

于 2016-12-17T11:31:45.880 回答