Est-il possible de quitter "moins" sans effacer l'écran?

68

Assez souvent, je veux arrêter de fumer, lessmais je laisse ce que je regardais à l'écran pour le rappeler. Est-ce qu'il y a un moyen de faire ça? Solutions de contournement?

(Ma solution actuelle consiste à quitter, puis à utiliser more. Ainsi, toute solution de rechange meilleure que celle-là est la bienvenue. L'idéal serait quelque chose que je pourrais utiliser une fois que je suis déjà à l'intérieur less, peut-être avec un paramètre de shell ou un script.)

Mon bureau est OSX, mais j'utilise des serveurs RHEL et Ubuntu.

Steve Bennett
la source
1
Lire une longue sortie (comme dans git diffou git log) dans less -Xoccupera la mémoire tampon de défilement de mon terminal et supprimera une grande partie de la sortie précédente. J'adorerais si lessje pouvais simplement sortir avec le dernier écran de sortie au moment de la sortie; c'est-à-dire que pas plus d'une page du tampon de défilement ne serait prise après avoir quitté less. Des idées?
musiphil
Par ailleurs, -Rest généralement un choix plus sûr que -r.
musiphil
Merci. Pour ceux qui se demandent:-R is "Like -r, but only ANSI "color" escape sequences are output in "raw" form. Unlike -r, the screen appearance is maintained correctly in most cases."
Steve Bennett le
@musiphil Peut-être -c?
Vanessa Phipps
@ MatthewPhipps: J'imagine qu'il -cs'agit de mettre à jour l'écran lorsque vous vous déplacez à l'intérieur less.
musiphil

Réponses:

68

C'est en fait une fonction de l'émulateur de terminal que vous utilisez (xterm, gnome-terminal, konsole, screen). Un autre écran, ou altscreen, est lancé lorsque des programmes tels que lessou vimsont appelés. Cet écran n’a pas de mémoire d’historique et se ferme immédiatement lorsque vous quittez le programme. Vous revenez à l’écran d’origine qui restaure l’historique et l’emplacement du contenu de la fenêtre précédente.

Vous pouvez empêcher le lesslancement dans altscreen en passant l’argument "-X".

less -X /path/to/some/file

Vous pouvez également passer "-X" en tant que variable d'environnement. Donc, si vous utilisez bash, placez ceci dans ~/.bashrc:

export LESS="-X"

Toutefois, cela désactive l’initialisation et la désinitialisation de termcap (capacité du terminal), de sorte que d’autres vues, lorsque vous les utilisez, lesspeuvent apparaître désactivées.

Une autre option serait d'utiliser screenet de définir l'option altscreen offdans votre ~/.screenrc. lessn'effacera pas l'écran et devrait préserver le formatage des couleurs. Vraisemblablement tmuxaura la même option.

Cette entrée de blog décrit le problème et propose différentes solutions spécifiques gnome-terminalavec plus ou moins de succès.

George M
la source
2
Parfait. Y a-t-il un inconvénient?
Steve Bennett
2
Attendez, j'en ai déjà découvert une - la sortie de git log(et probablement d'autres commandes colorées) est fausse.
Steve Bennett
1
@SteveBennett C'est assez petit, je dirais que c'est un alias:alias les="/usr/bin/less -X"
bonsaïiviking
4
Hey, je pense que je viens de découvrir un antidote à la git logquestion ci - dessus: export LESS="-r -X". (Aucune idée de ce que sont les effets secondaires de cela ...)
Steve Bennett
5
En fait, gitdéfinit la LESSvariable sur FRSXsi elle est non définie lorsqu’elle exécute le pageur, vous pouvez donc simplement laisser la valeur LESSnon définie et lesss’exécuter automatiquement avec -FRSX. Cherchez core.pagerdans git-config(1)pour plus d'informations.
musiphil
4

La solution de George n'a pas fonctionné pour moi, mais cette solution a fonctionné (de l' entrée de blog liée dans sa réponse).

  1. $ infocmp -I xterm > ~/xterm-noclear.src

  2. Éditez ~ / xterm-noclear.src

    • changez le nom sur la deuxième ligne de 'xterm' en 'xterm-noclear', ou ce que vous préférez (changez également 'xterm-debian' s'il est présent)

    • supprime les instructions 'smcup' et 'rmcup' (par exemple, "smcup = \ E [? 1049h," et "rmcup = \ E [? 1049l,")

  3. $ mkdir ~/.terminfo

  4. $ tic ~/xterm-noclear.src (x / xterm-noclear devrait apparaître dans votre répertoire ~ / .terminfo)

  5. $ export TERM=xterm-noclear (vérifiez maintenant le comportement de less et, s'il est satisfait, ajoutez la ligne de directive d'exportation à votre fichier ~ / .profile)

(J'ai copié ces instructions directement à partir de la réponse de George rejetée par @ jah.)

prl
la source
4

Je me souviens de cela less -SEXlorsque je dois vider la sortie à l'écran mais que je ne veux pas que les lignes soient bouclées. Par exemple, docker ps | less -SEXqu'est-ce que cela fait est ceci:

  • -S
    • Faites défiler au lieu d'envelopper
    • Si vous déposez le -E, vous pouvez utiliser les touches de direction pour faire défiler
  • -E
    • Sortez quand vous atteignez l'EOF
  • -X
    • Empêcher la permutation de terme / suppression
    • La partie "mémoire" est que je sais ce que S et E font, alors ce doit être l'autre partie. (Et notre raison de valider cette commande en mémoire est que nous voulons vider (ne pas entrer dans une session interactive) une sortie non encapsulée.

Si vous ne vous en souvenez pas less -SEX, il n'y a pas beaucoup d'espoir pour vous. Il suffit de re-google à chaque fois, je suppose.

Bruno Bronosky
la source
Le mec a un problème et tu lui offres moins de sexe?
Yossico