如何使vim的visualbell只闪烁顶/底线?

前端之家收集整理的这篇文章主要介绍了如何使vim的visualbell只闪烁顶/底线?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
已经使用Vim多年了,这整个时间我只是接受了如何明亮和分心的视觉铃声。最近有人向我展示了Emacs的视觉效果,它只能闪烁屏幕的顶部和底部。有没有人知道如何重现这种行为在Vim?

如果它目前不是可配置的,有没有人知道它会是多么困难补丁?我有一些C经验,但不熟悉代码库。

Vim和版本

你的问题的大问题是,这个问题取决于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&gt ;.不要复制上面的字符串,他们不会工作。 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命令。我敢打赌,这是可能的。

猜你在找的Bash相关文章