Como pular palavras no terminal OS X?

11

Digamos que escrevi um comando longo no terminal Mac OSX, ou seja,

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

e agora eu quero mudar a palavra Hellopara Hi.

Para fazer isso, agora eu tenho que continuar pressionando (ou pressionando) a tecla esquerda do teclado até que o "cursor" chegue ao final da palavra Helloe exclua-a. A técnica usual de 'opção de segurar' não funciona como na maioria dos outros aplicativos OS X.

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

Yuval
fonte

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á definido como "emacs".

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

  • Ca: beginning-of-line
  • Ce: end-of-line
  • Mf: forward-word
  • Mb: backward-word
  • CD: delete-char
  • Md: kill-word(exclua a próxima 'palavra')
  • M-DEL: backward-kill-word

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

M- x significa Meta+ x, mas provavelmente não existe uma tecla Meta no teclado. Então, em vez disso, você pode usar ESC x (ou seja, Escapeentão x). O terminal possui uma configuração para enviar automaticamente ESC antes das teclas pressionadas com Optionpressionado. O uso desse recurso desativa o manuseio estendido de caracteres que o Mac OS X geralmente fornece ao usar o modificador Option. Portanto, se você usar poucos caracteres estendidos e quiser Option+ xenviar ESC x , poderá ativar esta opção Terminal .

Existem várias maneiras de mudar para "Olá" no seu exemplo:

  • Procure por “Olá”: Cr H ello Cj (ou ESC)
    • No Emacs normal, você usaria RET ( Return) para finalizar a pesquisa no local atual e retornar à edição. Mas no bash , as ligações padrão fazem com que o RET (ou seja, Cm) sempre execute a linha atual, mesmo se uma pesquisa incremental estiver ativa. Portanto, a parte Cj / ESC é um desvio do Emacs normal.
  • Ir para o início da linha e avançar: Ca Mf Cf (ou )
  • Vá para o início da linha e mova-se por palavras: Ca Mf Mf Mb
  • Use muito Mb (apenas realmente possível se você mapear Option para Meta).

Existem também várias maneiras de realizar a substituição desejada:

  • exclua a palavra e substitua-a: Md H i
  • excluir caracteres e substituí-los: Cd Cd Cd Cd Cd H i
  • passe "H" e exclua o seguinte trabalho, substitua-o: Cf Md i
  • mova além de “H” e exclua os caracteres restantes, substitua-os: Cf Cd Cd Cd Cd i

Se você parou no final da palavra (talvez via Ca Mf Mf), você pode usar M-DEL H i.

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

Chris Johnsen
fonte
Ok, isso realmente não se refere à questão, mas como você coloca as palavras que parecem teclas do teclado?
Wuffers
1
@Senhor. Homem: Use <kbd>elementos. Um subconjunto de HTML é permitido na marcação aqui . A aparência se deve ao estilo local do site da tag (plano de fundo, cor da borda, estilo da borda, largura da borda etc.). Você pode revisar a marcação de origem da minha postagem ("visualizar fonte" nesta página ). Veja meta.stackexchange.com/questions/5527 mesmo que o estilo de fantasia é desativado em MSO: meta.stackexchange.com/questions/1939/#23571
Chris Johnsen
Não tenho certeza se isso é óbvio ou não, demorei um minuto para descobrir, mas estou em um MBP sem uma chave de meta e estou usando uma configuração padrão do Terminal. Para avançar e retroceder nas palavras, posso pressionar Esc e, em seguida, F, ou Esc e, em seguida, B. Só queria mencionar isso porque a maneira como foi explicada acima me fez tentar pressionar Esc + xe depois f ou b ...
Cwd
Existe uma maneira de alterar o ambiente ou o shell para que eu possa pressionar as teclas de seta ctrl ou fn + para corresponder ao meu IDE?
Codecowboy
1
Você também pode usar as ligações do vi adicionando set -o vino seu .bashrc! gnu.org/software/bash/manual/html_node/…
Will Munn
2

A ligação padrão da linha de leituraforward-word é Meta-F ( bash(1)página de manual , seção READLINE , comandos para mover a subseção). Não tenho certeza do que o Meta se traduz no OS X. Opção, talvez.

Ignacio Vazquez-Abrams
fonte
+1 - você está realmente certo. isso funciona no bash no OSX
Yuval