如何在默认语法中停止vim读取?

如何在默认语法中停止vim读取?,vim,vim-syntax-highlighting,Vim,Vim Syntax Highlighting,我已经定义了自己的javascript语法文件,它位于~/.vim/syntax/after中/ 问题是/usr/share/vim/vim82/syntax中存在的默认语法文件与我的自定义语法文件一起加载(它似乎在我的自定义语法之前加载) 结果是它与我的自定义语法冲突 如何仅加载自定义语法文件?不是默认的 当然,我可以删除默认的一个(可以正常工作),但考虑到它将在vim更新时被放回那里,这似乎不是一个非常健壮的问题解决方案 我在自定义文件的顶部有“语法清除”,但它没有帮助 我还注意到,默认语法

我已经定义了自己的javascript语法文件,它位于~/.vim/syntax/after中/

问题是/usr/share/vim/vim82/syntax中存在的默认语法文件与我的自定义语法文件一起加载(它似乎在我的自定义语法之前加载)

结果是它与我的自定义语法冲突

如何仅加载自定义语法文件?不是默认的

当然,我可以删除默认的一个(可以正常工作),但考虑到它将在vim更新时被放回那里,这似乎不是一个非常健壮的问题解决方案

我在自定义文件的顶部有“语法清除”,但它没有帮助

我还注意到,默认语法文件的顶部有以下内容:

  if !exists("main_syntax")
    " quit when a syntax file was already loaded
    if exists("b:current_syntax")
      finish
    endif
    let main_syntax = 'javascript'
  elseif exists("b:current_syntax") && b:current_syntax == "javascript"
    finish
  endif
但这也没什么用

我还尝试将syntax文件夹放入.vim/syntax,正如官方vim页面上所建议的那样,但这似乎没有任何作用(如中所示,它根本不被读取)


谢谢。

原则上,语法脚本的来源顺序如下:

~/.vim/syntax/foo.vim
$VIMRUNTIME/syntax/foo.vim
~/.vim/after/syntax/foo.vim
~/.vim/after/syntax/
排在最后。如果您编写的是一个内置语法脚本的完全替换,那么这不是一个好地方,因为在您之前至少有一个语法脚本。另一方面,如果您想添加自己的内容或选择性地覆盖先前设置的内容,那么这是一个好地方

$VIMRUNTIME/syntax/
也不是一个好地方,因为它是一个全系统的位置。您的定制应该发生在您的
$HOME
,对吗

~/.vim/syntax/
排在第一位,因此如果添加以下行,它是自定义语法脚本的理想位置:

let b:current_syntax = "javascript"
这是因为
$VIMRUNTIME/syntax/javascript.vim
以以下样板文件开头:

if !exists("main_syntax")
  " quit when a syntax file was already loaded
  if exists("b:current_syntax")
    finish
  endif
  let main_syntax = 'javascript'
elseif exists("b:current_syntax") && b:current_syntax == "javascript"
  finish
endif
如果设置了
b:current_syntax
,并以以下内容结束,则基本上会导致失败:

let b:current_syntax = "javascript"
“标记其领土”,如果你愿意的话

您不必检查任何东西,因为您是第一位的,但您仍然必须告诉其他语法脚本别管闲事

请注意,不礼貌的语法脚本可能不会检查缓冲区局部变量,因此即使您做的是正确的事情,也完全有可能仍然存在冲突。但这就是Vim的本质