AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 410708
Accepted
Anthony
Anthony
Asked: 2017-12-14 09:52:32 +0800 CST2017-12-14 09:52:32 +0800 CST 2017-12-14 09:52:32 +0800 CST

A maneira mais fácil de limpar o buffer de rolagem do terminal + alguma explicação mais profunda?

  • 772

Porque se importar?

A limpeza do buffer de rolagem é útil de várias maneiras, por exemplo, quando desejo executar algum comando com saída longa e quero rolar rapidamente para o início dessa saída. Quando o buffer de rolagem é limpo, posso apenas rolar para o topo e pronto.

Algumas considerações:

Há clearcomando, de acordo com o homem,

clear limpa sua tela se isso for possível, incluindo seu buffer de rolagem (se o recurso "E3" estendido estiver definido).

No gnome-terminal clearnão limpa o buffer de rolagem. (Mas o que é a capacidade "E3")?

Há também reset, que limpa, mas faz um pouco mais do que isso e é muito lento (no meu sistema leva mais de um segundo, o que é um atraso significativo para os humanos serem notados).

E há echo -ne '\ec'ou echo -ne '\033c', que faz o trabalho. E, de fato, é muito mais rápido que reset.

A questão é: o que é \ecsequência, como ela difere do que cleare resetfaz e por que não há um comando separado para isso?

Há também a C-lsequência de teclas do readline, que por padrão é vinculada ao clear-screencomando (quero dizer, comando readline, não comando shell). O que é este comando? Qual sequência de escape ele emite? Como de fato, isso funciona? Ele executa o comando shell? Ou o que? Novamente, no gnome-terminal, parece que funciona apenas cuspindo linhas em branco até que o prompt apareça na linha superior do terminal. Não tenho certeza sobre outros emuladores de terminal. Este é um comportamento muito complicado. Ele polui a rolagem para trás com pedaços de vazio, então você deve rolar para cima mais e mais. É como um hack, em vez de uma solução limpa.

Outra questão é: existe um comando readline para a \ecsequência mencionada? Em vez disso , quero vinculá-lo C-lporque sempre desejo limpar o buffer de rolagem quando limpo a tela.

E outra questão é como digitar essa sequência de escape no terminal para executar a ação desejada? Então não precisa pensar em vincular C-la outro comando readline (se tal comando existir). Eu tentei digitar Esc, então, cmas isso não funciona.

ATUALIZAÇÃO Esta pergunta foi respondida principalmente aqui: https://unix.stackexchange.com/a/375784/257159 . É uma resposta muito boa que explica quase todas as perguntas feitas aqui.

escape-characters readline
  • 4 4 respostas
  • 7843 Views

4 respostas

  • Voted
  1. Best Answer
    Electric Vibes
    2021-08-14T02:59:55+08:002021-08-14T02:59:55+08:00

    Na man bashseção readline do 's :

       clear-display (M-C-l)
              Clear  the  screen  and,  if possible, the terminal's scrollback buffer, then redraw the current line, leaving the
              current line at the top of the screen.
       clear-screen (C-l)
              Clear the screen, then redraw the current line, leaving the current line at the top of the screen.  With an  argu‐
              ment, refresh the current line without clearing the screen.
    

    então pressione control + alt + L

    • 5
  2. Fox
    2017-12-14T10:37:38+08:002017-12-14T10:37:38+08:00

    Muitos emuladores de terminal usam as mesmas sequências de escape do XTerm ou similares. Para XTerm, Esccé definido como "Full Reset (RIS)". Parece razoável que uma redefinição completa limpe o buffer de rolagem.


    Não tive sucesso usando readlinepara vincular à própria sequência, mas uma solução alternativa é

    bind '"\C-l": "\C-a\C-kprintf\ "\\033c"\C-m"'
    

    Isso tem algumas ressalvas. Primeiro, ele coloca o printfcomando no histórico do shell, o que não é o ideal. Em segundo lugar, não pode ser usado ao inserir um comando; ele sobrescreve a linha de entrada atual.

    • 4
  3. geogeo
    2022-07-22T11:01:52+08:002022-07-22T11:01:52+08:00

    Isso funciona para mim:

    printf '\033[3J'
    

    (da clearpágina de manual)

    • 1
  4. user395728
    2020-02-17T07:05:46+08:002020-02-17T07:05:46+08:00

    Este é o melhor que encontrei para limpar o terminal e o histórico/rolagem

    clear && history -c
    
    • -1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve