Usando as teclas de seta ctrl com PuTTY e tela

33

Eu procurei e não consegui encontrar uma solução para isso em nenhum lugar. Estou usando o PuTTY do Windows para conectar-me a vários servidores nos quais executo o bash e a tela. Parece que o bash funciona bem com as teclas de seta com a tecla Ctrl para pular palavra a palavra na linha de comando, mas na tela não está funcionando. Fora da tela, a tecla Ctrl esquerda envia "^ [OC e a tecla Ctrl direita é" ^ [OD ". Na tela, em vez disso, recebo" ^ [[C "e" ^ [[D ", que parece ser o código apenas para as teclas de seta esquerda / direita.Existe alguma maneira de a tela reconhecer as teclas de seta ctrl ao usar o PuTTY? (FYI, não me lembro de ter esse problema ao usar o gnu-terminal no linux em vez do PuTTY).

ATUALIZAÇÃO: Parece que o PuTTY é o problema, pois não está enviando os códigos de escape necessários para que isso funcione. Estou desistindo por enquanto e usando Cygwin + mintty.

kbosak
fonte
Uau, o mintty é ótimo - há algum tempo procuramos um emulador de terminal decente para o Windows. Obrigado por isso.
blueyed
No entanto, estou acessando o^[[1;5A Ctrl-Up, que parece estar mais correto, de acordo com code.google.com/p/mintty/wiki/Keycodes#Cursor_keys
bloqueado

Respostas:

13

Editar:

Aqui está o que funcionou para mim:

  • Meus ~/.bashrcsets TERM=xterm(os meus são TERM=xterm-256colors) substituindo a telaTERM=screen
  • I definir PuTTY> Terminal> Características> Modo de teclas de cursor Aplicação Desactivar a verificada
  • Entro tput smkxno prompt do Bash
  • Agora, as teclas Ctrl-Seta saltam palavra por palavra

  • Para fins informativos, se eu fizer:
    tput smkx | hexdump -c
    recebo
    0000000 033 [ ? 1 h 033 =
    e
    tput rmkx | hexdump -c
    me dou
    0000000 033 [ ? 1 l 033 >

Eu acho que há uma maneira de refazer isso em algo um pouco melhor, mas é o que eu tenho até agora e parece funcionar.

Resposta original:

De info screen:

Cada janela em uma sessão `screen 'emula um terminal VT100, com algumas funções extras adicionadas. O emulador VT100 é codificado, nenhum outro tipo de terminal pode ser emulado.

E os VT100s não têm códigos de tecla Ctrl-Seta.

Pausado até novo aviso.
fonte
set -o vi(se você é aquele tipo de pessoa :)
MikeyB
1
@ MikeyB: Como isso ajuda (a propósito)?
Pausado até novo aviso.
Obrigado. Não é a resposta que eu esperava, mas agora posso seguir em frente e viver com essa limitação ou usar outra ligação de chave.
kbosak
1
@Dennis: Bem, isso lhe dá uma outra maneira de lidar com o avanço / retrocesso se você é o erro de digitação da pessoa que pode envolver sua cabeça em torno dele. set -o viativa o modo de linha de comando do vi para que você possa pressionar ESCe usar as teclas vi para mover e editar sua linha de comando.
MikeyB
1
@kbosak: Também não estou feliz com essa resposta. Por isso eu consertei . :-)
Pausado até novo aviso.
23

Como mencionado aqui , você pode colocar em ~ / .inputrc:

"\eOD": backward-word
"\eOC": forward-word

Funcionou para mim.

Fayer Michael
fonte
5
Isso funcionou para mim e foi muito mais fácil do que a resposta aceita.
Petrus Theron
Isso funcionou para mim também, enquanto a resposta aceita não o fez
Schiavini
+1 resposta sucinta que simplesmente funciona.
Adam Caviness
3
Certifique-se de ter $include /etc/inputrcna parte superior do .inputrcarquivo, caso contrário, a linha de leitura não lerá as ligações em todo o sistema e chaves como Home e End serão quebradas.
James
1
Esta deve ser a resposta aceita!
Shailen 22/03/19
4

Estou um pouco surpreso que você tenha Putty para enviar ctrl-arrowkeys corretamente, mesmo sem usar a tela, pois isso nunca funcionou para mim. Minha solução foi mudar para o uso de alt-arrowkeys (meta-arrowkeys), que acredito ter a mesma ligação de palavra direta / palavra anterior no bash por padrão, embora eu tenha que emitir alguns comandos extras para o zsh reconhecê-los:

bindkey "^ [^ [[C" forward-word # Meta-RightArrow
bindkey "^ [^ [[D" palavra inversa # Meta-EsquerdaArrow
Zed
fonte
Eu também posso seguir esse caminho. A tecla ctrl esquerda é muito mais fácil de pressionar do que as teclas meta ou alt (pelo menos no teclado). Ah bem.
kbosak
4

Caso outros encontrem essa pergunta antiga como eu, uma solução mais recente:

Ctrl e setas não funcionam com massa! O que eu faço?

putty inverte o sentido do modo da tecla cursor no ctrl, o que é um pouco difícil para o tmux detectar corretamente. Para acertar as teclas ctrl, altere as configurações de terminfo para que kUP5 (Ctrl-Up etc) sejam as versões ajustadas e desative smkx / rmkx para que o tmux não mude o modo. Por exemplo, com esta linha em .tmux.conf (assumindo que você tenha TERM definido como xterm):

configure -g substituições de terminal "xterm *: kLFT5 = \ eOD: kRIT5 = \ eOC: kUP5 = \ eOA: kDN5 = \ eOB: smkx @: rmkx @"

Observe que isso funcionará apenas no tmux 1.2 e acima.

http://stuff.mit.edu/afs/athena/project/bsd/src/tmux-1.3/FAQ

Collin Grady
fonte
0

Você deve consultar a documentação de terminfo, ncurses, screen e putty se desejar depurar / configurar corretamente. Também os atalhos do bash podem ser configurados com o inputrc. Olhe para as páginas de manual do bash e procure por inputrc.

Mircea Vutcovici
fonte
Eu não acho que o prob é o que está no inputrc. Eu já tentei várias soluções possíveis que envolviam colocar entradas no inputrc sem sucesso. Novamente, parece que o código incorreto está sendo enviado para a tela quanto às teclas de seta com a tecla Ctrl. Também não quero gastar muito mais tempo nisso do que já tenho, pois é apenas um pequeno inconveniente.
kbosak
0

Você tem a codificação de caracteres correta no Putty? Se você se conectar a um servidor em UTF-8 e sua massa estiver no charset padrão, no vim, as teclas de seta serão gravadas. Se o Putty estiver em UTF-8, você poderá mover o cursor. Talvez seja o mesmo no seu caso ...

Dom
fonte
Não é um problema do vi / vim e só vi uma opção no PuTTY para o conjunto de caracteres, o que não ajudou.
Kbosak
Experimente as diferentes opções em Terminal-> Teclado-> As teclas de função e o teclado. BTW, para mim, o Ctrl-Arrow também não funciona no bash, faz o mesmo que sem pressionar Ctrl.
Prof. Moriarty
Sim, eu tentei tantas opções e combinações de opções sem sorte. Para sua informação, existem algumas entradas que você pode colocar no inputrc para ajudar com as teclas de seta com a tecla Ctrl no bash, mas elas não ajudam ao usar a tela.
kbosak
0

Na sua configuração de massa em Terminal -> Recursos, existem algumas caixas de seleção "desativar". Convém tentar desativar as teclas do cursor do aplicativo ou o modo do teclado do aplicativo - às vezes, o putty tenta ser "muito inteligente" e envia caracteres de controle que não são compatíveis com o servidor.

tylerl
fonte
0

Estou usando o Terminal> Teclado> Teclas de Função> Xterm R6, que ajuda as teclas de função htop (pesquisa f4 etc.) a funcionar conforme o esperado.

O que eu descobri é que, em vez de usar CTRL + arrow, ALT + arrow salta palavras.

Dan
fonte