Mappage ctrl-backspace dans le terminateur

8

J'ai récemment commencé à utiliser Vim. Dans les éditeurs précédents, j'ai l'habitude de supprimer un mot entier en appuyant sur Ctrl- Backspace. Après avoir examiné la documentation, j'ai constaté que cela se faisait en appuyant sur Ctrl- wdans Vim. Le problème est qu'après avoir pris l'habitude d'appuyer sur Ctrl- w, j'ai commencé à fermer les onglets et les chats à chaque fois que j'orthographe un mot (en écrivant cette question, j'ai fermé cet onglet 5 fois). J'ai donc vérifié comment mapper les clés dans Vim et j'ai essayé ceci:

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

Malheureusement, cela n'a pas fonctionné. Après un peu de recherche, j'ai trouvé que le terminal ne fait pas de distinction entre Ctrl- Backspaceet Backspace. J'ai vu des hacks et des correctifs pour résoudre ce problème, mais je n'ai pas pu les faire fonctionner sur Terminator (qui est l'émulateur que je veux utiliser).

Existe-t-il un moyen de mapper Ctrl- Backspacedans Vim lors de l'utilisation de terminator?

user1026044
la source
2
Bienvenue dans l'enfer de Vim.
romainl
2
J'aime le fait que cet enfer soit assez productif et puisse être amélioré avec des patchs.
Ingo Karkat
BTW, je recueille ce genre de questions pour pouvoir espérer que ce problème particulier est résolu dans un Vim 8.0. Je veux aussi de plus en plus de candidats cartographiques uniformes.
Ingo Karkat
Ce problème ne peut pas vraiment être résolu dans vim (AFAIK). Cela dépend du terminal sur lequel vim s'exécute. Pour une grande variété d'utilisateurs utilisant vte (Gnone Terminal, Mate Terminal, Guake, etc.), ce problème a récemment retenu l'attention et pourrait être corrigé prochainement. Voir ce bug gnome: bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr
@IngoKarkat Voir le commentaire ci-dessus. ^
trusktr

Réponses:

8

En raison de la façon dont la saisie au clavier est gérée en interne, ce n'est malheureusement généralement pas possible aujourd'hui. Certaines combinaisons de touches, comme Ctrl+ non alphabétique ne peuvent pas être mappées, et Ctrl+ lettre vs Ctrl+ Shift+ lettre ne peuvent pas être distinguées. (À moins que votre terminal n'envoie un code termcap distinct , ce que la plupart ne font pas.) En mode insertion ou en ligne de commande, essayez de taper la combinaison de touches. Si rien ne se passe / n'est inséré, vous ne pouvez pas utiliser cette combinaison de touches. Cela s'applique également à <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>etc. (La seule exception est <BS>/ <C-H>.) Ceci est un problème connu et fait l'objet de diverses discussions sur vim_dev et le canal IRC #vim.

Certaines personnes (avant tout Paul LeoNerd Evans) veulent corriger cela (même pour la console Vim dans les terminaux qui prennent en charge cela), et ont flotté diverses propositions, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Mais à ce jour, aucun correctif ou volontaire ne s'est encore présenté, bien que beaucoup aient exprimé le souhait de l'avoir dans une future version majeure de Vim 8.

Ingo Karkat
la source
Merci pour la réponse rapide. Je suppose que je vais devoir m'habituer à utiliser ctrl-w pour vim et ctrl-backspace pour les navigateurs.
user1026044
La bonne chose à propos de Ctrl-W est qu'il fonctionne également dans Bash, etc.
Ingo Karkat
Ouais je sais. Mais vous devez toujours utiliser ctrl-backspace pour tout le reste, et le fait que ctrl-w semble être la norme pour fermer les onglets et les fenêtres partout ailleurs le rend ennuyeux. Je vais probablement m'y habituer après un certain temps.
user1026044
Mais cela peut-il être résolu uniquement dans la base de code vim? Comment un code de la base de code vim fait-il la distinction entre le retour arrière et ctrl + retour arrière si le terminal dans lequel il s'exécute envoie à vim la même entrée exacte pour l'une ou l'autre combinaison de touches? On dirait que c'est quelque chose qui doit être corrigé dans le terminal dans lequel vim s'exécute, pas vim. Par exemple, Guake envoie ^?à la fois pour le retour arrière et ctrl + retour arrière, ce qui les rend (AFAIK) indiscernables. xterm, d'autre part, envoie ^Hpour le retour arrière et ^?pour ctrl + retour arrière, ce qui les rend reconnaissables.
trusktr
Mais malheureusement, dans xterm, backspace ( ^H) est indiscernable de ctrl + h ( ^H). Peut-être pouvons-nous créer une nouvelle séquence d'échappement pour pouvoir distinguer les trois? Je ne sais pas à quel point c'est facile, mais il semble que ce serait sûr car avec l'état actuel des choses (certains terminaux utilisent ^?pour le retour arrière, d'autres ^Het vice versa), je ne peux pas imaginer de nombreuses applications de terminal (le cas échéant) considérez le scénario ctrl + retour arrière (ce serait complètement indéterministe en raison de la variété des terminaux) ...
trusktr