2010-04-09 141 views
9

在vim中,在我的.vimrc中,如何重新定义一个命令(即:e)作为别的东西? 我想重新定义:e *:tabe *Vim:重新定义命令

回答

10

我想出了一个办法做到这一点。见How to disable a built-in command in vim。由此我们可以看到,我们可以使用cabbrev来改变命令的功能。根据我的需要,cabbrev e tabe是完美的。

但是,我们可以概括这个解决方案,使命令以小写字母开头,用户可以访问用户定义的命令:使用cabbrev(重新)将内置命令定义为用户定义的命令。因此,我们能够重新定义内置命令以及用户定义的命令。

下面是一个例子,这相当于我的上述解决我的问题:

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

这就是全部。

+0

如果您想键入:'echo e f',则会变成'echo E f',而不是。我的答案试图克服这一点。 – 2014-06-17 12:21:50

1

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

:help :command 

了解更多信息

3

,我迄今所看到的没有一个插件,最好的解决方法是:

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() == ":"技术实现其功能。

+0

您可以使用[cmdalias](http://www.vim.org/scripts/script.php?script_id=746)将其简化为':别名和tabe',它会为您执行getcmdline魔术。 – idbrii 2013-12-13 19:09:32