Par*_*rto 48 command-line shortcut-keys
我不小心在终端中输入了ctrl+ L,我的终端窗口跳了一个“满屏”大小。我查看了“编辑”->“键盘快捷键”中的键盘快捷键,但没有找到该快捷键。
ctrl+L有什么作用,它在哪里定义?
sou*_* c. 67
ctrl+L只需清除终端屏幕。
它是等效于命令的键盘快捷键clear -x
。参考
它是 的属性bash
,因此您没有在 gnome 终端的键盘快捷键下找到它。来自man bash
:
clear-screen (C-l)
Clear the screen leaving the current line at the top of the
screen. With an argument, refresh the current line without
clearing the screen.
Run Code Online (Sandbox Code Playgroud)
查看Bash 键盘快捷键的详细列表。
Rma*_*ano 20
如果您使用的 shell 没有拦截它,则您正在终端中键入“换页”字符。如果终端应用程序没有以某种方式拦截或使用击键,Ctrl+Letter 将被转换为字母减 64(1) 的 ASCII 代码。65 是 'A' 的 ASCII 码,'L' 是第 12 个字母 -> 代码 76。如果 shell 不知道如何处理代码,它会打印出来。
打印 FF 字符会在行式打印机上生成一个新页面,并在终端上显示一个清晰的屏幕(是的,当时我使用了300 波特的VT-52)。
所以Ctrl+L是 12,也就是 FF。同样,Ctrl+I是一个 TAB,而Ctrl+ 会G响铃 --- 如果终端或外壳没有拦截它,例如Ctrl+ C。
从另一个答案中注意:似乎 bash确实拦截了CTRL-L并执行了clear
. 尼斯触摸该bash
作者相关的命令的关键,这将做更多或更少相同的ASCII码做旧终端!
另一方面,在我zsh
的组合中CTRL-I作为TAB和CTRL-H作为Backspace(2)。
旧的漂亮的 ASCII...(注意字母 L 位于第 4 列第 12 行,它的 ASCII 代码为 4*16+12=76)。
此处的原始图片,来自维基百科关于 ASCII 的文章。
(1)Ctrl真正用于清除位 7。
(2) 这是您有时会发现的“无法删除单词”笑话的来源,例如“这是一个糟糕的 ^H^H^H 不是个好主意”......(通常一个词比坏词强!)
Control-L
被拦截和bash的解释(实际上是由该readline
库,它处理的命令行交互编辑)。clear-screen
正如@souravc 所写,它绑定到该函数。
注意其含义Control-L
:它在ASCII字符表中被定义为换页符,但除非某些程序对其进行相应解释,否则这没有任何意义。终端在看到换页时不会清除屏幕,因为您可以通过将 ^L 保存在文件中并使用cat
. 当bash/readline
看到 时^L
,它执行clear-screen
函数。这会发送您的终端模拟器可以理解的一系列字符(如 termcap 或 terminfo 所述),并具有清除屏幕的效果。
在非常旧的打印机中,a^L
将推进纸张在下一张纸上开始打印,因此得名“换页”。但是现代终端和终端仿真器遵循更新的 ANSI 标准,其中控制命令是以(escape)开头的多字符“转义码”^[
。当 bash 看到您的 时^L
,它可能会发送两个命令序列ESC [ H ESC [ J
,它移动到屏幕的左上角并清除其下方的所有内容(因此是整个屏幕)。