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

15
在vim中,我该如何重新定义一个命令(例如::e)为其他内容?我希望将:e * 重新定义为 :tabe *。在我的.vimrc文件中进行修改即可。
3个回答

11

cnoreabbrev 解决方法

到目前为止,我看到的最好的不使用插件的解决方法是:

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

如果您使用简单的:

cnoreabbrev e E

如果你想执行以下操作,那么按照@Yktula的建议会中断你的命令:

echo e f

这将变成:

echo E f

正如评论中@pydave所解释的那样,cmdalias插件可以将安全别名的简单接口添加为:

instead.


:Alias e tabe
在编写插件时,该插件还使用了getcmdtype() == ":"技术来实现其功能。

1
你可以使用 cmdalias 来简化为 :Alias e tabe,它会为你执行 getcmdline 魔法。 - idbrii

11
我找到了一种方法。请参考如何禁用vim中的内置命令。从中可以看到,我们可以使用cabbrev来更改命令的功能。对于我的需求,cabbrev e tabe是完美的。
但是我们可以将这个解决方案推广到使以小写字符开头的命令可供用户访问并定义为用户自定义命令:使用cabbrev来(re)定义内置命令为用户自定义命令。因此,我们能够重新定义内置命令以及用户自定义命令。
以下是一个示例,它等同于我之前提出的解决方案:
:command -nargs=+ E :tabe "<args>"
:cabbrev e E

就是这样了。


2
如果你想输入 echo e f,这段代码会出错,因为它会变成 echo E f。我的答案试图解决这个问题。 - Ciro Santilli OurBigBook.com

2
据我理解,您无法这样做。用户定义的命令必须以大写字母开头。
  :help :command

更多信息请参考。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接