在终端中按 Ctrl+L

在终端中按 Ctrl+L

我在终端中不小心输入了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充当TABCTRL-H充当Backspace(2)。

古老而漂亮的 ASCII...(请注意,字母 L 位于第 4 列、第 12 行,其 ASCII 码为 4*16+12=76)。

图片来自 Wikimedia commons

原始图像这里, 从维基百科关于 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,该序列移动到屏幕的左上角并清除其下方的所有内容(因此是整个屏幕)。

相关内容