【问题标题】:How can I join two commands together in vim?如何在 vim 中将两个命令连接在一起?
【发布时间】:2013-04-17 20:59:22
【问题描述】:

我正在尝试在 vim 中组合 Bundle 插件的两个命令。因为 BundleUpdate 会拉取所有插件并安装它们,而且速度很慢。我有以下内容。前两个工作正常,但第三个不行。它在BundleClean 操作后停止。如何让 vim 运行第二个命令?

command! -bang BI BundleInstall<bang>
command! -bang BC BundleClean<bang>
;not working below
command! -bang BU BundleClean<bang> | BundleInstall<bang>

【问题讨论】:

    标签: vim plugins syntax keymapping


    【解决方案1】:

    除了-bang 之外,您还应该使用-bar 作为:command 的参数,否则对于用户定义的命令,链接命令和添加 cmets 是不可能的。

    你必须使用

    command! -bar -bang BU BC<bang> | BI<bang>
    

    代替您目前拥有的,因为Bundle* 命令没有-bar 参数。

    还有另一种选择:使用execute

    command! -bang BU execute 'BundleClean<bang>' | execute 'BundleInstall<bang>'
    

    。小心使用execute '…&lt;some-arg&gt;',它对于某些参数的值将无法正常工作。它适用于&lt;bang&gt; 的两种可能的扩展。

    【讨论】:

    • 嗨 Zyx,这不是很好笑吗?我刚知道,这里有一个问题!现在我终于可以投票给你的答案来表示感谢!! +1
    • 对您的BC&lt;bang&gt; | BI&lt;bang&gt; 的问题是否意味着如果我们想要链接一些用户定义的cmds,这些cmds 在某些插件中并且没有-bar,我们可以为它们编写包装命令并使用@987654333 @,那么我们可以用|链接包装器命令,最终插件定义的命令被链接?
    • @Kent 很容易测试。命令是在扩展之前拆分的,而不是之后拆分的,因此它可以正常工作。
    • @ZyX 你的命令对我不起作用。我认为 Kent 是对的,因为 Bundle Plugin 命令没有-bar,所以我必须创建一个函数来按顺序执行它们。您能否确认您的命令是否对您有效?
    • @Prometheus 实际上我刚刚从 Zyx 那里学到了 -bar 的东西(对另一篇文章的评论)只需 5 分钟 b4 你发布你的问题。 :) 您是否将-bar 添加到您的BC 命令定义中?
    【解决方案2】:

    你不能BundleClean | BundleInstall

    因为BundleClean是用户自定义命令,所以由Vundle插件定义:

     com! -nargs=? -bang   BundleClean call vundle#installer#clean('!' == '<bang>')
    

    请注意,此命令定义中没有-bar

    如果你:h command-bar 你会看到:

    -bar        The command can be followed by a "|" and another command.
            A "|" inside the command argument is not allowed then.
            Also checks for a " to start a comment.
    

    也就是说,BundleClean 后面不能跟 | 的另一个命令。

    但是,您可以编写一个函数,在该函数中执行两个命令。并让您的 BU 命令调用您的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2011-01-13
      • 2020-09-11
      • 1970-01-01
      相关资源
      最近更新 更多