iTerm 2: Como definir atalhos do teclado para ir para o início / fim da linha?

395

Eu posso ver que Ctrl+ left/ rightpula para o início / fim da linha. Como mudar isso paraCmd + left/ right arrow?

Para obter Alt+ left/ right arrowfuncionando corretamente para o salto de palavras, siga este artigo .

chris
fonte
11
Se você quer que os atalhos funcionem na VIM também, ver esta resposta: stackoverflow.com/a/9611698/991068
Razvan Grigore

Respostas:

735

Adicione no iTerm2 as seguintes teclas de atalho de perfil

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

Aqui está um visual para quem precisa

iTerm adiciona chave visual

Matthias
fonte
3
Você sabe qual é o código / sequência do Command + Delete? (limpar o prompt)
Steven Lu
10
Eu respondi meu primeiro comentário em outro lugar, basicamente o código hexadecimal 0x15 fornece Ctrl + U, o que limpa a linha. No entanto, estou encontrando 0x01 Ctrl + A para interferir no uso do Tmux. Portanto, pretendo mapeá-lo para a tecla Home (mesma funcionalidade que Fn + Esquerda em um teclado Mac).
Steven Lu
7
A sequência de escape para Início é [1 ~ e a sequência de escape para Fim é [4 ~
Steven Lu
3
Funciona como um encanto, incrível!
Juto 3/09/2013
25
A ligação correta é ⌘← "SEND ESC SEQ" OHpara Início e ⌘→ "SEND ESC SEQ" OFpara Fim (são maiúsculas e minúsculas e não zeros). Isso simula realmente pressionando as teclas Home e End, e como tal vai funcionar no bash, vim, etc.
Timothy Zorn
433

Para pular entre as palavras e o início / fim das linhas no iTerm2, escolha uma das duas soluções abaixo.

1. Solução simples (recomendada)

  1. Abrir Preferências
  2. Clique na guia "Perfil"
  3. Selecione um perfil na lista à esquerda (por exemplo, "Padrão") e clique na guia "Chaves"
  4. Clique na janela suspensa "Predefinições" e selecione "Edição de texto natural"

insira a descrição da imagem aqui


2. Mapear teclas manualmente (Avançado)

Se você não quiser usar a predefinição "Edição de texto natural" mencionada acima, poderá mapear as chaves necessárias manualmente:

  1. Abrir Preferências
  2. Clique na guia "Chaves"
  3. Clique no [+]ícone

Agora você pode adicionar os seguintes atalhos de teclado:

Mover o cursor uma palavra para a esquerda

  • Tecla de atalho: +
  • Ação: Enviar código hexadecimal
  • Código: 0x1b 0x62

insira a descrição da imagem aqui

Mover o cursor uma palavra para a direita

  • Combinação de teclado: +
  • Ação: Enviar código hexadecimal
  • Código: 0x1b 0x66

Mover o cursor para o início da linha

  • Combinação de teclado: +
  • Ação: Enviar código hexadecimal
  • Código: 0x01

Mover o cursor para o final da linha

  • Combinação de teclado: +
  • Ação: Enviar código hexadecimal
  • Código: 0x05

Excluir palavra

  • Combinação de teclado: +←Delete
  • Ação: Enviar código hexadecimal
  • Código: 0x1b 0x08

Excluir linha

  • Combinação de teclado: +←Delete
  • Ação: Enviar código hexadecimal
  • Código: 0x15

Desfazer

  • Combinação de teclado: +z
  • Ação: Enviar código hexadecimal
  • Código: 0x1f

Não se esqueça de remover as ligações anteriores :

  • Abra a guia "Perfis"
  • Clique na subguia "Chaves"
  • Remova os mapeamentos para combinações de teclas + e +
sqren
fonte
2
Isso funcionou bem para mim no iTerm2 e foi muito fácil de seguir, obrigado!
Natetronn 9/04
3
Apenas esclarecendo o que as ligações originais para ⌥ ← fazem? Eu vejo isso Says send Hex Codes: 0x1b 0x1b 0x5b 0x44. Seria bom saber caso as pessoas não quisessem remover isso.
Aug
5
Ir para o início e o fim da linha não funcionou para mim usando o zsh. Usando "Código Hex" "0x01" / "0x05", conforme sugerido pela resposta principal, funcionou para mim.
Virar
2
Ir para o início e o fim da linha também não funcionou para mim. A melhor resposta funcionou.
hisabimbola
3
O iTerm tem uma maneira de agrupá-los em uma predefinição que podemos carregar? Parece chato digitar manualmente, mas isso funcionou para mim e foi incrível. Graças a lto!
agosto
259

Vejo que já existem muitas respostas boas, mas isso deve fornecer a funcionalidade OSX nativa mais próxima possível em mais do que apenas seu shell. Eu verifiquei que isso funciona nas sessões ZSH, Bash, node, python -i, iex e irb / pry (usando rb-readline gem para readline, mas deve funcionar para todos).

Abra as preferências do iTerm + ,e navegue até a Profilesguia (a Keysguia pode ser usada, mas a adição de teclas ao seu perfil permite salvar o seu perfil e sincronizá-lo com vários computadores) e keyssubguia e digite o seguinte:

Exclua todos os caracteres à esquerda do cursor

+ ←DeleteEnviar códigos hexadecimais:

0x15Mais compatível, mas a funcionalidade às vezes é excluir a linha inteira, e não apenas os caracteres à esquerda do cursor. Eu pessoalmente uso isso e, em seguida, sobrescrito minha chave de ligação zsh para ^Uexcluir apenas as coisas à esquerda do cursor (veja abaixo).

ou

0x18 0x7fMenos compatível, não funciona no nó e não funciona no zsh por padrão; veja abaixo para corrigir o zsh (bash / irb / pry deve estar bom), executa a funcionalidade desejada quando funciona.

Exclua todos os caracteres à direita do cursor

+ fn+ ←Deleteou + Delete→Enviar códigos hexadecimais:0x0b

Exclua uma palavra à esquerda do cursor

+ ←DeleteEnviar códigos hexadecimais:

0x1b 0x08 Quebras no IEX do Elixir parecem funcionar bem em qualquer outro lugar

ou

0x17 Funciona em qualquer lugar, mas não para em quebras de palavras normais no IRB e, em vez disso, é excluído até que ele veja um espaço literal.

Excluir uma palavra à direita do cursor

+ fn←Deleteou + Delete→Enviar códigos hexadecimais:0x1b 0x64

Mova o cursor para a frente da linha

+ Enviar códigos hexadecimais:0x01

Mover o cursor para o final da linha

+ Enviar códigos hexadecimais:0x05

Mover o cursor uma palavra para a esquerda

+ Enviar códigos hexadecimais:0x1b 0x62

Mover o cursor uma palavra para a direita

+ Enviar códigos hexadecimais:0x1b 0x66

Desfazer

+ zEnviar códigos hexadecimais:0x1f

Refazer normalmente não está vinculado no bash, zsh ou readline, para que possamos defini-lo como um código hexadecimal não utilizado, que podemos corrigir no zsh

+ + Zou + yEnviar códigos hexadecimais:0x18 0x1f

Agora, como consertar qualquer um que não funcione

Para zsh, você pode configurar a ligação para o + ←Deletee + + Z/ + ainda não funcional yexecutando:

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

Não consigo encontrar uma solução para adicionar refazer no bash ou no readline, por isso, se alguém souber uma solução para qualquer um deles, comente abaixo e tentarei adicioná-los.

Para quem procura a tabela de pesquisa sobre como converter seqüências de teclas em hexadecimal, acho esta tabela muito útil.

Travis
fonte
2
Isso é realmente útil, faz muita diferença! Gostaria de ressaltar que algumas pessoas podem se confundir com a $parte da frente echo(basta removê-la?). Fora isso, é perfeito. Obrigado.
Edmundo 15/12
11
@Christophe Parece que a ligação de chave está como deveria estar. Você cometeu um erro ao adicionar os valores hexadecimais ou pressionar a tecla para que a palavra inversa esteja sendo substituída. Execute bindkey | grep "\^\[b"e isso informará se outra coisa a substituirá depois de configurada. Só deve retornar #=> "^[b" backward-word. Se ele estiver sendo substituído, você precisará descobrir onde está sendo substituído e removê-lo. Se isso não for possível, você pode executar echo 'bindkey "^[b" backward-word' >> ~/.zshrcesta será adicionada à última linha do seu .zshrc, em seguida, reiniciar iTerm e ele deve funcionar
Travis
2
@Christophe, verifique a keysguia nas preferências do iTerm para ver se também está mapeando + para alguma coisa. Se sim, remova-o. Você pode testar se bestá funcionando corretamente, pressionando rapidamente a tecla escliberação e, em seguida, pressionando b. Isso deve pular uma palavra para a esquerda. Como alternativa, você pode mapear + para hexadecimal 0x1b 0x42 ou 0x1b 0x5b 0x31 0x3b 0x35 0x44 . Eu verifiquei que ambos funcionam para mim. Eu realmente acho que você tem + sendo substituído em iTerm porém, quer no seu profile keysguia ou keysguia.
Travis
3
Surpreendente! Acabei de aprender sobre as ligações Desfazer e Refazer aqui.
ecbrodie
3
Fiz isso manualmente e pensei por que não consigo importar um perfil para fazer isso? Então eu criei o GabLeRoux / iterm2-macos-dynamic-profile com base nessas instruções. Ele funciona perfeitamente, graças 🍻
GabLeRoux
48

Siga o tutorial listado acima para configurar suas principais preferências no iterm2 .

  1. Crie uma nova tecla de atalho
  2. Escolha "Enviar sequência de escape" como a ação
  3. Em seguida, para definir cmd-left , no texto abaixo:
    • Digite [Hpara iniciar a linha
      OU
    • Digite [Fpara final da linha
Jaime Bellmyer
fonte
11
F jumpes apenas uma palavra dentro do meu iterm2
Matthias
11
ITerm => Preferências => Chaves
pfrank
Amo isso! as outras soluções não funcionaram para mim. Passei horas frustradas por não poder usar ctrl + ae ctrl + e no iterm2. Mas eu não queria desistir de peixe por isso. Isso funciona totalmente obrigado!
FLY
Outras soluções também não funcionaram para mim, mas esta funcionou.
Braham Snyder
42

No iTerm 3.0.12, você pode alternar para Natural Text Editingpredefinição:

insira a descrição da imagem aqui

iTerm → Preferências → Perfis → Teclas

Aviso Como é uma predefinição, ela pode substituir as teclas que você vinculou antes. Portanto, é melhor salvar suas associações de teclas atuais antes de aplicar uma predefinição.

Nik Kov
fonte
2
Você poderia elaborar mais sua resposta? Como, o que essa predefinição inclui e pode substituir?
Carles Alcolea
Obrigado pela resposta. Além disso, provavelmente é uma boa prática aplicar isso ao seu próprio perfil personalizado, para que você não esteja mexendo com os padrões e possa alternar o perfil como um "modo" de edição de texto natural
ago
29

Para uma referência rápida de quem deseja ir para o final da linha ou o início da linha no iTerm2, no link acima http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html observa que no iTerm2:

  • Ctrl+ A, pula para o início da linha, enquanto
  • Ctrl+ E, pula para o final da linha.
Ioannis Filippidis
fonte
Por que essa resposta não está no topo?
Gangadhar JANNU
11
@GangadharJannu: Concordo totalmente. Vai direto para a ans. Deve estar no topo.
Catbuilts
10

Usei a resposta do Travis e criei um perfil dinâmico que você pode importar com base em suas instruções.

GabLeRoux / iterm2-macos-dynamic-profile

As instruções estão no leia-me e é muito mais rápido importá-las do que adicioná-las todas manualmente. Fiz uma resposta conforme a solicitação de @ gooli, porque estava oculta em um comentário. Espero que gostem deste 🍻

GabLeRoux
fonte
2
Voltei aqui um ano depois e muito feliz em encontrar isso!
Elifiner 17/03/19
9

Apenas para ajudar alguém que está tendo o mesmo problema, mas usando especificamente o shell Zsh com o iTerm 2. Acontece que o Zsh não lê /etc/inputrccorretamente e, portanto, falha em entender as ligações de teclas que você configura através das preferências!

Para corrigir isso, você precisa adicionar algumas associações de teclas ao seu .zshrcarquivo, como:

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

Observe as barras invertidas no exemplo acima antes do "e", o artigo vinculado não as mostra, portanto, adicione-as ao seu .zshrcarquivo ao adicionar ligações.

Nerdwood
fonte
4

As ligações antigas do emacs ainda podem funcionar no terminal iterm2 e os x:

Preferências -> Perfis -> Chaves (subguia nos perfis)

  • Conjunto Left/Right option <kbd>⌥</kbd> key acts as +Esc(semelhante no terminal os x)

Isso deve permitir alt- fe alt- bmover palavras por palavras. (Ainda ctrl- ae ctrl- esempre funcionam como de costume)

Se definido como metaessas ligações antigas, funcionará enquanto algumas ligações iterm2 não estiverem disponíveis.

metade
fonte
2

Como explica aqui , você pode fazer isso com etapas simples:

Por padrão, os saltos de palavras (opção + → ou ←) e as exclusões de palavras (opção + backspace) não funcionam. Para habilitá-las, vá para "iTerm → Preferências → Perfis → Teclas → Carregar predefinição ... → Edição de texto natural → Boom! Head explode"

Islam.Ibrahim
fonte
2

As únicas coisas que funcionam para passar para o início e o fim da linha são

⌘← "SEND ESC SEQ" OH- para mover para o início da linha
⌘→ "SEND ESC SEQ" OF- para mover para o fim da linha

add787
fonte
1

bind -p mostrará uma lista de chaves com escape associadas no seu shell, que podem ajudar a fornecer mais idéias / termos de pesquisa.

Jose Alban
fonte
5
bind -psó funciona em shells Bourne (bash, sh) para zsh, csh tcsh, use bindkey.
Travis
0

Para mim, a seguinte combinação funcionou:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

Halil Özgür
fonte