终端中的Ctrl + L


41

我在终端中不小心输入了ctrl+ L,并且终端窗口跳了一个“全屏”大小。我在“编辑”->“键盘快捷方式”中查看了键盘快捷方式,但没有找到该快捷方式。

是什么ctrl+ L做的,它在哪儿定义?

Answers:


58

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键盘快捷键的详细列表。


哦,这可以解释。
Parto 2014年

3
虽然不只是扑朔迷离;Ctrl-L是换页字符。这不是很常见,但是有时您会在源代码中看到^ L分隔代码的“页面”。当打印机将其解释为控制字符时,这更有意义。
约书亚·泰勒

@JoshuaTaylor你是正确的。有关分页
符的

1
^ L是ascii表中的换页符,但是除非相应地对其进行处理的程序(在此情况下为bash或终端仿真器)将其接收,否则它不会做任何事情。
亚历克西斯

1
请注意,它不等同于默认命令clear,因为它不会删除您的终端历史记录,而命令clear却会删除它,除非您添加-x参数,例如:clear -x
jirislav

18

如果您使用的外壳没有拦截它,则您在终端中键入“换页”字符。如果终端应用程序未以某种方式截获或使用按键,则Ctrl+ Letter会转换为负64(1)的ASCII码。65是ASCII码“ A”,“ L”是第12个字母->代码76。如果外壳不知道该怎么做,则将其打印出来。

打印FF字符会在行式打印机上显示一个新页面,并在终端上显示一个清晰的屏幕(是的,当时我使用的是VT-52,波特率为300)。

因此Ctrl+ L为12,即FF。以同样的方式,Ctrl+ I是TAB,并且Ctrl+ G会按铃---如果终端或外壳未拦截它,例如Ctrl+ C

从对方的回答通知:看来,bash中拦截CTRL- L,并做了clear。尼斯触摸该bash作者相关的命令的关键,这将做更多或更少相同的ASCII码做旧终端!

在另一方面,在我的zsh组合CTRL- I工作方式TABCTRL- HBackspace(2)。

旧的好ASCII ...(请注意,字母L位于第4列第12行,它的ASCII码为4 * 16 + 12 = 76)。

图片来自维基共享资源

原始图像在这里,从上ASCII维基百科的文章


脚注:

(1)Ctrl真正用来清除位7。

(2)这是您有时发现的“无法删除单词”笑话的来源,例如“这是一个糟糕的^ H ^ H ^ Hnot很好的主意” ...(通常一个单词比坏的要强!)


1
真好 我该如何使用该图表?我可以看到字母L位于第12行和第4列。然后从124中减去32,还是如何计算ASCII码?
Parto 2014年

@AvatarParto ups,写了32个而不是65个。答案已更正。该表是二进制的,因此代码是column * 16 + row。
Rmano 2014年

1
当您不能使用删除线时,插入文字^Hs或^Ws会很好。:)
Blacklight Shining

8

Control-L被拦截和bash的解释(实际上是由readline,它处理的命令行交互编辑)。clear-screen如@souravc所写,它已绑定到该函数。

注意Control-L:的含义:它在ASCII字符表中定义为换页符,但这没有任何意义,除非某些程序对此进行了解释。终端看到换页时不会清除屏幕,您可以通过在文件中保存^ L并使用进行打印来进行验证cat。当bash/readline看到时^L,它执行clear-screen功能。这将发送一个由终端仿真器理解的字符序列(如termcap或terminfo所述),并具有清除屏幕的作用。

在非常老的打印机中,a ^L会使进纸开始在下一张纸上开始打印,因此被称为“换页”。但是现代的终端和终端仿真器遵循更新的ANSI标准,其中控制命令是以(转义)开头的多字符“转义代码”^[。当bash看到您的时^L,它可能正在发送两个命令序列ESC [ H ESC [ J,该序列将移至屏幕的左上方并清除其下方的所有内容(因此将整个屏幕清除)。


实际上,该序列ESC [ ESC [ J还清除了命令历史记录,而该CTRL + L 序列却不清除。而是发送到终端的顺序是ESC [ H ESC [ 2 J,继续自己尝试使用此命令:printf "\033[H\033[2J"
jirislav

0

每个人都已经很好地解释了Ctrl+的含义L和作用,但是没有人解释如何“撤消”该命令,因此您可以在此处键入一些命令以使自己回到正在做的事情:

history

将为您提供您键入的最后20条命令。

tail --lines=20 /var/log/dpkg.log

将提供您正在执行的任何软件包安装的最后20行输出

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.