微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使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命令。我敢打赌,这是可能的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