例如,假设我想实现一个插件,该插件使用自定义字符绘制80列的边距线(假设我希望该行由*
个字符列组成。)
如何在Vim或Neovim中完成?
但更一般地说,有没有办法在文本缓冲区上绘制内容而不影响文本内容?
例如,如何在窗口内绘制一个内部矩形,为了显示活动窗口,我可以将其设为鲜艳的颜色?效果是当前文本缓冲区的第一行可见行将填充---
个字符,当前文本缓冲区的最右侧列将填充|
。这将在窗口内,与状态线或垂直分割线分开。
等。怎么做这样的事情?
当前以不同方式绘制文本缓冲区的一些插件:
答案 0 :(得分:2)
EasyMotion不会覆盖文本,我不认为这是可能的。 它的作用在以下函数(sourcecode中定义:
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 "}}}
因此它会保存每个替换的char并在之后恢复它们。 我没有看过indentLine,但它可能会使用智能列表程序,因为在indentchar下根本没有文本。
无论如何,它并不像我是一个插件或vim的专家一般。我只是写这个答案,因为我认为有更简单的方法来实现你想要的。例如,您可以使用特定颜色突出显示边框线,或更改活动拆分的背景。还有一个用于调暗非活动分割的插件:https://github.com/blueyed/vim-diminactive