Questão Como configurar o PuTTY para que Home / End / PgUp / PgDn funcionem corretamente no bash?


As teclas Home, End, PageUp, PageDown todo o tipo a ~ na minha sessão bash em vez de mover o cursor / visão ao redor. Por que isso acontece e quais configurações eu preciso alterar?

GNU bash, version 4.0.28(1)-release (x86_64--netbsd)
PuTTY v0.60

A pergunta originalmente lida:

No PuTTY, por que pressionar a tecla "Home" no shell (bash) digite um "~"? Ou melhor, como faço para mover o cursor para o início do comando que eu digitei?

(Eu pensei que a razão era que ~ é o casa diretório, mas as respostas dizem que isso não é verdade.)


109


origem




Respostas:


Altere a cadeia do tipo Terminal na guia Conexão> Dados do padrão “xterm” para “linux”. Isso funcionou para mim.

enter image description here


133



Obrigado! Eu tive esse problema depois de tentar fazer Ctrl Esquerda / Direita trabalhar usando este método (superuser.com/a/103097/45410). - Edwin Yip
Ênfase: não Terminal -> Keyboard "As teclas de função e teclado". - Elazar
Funciona, mas cria outros problemas, como desativar o suporte ao mouse. então, não é solução aceitável para mim - Anton
Esta solução também permite o uso de umlauts dentro do putty ao conectar ao OS X! - lorem monkey


Isso está acontecendo porque você não tem o tipo de terminal do PuTTY configurado corretamente ou porque seu servidor não tem as definições de terminfo corretas instaladas.

Nos sistemas baseados em Debian, o ncurses-term O pacote (versão 5.7 + 20081213-1) inclui arquivos de definição do putty, putty-256color e putty-vt100 tipos de terminais. Se você tiver este pacote instalado, você pode definir a "cadeia do tipo Terminal" para "putty" em vez do padrão "xterm" na configuração da sessão do Putty (Conexão -> Dados).

Stephen Irons também menciona "linux" como outro tipo de terminal que funciona; Eu acredito que isso está correto a partir da experiência anterior, mas não testei isso recentemente.

Nos meus sistemas, isso permite que o Home e o End funcionem corretamente, embora o PageUp / PageDown não role a janela do console. (Eles funcionam corretamente em aplicativos ncurses como aptidãoe Shift-PgUp / Shift-PgDn rolam a janela do console.)


39



Sim, usando TERM=putty ou TERM=putty-256color é mais sábio, embora infelizmente no momento em que o último não parece funcionar bem para as cores 8-15 (que supostamente são as versões brilhantes de 0-7). As outras "soluções" são muito prováveis ​​de serem desmembradas, por vezes, devido ao seu flagrante desrespeito pelas diferenças entre os terminais envolvidos. - SamB
yum install ncurses-term classifiquei para mim no CentOS 7 com putty no próximo login, obrigado. - Wandering Zombie
definir o tipo de terminal para putty funciona, mas quebra o suporte a mouse semelhante ao xterm (por exemplo, para o Midnight Commander) - Anton
instalar 'ncurses-term' funcionou para mim no teste Debian. - hochl
nada disso funciona para mim, estou na putty conectando ao centos, e não consigo executar o yum install ncurses-term porque não sou root. - Herman Toothrot


Se você quiser verificar qual código é enviado por PuTTY para o seu terminal quando você pressiona uma tecla ou uma combinação de teclas, você apenas tem que emitir um Ctrl+V e depois pressione a tecla desejada.

Por exemplo, na minha caixa, pressionando o Casa key irá gerar a seguinte string no meu terminal:

