Como obter controle + seta para a esquerda para voltar uma palavra no iTerm2?

114

Eu estava lendo o manual do Linux e notei que ele dizia que eu poderia usar control + left e control + right para avançar e retroceder as palavras no terminal durante a edição.

"Pressionar Ctrl mais a tecla de seta Esquerda ou Direita move-se para trás ou para frente uma palavra de cada vez, assim como pressionar Esc e, em seguida, B ou F."

No OS X control+lefte control+rightnormalmente controla espaços. Eu desativei aqueles. Também tentei usar o painel de preferências para definir os atalhos do teclado:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

No entanto, isso não funciona e causa este erro:

insira a descrição da imagem aqui

Além disso, se eu estiver no iTerm e usar alt+escapeB ou F, o personagem se moverá para frente e para trás. Isso estava acontecendo antes de qualquer uma das minhas alterações na configuração. Mas eu realmente gostaria de poder usar o controle + as teclas de seta.

cwd
fonte
Aliás, uma maneira mais parcimoniosa de conseguir isso pode ser simplesmente mapear command + left e command + right em vez de ctrl + left e ctrl + right. Não precisei desativar nada no sistema para fazer isso.
Doctor Mohawk

Respostas:

135

bater

Basta adicionar o seguinte a ~/.inputrc:

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

Veja esta postagem da Wiki arquivada para obter mais explicações. Se você deseja usar a alttecla para movimento palavra a palavra (como o comportamento padrão do OS X), use:

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

zsh

O zsh por padrão não usa a readlinebiblioteca e, portanto, não lê ~/.inputrc. Para obter a mesma funcionalidade, você pode adicionar o seguinte ao seu ~/.zshrc- isso novamente usaria a altchave:

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

Consulte esta documentação para obter mais informações sobre o editor de linha zsh embutido (zle).


Por que é isso? Você configurou seu perfil para usar os padrões do Xterm:

insira a descrição da imagem aqui

É por isso que você precisará "capturar" essa sequência e dizer readlineo que fazer.


Se o procedimento acima ainda não funcionar e você estiver usando o OS X 10.9 (Mavericks) ou mais, provavelmente precisará desativar os atalhos globais do Mission Control que impedem que as teclas de seta do Control + atinjam o iTerm, mesmo que o próprio Mission Control esteja desativado. Você pode fazer isso em Preferências do sistema → Teclado → Atalhos → Controle da missão :

prefs de teclado de controle de missão

slhck
fonte
4
Eu tento seguir as instruções para obter as teclas alt + esquerda e alt + direita funcionando. Adicionei as duas linhas ao meu arquivo .inputrc, mas a única coisa que acontece quando pressiono as teclas é que um "D" ou um "C" é impresso no shell. Estou usando o iTerm2 com o zsh shell. Alguma ideia?
Flo
1
@Flo Tente adicionar as linhas e bindkey -e, em vez disso , ao seu . O IIRC zsh não lê - ou pelo menos funciona para mim dessa maneira. bindkey '^[[1;9C' forward-wordbindkey '^[[1;9D' backward-word~/.zshrc.inputrc
slhck
2
Não está funcionando para mim com ctrl-left / right + bash, mas funciona bem se eu configurá-lo para alt-left / right.
Dalin
3
Adicionada uma edição sobre os atalhos do Controle da Missão, impedindo que tudo isso funcione da maneira mais irritantemente opaca. Espero que isso evite que alguém passe pela mesma coisa que acabei de fazer ...
rubyruy 22/01
12
Para OSX + zsh + iTerm2 + ctrl-esquerda / direita, use o seguinte:bindkey -e; bindkey '\e\e[C' forward-word; bindkey '\e\e[D' backward-word
Artur Bodera
45

Solução de trabalho para zsh. Simples, direto e pronto para uso.

  1. Vamos para: ⌘, Preferences → Profiles → Keys → Keyboard Behavior

  2. Predefinição de carga: Natural Text Editing

Carregar predefinição "Edição de texto natural"

