32 votes

Comment faire en sorte que Visualbell de Vim affiche uniquement les lignes haut / bas?

J'utilise Vim depuis des années et depuis tout ce temps, je viens juste d'accepter comment bright and distracting the visual bell était. Récemment, quelqu'un m'a montré le Emacs visual bell , qui ne fait clignoter que les lignes supérieure et inférieure de l'écran. Est-ce que quelqu'un sait comment reproduire ce comportement dans Vim?

Et si ce n'est pas actuellement configurable, est-ce que quelqu'un sait à quel point il serait difficile de corriger cela? J'ai quelques C expérience mais aucune connaissance du codebase.

3voto

Dave Halter Points 3204

Vim et versions

Le gros problème avec vous la question, c'est que cette question dépend de la vim version. Par vim version je ne parle pas de la version (7.3...), mais beaucoup plus si vous utilisez MacVim, gVim, le terminal de l'édition, etc. La version est importante, parce que le t_vb param (type :set t_vb? pour l'obtenir) est différente pour les différentes versions de vim, mais je écrire à ce sujet plus tard.

J'utilise Ubuntu. Dans mon terminal, je ne suis même pas en mesure de produire ces visuels clignote (probablement Ubuntu juste les ignore, au moins, c'est ce qui s'est vraiment passé à la normale bell: Ce programme, les sons de la cloche!). gVim est différent, le visual bell est d'y travailler. Le même se passe avec Emacs. Le visual bell (haut et bas de lignes, comme vous l'avez décrit) fonctionne parfaitement bien dans la version de X. Le terminal version est juste calme.

t_vb paramètres

Comme certains l'ont soupçonné, le t_vb param est responsable de l'aspect visuel de bell dans vim. Mais il est différent dans le terminal:

t_vb=^[[?5h$<100/>^[[?5l

et gVim:

t_vb=^[|f

Donc, je pense que ce serait différent pour MacVim, trop.

En passant: Si vous modifiez la cloche, vous pouvez générer le ^[ V + . Ne copiez pas les chaînes ci-dessus, ils ne fonctionneront pas.

t_vb est rien d'autre qu'une chaîne de caractères, qui est envoyé à la borne (ou gvim). Vous pouvez également définir t_vb=abcd, qui serait sortie de abcd au curseur. Mais pas permanent. C'est juste l'affichage de la magie, les éclairs se produisent en raison de caractères d'échappement. Il n'y a aucun moyen de communiquer avec vim. Vous pouvez toutefois modifier l'ensemble de vim (affichage à supprimer des lignes, ajouter des lignes, etc). Mais si l'écran est redessiné, tout aura disparu. Le principal problème avec cette tâche, c'est que les séquences d'échappement de ne pas avoir un sommeil de séquence. Vous pourriez essayer d'insérer une ligne avec la couleur blanche et l'enlever, mais c'est juste moyen à rapide (j'ai essayé).

Le comportement décrit est seulement le cas pour gVim. Mais je pense que le reste va probablement se comporter de manière très simlar. Toutefois, si votre terminal / pseudo terminal prend en charge une séquence d'échappement, qui ne met en évidence qu'un certain nombre de lignes, vous pouvez être en mesure de faire ce que vous voulez.

Je risque de vous décevoir, mais je ne pense pas qu'il y est un moyen d'obtenir le comportement que vous voulez, sans modifier la source vim (ou de la modification d'un logiciel de terminal, qui, je n'hésiterais pas à recommander).

Modification du code source d'origine

Si vous souhaitez modifier le comportement de l'visual bell comme vous le souhaitez, vous pouvez toujours modifier le C fichiers. Je ne le recommande pas, mais ce n'est certainement pas impossible. Vous pourriez commencer ici:

http://code.google.com/p/vim/source/browse/src/misc1.c#3433

Supprimer "out_str(T_VB);" et d'y insérer quelque chose comme ceci (pseudo-code):

invert(fist_line)
invert(last_line)
sleep(100 ms)
invert(fist_line)
invert(last_line)

Le sommeil pourrait être gênant. Mais c'est juste la façon la plus simple (Pas de minuteries, etc.). Le problème serait de trouver une telle fonction d'inversion. Je vais essayer de chercher une commande qui exécute vim-script et ensuite essayer de trouver un correspondant de commandes de vim. Je parie que ce serait possible.

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