108 votes

Comment mapper Ctrl+A et Ctrl+Shift+A différemment ?

Dans un terminal, on ne peut pas distinguer Ctrl + A y Ctrl + Shift + A car ils émettent tous les deux le même code clé, je comprends donc pourquoi Vim ne peut pas le faire. Mais gVim, étant une application X, peut différencier Ctrl + A y Ctrl + Shift + A . Existe-t-il un moyen de cartographier ces deux éléments différemment ?

Pour commencer, j'aimerais faire quelque chose comme ce qui suit : Faire en sorte que "coller depuis le presse-papier" fonctionne comme le terminal Gnome, tout en conservant la fonction "coller depuis le presse-papier". Ctrl + V au mode visuel.

:nmap <C-S-V> "+gP

57voto

graywh Points 4425

Gvim ne le fait pas parce que vim ne peut pas le faire (dans des circonstances normales). Désolé, mais c'est ainsi.


Cependant...

Certains terminaux (par exemple xterm et iterm2) peuvent être configurés pour envoyer une séquence d'échappement arbitraire pour n'importe quelle combinaison de touches.

Par exemple, ajoutez ce qui suit à .Xresources pour l'envoi par xterm <Esc>[65;5u para CtrlShiftA . Dans Vim, vous pouvez ensuite faire correspondre ce fichier à <C-S-a> . (65 est la valeur décimale Unicode pour shift-a et 5 est le bit pour le modificateur ctrl. Le u dans ce cas signifie "unicode").

! .Xresources
XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u")

iTerm et [u]rxvt peuvent également être configurés pour cela (exemples non fournis).

Plus d'informations : http://www.leonerd.org.uk/hacks/fixterms/

11voto

anishsane Points 5987

Comme nous l'avons déjà souligné, il n'existe aucun moyen de cartographier les <C-S-A> différemment de <C-A> .

Toutefois, l'utilisation d'outils tels que autokey (pour linux et Windows) ou autohotkey (pour Windows), vous pouvez remapper <C-S-A> pour envoyer une (des) frappe(s) différente(s) pour des applications spécifiques.

Par exemple, sur mon système, j'ai ce paramètre dans autokey :

$ cat ~/.config/autokey/data/gnome-terminal/ctrlshifta-gnome-terminal.py
#ctrl+shift+a sends '<S-F1>a'
keyboard.send_keys("<shift>+<f1>a") # Note that `f` in `f1` needs to be in lower case.

Attribuez-lui ces propriétés :

  1. raccourci clavier comme ctrl+shift+a
  2. classe de fenêtre : gnome-terminal-server.Gnome-terminal

Ensuite, votre ~/.vimrc peut créer une cartographie pour les <S-F1>a de faire ce que vous voulez.


Notas:

  1. J'ai utilisé <S-F1> comme une sorte de clé de voûte pour la détection <C-S> . Cela s'explique par le fait que mon terminal n'acceptait pas <F13> - <F37> etc. Si votre application le permet, ( gvim Je pense qu'il est recommandé d'utiliser ces clés.
  2. J'ai principalement vim en gnome-terminal . J'ai donc utilisé window class = gnome-terminal-server.Gnome-terminal comme filtre. Modifiez-le pour utiliser gvim si vous le souhaitez. autokey comporte un bouton permettant de capturer les propriétés d'une autre fenêtre, comme la classe ou le titre.

7voto

Ingo Karkat Points 61399

En raison de la manière dont la saisie au clavier est gérée en interne, cela n'est malheureusement pas possible aujourd'hui, même dans GVIM. Certaines combinaisons de touches, comme Ctrl + non alphabétique ne peut pas être mappé, et Ctrl + lettre vs. Ctrl + Shift + lettre ne peut être distinguée. (A moins que votre terminal n'envoie un capuchon de terme (ce qui n'est pas le cas de la plupart d'entre eux). En mode insertion ou ligne de commande, essayez de taper la combinaison de touches. Si rien ne se produit / n'est inséré, vous ne pouvez pas utiliser cette combinaison de touches. Ceci s'applique également à <Tab> / <C-I> , <CR> / <C-M> / <Esc> / <C-[> etc. (La seule exception est <BS> / <C-H> .) Il s'agit d'un problème connu, qui a fait l'objet de plusieurs discussions sur vim_dev et sur le canal IRC #vim.

Certaines personnes (en premier lieu Paul LeoNerd Evans) veulent corriger cela (même pour la console Vim dans les terminaux qui le supportent), et ont lancé 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 manifesté, bien que de nombreuses personnes aient exprimé le souhait d'avoir cette fonctionnalité dans une prochaine version de Vim.

5voto

Anurag Priyam Points 31

Si ce qui vous gêne, c'est de perdre les fonctionnalités existantes de C-V, vous pouvez utiliser C-Q à la place. Voir :help CTRL-V-alternative.

4voto

OliverUv Points 132

NeoVim offre maintenant cette fonctionnalité pour ses clients terminal et gui. Voir :h nvim-features-new

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X