来自插件的语法文件被Vim覆盖
我正在创建一个非常简单的插件,以便在Vim中为baan语法更好地突出显示语法(基本上是syntax/baan.Vim的改进版本) 这是我的插件目录。 ftdetect文件夹中的一个文件;巴恩·维姆。看起来像这样来自插件的语法文件被Vim覆盖,vim,vim-plugin,Vim,Vim Plugin,我正在创建一个非常简单的插件,以便在Vim中为baan语法更好地突出显示语法(基本上是syntax/baan.Vim的改进版本) 这是我的插件目录。 ftdetect文件夹中的一个文件;巴恩·维姆。看起来像这样 au BufRead,BufNewFile *.bc set filetype=baan syntax文件夹中的文件;巴恩·维姆。它与vim中syntax文件夹中的baan.vim几乎相同。语法高亮显示中有一行更改 我的问题是,当我打开任何扩展名为.bc的文件时,会调用另外两个语法文
au BufRead,BufNewFile *.bc set filetype=baan
syntax文件夹中的文件;巴恩·维姆。它与vim中syntax文件夹中的baan.vim几乎相同。语法高亮显示中有一行更改
我的问题是,当我打开任何扩展名为.bc的文件时,会调用另外两个语法文件;一个在我自己的插件语法文件之前,另一个在后面
我猜bc.vim语法文件已经从filetyp.vim调用了。因为我要设置的文件类型语法是扩展名为.bc的。这是第一个问题。第二个问题是,我将文件类型设置为“baan”,但Vim正在查找和寻找所有baan.Vim文件。但是一旦baan.vim是myplugin的源代码,它仍然是从vim本身寻找源代码的。不使用/after目录如何优雅地解决这些问题?这是正常的。请考虑以下内容:
$VIMRUNTIME/filetype.vim
sourcesftdetect/*.vim
接近结尾的脚本。此时已执行了setf bc
,并触发和处理了第一个FileType
事件。顺便说一句,这就是为什么lateset ft=baan
有效,但setf baan
不再有效的原因。不过这应该不是问题,因为:syn clear
是在$VIMRUNTIME/syntax/synload.vim
中自动执行的。不,除非您修补/替换filetype.vim
,否则无法对其执行任何操作
synload.vim
有意地获取所有匹配的文件(:runtime!
)。这就是他们尊重b:current_语法
变量的原因。第一个设置它的人获胜,其他人则在顶部执行:finish
。尽管如此,它们都来源于:scriptnames
。注意,这也意味着在/syntax之后使用扩展现有语法(而不考虑b:current_syntax
)通常更可取
这似乎是正常的,也是意料之中的。谢谢你的详细解释。据我所知,虽然调用了bc.vim语法,但文件类型会被set ft=baan覆盖。所以,语法文件被我的插件语法文件覆盖,这很好。对于第二个问题,我想因为插件语法文件是首先执行的,所以最终的语法文件(syntax/baan.vim)没有执行,因为通过:finish提前返回。我还可以确认,我的语法高亮显示工作正常。可以在Vim启动中获取文件的事实并不意味着它们的内容将被完全执行。现在我更清楚了。也许最后一个问题;如果要跟踪b:current_语法变量,可能吗?@EnisArik我不知道你想要实现什么。通常,它仅由源于
syntax
事件的语法脚本设置。