Ctrl + L en terminal

41

Accidentalmente escribí ctrl+ Len el terminal y mi ventana de terminal saltó un tamaño 'screenful'. Miré los atajos de teclado en "Editar" -> "Atajos de teclado" y no encontré ese atajo.

¿Qué hace ctrl+ Ly dónde se define?

Parto
fuente

Respuestas:

58

ctrl+ Lsimplemente borra la pantalla del terminal.

Es el método abreviado de teclado equivalente al comando clear -x. árbitro

Es propiedad de bash, por lo que no lo encontró bajo métodos abreviados de teclado en su terminal gnome. 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.

Ver una lista detallada de los métodos abreviados de teclado del golpe .

souravc
fuente
Oh, eso lo explica.
Parto
3
Sin embargo, no es solo bash; Ctrl-L es el carácter de avance de página. No es tan común, pero a veces verá ^ L en el código fuente que separa las "páginas" de código. Tenía más sentido cuando una impresora lo interpretaría como un personaje de control.
Joshua Taylor
@JoshuaTaylor tienes razón. Artículo wiki relacionado sobre
Salto de
1
^ L es el carácter de alimentación de formulario en la tabla ascii, pero eso no hace nada a menos que sea recibido por un programa que lo trate en consecuencia (bash o el emulador de terminal, en este contexto).
alexis
1
Tenga en cuenta que no es el equivalente del comando por defecto clear, ya que no borra el historial de terminal, mientras que el comando clearhace, a menos que agregue el -xargumento, así: clear -x.
jirislav
18

Si el shell que está utilizando no lo está interceptando, está escribiendo un carácter "Alimentación de formulario" en su terminal. Si la aplicación de terminal no intercepta o utiliza la combinación de teclas de alguna manera, Ctrl+ Letra se traduce al código ASCII de la letra menos 64 (1). 65 es el código ASCII de 'A', 'L' es la duodécima letra -> código 76. Si el shell no sabe qué hacer con el código, lo imprime.

La impresión de un FF char dio como resultado una nueva página en una impresora de línea y una pantalla clara en el terminal (sí, usé un VT-52 en ese entonces, a 300 baudios).

Entonces Ctrl+ Les 12, que es FF. Del mismo modo, Ctrl+ Ies una TAB y Ctrl+ Gtoca el timbre --- si el terminal o el shell no lo interceptan, como Ctrl+ Cpor ejemplo.

Aviso de la otra respuesta: parece que fiesta hacen de intercepción CTRL- Ly hacer un clear. ¡ bashQué lindo toque que los autores asociaron la tecla con un comando que hará más o menos lo mismo que el código ASCII en terminales antiguas!

Por otro lado, en mi zshla combinación CTRL- Ifunciona como TABy CTRL- Hcomo a Backspace(2).

Viejo y agradable ASCII ... (observe que la letra L está en la columna 4, fila 12, tiene el código ASCII 4 * 16 + 12 = 76).

Imagen de Wikimedia commons

Imagen original aquí , del artículo de Wikipedia en ASCII .


Notas al pie:

(1) Ctrlrealmente se usa para borrar el bit 7.

(2) esta es la fuente de la broma de "no eliminar la palabra" que a veces encuentras como, por ejemplo, "esta fue una mala idea ^ H ^ H ^ Hnot so nice" ... (¡normalmente una palabra más fuerte que mala!)

Rmano
fuente
1
Agradable. ¿Cómo uso esta tabla por cierto? Puedo ver que la letra L está en la fila 12 y en la columna 4. ¿Entonces solo menos 32 del 124 o cómo calculo el código ASCII?
Parto
@AvatarParto ups, escribió 32 en lugar de 65. Respuesta corregida. La tabla es binaria, por lo que el código es la columna * 16 + fila.
Rmano
1
Insertar ^Hs o ^Ws literales es bueno cuando no puedes usar tachado. :)
Blacklight Shining
8

Control-Les interceptado e interpretado por bash (en realidad, por la readlinebiblioteca , que maneja la edición interactiva en la línea de comando). Está vinculado a la clear-screenfunción, como escribió @souravc.

Nota sobre el significado de Control-L: Se define como Feed de formulario en la tabla de caracteres ASCII, pero esto no significa nada a menos que algún programa lo interprete en consecuencia. El terminal no borra la pantalla cuando ve un avance de formulario, como puede verificar guardando un ^ L en un archivo e imprimiéndolo con cat. Cuando bash/readlineve el ^L, ejecuta la clear-screenfunción. Esto envía una secuencia de caracteres que entiende su emulador de terminal (como se describe por termcap o terminfo), y tiene el efecto de borrar la pantalla.

En impresoras muy antiguas, a ^Lavanzaría el papel para comenzar a imprimir en la siguiente hoja, de ahí el nombre "alimentación de formulario". Pero los terminales modernos y los emuladores de terminales siguen un estándar ANSI más nuevo, en el que los comandos de control son "códigos de escape" de varios caracteres que comienzan con ^[(escape). Cuando bash ve tu ^L, probablemente esté enviando la secuencia de dos comandos ESC [ H ESC [ J, que se mueve a la parte superior izquierda de la pantalla y borra todo lo que está debajo (de ahí toda la pantalla).

alexis
fuente
En realidad, la secuencia ESC [ ESC [ Jtambién borra el historial de comandos, mientras que la CTRL + L secuencia no. La secuencia enviado a la terminal es más bien ESC [ H ESC [ 2 J, adelante un intento usted mismo con este comando: printf "\033[H\033[2J".
jirislav
0

Como todos ya explicaron bastante bien qué Ctrl+ Les y hace, pero nadie explicó cómo "revertir" el comando, aquí hay algunos comandos que puede escribir para volver a lo que estaba haciendo:

history

te dará los últimos 20 comandos que escribiste.

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

le dará las últimas 20 líneas de salida de cualquier instalación de paquete que estaba realizando

Fabby
fuente