【问题标题】:How to combine two Vim commands into one (command not keybinding)如何将两个 Vim 命令合二为一(命令不是键绑定)
【发布时间】:2019-03-13 04:12:05
【问题描述】:

我发现很少有关于此问题的 Stack Overflow 问题,但它们都只与 :nmap:noremap 命令有关。 我想要一个命令,而不仅仅是一个键绑定。有没有办法做到这一点?

用例:

当我运行:make 时,我不会自动保存。所以我想结合:make:w。我想创建一个命令:Compile/:C:Wmake 来实现这一点。

【问题讨论】:

标签: unix vim text-editor neovim


【解决方案1】:

有关通过| 连接 Ex 命令的一般信息可以在:help cmdline-lines 找到。

您可以将其应用于交互式命令、映射以及自定义命令。

注意,您只需要在映射中使用特殊的<bar>(避免过早结束映射定义并立即执行余数,这是初学者的常见错误::nnoremap <F1> :write | echo "This causes an error during Vim startup!"<CR>)。对于自定义命令,您可以只写 |,但请记住哪些命令本身将其视为参数。

:help line-continuation 将有助于处理过长的命令定义。将多个命令移动到单独的 :help :function 中也会有所帮助(但请注意,这会巧妙地改变错误处理方式)。

参数

如果您想传递自定义命令行参数,您可以将-nargs=* 添加到您的:command 定义中,然后通过<args> 在右侧指定插入点。例如,要允许对您的:write 命令执行命令,您可以使用

:command -nargs=* C w <args> | silent make | redraw!

【讨论】:

    【解决方案2】:

    您可以将命令与| 组合使用,请参阅:bar 的帮助:

    command! C update | silent make | redraw!
    

    但是,有一种更简洁的方法可以实现您想要的。 只需启用'autowrite' 选项即可自动写入 :make之前修改过的文件:

                                     'autowrite' 'aw' 'noautowrite' 'noaw'
    'autowrite' 'aw'        boolean (default off)
                            global
            Write the contents of the file, if it has been modified, on each
            :next, :rewind, :last, :first, :previous, :stop, :suspend, :tag, :!,
            :make, CTRL-] and CTRL-^ command; and when a :buffer, CTRL-O, CTRL-I,
            '{A-Z0-9}, or `{A-Z0-9} command takes one to another file.
            Note that for some commands the 'autowrite' option is not used, see
            'autowriteall' for that.
    

    :make 的帮助中提到了此选项。

    【讨论】:

      【解决方案3】:

      经过一番反复试验,我找到了解决方案。

      我的用例的解决方案

      command C w &lt;bar&gt; silent make &lt;bar&gt; redraw!

      这用于使用 make 编译,并且仅在有非零输出时才打印输出。

      一般解决方案

      command COMMAND_NAME COMMAND_TO_RUN

      COMMAND_TO_RUN 可以使用以下构造使用多个命令构造。

      COMMAND_1_THAN_2 = COMMAND_1 &lt;bar&gt; COMMAND_2

      你可以多次使用它,它与shell中的管道非常相似。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        相关资源
        最近更新 更多