Vim在我的自定义语法之后加载系统语法,因此没有应用我的自定义语法

Vim在我的自定义语法之后加载系统语法,因此没有应用我的自定义语法,vim,vim-plugin,Vim,Vim Plugin,我在ubuntu 12.04的~/.vim/syntax文件夹中有一个javascript语法文件,但当我在vim is中打开一个.js文件时,会使用系统语法: 输出:脚本名 1: /usr/share/vim/vimrc 2: /usr/share/vim/vim73/debian.vim 3: /usr/share/vim/vim73/syntax/syntax.vim 4: /usr/share/vim/vim73/syntax/synload.vim 5: /usr/

我在ubuntu 12.04的~/.vim/syntax文件夹中有一个javascript语法文件,但当我在vim is中打开一个.js文件时,会使用系统语法:

输出:脚本名

  1: /usr/share/vim/vimrc
  2: /usr/share/vim/vim73/debian.vim
  3: /usr/share/vim/vim73/syntax/syntax.vim
  4: /usr/share/vim/vim73/syntax/synload.vim
  5: /usr/share/vim/vim73/syntax/syncolor.vim
  6: ~/.vim/filetype.vim
  7: /usr/share/vim/vim73/filetype.vim
  8: /usr/share/vim/vim73/plugin/getscriptPlugin.vim
  9: /usr/share/vim/vim73/plugin/gzip.vim
 10: /usr/share/vim/vim73/plugin/matchparen.vim
 11: /usr/share/vim/vim73/plugin/netrwPlugin.vim
 12: /usr/share/vim/vim73/plugin/rrhelper.vim
 13: /usr/share/vim/vim73/plugin/spellfile.vim
 14: /usr/share/vim/vim73/plugin/tarPlugin.vim
 15: /usr/share/vim/vim73/plugin/tohtml.vim
 16: /usr/share/vim/vim73/plugin/vimballPlugin.vim
 17: /usr/share/vim/vim73/plugin/zipPlugin.vim
 18: ~/.vim/syntax/javascript.vim
 19: /usr/share/vim/vim73/syntax/javascript.vim

如何将自定义语法应用于*.js文件?

将语法文件放置在适当的位置,即
~/.vim/syntax/javascript.vim
。系统语法文件显示其源代码的原因。但是,文件中的前几行检查是否有其他语法文件来源。由于已经设置了当前语法,因此系统语法文件将不执行任何操作而退出

因此,自定义的一个是第一个来源(并已应用其所有突出显示)。然后是系统一。这就是为什么在
:scriptnames


因此,为了让vim应用自定义语法规则,您无需执行任何操作,因为所有文件都位于正确的位置。

在我的
../vim73/syntax/javascript.vim中,我在开头看到了以下代码:

if !exists("main_syntax")
  if version < 600
    syntax clear
  elseif exists("b:current_syntax")
    finish
  endif
  let main_syntax = 'javascript'
endif
我建议在自定义语法文件的末尾添加
let b:current_syntax=“javascript”
。事实上,我认为check
存在于syntax目录中的许多文件中(“b:current_syntax”)
,因此您可能也应该在开始时添加一个check:

if exists("b:current_syntax")
    finish
endif

这是我正在使用的自定义语法文件:,并且它有。我是否需要重新启动服务器或其他东西才能使其生效?不,不需要重新启动。您确定您的自定义语法没有被实际使用吗?您仍然会看到它加载最后一个,即使它所做的只是立即完成。假设您有root,我会尝试将最后一个移到一边,以确认没有它会发生一些不同的情况。是什么让您认为自定义语法设置不正确?您是对的。两种语法使用几乎完全相同的配色方案,所以我认为它不起作用
if exists("b:current_syntax")
    finish
endif