代码之家  ›  专栏  ›  技术社区  ›  Herbert Sitz

VIM中代码块的全宽背景色突出显示

  •  10
  • Herbert Sitz  · 技术社区  · 15 年前

    我有VIM文档,它们的代码块区域使用“syntax include”区域来突出显示与主文档不同的语法。例如,我在输入python代码时定义了一个名为“pyregion”的语法区域。然后使用python语法文件中的设置突出显示文档的pyregion区域,而区域之外的区域使用主文档的语法文件。

    我想让整个python区域的背景用不同的颜色着色,以将其与文档的非python区域区分开来。我可以通过输入整个python区域的背景来获得部分方法:

    :highlight pyregion guibg=#555555
    

    但是上面的命令只更改带有文本字符的区域的背景,而不是 整个背景 区域的颜色,它似乎仍然像文档的其他部分一样由为“正常”组定义的背景色控制。这是可以的——它确实吸引了人们对该区域的注意,但是它有一个污点的外观,因为只有代码字符本身具有不同的背景,而不是整个屏幕上该区域的整个区域。

    有没有办法在整个区域获得不同背景颜色的统一带,而不仅仅是有字符的区域的一部分?

    下面的链接中有相关的问题和答案,但据我所知,答案也只在有文本的地方更改背景: Highlight Code Block Backgrounds with Vim

    谢谢你的帮助。

    2 回复  |  直到 15 年前
        1
  •  7
  •   DrAl    15 年前

    我不相信没有一个荒谬的预兆这是可能的(见下文)。如果您尝试此操作:

    :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>
    

    免责声明:不要这样做。

        2
  •  3
  •   Fried Sock    12 年前

    是的,可以使用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的第一行,一直到终端的边缘。