如何在Vim中重新定义命令?

时间:2010-04-09 04:11:01

标签: vim command definition

在vim中,在我的.vimrc中,如何将命令(即:e)重新定义为其他内容? 我想将:e *重新定义为:tabe *

3 个答案:

答案 0 :(得分:10)

我想出了办法。见How to disable a built-in command in vim。从那里,我们可以看到我们可以使用cabbrev来改变命令的作用。根据我的需要,cabbrev e tabe是完美的。

但是我们可以推广这个解决方案,使得用户可以访问用户定义的小写字符命令:use cabbrev(re)将内置命令定义为用户定义的命令。因此,我们可以重新定义内置命令以及用户定义的命令。

这是一个例子,相当于我上面提到的解决问题的方法:

:command -nargs=+ E :tabe "<args>"
:cabbrev e E

就是这样。

答案 1 :(得分:6)

cnoreabbrev解决方法

到目前为止,没有插件的最佳解决方法是:

cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == 'e' ? 'tabe' : 'e'

如果你使用简单的:

cnoreabbrev e E
如果你想这样做,@ yktula所建议的

会破坏你的命令:

echo e f

将成为:

echo E f

代替。


正如@pydave在评论中所解释的那样,cmdalias plugin添加了一个更简单的界面来执行安全别名:

:Alias e tabe

在编写本文时,插件还使用getcmdtype() == ":"技术来实现其功能。

答案 2 :(得分:1)

据我所知,你做不到。用户定义的命令必须具有大写的第一个字母。

  :help :command

了解更多信息