2017-02-16 38 views
1

例如,假设我想实现一个使用自定义字符在80个柱面绘制限制线的插件(假设我想要从*个字符)。在Vim/NeoVim中,如何在不修改内容的情况下绘制文本缓冲区

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

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

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

等等如何做这样的事情?

,目前上绘制文本缓冲区以不同的方式有些插件:

+0

将“设置colorcolumn = 80”作为代替吗?请参阅':h'cc'' –

回答

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,但它可能会做智能listchars,因为从来没有indentchar下的文本。

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

+0

我想我喜欢vim,但希望它在GUI绘图能力方面更具现代感。也许我们会在20年后这样做。 – trusktr

+0

我非常喜欢vim的分心免费功能。我想大多数时候我都希望获得一些GUI功能,因为我使用vim是错误的(我不想说这是你的问题),并且需要很长时间才能适应它,而且我还有很长的路要走=)。但部分原因是,我们习惯了这么多的文本编辑器,它们正在做的事情“错误/不是vim的方式”。如果我们开始使用vim,那就太好了。 –

+0

确实如此,但基本的UI风格是基于文本的UI无法实现的。在GUI中,绘制诸如缩进指南等有用的东西非常容易(vim插件是效果不佳的小插件),具有有用着色和符号的小图,以及基于文本的用户界面中无法实现的其他功能,而这并不一定是使用Vim的缺点。即使是Vim的大师,像小地图这样的东西对于那些视觉非常好的人来说仍然是有用的。 – trusktr

相关问题