Torturador feliz
fonte
Obrigado @ Happy Torturer, acredito que é a melhor resposta, principalmente porque não tenho esse problema simples no Terminal.app, por isso não quero modificar o bash / zsh, apenas quero trabalhar tudo como no Terminal.app.
galuszkak
Isso Isso isso. Muito obrigado por esta solução! Passei por esse processo enlouquecedor com cada Mac que recebo. Agora eu sei a maneira mais simples de fazer isso acontecer. Obrigado!
vernonk
8

Corrigi da seguinte maneira:

No menu superior; vamos para

Profiles 
-> Open profiles... 
-> Edit profiles... (button) 
-> Keys (tab) 
-> Load Preset... (dropdown) 
->  Choose "Natural text editing". Done! :-)
rassom
fonte
tudo o que tenho sob essa predefinição é "Factory Defaults"
MaylorTaylor 10/09/18
7

Eu usei uma abordagem diferente. Usando o BetterTouchTool , programei um atalho de teclado personalizado para o iTerm2. Quando pressiono alt-left no iTerm2, ele envia o atalho de teclado ctrl-left com a ação "Enviar atalho de teclado para aplicativo específico". A aplicação é iTerm2. Eu fiz o mesmo para alt-right mapeado para ctrl-right.

O efeito é que pressionar a tecla Alt-Esquerda ou Alt-Direita no iTerm envia uma tecla Ctrl-Esquerda ou Ctrl-Direita diretamente ao iTerm2, ignorando o atalho usual do sistema para mover uma área de trabalho para a esquerda ou direita. Assim, obtenho o comportamento típico do mac no iTerm2, em sessões de terminal local, mas também em sessões SSH remotas e posso usar o padrão ctrl-left / ctrl-right para mover para diferentes áreas de trabalho. Eu escrevi aqui:

http://www.callum-macdonald.com/2013/04/17/ctrl-left-and-ctrl-right-on-iterm2/

chmac
fonte
2
O BetterTouchTool não é de código aberto e pode muito bem estar fazendo coisas que você não gostaria. O cara diz que é um estudante, mas ele poderia muito bem ser uma agência de três letras.
revacute
7

Na verdade, achei que a solução mais fácil era acessar as configurações do meu perfil (encontradas em Perfis / Chaves), removendo os atalhos de perfil ofensivos (como o perfil substitui o global no iTerm), no meu caso, alt + left e alt + right e, em seguida, o global atalhos funcionaram perfeitamente para mim!

Além disso, se você estiver usando o OS X, provavelmente é melhor usar os atalhos de todo o sistema, ou seja, usar as teclas alt + left e alt + right para esse fim, ter comportamentos diferentes no terminal provavelmente causará uma dor.

Além da solução da chmac de usar o Better Touch Tool, era uma maneira elegante de alterar o comportamento do controle + seta apenas no iterm.

nayyarv
fonte
na verdade, esta é a melhor solução. É confuso como a maioria de nós vai para a Keysguia. Em vez disso, temos que ir para a Profilesguia -> Um perfil (por exemplo, padrão) -> teclas.
28540
Esta é definitivamente a solução mais segura e fácil.
revacuar 04/01
2

Esta postagem ensina esse e outros atalhos como ⌥ ← Excluir para excluir uma palavra:

http://elweb.co/making-iterm-2-work-with-normal-mac-osx-keyboard-shortcuts/

Seralto
fonte
Na verdade, isso não responde à pergunta, que é sobre o uso de <ctrl> <left>
DavidPostill
Tudo o que você precisa fazer é usar o atalho que atenda às suas necessidades. "<ctrl> <left>" ou o que você quiser.
Seralto 02/06
1
Portanto, cite as partes essenciais da resposta no (s) link (s) de referência, pois a resposta pode se tornar inválida se as páginas vinculadas forem alteradas.
DavidPostill
1

Você precisa ir para a Profilesguia e excluir o mapeamento para alt+ lefte alt+, rightpois por padrão ele gera alguns valores hexadecimais.

Sid
fonte
Isso fez por mim!
26516 Philip