Come tornare al primo carattere nella riga di comando * nix?


17

Quando si scrive un comando lungo nella riga di comando * nix e si deve tornare al primo carattere, al fine di aggiungere qualcosa all'inizio (ad esempio a nohup, quando si realizza che il processo sarà lungo, o a sudo, quando si ti rendi conto che hai bisogno dei permessi di root) può volerci molto tempo prima che il cursore torni al primo carattere ...

C'è una scorciatoia che ti permette di saltare direttamente lì?

Sto usando un mac, quindi Homenon è un'opzione


2
Se utilizzi un laptop Apple, Fn + Sinistra / Destra equivalgono a Casa / Fine. (E di conseguenza, Fn + Su / Giù sono Pagina su / Giù.)
duskwuff -inattivo-

2
Per coloro che leggono questa domanda, questo in effetti sta chiedendo informazioni sulla shell, in particolare sulla modifica della riga di comando nella shell. La risposta Ctrl-A prima è bash (molto probabilmente) con la modifica in stile Emacs, il valore predefinito.
Rich Homolka,

4
Un'alternativa se devi solo aggiungere sudoè digitare sudo !!. La !!viene sostituito con il comando precedente.
Matthew Crumley,

Risposte:


29

Ctrl+Adovrebbe funzionare. Ctrl+Ecorrisponde alla fine della riga di comando.


1
Grande! Funziona perfettamente anche su Mac!
clami219,

1
Questo vale anche per molti editor di codice.
Jwosty,

2
@ clami219: funziona effettivamente nella maggior parte dei contesti di testo in OSX. Gli attacchi Emacs sono una cosa meravigliosa ...
Tommy

Grazie, funziona anche su Linux.
Gideon Babu,

10

Questo dipende dalla shell in questione.

Alcune shell (come AT&T ksh88) non offrono praticamente alcuna modifica alla linea di input.

Nella vimodifica della modalità di implementazione delle shell (potrebbe essere necessario abilitarlo con set -o vi), questo viene fatto premendo Esc(per passare dalla modalità di inserimento) seguito da 0per saltare all'inizio della riga o $per saltare alla fine della riga. Quindi accedere nuovamente alla modalità di inserimento premendo i- il cursore rimarrà dove si trova - oppure a- il cursore si sposterà a destra per aggiungere testo.

vi la modifica della modalità è stata recentemente autorizzata dallo standard POSIX.

La modifica della modalità molto più comune emacs (grazie agli dei, non ha nulla a che fare con l'editor-slash-sistema operativo-Emacs) utilizza Ctrl-Aper saltare all'inizio della riga e Ctrl-Eper saltare alla fine della riga. Questa modalità richiede l'esecuzione set -o emacssu molte shell (soprattutto AT&T ksh93) ma è abilitata di default in mksh e GNU bash.

La maggior parte dei gusci moderni supportano sia emacse vimodalità. (Entrambe queste modalità richiedono un tty per funzionare.)

In molte shell, è possibile personalizzare le combinazioni di tasti; di solito per la emacsmodalità, anche se alcune shell consentono anche di personalizzare il keybinding per la vimodalità. Se hai una chiave a cui preferiresti avere questo limite, devi prima capire le sequenze di tasti che produce (ad esempio, sul mio sistema, Alt-CursorLeftproduce Esc+[+1+;+3+D( ^[[1;3D; ^Xè Ctrl-Xed ^[è Esc), quindi posso digitare qualcosa come

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

e questo legame verrà modificato, a seconda della shell. Di solito puoi persistere nel file di avvio ( ~/.mkshrc, ~/.kshrc) o, per GNU bash, in ~/.inputrc. Si noti che non tutte le shell supportano il binding di tutte le chiavi in ​​tutte le versioni.

Di solito puoi scoprire quali caratteri genera una chiave semplicemente eseguendo catsulla shell, digitando la chiave e guardando. Quindi premere ^C( Ctrl-C) per interrompere cat.


Mi piace usare ^ D, il carattere di fine linea di Unix, per terminare cat. Nella mia mente, è ^ D perché il flusso di testo è "fatto".
Aaron Hall,

@AaronHall: che non funzionerà se c'è già qualcosa sulla linea. Inoltre, vogliamo interromperlo, non terminarlo ;-) Ma sì, nel caso normale hai ragione. Ma questo è un caso speciale.
mirabilos,

Anche il terminale può eseguire l'editing di linea.
Samuel Edwin Ward,

@mirabilos Per inviare un EOF senza una nuova riga, è sufficiente fare ^ D ^ D (ovvero premere D due volte).
Potatoswatter

@Potatoswatter sì (divertente, non lo sapevo da solo), ma in particolare voglio abortire qui. Al momento dell'invio ^D^Dricevo ancora l'eco di "junk" ...
mirabilos

2

Hai provato la chiave Home? Uso MobXterm per connettermi a Linux box e uso sia il tasto Home che End sulla tastiera per passare al primo o all'ultimo carattere del comando.


Hai ragione! Ho dovuto specificare che sto usando un mac ...
clami219

2

Se sei passato alla vimodalità, usando set -o vi, puoi premere Esce o Io Aper inserire il testo all'inizio o alla fine della riga. O se stai solo cercando di spostare il cursore, è ^e $.


vi modalità di quale shell?
David Richerby,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.