Como adicionar rapidamente algum espaço no terminal?

5

Muitas vezes eu me pergunto através do terminal com a roda do mouse para ver o primeiro de muitos erros de modelo C ++ emitidos por um comando. Antecipando isso, eu segurarei a tecla Return para dar algum espaço a partir das saídas anteriores; para me permitir ler mais facilmente o primeiro erro. Eu acho isso preferível para canalizar em head -n , então eu tenho que estimar n . Da mesma forma, o comando clear apenas limpa a tela do terminal.

Existe algo mais rápido do que manter Return assim? Eu vi soluções adequadas para o script (loops de eco; jot; sim / cabeça), mas queria saber se há um comando curto que eu desconheço.

    
por user7543 17.06.2015 / 13:36

10 respostas

3

Existem algumas opções que lembram

  1. Linhas espaçadoras:

    sl() { yes '' | head -"${1:-5}"; }    # Use as "sl 10" or "sl"
    
  2. Canalize a saída do seu make por meio de um pager:

    make {whatever} 2>&1 | less
    
  3. Execute a sessão inteira em screen . Você pode então Ctrl A Esc e rolar pelo buffer uma página por vez usando Ctrl B . Use Retornar Retornar para sair do modo de rolagem

por 17.06.2015 / 14:54
2

Eu escrevi um pequeno programa em C para imprimir três linhas de tijolos no terminal para essa finalidade. Não espaço vazio, mas ajuda a separar visualmente da mesma maneira e se destaca na saída detalhada que pode ter um monte de espaço vertical. Troque seu personagem favorito para provar:

#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;
}
    
por 17.06.2015 / 21:09
1

Eu tenho

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

para isso, você pode reduzir ainda mais o alias ao seu gosto, é claro.

    
por 17.06.2015 / 14:02
1

Eu acredito que você já tem maneiras suficientes para abreviar echo -e "\n\n\n\n\n\n" , então não vou adicionar isso. Mas você tem outra opção: Muitos emuladores de terminal suportam pesquisa, para que você possa ir para o início do último comando pesquisando para trás por alguma parte do seu prompt. (Ou para alguma string conhecida na saída, mas o prompt está sempre lá.)

TBH Eu costumo fazer a mesma coisa que você tem feito-- minha tecla Return repete rápido o suficiente para que ele nunca me incomode muito em apenas segurá-la.

    
por 17.06.2015 / 15:25
1

Você pode usar clear várias vezes ( clear;clear ) ou apenas pressionar Ctrl + L até satisfazer !

Com zsh , você pode experimentar (diversão com repeat ): -

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

E é claro que você pode querer alias goaway='repeat 7 clear' .

    
por 17.06.2015 / 15:33
1

Outra abordagem poderia ser ter algum texto exclusivo em seu prompt (eu uso $ seguido por um espaço não-separável ( PS1=$'$\ua0' )).

Configure seu emulador de terminal para voltar a ele após pressionar algumas teclas.

Por exemplo, com o GNU screen , em ~/.screenrc :

defscrollback 5000
bindkey 3' eval copy "stuff k?$0\r"

Mapearia isso para Alt + Backtick

    
por 17.06.2015 / 16:47
0
Script

bash para imprimir um número personalizado de novas linhas:

#!/bin/bash

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

Nomeie-o (digamos script.bash ) e coloque-o em $PATH (digamos em /usr/bin ), execute chmod +x /usr/bin/script.bash e chame com script.bash <number_of_lines> , ou coloque onde quiser, marque-o como executável e adicione um alias a ~/.bashrc ou ~/.bash_aliases :

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

Você pode alterar / diminuir o nome e o alias de acordo com suas necessidades. Ele também pode ser modificado para imprimir um número padrão de linhas se nenhum argumento for passado:

#!/bin/bash

if ! [[ "$1" =~ ^[0-9]+$ ]]
    $1=5
fi
for ((i=0; i<$1; i++))
do
    echo
done
    
por 17.06.2015 / 14:35
0

Esta é uma espécie de resposta lateral para a sua pergunta, mas eu prefiro usar um prompt invertido (que se destaca e é fácil de detectar) com a finalidade de determinar rapidamente onde o último comando foi executado. .

Você pode inverter a cor do seu prompt (ou seja, texto preto sobre fundo branco) adicionando as sequências ANSI <esc>[7m (invert) ao início do prompt e <esc>[0m (reset) ao final dele.

A maioria dos shells mais sofisticados (como bash e zsh ) também rastreiam o comprimento do prompt na tela, então você precisa adicionar um pouco de açúcar para dizer ao shell que essas sequências não movem o cursor para frente. Em zsh , isso é feito usando %{...%} , enquanto bash usa \[...\] .

Assim, para inverter seu prompt em zsh use:

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

e em bash , use:

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

$'...' é uma maneira especial de citar uma string, que traduz \e em <esc>

${VARNAME%SUFFIX} remove as saídas VARNAME , mas remove qualquer string final SUFFIX (nos casos acima o espaço final, uma vez que não queremos inverter isso para ver o cursor corretamente).

Ocasionalmente eu acho que o truque acima é impraticável (normalmente quando surge a necessidade de olhar para algum arquivo de log ou algo em um servidor que não é realmente meu para personalizar até a morte), mas nessas ocasiões eu costumo achar que todos as soluções sugeridas acima também são muito trabalhosas, e eu apenas pressiono <enter> por um tempo.

    
por 17.06.2015 / 20:53
0

Apenas clear duas vezes! Exemplo:

clear; clear; echo "Hello World"
    
por 17.06.2015 / 20:58
0

No bash eu encontro CTRL + l move o cursor para o topo da tela, mas CTRL + L (isto é, CTRL + SHIFT + l) move o cursor para o topo da tela, e insere em torno de uma tela de espaço de antemão. Ideal! Obrigado @Anthon.

    
por 17.08.2015 / 17:00