我如何知道正在使用什么语法文件?

Edw*_*ang 70 vim

Vim 以一种有趣的方式突出显示我的文件的语法,我想知道哪个语法文件负责这种行为。如何找出 vim 加载了哪些语法文件?

Ing*_*kat 53

可以通过以下方式查询当前缓冲区的语法

:setlocal syntax?
Run Code Online (Sandbox Code Playgroud)

它通常(但不一定)对应于缓冲区的文件类型 ( :setlocal filetype?)。

为了更深入的了解,

:syntax list
Run Code Online (Sandbox Code Playgroud)

显示所有语法定义(一些语法(可以)包括其他语言的语法,例如JavaDoc 注释标记的javahas html)。

  • 这就是我根据 OP 问题的标题来寻找的。OP 当然在描述中澄清了他正在寻找实际的语法文件,但我很感激你把它留在这里,因为它是搜索引擎中的第一个答案。 (4认同)

gar*_*ohn 52

要找出 Vim 实际加载了哪些文件,请执行

:scriptnames
Run Code Online (Sandbox Code Playgroud)

  • 通常,只有列出的最后一个是“活动的”,如果您关闭了语法突出显示,则甚至可能不是。要查看当前有效的语法,请执行 `:echo b:current_syntax`。要查看当前有效的语法项,请按照 Ingo 的建议执行并执行 `:syntax list`。正如 Ingo 指出的那样,如果来自多个语法文件的语法项有效,后者可能会有所帮助。 (10认同)
  • 您可能加载了两个具有相同名称的语法文件。例如,vim 附带了 ColdFusion 的语法高亮显示,(对我来说是`/usr/share/vim/vim81/syntax/cf.vim`)。我安装了一个自定义的 cf.vim,因为标准的已经过时了。`:scriptnames` 显示两个文件。脚本列表中的默认值较低;然而,前者正在被使用。如果你查看 `/usr/share/vim/vim81/syntax/cf.vim`,就会发现一个守卫 `if exists("b:current_syntax") finish endif`。所以,就我而言,`scriptnames` 很有帮助,但我不得不深入挖掘。 (3认同)

Lie*_*ers 6

您可以查看当前使用的文件类型以及

:verbose set ft ?
Run Code Online (Sandbox Code Playgroud)

处理文件类型的插件很可能位于

:e $VIMRUNTIME\ftplugin
Run Code Online (Sandbox Code Playgroud)