web-dev-qa-db-fra.com

Mappages Gnome-terminal + Vim et Ctrl-Shift

Est-il possible de mapper une séquence avec Ctrl-Shift dans le terminal Gnome?

J'essaie d'ajouter les correspondances

  • map <C-S-[> gT
  • map <C-S-]> gt

et ça ne marche pas. Comment faire ça?

D'une manière ou d'une autre, j'ai mappé <C-S-]>, mais il s'est avéré que ce n'est pas <C-S-]>, mais <C-]>, il semble donc qu'il ne reconnaît pas Shift dans cette séquence. C'est mal configuré ou c'est la faute de gnome-terminal?

Outre. Le mappage <C-[>, après avoir appuyé sur, ressemble à vim est en attente. Je suppose que le délai de mappage est dépassé, mais comment se débarrasser de ce délai lorsque j'appuie sur <C-[> et que je ne souhaite appuyer sur rien d'autre?

Je viens juste de commencer à apprendre vim, donc désolé s'il y a quelque chose qui cloche dans ces correspondances.

9
Simon

Je pense que le problème ici est que vous essayez de faire en sorte que vim, qui s'attend à être exécuté dans un terminal, reconnaisse une séquence CTRL-SHIFT. Bien qu'il soit possible pour X de reconnaître de telles combinaisons, les applications qui s'exécutent dans un terminal (ou, de nos jours, un émulateur de terminal) ne le peuvent pas. En effet, historiquement, les terminaux ne pouvaient envoyer et recevoir que des séquences de sept ou huit bits de données ASCII via une connexion série (bien que cela puisse inclure des "séquences d'échappement" positionnant le curseur, le défilement ou la suppression de lignes). , changez de couleur et d’autres effets utiles).

Il y a 32 "Codes de contrôle" dans le jeu de caractères ASCII, y compris les familiers CTRL-A à CTRL-Z. Mais il n'y a pas de codes ASCII correspondants pour "CTRL-SHIFT" de Z à Z. Maintenant, gnome-terminal lui-même peut reconnaître ces codes (CTRL-SHIFT-V, par exemple, collera du texte dans le presse-papiers). , mais vim ne pourra pas y accéder directement.

Bien sûr, il est peut-être possible (je ne sais pas) de configurer un émulateur de terminal pour convertir les appuis sur les touches CTRL-MAJ en une séquence d'échappement pouvant ensuite être reconnue par un mappage vim.

=======

MISE À JOUR

Vous pourriez être intéressé par gvim, qui est une version graphique de vim qui fonctionne comme un programme X plutôt que comme un programme terminal. Peut-être que gvim sera capable de comprendre les codes CTRL-SHIFT?

7

Semble être un problème avec le terminal GNOME qui ne permet pas certaines combinaisons avec le Ctrlclé. La recherche en ligne montre beaucoup de cas de cela.

Juste au cas où vous ne le sauriez pas, Ctrl+page up/page down passe en revue les onglets.

4
stschn

Comme Bartleby a souligné , il s’agit d’une restriction de terminal, car vi considère que les codes de clé sont identiques.

Pour les terminaux tels que xterm, vous pouvez changer cela. Pour gnome-terminalqui ignore les paramètres de ressources X , je ne sais pas comment procéder:

Cette SO question couvre le même sujet et cet exemple montre ce qui est utilisé pour mapper plusieurs clés dans le fichier .Xresources. Par exemple.:

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")  

Maintenant, nous avons différentes séquences de touches entrant dans vi pour Ctrla contre. CtrlShiftaCtrlb contre. CtrlShiftbCtrlf contre. CtrlShiftf.

Nous pouvons maintenant les mapper différemment dans ~/.vimrc:

map <ESC>[66;5u   :echo "ctrl-shift-b received"<CR>
map <ESC>[70;5u   :echo "ctrl-shift-f received"<CR>
map <C-b>         :echo "ctrl-b received"<CR>
map <C-f>         :echo "ctrl-f received"<CR>
3
cfi

Dans gnome-terminal, les séquences d'échappement générées par les touches ne sont pas configurables. Pour beaucoup de clés Ctrl+key et Shift+Ctrl+key générer des séquences différentes; malheureusement pour [ et ] ils ne le font pas, donc vous ne pouvez pas les distinguer.

1
egmont

Il semble que vous deviez simplement désactiver tous les raccourcis clavier dans gnome-terminal.

1
beinvisible