我在终端中不小心输入了ctrl+ L,结果我的终端窗口跳了一个‘屏幕’大小。我在“编辑”->“键盘快捷键”中查看了键盘快捷键,但没有找到那个快捷键。
ctrl+ 的作用是什么L?它在哪里定义?
答案1
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.
查看详细列表Bash 键盘快捷键。
答案2
如果您使用的 shell 没有拦截该命令,则您在终端中输入的是“换页”字符。如果终端应用程序没有以某种方式拦截或使用按键,则Ctrl+Letter 将被转换为字母的 ASCII 码减去 64(1)。65 是 'A' 的 ASCII 码,'L' 是第 12 个字母 -> 代码 76。如果 shell 不知道该如何处理该代码,则会将其打印出来。
打印 FF 字符会导致行打印机上出现新页面,并且终端上的屏幕清晰(是的,我用了VT-52当时为 300 波特)。
所以Ctrl+L是 12,也就是 FF。同样,Ctrl+I是 TAB,并且Ctrl+G会响铃 --- 如果终端或 shell 不拦截它,例如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,不是一个好主意”......(通常使用比糟糕更强烈的词!)
答案3
Control-L
被 bash 拦截并解释(实际上是图书馆readline
,用于处理命令行上的交互式编辑)。 它与函数绑定clear-screen
,正如@souravc 所写。
注意:的含义Control-L
:它在 ASCII 字符表中被定义为 Form Feed,但除非某个程序相应地解释它,否则这没有任何意义。终端在看到 Form Feed 时不会清除屏幕,您可以通过将 ^L 保存在文件中并使用 打印文件来验证这一点cat
。当bash/readline
看到 时^L
,它会执行该clear-screen
函数。这会发送终端仿真器可以理解的字符序列(如 termcap 或 terminfo 所述),并具有清除屏幕的效果。
在非常古老的打印机中,一个按钮^L
会推进纸张,开始在下一张纸上打印,因此得名“换页”。但现代终端和终端仿真器遵循较新的 ANSI 标准,其中控制命令是多字符“转义码”以^[
(escape) 开头。当 bash 看到您的 时^L
,它可能会发送两个命令序列ESC [ H ESC [ J
,该序列移动到屏幕的左上角并清除其下方的所有内容(因此是整个屏幕)。