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

Ash*_*her 31 linux gnome bash gnome-terminal

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

例如,假设我输入:

$ echo "foo bar
> baz
>
Run Code Online (Sandbox Code Playgroud)

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

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

gee*_*aur 24

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

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

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

    ctrl x e
    
    Run Code Online (Sandbox Code Playgroud)

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


cdo*_*orn 16

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

解决方案

归功于@rici 的回答


alb*_*fan 6

有趣的Ctrl+C是,这就是你正在寻找的。

当你在

$ echo "foo bar
> baz
>
Run Code Online (Sandbox Code Playgroud)

只需按Ctrl+C(编辑的命令行将挂起)并按Up(以前的历史)。您的提示将是:(注意没有 >)

$ echo "foo bar
baz
Run Code Online (Sandbox Code Playgroud)

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

只有一个怪癖,您必须在最后一个字符上添加另一行,因此请四处移动以编辑现有行(转到开头Ctrl+A),Enter 如果足够,请按一下或转到结尾 ( Ctrl+E) 以添加更多行Enter。另一个缺点是Ctrl+_(undo) 只恢复上次的更改Ctrl+C