Como mover o cursor palavra por palavra no OS X Terminal


762

Eu conheço a combinação Ctrl+ Apara pular para o início do comando atual e Ctrl+ Epara pular para o final.

Mas existe alguma maneira de pular palavra por palavra, como Alt+ ←/ →nos aplicativos de cacau faz?


2
Qual shell você está usando? Bater?
— Sargun Dhillon 17/09/08

4
O iTerm2 é muito melhor do que o terminal embutido. Eu postei instruções abaixo sobre como personalizar o teclado :)
— CWD

21
Os ALTatalhos foram adicionados ao Terminal na versão mais recente do OS X.
— Mosty Mostacho

7
Na minha opinião, isso não está fora de tópico, o Bash shell é um ambiente de programação relevante e as ligações de linha de leitura são difundidas nos aplicativos Linux CLI mais populares. Além disso, observe o número de votos, a comunidade falou.
— GL2014

11
Reabra a votação, o OS X Terminal conta muito como uma ferramenta de programação.
— 27416 djechlin

Respostas:


567

Fora da caixa, você pode usar o Esc+ bastante bizarro Fpara ir para o início da próxima palavra e Esc+ Bpara ir para o início da palavra atual.


47
Era inconveniente pressionar novamente as duas teclas para executar novamente o comando. Eu acho muito ruim fazer isso no Mac OSX Terminal, compare com o GNOME Terminal.
— Phương Nguyễn

245
Você pode ativar "Use Option como meta key" em Terminal> Preferências> Configurações> [perfil]> Teclado . Então você não precisa digitar manualmente o Esc separadamente.
— Chris Página

7
Além disso, se você pressionar Esc+ Fquando no final de uma linha ou a outra combinação de teclas no início da linha, ela apenas inserirá a letra. Irritante!
— Noldorin

10
Re “bizarro”: Os “F” e “B” significam “Avançar” e “Voltar”. Control-F move o cursor para frente Um caractere e Control-B move o cursor para trás um. Usar o modificador Meta (ou ESC) significa "mover por palavras". Essas são ligações compatíveis com o emacs. Se você estiver usando o bash, há uma opção para usar ligações compatíveis com vi, ou você pode personalizá-las totalmente com ~/.inputrc.
— Chris Page

5
Infelizmente, o uso da opção como meta não é uma opção para aqueles que precisam da tecla de opção para digitar símbolos importantes do shell, como ~ e | (como em um teclado francês).
— Eric O Lebigot

417

No Mac OS X - os seguintes atalhos de teclado funcionam por padrão. Observe que você precisa fazer com que a tecla Option atue como meta nas preferências do terminal (na guia teclado)

  • alt (⌥)+ Fpara pular F com uma palavra
  • alt (⌥)+ Bpara pular B desajeitado por uma palavra

Eu observei que as combinações de teclas padrão do emacs para navegação simples por texto parecem funcionar em shells bash. Você pode usar

  • alt (⌥)+ Dpara excluir uma palavra começando na posição atual do cursor
  • ctrl+ Apara pular para o início da linha
  • ctrl+ Epara pular para o final da linha
  • ctrl+ Kpara eliminar a linha a partir da posição do cursor
  • ctrl+ Ypara colar texto do buffer de interrupção
  • ctrl+ Rpara reverter a pesquisa de comandos digitados no passado a partir do seu histórico
  • ctrl+ Spara encaminhar a pesquisa (funciona no zsh para mim, mas não no bash)
  • ctrl+ Fpara avançar com um caractere
  • ctrl+ Bpara retroceder um caractere
  • ctrl+ Wpara remover a palavra para trás da posição do cursor

1
Obrigado! Fiquei me perguntando por que não funcionou imediatamente, era exatamente isso que eu precisava.
— Flov 20/08/11

11
Você pode alterar a meta no iterm2 da seguinte maneira: Preferências -> Perfis -> Teclas -> Tecla de opção esquerda atua como +ESC, então você pode usar a OPÇÃO f / b para mover a palavra para frente e para trás de acordo. Mais
— Alan Dong

5
[ Ctrl + W ] - para remover a palavra para trás a partir da posição do cursor
— YemSalat

[ctrl + u] - para excluir a entrada inteira #
— Cornelius

286

Veja como você pode fazer isso

