Alt-Left per saltare le parole non funziona negli emulatori di terminale


16

Su una macchina Debian Wheezy al lavoro precedente, mi ero abituato a Alt + Sinistra e Alt + Destra per saltare tra le parole sulla riga di comando attiva (in bash).

Tuttavia, dato che a casa ho eseguito l'aggiornamento a Jessie (Debian 8.0, ramo di testing) questo non funziona più: invece di saltare alla parola precedente, Alt-Left stampa qualcosa come Do [D. OTOH, se apro ssh e mi collego al mio Debian Wheezy senza testa, funziona perfettamente.

Inoltre, ho appena installato Fedora 20 nel mio nuovo lavoro e qui il comportamento è lo stesso. Questo vale per bash, csh e ksh (iniziato sotto env -i), così come rxvt-unicode e xfce4-terminal, quindi deve essere qualcosa al di fuori di questi livelli.

Dove altro nella pila dovrei cercare per trovare la differenza?


4
Suggerirei di provare alt-b e alt-f (così come il resto dei tasti readline), poiché sono più universali e un certo numero di programmi a riga di comando onora i binding readline.
— esiliati il

Risposte:


21

Probabilmente hai definito un file locale ~/.inputrco globale /etc/inputrcche è stato perso durante l'aggiornamento. Una soluzione semplice è quella di creare un ~/.inputrcfile con le seguenti righe:

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

Funzioneranno con xterme terminatore gnome-terminalpotrebbero aver bisogno di essere modificati per altri terminali. Sfortunatamente, ogni emulatore di terminale può usare una sintassi diversa. Per ulteriori dettagli, vedi la mia risposta qui .


Intendevo davvero Alt, e funziona ancora sulla macchina remota. Ctrl + Sinistra / Destra è già preso in Rxvt per spostare la scheda sinistra e destra (Maiusc + Sinistra / Destra cambiando le schede e Maiusc + Giù aprendo una nuova).
— Alois Mahdal,

1
A proposito, mentre Ctrl + Sinistra / Destra è comune negli editor di GUI, i terminali sono un mondo completamente diverso in cui non ho ancora visto quella combinazione.
— Alois Mahdal,

10

terdon mi ha impostato nella giusta direzione: file inputrc .

Il colpevole è che quasi in modo non intuitivo, readline6 utilizza effettivamente ~ / .inputrc invece di / etc / inputrc, che readline (3) non enfatizza né confuta:

Il nome di questo file è preso dal valore della variabile d'ambiente INPUTRC. Se quella variabile non è impostata, il valore predefinito è ~ / .inputrc. Se quel file non esiste o non può essere letto, il valore predefinito è / etc / inputrc.

Così, mentre in su entrambe le macchine Debian / etc / inputrc è identico a quello fornito da libreadline6 pacchetto (la versione è lo stesso pure), sulla nuova macchina ~ / .inputrc esiste con sola riga: set bell-style none. Quando questo file viene eliminato, tutto funziona correttamente (vedere le note di seguito).

Non posso controllare Fedora fino a domani ma immagino sia lo stesso problema. Aggiornamento: su Fedora, ~ / .inputrc non esisteva, qui / etc / inputrc è semplicemente diverso, quindi potrebbe non definirlo. Come aggiornamento rapido ho semplicemente salvato l'input di Debian come ~ / .inputrc.


Appunti:

Il mistero di come è stato modificato durante l'aggiornamento di 7> 8 rimane irrisolto, ma in parte può essere spiegato dalla mia cattiva memoria e da alcune giocolette non intenzionali di dotfile. (A proposito non è stato l'aggiornamento di APT ma piuttosto la reinstallazione e il dotfile manuale in movimento, quindi forse ~ .inputrc si è in qualche modo ostacolato.)

Inoltre, quando dico OK, intendo che funziona con Ctrl ovunque tranne Rxvt (OK, ho controllato solo xfce4-terminal ma sappiamo che Rxvt è il solito ribelle), dove questo è rimappato su Alt, apparentemente perché Ctrl è preso da Rxvt -specifica funzionalità: sposta la scheda attiva nell'elenco.

Come menziona la manpage, con bash puoi usare il comando bind integrato per investigare ciò che hai attualmente.


Bella cattura, +1. In realtà, è più intuitivo di quanto pensi. Il comportamento predefinito prevede che i file dot specifici dell'utente abbiano la precedenza sui valori predefiniti a livello di sistema. Altrimenti, gli utenti non sarebbero in grado di cambiare le loro impostazioni.
— terdon

Vedi la risposta aggiornata su come abilitare specificamente le frecce Alt +.
— terdon

2
Questo è normale, è necessario $include /etc/inputrcnella parte superiore ~/.inputrcse si desidera leggere anche quello.
— Chris Down,

@terdon ha perfettamente senso preferire le impostazioni utente prima dell'intero sistema, ma quello che vedrei più intuitivo sarebbe che ~ / .initrc sarebbe "unito" in / etc / initrc (cioè / etc / initrc sarebbe $included per impostazione predefinita).
— Alois Mahdal,

1
Vedi: 1. opzioni hardcoded, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. opzioni hardcoded 2. / etc / initrc OR ~ / .initrc. Il primo modo è molto più flessibile poiché può essere facilmente esteso a un livello inferiore (ad es. Per progetto, bene, ammetto che questo esempio non ha molto senso con readline ma si ottiene il punto).
— Alois Mahdal,
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.