Mappatura di ctrl-backspace nel terminatore


8

Di recente ho iniziato a utilizzare Vim. Dagli editor precedenti, sono abituato a cancellare un'intera parola premendo Ctrl- Backspace. Dopo aver esaminato la documentazione ho scoperto che ciò è stato fatto premendo Ctrl- win Vim. Il problema è che dopo essermi abituato a premere Ctrl- w, ho iniziato a chiudere le schede e le chat ogni volta che ho sbagliato a scrivere una parola (mentre scrivevo questa domanda ho chiuso questa scheda 5 volte). Quindi ho controllato come mappare le chiavi in ​​Vim e ho provato questo:

:imap <C-BS> <C-w>

Sfortunatamente, non ha funzionato. Dopo un po 'di ricerche ho scoperto che il terminale non distingue tra Ctrl- Backspacee Backspace. Ho visto alcuni hack e patch per risolvere questo problema, ma non sono riuscito a farli funzionare su Terminator (che è l'emulatore che voglio usare).

C'è un modo per mappare Ctrl- Backspacein Vim quando si usa terminator?


2
Benvenuto all'inferno di Vim.
romainl

2
Mi piace il fatto che questo inferno sia abbastanza produttivo e possa essere migliorato con le patch.
Ingo Karkat,

A proposito, sto raccogliendo questo tipo di domande per sperare di essere in grado di sostenere che questo particolare problema è affrontato in un Vim 8.0. Voglio davvero anche candidati di mappatura sempre più uniformi.
Ingo Karkat,

Questo problema non può davvero essere risolto in vim (AFAIK). Dipende dal terminale in cui è in esecuzione vim. Per una vasta gamma di utenti che usano vte (Terminale Gnone, Terminale Mate, Guake, ecc.) Questo problema ha ricevuto qualche attenzione recente e potrebbe essere risolto presto. Vedi questo bug di gnome: bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr

@IngoKarkat Vedi il commento sopra. ^
trusktr,

Risposte:


8

A causa del modo in cui l'input da tastiera viene gestito internamente, questo purtroppo oggi non è generalmente possibile. Alcune combinazioni di tasti, come Ctrl+ non alfabetico, non possono essere mappate e non è possibile distinguere Ctrl+ lettera vs. Ctrl+ Shift+ lettera. (A meno che il terminale non invii un codice termcap distinto , cosa che la maggior parte non lo fa.) Nella modalità di inserimento o riga di comando, prova a digitare la combinazione di tasti. Se non accade nulla / è inserito, non è possibile utilizzare quella combinazione di tasti. Questo vale anche per <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>ecc. (L'unica eccezione è <BS>/ <C-H>.) Questo è un punto dolente noto e oggetto di varie discussioni su vim_dev e sul canale IRC #vim.

Alcune persone (soprattutto Paul LeoNerd Evans) vogliono risolverlo (anche per console Vim nei terminali che supportano questo), e hanno lanciato varie proposte, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Ma ad oggi, nessuna patch o volontario si è ancora fatto avanti, anche se molti hanno espresso il desiderio di avere questo in una futura versione principale di Vim 8.


Grazie per la risposta rapida. Immagino che dovrò semplicemente abituarmi a usare ctrl-w per vim e ctrl-backspace per i browser.
user1026044

La cosa positiva di Ctrl-W è che funziona anche in Bash ecc.
Ingo Karkat,

Si lo so. Ma devi ancora usare ctrl-backspace per tutto il resto, e il fatto che ctrl-w sembra essere lo standard per chiudere le schede e le finestre ovunque altro lo rende fastidioso. Probabilmente mi abituerò dopo un po '.
user1026044

Ma questo può essere risolto solo nella base di codice vim? In che modo qualsiasi codice nella base di codice di VIM distingue tra backspace e ctrl + backspace se il terminale in cui è in esecuzione invia a vim lo stesso input esatto per entrambe le combinazioni di tasti? Sembra che questo sia qualcosa che deve essere risolto nel terminale in cui vim è in esecuzione, non vim. Ad esempio, Guake invia ^?sia per backspace sia per ctrl + backspace, il che li rende indistinguibili (AFAIK). xterm, d'altra parte, invia ^Hper backspace e ^?per ctrl + backspace, rendendoli distinguibili.
trusktr,

Ma sfortunatamente, in xterm, backspace ( ^H) è indistinguibile da ctrl + h ( ^H). Forse possiamo creare una nuova sequenza di escape per essere in grado di distinguere tutti e tre? Non so quanto sia facile, ma sembra che sarebbe sicuro perché con lo stato attuale delle cose (alcuni terminali usano ^?per il backspace, altri ^He viceversa) non riesco a immaginare molte app terminali (se del caso) considera lo scenario ctrl + backspace (sarebbe completamente indeterministico a causa della varietà di terminali) ...
trusktr
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.