Existe alguma maneira de sair "menos" sem limpar a tela?

68

Com relativa frequência, me vejo querendo sair, lessmas deixo o que estava vendo na tela, para me referir novamente. Há alguma maneira de fazer isso? Soluções alternativas?

(Minha solução atual é encerrar e usar more. Portanto, qualquer solução melhor do que isso é bem-vinda. O ideal seria algo que eu possa usar quando já estiver lá dentro less, talvez com uma configuração de shell ou algum script.)

Minha área de trabalho é OSX, mas eu uso servidores RHEL e Ubuntu.

Steve Bennett
fonte
11
A leitura de uma saída longa (como em git diffou git log) em less -Xocupará o buffer de rolagem no meu terminal e removerá grande parte da saída anterior. Eu adoraria se lesspudesse sair com a última tela cheia de saída no momento da saída; ou seja, não mais do que uma página do buffer de rolagem seria tomada após sair less. Alguma ideia?
Musiphil
By the way, -Rgeralmente é uma escolha mais segura do que -r.
Musiphil
Obrigado. Para aqueles que se perguntam:-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
@musiphil Talvez -c?
Vanessa Phipps
@ MatthewPhipps: Eu acho que -cé sobre como atualizar a tela quando você se move por dentro less.
Musiphil

Respostas:

68

Esta é realmente uma função do emulador de terminal que você está usando (xterm, gnome-terminal, konsole, tela). Uma tela alternativa, ou altscreen, é iniciada quando programas como lessou vimsão chamados. Essa tela alternativa não possui buffer de histórico e sai imediatamente quando você sai do programa, retornando à tela original que restaura o histórico e o posicionamento do conteúdo da janela anterior.

Você pode impedir o lesslançamento em uma tela alternativa, passando o argumento "-X".

less -X /path/to/some/file

Você também pode passar "-X" como uma variável de ambiente. Portanto, se você estiver usando bash, coloque-o em ~/.bashrc:

export LESS="-X"

No entanto, isso desativa a inicialização e a desinicialização do termcap (capacidade do terminal); portanto, outras exibições quando você usa lesspodem aparecer.

Outra opção seria usar screene definir a opção altscreen offno seu ~/.screenrc. lessnão limpará a tela e deve preservar a formatação da cor. Presumivelmente tmux, terá a mesma opção.

Esta entrada de blog descreve o problema e oferece algumas soluções diferentes específicas para cada caso gnome-terminalcom sucesso.

George M
fonte
2
Perfeito. Existe uma desvantagem?
21912 Steve Bennett
2
Espere, eu já descobri um - a saída git log(e provavelmente outros comandos coloridos) está bagunçada.
21812 Steve Bennett
11
@SteveBennett É pequeno o suficiente que eu tinha que fazer isso um alias:alias les="/usr/bin/less -X"
bonsaiviking
4
Ei, eu acho que eu só descobri um antídoto para o git logproblema acima: export LESS="-r -X". (Sem idéia do que os efeitos colaterais do que são ...)
Steve Bennett
5
Na verdade, gitdefine a LESSvariável como FRSXse ela estiver desabilitada ao executar o pager, para que você possa deixar LESSdesabilitada e lessexecutará automaticamente com -FRSX. Procure core.pagerem git-config(1)para mais informações.
Musiphil
4

A solução de George não funcionou para mim, mas funcionou (a partir da entrada do blog vinculada em sua resposta).

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

  2. Editar ~ / xterm-noclear.src

    • altere o nome na segunda linha de 'xterm' para 'xterm-noclear' ou o que mais lhe convier (também altere 'xterm-debian' se estiver presente)

    • remova as instruções 'smcup' e 'rmcup' (por exemplo, "smcup = \ E [? 1049h" e "rmcup = \ E [? 1049l")

  3. $ mkdir ~/.terminfo

  4. $ tic ~/xterm-noclear.src (x / xterm-noclear deve aparecer no seu diretório ~ / .terminfo)

  5. $ export TERM=xterm-noclear (agora verifique o comportamento de less e, se estiver satisfeito, adicione a linha da diretiva de exportação ao seu ~ / .profile)

(Copiei essas instruções diretamente da edição rejeitada por @ jah da resposta de George.)

prl
fonte
4

A maneira como me lembro disso é less -SEXquando preciso despejar a saída na tela, mas não quero que as linhas sejam quebradas. Por exemplo, o docker ps | less -SEXque isso faz é o seguinte:

  • -S
    • Rolar em vez de quebrar
    • Se você soltar o -E, poderá usar as teclas de seta para rolar
  • -E
    • Saia quando você atingir o EOF
  • -X
    • Impedir troca / apagamento de termos
    • A parte "memória" é que eu sei o que S e E fazem, então essa deve ser a outra parte. (E nossa razão para confirmar esse comando na memória é que queremos despejar (não entrar em uma sessão interativa) a saída desembrulhada.

Se você não consegue se lembrar less -SEX, não há muita esperança para você. Apenas re-google cada vez que eu acho.

Bruno Bronosky
fonte
O cara tem um problema e você oferece menos sexo?
yossico 23/07