Comment append rapidement de l'espace dans le terminal?

Je me retrouve souvent défiler à travers le terminal avec la molette de la souris pour voir la première de nombreuses erreurs de model C ++ émise par une command. En anticipant cela, je maintiendrai la touche Retour enfoncée pour donner de la place aux sorties précédentes; pour me permettre de lire plus facilement la première erreur. Je trouve cela préférable de se mettre en head -n comme alors je dois estimer n . De même, la command clear n'efface que l'écran du terminal.

Y a-t-il quelque chose de plus rapide que de restr en arrière? J'ai vu des solutions appropriées pour les scripts (loops d'écho, jot, oui / tête), mais je me demandais s'il y a une command courte que je ne connais pas.

Il y a quelques options qui viennent à l'esprit

  1. Lignes d'espacement:

     sl() { yes '' | head -"${1:-5}"; } # Use as "sl 10" or "sl" 
  2. Pipe la sortie de votre marque à travers un pager:

     make {whatever} 2>&1 | less 
  3. Exécuter toute la session sous l' screen . Vous pouvez ensuite Ctrl A Esc et faire défiler vers le haut à travers le tampon une page à la fois en utilisant Ctrl B. Utiliser Retour Retour pour quitter le mode de défilement

J'ai écrit un petit programme C pour imprimer trois lignes de briques à travers le terminal à cet effet. Pas d'espace vide, mais cela aide à donner une séparation visuelle de la même façon, et se distingue par une sortie verbeuse qui pourrait avoir un espace vertical. Échange ton personnage préféré au goût:

 #include <termios.h> #include <sys/ioctl.h> #include <stdio.h> int main(int argc, char *argv[]) { struct winsize ws; ioctl(0, TIOCGWINSZ, &ws); int i=0; // square: \u25A0 // large square: \u2B1B // block: \u2588 for(;i<3*ws.ws_col;++i) printf("\u2588"); printf("\n"); return 0; } 

j'ai

 alias five='echo -e "\n\n\n\n"' 

pour cela, vous pouvez encore raccourcir l'alias à votre goût bien sûr.

Je crois que vous avez déjà assez de façons d'abréger echo -e "\n\n\n\n\n\n" , donc je ne vais pas append à cela. Mais vous avez une autre option: De nombreux émulateurs de terminal prennent en charge la search, vous pouvez donc aller au début de la dernière command en recherchant en arrière une partie de votre message. (Ou pour une string connue dans la sortie, mais l'invite est toujours là.)

TBH Je fais habituellement la même chose que vous avez fait – ma key de return répète assez vite que ça ne m'a jamais dérangé beaucoup de simplement le maintenir.

Vous pouvez utiliser clear plusieurs fois ( clear;clear ) ou simplement maintenir Ctrl + L jusqu'à ce que vous satisfaisiez!

Avec zsh , vous pouvez essayer (amusant avec la repeat ): –

  • repeat 5 clear
  • repeat 20 echo
  • repeat 50 printf '\n'

Et bien sûr, vous voudrez peut-être alias goaway='repeat 7 clear' .

Une autre approche pourrait être d'avoir un text unique dans votre invite (j'utilise $ suivi d'un espace insécable ( PS1=$'$\ua0' )).

Et configurez votre émulateur de terminal pour le faire défiler lorsque vous appuyez sur une touche.

Par exemple, avec l' screen GNU, dans ~/.screenrc :

 defscrollback 5000 bindkey \033` eval copy "stuff k?$\240\r" 

Je mapperais cela à Alt + Backtick

script bash pour imprimer un nombre personnalisé de returns:

 #!/bin/bash if [[ "$1" =~ ^[0-9]+$ ]] then for ((i=0; i<$1; i++)) do echo done exit 0 fi exit 1 

Nommez-le (say script.bash ) et placez-le dans votre $PATH (dites dans /usr/bin ), exécutez chmod +x /usr/bin/script.bash et appelez-le avec script.bash <number_of_lines> , ou mettez-le où vous voulez, marquez-le comme exécutable et ajoutez un alias à ~/.bashrc ou ~/.bash_aliases :

 alias script.bash='bash /path/to/script' 

Vous pouvez changer / raccourcir le nom et l'alias selon vos besoins. Il peut également être modifié pour imprimer un nombre de lignes par défaut si aucun argument n'est passé:

 #!/bin/bash if ! [[ "$1" =~ ^[0-9]+$ ]] $1=5 fi for ((i=0; i<$1; i++)) do echo done 

C'est une sorte de réponse latérale à votre question, mais je préfère utiliser une invite inversée (qui se distingue et est facile à repérer) dans le seul but de pouvoir déterminer rapidement où la dernière command a été exécutée.

Vous pouvez inverser la couleur de votre invite (c'est-à-dire du text noir sur fond blanc) en ajoutant les séquences ANSI <esc>[7m (invert) au début de l'invite et <esc>[0m (réinitialisation)

La plupart des coquilles de fantaisie (comme bash et zsh ) gardent également la longueur de l'invite à l'écran, vous devrez donc append du sucre pour indiquer au shell que ces séquences ne déplacent pas le slider vers l'avant. Dans zsh cela se fait en utilisant %{...%} tandis que bash utilise \[...\] .

Ainsi, pour inverser votre invite dans zsh utilisez:

 PROMPT=$'%{\e[7m%}'"${PROMPT% }"$'%{\e[0m%} ' 

et dans bash , utilisez:

 PS1=$'\[\e[7m%\]'"${PS1% }"$'\[\e[0m\] ' 

$'...' est une façon particulière de citer une string, qui traduira \e en <esc>

${VARNAME%SUFFIX} supprime les sorties VARNAME , mais supprime toute string de fin SUFFIX (dans les cas ci-dessus, l'espace final, puisque nous ne voulons pas inverser cela pour voir le slider correctement).


Parfois, je trouve que l'astuce ci-dessus est impraticable (généralement lorsque le besoin de regarder un file journal ou quelque chose sur un server qui n'est pas vraiment le mien à personnaliser à la mort), mais à ces occasions, je trouve généralement que tout ce qui précède suggéré les solutions sont aussi trop d'effort, et j'appuie simplement sur <enter> pour un peu.

Juste clear deux fois! Exemple:

 clear; clear; echo "Hello World" 

En bash, je trouve CTRL + l déplace le slider en haut de l'écran, mais CTRL + L (ie CTRL + SHIFT + l) déplace le slider en haut de l'écran et insère au préalable un écran d'espace. Idéal! Merci @Anthon.