^[[1~

Isso significa que o PuTTY envia o caractere de escape ^ [ seguido pela string [1 ~.

Você pode criar um ~/.inputrc arquivo em seu $HOME pasta ou, alternativamente, /etc/inputrc arquivo dependendo do seu sistema. Em seguida, preencha este arquivo com os códigos do PuTTY e as ações de Bash correspondentes que você deseja que sejam acionadas pelo Bash.

Nota: Substitua todos os ^ [ personagem pelo equivalente \ e corda

No meu exemplo, adicionarei uma linha com o meu Casa código chave e começo-de-linha ação (que por padrão é obrigado a Ctrl+A no Bash):

"\e[1~": beginning-of-line

FYI, meu arquivo inputrc tem o seguinte conteúdo:

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
"\e[1~": beginning-of-line     # Home key
"\e[4~": end-of-line           # End key
"\e[5~": beginning-of-history  # PageUp key
"\e[6~": end-of-history        # PageDown key
"\e[3~": delete-char           # Delete key
"\e[2~": quoted-insert         # Insert key
"\eOD": backward-word          # Ctrl + Left Arrow key
"\eOC": forward-word           # Ctrl + Right Arrow key

De @Cimbali: Comandos mais ligáveis ​​(como histórico anterior: Mover para cima através da lista de histórico) disponível nesta página de referência.


17



SIM ! Finalmente ! Cadeia do tipo terminal do Putty não fez nada para palavra para trás e para frente. Isso é ótimo ! - Cimbali
Esta é a única solução aceitável porque TERM=linux ou TERM=putty romper o suporte do mouse semelhante ao xterm. Obrigado! - Anton


Crtl + A leva você para o início da linha

Aqui está um lista de atalhos de teclado Bash


13



Isso é ótimo e tudo, mas o Home / End está no meu cérebro, e como eu só administro o servidor uma vez em uma lua azul, as chances de desaprender a fiação são mínimas. - RomanSt


O que está realmente enviando é ^[[1~que é uma sequência de escape terminal que consiste em:

  • ^ [- escape
  • [- colchete esquerdo
  • 1 um
  • ~ - til

Você pode ver isso pressionando Ctrl+V então Casa.

Você pode consertar seu problema alterando a configuração do teclado PuTTY para as teclas Home e End para rxvt (o que torna a sequência de escape ^[[H ou alterando o $ TERM que você está usando (ou editando ~/.inputrc).

A propósito, não há relação entre o til que você consegue quando aperta Casa e o til que representa o diretório inicial. Por exemplo, na minha configuração Page-Down produz ^[[6~ que também imprimiria um til se não estivesse sendo interpretado corretamente.


9



Obrigado! rxvt consertou a tecla Home; a tecla End agora produz um ding. PgUp / Down, de fato, digite ~e nenhuma das configurações do teclado PuTTY as faz funcionar. Minha festa está estragada ou isso é "normal"? - RomanSt
O que você ganha quando digita echo $TERM? - Dennis Williamson
xterm (Limite de 15 caracteres) - RomanSt
Você pode tentar adicionar "\eOw": end-of-line (isso é uma letra maiúscula O) para o seu ~/.inputrcArquivo. - Dennis Williamson
Tecla final fixa; Eu entendi a ideia. Realmente desejo hacks como este não eram necessários embora ... - RomanSt


Nenhuma dessas opções funcionou para mim. Eu estou executando um antigo sistema AIX. Eu tive que adicionar o seguinte apelido ao meu .profile

alias __A=$(print '\0020') # ^P = up = previous command
alias __B=$(print '\0016') # ^N = down = next command
alias __C=$(print '\0006') # ^F = right = forward a character
alias __D=$(print '\0002') # ^B = left = back a character

2



não funciona para mim, chatice - Herman Toothrot


Eu não consegui trabalhar com outros métodos. No entanto, criei este script AutoHotkey que funciona, desde que seu shell seja Bash:

#IfWinActive ahk_class PuTTY
PgUp::Send +{PgUp}
PgDn::Send +{PgDn}
Home::Send ^a   ; beginning of line
End::Send ^e    ; end of line
+^Del::Send ^k  ; delete whole line after cursor
+End::Send ^k   ; delete whole line after cursor
+Home::Send ^u  ; delete whole line before cursor
^Del::Send !d   ; delete word after cursor
^BS::Send ^w    ; delete word before cursor
^Left::Send !b  ; jump word left
^Right::Send !f ; jump word right
#IfWinActive

Use com cuidado no entanto, uma vez que nem todas essas teclas de atalho funcionam em outros programas.


1



Isso iria mexer com a principal razão que eu estou olhando para isso: screen, que com as configurações padrão quebra o Ctrl-A porque ele o usa como um caractere de escape .... - Gert van den Berg