Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何制作vim';s visualbell仅闪烁顶部/底部线条?_Vim - Fatal编程技术网

如何制作vim';s visualbell仅闪烁顶部/底部线条?

如何制作vim';s visualbell仅闪烁顶部/底部线条?,vim,Vim,多年来我一直在使用Vim,而这段时间我只是接受了视觉铃声是多么的明亮和分散注意力。最近有人给我看了Emacs可视铃声,它只会在屏幕的顶部和底部闪烁。有人知道如何在Vim中重现这种行为吗 如果它目前无法配置,有人知道修补它有多困难吗?我有一些C经验,但不熟悉codebase。Vim和版本 您的问题的最大问题是,这个问题取决于vim版本。我所说的vim版本不是指版本(7.3…),而是指如果您使用MacVim、gVim、终端版等,则更多。 这个版本很重要,因为t_vb参数(type:set t_vb?

多年来我一直在使用Vim,而这段时间我只是接受了视觉铃声是多么的明亮和分散注意力。最近有人给我看了
Emacs可视铃声
,它只会在屏幕的顶部和底部闪烁。有人知道如何在Vim中重现这种行为吗

如果它目前无法配置,有人知道修补它有多困难吗?我有一些
C
经验,但不熟悉
codebase。

Vim和版本 您的问题的最大问题是,这个问题取决于vim版本。我所说的vim版本不是指版本(7.3…),而是指如果您使用MacVim、gVim、终端版等,则更多。 这个版本很重要,因为t_vb参数(type
:set t_vb?
来获取它)对于不同的vim版本是不同的,但我稍后会介绍这一点

我在用Ubuntu。在我的终端中,我甚至不能产生这些视觉闪光(可能Ubuntu只是忽略了它们,至少正常的铃声是这样:)。gVim不同,视觉钟在那里工作。 Emacs也是如此。视觉钟(顶部和底部,如您所述)在X版本中工作得非常好。终端版本只是安静的

t_vb设置 正如一些人所怀疑的,t_vb参数负责vim中的可视铃声。但它在终端中看起来不同:

t_vb=^[[?5h$<100/>^[[?5l
所以我认为这对MacVim来说也是不同的

顺便说一句:如果要修改铃声,则必须生成
^[
,后跟
。不要复制上面的字符串,它们将不起作用

t_vb只是一个发送到终端(或gvim)的字符串。您还可以定义t_vb=abcd,它将在光标处临时输出abcd。这只是显示魔术,闪烁是因为转义字符。 无法与vim通信。但是,您可以修改整个vim显示(删除行、添加行等)。但是,如果重新绘制显示,所有内容都将消失。 此任务的主要问题是转义序列没有睡眠序列。您可以尝试插入一行白色并删除它,但这只是快速的方法(我尝试过)

所描述的行为只是gVim的情况。但我认为其余的行为可能会非常类似。但是,如果您的终端/伪终端支持只突出显示某些定义的行数的转义序列,那么您将能够执行您想要的操作

我可能会让您失望,但我不认为有办法在不修改vim源代码(或修改终端软件,我绝对不推荐)的情况下获得您想要的行为

修改原始源代码 如果您想编辑visual bell的行为,您可以随时编辑C文件。我不推荐这样做,但这绝对不是不可能的。您可以从这里开始:

删除“out_str(T_VB);”并插入如下内容(伪代码):


睡眠可能很烦人,但这只是最简单的方法(没有计时器等)。问题是找到这样一个反转函数。我会尝试寻找一个执行vim脚本的命令,然后尝试找到一个匹配的vim命令。我打赌这是可能的。

不是直接的答案,但通常可以在终端设置中关闭可视铃声。是的,我知道
:set novisualbell
,但这给了我一个udio铃声同样令人分心。还有一个设置
完全关闭铃声,但我确实想要某种铃声。@Wang:这个设置是
tþu vb
,我怀疑这是您最终必须修改的。它包含发送到终端以使闪烁发生的字符串。@Wang:Speakin其中,这是终端敏感的。你能做一个
设置t\u vb吗?
并报告在你希望它工作的环境中运行的vim的结果吗?这样我们就知道你希望它工作的终端是什么。出于兴趣,你在做什么,经常触发视觉铃声?我几乎看不到它。关于你的“沉默”Ubuntu,您可以通过/etc/termcap中的“vb”变量调整默认设置
t_vb=^[|f
invert(fist_line)
invert(last_line)
sleep(100 ms)
invert(fist_line)
invert(last_line)