创建一个简单的 vim 语法高亮

30 vim syntax-highlighting

我有一个简单的数据库文件,它只包含以下格式的条目

变量=

我想为它创建一个简单的 vim 语法高亮显示并将其设置为特定的文件扩展名

例如,变量部分可以是浅蓝色,部分可以是浅红色

我GOOGLE了它和整个的东西,如来$vimruntime\syntax\syntax set=syntax match,和hi关键字,但不能设置它自己最终

所以我想要一个非常简单的 vim 代码片段,它可以通过匹配左侧和右侧并分别为它们着色来实现它

rom*_*inl 40

假设您的文件扩展名是*.foo……

  1. 如果这些文件和目录不存在,则创建它们:

    $HOME/.vim/ftdetect/foo.vim
    $HOME/.vim/syntax/foo.vim
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将以下内容放入$HOME/.vim/ftdetect/foo.vim

    autocmd BufRead,BufNewFile *.foo set filetype=foo
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将以下内容放入$HOME/.vim/syntax/foo.vim

    syntax match FooKey   /^[^=]\+/
    syntax match FooValue /[^=]\+$/
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将以下几行放在最后$HOME/.vimrc(或至少任何colorscheme一行之后):

    highlight FooKey   ctermfg=cyan guifg=#00ffff
    highlight FooValue ctermfg=red  guifg=#ff0000
    
    Run Code Online (Sandbox Code Playgroud)
  5. 确保在您的某处有以下行~/.vimrc

    syntax on
    
    Run Code Online (Sandbox Code Playgroud)


Ing*_*kat 26

语法脚本

创建一个~/.vim/syntax/simple.vim包含以下内容的文件:

" Quit when a syntax file was already loaded.
if exists('b:current_syntax') | finish|  endif

syntax match simpleVar "\k\+" nextgroup=simpleAssignment
syntax match simpleAssignment "=" contained nextgroup=simpleValue
syntax match simpleValue ".*" contained

hi def link simpleVar Identifier
hi def link simpleAssignment Statement
hi def link simpleValue String

let b:current_syntax = 'simple'
Run Code Online (Sandbox Code Playgroud)

匹配三个语法元素,并提供默认颜色。通常不定义明确的颜色,而是链接到由您的颜色方案定义的默认突出显示组。您可以通过 列出所有内容:hi。要进行调整,请阅读:help :syntax:help usr_44.txt并查看 Vim 附带的语法脚本。

文件类型检测

到目前为止,您必须手动:set syntax=simple激活。要自动执行此操作,您必须让 Vim 了解您的新文件类型

创建一个~/.vim/ftdetect/simple.vim包含以下内容的文件:

autocmd BufNewFile,BufRead *.simple setf simple
Run Code Online (Sandbox Code Playgroud)

这假设可以通过文件名 (cp. :help autocmd-patterns)识别文件。您还可以根据路径(文件位置)甚至内容进行检测。:help new-filetype有详细信息。