Ctrl + L dans le terminal

41

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?

Parto
la source

Réponses:

58

ctrl+ Leffacez simplement l'écran du terminal.

C'est l'équivalent de raccourci clavier de la commande clear -x. ref

C'est la propriété de bash, donc vous ne l'avez pas trouvé sous les raccourcis clavier dans votre gnome-terminal. De 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.

Voir une liste détaillée des raccourcis clavier Bash .

souravc
la source
Oh, ça explique ça.
Parto
3
Ce n'est pas juste bash cependant; Ctrl-L est le caractère de formulaire. Ce n'est pas si courant, mais parfois, vous verrez ^ L dans le code source séparer les "pages" de code. Il était plus logique qu’une imprimante l’interprète comme un caractère de contrôle.
Joshua Taylor
@ JoshuaTaylor vous avez raison. Article wiki sur le saut de page
souravc
1
^ L est le caractère d’alimentation de formulaire dans la table ascii, mais cela ne fait rien à moins qu’il soit reçu par un programme qui le traite en conséquence (bash ou l’émulateur de terminal, dans ce contexte).
alexis
1
Notez que ce n'est pas l'équivalent de la commande par défaut clear, car il ne supprime pas votre historique terminal, alors que la commande clearne, sauf si vous ajoutez l' -xargument, comme si: clear -x.
jirislav
18

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 les bashauteurs 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 zshcombinaison 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 de Wikimedia commons

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!)

Rmano
la source
1
Agréable. Comment puis-je utiliser ce tableau en passant? Je peux voir que la lettre L se trouve à la ligne 12 et à la colonne 4. Dois-je alors moins 32 au 124 ou comment calculer le code ASCII?
Parto
@AvatarParto ups, a écrit 32 au lieu de 65. Réponse corrigée. La table est binaire, le code est donc colonne * 16 + ligne.
Rmano
1
Insérer du ^Hou des ^Ws est bien quand vous ne pouvez pas utiliser de barré. :)
Blacklight Shining
8

Control-Lest intercepté et interprété par bash (en fait par la readlinebibliothèque , qui gère l’édition interactive sur la ligne de commande). Il est lié à la clear-screenfonction, 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 avec cat. Quand bash/readlinevoit le ^L, il exécute la clear-screenfonction. 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’ ^Lavancer 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 commandes ESC [ 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).

alexis
la source
En fait, la séquence ESC [ ESC [ Jefface également l'historique des commandes, CTRL + L contrairement à la séquence. La séquence envoyée au terminal est plutôt ESC [ H ESC [ 2 J, allez - y une essayer vous - même avec cette commande: printf "\033[H\033[2J".
jirislav
0

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:

history

vous donnera les 20 dernières commandes que vous avez tapées.

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

vous donnera les 20 dernières lignes de sortie de toute installation de paquet que vous effectuiez

Fabby
la source