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


24

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

例如,假设我输入:

$ echo "foo bar
> baz
>

然后,当我要键入命令的第三行时,突然意识到我希望“ foo”和“ bar”位于单独的行上。如何将光标重新定位在“ foo”和“ bar”之间,以便可以按Enter键并将它们放在单独的行上?

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


公认的答案说,没有解决方案,但是有解决方案。见下文
cdosborn 2015年

Answers:


16

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

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

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

    ctrl x e

    它将使用文本编辑器打开您正在处理的命令。保存文件并退出。(我在Shell Hater的演示文稿中找到了该命令。)Zsh用户具有此替代方法


1
bash手册页介绍了如何更改使用哪个编辑器:编辑并执行命令(C-xC-e)-在当前命令行上调用编辑器,并将结果作为shell命令执行。Bash尝试以此顺序调用$ VISUAL,$ EDITOR和emacs作为编辑器。
马修(Matthew)

有一个解决方案,无需打开编辑器。
cdosborn

从技术上讲,它不取决于bash-而是bash用于获取输入的“ readline”库。
Christian Herenz

11

解决方案是在多行正确之前不要输入命令,只需键入: CtrlvCtrlj 当您想转到下一行时。Metab退一句话。

解

归功于@rici的答案


4

有趣的Ctrl+C是,您正在寻找什么。

当你在

$ echo "foo bar
> baz
>

只需按Ctrl+C(编辑的命令行将暂停),然后按Up(上一个历史记录)。您的提示将是:(注意缺少>)

$ echo "foo bar
baz

现在,您Left Right甚至可以通过跳线移动。

只有一个怪癖,您必须位于最后一个字符上才能添加另一行,因此,如果需要,请四处走动以编辑现有行(开始于Ctrl+AEnter ,或者按键转到末尾(Ctrl+E)以添加更多行Enter。另一个缺点是Ctrl+_(撤消)仅恢复上一次的更改Ctrl+C


-2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.