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 / computer / Perguntas / 1738555
Accepted
Bob
Bob
Asked: 2022-08-24 05:58:34 +0800 CST2022-08-24 05:58:34 +0800 CST 2022-08-24 05:58:34 +0800 CST

Limpar tela no PowerShell e na linha de comando sem apagar tudo

  • 772

Ao usar o clearcomando, a tela é limpa. Totalmente. Não tenho mais acesso a nenhuma das coisas que estavam anteriormente na tela.

Existe uma maneira de "limpar" a tela (ou seja, fazer o prompt ir para o topo da tela) sem apagar tudo o que estava na tela? Idealmente, eu gostaria de "limpar" a tela, mas poder rolar para cima para ver todo o resto.

Estou usando o programa Windows Terminal e o shell do PowerShell, mas também gostaria de saber a resposta para a linha de comando do Windows.

Eu coloquei que queria manter a capacidade de rolar para cima - com isso quero dizer que quero ver tudo o que veio antes de apertar o comando "clear", então... sim, quero manter tudo o que veio antes, não o histórico de comandos.

windows-10 command-line
  • 4 4 respostas
  • 2185 Views

4 respostas

  • Voted
  1. Best Answer
    user1686
    2022-08-24T06:09:25+08:002022-08-24T06:09:25+08:00

    PSReadline (manipulador de entrada padrão do PowerShell) tem a tecla de CtrlLatalho encontrada na maioria dos shells Unix, que limpa a tela como se você forçasse todo o texto a rolar (como o caractere ASCII "Form Feed" faria).

    No PS5, embora ainda apague completamente o texto exibido - mas tudo o que já foi para a rolagem permanecerá na rolagem.

    Como solução alternativa, você pode gerar linhas vazias suficientes para empurrar tudo para a rolagem:

    echo ("`n" * $Host.UI.RawUI.WindowSize.Height)
    

    ... e, em seguida, traga o cursor para o topo:

    $e = [char]27
    echo "$e[H" # Move cursor to 0;0
    echo "$e[J" # Erase down/right
    

    Isso também pode ser vinculado a uma chave usando Set-PSReadlineKeyHandler -ScriptBlock.

    O Cmd não tem um equivalente – ele lê a entrada no modo de linha, com apenas alguns atalhos fornecidos pelo Conhost. No entanto, você ainda pode criar um script em lote (ou mesmo um alias Conhost DOSKEY) que produziria as mesmas sequências VT.

    • 13
  2. NotTheDr01ds
    2022-08-24T11:03:51+08:002022-08-24T11:03:51+08:00

    Enquanto limpar a tela é uma função de terminal (através de códigos de controle de terminal ANSI), a maneira como você recebe esses códigos enviados pode ser diferente dependendo do shell. A ideia geral é que:

    • ESC[2Jlimpa a tela, mas deixa a rolagem
    • ESC[3Jlimpa a tela, incluindo toda a rolagem

    ... onde ESCrepresenta o código de caractere ASCII 27.

    De acordo com man clearo Linux, o 2Jcódigo era originalmente (em 1999) uma extensão para o XTerm, que foi escolhido pelo kernel do Linux em 2011 para o driver do console. Algum tempo depois, o Windows Console Host o pegou e está no Windows Terminal provavelmente desde o início.

    Terminal do Windows (para todos os shells)

    O Terminal do Windows inclui a clearBufferação que pode ser vinculada a qualquer tecla de atalho. No entanto, ele afeta todos os shells, independentemente de qual aplicativo esteja sendo executado dentro dele . Por esse motivo, recomendo não usá-lo, a menos que você tenha certeza de que não pressionará acidentalmente a tecla de atalho quando estiver em algo como vi(ou pior).

    Dito isso, é definitivamente a maneira mais fácil de obter essa funcionalidade no CMD.

    Se você quiser usá-lo, a clearBufferação permite que você especifique um cleardestino de:

    • screen
    • scrollback
    • all

    Usar a screenopção limpará o conteúdo atual da tela, mas deixará a rolagem no lugar.

    Você precisará editar seu Windows Terminal settings.jsondiretamente, pois a interface do usuário não tem como definir o cleardestino:

            {
                "command": 
                {
                    "action": "clearBuffer",
                    "clear": "screen"
                },
                "keys": ""
            }
    
    PowerShell

    Para o PowerShell , como user1684 me venceu Ctrl + Lenvia a sequência de escape adequada.

    Por outro lado, Clear-Host(alias clear) no PowerShell envia um ESC[3J(limpando a rolagem também).

    Se você tiver memória muscular ao digitar clearno PowerShell, basta alterar sua definição:

    Remove-Item Alias:clear
    function clear {
        Write-Output "$([char]27)[2J"
    }
    

    Coloque isso em seu perfil do PowerShell se quiser que seja permanente.

    CMD

    É possível, mas complicado fazer isso no CMD também.

    O maior problema no CMD é realmente obter o caractere ESC (ASCII 27) impresso. Eu tinha o "caractere" real colado aqui que seria transferido via copiar/colar para o CMD, mas foi apagado na primeira vez que fiz outra edição neste post. O personagem ainda está lá no histórico de edição (fonte) para esta resposta, mas vamos encontrar uma maneira melhor de fazer isso.

    No PowerShell , use isso para criar um arquivo de lote CMD :

    @"
    @echo off
    echo $([char]27)[2J
    "@ | Out-File -FilePath .\clear.cmd -Encoding ASCII
    

    A execução do clear.cmdarquivo de lote resultante no CMD deve limpar a tela (mas não a rolagem).

    Se você tiver problemas com isso, qualquer maneira de imprimir um ASCII 27 seguido por [2Jdeve funcionar. Se você tiver o PowerShell Core instalado, por exemplo:

    pwsh -c "Write-Output "`e[2J""
    

    E apenas para fornecer alguns detalhes adicionais em um de seus comentários:

    Isso parece ser a maior falha de design do mundo ou... não sei. Eu afirmo que provavelmente há uma solução alternativa, no mínimo.

    Então, sim, encontramos uma solução alternativa, mas honestamente não me surpreenderia se não tivéssemos. Lembre-se, o Windows Console Host (no qual o CMD costumava ser executado por padrão) remonta ao Windows 95 (há 27 anos), bem antes de o XTerm adicionar esses códigos.

    E embora o Windows Terminal seja muito mais moderno, não acho que o CMD (que precisa gerar os códigos) tenha visto nenhuma atualização substancial desde antes do lançamento do PowerShell em 2006.

    Realmente, eu me considero sortudo por termos uma solução alternativa ;-).

    Subsistema Windows para Linux
    • Ctrl+ Ltambém funciona a partir de muitos shells do Linux para enviar um ESC[2J(deixe o scrollback).
    • clearfuncionará como no PowerShell, limpando a tela e rolando para trás ( ESC[3J).
    • clear -xvai deixar a rolagem ( ESC[2J)
    • 6
  3. user694733
    2022-08-26T00:11:10+08:002022-08-26T00:11:10+08:00

    Como solução alternativa, no CMD, você pode manter pressionado Ctrl↓ (Down arrow)até que a tela esteja vazia. Ele rolará para baixo bastante rápido, então é possível rolar muito. Nesse caso, você pode pressionar Ctrl→ (Right arrow)ou começar a digitar, e a linha de prompt volta a aparecer. Qualquer coisa que mova o cursor fará.

    Isso não parece funcionar no Powershell, infelizmente.

    • 3
  4. harrymc
    2022-08-24T06:01:47+08:002022-08-24T06:01:47+08:00

    Use para CMD e PowerShell o comando clear screen.

    Digitar :cls

    • 0

relate perguntas

  • O serviço de arbitragem USB da estação de trabalho VMware não inicia automaticamente

  • Como ativar o sensor de impressão digital no domínio e no diretório ativo do Linux

  • atalho do shell da área de trabalho no painel lateral do explorer

  • Por que não consigo enviar arquivos do Android para o Windows 10?

  • Abrir com em vários arquivos?

Sidebar

Stats

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

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

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