如何在 Bash 中的多行命令中编辑前几行?

如何在 Bash 中的多行命令中编辑前几行?

在 Bash 中输入跨多行的命令时,如何编辑前几行?我是使用 GNOME 终端的 Linux Mint (Lisa) 用户。

例如,假设我输入:

$ echo "foo bar
> baz
>

然后,当我即将输入命令的第三行时,突然意识到我想将“foo”和“bar”放在不同的行上。我该如何将光标重新定位在“foo”和“bar”之间,以便我可以按回车键将它们放在不同的行上?

(这并不像您想象的那么容易。向上箭头不起作用,Ctrl-P 也不起作用。因此,请在发布之前尝试一下!谢谢!)

答案1

不幸的是,这取决于bash,而不是终端。您的选择是:

  1. 使用分号代替换行符,尽管这样你也不能一次向上移动一屏行,而必须使用字符或单词移动命令。(奇怪的是,zsh至少允许你在编辑历史记录时在复合命令内移动,但不能在当前的命令。)有时fc(使用前一个命令将您带入编辑器)是处理复合命令的最简单方法。

  2. 如果您使用 Bash,请使用以下组合键:

    ctrl x e
    

    它将使用文本编辑器打开您正在处理的命令。保存文件并退出。(我在Shell Hater 的演讲)Zsh 用户有这种选择

答案2

解决方案是,在多行正确之前永远不要输入命令,只需 CtrlvCtrlj 在您想要转到下一行时输入:Metab即可返回一个单词。

解决方案

感谢@rici回答

答案3

有趣的是,Ctrl+C这正是您所寻找的。

当你

$ echo "foo bar
> baz
>

只需按Ctrl+C(编辑的命令行将暂停)并按Up(上一个历史记录)。您的提示符将是:(请注意没有 >)

$ echo "foo bar
baz

现在您甚至可以跨行移动Left Right

只有一个缺点,你必须在最后一个字符上才能添加另一行,因此四处移动以编辑现有行(转到开头Ctrl+A)并按(Enter 如果足够)或转到结尾(Ctrl+E)以添加更多行Enter。另一个缺点是Ctrl+_(撤消)只能恢复从最后一个字符开始的更改Ctrl+C

答案4

复制命令并将其粘贴到记事本中,然后从那里进行格式化。之后,您可以将命令复制回终端。

相关内容