1

例如,假设我想实现一个插件,该插件使用自定义字符在 80 列处绘制边距线(假设我希望该线由一列*字符组成)。

在 Vim 或 Neovim 中如何做到这一点?

但更一般地说,有没有办法在文本缓冲区上绘制内容而不影响文本内容?

例如,如何在窗口内绘制一个内部矩形,我可以将其设置为明亮的颜色以显示活动窗口?效果将是当前文本缓冲区的第一行可见行将填充---字符,当前文本缓冲区的最右侧列将填充|. 这将在窗口内,与状态线或垂直分割线分开。

等等这样的事情怎么办?

当前以不同方式在文本缓冲区上绘制的一些插件:

4

1 回答 1

2

EasyMotion 不会覆盖文本,我认为这是不可能的。它的作用在以下函数(源代码)中定义:

function! EasyMotion#helper#VarReset(var, ...) "{{{
if ! exists('s:var_reset')
    let s:var_reset = {}
endif

if a:0 == 0 && has_key(s:var_reset, a:var)
    " Reset var to original value
    " setbufvar( or bufname): '' or '%' can be used for the current buffer
    call setbufvar('%', a:var, s:var_reset[a:var])
elseif a:0 == 1
    " Save original value and set new var value

    let new_value = a:0 == 1 ? a:1 : ''

    " Store original value
    let s:var_reset[a:var] = getbufvar("", a:var)

    " Set new var value
    call setbufvar('%', a:var, new_value)
endif
endfunction "}}}

因此它会保存每个替换的字符并在之后恢复它们。我没有看过 indentLine 但它可能会做智能列表字符,因为 indentchar 下从来没有文本。

无论如何,我并不是一般的插件或 vim 专家。我只是写这个答案,因为我认为有更简单的方法来实现你想要的。例如,您可以使用某种颜色突出显示边界线,或更改活动分割的背景。还有一个用于调暗非活动拆分的插件:https ://github.com/blueyed/vim-diminactive

于 2017-02-17T09:28:35.820 回答