iTerm - recuar e avançar uma palavra

166

Seria possível configurar o iTerm 2 para retroceder e encaminhar uma palavra pelo texto atual na linha de comando usando um atalho de teclado?

sintagma
fonte
14
Isso realmente não responde à pergunta, mas é relevante: você pode + clicar em qualquer lugar da linha de comando para mover o cursor para lá.
David Winiecki
Downvoting por não aceitar a resposta correta
Pi-
@ Pi- Por que você acha que a resposta aceita não é a correta? 1. Apareceu quase 3 anos antes daquele com mais votos. 2. Apresenta uma solução que não funciona por padrão.
syntagma

Respostas:

48

Ctrl-[ bretrocede uma palavra. Você também pode usar Escem vez ou Ctrl-[, e fir para a frente.

Isso é Ctrl+ [release e depois bou f. Ou Esce bou f.

Mais informações podem ser encontradas nesta outra discussão no AskDifferent.

Volsk
fonte
3
Isso seria melhor se houvesse uma maneira de retornar muitas palavras rapidamente enquanto pressionava um botão, em vez de digitar uma sequência de teclas para cada palavra.
user1717828 28/02
O que é "Ctrl- ["?
Shihao Xu
Com "Ctrl- [", quero dizer pressionar as teclas "Ctrl" e "[" simultaneamente.
Volsk
326

Matar uma mosca com um canhão:

  • Vá para Preferências ... > Perfis > Chaves
  • Pressione Carregar predefinição ...
  • Selecione Edição de texto natural

Em seguida, você pode mover uma palavra para trás usando Option ⌥+ e uma palavra para frente usando Option ⌥+ , mover para o início da linha usando fn+ e para o final da linha com fn+ . Também é possível excluir uma palavra para trás usando Option ⌥+ , excluir toda a linha usando Command ⌘+ .

Se a predefinição não aparecer, reinstale o iTerm2. Se você o instalou usando o Homebrew + Cask:

brew cask reinstall iterm2
Ricardo Stuven
fonte
49
Esta deve ser a resposta aceita!
guyarad
3
Isso não funciona para mim. Parâmetros: iTerm2 3.1.2, macOS 10.12.6, teclado alemão. E eu não estou sozinho ...
t0r0X 29/10
2
Isso é ótimo e adicionará a maioria das suas necessidades. No entanto, ele não adiciona um 'ir para o início / fim da linha via CMD + seta esquerda / seta direita'. Para essa ação, consulte: stackoverflow.com/questions/6205157/…
MikeyN0
37
Minha vida mudou depois que eu vi essa resposta. Me divorciei da minha esposa, agora estou em um Lambo com uma supermodelo.
Dragos Rizescu 16/10
12
Observe que isso é Preferências> Perfis > Chaves> Carregar predefinições, não preferências> Chaves> Carregar preferências
kevin
148

Eu gosto da seguinte configuração.

  1. Preferências> Chaves (ou Preferências> Perfis> Chaves)
  2. Clique no sinal de mais.

avançar uma palavra

option+right
send escape sequence
f

retroceder uma palavra

option+left
send escape sequence
b

excluir para o início da palavra ( crédito )

option+delete
send hex code
0x1B 0x08

excluir para o final da palavra

fn+option+delete
send escape sequence
d

(Não me lembro com certeza, mas acho que copiei esta resposta da resposta de jherran abaixo e a acrescentei mais. Deveria ter acrescentado informações extras nos comentários ou sugerido edições nessa resposta. Não sei como melhorar a situação, mas agora é conhecida.)

David Winiecki
fonte
2
No MacOS 10.12, preciso usar o código hexadecimal 0x17 para excluir o início da palavra
midopa
funciona como um encanto com o MacOS 10,12 e zsh
Sébastien
1
melhor resposta sempre que você tomar uma cerveja de mim :)
infinity
1
Considere votar a resposta de jherran. Acho que melhorei um pouco a resposta e provavelmente deveria ter sugerido uma edição em vez de criar minha própria resposta. Eu meio que sinto que roubei.
precisa
Referenciei isso : para fazer o Esc-b, eu tive que enviar 0x1b 0x42e, para o Esc-f, eu tive que enviar 0x1b 0x46: D
Meredith
36

Para avançar (Alt-f), para trás (Alt-b) e excluir (Alt-d) Word

  1. Abra o iTerm.
  2. Vá para o iTerm> Preferências ...> Perfis> Chaves
  3. Em Teclas de atalho de perfil, clique no sinal +.
  4. Digite seu atalho de tecla (opção-b, opção-f, opção-d, opção-esquerda, etc.)
  5. Para Ação, escolha Enviar sequência de escape.
  6. Escreva b, d ou f no campo de entrada.

Isso funciona pelo menos para o bash. Para o zsh, existem outras maneiras de navegar.

jherran
fonte
2
Tentei adicionar uma opção + atalho à direita e recebi uma mensagem de aviso sobre um conflito, porque não percebi que você pode configurar as chaves em Preferências> Chaves> Teclas de atalho global e também Preferências> Perfis> Chaves> Teclas de atalho de perfil. Configurá-lo no perfil padrão funcionou.
David Winiecki
1
Também funciona para o zsh!
Andrii Abramov
2
Eu acho que sua resposta (para a mesma solução) foi a mais fácil de entender +1
nzaleski
1
Explicação muito útil.
Continua
Perfeito. Você também pode usar Command + F etc para que a tecla "Alt" esteja na mesma posição e nenhum ajuste seja necessário ao alternar entre PC e Mac.
friederbluemle
12

Semelhante a outras respostas, mas para o Zsh demorei um pouco para encontrar isso:

Se você estiver usando o Zsh, como o Oh My Zsh, no iTerm, vá para: Preferências> Perfis > Submenu Chaves

Clique no sinal de +

Adicione sua combinação de atalhos, escolha "Enviar seqüência de escape"

entradas para esquerda e direita abaixo.

esquerda:

[1;5D

direito:

[1;5C
bdanin
fonte
1
Você salvou minha vida
thibaut noah
Esta é a única solução que funcionou para mim
Bryji
Finalmente, uma solução simples que funciona: D Obrigado por compartilhar conosco!
Periback
Essa deve ser a resposta. Votado.
ehime 27/09
2

insira a descrição da imagem aqui

Abrir Preferências

Configure a tecla de opção esquerda (e / ou direita) para enviar o Esc +

Se você mexeu com suas predefinições, pode ser necessário carregar a predefinição (cuidado, isso pode apagar as teclas personalizadas!)

insira a descrição da imagem aqui

Se você vir caracteres estranhos depois de fazer isso, talvez seja necessário configurar seu ~ / .inputrc ou / etc / inputrc

Adicione isso ao seu ~ / .inputrc:

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

exemplo completo inputrc:

# /etc/inputrc - global inputrc for libreadline
# See readline(3readline) and `info rluserman' for more information.

# Be 8 bit clean.
set input-meta on
set output-meta on

# To allow the use of 8bit-characters like the german umlauts, uncomment
# the line below. However this makes the meta key not work as a meta key,
# which is annoying to those which don't need to type in 8-bit characters.

# set convert-meta off

# try to enable the application keypad when it is called.  Some systems
# need this to enable the arrow keys.
# set enable-keypad on

# see /usr/share/doc/bash/inputrc.arrows for other codes of arrow keys

# do not bell on tab-completion
# set bell-style none
# set bell-style visible

# some defaults / modifications for the emacs mode
$if mode=emacs

# allow the use of the Home/End keys
"\e[1~": beginning-of-line
"\e[4~": end-of-line

# allow the use of the Delete/Insert keys
"\e[3~": delete-char
"\e[2~": quoted-insert

# mappings for "page up" and "page down" to step to the beginning/end
# of the history
# "\e[5~": beginning-of-history
# "\e[6~": end-of-history

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

$if term=rxvt
"\e[7~": beginning-of-line
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word
$endif

# for non RH/Debian xterm, can't hurt for RH/Debian xterm
# "\eOH": beginning-of-line
# "\eOF": end-of-line

# for freebsd console
# "\e[H": beginning-of-line
# "\e[F": end-of-line

$endif
yosefrow
fonte
1
Perfeito ... tks.
paivaric
Sem problemas! Fico feliz que ajuda :)
yosefrow
2

Você pode configurar seu terminal no modo vi set -o vipara poder usar os comandos usuais do vi motion (adicione a linha .bash_profilepara armazenar a configuração permanentemente.)

Portanto, como se no vi, você pode pressionar Esc, bpara mover uma palavra para trás ( wpara frente), vá para o início da linha com 0ou pesquise um caractere para trás com F+ o caractere.

Pressione ipara voltar ao modo Normal e insira.

Quem conhece o vi pode fazer muito mais. Uma folha de dicas pode ser encontrada aqui .

sebnukem
fonte
2
O vim resolve tudo! : D
Breno Salgado
Bater Escem seguida, Iir apenas uma vez para o início da linha é um pouco menos conveniente do que Ctrl-a- neste caso de uso acontece muitas vezes quando você apenas deseja modificar o nome do comando. Então, eu uso o modo vi com algumas alterações de combinação de teclas no iTerm2 para mapear Ctrl-Ae semelhante à sequência de escape Esc+0. Dessa forma, esses casos são ainda mais rápidos, pois terminam no modo de edição.
rfabbri 06/08
-1

Com o iTerm2 3.1.4, consegui configurar o seguinte sem adicionar mapeamentos de teclas individuais.

  1. Vá para Preferências> Perfis> Chaves
  2. Esquerda / Direita ⌥ Tecla: Selecione Esc +

Com uma nova sessão do Terminal, agora você pode usar:

Option ⌥+ fpara avançar

Option ⌥+ bpara avançar

Option ⌥+ Delete ⌫para excluir o Word

Fate.AKong
fonte
2
Como isso difere da outra resposta altamente votada? apple.stackexchange.com/a/293988/237
user151019