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

时间:2011-03-02 17:32:51

标签: vim

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

例如我想将desert256 colorscheme用于 Python & JavaScript 文件,并使用{em> HTML &的jellybeans colorscheme CSS 文件。


我已尝试在我的.vimrc中添加以下代码,但在第一次更改缓冲区时,colorscheme更改仅发生

ie 如果我打开一个新的 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.

我该如何解决这个问题?此外,奖励是在不需要时不改变colorscheme - Python 更改为 JavaScript 缓冲区不会改变colorscheme为“本身”。


编辑:

如果有人有兴趣,here is my .vimrc repo in github.com。我会用我在这里找到的解决方案更新它。

4 个答案:

答案 0 :(得分:25)

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

autocmd BufEnter * colorscheme default
autocmd BufEnter *.php colorscheme Tomorrow-Night
autocmd BufEnter *.py colorscheme Tomorrow

(请注意,如果你正在寻找一个好的深色主题Tomorrow-Night看起来很不错。非常类似于Code Academy上使用的主题。)

答案 1 :(得分:18)

你想要的是文件类型插件,而不是autocmd。在vim中运行help: ftplugin以获取更多信息。

从vim帮助页面:

  

文件类型插件就像一个全局插件,除了它设置选项和   仅定义当前缓冲区的映射。

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

  

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

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

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

    随后我打开vim识别为python文件的文件时,将加载此脚本。

    所以,为了达到你想要的目的:

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

    编辑: OP表示他有充分的理由避免使用ftplugin目录。经过多次挖掘后,我发现this script.它可以放在全局vimrc中,似乎是为了解决与OP相同的问题。

答案 2 :(得分:4)

我有一个你可能喜欢的黑客。它远非完美,它不使用.vimrc,但它适用于我。它要求您键入不同的命令来编辑不同的文件。调用gvim时,它使用-c参数。此参数允许您在加载文件后运行vim命令。将它添加到你的〜/ .bashrc(我想你正在使用bash):

alias gpy="gvim -c 'colorscheme desert'"
alias gcs="gvim -c 'colorscheme jellybeans'"

希望这有帮助

答案 3 :(得分:1)

使用BufWinEnter代替WinEnter,如下所示:

autocmd BufWinEnter,FileType javascript colorscheme jellybeans