将不同的颜色方案应用于不同的窗口

时间:2010-12-28 03:20:13

标签: vim

我想为不同的文件类型使用不同的colorschemes,我在.vimrc中添加了以下代码

function SetColorScheme ()
  if &filetype != "vo_base"
    colorscheme desertEx 
  endif
endfunction 
au WinEnter * call SetColorScheme()

这适用于一个问题。

如果我打开.otl文件,说todo.otl(vo_base),然后打开另一个文件,比如example.xml,使用:sp colorscheme desertEx不会应用于第二个窗口(具有示例的那个)。 XML)。

如果我使用BufEnter而不是WinEnter而不是使用desertEx来应用于两个窗口。

有没有办法确保当我打开一个窗口时:sp上面的函数(a)运行,(b)只运行该特定窗口而不是当前会话中的所有窗口。

2 个答案:

答案 0 :(得分:4)

不,没有办法做到这一点。在vim中,同时只能有一个活动的colorscheme。

答案 1 :(得分:1)

想到的是创建一个直接指向Vim语法文件中的低级语法组的颜色方案。

例如c.vim用于C编程语言。您将找到例如语法高亮组,例如:cStatement,cLabel,cConditional,cType ..等。

使用python.vim,你会发现pythonDefStatement,pythonFunction,pythonConditional等。

因此,如果你想为C代码和python使用不同的颜色方案,你可以将两个原始颜色方案复制到〜/ .vim / colors / mycolorscheme.vim并编辑它们以指向低级语法组而不是在许多可用颜色方案中找到的通用高级组,例如注释,常量,错误,标识符等。

请注意,您可能希望在其他两个语句之上保留“highlight”语句的默认节,以处理既不包含C也不包含python代码的文件的语法突出显示。

为了澄清,您可以编辑着名的“Hello World”代码并从Vim命令行发出以下命令:

:hi cInclude ctermfg=cyan guifg=cyan

您没有更改配色方案,其他窗口或标签中显示的其他文件不受影响,但“#include”现在以不同的颜色显示。

除非你绝对需要这个功能,否则我会反对它,因为它几乎打破了Vim的语法高亮。此外,转换原始配色方案中包含的现有':hi'语句需要大量工作,因为通常会有许多低级语法高亮组。

更好的方法可能是将特定于语言的低级别组别与每种语言特定的高级别组别联系起来。这有助于保持自定义颜色方案文件相当小,但需要额外的库存工作。