Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自插件的语法文件被Vim覆盖_Vim_Vim Plugin - Fatal编程技术网

来自插件的语法文件被Vim覆盖

来自插件的语法文件被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的文件时,会调用另外两个语法文

我正在创建一个非常简单的插件,以便在Vim中为baan语法更好地突出显示语法(基本上是syntax/baan.Vim的改进版本)

这是我的插件目录。

ftdetect文件夹中的一个文件;巴恩·维姆。看起来像这样

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
    sources
    ftdetect/*.vim
    接近结尾的脚本。此时已执行了
    setf bc
    ,并触发和处理了第一个
    FileType
    事件。顺便说一句,这就是为什么late
    set 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
    事件的语法脚本设置。