gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:50:00 25 4
gpt4 key购买 nike

一直在使用Vim多年来,一直以来我都接受了bright and distracting the visual bell曾是。最近有人给我看Emacs visual bell ,它只闪烁屏幕的顶行和底行。有谁知道如何在 Vim 中重现这种行为?

如果它当前不可配置,有谁知道修补它有多难?我有一些 C有经验但不熟悉codebase.

最佳答案

Vim 和版本

你的问题最大的问题是,这个问题取决于 vim 版本。我所说的 vim 版本不是指版本(7.3...),而是更多,如果您使用的是 MacVim、gVim、终端版本等。
版本很重要,因为 t_vb 参数(输入 :set t_vb? 来获取它)对于不同的 vim 版本是不同的,但我稍后再写。

我正在使用 Ubuntu。在我的终端中,我什至无法产生那些视觉闪烁(可能 Ubuntu 只是忽略了它们,至少这就是正常铃声发生的情况: This program sounds the bell! )。 gVim 不同,视觉钟在那里工作。
Emacs 也是如此。视觉钟(顶线和底线,就像你描述的那样)在 X 版本中工作得非常好。终端版本只是安静。

t_vb 设置

正如一些人所怀疑的那样, 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 显示(删除行、添加行等)。但是如果重新绘制显示,一切都会消失。
这个任务的主要问题是转义序列没有 sleep 序列。您可以尝试插入一条白色的线并将其删除,但这只是快速的方法(我试过了)。

所描述的行为只是 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)

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

关于vim - 如何使vim的visualbell只闪烁顶/底线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com