2009-08-31 13 views
8

Desidero modificare i delimitatori bash (o readline) utilizzati per separare le parole. In particolare voglio fare '-' non delimitare le parole, in modo che se ho il testoModifica delimitatore di parole in bash

ls some-file 

e premo Alt-Backspace che cancella l'intero testo some-file e non solo fino al '-' char. Ciò causerà anche la delezione di flag lunghi come --group-directories-first più veloce e più facile, che richiede solo un tasto premuto.

Credo che questo sia il modo in cui si comporta zsh e mi piacerebbe che bash si comportasse allo stesso modo.

+0

Il carattere '-' ha un significato speciale in una riga di comando, quindi il comportamento predefinito non è sorprendente. Se puoi cambiarlo, ci saranno effetti collaterali? Supponiamo di aver digitato "ls -al some-file", vorresti cancellare tutto? – pavium

+0

@pavium in questo caso vorrei che 'some-file' fosse cancellato in un primo momento e quando premuto una seconda volta vorrei' -al' per essere cancellato. – spatz

+1

Ho appena trovato [la risposta] (http://superuser.com/questions/547130/bash-readline-for-move-forward-by-whitespace-delimited-word) su superuser.com. – Ekans

risposta

7

ctrl-w fa esattamente quello che vuoi.

+0

Ho letto quella parte del manuale di un milione di volte, non posso credere di averlo perso. Grazie :) – spatz

+3

Mi limito a notare che dopo averlo sperimentato un po 'non è ancora ottimale dato che le barre sono ignorate come separatori, il che è fastidioso quando si lavora con i percorsi. Ho aggiunto la riga '" \ ew ": unix-filename-rubout' a'/etc/inputrc' e ora M-e cancella una parola ignorando i trattini, ma tratta le barre come separatori. – spatz

3

Una cosa da tenere a mente è che la mappatura dei tasti bash per ctrl-W non funzionerà se si ha l'impostazione stty werase assegnata a ctrl-W. Se si esegue "stty -a" e viene visualizzato "werase =^W" che avrà la precedenza e utilizzerà l'idea tty di cosa sia un limite di parola. L'idea della tty di un limite di parola è in genere spazio bianco, mentre la funzione di backward-kill-word di bash include anche - e /.

Se si vuole fare Alt-Backspace fare la stessa cosa come impostazione werase, si può fare questo: bind ' "\ M \ Ch": unix-word-rubout' bind '"\ M- \ C-? ": Unix-word-rubout '

Inoltre, se in realtà volessi fare in modo che Ctrl-W faccia ciò che fa Alt-Backspace, dovresti fare: stty werase undef # a meno che non lo fai, bash ignora il comando segui binding bind '"\ Cw": backward-kill-word'

+1

Non correlato all'OP, ma 'stty werase undef' ha risolto completamente il problema! Grazie! –

1

Questo potrebbe essere utile: Ctrl-r avvierà una ricerca inversa (per la cronologia E la riga corrente), quindi puoi colpisci lo spazio e fuggi e torna indietro se lo vuoi, o ctrl-r di nuovo (dopo aver colpito il primo spazio) se vuoi tornare indietro ancora un arg. Quindi puoi opzionalmente uccidere il resto della linea.

Particolarmente utile se si ha a che fare con argomenti di percorso lungo (ad esempio in cp o diff), e occorre modificare la fine del primo argomento.

Ho provato a ottenere \ M-b per farlo, ma si ferma alle barre.

Problemi correlati