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

118

As teclas Home, End, PageUp, PageDown, todos os tipos 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 diretório home , mas as respostas dizem que isso não é verdade.)

    
por RomanSt 11.01.2010 / 17:48

7 respostas

145

Altere a cadeia do tipo Terminal na seção Conexão > Guia de dados do padrão "xterm" para "linux". Funcionou para mim.

    
por 02.02.2010 / 23:54
42

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

Em sistemas baseados em Debian, o pacote ncurses-term (versão 5.7 + 20081213-1) inclui arquivos de definição terminfo para putty , putty-256color e tipos de terminal putty-vt100 . Se você tem 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; Acredito que isso esteja correto em relação à experiência anterior, mas não o testei 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 aptitude , e Shift-PgUp / Shift-PgDn rola a janela do console.)

    
por 03.02.2010 / 01:21
19

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

Por exemplo, na minha caixa, pressionando a tecla Home 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 arquivo ~/.inputrc na sua pasta $HOME ou, alternativamente, um arquivo /etc/inputrc 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.

Observação: substitua todos os caracteres ^ [ pela string equivalente \ e

No meu exemplo, adicionarei uma linha com meu código-chave Início e a ação início de linha (que por padrão é vinculada 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 a história anterior: Move-se para cima na lista de histórico) disponível nesta página de referência .

    
por 26.09.2014 / 23:59
14

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

Aqui está um lista de atalhos de teclado Bash

    
por 11.01.2010 / 18:02
9

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

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

Você pode ver que pressionando Ctrl + V então Início .

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

Aliás, não há relação entre o til que você obtém quando pressiona Home 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.

    
por 11.01.2010 / 17:58
2

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

alias __A=$(print '
alias __A=$(print '%pre%20') # ^P = up = previous command
alias __B=$(print '%pre%16') # ^N = down = next command
alias __C=$(print '%pre%06') # ^F = right = forward a character
alias __D=$(print '%pre%02') # ^B = left = back a character
20') # ^P = up = previous command alias __B=$(print '%pre%16') # ^N = down = next command alias __C=$(print '%pre%06') # ^F = right = forward a character alias __D=$(print '%pre%02') # ^B = left = back a character
    
por 22.01.2015 / 23:22
1

Eu não consegui trabalhar com outros métodos. No entanto, criei este script AutoHotkey que funciona, contanto 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 , pois nem todas essas teclas de atalho funcionam em outros programas.

    
por 01.04.2014 / 22:41

Tags