È possibile configurare ctrl-w (elimina parola)?


40

Normalmente, Ctrl+ Wcancella l'ultimo spazio bianco.

È possibile configurarlo per utilizzare caratteri aggiuntivi, come /?

Modifica: per essere più chiari: non voglio configurare la chiave per questo, voglio che anche la cancellazione venga interrotta /.

Esempio:

vim /foo/bar^W
vim /foo/

Risposte:


29

Quello che ha funzionato per me è stato aggiungere le seguenti righe al mio .bashrc

stty werase undef
bind '\C-w:unix-filename-rubout'

È necessaria la riga undef, altrimenti bash ignora la nuova associazione per C-w


3
Va notato che stty werase undefti impedirà di usare Cw in qualsiasi programma (bind ti permetterà di usare in readline)
0fnt

24

Dovresti essere in grado di utilizzare Esc, quindi backspace per eliminare le parole delimitate da barre.

Puoi cambiarlo inserendo questo .bashrc:

bind '\C-f:unix-filename-rubout'

Ora usa Ctrl+f per fare quello che vuoi.


1
grazie, questo è il comando che funziona. c'è un modo per sovrascrivere il comando di Cw? Se lo cambio in C-w:..., il comportamento predefinito dell'eliminazione nello spazio successivo continua ad entrare. Su un tasto diverso (come F) se funziona bene.
SkaveRat

Non credo che ctrl-w sia gestito solo dalla shell. Può essere gestito anche da tty. Quali sono le tue impostazioni tty mostrate da stty -a? hai control-w come carattere predefinito per werase? Se rimuovi quell'impostazione da tty, con comman stty werase undef, allora bash funziona come previsto?
eppesuig

23

Per questo problema specifico, puoi anche utilizzare:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

Buona referenza: le avventure con la parola bash cancellano


2
Eccezionale! La maggior parte delle altre risposte suggerisce di eseguire il rebinding Ctrl+wo Ctrl + b o qualcosa del genere unix-filename-rubout, ma è molto meglio che ci sia un'associazione integrata: M-backspace (Alt + backspace o Esc backspace)
Colin D Bennett

Non ha funzionato per me
ethanjyx

@ethanjyx oh. Sto lavorando su GNU Bash. Anche tu hai questo sapore?
fedorqui,

7

Con bash puoi ottenere l'effetto desiderato, inserendo quanto segue nel tuo file ~ / .bashrc:

bind '"\C-w":backward-kill-word'

Premi Hit CTRL+Ve la combinazione di tasti per vedere come appare l'emulatore di terminale. Per esempio CTRL+bksppuò essere interpretato diverso su diversi terminali es ^Ho ^?. Il ^personaggio è lo stesso di CTRL.


Penso di non essere abbastanza specifico con la mia domanda. Volevo avere /un carattere di stop aggiuntivo, non un modo per associare il comando delete-word su un altro tasto. Ho modificato la mia domanda
SkaveRat il

Usando back-kill-word associato a \ Cw, cancellerà all'indietro all'ultima barra in avanti data se presente in una parola e cancellerà le parole delimitate da spazi bianchi. Questo non è quello che volevi?

Il mio sistema utilizza ^F- ma l'utilizzo "\^F"nello script sopra non funziona
SkaveRat

1
Il Ctrlpersonaggio è scritto \Cnella sceneggiatura e non \^.
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.