Altere a cadeia do tipo Terminal na seção Conexão > Guia de dados do padrão "xterm" para "linux". Funcionou para mim.
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.)
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.)
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 .
O Crtl + A leva você ao início da linha
Aqui está um lista de atalhos de teclado Bash
O que ele está realmente enviando é ^[[1~
, que é uma sequência de escape terminal que consiste em:
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.
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
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.