Por padrão, o Terminal possui estes atalhos para mover (esquerda e direita) palavra por palavra:

  • esc+ B(esquerda)
  • esc+ F(direita)

Você pode configurar alt+ ←e →gerar essas sequências para você:

  • Abra as preferências do Terminal ( cmd+ ,);
  • Na guia Configurações, selecione Teclado e clique duas vezes, ⌥ ←se houver, ou adicione-o, se não estiver.
  • Defina o modificador conforme desejado e digite a tecla de atalho na caixa: esc+ B, gerando o texto \033b(você não pode digitar esse texto manualmente).
  • Repita para a palavra direita ( esc+ Fse torna \033f)

Como alternativa, você pode consultar esta postagem do blog em textmate:

http://blog.macromates.com/2006/word-movement-in-terminal/


7
Para usuários do MacOSX 10+ e iTerm: você atribui o atalho de teclas nas preferências globais ou como uma combinação de teclas de perfil. Certifique-se de que você selecione: "Enviar Seqüência de Escape" no menu suspenso selecionar e entrada apenas Bpara trás ou Fpara a frente para o Esc+campo
— Gus

+1 para um ótimo mnemônico no qual não pensei antes. Definitivamente vou / infelizmente não lembrar disso agora, porque eu configurado alt lefte alt rightpara gerar essas sequências
— Arc676

Se eu adicionar o Mapeamento de Chaves ao Terminal, ele o vincula a '^ [B' em vez de Esc-B.
— Andrea Bergonzo

164

Mude para o iTerm2 . É gratuito e muito melhor do que o terminal antigo comum. Também possui muito mais opções de personalização, como atalhos de teclado.

Também adoro o fato de você poder usar o cmd1-9 para alternar entre as guias. Experimente e você nunca voltará ao terminal normal :)

Como configurar preferências de teclado personalizadas no iterm2

  • Instale o iTerm2
  • Inicie e vá para o painel de preferências.
  • Escolha a guia perfis do teclado
  • Você precisará copiar o perfil para algo novo e excluir os atalhos das teclas de seta, como ^+ Right/ Leftou, se você não se importa com um backup, exclua-os do perfil padrão.
  • Em seguida, verifique se seu perfil modificado está selecionado (com estrela)

Figura 1.png

  • Agora escolha a guia do teclado (linha superior)

iTerm 2

  • Clique no botão de adição para adicionar um novo atalho de teclado
  • Na primeira caixa, digite CMD+Left arrow
  • Na segunda caixa, escolha "enviar código de escape"
  • Na terceira caixa, digite a letra B

Figura 2.png

  • Repita com as combinações de teclas desejadas. escape+ Bmove uma palavra para a esquerda, escape+ fmove uma palavra para a direita.
  • você também pode configurar cmd+ dpara excluir a palavra na frente do cursor com escape+d

Costumo pressionar o botão errado ( cmd/ control/ alt) com uma tecla de seta e, portanto, tenho minhas combinações de teclas de seta com esses botões configurados para pular para frente e para trás, mas faça o que melhor lhe convier.


4
Não importa o que eu faço, eu não posso entrar Ctrl + Arrow Leftou Right- Upe Downfunciona: / tentei com e sem o novo conjunto de perfis como padrão
— Tobi

4
Solução: Eu tive que desativar os atalhos de controle de missão em Preferências MacOS Sistema -> Teclado :)
— Tobi

A instrução acima não funciona mais com o iTerm2. Por favor, veja minhas respostas abaixo para o iTerm2 Build 3.3.4.
— Pendure

150

Na verdade, existe uma abordagem muito melhor. Mantenha pressionado option( altem alguns teclados) e pressione as teclas de seta para a esquerda ou direita para mover por palavra. Simples assim.

option←
option→

Também ctrleo levará ao final da linha e ctrlao levará ao início.


