如果它目前不是可配置的,有没有人知道它会是多么困难补丁?我有一些C经验,但不熟悉代码库。
你的问题的大问题是,这个问题取决于vim版本。 vim版本我的意思不是版本(7.3 …),但更多如果你使用MacVim,gVim,终端版本等。
版本是重要的,因为t_vb param(类型:set t_vb?)得到它是不同的不同的vim版本,但我后来写。
我使用Ubuntu。在我的终端,我甚至不能产生这些视觉闪光(可能Ubuntu只是忽略了他们,至少那是发生在正常的铃声:This program sounds the bell!)。 gVim是不同的,可视铃在那里工作。
Emacs也是这样。可视铃(顶部和底部线,就像你所描述的)在X版本中工作完全正常。终端版本只是安静。
t_vb设置
正如一些人所怀疑的,t_vb param负责vim中的可视铃。但它看起来不同的终端:
t_vb=^[[?5h$<100/>^[[?5l
和gVim:
t_vb=^[|f
所以我认为MacVim也不一样。
顺便说一下:如果你正在修改铃声,你必须生成^ [with< C-V>随后是< ESC> ;.不要复制上面的字符串,他们不会工作。 t_vb只是一个发送到终端(或gvim)的字符串。您还可以定义t_vb = abcd,它将临时在您的光标处输出abcd。这只是显示魔法,闪光发生因为转义字符。
没有办法与vim通信。然而,您可以修改整个vim显示(删除行,添加行等)。但是如果显示重绘,一切都会消失。
这个任务的主要问题是转义序列没有睡眠序列。你可以尝试插入一个白色的线,并删除它,但这只是方式快速(我试过)。
所描述的行为只是gVim的情况。但我认为其余的可能表现非常相似。然而,如果你的终端/伪终端支持一个转义序列,突出只有一些定义的行数,你将能够做你想要的。
我可能会失望你,但我不认为有一种方式来获得所需的行为,而无需修改vim源(或修改终端软件,我绝对不会推荐)。
如果要根据需要编辑可视铃的行为,您可以随时编辑C文件。我不会推荐它,但它绝对不是不可能。你可以从这里开始:
http://code.google.com/p/vim/source/browse/src/misc1.c#3433
删除“out_str(T_VB);”并插入这样的东西(伪代码):
invert(fist_line) invert(last_line) sleep(100 ms) invert(fist_line) invert(last_line)
睡眠可能是恼人的。但这只是最简单的方法(没有计时器等)。问题是找到这样的反函数。我试图寻找一个命令执行vim脚本,然后尝试找到匹配的vim命令。我敢打赌,这是可能的。