方案的Vim 8.0扩展语法突出显示

时间:2018-08-18 16:30:20

标签: vim scheme lisp vim-syntax-highlighting

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

从vimrc中获取它不起作用,因为该方案语法是在vimrc之后获得的,如果我使用-s 或-c 来获得它,则它仅适用于打开的第一个文件,我必须为每个额外的文件/参数提供源代码。

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

if exists("b:is_gambit") || exists("is_gambit")
       "syntax extensions
         ....."
endif 

并像使用chicken scheme vim help中所示的那样使用它,但是那没有用,然后我意识到它似乎也不适用于鸡肉方案(即在“ .vim”中设置“ let b:is_chicken” /ftplugin/scheme.vim”文件未在方案中添加小鸡语法)!

我是否对变量“(let b:is_chicken)”和(let b:is_gambit)做错了,还是有另一种方法可以使它适用于选定的方案文件,例如使.vimrc在所有文件之后成为源文件已加载?

更新:事实证明,由于某些原因,未获取“ .vim / ftplugin / scheme.vim”且未设置变量“ b:is_chicken(可以使用”:scriptnames“或” echo进行检查“ b:is_chicken”)。然后在“ .vim / syntax / scheme.vim”中放入“ let b:is_chicken”,并且使用了chicken方案语法。但这不能区分不同的方案文件。

1 个答案:

答案 0 :(得分:0)

似乎有三种方法可以完成我想做的事情,我需要(尝试)理解变量,autocmd和modelines

  1. 将以下任意一项添加到将用于Gambit-C文件(即vi -u {vimrc} [Gambit-C文件])的vimrc中

             let g:is_gambit=1  "" This works on all the buffers 
    

            :autocmd BufRead *.scm let b:is_gambit "" This works for all the buffers but is redundant given the above.

并放置表单的语法文件

   if exists("b:is_gambit") || exists("is_gambit")
         "syntax extensions
            ....."
   endif 

如上在“ .vim / after / syntax / scheme.vim”中设置的。

注意:在-u {vimrc}中设置b:is_gambit仅将其设置为当前缓冲区,而g:is_gambit则表示所有打开的(方案.ie“ .scm”)缓冲区(如果b:is_gambit在“ .vim / syntax / scheme.vim”,但它可在所有缓冲区中使用)。对于variables,b =当前缓冲区,g =全局缓冲区。

或......

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

         :autocmd BufEnter *.scm source /path/to/file/gambitc.vim ""Note BufEnter not BufRead
    

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

注意:此处的gambitc.vim只需要将额外的语法添加到方案语法中

和......

  1. 如正确解释的那样,here在常规vimrc中设置模式行,并将Gambit-C语法文件以不同的名称(例如“ .vim / syntax / gambitc”)放在“ .vim / syntax /”中。 vim”),并将原始方案语法放在文件中

           :source /usr/share/vim/vim80/syntax/scheme.vim
    

或方案语法文件的路径。

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

            ;; vim: filetype=gambitc

即用当前语言注释此行,然后编写语句。

如果我的解决方案有任何问题,请告诉我,我个人更喜欢第二种解决方案,因为在将其移植到其他计算机时它涉及的工作较少,尽管我怀疑使用“ g:is_gambit”方法会更高效