问题描述
我不小心在终端输入了ctrl
+ L
,我的终端窗口跳了一个’screenful’大小。我查看了”Edit”->”Keyboard快捷方式中的键盘快捷键“并没有找到该快捷方式。
ctrl
+ L
做了什么,它在哪里定义?
最佳解决方案
ctrl
+ L
只需清除终端屏幕即可。
它是命令clear
的键盘快捷键。
它是bash
的属性,因此您在gnome-terminal的键盘快捷键下找不到它。来自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 Keyboard Shortcuts的详细列表。
次佳解决方案
如果您正在使用的shell没有拦截它,那么您在终端中键入了”Form-feed”字符。如果终端应用程序没有以某种方式拦截或使用击键,则Ctrl
+ Letter将转换为字母减去64(1)的ASCII码。 65是’A’的ASCII码,’L’是第12个字母 – >代码76.如果shell不知道该怎么做代码,它会打印出来。
打印FF char导致行式打印机上的新页面和终端上的清晰屏幕(是的,我当时以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)。
原始图像here,来自wikipedia article on ASCII。
脚注:
(1)Ctrl
真的用来清除第7位。
(2)这是“未能删除单词”这个笑话的来源,你有时会发现这样的“这是一个糟糕的^ H^H^Hnot那么好主意”……(通常一个字比一个字更强!)
第三种解决方案
Control-L
由bash拦截和解释(实际上是由readline
库处理,它在命令行上处理交互式编辑)。正如@souravc所写,它与clear-screen
功能绑定。
关于Control-L
含义的注意事项:它在ASCII字符表中定义为Form Feed,但除非某些程序相应地解释它,否则这意味着什么。终端在看到换页时不会清除屏幕,因为您可以通过在文件中保存^ L并使用cat
打印文件来验证。当bash/readline
看到^L
时,它执行clear-screen
功能。这将发送终端仿真器可以理解的一系列字符(如termcap或terminfo所述),并具有清除屏幕的效果。
在非常旧的打印机中,^L
会在下一张纸上推进纸张开始打印,因此名称为”form feed”。但现代终端和终端仿真器遵循较新的ANSI标准,其中控制命令是以^[
(转义)开头的multi-character “escape codes”。当bash看到你的^L
时,它可能正在发送two-command序列ESC [ H ESC [ J
,它移动到屏幕的左上方并清除它下面的所有内容(因此整个屏幕)。