在 Bash 中输入跨多行的命令时,如何编辑前几行?我是使用 GNOME 终端的 Linux Mint (Lisa) 用户。
例如,假设我输入:
$ echo "foo bar
> baz
>
然后,当我即将输入命令的第三行时,突然意识到我想将“foo”和“bar”放在不同的行上。我该如何将光标重新定位在“foo”和“bar”之间,以便我可以按回车键将它们放在不同的行上?
(这并不像您想象的那么容易。向上箭头不起作用,Ctrl-P 也不起作用。因此,请在发布之前尝试一下!谢谢!)
答案1
不幸的是,这取决于bash
,而不是终端。您的选择是:
使用分号代替换行符,尽管这样你也不能一次向上移动一屏行,而必须使用字符或单词移动命令。(奇怪的是,
zsh
至少允许你在编辑历史记录时在复合命令内移动,但不能在当前的命令。)有时fc
(使用前一个命令将您带入编辑器)是处理复合命令的最简单方法。如果您使用 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
复制命令并将其粘贴到记事本中,然后从那里进行格式化。之后,您可以将命令复制回终端。