creating a simple vim syntax highlighting
i have a simple sort of a database file which consists only of entries in the following format
variable=value
i want to create a simple vim syntax highlighting for it and set it for specific file extension
for instance, variable part could be light blue, and value part light red
i googled it and came across things such as $vimruntime\syntax\
, syntax set=
, syntax match
, and hi
keywords, but couldn't set it up myself eventually
so i want a very simple vim code snippet that would realize it by matching the left and right hand sides and coloring them separately
Solution 1:
Assuming your file's extension is *.foo
…
-
Create these files and directories if they don't exist:
$HOME/.vim/ftdetect/foo.vim $HOME/.vim/syntax/foo.vim
-
Put the following in
$HOME/.vim/ftdetect/foo.vim
:autocmd BufRead,BufNewFile *.foo set filetype=foo
-
Put the following in
$HOME/.vim/syntax/foo.vim
:syntax match FooKey /^[^=]\+/ syntax match FooValue /[^=]\+$/
-
Put the following lines at the very end of
$HOME/.vimrc
(or at least after anycolorscheme
line):highlight FooKey ctermfg=cyan guifg=#00ffff highlight FooValue ctermfg=red guifg=#ff0000
-
Make sure you have the following line somewhere in your
~/.vimrc
:syntax on
Solution 2:
Syntax script
Create a file ~/.vim/syntax/simple.vim
with the following contents:
" 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'
That matches the three syntax elements, and provides default colors. One doesn't generally define explicit colors, but instead links to default highlighting groups defined by your colorscheme. You can list all via :hi
. For tweaking, read :help :syntax
and :help usr_44.txt
, and have a look at the syntax scripts that ship with Vim.
Filetype detection
So far, you have to manually :set syntax=simple
to active. To do this automatically, you have to teach Vim about your new filetype.
Create a file ~/.vim/ftdetect/simple.vim
with the following contents:
autocmd BufNewFile,BufRead *.simple setf simple
This assumes that the files can be identified via the file name (cp. :help autocmd-patterns
). You can also detect based on the path (file location), or even the contents. :help new-filetype
has details.