Chiave di escape della shell di Windows (elimina l'intera riga) equivalente in Bash


13

Nella riga di comando di Windows (powershell e cmd), quando si preme il Esctasto su una riga, viene rimosso tutto ciò che è stato digitato al prompt.

Ho scoperto che premendo il Esctasto al prompt di bash non fa nulla. Premere Esce quindi backspaceeliminare una parola, ma questo deve essere fatto per ogni parola.

Sto imparando Bash in modo incrementale e talvolta scrivo qualcosa di stupido nel mezzo della linea e sento che è meglio digitare di nuovo da zero. Per fare questo, premere backspaceè l'unico modo che ho trovato fino ad ora.

cosa fai?

Sono a conoscenza del clearcomando e del Ctrl-Lcollegamento, ma non sto parlando di cancellare l'intero terminale. Solo la linea.


1
Qualche tempo fa ho pubblicato un elenco di utili scorciatoie da tastiera readline su superutente. Potresti trovarli anche utili. (Readline è la libreria che bash usa per la modifica delle righe.)
jw013

hey jw013, grazie per una bella modifica. :-)
Animesh,

Risposte:


15

Volete kill-whole-line, ma questo non è vincolato per impostazione predefinita in bash. backward-kill-line( CtrlX Backspace) e unix-line-discard( CtrlU) cancellano entrambi dal punto corrente all'inizio della riga, quindi vai alla fine della riga e usa uno dei due.


Hai ragione, non è legato a nulla. Ho appena scoperto che usando bind -P. Immagino Ctrl-Uche allora Ctrl-Ysia l'unica opzione.
Animesh,

Scoprirai che un certo numero di associazioni predefinite derivano dalle sequenze di tasti nell'editor Emacs e che quelle associazioni appaiono anche altrove.
Blrfl,

@Blrfl per estendere il tuo commento, la maggior parte di queste combinazioni di tasti sono state astratte nella libreria readline , che usano un gran numero di programmi a riga di comando ed è per questo che hanno tutti chiavi di modifica della linea simili.
jw013,


6

Ctrl+ava all'inizio della riga e Ctrl+kcancella fino alla fine della riga


Prova ^Uprima, nella maggior parte delle implementazioni della modalità di modifica della riga di comando di Emacs elimina già l'intera riga. In quelli in cui elimina solo il cursore (GNU readline, ad esempio), premere in ^Kseguito.
mirabilos,

3

Per espandere un po 'la risposta di Ignacio Vazquez-Abrams, puoi ottenere un comportamento (quasi) simile a Windows dalla Escchiave in bash vincolando kill-whole-linea Esccon il seguente comando

bind '"\e":kill-whole-line'

Se aggiungi la linea al tuo ~/.inputrcfile, il legame persisterà tra le sessioni.

Si noti, tuttavia, che questo è molto non standard, poiché bash utilizza effettivamente il Esctasto come un altro tasto di modifica (come un Alt o Ctrl non persistente). Se guardi l'elenco delle bind -Pcombinazioni di tasti esistenti (con ), probabilmente vedrai diversi comandi associati a combinazioni di tasti che iniziano con "\ e" (ad es.

"\eb": backward-word

che imposta la combinazione Esc+ Bper spostare il cursore indietro all'inizio della parola più recente, un po 'come Ctrl+ , tranne per il fatto che devi continuare a rilasciare Esc(così come B, ovviamente) se vuoi farlo più di una volta di fila ).

E questo spiega perché ho detto che il comportamento che si ottiene è quasi simile a Windows: quando si preme Esc, bash controlla se lo si utilizza in combinazione con un altro tasto; quindi, se lo leghi a kill-whole-line, c'è un po 'di ritardo tra la pressione (o meglio, il rilascio) Esce il bash che cancella la linea per te.

Tuttavia, se non ti interessa nulla di tutto ciò, e preferisci vivere con il ritardo piuttosto che riqualificarti a una sequenza di tasti diversa, puoi farlo.

(Nota: gran parte delle informazioni qui ottenute come risultato della lettura - e seguendo i collegamenti in - questa risposta .)


1
Questo è stato molto utile, grazie e funziona più o meno come pubblicizzato. Ma ho scoperto che produceva un comportamento fastidioso quando altri comandi venivano eseguiti "in modo non valido", come premere DEL alla fine di una riga: questo avrebbe cancellato la linea e l'avrebbe sostituita con [19;un codice di escape simile. Alla fine ho trovato la mappatura "\e\e"a kill-whole-line(vale a dire, toccare Esc due volte per cancellare la linea) un buon compromesso.
j_random_hacker,

@j_random_hacker: Hm, mi piace. Spesso ho colpito Escalcune volte comunque, quindi potrei provarlo. Al momento l'ho associato a Ctrl+ Delma non me lo ricordo mai.
Wilson F,
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.