Lorsque vous utilisez Terminal.app, vous pouvez effacer l'écran en utilisant le shell intégré clear
ou en appuyant sur ^+ L(Control-L).
Cependant, tout cela ne fait que repousser le contenu de l'écran actuel d'une hauteur d'écran et réinitialiser le curseur / l'entrée à la première ligne. Cela signifie que vous pouvez toujours revenir en arrière et le voir.
Ce que vous pouvez également faire, c'est réinitialiser l'intégralité de votre défilement en appuyant sur ⌘+ K(Commande-K).
Une fois que vous avez fait cela, vous ne pouvez plus faire défiler.
Dans certaines situations (notamment avant d'exécuter screen
ou vim
), j'aimerais réinitialiser le défilement avant que la commande ne s'exécute réellement.
Existe-t-il une commande (comme clear
) implémentée dans OS X qui me permet de le faire? Étant donné l'existence de pbcopy
et pbpaste
, je pense qu'il pourrait exister quelque chose de similaire qui me permettrait de le faire.
la source
clear && printf '\e[3J'
(Vous avez sélectionné la mauvaise réponse comme bonne réponse!)Réponses:
Le terminal prend en charge une extension de la séquence d'échappement ED (Erase in Display) pour effacer le défilement arrière. Il est également pris en charge par xterm. La commande ED, décrite dans le manuel du VT100 , accepte ces valeurs pour le paramètre Ps:
Terminal ( et xterm ) ajoute:
Notez que cela efface uniquement le défilement arrière, pas l'écran. Cela vous permet d'effacer l'un ou l'autre, ou les deux, en envoyant deux séquences d'échappement.
Par exemple, vous pouvez effacer l'écran et le défilement arrière avec la commande shell suivante:
clear && printf '\e[3J'
(La
clear
commande recherche la séquence appropriée pour effacer l'écran du terminal actuel, mais la séquence d'échappement «effacer le retour en arrière» est personnalisée et doit être codée en dur. Si vous mettez cela dans un script shell que vous ne connaissez pas pour certains ne sera jamais exécuté avec Terminal, vous devez vérifier que$TERM_PROGRAM
c'estApple_Terminal
avant de l'envoyer.)la source
alias clear="clear && printf '\e[3J'"
echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
⌘K, raccourci vers «Affichage> Effacer le défilement».
MISE À JOUR : Cela peut être automatisé avec AppleScript par la commande suivante:
… Que vous pouvez bien sûr
alias
à tout ce que vous voulez, ou stocker dans une fonction de votre~/.profile
script de connexion :)Par sécurité cependant, pour pouvoir l'utiliser même en arrière-plan sans risquer d'émettre une frappe sur une mauvaise application frontale, je vous conseille de l'entourer avec le test suivant:
… Qui nous donne le code suivant:
… Qui à son tour, correctement échappé et
alias
édité, se termine par:Et voici votre nouveau
clear
! :)la source
vim
), le shell exécute la "réinitialisation du défilement" avant d'exécuter vim. Programmatique, pas interactif.clear
; c'est-à-dire qu'il efface l'écran, mais je peux toujours revenir en arrière. FrapperCommand
K
fonctionne normalement.Voici le code qui fonctionne à la fois pour le terminal macOS et iTerm2. Il n'a pas non plus besoin que la fenêtre soit au premier plan.
Comment ça marche
Il s'agit d'une composition de 3 séquences d'échappement ANSI , en particulier des commandes "Control Sequence Introducer" .
\033
est une séquence d'échappement qui code en dur le point de code du caractère qu'il représente. Le début0
indique que le reste de la séquence code une valeur octale, dans ce cas,33
en octal. La valeur décimale est27
(3 * 8^1 + 3 * 8^0
=3 * 8 + 3
=24 + 3
=27
). En ASCII, le point de code27
est le caractère "ESC" (d'échappement).CSI
les commandes commencent parESC [
, aka\033[
. Sachant cela, nous pouvons diviser la chaîne en ses 3 parties.CSI 2 J
CSI n J
n
valeur est définie2
dans ce cas, ce qui appelle la deuxième variante: "Si n est 2, effacez tout l'écran (et déplace le curseur en haut à gauche sur DOS ANSI.SYS)."CSI 3 J
:CSI n J
n
valeur est définie3
dans ce cas, qui invoque la troisième variante: "Si n est 3, effacez tout l'écran et supprimez toutes les lignes enregistrées dans le tampon de défilement (cette fonctionnalité a été ajoutée pour xterm et est prise en charge par d'autres applications de terminal)."CSI 1 ; 1 H
:CSI n ; m H
n
etm
sont toutes deux définies sur1
, ce qui signifie que cette commande déplace le curseur dans le coin supérieur gauche.la source
CSI n J
" (où n = 2) + "CSI n J
" (où n = 3) + "CSI n ; m H
" (où n, m = 1, 1), ce qui se traduit par: "ED - Erase in Display" (variante 2), "ED - Erase in Display" (variante 3), "CUP - Cursor Position" (passage à 1, 1)