【问题标题】:text editor mode for calling bash command调用 bash 命令的文本编辑器模式
【发布时间】:2013-08-28 13:05:27
【问题描述】:

假设我想通过 bash 输入多行命令,我知道我可以在行尾附加 \ 以输入新行

但是是否有可能进入一个合法的“文本编辑器模式”,你甚至不必输入 \,只需按 enter 就足够了

例如..您在命令行中输入命令,然后在输入参数之前按下一些魔术按钮,该按钮允许您进入类似 vi 的模式,然后您将内容输入“vi 模式”,然后退出,然后你在“vi模式”中输入的文本变成命令的参数然后你按回车然后命令执行

是否可以在 bash 命令行中执行此操作?如果是这样,我该怎么做?

【问题讨论】:

    标签: linux bash command-line command vi


    【解决方案1】:

    您可以使用fc 命令在vi 或默认编辑器中编辑上一个命令。这会弹出一个编辑器窗口,当你退出它时,它会执行编辑的命令。该模式可以反复使用以编辑复杂的命令。

    【讨论】:

      【解决方案2】:

      man bash:

         edit-and-execute-command (C-xC-e)
                Invoke  an  editor  on the current command line, and execute the
                result as shell commands.   Bash  attempts  to  invoke  $VISUAL,
                $EDITOR, and emacs as the editor, in that order.
      

      默认 bash 配置为 emacs 模式,因此 emacs 像 C-xC-e 命令。

      如果你真的喜欢 vi,你也可以将你的 bash 设置为 vi 模式:set -o vi。这允许您在不调用显式编辑器的情况下以 vi 方式进行正常的行编辑。

      【讨论】:

      • 请注意,在vi 模式下,edit-and-execute-command 默认不再绑定到C-xC-e(或其他任何内容)。
      • @chepner 不 <esc>v 在 vi​​ 模式下这样做?
      • 当我运行 bind -p 时,它被列为“未绑定”(对于任何键盘映射,我都知道),但果然,<esc>v 确实有效。
      • 可以取消执行吗?例如,我想通过:q 退出整个过程。不幸的是,它只会以按 C-xC-e 时在命令行上的方式执行命令。
      【解决方案3】:

      Bash 可以模拟 vim 模式(虽然不是很好):

      set -o vi
      

      【讨论】:

        猜你喜欢
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多