Ctrl + TAB ne fonctionne pas dans vim avec gnome-terminal

3

J'ai un problème grave. Généralement, l'éditeur que j'utilise est vim, bien que je ne puisse pas mapper l'action ctrl + tabulation. Je veux changer d'onglet avec Ctrl + Tab (Ctrl + Maj + Tab). Dans xterm, ce mappage est activé et l'action sera utilisée. Mais, dans gnome-terminal, la séquence d'échappement est apparue. Dites-moi comment changer d’onglet dans vim avec gnome-terminal.

cantabile_hisa
la source

Réponses:

6

En raison de la manière dont l’entrée au clavier est gérée en interne, ceci n’est malheureusement pas généralement possible aujourd’hui, même dans GVIM. Certaines combinaisons de touches, telles que Ctrl+ non alphabétique ne peuvent pas être mappées, et Ctrl+ lettre contre Ctrl+ Shift+ lettre ne peuvent pas être distinguées. (À moins que votre terminal n'envoie un code termcap distinct , ce qui n'est généralement pas le cas.) En mode insertion ou en ligne de commande, essayez de saisir la combinaison de touches. Si rien ne se passe / 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 point douloureux connu et de diverses discussions sur vim_dev et le canal IRC #vim.

Certaines personnes (principalement Paul LeoNerd Evans) veulent résoudre ce problème (même pour la console Vim dans les terminaux prenant en charge cette fonctionnalité) 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 n’a encore été annoncé, bien que beaucoup aient exprimé le souhait d’avoir cela dans une prochaine version majeure de Vim 8.

Ingo Karkat
la source
3

Le problème est que dans un terminal, un Tabcaractère est ^I( Control- I). Cela signifie que presser contrôle tout en appuyant sur tabulation n'est pas quelque chose que le terminal ne veut même pas transmettre à Vim. [1] Il envoie simplement un caractère de tabulation normal.

GVim peut prendre cela en charge car il n’a pas à compter sur le terminal pour lui dire quelles touches sont enfoncées dans quelle combinaison - il dispose d’un accès plus direct aux événements de clavier, de sorte qu’il n’a aucun problème à voir les touches spéciales modifiées.

Je vous suggère de trouver une clé différente à mapper afin que vous puissiez avoir une cohérence.

[1] D'après ce que j'ai compris, avec les émulateurs de terminaux "modernes", ce n'est plus vrai, mais cela a été vrai depuis si longtemps qu'il reste un énorme obstacle à surmonter, car la bibliothèque de terminaux utilisée par Vim (Ncurses) ne fonctionne même pas. gérer cet événement. Ainsi, même si techniquement, le terminal peut le prendre en charge, Vim ne le peut pas, car l'API de bibliothèque sur laquelle il s'appuie ne le peut pas. Une fois par an environ, la liste des développeurs de Vim discutait sérieusement de la résolution de ce problème par différents moyens, notamment le passage à une API plus performante, mais rien n’en est jamais venu.

Heptite
la source
1
Cela reste vrai pour la plupart des émulateurs de terminaux - ni xterm, ni gnome-terminal (vte), ni urxvt, ne manipulez Ctrl + Tab différemment de Tab.
Grawity
0

La réponse la plus proche que j'ai pour cela est de créer Leader+ Tabet Leader+ Shift+Tab

map <leader><Tab> :bnext<cr>
map <leader><S-Tab> :bprevious<cr>

J'ai mappé mon Leaderà ,(virgule), donc c'est en tapant ,+Tab

Cependant, ils ne fonctionnent pas très bien. Vous ne pouvez pas rester Leaderenfoncé et continuer à frapper Tabpour faire défiler les onglets. Ce n'est pas non plus le comportement du MRU (utilisé le plus récemment).

Pour plus de précision, j'utilise des "tampons" au lieu de "pages à onglets", car je trouve que ces cartes correspondent beaucoup mieux au concept de ce que les autres éditeurs utilisent pour les onglets.

Au lieu de cela, vous pouvez essayer ce qui suit:

map <leader><Tab> :b<Space>

Ceci ouvre la commande ex et vous pouvez ensuite appuyer sur Tabpour commencer à faire défiler les tampons. Vous pouvez également utiliser et pour aller et venir.

Avec cette approche, vous pouvez également commencer à taper la partie d'un tampon ouvert, puis appuyer sur Tabpour parcourir la liste filtrée des tampons ouverts.

Personnellement, je mappe Leader+ Tabpour obtenir le comportement de base de MRU:

map <leader><Tab> :b#<cr>
icc97
la source