我多年来一直使用Vim
编辑器,一直觉得其 视觉提示
过于亮丽和分散注意力。最近有人向我展示了Emacs 视觉提示
,它只会闪烁屏幕的顶部和底部行。有没有人知道如何在 Vim 中实现这种效果?
如果目前还不能配置,有没有人知道将其修改的难度?我具备一些C
编程经验,但并不熟悉 Vim 的源代码库
。
我多年来一直使用Vim
编辑器,一直觉得其 视觉提示
过于亮丽和分散注意力。最近有人向我展示了Emacs 视觉提示
,它只会闪烁屏幕的顶部和底部行。有没有人知道如何在 Vim 中实现这种效果?
如果目前还不能配置,有没有人知道将其修改的难度?我具备一些C
编程经验,但并不熟悉 Vim 的源代码库
。
你的问题的大问题是,这个问题取决于vim的版本。我所指的vim版本不是版本号(7.3...),而是你是否使用MacVim、gVim、终端版等等。
版本很重要,因为不同vim版本的t_vb参数(输入:set t_vb?
查看)是不同的,但我稍后会详细介绍。
我正在使用Ubuntu。在我的终端中,我甚至无法产生那些视觉闪烁(可能Ubuntu只是忽略了它们,至少对于普通的铃声是这样的:This program sounds the bell!)。gVim不同,在那里视觉铃声可以正常工作。 Emacs也是一样的。在X版本中,视觉铃声(顶部和底部的线,就像你描述的那样)可以完美地工作。终端版本则是静音的。
正如一些人怀疑的那样,t_vb参数负责vim中的视觉铃声。但在终端中它看起来有所不同:
t_vb=^[[?5h$<100/>^[[?5l
以及gVim:
t_vb=^[|f
所以我认为MacVim也会有所不同。
顺便说一下:如果您要修改铃声,必须使用<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)
:set novisualbell
,但那会发出同样令人分心的声音提示。还有一个t_??
的设置可以完全关闭提示音,但我确实需要某种提示音。 - Wangt_vb
,我猜这最终是你必须修改的。它包含了发送到终端使闪烁发生的字符串。 - Conspicuous Compilerset t_vb?
命令并报告在你希望此命令生效的 vim 环境中的结果?这样我们就可以知道你需要哪种终端。 - Conspicuous Compiler