2010-09-15 133 views
9

我有Vim文档,其代码区使用'语法包括'区域,从主文档中具有不同的语法高亮显示。例如,我有一个名为'pyregion'的语法区域定义了我在输入Python代码时使用的区域。然后使用Python的语法文件中的设置突出显示文档的pyregion区域,而区域之外的区域使用主文档的语法文件。Vim中代码块的全宽背景色突出显示

我想让Python区域中的整个背景变成不同的颜色以区别于文档的非Python区域。

:highlight pyregion guibg=#555555 

但上面的命令更改背景仅适用于有文本字符的区域,而不是对的整个背景:我可以通过输入背景整个Python区域获得一部分的方式有区域,该区域似乎仍然像文档的其余部分一样由“正常”组定义的背景颜色进行管理。这没关系 - 它确实吸引了人们对该地区的关注,但它的外观很斑斑,因为只有代码字符本身具有不同的背景,而不是整个屏幕上的整个区域。

是否有某种方法可以在整个区域获得不同背景颜色的均匀带,而不仅仅是有字符的区域的一部分?

有相关的问题,并在下面的链接的答案,但到目前为止,我可以告诉大家,答案也改变背景只有在有文字: Highlight Code Block Backgrounds with Vim

感谢您的帮助。

回答

7

我不认为这是可能的没有一个荒谬的bodge(见下文)。如果你试试这个:

:match Error /\%3l/ 

它强调什么的Vim认为是整条生产线3的唯一突出延伸到人物的结束。这让我怀疑没有办法突出显示不存在的字符。


立即停止阅读。

纯粹作为一个荒谬的练习,你当然可以在每一行的末尾添加大量的空格,然后在你保存时删除它们。这将是愚蠢的,但这是我能想到的唯一的事情。

" Add spaces to the end of every line (you could also do 
" this selectively for lines that don't already have lots 
" of spaces and you could do it on reading a file or whatever) 
:exe '%s/$/' . repeat(' ', 1000) . '/' 
" Automatically remove spaces at the end of every line when saving 
:autocmd BufWritePre %s/ *$// 
" Make 'A' append at the end of the non-space characters on the line 
:nmap A/*$<CR>i 
" Make '$' go to the end of the non-space characters on the line 
:nmap $ /.\? *$<CR> 

声明:不要这样做。

+0

Al - 谢谢,我正在弄清楚,这只是Vim的一个限制,它比接受反击更聪明。从我在vim usergroups上发布的查询中得到了类似的答案。当我知道没有理想的方式来获得我想要的东西时,接受它会容易些。 – 2010-09-16 15:37:49

3

是的,你可以使用sign命令来做到这一点。

http://vimdoc.sourceforge.net/htmldoc/sign.html

sign define 1 linehl=Error 
sign place 1 name=er1 line=1 file=file.txt 

将突出file.txt的第一行中的所有的方式给所述终端的边缘。