J'ai accidentellement tapé ctrl+ Ldans le terminal et la fenêtre de mon terminal a sauté d'une taille "d'écran". J'ai regardé les raccourcis clavier dans "Edition" -> "Raccourcis clavier" et je n'ai pas trouvé ce raccourci.
Que fait ctrl+ Let où est-il défini?
clear
, car il ne supprime pas votre historique terminal, alors que la commandeclear
ne, sauf si vous ajoutez l'-x
argument, comme si:clear -x
.Si le shell que vous utilisez ne l'intercepte pas, vous tapez un caractère "Form-feed" dans votre terminal. Si l'application de terminal n'intercepte pas ou n'utilise pas la frappe d'une manière quelconque, Ctrl+ Letter est traduit en code ASCII de la lettre moins 64 (1). 65 est le code ASCII de 'A', 'L' est la 12ème lettre -> code 76. Si le shell ne sait pas quoi faire du code, il l'imprime.
L'impression d'un caractère FF a donné lieu à une nouvelle page sur une imprimante par ligne et à un écran clair sur le terminal (oui, j'avais utilisé un VT-52 à l'époque, à 300 bauds).
Donc Ctrl+ Lest 12 qui est FF. De la même façon, Ctrl+ Iest une tabulation, et Ctrl+ Gsonne la cloche --- si le terminal ou le shell ne l'intercepte pas, comme Ctrl+ Cpar exemple.
Avis de l'autre réponse: il semble que bash faire intercepter CTRL- Let faire un
clear
. Belle idée que lesbash
auteurs aient associé la clé à une commande qui fera plus ou moins la même chose que le code ASCII utilisé sur les anciens terminaux!D'autre part, dans ma
zsh
combinaison CTRL- Ifonctionne comme TABet CTRL- Hcomme Backspace(2).Old nice ASCII ... (remarquez que la lettre L est à la colonne 4, ligne 12, elle a le code ASCII 4 * 16 + 12 = 76).
Image originale ici , d'un article de Wikipédia sur ASCII .
Notes de bas de page:
(1) Ctrlvraiment utilisé pour effacer le bit 7.
(2) c’est la source de la "blague pour ne pas enlever le mot" que vous trouvez parfois comme par exemple "c’était une mauvaise ^ H ^ H ^ Hnot une si bonne idée" ... (avec normalement un mot plus fort que mauvais!)
la source
^H
ou des^W
s est bien quand vous ne pouvez pas utiliser de barré. :)Control-L
est intercepté et interprété par bash (en fait par lareadline
bibliothèque , qui gère l’édition interactive sur la ligne de commande). Il est lié à laclear-screen
fonction, comme l'a écrit @souravc.Remarque sur la signification de
Control-L
: Il est défini comme Form Feed dans la table de caractères ASCII, mais cela ne signifie rien à moins qu'un programme ne l'interprète en conséquence. Le terminal n'efface pas l'écran lorsqu'il voit un formulaire, comme vous pouvez le vérifier en enregistrant un fichier ^ L dans un fichier et en imprimant le fichier aveccat
. Quandbash/readline
voit le^L
, il exécute laclear-screen
fonction. Cela envoie une séquence de caractères qui est comprise par votre émulateur de terminal (comme décrit par termcap ou terminfo) et a pour effet d'effacer l'écran.Dans les très anciennes imprimantes, a permet d’
^L
avancer le début de l’impression sur la feuille suivante, d’où le nom "saut de page". Mais les terminaux modernes et les émulateurs de terminaux suivent une norme ANSI plus récente, dans laquelle les commandes de contrôle sont des "codes d'échappement" à plusieurs caractères commençant par^[
(d'échappement). Lorsque bash voit votre message^L
, il envoie probablement la séquence de deux commandesESC [ H ESC [ J
, qui se déplace en haut à gauche de l'écran et efface tout ce qui se trouve en dessous (d'où la totalité de l'écran).la source
ESC [ ESC [ J
efface également l'historique des commandes,CTRL + L
contrairement à la séquence. La séquence envoyée au terminal est plutôtESC [ H ESC [ 2 J
, allez - y une essayer vous - même avec cette commande:printf "\033[H\033[2J"
.Comme tout le monde a déjà assez bien expliqué ce que Ctrl+ Lfait et fait, mais personne n'a expliqué comment "inverser" la commande, voici quelques commandes que vous pouvez taper pour vous ramener à ce que vous faisiez:
vous donnera les 20 dernières commandes que vous avez tapées.
vous donnera les 20 dernières lignes de sortie de toute installation de paquet que vous effectuiez
la source