我经常发现自己处于这种情况。我正在输入命令,在完成命令之前我需要检查其他内容。
有没有办法打开某种子 shell,并记住到目前为止我当前的输入,然后当我退出这个子 shell 时,我又回到原来的位置?
$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>
我在用着zsh
答案1
我通常使用Ctrl+U来擦除当前行并将其保存到缓冲区中。从那里我开始做之前我需要做的事情mylongcommand
。然后,当我准备好时,我使用Ctrl+Y粘贴mylongcommand
回我的提示中。
答案2
有一个组合键EscQ可以保存命令缓冲区并允许输入新命令。运行命令后,缓冲区包含您之前输入的内容。如果您必须在完成此操作之前运行另一个命令,您可以EscQ再次输入。
(我还没有尝试按下后打开子外壳EscQ。)
答案3
我的解决方案显然技术含量低且笨重,但依赖于您可能已经熟悉的按键序列:点击Ctrl+ A,然后#,然后ENTER。
#
这具有在行的开头插入 a 的效果,从而使其成为注释,然后执行它,从而将其推入命令历史记录中。然后,您可以输入辅助命令,然后向上滚动命令历史记录到注释的命令,删除#
并根据需要完成命令。
答案4
我输入Ctrl+Z以“暂停”我正在输入的命令并输入另一个命令。在我运行该命令(或使用Ctrl+中止它C)后,挂起的命令将返回进行编辑(甚至记住光标位置)。作为一个额外的便利,如果当我键入Ctrl+时命令行为空Z,则该键会调用bg
内置命令(因此双Ctrl+Z会将正在运行的命令直接发送到后台)。
fancy-ctrl-z () {
emulate -LR zsh
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
(之前发布于在检查某些内容时记住半输入的命令其中主要有 bash 的解决方案,在那里你不能做任何如此方便的事情。这是一个稍微高级的版本M-q
to的内置绑定push-line
.)
这不会运行子 shell:您在“暂停”前一个命令后键入的命令在同一 shell 中运行。如果您在键入命令后意识到您打算在不同的目录中运行它,则可以执行诸如更改当前目录之类的操作。如果你想运行一个新的 shell 实例,你可以zsh
通过键绑定运行,但我认为这不是特别有用。