【发布时间】:2011-02-05 23:54:51
【问题描述】:
在 vim 中,在我的 .vimrc 中,如何将命令(即 :e)重新定义为其他内容?
我想将:e * 重新定义为:tabe *。
【问题讨论】:
标签: vim command definition
在 vim 中,在我的 .vimrc 中,如何将命令(即 :e)重新定义为其他内容?
我想将:e * 重新定义为:tabe *。
【问题讨论】:
标签: vim command definition
cnoreabbrev 解决方法
到目前为止我见过的没有插件的最佳解决方法是:
cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == 'e' ? 'tabe' : 'e'
如果你使用简单的:
cnoreabbrev e E
如果你想这样做,@Yktula 会破坏你的命令:
echo e f
会变成:
echo E f
改为。
正如@pydave 在 cmets 中所解释的,cmdalias plugin 添加了一个更简单的接口来执行安全别名,如下所示:
:Alias e tabe
在编写该插件时,还使用getcmdtype() == ":" 技术来实现其功能。
【讨论】:
:Alias e tabe,它会为您发挥getcmdline 的魔力。
我想出了一个办法。见How to disable a built-in command in vim。从那里,我们可以看到我们可以使用 cabbrev 来更改命令的作用。对于我的需要,cabbrev e tabe 是完美的。
但我们可以推广这种解决方案,使用户可以访问以小写字符开头的命令以用于用户定义的命令:使用 cabbrev 将内置命令(重新)定义为用户定义的命令。因此,我们能够重新定义内置命令以及用户定义的命令。
这是一个例子,相当于我前面提到的我的问题的解决方案:
:command -nargs=+ E :tabe "<args>"
:cabbrev e E
就是这样。
【讨论】:
echo e f,这会中断,它会变成echo E f。我的回答试图克服这一点。
据我了解,你不能。用户定义的命令的首字母必须大写。
:help :command
更多信息
【讨论】: