È 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.