Lau*_*low 104 command-line bash zsh
我经常发现自己处于以下位置:我已经开始在 bash 提示符下键入一个长命令,但是中途我发现我需要用另一个命令检查某些内容。当我在控制台(没有 X)时,这是一个问题,通常是这种情况,因为那时我只有以下不满意的方法来做到这一点,我知道:
所以我想知道的是,有没有更优雅的方法来做到这一点?一种子shell命令或类似的?
我对不需要任何准备或设置即可工作的方法最感兴趣。
小智 53
执行 ctrl-A 以到达行首,添加一个散列并按回车键 - 这样它将作为注释保留在命令历史记录中,您可以通过向上光标返回它
编辑:刚刚注意到这是您的 #2 上稍微优雅的变体;)
ale*_*lex 29
点击Ctrl+A,Ctrl+K移动到行首并删除 (kill) 到行尾。然后做你的研究,当准备好继续点击Ctrl+Y(猛拉)把你保存的(被杀死的)线放回去。
Gil*_*il' 13
在 zsh 中,我键入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
Run Code Online (Sandbox Code Playgroud)
我不知道如何在 bash 中做类似的事情。
在任何 shell 中,您都可以使用在当前行的开头添加 a#的低技术方法。
Mik*_*kel 13
在 bash 中,只需输入Alt+ #。
然后当你准备好时,按Up然后Alt+ #。
第一个将 a#放在行首以将其转换为注释,然后接受该行,就好像您按下了Enter。
然后,当您第二次执行此操作时,它会看到该行#的开头已经有一个,因此将其删除并接受它,再次为您保存Enter密钥。
如果第二次刚插入另一个#,那么你必须键入Alt+ - Alt+#代替。
你可以让 zsh 做同样的事情
bindkey -M emacs '\e#' pound-insert
Run Code Online (Sandbox Code Playgroud)
在你的 ~/.zshrc 中。
或者,如果您使用 vi 绑定,则可以#在 bash 和 zsh 中从命令模式键入。
Cal*_*leb 10
我最喜欢的功能之一zsh是内置的推线功能,它可以解决这个问题,而没有其他答案中的任何技巧。我有它必然Ctrl+l在我的.zshrc文件是这样的:
bindkey '^L' push-line
Run Code Online (Sandbox Code Playgroud)
然后,当我输入某个命令并需要快速执行其他操作时,我可以用一个键调用它并得到一个空白提示。运行其他命令后,提示会自动填写我之前输入的内容。
您甚至可以链接多个层,命令会以与您将它们推入队列相反的顺序返回给您。
除了ctrl- a ctrl-k技巧,如果你在屏幕上,只需ctrl-a d分离然后重新连接screen -r
你也可以用ctrl+打开另一个窗口a c