Por que o Ctrl-Arrow não está funcionando no bash no OS X?


14

Eu uso Ctrl- e Ctrl- em todos os sistemas Linux em que trabalho, mas essas combinações de teclas não funcionam no bash no meu Macbook Pro. Ele está executando o Snow Leopard e estou usando o aplicativo Terminal incorporado.

As combinações de teclas não parecem ser capturadas por nada antes ou pelo Terminal, porque se eu fizer o ssh para um dos meus servidores Linux, posso usar Ctrl- / para pular para a palavra seguinte / anterior na linha de comando. No entanto, quando tento essa combinação de teclas no bash no meu Macbook, recebo "C" na seta para a direita e "D" na seta para a esquerda.

Alguma idéia de como posso obter essas chaves para trabalhar no darwin bash?


2
Se você estiver usando Espaços, Ctrl + seta por padrão alterna espaços.
Mark4o 31/10/10

Respostas:


13

O OS X usa a ligação de teclas emacs como padrão. Isso é verdade em praticamente todas as aplicações do OS X, é bastante agradável. Isso significa que coisas como Ca e Ce estão no início / fim da linha. Você também recebe a astuciosa matança de palavras inversas com M-backspace, oh, e a linha de matança com Ck.

Isso deve significar que no seu terminal a palavra para frente / trás está vinculada a Mf e Mb, respectivamente (M = Meta = alt / opção), no entanto, esse não é o caso. No OS X, a palavra forward / backword-word está vinculada a M- → e M- ← por padrão.

Você pode alterar esse comportamento alterando como a GNU Readline Library está configurada para sua conta. Isso ocorre no seu ~/.inputrcarquivo. Você pode obter uma grande lista de comandos vinculáveis man readline, bem como na documentação online como esta aqui. .

Então, para responder sua pergunta, você deseja remapear o que o Readline faz quando vê C- → e C- ← para fazer o que faz no seu servidor Linux.

A sintaxe para um ~/.inputrcarquivo é muito simples para o que você quer fazer: key-sequence: action.

Deve ser o que você precisa para obter o comportamento desejado:

"\e[5C": forward-word
"\e[5D": backward-word

Aqui está outra página com ligações adicionais úteis.

(Você provavelmente conseguiria copiar / etc / inputrc da sua caixa Linux para o seu OS X ~ / .inputrc)


Uma observação: Se você estiver usando muito o tmux com xterm-keys, também será necessário \e[1;5Ce \e[1;5Dtambém acionar forward-worde backward-word.
Arne

2
Outra observação: se ainda não estiver funcionando, pode ser por causa de um conflito de atalho com o Controle / Espaços da Missão. Preferências do Sistema -> Teclado -> Atalhos -> Mission Control, Mover para a esquerda / direita um espaço
bhh1988

Não entendo "O OS X usa a ligação de teclas emacs por padrão". "Ctrl-arrow" também é uma ligação de tecla emacs.
Greg

3

coloque as ~/.inputrcseguintes linhas:

"\e[5C": forward-word
"\e[5D": backward-word

0

Hoje em dia, parece que as seqüências de escape que Ctrl-Arrows emitem no terminal mudaram. Aqui está o que funciona para mim a partir de hoje (final de 2018):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Nota: você sempre pode descobrir as seqüências de escape reais digitando cat -vno Terminal e pressionando Ctrl-Seta para a esquerda ou Ctrl-Seta para a direita. Aqui está um exemplo de saída para minha própria seta Ctrl-Esquerda:

^[[1;5C ^[[1;5C

Para traduzir para o .inputrcjargão, substitua o sinal de escape ^[por \ee cole o resultado entre aspas duplas.


0

Como @ bhh1988 mencionado, a configuração do Controle da Missão impede que as teclas Ctrl funcionem com as teclas de seta bash. Como não queria interferir com esses atalhos, use a tecla Option (ou seja, Alt). Atualmente no Mojave, usando um teclado alemão (não sei se isso é relevante), coloquei o seguinte .inputrcpara usar Option-left-arrow e Option-right-arrow para mover entre as palavras.

"\e\e[C": forward-word
"\e\e[D": backward-word
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.