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


25

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

变量 =

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

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

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

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

Answers:


31

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

  1. 创建以下文件和目录(如果不存在):

    $HOME/.vim/ftdetect/foo.vim
    $HOME/.vim/syntax/foo.vim
    
  2. 将以下内容放入$HOME/.vim/ftdetect/foo.vim

    autocmd BufRead,BufNewFile *.foo set filetype=foo
    
  3. 将以下内容放入$HOME/.vim/syntax/foo.vim

    syntax match FooKey   /^[^=]\+/
    syntax match FooValue /[^=]\+$/
    
  4. $HOME/.vimrc(或至少任何colorscheme行之后)的末尾放置以下行:

    highlight FooKey   ctermfg=cyan guifg=#00ffff
    highlight FooValue ctermfg=red  guifg=#ff0000
    
  5. 确保您的某处有以下行~/.vimrc

    syntax on
    

哇,OP只花了一个价格就得到了两个几乎完全相同的解决方案!我喜欢我们的两种解决方案非常相似,但细节却截然不同。
Ingo Karkat 2014年

它可以工作,但是我还是必须ftype=每次在vim中手动键入一次,fdetect$vimrnutime(我在Windows上%programfiles(x86)%\vim\vim74\ )中没有目录,我创建了它,但是仍然没有反应

您需要syntax on在vimrc中。
romainl 2014年

20

语法脚本

创建一个~/.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'

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

文件类型检测

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

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

autocmd BufNewFile,BufRead *.simple setf simple

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.