Obtenir <ctrl> + <backspace> pour supprimer des mots en mode gnome-terminal et vim insert

10

Il semble que ctrl+ Wsupprime en arrière un mot à la fois. C'est super, mais j'aimerais vraiment que cela fonctionne avec ctrl+ backspacecomme la plupart des autres applications.

Quelle est la meilleure façon de procéder? J'aurais besoin du changement pour affecter les commandes gnome-terminal, vim en ligne de commande et vim GUI.

Costa
la source
1
Dans vim, vous pouvez appuyer sur D puis sur B et cela fera la même chose. Cependant, je manque aussi cette fonctionnalité dans le terminal car vous devez vous échapper et cela ne fonctionne pas lorsque vous travaillez en mode Insertion.
Astuce géniale

Réponses:

7

Notez que cela fonctionnera dans le terminal et le mode emacs par défaut (que vous utilisez si Ctrl+ Wsupprime le mot précédent pour vous). Cela ne fonctionnera pas en mode vi de bash et n'affectera pas vi / vim lui-même. Ce n'est donc qu'une réponse partielle mais le meilleur que cet utilisateur d'emacs puisse offrir.


Ce genre de chose est géré par la readlinebibliothèque dont le comportement peut être contrôlé via ~/.inputrc. Modifiez (ou créez, s'il n'existe pas) ~/.inputrcet ajoutez cette ligne:

"\C-H":"\C-W"

Maintenant, ouvrez un nouveau terminal et cela devrait fonctionner.

Explication

C'est en \C-Hfait Control+ BackSpace. Vous pouvez voir les codes clés en appuyant sur Ctrl+ Vpuis sur la touche que vous recherchez. Vous verrez que cela BackSpacerevient ^H.

Maintenant, il devrait être possible de lier Control+ BackSpaceà la fonction bash qui supprime le mot précédent ( backward-kill-wordou unix-word-rubout) en utilisant "\C-H": backward-kill-word. Cependant, je ne peux pas faire fonctionner cela. Cela fonctionne parfaitement avec différentes clés ( "\C-E": backward-kill-word, par exemple, fait Ctrl+ Esupprimer le mot précédent) mais pour une raison quelconque, je ne peux pas le faire fonctionner BackSpace.

Donc, comme solution de contournement, nous mappons simplement Ctrl+ Backspaceà Ctrl+ Wqui est déjà mappé backward-kill-word. Ainsi, lorsque vous appuyez sur Ctrl+ Backspace, cela sera traduit en Ctrl+ Wqui, à son tour, sera envoyé backward-kill-word. J'ai eu l'idée de cette solution de contournement de ce poste SU .

terdon
la source
4

Jusqu'à très récemment, gnome-terminal émettait le même code sur Backspaceet Ctrl+ Backspace, vous ne pouvez donc pas distinguer les deux dans votre application.

Cela a été corrigé dans vte-0.42, qui fait partie de Gnome 3.18 sorti cet automne.

Si vous utilisez Wily, vous pouvez trouver des packages mis à jour dans Gnome3 Staging .

egmont
la source
puis-je faire en sorte que cela fonctionne en toute confiance sans ajouter cet énorme PPA?
Ciprian Tomoiagă
Pas sans télécharger, patcher, compiler et installer le paquet libvte 2.90 qui correspond à trusty. Le correctif se trouve sur bugzilla.gnome.org/show_bug.cgi?id=733246 .
egmont
3

Utilisez Alt+ à la Backspaceplace: cela fonctionne comme Ctrl+ Backspaceet ne nécessite aucune configuration.

Marco Lackovic
la source
1

Cela fonctionne sur ma machine. Assurez-vous simplement d'utiliser tmux de master et nvim de linuxbrew et control + backspace fonctionne aussi en bash et vim!

(Obtenez aussi bash de linuxbrew)

Fábio Santos
la source