Por que Ctrl-Arrow não funciona no bash no OS X?

Por que Ctrl-Arrow não funciona no bash no OS X?

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 integrado.

As combinações de teclas não parecem ser capturadas por nada antes ou pelo Terminal, porque se eu fizer 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 apenas "C" para seta para a direita e "D" para seta para a esquerda.

Alguma idéia de como posso fazer com que essas chaves funcionem no Darwin Bash?

Responder1

OS X usa a ligação de teclas emacs como meu padrão. Isso é verdade em praticamente todos os aplicativos do OS X, é bastante bom. Isso significa que coisas como Ca e Ce estão no começo/fim da linha. Você também obtém a elegante eliminação de palavras invertidas com M-backspace, ah, e linha de eliminação com Ck.

Isso deve significar que em seu terminal as palavras forward/backward estão vinculadas a Mf e Mb, respectivamente (M = Meta = alt/option), mas esse não é o caso. No OS X, as palavras forward/backword estão vinculadas a M-→ e M-← por padrão.

Você pode alterar esse comportamento alterando a forma como a Biblioteca GNU Readline está configurada para sua conta. Isso ocorre no seu ~/.inputrcarquivo. Você pode obter uma grande lista de comandos vinculáveis, man readlinebem como na documentação on-line, comoisso 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 de um ~/.inputrcarquivo é bem simples para o que você deseja fazer: key-sequence: action.

Isto deve ser o que você precisa para obter o comportamento desejado:

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

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

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

Responder2

ATUALIZAÇÃO janeiro de 2020

Nas versões mais recentes do OSX, o shell padrão é zsh. Portanto, o encantamento mágico para fazer com que ctrl-arrowleft e ctrl-arrowright funcionem conforme o esperado é o seguinte:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(coloque em seu .zshrc)

Responder3

coloque nas ~/.inputrcseguintes linhas:

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

Responder4

Hoje em dia parece que as sequências de escape que Ctrl- Arrowsproduzem 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 sequências de escape reais digitando cat -vno Terminal e pressionando Ctrl- Left Arrowou Ctrl- Right Arrow. Aqui está um exemplo de saída para meu próprio Ctrl-Seta para a Esquerda:

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

Para traduzir para .inputrca linguagem, substitua o sinal de escape ^[por \ee coloque o resultado entre aspas duplas.

informação relacionada