如何在Vim中为每种文件类型设置不同的colorscheme?

Ory*_*and 35 vim

Vim中,我想为每种文件类型使用不同的colorscheme.

例如,我想将desert256colorscheme用于PythonJavaScript文件,并将jellybeanscolorscheme用于HTMLCSS文件.


我已经尝试将以下代码放入我的中.vimrc,但只有在第一次更改缓冲区时才会发生colorscheme更改.

如果我打开一个新的Python文件,就会使用Python的colorscheme,当我打开一个新的CSS*buffer*时,colorscheme确实会改变CSS的colorscheme.但是,更改回Python的缓冲区不会改变colorscheme.

我曾经autocmd WinEnter尝试在更改窗口(和缓冲区)时使这个规则发生,但它没有帮助:

autocmd WinEnter,FileType python,javascript colorscheme desert256
autocmd WinEnter,FileType *,html,css        colorscheme jellybeans  " This includes default filetype colorscheme.
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?此外,奖励是在不需要时不更改colorscheme - Python更改为JavaScript缓冲区不会将colorscheme更改为"本身".


编辑:

如果有人有兴趣,这是我.vimrc在github.com的回购.我会用我在这里找到的解决方案更新它.

Use*_*ser 25

我一直在寻找同样的事情.你的.vimrc内部工作得相当好,虽然不完美.

autocmd BufEnter * colorscheme default
autocmd BufEnter *.php colorscheme Tomorrow-Night
autocmd BufEnter *.py colorscheme Tomorrow
Run Code Online (Sandbox Code Playgroud)

(注意,如果你正在寻找一个好的深色主题明天 - 夜晚看起来很不错.非常类似于Code Academy使用的主题.)

  • 这确实有效,但只是部分解决方案。例如,如果我使用“solarized”主题,它会切换到浅色方案,而不是我默认的深色方案。我想如果我们将您的解决方案与调用应该设置其他一些内容的自定义用户定义函数结合起来,然后调用“colorscheme ..”,我们可以找到一个很好的解决方案。然而,我很久以前就放弃了尝试这样做,所以我不会真正尝试这样做。:) 不过还是感谢您的解决方案! (2认同)

cle*_*oux 18

你想要的是filetype插件,而不是autocmds.help: ftplugin在vim中运行以获取更多信息.

从vim帮助页面:

文件类型插件类似于全局插件,除了它设置选项并仅为当前缓冲区定义映射.

要使用filetype插件,首先将该行filetype plugin on放在vimrc中.然后ftplugin在你的vim文件夹中创建文件夹(在unix上~/.vim/,我不熟悉windows).然后为要自定义的每种文件类型创建一个脚本文件.必须以特定方式命名这些文件.从vim帮助页面:

文件类型插件的通用名称是:
ftplugin/filetype.vim
ftplugin/filetype_name.vim
ftplugin/filetype/name.vim

因此,例如,如果我想为python文件创建脚本,我将有三个选项:

  1. 在ftplugin中创建一个名为python.vim的文件
  2. 在ftplugin中创建一个名为python_whatever.vim的文件
  3. 在ftplugin/python中创建一个名为whatever.vim的文件

每当我打开vim识别为python文件的文件时,都会加载此脚本.

所以,为了实现你想要的:

  • 在ftplugin目录中为您想要的每种文件类型创建一个名为filetype.vim的文件.
  • 在每个文件中,添加该行 colorscheme name_of_colorscheme
  • 添加filetype plugin on到您的vimrc.
  • 要设置默认的colorscheme,只需将其设置在vimrc文件中即可.如果我没记错的话,你的vimrc后面会加载filetype插件.

编辑:OP表示他有充分的理由避免使用ftplugin目录.经过一点点挖掘后,我找到了这个脚本. 它可以放在全局vimrc中,似乎旨在解决与OP相同的问题.