【问题标题】:Vim 8.0 extended syntax highlighting for scheme用于方案的 Vim 8.0 扩展语法高亮
【发布时间】:2019-01-25 09:28:34
【问题描述】:

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

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

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

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

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

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

更新:事实证明,由于某种原因,“.vim/ftplugin/scheme.vim”没有被获取并且变量“b:is_chicken”没有被设置(这可以使用“:scriptnames”或“echo”来检查b:is_chicken")。然后我将 "let b:is_chicken" 放在 ".vim/syntax/scheme.vim" 中,然后小鸡方案语法就起作用了。但这并不能区分不同的方案文件。

【问题讨论】:

  • 你如何区分这两种方言?文件扩展名?文件中有内容?
  • 我最初的计划是/是在 -u {vimrc} 文件中设置变量“b:is_gambit”,问题是在“.vim/ftplugin/scheme.vim”中设置变量鸡肉文件也不起作用。所以通过设置变量。使用不同的文件扩展名对我来说有点复杂。可以通过在文件中添加不影响编译的内容来完成吗?那将是一个有效的答案。
  • @romainl 对不起,我只是理解你的问题,我没有办法区分文件本身/文件中的两种方言。我使用带有 "-u" 选项的不同 vimrc 文件。

标签: vim scheme lisp vim-syntax-highlighting


【解决方案1】:

似乎有三种方法可以做我想做的事,我需要(尝试)理解变量、autocmd 和模式线

  1. 将以下任何一项添加到将用于 Gambit-C 文件(即 vi -u {vimrc} [Gambit-C files] )的 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 表示所有打开的 (scheme .ie ".scm" ) 缓冲区(如果 b:is_gambit 在 " .vim/syntax/scheme.vim" 它适用于所有缓冲区)。对于variables,b = 当前缓冲区,g = 全局。

或者……

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

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

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

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

还有……

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

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

或任何方案语法文件的路径。

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

            ;; vim: filetype=gambitc

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2017-09-14
    • 1970-01-01
    • 2011-03-09
    • 2014-11-14
    • 2010-11-26
    相关资源
    最近更新 更多