【问题标题】:How to set a different colorscheme for each file type in Vim?如何为 Vim 中的每种文件类型设置不同的颜色方案?
【发布时间】:2011-07-07 11:17:26
【问题描述】:

Vim 中,我想为每种文件类型使用不同的颜色方案。

eg 我想对 PythonJavaScript 文件使用 desert256 颜色方案,而对 HTML 使用 jellybeans 颜色方案 & CSS 文件。


我已尝试将以下代码放入我的 .vimrc,但颜色方案更改在第一次更改缓冲区时发生。

ie 如果我打开一个新的 Python 文件,则使用 Python 的颜色方案,并且当我打开一个新的 CSS *buffer*,确实颜色方案更改为 CSS 的颜色方案。但是,改回 Python 的缓冲区并不会改回颜色方案。

我已经使用autocmd WinEnter 尝试在更改窗口(和缓冲区)时实现此规则,但它没有帮助:

autocmd WinEnter,FileType python,javascript colorscheme desert256
autocmd WinEnter,FileType *,html,css        colorscheme jellybeans  " This includes default filetype colorscheme.

我该如何解决这个问题?此外,一个好处是在不需要时不更改颜色方案 - iePython 更改为 JavaScript 缓冲区不会改变“自身”的配色方案。


编辑:

如果有人感兴趣,here is my .vimrc repo in github.com。一旦给出,我将使用我在此处找到的解决方案对其进行更新。

【问题讨论】:

标签: vim


【解决方案1】:

我一直在寻找同样的东西。这在你的 .vimrc 中工作得相当好,虽然并不完美。

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

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

【讨论】:

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

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

来自 vim 帮助页面:

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

为了使用文件类型插件,首先将filetype plugin on 行放在你的vimrc 中。然后在你的vim文件夹中创建文件夹ftplugin(在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。
  • 要设置默认颜色方案,只需在您的 vimrc 文件中设置它。如果我没记错的话,文件类型插件是在你的 vimrc 之后加载的。

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

【讨论】:

  • 你确定这不能在我的.vimrc 上完成吗?我使用 Vundle 插件来避免使用插件特定的文件夹。
  • 另外,我刚试过这个。它不能正常工作。如果我先打开一个 python 文件,然后再打开一个通用文件(例如我的 .vimrc 文件),则语法不会改变。 :(
  • @Ory Band 我找到了一个不同的解决方案,这可能是您想要的。链接放在答案中。
  • 谢谢,我试过设置示例,但没有 cmets 或任何东西,我似乎无法让它工作。我会在那里发表这条评论。但这也不能满足我的要求。不过非常感谢。你真好。
  • 这对我来说非常有用,因为我有一个复杂的 .vimrc 和 autocmds 在我设置了状态行颜色之类的东西之后执行,所以它们把所有东西都搞砸了。因此,在阅读完本文后,我所做的只是:cp ~/.vimrc ~/.vim/ftplugin/python.vim 并更改了我需要为 python 文件和 presto 更改的一行,问题解决了。谢谢。
【解决方案3】:

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

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

希望对你有帮助

【讨论】:

  • +1 用于在命令行上设置它,这是我真正想要的。
【解决方案4】:

使用BufWinEnter 而不是WinEnter,像这样:

autocmd BufWinEnter,FileType javascript colorscheme jellybeans

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2020-07-01
    相关资源
    最近更新 更多