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 / 1628694
Accepted
Charles Roper
Charles Roper
Asked: 2021-02-25 06:57:10 +0800 CST2021-02-25 06:57:10 +0800 CST 2021-02-25 06:57:10 +0800 CST

Como adiciono um atalho de teclado para limpar o buffer de rolagem no Windows Terminal?

  • 772

Eu gostaria de poder limpar meu buffer de rolagem no Windows Terminal usando um atalho de teclado.

No WSL eu posso apertar Ctrl+ Le ele faz um form-feed (equivalente ao clear -xcomando), que limpa a tela, mas apenas rolando o conteúdo acima e fora de vista.

O que eu gostaria de fazer é, por exemplo, pressionar Ctrl+ K(como o Terminal do macOS) para poder limpar a tela corretamente (semelhante a emitir um clearcomando simples) no WSL e no PowerShell.

Isso é possível?

Atualização : agora é suportado nativamente no Windows Terminal. Eu adicionei minha própria resposta abaixo e aceitei, mas está um pouco escondida, então aqui está um link: https://superuser.com/a/1628815/2924

keyboard-shortcuts keyboard
  • 3 3 respostas
  • 4710 Views

3 respostas

  • Voted
  1. Best Answer
    Charles Roper
    2021-02-25T15:25:43+08:002021-02-25T15:25:43+08:00

    Atualização 2021-10-20 : Isso agora é suportado nativamente a partir da versão 1.12 (em visualização no momento da redação).

    Veja PR #10906 para detalhes completos.

    Isso adiciona uma nova ação, clearBuffer. Aceita 3 valores para o tipo clear:

    • "clear": "screen": Limpe o conteúdo da janela de visualização do terminal. Deixa a rolagem intocada. Move a linha do cursor para o topo da janela de visualização (não modificada).

    • "clear": "scrollback": Limpe a rolagem. Deixa a viewport intocada.

    • "clear": "all": (padrão) Limpe a rolagem e a viewport visível. Move a linha do cursor para o topo da janela de visualização (não modificada).

    • "Limpar buffer" também foi adicionado ao defaults.json.

    Essas ações podem ser invocadas a partir da paleta de comandos ou podem ser vinculadas a atalhos de teclado por meio da interface do usuário de configurações e diretamente settings.jsonconforme abordado na documentação oficial .

    Vinculando um atalho à ação Limpar buffer

    Limpar ação de buffer em settings.json

    Exemplo de ação clearBuffer do Windows Terminal


    Para referência, aqui está uma discussão sobre a diferença entre Cmd ⌘+ Ke Ctrl+ L: Qual é a diferença entre Ctrl+L e Cmd+K para limpar a tela do terminal?

    Resposta mais longa

    De acordo com Mike Griese ( zadjii-msft no GitHub), um engenheiro que trabalha no Windows Terminal:

    Para esclarecer para mim no futuro - cmd + k não é algo que está sendo tratado pelo bash ou pelo shell. Este é o próprio Terminal manipulando a combinação de teclas e limpando o buffer e a rolagem.

    Você descreveu uma história de usuário que faz sentido para mim, então vou colocar isso na lista de pendências.

    Dustin Howett ( DHowett-MSFT no GitHub) continua dizendo:

    [Esta] questão em particular é mais espinhosa do que a maioria. Para compatibilidade com aplicativos de console do Windows que não esperam que um terminal seja conectado, precisamos manter um buffer de texto para que eles leiam. Isso é tudo. Como não temos como limpar esse buffer de texto (do lado do terminal), e ainda não escrevemos um, é apenas mais complexo do que limpar a tela local. Não é um problema de classe de complexidade com todo o Terminal.

    Referência: https://github.com/microsoft/terminal/issues/1882

    • 11
  2. NotTheDr01ds
    2021-02-25T19:42:18+08:002021-02-25T19:42:18+08:00

    Bem, isso se transformou em um rastro de coelho e meio ;-) ...

    Eu teria pensado que isso teria sido bastante direto com a sendInputação introduzida no Windows Terminal 1.3, mas continuo falhando usando esse método. Não afirmo ser nenhum especialista em atalhos de teclado ou sequências de escape de terminal, mas estou tentando atrapalhar.

    Primeiro, de man clear, a sequência "clear scrollback" é Esc[3J. Isso funciona no Windows Terminal via:

    • Powershell:Write-Output "`e[3J"
    • bash, zsh ou fish: printf '\033[3J'(ou equivalente echo)

    É claro que precisa ser acoplado com a sequência "limpar tela inteira" ( \033[2J) e o "cursor para a posição inicial" ( \033[H) (obtido nesta resposta ).

    Junte-os e printf '\033[2J\033[3J\033[H'obtenha-nos o clearcomportamento (sem argumentos).

    Então, eu pensaria, dado o sendInputexemplo nas notas de lançamento do Windows Terminal 1.3, que poderíamos enviar esse código de escape via:

    { "command": { "action": "sendInput", "input": "\u001B[3J" }, "keys": "ctrl+shift+l"}
    

    na "actions"seção (anteriormente "keybindings"). O \u001b[Aexemplo (seta para cima) funciona bem para mim, mas o "clear scrollback" resulta em um sino de erro no bash e na impressão [3Jem fish. O mesmo ocorre para \u001B[2Jtentar limpar a tela também. Se alguém puder descobrir onde estou errando nisso, eu adoraria saber.

    Mas... podemos religar as chaves nas conchas. No entanto, eles provavelmente não serão capazes de dizer a diferença entre + Ctrle L++ Ctrlpor esse motivoShift . Exceto para o recente PSReadLine 2.0, que diferencia maiúsculas de minúsculas em combinações de teclas.L

    Portanto, se você realmente deseja usar Ctrl++ nos shells do PowerShell Shifte ldo Linux no WSL, precisará fazer isso em duas etapas:

    Primeiro, configure uma ação do Terminal do Windows para sendInputcom um código de chave não utilizado:

    "actions":
    // formerly "keybindings"
        [
          ...
            { "command": { "action": "sendInput", "input": "\uAC12" }, "keys": "ctrl+shift+l"},
          ...
        ]
    }
    

    Honestamente, não tenho certeza de qual é a melhor maneira de escolher um código de chave. Acabei de usar algo do conjunto de caracteres Hangul\uAC12 ( ), já que tenho certeza de que nunca vou encontrar isso na vida real. Observe que este comentário recomenda o uso do intervalo " uso privado " E000-EFFF, mas parecia bastante preenchido no Windows Terminal e eu já havia resolvido o Hangul, então deixei os exemplos abaixo usando \uAC12.

    Então, precisamos vincular \uAC12em cada shell para enviar as sequências de escape corretas:

    • Bash:

      Primeiro, obtenha a sequência de chaves para vincular com printf '\uAC12' | xxd, o que resulta em 00000000: eab0 92.

      Em seguida, usando essa saída, codifique o comando bind como bind -x '"\xEA\xB0\x92":"printf \\033[2J\\033[3J\\033[H"'( xxdideia de um comentário nesta resposta .)

    • Zsh: Parece estar um pouco mais envolvido:

      function clear-scrollback {
        clear && printf '\e[3J'
        zle && zle .reset-prompt && zle -R
      }
      zle -N clear-scrollback
      bindkey '\uAC12' clear-scrollback
      
      

      (com a ajuda desta resposta ).

    • Peixe: bind \uAC12 "printf '\033[2J\033[3J\033[H'; commandline -f repaint"

    • PowerShell: Set-PSReadLineKeyHandler "$([char]0xAC12)" -ScriptBlock { Write-Output "`e[2J`e[3J"; [Microsoft.PowerShell.PSConsoleReadLine]::ClearScreen() }. Ajude na [char]conversão desta resposta e, caramba, se não demorei para encontrar um exemplo de chamada de uma função PSReadline em um ScriptBlock.

    • Núcleo do PowerShell: Set-PSReadLineKeyHandler "$([char]0xAC12)" -ScriptBlock { Write-Host "`e[2J`e[3J"; [Microsoft.PowerShell.PSConsoleReadLine]::ClearScreen() }. Não tenho certeza por que o PowerShell e o PowerShell Core se comportam de maneira diferente aqui.

    Correções ou sugestões de melhoria são bem-vindas.

    • 9
  3. flakshack
    2021-08-28T06:55:11+08:002021-08-28T06:55:11+08:00

    Edite seu~/.bashrc

    alias cls='clear && echo -en "\e[3J"'
    

    Agora você pode digitar clspara limpar a tela e rolar para dentro de sua sessão do WSL do bash.

    Edite seu arquivo JSON do Terminal do Windows

    "actions": 
    [
        // Command to reset terminal and scrollback
        { 
            "command": 
            { 
                "action": "sendInput", "input": "cls\r" 
            }, 
            "keys": "ctrl+k"
        },
    ]
    

    Agora pressionando CTRL+ kirá inserir o comando CLS para você. Para o PowerShell ou um prompt CMD, o comando CLS já tem suporte por padrão, portanto, nenhuma configuração extra é necessária.

    • 6

relate perguntas

  • Excel - Pode-se mover o cursor de texto em um campo de entrada de intervalo usando o teclado?

  • Como posso selecionar uma linha no terminal macOS com atalhos de teclado?

  • Os atalhos de teclado Super+n do Gnome 3.32.0 não funcionam

  • Vá para as funções de seta do ES6 no editor de texto Sublime

  • Como alterar permanentemente Ctrl + C para Ctrl + K no CentOS 7?

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