Como configurar o PuTTY para que Home / End / PgUp / PgDn funcione corretamente no bash?

123

As teclas Home, End, PageUp, PageDown digitam a ~na minha sessão do bash, em vez de mover o cursor / exibir. 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 dizia originalmente:

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

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

RomanSt
fonte

Respostas:

150

Mude a String do tipo Terminal na guia Connection> Data do padrão "xterm" para "linux". Funcionou para mim.

insira a descrição da imagem aqui

Der Hochstapler
fonte
2
Obrigado! Tive esse problema depois que tentei fazer o Ctrl Esquerdo / Direito funcionar usando esse método ( superuser.com/a/103097/45410 ).
Edwin Yip #
4
Ênfase: não Terminal -> Keyboard"As teclas de função e o teclado".
Elazar
2
Funciona, mas cria outros problemas, como desativar o suporte ao mouse. assim, não é uma solução aceitável para mim
Anton
Esta solução também permite tremas dentro da massa quando se conecta ao OS X!
Lorem monkey 03/03
42

Isso está acontecendo porque você não possui o tipo de terminal do PuTTY definido corretamente ou porque o servidor não possui as definições de terminofunção corretas instaladas.

Nos sistemas baseados no Debian, o pacote ncurses-term (versão 5.7 + 20081213-1) inclui arquivos de definição terminfo para os tipos de terminal putty , putty-256color e putty-vt100 . Se você tiver este pacote instalado, poderá definir a "Cadeia de caracteres do tipo terminal" como "putty" em vez do "xterm" padrão na configuração da sessão do Putty (Conexão -> Dados).

Stephen Irons também menciona "linux" como outro tipo de terminal que funciona; Acredito que isso esteja correto com a experiência anterior, mas não o testei recentemente.

Nos meus sistemas, isso permite que o Início e o Fim funcionem corretamente, embora o PageUp / PageDown não role a janela do console. (Eles funcionam corretamente em aplicativos necessários, como o aptitude , e Shift-PgUp / Shift-PgDn rola a janela do console.)

charlatão quixote
fonte
Sim, usar TERM=puttyou TERM=putty-256coloré o mais sábio, embora, infelizmente, no momento o último pareça não funcionar corretamente nas cores 8 a 15 (que deveriam ser as versões brilhantes de 0 a 7). As outras "soluções" são muito prováveis ​​de descamarem às vezes causam desconsideração flagrante das diferenças entre os terminais envolvidos.
SamB 14/10
yum install ncurses-termresolvi para mim no CentOS 7 com massa no próximo login, obrigado.
Wandering Zombie,
1
configuração tipo de terminal para puttyobras mas quebra apoio rato xterm semelhante (por exemplo, para o comandante da meia-noite)
Anton
instalar 'ncurses-term' funcionou para mim nos testes do Debian.
hochl 8/08/16
nada disso funciona para mim, estou no putty conectando-se ao centos e não consigo executar o yum install ncurses-term porque não sou root.
Herman Toothrot 10/09/16
20

Se você deseja verificar qual código é enviado pelo PuTTY para o seu terminal quando você pressiona uma tecla ou uma combinação de teclas, basta emitir Ctrl+Vae pressionar a tecla desejada.

Por exemplo, na minha caixa, pressionar a tecla Home gerará a seguinte string no meu terminal:

^[[1~

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

Você pode criar um ~/.inputrcarquivo na sua $HOMEpasta ou, alternativamente, um /etc/inputrcarquivo, dependendo do seu sistema. Em seguida, preencha esse arquivo com os códigos PuTTY e as ações correspondentes do Bash que você deseja que sejam acionadas pelo Bash.

Nota: Substitua cada caractere ^ [ pela string \ e equivalente

No meu exemplo, adicionarei uma linha com o código da tecla Home e a ação de início de linha (à qual, por padrão, está vinculada Ctrl+Ano Bash):

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

Para sua informação, 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

Do @Cimbali: Comandos mais vinculáveis ​​(como o histórico anterior: mova `up 'pela lista do histórico) disponíveis nesta página de referência .

Damien Garrido
fonte
SIM ! Finalmente ! A string do tipo terminal de Putty não fez nada para a palavra anterior e a posterior. Isso é ótimo !
Cimbali
1
Esta é a única solução aceitável uma vez TERM=linuxou TERM=puttyquebrar apoio rato xterm semelhante. Obrigado!
Anton
14

Crtl + A leva você ao início da linha

Aqui está uma lista de atalhos de teclado do Bash

Iain
fonte
13
Isso é ótimo e tudo, mas o Home / End está conectado no meu cérebro, e como eu administro o servidor apenas uma vez na lua azul, as chances de desaprender o cabeamento rígido são pequenas.
RomanSt
9

Na verdade, o que ele está enviando ^[[1~é uma sequência de escape terminal que consiste em:

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

Você pode ver isso pressionando Ctrl+ e Vdepois Home.

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

A propósito, não há relação entre o til obtido quando você pressiona Homee o til que representa o diretório inicial. Por exemplo, na minha instalação, Page-Downproduz o ^[[6~que também imprimiria um til se não estivesse sendo interpretado corretamente.

Dennis Williamson
fonte
Obrigado! rxvt corrigiu a tecla Home; a tecla End agora produz um toque. PgUp / Down realmente digita ~, e nenhuma das configurações do teclado PuTTY os faz funcionar. Minha festança está bagunçada ou isso é "normal"?
RomanSt
O que você ganha quando digita echo $TERM?
Dennis Williamson
xterm(Limite de 15 caracteres argh)
RomanSt
3
Você pode tentar adicionar "\eOw": end-of-line(que é uma letra maiúscula O) ao seu ~/.inputrcarquivo.
Dennis Williamson
Chave final corrigida; Eu entendi a ideia. Realmente gostaria que hacks como este não fossem necessários ...
#
2

Nenhuma dessas opções funcionou para mim. Estou executando um sistema AIX antigo. Eu tive que adicionar o seguinte alias 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
Caminhão
fonte
não funciona para mim, vadio
Herman Toothrot
1

Não consegui fazê-lo funcionar com outros métodos. No entanto, eu criei esse script AutoHotkey que funciona, desde que seu shell seja o 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 cautela , pois nem todas essas teclas de atalho do bash funcionam em outros programas.

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