Como voltar ao primeiro caractere na linha de comando * nix?


17

Ao escrever um comando longo na linha de comando * nix e precisar voltar ao primeiro caractere, para adicionar algo no início (por exemplo nohup, a , quando você perceber que o processo será longo, ou a sudo, quando você perceber que você precisa de permissões de root) pode levar muito tempo para o cursor voltar ao primeiro caractere ...

Existe um atalho que permita que você pule direto para lá?

Estou usando um mac, então Homenão é uma opção


2
Se você estiver em um laptop Apple, Fn + Esquerda / Direita são equivalentes a Casa / Fim. (E relativamente, Fn + Up / Down são PageUp / Down.)
duskwuff -inactive-

2
Para aqueles que estão lendo esta pergunta, isso está perguntando sobre o shell, mais especificamente a edição de linha de comando no shell. A resposta Ctrl-A anterior é bash (provavelmente) com a edição de estilo do Emacs, o padrão.
Rich Homolka

4
Uma alternativa, se você só precisa adicionar, sudoé digitar sudo !!. O !!é substituído pelo comando anterior.
Matthew Crumley

Respostas:


29

Ctrl+ADeveria trabalhar. Ctrl+Ecorresponde ao final da linha de comando.


1
Ótimo! Isso funciona perfeitamente também no mac!
Clami219

1
Isso também se aplica a muitos editores de código.
Jwosty

2
@ clami219: Na verdade, ele funciona na maioria dos contextos de texto no OSX. Ligações Emacs é uma coisa maravilhosa ...
tommyo

Obrigado, ele funciona no Linux também.
Gideon Babu

10

Isso depende do shell em questão.

Alguns shells (como AT&T ksh88) praticamente não oferecem edição de linha de entrada.

Nos shells que implementam a viedição do modo (talvez seja necessário habilitar isso set -o vi), isso é feito pressionando Esc(para alternar do modo de inserção) seguido de 0para pular para o início da linha ou $para o final da linha. Em seguida, entre novamente no modo de inserção pressionando i- o cursor permanecerá onde está - ou a- o cursor se moverá um para a direita para adicionar texto.

vi A edição do modo foi recentemente ordenada pelo padrão POSIX.

A edição de modo muito mais comum emacs (graças aos deuses, não tem nada a ver com o sistema de edição-barra-operacional do Emacs) usa Ctrl-Apara pular para o início da linha e Ctrl-Epular para o final da linha. Este modo requer que você execute set -o emacsmuitos shells (principalmente o AT&T ksh93), mas é ativado por padrão no mksh e no GNU bash.

A maioria das conchas modernas suporta os modos emacse vi. (Ambos os modos exigem um tty para funcionar.)

Em muitos shells, você pode personalizar as combinações de teclas; geralmente para o emacsmodo, embora alguns shells também permitam personalizar a combinação de teclas para o vimodo. Se você tem uma chave à qual deseja vincular isso, primeiro precisa descobrir as sequências de teclas que ela produz (por exemplo, no meu sistema, Alt-CursorLeftproduz Esc+[+1+;+3+D( ^[[1;3D; ^Xé Ctrl-Xe ^[é Esc)), para que eu possa digitar algo como

bind '^[[1;3D=beginning-of-line'
bind '"\e[1;3D":beginning-of-line'

e terá essa combinação de teclas alterada, dependendo do shell. Geralmente, você pode persistir no arquivo de inicialização ( ~/.mkshrc, ~/.kshrc) ou, para o GNU bash, em ~/.inputrc. Observe que nem todos os shells suportam bindind todas as chaves em todas as versões.

Geralmente, você pode descobrir quais caracteres uma chave gera apenas executando catno shell, digitando a chave e assistindo. Depois pressione ^C( Ctrl-C) para abortar cat.


Eu gosto de usar ^ D, o caractere de linha final do Unix, para terminar o gato. Na minha opinião, é ^ D porque o fluxo de texto está "pronto".
Aaron Hall

@ AaronHall: isso não funcionará se já houver algo em jogo. Além disso, queremos abortar, não terminar ;-) Mas sim, no caso normal, você está certo. Mas este é um caso especial.
Mirabilos

O terminal também pode fazer edição de linha.
Samuel Edwin Ward

@mirabilos Para enviar um EOF sem uma nova linha, simplesmente faça ^ D ^ D (ou seja, pressione D duas vezes).
Potatoswatter

@ Potatoswatter sim (divertido, eu não sabia disso), mas quero especificamente abortar aqui. Ao enviar ^D^D, ainda recebo "o lixo" ecoado ...
mirabilos

2

Você já tentou a tecla Home? Eu uso o MobXterm para conectar ao linux box e uso as teclas Home e End do teclado para ir para o primeiro ou o último caractere do comando.


Você está certo! Eu tive que especificar que eu estou usando um Mac ...
clami219

2

Se você mudou para o vimodo, usando set -o vi, você pode pressionar Esce Iou Apara inserir texto no início ou no final da linha. Ou se você está apenas olhando para mover o cursor, é ^e $.


vi modo de qual shell?
David Richerby

2

No modo emacs (alternado por:) set -o emacsé pressionando:

  • Ctrl+A e Ctrl+E
  • Home e End
  • Esc+b e Esc+f (move o cursor para trás e para frente da palavra atual)

No modo vi (alternado por:) set -o viquando no modo de comando (Esc ) é pressionando:

  • 0/^ e $(permanecerá no modo de comando)
  • I e A (mudará para o modo de edição)

Veja também:

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.