Bash: posso impostare Ctrl-Backspace per eliminare la parola all'indietro?


19

When in shell (bash) - Voglio che Ctrl-Backspace sia associato a "elimina la parola indietro". È possibile?

Modifica :

Sto usando konsole- terminale su KDE.


2
La domanda è semplice, non ci si può lamentare. Voglio solo commentare che spesso vale la pena di facilitare le associazioni di tasti "standard" che già esistono in molte applicazioni, invece di personalizzarle per nessun guadagno reale e la certezza di non vedere mai il comportamento su sistemi stranieri. Ctrl+wè quello a cui dovresti abituarti, imho.
Daniel Andersson,

@ Daniel Andersson: o in alternativa, puoi sviluppare un modo per trasferire le tue impostazioni su una macchina straniera.
Adobe,

La condivisione di dotfile è un problema risolto, ma non aiuta molto su computer diversi da quelli più o meno locali in cui si hanno privilegi abbastanza aperti. Se ti trovi su un sistema straniero, molto probabilmente non hai la libertà di riconfigurare cose del genere (almeno non senza essere picchiato da colleghi che usano anche la stessa macchina :-)). Inoltre, ogni nuova applicazione richiederà un trattamento speciale.
Daniel Andersson,

6
Ho il problema inverso, sono abituato a Ctrl-w"eliminare la parola precedente" nella console, e lo faccio per istinto anche in Eclipse o Chrome dove significa chiudere la scheda / chiudere il file corrente. Abbastanza fastidioso.
Ezequiel Muns,

1
Ho lo stesso problema con Chrome SShInATab. Come posso fare ctrl-W senza ctrl-W? :)
Riccardo SCE,

Risposte:


11

Perché non usare solo Alt+ Backspaceo Ctrl+ Wgià mappati nella maggior parte dei terminali. Non sono sicuro della console. Xmodmap (man xmodmap) può essere usato per rimappare anche altre chiavi personalizzate. (Paradossalmente, xmodmap non può rimappare molto bene Backspace perché il terminale ha la precedenza sui mapping, ma funziona bene con la maggior parte dei tasti ...).


9
Perché ho usato Ctrl-Backspace nel mio Emacs. Sapevo di Ctrl-w. Alt-Backspace è nuovo per me (+1).
Adobe

1
Buon punto, @hellork. È possibile intercettare control + backspace sul server X (tramite xmodmap) e mapparlo su un carattere inutilizzato (come alt-backspace).

4
La cosa fastidiosa di questo è che ctrl + backspace è una mappatura davvero comune per "eliminare la parola indietro" nella maggior parte delle app della GUI sulla maggior parte dei principali sistemi operativi. Allo stesso modo, Ctrl + W è molto diffuso per "chiudi finestra". Alt + w viene usato raramente per qualsiasi cosa nelle GUI, a cui io possa pensare. La standardizzazione sarebbe ottima. Mi chiedo quale sarebbe la maggiore perturbazione, la modifica dei terminali o la modifica delle GUI?
naught101

1
@naught, Control-W è già la chiave di cancellazione parola predefinita sui terminali unix. Sì, è in conflitto con la convenzione Windows / GUI, ma in realtà è arrivata prima - da molti anni. Colpa Microsoft!
alexis,

11

Ho trovato questa discussione tramite google, ma la risposta non è stata quella che volevo sentire. Quindi ho giocato:

Sul mio terminale, il normale backspace invia ^H, mentre ctrl + backspace invia ^?. Quindi dovrebbe essere semplice ripetere la ^?cancellazione di una parola, che per impostazione predefinita è disponibile tramite Ctrl + W.

Primo (tentativo fallito):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

Quindi quindi questo dovrebbe funzionare:

$ bind '"\C-?":unix-word-rubout'

Tuttavia non ... nessuno è in grado di spiegare?

Secondo tentativo (riuscito):

$ bind '"\C-?":"^W"'

Dove ^Wè letterale / raw ^W(premi ctrl + V quindi ctrl + W per farlo apparire).


La tua prima soluzione ha funzionato per me, in realtà! Secondo no.
Drew Hoskins,

Il secondo tentativo sembra sostituire il backspace stesso anziché Ctrl-Backspace?
user541686

7

