Como faço para que as teclas de seta com a tecla Ctrl se movam para frente / para trás uma palavra por vez no Cygwin bash?

97

Na instalação padrão do Cygwin, o uso de CTRL-LEFTARROW ou CTRL-RIGHTARROW simplesmente imprime 5C ou 5D em vez de pular uma palavra por vez, conforme o esperado.

As teclas Início / Fim funcionam corretamente, portanto é necessário remapear.

Tom
fonte
Observe que esta pergunta aborda o Cygwin, mas pode ter aplicação geral nos sistemas Unix / Linux. Se você estiver usando o PuTTY e descobrir que as soluções aqui não funcionam para você, consulte uma pergunta especificamente sobre quais códigos usar para o PuTTY .
palswim
Isso também aconteceu comigo sob um linux completo; em alguns conselhos online, adicionei um ~/.inputrcarquivo - que anulava todos os padrões do linux mint. Você pode recuperá-los adicionando $include /etc/inputrcao topo do seu ~ / .inputrc (assumindo que / etc / inputrc seja o seu inputrc de todo o sistema, que está no Linux Mint)
user208769

Respostas:

134

Encontrei uma solução , postando-a aqui para posteridade.

Adicione as seguintes linhas a ~/.inputrc( C:\cygwin\home\<username>\.inputrc):

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 

Quando terminar, você pode pressionar C-x C-rpara reler o .inputrcarquivo da sessão atual.

Pontos a serem observados se você quiser outras personalizações semelhantes: Use 5Ae 5Bpara as setas para cima e para baixo, e 2xpara versões deslocadas.

Os mapeamentos de teclas "oficiais" são descritos no Manual de Referência do Bash , mas para uma maneira rápida de encontrar um mapeamento de teclas, no bash:

  1. tipo Ctrl+V
  2. digite a sequência de teclas em que está interessado (por exemplo, Alt+ ). Isso imprimiria^[[1;3C
  3. remova a guia ^[e substitua-a por \epara\e[1;3C
  4. coloque esse valor no seu .inputrcarquivo.
Tom
fonte
Alguns códigos de teclado não são exibidos como <kbd> Shift </kbd> + <kbd> Enter </kbd>. Como encontro esses códigos de teclado no Mintty / Windows / Cygwin?
CMCDragonkai
14

Você pode recarregar o arquivo .inputrc via:

bind -f ~/.inputrc

Fonte

Kdt
fonte
2
Isso é útil, mas não é realmente uma resposta para a pergunta - talvez seja melhor como comentário para outra resposta?
Martin Thompson
Adicionado à resposta de @ Tom acima
dovetalk
7

Caso você queira algo que funcione sem configurações de ambiente personalizadas, por exemplo, ao trabalhar em uma conta compartilhada em um servidor ou apenas para limitar a quantidade de configuração personalizada em uso, o Bash tem built-ins para isso que funcionam no Cygwin.

Ou seja, Alt+ fpara avançar e Alt+ bpara retroceder.

http://www.gnu.org/software/bash/manual/html_node/Commands-For-Moving.html

Costa
fonte
4
Obrigado, embora eu esteja ciente dessas chaves e as use. Também uso as teclas de seta quando é conveniente e não quero que vomitem códigos de escape em vez de fazer a coisa sã e mover o cursor.
Tom
0

Ao usar o rxvt com o cygwin, encontrei a solução neste link que funcionou para mim: control_arrow_keys_in_rxvt .

Adicione as seguintes linhas a ~/.inputrc:

"\eOd": backward-word
"\eOc": forward-word
Peter Tran
fonte
É quando uma camada adicional está alterando as chaves transmitidas (mas não responde à pergunta).
Nikana Reklawyks
0

Esta solução também funciona em msys2consoles:

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 

Basta colocar essas combinações de teclas no .inputrcarquivo.

f0nzie
fonte