假设我在终端中输入了一条命令“mv *.jpg ..\photos”,当我输入时,我意识到我根本不想执行这条命令。我只想删除整个语句。我不想清除整个屏幕或删除任何 bash 历史记录,我只想中止当前行并将其删除。
是否有键盘快捷键,或者我是否必须实际删除每个字符?
答案1
假设您在 bash 中,使用Ctrl+ U。
答案2
许多程序都等待您输入命令行然后执行该行,包括 bash,它们将Ctrl+C表示“中止当前任务并返回主提示符”。
一些程序(包括 bash)采用Ctrl+ U(在 OS X 中从终端清除命令) 的意思是“删除从行首到光标处的内容”(或者“删除整行”)。
在 bash 中,Ctrl+C和Ctrl+之间可观察到的差异U包括:
- 您可以撤消Ctrl+ U,但不能撤消Ctrl+ C。
- Ctrl+U保留光标后的行部分(如果有)。
- Ctrl+U从屏幕上删除受影响的文本;Ctrl+C在当前行下方显示新的提示。
有时您想停止输入命令,但将其输入到 shell 历史记录中以便稍后运行。一个有用的技巧是将 a 放在#
行首并执行它:由于该行现在是注释,因此它不会执行任何操作。在 bash 中,有一个单键快捷键:Alt+ #。
答案3
有一个readline
函数可能没有与某个按键绑定,kill-whole-line
它会删除整行,而不是只删除光标之前的部分(这有点用词不当,并且与-unix-line-discard
绑定)。Ctrlu
您可以将其绑定到任何可用的按键。我喜欢ShiftAlt-U因为它是一个相关功能。该按键可以绑定到,do-lowercase-version
这意味着它会执行未移位版本执行的任何操作(在本例中upcase-word
)。由于我们实际上不需要两个键来执行此操作,因此让我们使用那个。
您可以通过以下方式在命令行上尝试创建绑定:
bind '"\eU":kill-whole-line'
或者将这一行放入~/.inputrc
文件中以使其持久化:
"\eU":kill-whole-line
要撤消Ctrl-u或ShiftAlt- U(或任何可以撤消的操作),请按Ctrl- Shift- _(下划线)或Ctrl- x Ctrl- u(两次按键)。或者,您可以按 - 粘贴(复制)您删除的内容Ctrl,y如果您想要该文本的多个副本,可以重复此操作。
顺便说一句,如果你想删除从光标到行尾的文本,你可以按Ctrl- k。因此,你不必执行上述绑定,只需按Ctrl- u Ctrl-即可删除整行k。只有第二次按键删除的部分才会保存在删除缓冲区中,但你仍然可以执行两次撤消以恢复它们。