Comment mapper les touches Ctrl+A et Ctrl+Maj+A différemment?
Dans un terminal, on ne peut pas distinguer Ctrl+Un et Ctrl+Maj+Un, tels qu'ils émettent tous deux le même code de la clé, donc je peux voir pourquoi Vim ne peut pas le faire. Mais gVim, étant une application X, peuvent se différencier Ctrl+Un et Ctrl+Maj+Un. Est-il possible de mapper ces deux choses différemment?
Pour commencer, je voudrais faire quelque chose comme ce qui suit: Faire "coller à partir du presse-papiers" le travail comme Gnome terminal, tout en gardant Ctrl+V pour le mode visuel.
:nmap <C-S-V> "+gP
- C'est possible: vim.wikia.com/wiki/Mapping_fast_keycodes_in_terminal_Vim
- Ce lien ne fait aucune mention de l'ajout d'une touche de modification ctrl-un.
Vous devez vous connecter pour publier un commentaire.
Gvim ne pas le faire parce que vim ne peut pas le faire (dans des conditions normales). Désolé, mais c'est juste la façon dont il est.
Cependant...
Certains terminaux (par exemple, xterm et iterm2) peut être configuré pour envoyer un arbitraire séquence d'échappement pour n'importe quelle combinaison de touches.
Par exemple, ajoutez la ligne suivante à
.Xresources
pour xterm pour envoyer<Esc>[65;5u
pour CtrlMajUn. Vous pouvez ensuite la carte que dans Vim pour<C-S-a>
. (65 est la virgule de la valeur Unicode pour shift-a et 5 bits pour le modificateur ctrl. Le " u " dans ce cas signifie "unicode".)iTerm et [u]rxvt peut également être configuré pour ce faire (exemples non fourni).
Plus d'infos: http://www.leonerd.org.uk/hacks/fixterms/
\n
. Utilisation de la barre oblique inverse pour séparer les lignes. E. g. aussi map <kbd>C-S-B</kbd> et <kbd>C-S-F</kbd> utiliser ceci:XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")
map <ESC>[66;5u :echo "ctrl-shift-b received"<CR>
à la carte ctrl-maj-b pour imprimer un message dans la ligne d'état. Sur AskUbuntu il en était de même Q et j'ai résumés cette.xterm-256color
(la plus récente) souffrent de tant de limitations.xterm-256color
.Comme l'a déjà souligné, il n'existe aucun moyen de la carte
<C-S-A>
différemment de<C-A>
.Cependant, en utilisant des outils comme
autokey
(pour linux & windows) ouautohotkey
(pour windows), vous pouvez remapper<C-S-A>
pour envoyer une autre touche(s) pour des applications spécifiques.par exemple, Sur mon système, j'ai ce paramètre dans
autokey
:Attribuer ces propriétés:
ctrl+shift+a
gnome-terminal-server.Gnome-terminal
Alors votre
~/.vimrc
pouvez créer de cartographie pour<S-F1>a
à faire ce que vous voulez.Notes:
<S-F1>
comme une sorte de chef de file de la clé pour la détection de<C-S>
. C'était parce que mon terminal n'accepte pas<F13>
-<F37>
etc touches. Si votre application prend en charge, (gvim
est le cas je pense) à l'aide de ces touches est recommandé.vim
dansgnome-terminal
. J'ai donc utiliséwindow class = gnome-terminal-server.Gnome-terminal
comme filtre. Le modifier pour utilisergvim
si vous le souhaitez.autokey
appuie sur un bouton pour capturer n'importe quelle autre fenêtre de propriétés comme la classe/title.apt install autokey-gtk
?bindsym --release Control+Shift+h exec --no-startup-id xdotool key --clearmodifiers comma w m h
, qui appuie sur,wmh
lorsque j'appuie sur<C-S-h>
, puis vim sait comment gérer,wmh
<C-S-H>
quand je presse.Si ce qui vous dérange c'est perdre existant C-V fonctionnalité, vous pouvez utiliser C-Q à la place. Voir, :de l'aide CTRL-V-alternative.
Comme vous l'avez remarqué, vous obtenez le même mot de code. Donc, la seule façon de les distinguer est de vérifier l'état de l' Maj clé dans votre gestion des événements de la fonction. Bien sûr, si vous avez plus de 0,5 seconde de délai entre la pression de touche et de traitement, vous manquerez des hits.
En raison de la façon dont le clavier de saisie est géré à l'interne, ce qui malheureusement n'est en général pas possible aujourd'hui, même dans GVIM. Certaines combinaisons de touches, comme Ctrl + non-alphabétiques ne peut pas être mappé, et Ctrl + lettre vs. Ctrl + Maj + lettre ne peut pas être distingués. (À moins que votre terminal envoie une nette termcap code, dont la plupart ne le font pas.) En insert ou en mode ligne de commande, essayez de taper la combinaison de touches. Si rien ne se passe /est insérée, vous ne pouvez pas utiliser cette combinaison de touches. Cela s'applique également à
<Tab>
/<C-I>
,<CR>
/<C-M>
/<Esc>
/<C-[>
etc. (Seule exception est<BS>
/<C-H>
.) C'est un point douloureux, et l'objet de diverses discussions sur vim_dev et de la #vim canal IRC.Certaines personnes (surtout Paul LeoNerd Evans) veux le corriger (même pour la console de Vim dans les bornes que cela), et ont flotté diverses propositions, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
Mais dès aujourd'hui, aucun des correctifs ou des bénévoles ont encore de l'avant, même si beaucoup ont exprimé le désir d'avoir ce que dans un avenir Vim version.
NeoVim propose désormais cette fonctionnalité pour son terminal et de l'interface clients. Voir :h nvim-caractéristiques-nouveau
<m-s-...>
variantes) ne fonctionnent la plupart du temps complètement hors de la boîte.ALT (|META|) chords always work (even in the |TUI|). Map |<M-| with any key: <M-1>, <M-BS>, <M-Del>, <M-Ins>, <M-/>, <M-\>, <M-Space>, <M-Enter>, etc. Case-sensitive: <M-a> and <M-A> are two different keycodes.
Il y a un saut de ligne avant le "sensible à la casse:" la partie, faisant de cette ambigu. Merci pour la correction, @JustinM.Keyes. Aussi, vim 8.1 apparaît pour différencier entre<M-a>
et<M-A>
ainsi.