Dividere una riga di comando del prompt esistente in poche righe


8

Capisco di poter digitare \ enteralla fine di una bashriga di comando per continuare quel comando in un'altra riga. Ma come posso dividere una riga di comando rapida - che è già stata completamente digitata - in due?

Ad esempio, come posso interrompere questa riga prima di thendover tagliare il resto e digitarlo di nuovo?

$ if true; then ls; fi

1
Se ci si trova al prompt della riga di comando interattiva, c'è qualche motivo particolare per cui è necessario farlo oltre a rendere più bella la cronologia della shell? Funzionalmente, le newline extra non fanno differenza per la shell. Se stai digitando uno snippet di shell lungo e complesso, è meglio usare un editor. Guarda anche il fccomando: è disponibile in quasi tutte le shell.
jw013,

Non più bello, ma solo per rendere leggibili comandi complessi.
n.

Risposte:


4

Un personaggio newline è LF (avanzamento riga), noto anche come Control-J. Se si preme Ctrl+ J, questo esegue il comando accept-line, come il Returntasto. Per inserire un carattere letterale LF, premere Ctrl+ V Ctrl+ J. Il comando Ctrl+ V( quoted-insert) inserisce letteralmente il carattere successivo. Quindi, per dividere una linea, puoi inserire \ Ctrl+ V.

Se lo fai spesso, puoi renderlo una macro:

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'

6

È possibile utilizzare edit-and-execute-command, in genere mappato su Ctrl+ x+ e, per aprire il comando corrente in un editor . All'uscita dall'editor verrà eseguito il comando.


1
Bello - non l'ho mai saputo. Avrai bisogno di assicurarsi che il proprio variabile d'ambiente EDITOR $ è impostato su qualcosa - ho aggiunto vimal mio in questo modo: export EDITOR=vim.
slm

1
Come posso annullare l'esecuzione del comando all'uscita dell'editor? Uso :q!o ZQma inutilmente.
Birei,

1
@Birei: elimina tutte le righe, quindi salva ed esci (es. ggdG:wqO :%d|wq, ecc.). Il comando rimarrà nella cronologia (possibilmente come duplicato se lo hai richiamato da una voce precedente), ma non verrà eseguito.
In pausa fino a nuovo avviso.

@DennisWilliamson: Wow !! Quasi tre anni dopo non avevo ancora risolto questo problema, grazie mille perché la soluzione era così semplice e la semplicità è sempre migliore.
Birei,

2

Nota: questa risposta specifica per vi e vim

set -o vi    # edit commands using vi
VISUAL=/usr/bin/vim

Per modificare la riga digitata corrente, premi ESC(per accedere alla modalità di comando vio vim), quindi digita vo vi.

Notare che tutti i comandi di modifica vi / vim funzionano. per esempio

  • ESC+ A mette alla fine della riga digitata corrente.
  • ESC+ 0 posiziona il cursore all'inizio della riga.

Eccellente. Questo sicuramente rende la modifica delle righe di comando molto più semplice. Ma sai come inserire un nuovo carattere di linea senza entrare in modalità visiva?
n.

2
Grazie. CTRL+ vquindi CTRL+ jper lanciare una nuova riga dovrebbe funzionare.
suspectus,
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.