Modifica il tuo ~/.inputrc(potrebbe essere necessario crearne uno o copiarne uno /etc/inputrclì) in modo che contenga:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

Questo mapperà anche Ctrl+ Deleteper eliminare la parola accanto al cursore.


Non funziona per me.
Jonathan,

6

Ci sono alcune buone risposte qui, ma l'ho risolto in Konsole con Impostazioni-> Modifica profilo corrente-> Tastiera-> Modifica, quindi aggiungendo una mappatura da Backspace+Controla \x17. (Ho trovato il codice ASCII per Ctrl-w usando showkey --ascii.)


Grazie per aver sottolineato la cosa con showkey. Così ho capito che ALT+Dper eliminare la parola davanti al cursore corrispondeva \x1b\x64.
loki

Grazie, ha risolto il mio problema. Nel mio caso ho bisogno di rimappare Alt + Backspace e la sua sequenza è \x1b\x7f.
DDMC,

3

Dipende da cosa vede Bash. Su una normale interazione terminale, bash non vede quali modificatori di tasti sono stati premuti, ma solo il carattere risultante. Backspace è già lo stesso di control-H, per esempio. Tenendo premuto shift o controllo non fa differenza.

TUTTAVIA, l'applicazione terminale (xterm? Cmd? Terminal? Putty? Dipende dal tuo sistema operativo) può vedere i tuoi tasti premuti e può avere un modo per mappare la combinazione di tasti control-backspace a qualcosa che bash può distinguere dal backspace.


Ho scoperto che il mio bash non vede backspace. Ma potrebbe essere possibile farlo vedere.
Adobe

@adobe, che vuoi dire? Digita "stty" sul tuo terminale e leggi il manuale a riguardo. Se ^ H è impostato per essere il tuo carattere di cancellazione, puoi impostarlo su qualcos'altro ... se hai una buona ragione.

1
C'è un buon esempio di come farlo su github.com/calj/gtconf/blob/master/zsh/zshrc . Konsole ti consente di farlo. Copia uno dei file * .keytab da / usr / share / kde4 / apps / konsole / in ~ / .kde / share / apps / konsole e modificalo con i suggerimenti nel link sopra, eliminando la riga "Key Backspace" e aggiungendo: key Backspace-Shift-Control : "\x7f"e key Backspace-Shift+Control : "\E[9;3~"cambia anche la riga del titolo mentre ci sei: keyboard "Xfree4 Modlist"per esempio. È quindi possibile aggiungere "\e[9;3~": backward-kill-word"a ~ / .inputrc
Adam

2

Prova questo:

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

Opzionalmente aggiungere quanto segue a ~ / .inputrc per renderlo permanente:

"\C-_": backward-kill-word

Funziona su bash 4.3.11 in Kubuntu 14.04


2
È improbabile che Control-backspace sia lo stesso di Control-underscore.
Thomas Dickey,

1
Di tutte le cose che ho provato in questo thread, ha funzionato! Usando "GNU bash, versione 4.3.48 (1) -release (x86_64-pc-linux-gnu)" su bash su windows / WSL
Markus Jevring,

Questo funziona benissimo per me in Cygwin, usando GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin).
zagyi,

1

A Konsole:

  • clic Settings -> Edit current profile
  • fai clic sulla scheda "Tastiera" -> [Edit...]
  • fai clic sul [Add]pulsante e sotto il Key Combinationtipo di colonna Backspace+Ctrl. Nel Outputtipo di colonna 0x08(che è convenzionalmente il carattere backspace)

Ora dovresti essere in grado di mappare quella chiave su backward-kill-wordvia

# ~/.bashrc

bind '"\x08":backward-kill-word'

Grazie. Funziona per me, almeno in xfce4-terminal.
limon,

0

Sulla maggior parte dei terminali CTRL + W dovrebbe già eliminare una parola al contrario. Funziona con xterm e immagino che funzioni con Konsole. CTRL + W è un'associazione chiave standard sul programma basato su testo che funzionerà con vim in modalità insert, emacs e ogni shell.


5
Ho Ctrl-w associato a "chiudi tab" in Emacs, FireFox, Krusader - quindi ho impostato che sia una combinazione di tabulazione anche in Konsole.
Adobe,
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.