Como pular palavras no terminal OS X?

11

Digamos que eu escrevi um longo comando no terminal do Mac OSX, por exemplo

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

e agora quero alterar a palavra Hello para Hi .

Para fazer isso, no momento preciso manter pressionada (ou manter pressionada) a tecla do teclado esquerda até que o "cursor" chegue ao final da palavra Hello e, em seguida, exclua-a. A técnica usual de 'manter pressionada' não funciona como na maioria dos outros aplicativos do OS X.

Existe uma maneira de pular uma palavra de cada vez (ou qualquer outra forma mais curta de colocar o cursor lá)?

    
por Yuval 17.04.2010 / 05:51

2 respostas

19

A edição da linha de comando é uma função do seu shell, não do Terminal . Provavelmente seu shell é bash e provavelmente seu estilo de edição de linha de comando está configurado para “emacs”.

Aqui estão algumas das combinações de teclas no estilo Emacs que você pode achar úteis:

  • C-a: beginning-of-line
  • C-e: end-of-line
  • M-f: forward-word
  • M-b: backward-word
  • C-d: delete-char
  • M-d: kill-word (exclua a próxima "palavra")
  • M-DEL: backward-kill-word

C- x significa Controle + x , então Ca é Controle + a .

M- x significa Meta + x , mas provavelmente não há tecla Meta no seu teclado. Então, em vez disso, você pode usar ESC x (ou seja, Escape e x ). Terminal tem uma configuração para enviar automaticamente ESC antes que as teclas sejam pressionadas com Opção pressionada. O uso desse recurso desativa o tratamento de caracteres estendidos que o Mac OS X geralmente fornece ao usar o modificador Opção. Então, se você usar poucos caracteres estendidos e quiser ter a Opção + x enviando ESC x , então você pode ative esta opção Terminal .

Existem muitas formas de mudar para "Olá" no seu exemplo:

  • Procurar por "Olá": C-r H e l o C-j (ou ESC)
    • No Emacs normal, você usaria RET ( Return ) para finalizar a pesquisa no local atual e retornar à edição. Mas em bash , as ligações padrão fazem com que RET (ou seja, C-m) sempre execute a linha atual, mesmo que uma pesquisa incremental esteja ativa. Então a parte C-j / ESC é um desvio do Emacs normal.
  • Salta para o começo da linha e avança: C-a M-f C-f (ou )
  • Salta para o começo da linha, depois move por palavras: C-a M-f M-f M-b
  • Use M-b muito (só é realmente viável se você mapear Opção para Meta).

Existem também várias maneiras de realizar o seu substituto desejado:

  • elimine a palavra e substitua-a: M-d H i
  • apague os caracteres e substitua-os: C-d C-d C -d C -d C-d I
  • passar de "H" e excluir o seguinte trabalho, substitua-o: C-f M-d i
  • passar de "H" e excluir os caracteres restantes, substitua-os: C-f C -d C -d C -d C-d i

Se você parasse no final da palavra (talvez via C-a M-f M-f), você poderia usar M-DEL H i.

Você pode fazer algo como bind -P | less para encontrar outras ligações interessantes. Consulte a seção readline da bash página do manual ( ou as partes readline das bash páginas de informação ) para detalhes.

    
por 17.04.2010 / 08:51
2

A ligação readline padrão para forward-word é Meta-F ( bash(1) página man, seção READLINE , sub-seção Comandos para mover ). Eu não tenho certeza do que o Meta traduz no OS X. Opção, talvez.

    
por 17.04.2010 / 05:58