Al usar Terminal.app, puede borrar la pantalla usando el shell incorporado clear
o presionando ^+ L(Control-L).
Sin embargo, todo esto hace que el contenido actual de la pantalla retroceda una altura de pantalla y restablezca el cursor / entrada en la primera línea. Lo que significa que aún puede desplazarse hacia atrás y verlo.
Lo que también puede hacer es restablecer todo el desplazamiento hacia atrás presionando ⌘+ K(Comando-K).
Después de haber hecho esto, no puede desplazarse hacia atrás en absoluto.
En ciertas situaciones (en particular, antes de ejecutar screen
o vim
), me gustaría restablecer el desplazamiento hacia atrás antes de que el comando realmente se ejecute.
¿Hay un comando (como clear
) que se implementa en OS X que me permite hacer esto? Dada la existencia de pbcopy
y pbpaste
, estoy pensando que podría existir algo similar que me permita hacer esto.
fuente
clear && printf '\e[3J'
(¡Ha seleccionado la respuesta incorrecta como respuesta correcta!)Respuestas:
El terminal admite una extensión de la secuencia de escape ED (Borrar en pantalla) para borrar el desplazamiento hacia atrás. También es compatible con xterm. El comando ED, descrito en el manual VT100 , acepta estos valores para el parámetro Ps:
Terminal ( y xterm ) agrega:
Tenga en cuenta que esto solo borra el desplazamiento hacia atrás, no la pantalla. Esto le permite borrar uno u otro, o ambos enviando dos secuencias de escape.
Por ejemplo, puede borrar la pantalla y el desplazamiento hacia atrás con el siguiente comando de shell:
clear && printf '\e[3J'
(El
clear
comando busca la secuencia apropiada para borrar la pantalla del terminal actual, pero la secuencia de escape "borrar desplazamiento hacia atrás" es personalizada y debe estar codificada. Si coloca esto en un script de shell que no conoce con certeza solamente nunca se ejecutará con la terminal, debe comprobar que$TERM_PROGRAM
esApple_Terminal
antes de enviarlo.)fuente
alias clear="clear && printf '\e[3J'"
echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
⌘K, acceso directo a "Ver> Borrar desplazamiento hacia atrás".
ACTUALIZACIÓN : Esto se puede automatizar con AppleScript mediante el siguiente comando:
... que, por supuesto, puede
alias
hacer lo que quiera, o almacenar en una función en su~/.profile
script de inicio de sesión :)Sin embargo, como seguridad, para poder usar esto incluso en segundo plano sin correr el riesgo de emitir una pulsación de tecla en una aplicación frontal incorrecta, aconsejaría que lo rodee con la siguiente prueba:
... que nos da el siguiente código:
... que a su vez, correctamente escapado y
alias
ed, termina en:¡Y aquí está tu nuevo
clear
! :)fuente
vim
), el shell ejecute el "reinicio de desplazamiento" antes de ejecutar vim. Programático, no interactivo.clear
; es decir, borra la pantalla, pero aún puedo desplazarme hacia atrás. GolpearCommand
K
funciona normalmente.Aquí hay un código que funciona tanto para la Terminal de macOS como para iTerm2. Tampoco necesita que la ventana esté en primer plano.
Cómo funciona
Esta es una composición de 3 secuencias de escape ANSI , particularmente los comandos "Introductor de secuencia de control" .
\033
es una secuencia de escape que codifica el punto de código para el personaje que representa. El inicio0
indica que el resto de la secuencia codifica un valor octal, en este caso,33
en octal. El valor decimal de eso es27
(3 * 8^1 + 3 * 8^0
=3 * 8 + 3
=24 + 3
=27
). En ASCII, el punto de código27
es el carácter "ESC" (escape).CSI
los comandos comienzan conESC [
aka\033[
. Sabiendo esto, podemos dividir la cuerda en sus 3 partes.CSI 2 J
CSI n J
n
valor se establece2
en este caso, que invoca la segunda variante: "Si n es 2, borra toda la pantalla (y mueve el cursor a la esquina superior izquierda en DOS ANSI.SYS)".CSI 3 J
:CSI n J
n
valor se establece3
en este caso, que invoca la tercera variante: "Si n es 3, borre toda la pantalla y elimine todas las líneas guardadas en el búfer de desplazamiento (esta característica se agregó para xterm y es compatible con otras aplicaciones de terminal)".CSI 1 ; 1 H
:CSI n ; m H
n
ym
se establecen en1
, lo que significa que este comando mueve el cursor a la esquina superior izquierda.fuente
CSI n J
" (donde n = 2) + "CSI n J
" (donde n = 3) + "CSI n ; m H
" (donde n, m = 1, 1), que se traduce como: "ED - Borrar en pantalla" (variante 2), "ED - Borrar en pantalla" (variante 3), "CUP - Posición del cursor" (moviéndose a 1, 1)