Jak wrócić do pierwszego znaku w linii poleceń * nix?

17

Podczas pisania długiego polecenia w wierszu polecenia * nix i konieczności powrotu do pierwszego znaku, aby dodać coś na początku (na przykład a nohup, gdy zdasz sobie sprawę, że proces będzie długi, lub a sudo, gdy zdajesz sobie sprawę, że potrzebujesz uprawnień roota), powrót kursora do pierwszego znaku może zająć dużo czasu ...

Czy istnieje skrót, który pozwala skakać prosto tam?

Używam Maca, więc Homenie ma opcji

clami219
źródło
2
Jeśli korzystasz z laptopa Apple, Fn + lewy / prawy są równoważne Home / End. (I odpowiednio, Fn + góra / dół to PageUp / Down.)
duskwuff -inactive-
2
Dla tych, którzy czytają to pytanie, w rzeczywistości dotyczy to powłoki, a dokładniej edycji wiersza poleceń w powłoce. Odpowiedź Ctrl-A przedtem to bash (najprawdopodobniej) z domyślną edycją stylu Emacsa.
Rich Homolka
4
Alternatywą, jeśli musisz tylko dodać, sudojest wpisanie sudo !!. Zostanie !!zastąpione poprzednim poleceniem.
Matthew Crumley

Odpowiedzi:

29

Ctrl+Apowinno działać. Ctrl+Eodpowiada końcowi wiersza poleceń.

choroba
źródło
1
Świetny! Działa to doskonale również na Macu!
clami219
1
Dotyczy to również wielu edytorów kodu.
Jwosty
2
@ clami219: W rzeczywistości działa w większości kontekstów tekstowych w OSX. Wiązania Emacsa to wspaniała rzecz ...
tommyo
Dziękuję, działa również w systemie Linux.
Gideon Babu
10

To zależy od danej powłoki.

Niektóre powłoki (jak AT&T ksh88) praktycznie nie oferują edycji linii wejściowych.

W powłokach implementujących viedycję trybu (być może trzeba to włączyć za pomocą set -o vi), odbywa się to poprzez naciśnięcie Esc(aby przełączyć z trybu wstawiania), a następnie 0przeskoczenie na początek linii lub $skok na koniec linii. Następnie ponownie wejdź w tryb wstawiania, naciskając i- kursor pozostanie tam, gdzie jest - lub a- kursor przesunie się w prawo, aby dołączyć tekst.

vi Tryb edycji został ostatnio nakazany przez standard POSIX.

O wiele bardziej powszechny emacs tryb edycji (dzięki bogom, nie ma to nic wspólnego z edytorem-emulatorem-systemem operacyjnym Emacsa) wykorzystuje się Ctrl-Ado przeskakiwania na początek linii i Ctrl-Eprzeskakiwania do końca linii. Ten tryb wymaga działania set -o emacsna wielu powłokach (przede wszystkim AT&T ksh93), ale jest domyślnie włączony w mksh i GNU bash.

Większość nowoczesnych powłok obsługiwać zarówno emacsi vitrybów. (Oba te tryby wymagają tty do działania.)

W wielu powłokach można dostosowywać skróty klawiszowe; zwykle dla emacstrybu, chociaż niektóre powłoki pozwalają również dostosować przypisywanie klawiszy dla vitrybu. Jeśli masz klucz, do którego wolisz go przypisać, najpierw musisz dowiedzieć się, jakie sekwencje klawiszy produkuje (na przykład w moim systemie Alt-CursorLeftprodukuje Esc+[+1+;+3+D( ^[[1;3D; ^Xjest Ctrl-Xi ^[jest Esc), więc mogę wpisać coś w rodzaju

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

i zmieni to przypisanie klawiszy, w zależności od powłoki. Zazwyczaj można je zachować w pliku startowym ( ~/.mkshrc, ~/.kshrc) lub, w przypadku GNU bash, w ~/.inputrc. Zauważ, że nie wszystkie powłoki obsługują powiązanie wszystkich kluczy we wszystkich wersjach.

Zazwyczaj można dowiedzieć się, jakie znaki generuje klucz, po prostu uruchamiając catpowłokę, wpisując klucz i obserwując. Następnie naciśnij ^C( Ctrl-C), aby przerwać cat.

mirabilos
źródło
Lubię używać ^ D, uniksowego znaku końca linii, aby zakończyć cat. Moim zdaniem jest to ^ D, ponieważ strumień tekstu jest „gotowy”.
Aaron Hall
@AaronHall: to nie zadziała, jeśli już coś jest na linii. Poza tym chcemy to przerwać, a nie zakończyć ;-) Ale tak, w normalnym przypadku masz rację. Ale to jest szczególny przypadek.
mirabilos
Terminal może także edytować linie.
Samuel Edwin Ward
@mirabilos Aby wysłać EOF bez nowej linii, po prostu zrób ^ D ^ D (tj. naciśnij dwa razy D).
Potatoswatter
@Potatoswatter tak (fajnie, sam tego nie wiedziałem), ale szczególnie chcę tu przerwać. Podczas wysyłania ^D^Dwciąż
słyszę
2

Próbowałeś już klucza do domu? Korzystam z MobXterm, aby połączyć się z Linuksem i używam zarówno klawisza Home, jak i End na klawiaturze, aby przejść do pierwszego lub ostatniego znaku polecenia.

PIERWSZEŃSTWO
źródło
Masz rację! Musiałem sprecyzować, że używam komputera Mac ...
clami219
2

Jeśli przeszedłeś w vitryb, za pomocą set -o vi, możesz nacisnąć Esci albo Ialbo, Aaby wprowadzić tekst na początku lub na końcu linii. Lub jeśli chcesz tylko przesunąć kursor, to ^i $.

TankorSmash
źródło
tryb vi jakiej powłoki?
David Richerby
2

W trybie emacsa (przełączanym przez:) jest set -o emacsto poprzez naciśnięcie:

  • Ctrl+A i Ctrl+E
  • Home i End
  • Esc+bi Esc+f(przesuwa kursor do tyłu i do przodu bieżącego słowa)

W trybie vi (przełączanym przez set -o vi:) w trybie komend ( Esc), naciskając:

  • 0/ ^i $(pozostanie w trybie poleceń)
  • Ii A(przejdzie do trybu edycji)

Zobacz też:

kenorb
źródło