Vim 8.0 scheme的扩展语法高亮显示

Vim 8.0 scheme的扩展语法高亮显示,vim,scheme,lisp,vim-syntax-highlighting,Vim,Scheme,Lisp,Vim Syntax Highlighting,我使用了不同版本的scheme(Gambit-C和Guile),并为(大多数)Gambit-C的关键字编写了一个语法文件。但是,我只想在使用Gambit-C文件时使用它 从我的vimrc中获取它不起作用,因为scheme语法是在我的vimrc之后获取的,如果我使用-s或-c获取它,它只适用于打开的第一个文件,并且我必须为每个额外的文件/参数获取它 我看到的解决方案部分解决了我的问题,但我并不希望vim对每个方案文件都使用Gambit-C语法。 我还尝试添加 if exists("b:is_gam

我使用了不同版本的scheme(Gambit-C和Guile),并为(大多数)Gambit-C的关键字编写了一个语法文件。但是,我只想在使用Gambit-C文件时使用它

从我的vimrc中获取它不起作用,因为scheme语法是在我的vimrc之后获取的,如果我使用-s或-c获取它,它只适用于打开的第一个文件,并且我必须为每个额外的文件/参数获取它

我看到的解决方案部分解决了我的问题,但我并不希望vim对每个方案文件都使用Gambit-C语法。 我还尝试添加

if exists("b:is_gambit") || exists("is_gambit")
       "syntax extensions
         ....."
endif 
像中显示的那样使用它,但这不起作用,然后我意识到它似乎也不适用于chicken方案(即,在.vim/ftplugin/scheme.vim文件中设置“let b:is_chicken”不会将chickens语法添加到方案中)

我是否对变量“(let b:is_chicken)”和(let b:is_gambit)做了错误的处理,或者是否有其他方法可以使它对选定的方案文件起作用,例如在加载所有文件后生成.vimrc source文件


更新:由于某种原因,“.vim/ftplugin/scheme.vim”没有得到源代码,变量“b:is_chicken”没有设置(这可以使用“:scriptnames”或“echo b:is_chicken”进行检查)。然后我在.vim/syntax/scheme.vim中放入了“let b:is_chicken”“鸡计划的语法起了作用。但这并不能区分不同的方案文件。

似乎有三种方法可以实现我想要的,我需要(尝试)理解变量、autocmd和modeline

  • 向将用于Gambit-C文件(即vi-u{vimrc}[Gambit-C文件])的vimrc添加以下任何一项

             let g:is_gambit=1  "" This works on all the buffers 
    
  • 以及放置表单的语法文件

       if exists("b:is_gambit") || exists("is_gambit")
             "syntax extensions
                ....."
       endif 
    
    如上所述设置为“.vim/after/syntax/scheme.vim”

    注意:在-u{vimrc}中设置b:is_gambit只为当前缓冲区设置,而g:is_gambit表示所有打开的(scheme.e.“.scm”)缓冲区(如果在“.vim/syntax/scheme.vim”中设置了b:is_gambit,则它在所有缓冲区中都起作用)。对于,b=当前缓冲区,g=全局缓冲区

    或者

  • 添加到将用于Gambit-C文件的vimrc(即vi-u{vimrc}[Gambit-C文件])

  • 其中,gambitc.vim是Gambit-C的语法文件

    注意:这里的gambitc.vim只需要在scheme语法中添加额外的语法

    还有

  • 如前所述,在通用vimrc中正确设置模型线,并将Gambit-C语法文件放在“.vim/syntax/”的不同名称下(例如“.vim/syntax/gambitc.vim”),并通过将其放在文件中来获取原始方案语法

           :source /usr/share/vim/vim80/syntax/scheme.vim
    
  • 或者方案语法文件的路径是什么

    然后在每个文件中使用Gambit-C语法类型

                ;; vim: filetype=gambitc
    
    i、 从当前语言中注释这行,然后编写语句


    如果我的解决方案有任何问题,请让我知道,我个人更喜欢第二种,因为将其移植到不同的机器上时需要更少的工作,尽管我怀疑使用“g:is_gambit”方法更有效

    如何区分这两种方言?文件扩展名?文件中有什么内容?我最初的计划是在-u{vimrc}文件中设置变量“b:is_gambit”,问题是在.vim/ftplugin/scheme.vim文件中为chicken设置变量也不起作用。所以通过设置变量。使用不同的文件扩展名对我来说有点复杂。可以通过向文件中添加不会影响编译的内容来完成吗?这是一个正确的答案。@Romaill对不起,我只是理解了你的问题,我没有办法在文件中/文件上区分这两种方言。我使用带“-u”选项的不同vimrc文件。
           :source /usr/share/vim/vim80/syntax/scheme.vim
    
                ;; vim: filetype=gambitc