2
Às vezes, isso não funciona em certos casos. Para mim, quando abri o Terminal.app, estava tudo bem, mas para o IntelliJ, apenas imprimi [De [C. Para corrigir isso, adicione bind '"[D": backward-word'e bind '"[C": forward-word'ao meu .bashrc.
— Jamie Counsell

@JamieCounsell adicionei coisa de ligação à minha, .bashrcmas não funcionou, algo de errado para mim? (Eu uso RubyMine)
— #

@ 张艳军 Não sei se o RubyMine lê .bashrcquando o terminal é inicializado. Experimente echo "here"e veja se essa mensagem é exibida quando você abre um novo terminal. Além disso, você deve fechar e reabrir o terminal ou executar source ~/.bashrcpara que ele leia o novo arquivo.
— Jamie Counsell

79

Tenho Alt+ ←/ →trabalhando: abra Preferências »Configurações» Teclado , defina a entrada para o cursor da opção à esquerda para enviar a string para o shell: \ 033b e defina a opção cursor para a direita para enviar a string para o shell: \ 033f . Você também pode usar isso para outras combinações de teclas de controle.


20
Para obter o \ 033b, você realmente precisa pressionar Esc e, em seguida, b.
— Matthew Schinckel

7
Estou no Snow Leopard e acho que só funciona quando você habilita Enable option as meta key. A propósito, é muito legal. A chave é a certeza de ser muito mais conveniente para ser alcançado comparar com Esc + B ou Esc + F
— Phương Nguyễn

2
Por curiosidade, o que exatamente está acontecendo aqui? Por que esse código é diferente para começar no OSX? Como posso encontrar outros códigos desse tipo?
— 31511 Koobz

no meu mac suas Preferências> Perfis> Chaves esquerda tecla de opção como + EFC
— Arun

38

Na verdade, depende de qual shell você usa, no entanto, a maioria das conchas tem ligações semelhantes. As ligações às quais você está se referindo (por exemplo, Ctrl+ Ae Ctrl+ E) são ligações que você encontrará em muitos outros programas e são usadas há muito tempo; o BTW também funciona na maioria dos aplicativos de interface do usuário.

Aqui está uma olhada nas ligações padrão do Bash:

Atalhos de teclado Bash mais importantes

Observe também que você pode personalizá-los. Você precisa criar um arquivo com o nome que desejar, nomeei meu .bash_key_bindings e coloquei no meu diretório pessoal. Lá, você pode definir algumas opções gerais do bash e também as ligações de teclas. Para garantir que eles sejam aplicados, você precisa modificar um arquivo chamado ".bashrc" que o bash lê durante a inicialização (você deve criá-lo, se ele não existir) e fazer a seguinte chamada:

bind -f ~/.bash_key_bindings

~ significa o diretório home no bash, como mencionado acima, você pode nomear o arquivo como quiser e também colocá-lo onde quiser, desde que alimente o caminho certo + nome para vincular.

Deixe-me mostrar alguns trechos do meu arquivo .bash_key_bindings:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

Eles apenas definem algumas opções (por exemplo, desativar a campainha; isso pode ser consultado na página do bash).

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

Isso garante que os caracteres sozinhos não façam nada além de garantir que o caractere seja "digitado" (eles se inserem no shell).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

Isso é bem interessante. Se eu pressionar Ctrl+ Dsozinho (selecionei d para excluir), nada acontece. Mas se eu digitar uma letra minúscula w, a palavra à esquerda do cursor será excluída. Se eu digitar uma letra maiúscula, no entanto, a palavra à direita do cursor é eliminada. O mesmo vale para L e L em relação a toda a linha, começando pelo cursor. Se eu digitar um "a", toda a linha será realmente excluída (tudo antes e depois do cursor).

Coloquei pulando uma palavra para frente em Ctrl+ Fe uma palavra para trás em Ctrl+B

"\C-f": forward-word
"\C-b": backward-word

Como você pode ver, você pode criar um atalho, que leva a uma ação imediatamente, ou você pode criar um, que apenas inicia uma sequência de caracteres e é necessário digitar um (ou mais) caracteres para fazer com que uma ação ocorra como mostrado no exemplo mais acima.

Portanto, se você não estiver satisfeito com as ligações padrão, sinta-se à vontade para personalizá-las conforme desejar. Aqui está um link para o manual do bash para obter mais informações.


como está o commandcódigo da chave? No seu exemplo, controlé \C, mas como é command?
— Paschalis

Basicamente eu quero para mapear Ctrl + A para CMD + esquerda (vá para o início da linha)
— Paschalis

1
@ Paschalis No MacOS X, a tecla de comando é mapeada para Metabash ( \M), cmd + left \M-\e[D. No entanto, você não pode mapear o cmd + ... para nada, todos os atalhos de comando são manipulados (e, portanto, engolidos) pelo próprio aplicativo Terminal (eles nunca são encaminhados para o shell) e o cmd + deixou os mapas na "janela anterior" se você tiver vários janelas do terminal abertas. Desculpe, mas não é possível com o aplicativo Terminal.
— Mecki

18

Use a predefinição de edição de texto natural !

insira a descrição da imagem aqui

Essencialmente, ele liga, entre outras seqüências de teclas, Option + LeftArrow à ^[bsequência e Option + RightArrow a^[f

Isso funciona em fish e bash, assim como no terminal psql.


Essa é a maneira mais eficiente de definir um bom mapeamento antigo para chaves. Obrigado!
— fedesismo

Caso alguém fique confuso como eu, observe que essa predefinição está disponível apenas na subguia Chaves do perfil , não na guia Chaves de nível superior .
— ben-albrecht

15

Se você for um usuário do Vim, tente o modo vim do bash. Execute isso ou coloque-o no seu ~/.bashrcarquivo:

set -o vi

Por padrão, você está no modo de inserção; pressione escape e você poderá se movimentar da mesma maneira que no Vim de modo normal; portanto, o movimento por palavra é wou b, e as teclas de movimento habituais também funcionam .


15

Se você marcar Use option as meta keya guia teclado das preferências, os comandos padrão do estilo emacs para palavra para frente e para trás e ⌥F( Alt+ F) e ⌥B( Alt+ B) respectivamente.

Eu recomendo ler From Bash to Z-Shell . Se você deseja aumentar suas proezas bash / zsh!


1
Sim, isso funciona. Mas o problema é quando eu quero digitar chaves ([] {} |) que estão na Opção-7, Opção-8 e Opção-9. As opções agora são meta, e acabam com Meta-7, Meta-8 ... Alguma idéia?
— 1013 Martin Martin Wickman

12

A partir do Mac OS X Lion 10.7, o Terminal mapeia Option- Left/Right Arrowpor Esc- b/fpor padrão, agora ele está embutido no bash e em outros programas que usam essas combinações de teclas compatíveis com o emacs.



8

No Bash, eles estão vinculados a Esc- Be Esc- F. O Bash possui muitos, muitos outros atalhos de teclado; dê uma olhada na saída de bind -ppara ver o que são.


4

Sob iterm2's Preferências> Perfil> Chaves , você clique no +abaixo mapeamentos chave e gravar um novo atalho. Para Ação , selecione Send Escape Sequencee digite bou fpara trás e para frente, respectivamente.

Quando tentei gravar um para ( Ctrl+ ←), notei no campo Atalho do teclado que a seta nunca apareceu. Acontece que eu tive que desativar os atalhos padrão do System Preferences> Keyboard> Shortcuts> Mission Control primeiro para fazer com que as coisas funcionassem, pois eles substituiriam os atalhos padrão do iterm2. Também deve ser verdadeiro para o aplicativo de terminal padrão.

Preferências do sistema do teclado


1

Nova resposta para usuários do iTerm2 Build 3.3.4:

Etapa 1: Preferências do sistema (macOS X)> Teclado> guia Atalhos> Selecionar Controle de missão (painel esquerdo)> Desmarque os atalhos marcados como "Mover para a esquerda em um espaço" e "Mover para a direita em um espaço"

Etapa 2: (iTerm2 Build 3.3.4) Preferências> Perfis> Selecionar * Padrão (painel esquerdo)> guia Teclas> Exclua as entradas "⌥->" e "⌥ <-"> Defina ambas as teclas "Left Option (⌥)": "e" Tecla de opção direita (⌥): "para Esc +

Sem mexer com perfis de shell, sem mexer com o terminal masOS inferior (padrão), sem Esc + F / B estranho, enxaguar e repetir sem sentido.

Negócio feito!!!

Aproveite esta dica, meus colegas PROGRAMADORES!


0

Conforme respondido anteriormente, você pode adicionar set -o visuas combinações ~/.bashrcpara usar vi/ vimteclas, ou pode adicionar a seguinte parte .bashrcpara mover com Ctrlas teclas de seta e de seta:

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

Para iniciar o efeito dessas linhas de código, source ~/.bashrcinicie uma nova sessão de terminal.

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.