Existe uma maneira de pular para uma parte anterior de um comando de linha de comando no Mac Terminal?

9

Muitas vezes, me pego escrevendo comandos longos no shell bash - coisas com muitos argumentos, endereços da web, rotas, etc. De vez em quando, percebo que me esqueci de, digamos, colocar meu "bundle exec" no início do comando, ou com erros ortográficos, ou esqueci aspas. Ou algo tão simples quanto colocar "cd" em vez de "vim".

Assim começa o tedioso processo de segurar a tecla de seta esquerda até eu voltar ao início do comando.

Existe alguma maneira de pular para o início da linha novamente?

GlyphGryph
fonte
2
Você pode se livrar do aplicativo de terminal padrão e baixar o iTerm
Clement Herreman
Por quê? Acabei de verificar e parece se comportar da mesma forma. (A tecla home funciona agora, mas desde que eu tenho as outras chaves isso realmente não importa). O que ele oferece que valeria a pena refazer todas as minhas configurações, configurações e tarefas e outros enfeites?
GlyphGryph
Este parece ser algo que você pode configurar com .inputrc
Rob
Além disso, para pular uma palavra de cada vez, use ⌥B e ⌥F para pular para frente e para trás, respectivamente.
fideli
@ fideli, mas apenas se você tiver ativado a opção "Usar opção como meta-chave". Observe que, no Mac OS X Lion 10.7, as configurações de teclado padrão do Terminal mapeiam Opção-Seta esquerda / Seta direita para Esc-b / f, para que não seja necessária nenhuma configuração.
Chris Página

Respostas:

12

Além de ^ A e ^ E, você pode fazer

  • Esc- bpara voltar uma palavra
  • Esc- fpara avançar uma palavra
  • Ctrl- bpara retroceder um caractere
  • Ctrl- fpara avançar um caractere

Consulte o manual do bash para obter comandos para mover .

Glenn Jackman
fonte
Uma coisa a notar - isto é do Emacs e, adicionando a emacsopção aos seus shellopts, você pode obter um pouco mais disso.
TC1
6

Você pode usar os comandos do Emacs, por exemplo:

  • ctrl-A para ir para o início da linha de comando
  • ctrl-E para ir para o final da linha de comando

Isso é básico, não específico para Mac.

mouviciel
fonte
3
set -o vi

Então Escseguido por

^início da linha $fim da linha buma palavra backword wuma palavra

kizzx2
fonte
Eu sou um grande fã do Vim, então o princípio da sua resposta é ótimo para mim, mas a edição modal da linha de comando pode ser um pouco confusa para o OP, especialmente sem nenhuma menção de como voltar a digitar! Retorne ao modo de inserção usando i(inserir) para digitar antes do cursor ou a(anexar) para digitar após o cursor.
Cascabel 25/10
Uso o vi como meu principal editor de texto há décadas, mas ainda prefiro as ligações de teclas do emacs para o meu shell.
26411 Keith Thompson
Na verdade, o OP usa o vim para toda a edição de texto, portanto, saber que você pode definir os padrões do vi é incrivelmente útil. Muito obrigado!
GlyphGryph
@Kieth Thompson: Eu costumava pensar o mesmo. Eu apenas pensei que o shell não se mistura bem com esse tipo de mudança de modo (como a vchave irritante no modo vi). Mas depois de um vim enquanto eu só tenho infectado, então eu sugiro que você experimentá-lo: P
kizzx2
1

Isso não responde à sua pergunta, mas pode resolver seu problema em alguns casos.

bashNo !!token é substituído por seu comando anterior. Portanto, se você esquecer de adicionar algo ao início de um comando (como sudo), poderá fazer algo assim

# ./super_secret_command --with-args
=> ACCESS DENIED

# sudo !!
sudo ./super_secret_command --with-args
=> ACCESS GRANTED
Sam
fonte
0

Você pode configurar os Ctrl/Opt+Left/Rightatalhos regulares para uso no Terminal. Dessa forma, você não precisa reaprender tudo ao usar o Terminal.

Abra o Terminal »Preferências ...» Configurações »(selecione um perfil)» Teclado .

Lá, atribua os seguintes atalhos:

  • Control + Cursor Left: Enviar string \033[1~para shell
  • Control + Cursor Right: Enviar string \033[4~para shell
  • Option + Cursor Left: Enviar string \033[5Dpara shell
  • Option + Cursor Right: Enviar string \033[5Cpara shell

Também gosto do seguinte ( Fn + Left/Right):

  • Home: Enviar string \033[1~para shell
  • End: Enviar string \033[4~para shell

insira a descrição da imagem aqui

Daniel Beck
fonte
No Lion ⌥ ← e ⌥ → são vinculados a M-be M-fpor padrão. E ⌃ ← e ⌃ → são os atalhos padrão para mudar de espaço.
Lri 26/10/11
0

Eu precisava disso no Cygwin, não em um Mac, mas adicionar o seguinte para também ~/.inputrcpode ajudar:

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 
Tom
fonte
0

Eu não sou um usuário de Mac, mas e a Homechave? Isso funciona bem em um terminal Linux.

m0skit0
fonte
11
Não, isso rola para o topo da janela do terminal.
GlyphGryph
Por padrão, Início e Fim rolam a exibição, que é o comportamento padrão do Mac. Por padrão, Shift-Home e Shift-End enviam "ESC [H" e "ESC [F", respectivamente. Tudo isso é personalizável em Terminal> Preferências> Configurações> [perfil]> Teclado .
Chris Página
0

A melhor maneira de percorrer a linha de comando no Mac Os X é usar meu perfil: https://github.com/lingtalfi/mac-terminal-shortcuts

Ele fornece os seguintes atalhos (intuitivos):

ALT-left: move one word backward
ALT-right: move one word forward
CTRL-left: move to the beginning of the line
CTRL-right: move to the end of the line
ALT-backspace: kill one word backward
ALT-del: kill one word forward
ALT-up: set word after cursor to uppercase
ALT-down: set word after cursor to lowercase
home: move to the beginning of the line
end: move to the end of the line    
CTRL-backspace: Same as ALT-backspace
CTRL-del: Same as ALT-del
ling
fonte