当前位置: 首页>>技术教程>>正文


在终端中按Ctrl + L.

, ,

问题描述

我不小心在终端输入了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拦截CTRLL并进行clearbash作者将密钥与一个命令关联起来很好,这个命令与旧代码上的ASCII代码大致相同!

另一方面,在我的zsh中,组合CTRLI作为TABCTRLH作为Backspace(2)。

旧的好的ASCII …(注意字母L在第4栏第12行,它有ASCII码4 * 16 + 12 = 76)。

command-line,shortcut-keys,ubuntu

原始图像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,它移动到屏幕的左上方并清除它下面的所有内容(因此整个屏幕)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2873.html,未经允许,请勿转载。