Como posso rolar uma linha para cima no zsh?

Como posso rolar uma linha para cima no zsh?

Estou usando o iTerm2 com bash e percorro o buffer de histórico uma linha digitando Shift+Up. Quando mudo para meu shell zsh, ele apenas insere 2A. Como posso rolar para cima uma única linha no zsh com apenas o teclado, de preferência usando Shift+Up?

Responder1

Acho que depende do emulador de terminal.

Por exemplo, comzsh, no konsole funciona Shift+ Up.
No xterm não, mas funciona Shift+ PgUp.

Parece que com o iTerm2 deve funcionar por padrão:

  • mover uma linha para cima
  • mover uma linha para baixo

Responder2

A função que você procura é fornecida pelos widgets up-historye up-line-or-history( down-historye down-line-or-historypara rolar para baixo).

Por padrão, up-line-or-historydeve estar vinculado, Upmas você pode vinculá-lo a (quase) qualquer outra sequência de teclas com bindkey. Nos terminais, chaves especiais (chaves que não geram um caractere imprimível) geram uma sequência de chaves que é então interpretada pelo shell - ou não, como mostra seu exemplo 2Afor Shift+ Up. Essas sequências de teclas também podem diferir entre emuladores de terminal. Para obter a sequência de teclas correta para o seu terminal, abra-o e pressione Ctrl+ vseguido da combinação de teclas desejada ( Shift+ Up). No meu terminal (rxvt-unicode) recebo ^[[a. Você pode então vincular a sequência ao up-historywidget:

bindkey <in-string> up-history

Basta substituir <in-string>pela sequência encontrada. No meu caso

bindkey '^[[a' up-history

Nota 1:Você provavelmente precisará colocar a sequência entre aspas, pois provavelmente conterá caracteres que serão interpretados de zshoutra forma.

Nota 2:Algumas combinações de teclas podem gerar sequências de teclas idênticas. Por exemplo, letras combinadas com Ctrl+ Shiftgeralmente não diferem das mesmas letras combinadas apenas com Ctrl. Ambos, Ctrl+ Shift+ ae Ctrl+ ageralmente produzem ^A. Em alguns emuladores de terminal Ctrl+ Shiftcombinações são usadas até para atalhos do próprio terminal e não estão disponíveis no shell.

informação relacionada