web-dev-qa-db-fra.com

Obtenir <ctrl> + <retour arrière> pour supprimer des mots en mode gnome-terminal et vim insert

Il semble que <ctrl> + W supprime en arrière un mot à la fois. C'est formidable, mais je travaillerais vraiment avec <ctrl> + <backspace> comme la plupart des autres applications.

Quelle est la meilleure façon de faire cela? J'aurais besoin de cette modification pour affecter les commandes gnome-terminal, vim en ligne de commande et vim d'interface graphique.

9
Costa

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


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

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

Maintenant, ouvrez un nouveau terminal et cela devrait fonctionner.

Explication

Le \C-H est en réalité Control+BackSpace. Vous pouvez voir les codes clés en appuyant sur Ctrl+V alors, la clé que vous êtes après. Vous allez voir ça BackSpace retourne ^H.

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

Donc, comme solution de contournement, nous venons de mapper Ctrl+Backspace à Ctrl+W qui est déjà mappé à backward-kill-Word. Alors, quand vous appuyez sur Ctrl+Backspace, qui sera traduit en Ctrl+W qui, à son tour, enverra backward-kill-Word. J'ai eu l'idée de cette solution de contournement de ce post S .

7
terdon

Jusqu'à tout récemment, gnome-terminal émettait le même code sur Backspace et Ctrl+BackspacePar conséquent, vous ne pouvez pas distinguer les deux dans votre application.

Ce problème a été corrigé dans vte-0.42, qui fait partie du gnome 3.18 publié cet automne.

Si vous utilisez Wily, vous pouvez trouver les paquets mis à jour dans Gnome3 Staging .

3
egmont

Cela fonctionne sur ma machine. Assurez-vous simplement que vous utilisez tmux de master et nvim de linuxbrew et que control + backspace fonctionne également avec bash et vim!

(Obtenez bash de linuxbrew aussi)

1
Fábio Santos