Ykt*_*ula 11 vim command definition
在vim中,在我的.vimrc中,如何将命令(即:e)重新定义为其他内容?我想重新定义:e *
为:tabe *
.
Ykt*_*ula 10
我想出了办法.请参见如何在vim中禁用内置命令.从那里,我们可以看到我们可以使用cabbrev来改变命令的作用.对于我的需求,cabbrev e tabe
是完美的.
但是我们可以推广这个解决方案,使用户可以访问用户定义的小写字符开始命令:使用cabbrev(重新)定义内置命令作为用户定义的命令.因此,我们能够重新定义内置命令以及用户定义的命令.
这是一个例子,相当于我上面提到的解决问题的方法:
:command -nargs=+ E :tabe "<args>"
:cabbrev e E
Run Code Online (Sandbox Code Playgroud)
就这样.
cnoreabbrev
解决方法
到目前为止,没有插件的最佳解决方法是:
cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == 'e' ? 'tabe' : 'e'
Run Code Online (Sandbox Code Playgroud)
如果你使用简单的:
cnoreabbrev e E
Run Code Online (Sandbox Code Playgroud)
正如@Yktula所建议的那样,如果你想这样做会破坏你的命令:
echo e f
Run Code Online (Sandbox Code Playgroud)
这会成为:
echo E f
Run Code Online (Sandbox Code Playgroud)
代替.
正如@pydave在评论中所解释的那样,cmdalias插件为执行安全别名添加了一个更简单的接口,简单如下:
:Alias e tabe
Run Code Online (Sandbox Code Playgroud)
在编写本文时,插件还使用该getcmdtype() == ":"
技术来实现其功能.