【问题标题】:How to redefine a command in Vim?如何在 Vim 中重新定义命令?
【发布时间】:2011-02-05 23:54:51
【问题描述】:

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

【问题讨论】:

    标签: vim command definition


    【解决方案1】:

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

    【讨论】:

    • 您可以使用cmdalias 将其简化为:Alias e tabe,它会为您发挥getcmdline 的魔力。
    【解决方案2】:

    我想出了一个办法。见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。我的回答试图克服这一点。
    【解决方案3】:

    据我了解,你不能。用户定义的命令的首字母必须大写。

      :help :command
    

    更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多