summaryrefslogtreecommitdiffstats
path: root/syntax
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2017-09-27 20:23:42 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2017-09-27 20:23:42 +0200
commit8148255ef1c416f414c3a78405eff08fe149d16e (patch)
tree2079cba4fc936c705156e9c03eda004f823bf665 /syntax
parent40ddf334c9428ff7d88b7ca12912a9a1ea80dbab (diff)
downloadvim-polyglot-8148255ef1c416f414c3a78405eff08fe149d16e.tar.gz
vim-polyglot-8148255ef1c416f414c3a78405eff08fe149d16e.zip
Add vifm support, closes #213
Diffstat (limited to 'syntax')
-rw-r--r--syntax/vifm.vim437
1 files changed, 437 insertions, 0 deletions
diff --git a/syntax/vifm.vim b/syntax/vifm.vim
new file mode 100644
index 00000000..c585ccd8
--- /dev/null
+++ b/syntax/vifm.vim
@@ -0,0 +1,437 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
+
+" vifm syntax file
+" Maintainer: xaizek <xaizek@posteo.net>
+" Last Change: September 18, 2017
+" Inspired By: Vim syntax file by Dr. Charles E. Campbell, Jr.
+
+if exists('b:current_syntax')
+ finish
+endif
+
+let b:current_syntax = 'vifm'
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+" General commands
+syntax keyword vifmCommand contained alink apropos bmark bmarks bmgo change
+ \ chmod chown clone compare cope[n] co[py] cq[uit] d[elete] delbmarks
+ \ delm[arks] di[splay] dirs e[dit] el[se] empty en[dif] exi[t] file fin[d]
+ \ fini[sh] gr[ep] h[elp] histnext his[tory] histprev jobs locate ls lstrash
+ \ marks mes[sages] mkdir m[ove] noh[lsearch] on[ly] popd pushd pu[t] pw[d]
+ \ q[uit] redr[aw] reg[isters] rename restart restore rlink screen sh[ell]
+ \ siblnext siblprev sor[t] sp[lit] s[ubstitute] touch tr trashes tree sync
+ \ undol[ist] ve[rsion] vie[w] vifm vs[plit] winc[md] w[rite] wq x[it] y[ank]
+ \ nextgroup=vifmArgs
+
+" commands that might be prepended to a command without changing everything else
+syntax keyword vifmPrefixCommands contained windo winrun
+
+" Map commands
+syntax keyword vifmMap contained dm[ap] dn[oremap] du[nmap] map mm[ap]
+ \ mn[oremap] mu[nmap] nm[ap] nn[oremap] no[remap] nun[map] qm[ap] qn[oremap]
+ \ qun[map] unm[ap] vm[ap] vn[oremap] vu[nmap]
+ \ skipwhite nextgroup=vifmMapArgs
+syntax keyword vifmCMapAbbr contained ca[bbrev] cm[ap] cnorea[bbrev] cno[remap]
+ \ cuna[bbrev] cu[nmap]
+ \ skipwhite nextgroup=vifmCMapArgs
+
+" Other commands
+syntax keyword vifmAutocmdCommand contained au[tocmd] nextgroup=vifmAutoEvent
+syntax keyword vifmCdCommand contained cd
+syntax keyword vifmCmdCommand contained com[mand] nextgroup=vifmCmdCommandName
+syntax keyword vifmColoCommand contained colo[rscheme]
+syntax keyword vifmHiCommand contained hi[ghlight]
+syntax keyword vifmInvertCommand contained invert
+syntax keyword vifmLetCommand contained let
+syntax keyword vifmUnletCommand contained unl[et]
+syntax keyword vifmSetCommand contained se[t] setl[ocal] setg[lobal]
+syntax keyword vifmSoCommand contained so[urce]
+syntax keyword vifmMarkCommand contained ma[rk]
+syntax keyword vifmFtCommand contained filet[ype] filex[type] filev[iewer]
+syntax keyword vifmExprCommand contained if ec[ho] elsei[f] exe[cute]
+syntax keyword vifmNormalCommand contained norm[al]
+ \ nextgroup=vifmColonSubcommand
+syntax match vifmPatternCommands contained /\<\(filter\(!\|\>\)\|select\(!\|\>\)\|unselect\>\)/ skipwhite
+ \ nextgroup=vifmPattern
+
+" List of event names for autocommands (case insensitive)
+syntax case ignore
+syntax keyword vifmAutoEvent contained DirEnter nextgroup=vifmStatementC
+syntax case match
+
+" Builtin functions
+syntax match vifmBuiltinFunction
+ \ '\(chooseopt\|expand\|executable\|filetype\|getpanetype\|has\|layoutis\|paneisat\|system\|term\)\ze('
+
+" Operators
+syntax match vifmOperator "\(==\|!=\|>=\?\|<=\?\|\.\|-\|+\|&&\|||\)" skipwhite
+
+" Highlight groups
+syntax keyword vifmHiArgs contained cterm ctermfg ctermbg
+syntax case ignore
+syntax keyword vifmHiGroups contained WildMenu Border Win CmdLine CurrLine
+ \ OtherLine Directory Link Socket Device Executable Selected BrokenLink
+ \ TopLine TopLineSel StatusLine JobLine SuggestBox Fifo ErrorMsg CmpMismatch
+ \ AuxWin
+syntax keyword vifmHiStyles contained bold underline reverse inverse standout
+ \ none
+syntax keyword vifmHiColors contained black red green yellow blue magenta cyan
+ \ white default lightblack lightred lightgreen lightyellow lightblue
+ \ lightmagenta lightcyan lightwhite Grey0 NavyBlue DarkBlue Blue3 Blue3_2
+ \ Blue1 DarkGreen DeepSkyBlue4 DeepSkyBlue4_2 DeepSkyBlue4_3 DodgerBlue3
+ \ DodgerBlue2 Green4 SpringGreen4 Turquoise4 DeepSkyBlue3 DeepSkyBlue3_2
+ \ DodgerBlue1 Green3 SpringGreen3 DarkCyan LightSeaGreen DeepSkyBlue2
+ \ DeepSkyBlue1 Green3_2 SpringGreen3_2 SpringGreen2 Cyan3 DarkTurquoise
+ \ Turquoise2 Green1 SpringGreen2_2 SpringGreen1 MediumSpringGreen Cyan2
+ \ Cyan1 DarkRed DeepPink4 Purple4 Purple4_2 Purple3 BlueViolet Orange4
+ \ Grey37 MediumPurple4 SlateBlue3 SlateBlue3_2 RoyalBlue1 Chartreuse4
+ \ DarkSeaGreen4 PaleTurquoise4 SteelBlue SteelBlue3 CornflowerBlue
+ \ Chartreuse3 DarkSeaGreen4_2 CadetBlue CadetBlue_2 SkyBlue3 SteelBlue1
+ \ Chartreuse3_2 PaleGreen3 SeaGreen3 Aquamarine3 MediumTurquoise
+ \ SteelBlue1_2 Chartreuse2 SeaGreen2 SeaGreen1 SeaGreen1_2 Aquamarine1
+ \ DarkSlateGray2 DarkRed_2 DeepPink4_2 DarkMagenta DarkMagenta_2 DarkViolet
+ \ Purple Orange4_2 LightPink4 Plum4 MediumPurple3 MediumPurple3_2 SlateBlue1
+ \ Yellow4 Wheat4 Grey53 LightSlateGrey MediumPurple LightSlateBlue Yellow4_2
+ \ DarkOliveGreen3 DarkSeaGreen LightSkyBlue3 LightSkyBlue3_2 SkyBlue2
+ \ Chartreuse2_2 DarkOliveGreen3_2 PaleGreen3_2 DarkSeaGreen3 DarkSlateGray3
+ \ SkyBlue1 Chartreuse1 LightGreen_2 LightGreen_3 PaleGreen1 Aquamarine1_2
+ \ DarkSlateGray1 Red3 DeepPink4_3 MediumVioletRed Magenta3 DarkViolet_2
+ \ Purple_2 DarkOrange3 IndianRed HotPink3 MediumOrchid3 MediumOrchid
+ \ MediumPurple2 DarkGoldenrod LightSalmon3 RosyBrown Grey63 MediumPurple2_2
+ \ MediumPurple1 Gold3 DarkKhaki NavajoWhite3 Grey69 LightSteelBlue3
+ \ LightSteelBlue Yellow3 DarkOliveGreen3_3 DarkSeaGreen3_2 DarkSeaGreen2
+ \ LightCyan3 LightSkyBlue1 GreenYellow DarkOliveGreen2 PaleGreen1_2
+ \ DarkSeaGreen2_2 DarkSeaGreen1 PaleTurquoise1 Red3_2 DeepPink3 DeepPink3_2
+ \ Magenta3_2 Magenta3_3 Magenta2 DarkOrange3_2 IndianRed_2 HotPink3_2
+ \ HotPink2 Orchid MediumOrchid1 Orange3 LightSalmon3_2 LightPink3 Pink3
+ \ Plum3 Violet Gold3_2 LightGoldenrod3 Tan MistyRose3 Thistle3 Plum2
+ \ Yellow3_2 Khaki3 LightGoldenrod2 LightYellow3 Grey84 LightSteelBlue1
+ \ Yellow2 DarkOliveGreen1 DarkOliveGreen1_2 DarkSeaGreen1_2 Honeydew2
+ \ LightCyan1 Red1 DeepPink2 DeepPink1 DeepPink1_2 Magenta2_2 Magenta1
+ \ OrangeRed1 IndianRed1 IndianRed1_2 HotPink HotPink_2 MediumOrchid1_2
+ \ DarkOrange Salmon1 LightCoral PaleVioletRed1 Orchid2 Orchid1 Orange1
+ \ SandyBrown LightSalmon1 LightPink1 Pink1 Plum1 Gold1 LightGoldenrod2_2
+ \ LightGoldenrod2_3 NavajoWhite1 MistyRose1 Thistle1 Yellow1 LightGoldenrod1
+ \ Khaki1 Wheat1 Cornsilk1 Grey100 Grey3 Grey7 Grey11 Grey15 Grey19 Grey23
+ \ Grey27 Grey30 Grey35 Grey39 Grey42 Grey46 Grey50 Grey54 Grey58 Grey62
+ \ Grey66 Grey70 Grey74 Grey78 Grey82 Grey85 Grey89 Grey93
+
+syntax case match
+
+" Options
+syntax keyword vifmOption contained aproposprg autochpos caseoptions cdpath cd
+ \ chaselinks classify columns co confirm cf cpoptions cpo cvoptions
+ \ deleteprg dotdirs dotfiles dirsize fastrun fillchars fcs findprg
+ \ followlinks fusehome gdefault grepprg history hi hlsearch hls iec
+ \ ignorecase ic iooptions incsearch is laststatus lines locateprg ls
+ \ lsoptions lsview milleroptions millerview mintimeoutlen number nu
+ \ numberwidth nuw previewprg relativenumber rnu rulerformat ruf runexec
+ \ scrollbind scb scrolloff so sort sortgroups sortorder sortnumbers shell sh
+ \ shortmess shm sizefmt slowfs smartcase scs statusline stl suggestoptions
+ \ syscalls tabstop timefmt timeoutlen title tm trash trashdir ts tuioptions
+ \ to undolevels ul vicmd viewcolumns vifminfo vimhelp vixcmd wildmenu wmnu
+ \ wildstyle wordchars wrap wrapscan ws
+
+" Disabled boolean options
+syntax keyword vifmOption contained noautochpos nocf nochaselinks nodotfiles
+ \ nofastrun nofollowlinks nohlsearch nohls noiec noignorecase noic
+ \ noincsearch nois nolaststatus nols nolsview nomillerview nonumber nonu
+ \ norelativenumber nornu noscrollbind noscb norunexec nosmartcase noscs
+ \ nosortnumbers nosyscalls notitle notrash novimhelp nowildmenu nowmnu
+ \ nowrap nowrapscan nows
+
+" Inverted boolean options
+syntax keyword vifmOption contained invautochpos invcf invchaselinks invdotfiles
+ \ invfastrun invfollowlinks invhlsearch invhls inviec invignorecase invic
+ \ invincsearch invis invlaststatus invls invlsview invmillerview invnumber
+ \ invnu invrelativenumber invrnu invscrollbind invscb invrunexec invsmartcase
+ \ invscs invsortnumbers invsyscalls invtitle invtrash invvimhelp invwildmenu
+ \ invwmnu invwrap invwrapscan invws
+
+" Expressions
+syntax region vifmStatement start='^\(\s\|:\)*'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$' keepend
+ \ contains=vifmCommand,vifmCmdCommand,vifmCmdCommandSt,vifmMarkCommandSt
+ \,vifmFtCommandSt,vifmCMapAbbr,vifmMap,vifmMapSt,vifmCMapSt,vifmExecute
+ \,vifmComment,vifmInlineComment,vifmNotComment,vifmExprCommandSt,vifmNormalCommandSt
+ \,vifmCdCommandSt,vifmSet,vifmArgument,vifmSoCommandSt,vifmPrefixCommands
+ \,vifmAutocmdCommand,vifmAutoEvent,vifmPatternCommands
+" Contained statement with highlighting of angle-brace notation.
+syntax region vifmStatementCN start='\(\s\|:\)*'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$' keepend contained
+ \ contains=vifmCommand,vifmCmdCommand,vifmCmdCommandSt,vifmMarkCommandSt
+ \,vifmFtCommandStN,vifmCMapAbbr,vifmMap,vifmMapSt,vifmCMapSt,vifmExecute
+ \,vifmComment,vifmInlineComment,vifmNotComment,vifmExprCommandSt,vifmNormalCommandSt
+ \,vifmNotation,vifmCdCommandStN,vifmSetN,vifmArgument,vifmSoCommand
+ \,vifmSoCommandStN,vifmInvertCommand,vifmInvertCommandStN,vifmPrefixCommands
+" Contained statement without highlighting of angle-brace notation.
+syntax region vifmStatementC start='\(\s\|:\)*'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$' keepend contained
+ \ contains=vifmCommand,vifmCmdCommand,vifmCmdCommandSt,vifmMarkCommandSt
+ \,vifmFtCommandSt,vifmCMapAbbr,vifmMap,vifmMapSt,vifmCMapSt,vifmExecute
+ \,vifmComment,vifmInlineComment,vifmNotComment,vifmExprCommandSt,vifmNormalCommandSt
+ \,vifmCdCommandSt,vifmSet,vifmArgument,vifmSoCommand,vifmSoCommandSt
+ \,vifmInvertCommand,vifmInvertCommandSt,vifmPrefixCommands
+ \,vifmAutocmdCommand,vifmAutoEvent,vifmPatternCommands
+syntax region vifmCmdCommandSt start='^\(\s\|:\)*com\%[mand]\>'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$' keepend
+ \ contains=vifmCmdCommand,vifmComment,vifmInlineComment,vifmNotComment
+syntax region vifmCmdCommandName contained start='!\?\s\+[a-zA-Z]\+' end='\ze\s'
+ \ skip='\(\s*\\\)\|\(\s*".*$\)'
+ \ nextgroup=vifmCmdArgs
+syntax region vifmCmdArgs start='\(\s*\n\s*\\\)\?\s*\S\+'
+ \ end='\s' skip='\(\n\s*\\\)\|\(\n\s*".*$\)'
+ \ contained
+ \ contains=vifmColonSubcommand,vifmComment
+syntax region vifmColoCommandSt start='^\(\s\|:\)*colo\%[rscheme]\>' end='$'
+ \ keepend oneline contains=vifmColoCommand
+syntax region vifmInvertCommandSt start='\(\s\|:\)*invert\>' end='$\||'
+ \ keepend oneline contains=vifmInvertCommand
+syntax region vifmInvertCommandStN start='\(\s\|:\)*invert\>' end='$\||'
+ \ contained keepend oneline contains=vifmInvertCommand,vifmNotation
+syntax region vifmSoCommandSt start='\(\s\|:\)*so\%[urce]\>' end='$\||'
+ \ keepend oneline contains=vifmSoCommand,vifmEnvVar,vifmStringInExpr
+syntax region vifmSoCommandStN start='\(\s\|:\)*so\%[urce]\>' end='$\||'
+ \ contained keepend oneline
+ \ contains=vifmSoCommand,vifmEnvVar,vifmNotation,vifmStringInExpr
+syntax region vifmMarkCommandSt start='^\(\s\|:\)*ma\%[rk]\>' end='$' keepend
+ \ oneline contains=vifmMarkCommand
+syntax region vifmCdCommandSt start='\(\s\|:\)*cd\>' end='$\||' keepend oneline
+ \ contains=vifmCdCommand,vifmEnvVar,vifmStringInExpr
+" Highlight for :cd command with highlighting of angle-brace notation.
+syntax region vifmCdCommandStN start='\(\s\|:\)*cd\>' end='$\||' keepend oneline
+ \ contained
+ \ contains=vifmCdCommand,vifmEnvVar,vifmNotation,vifmStringInExpr
+syntax region vifmFtCommandSt start='\(\s\|:\)*file[tvx]'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$' keepend
+ \ contains=vifmFtCommand,vifmComment,vifmFtBeginning
+syntax region vifmFtCommandStN start='\(\s\|:\)*file[tvx]'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$\|\(<[cC][rR]>\)' keepend
+ \ contains=vifmComment,vifmNotation,vifmFtBeginning
+syntax region vifmMapSt start='^\(\s\|:\)*\(map\|mm\%[ap]\|mn\%[oremap]\|mu\%[nmap]\|nm\%[ap]\|nn\%[oremap]\|no\%[remap]\|nun\%[map]\|qm\%[ap]\|qn\%[oremap]\|qun\%[map]\|unm\%[ap]\|vm\%[ap]\|vn\%[oremap]\|vu\%[nmap]\)'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$' keepend
+ \ contains=vifmMap
+syntax region vifmCMapSt
+ \ start='^\(\s\|:\)*\(cm\%[ap]\|cno\%[remap]\|cu\%[nmap]\)'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$' keepend
+ \ contains=vifmCMapAbbr
+syntax region vifmExprCommandSt
+ \ start='\<\(if\|ec\%[ho]\|elsei\%[f]\|exe\%[cute]\)\>'
+ \ end='$\||'
+ \ contains=vifmExprCommand,vifmString,vifmStringInExpr,vifmBuiltinFunction
+ \,vifmOperator,vifmEnvVar,vifmNumber
+syntax region vifmNormalCommandSt start='\(\s\|:\)*norm\%[al]\>' end='$' keepend
+ \ oneline
+ \ contains=vifmNormalCommand,vifmComment
+syntax region vifmExecute start='!' skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$'
+ \ keepend
+ \ contains=vifmNotation,vifmComment
+syntax region vifmMapArgs start='\ze\S\+'
+ \ end='\ze.' skip='\(\n\s*\\\)\|\(\n\s*".*$\)'
+ \ contained
+ \ nextgroup=vifmMapLhs
+syntax region vifmCMapArgs start='\S\+'
+ \ end='\n\s*\\' skip='\(\n\s*\\\)\|\(\n\s*".*$\)'
+ \ contained
+ \ contains=vifmMapLhs,vifmMapCRhs
+syntax region vifmMapLhs start='\S\+'
+ \ end='\ze\s' skip='\(\s*\\\)\|\(\s*".*$\)'
+ \ contained
+ \ contains=vifmNotation,vifmComment
+ \ nextgroup=vifmMapRhs
+syntax region vifmMapRhs start='.'
+ \ end='\ze<[cC][rR]>' skip='\(\s*\\\)\|\(\s*".*$\)'
+ \ contained keepend
+ \ contains=vifmNotation,vifmComment,vifmColonSubcommandN
+ \ nextgroup=vifmMapRhs
+syntax region vifmMapCRhs start='\s'
+ \ end='<[cC][rR]>' skip='\(\s*\\\)\|\(\s*".*$\)'
+ \ contained keepend
+ \ contains=vifmNotation,vifmComment,vifmSubcommandN
+syntax region vifmColonSubcommand start='\s*\(\s*\n\s*\\\)\?:\s*\S\+'
+ \ end='$' skip='\s*\n\(\s*\\\)\|\(\s*".*$\)'
+ \ contained
+ \ contains=vifmStatementC
+" Contained sub command with highlighting of angle-brace notation.
+syntax region vifmColonSubcommandN start='\s*\(\s*\n\s*\\\)\?:\s*\S\+'
+ \ end='\ze<[cC][rR]>\|$' skip='\s*\n\(\s*\\\)\|\(\s*".*$\)' keepend
+ \ contained
+ \ contains=vifmStatementCN
+syntax region vifmSubcommandN start='\s*\(\s*\n\s*\\\)\?:\?\s*\S\+'
+ \ end='\ze<[cC][rR]>\|$' skip='\s*\n\(\s*\\\)\|\(\s*".*$\)' keepend
+ \ contained
+ \ contains=vifmStatementCN
+" Non-empty pattern or form [!][{]{*.ext,*.e}[}], [!][/]/regex/[/][iI] or
+" <mime-type-globs>, possibly multi-line.
+" [!]/regexp/[iI]+
+syntax region vifmPattern contained
+ \ start='!\?/\ze\(\n\s*\\\|\n\s*".*$\|[^/]\|\\/\)\+/'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='/[iI]*\ze\s\|/\ze\S\+\s' keepend
+ \ contains=vifmComment,vifmInlineComment,vifmNotComment,vifmNotPattern
+" [!]//regexp//[iI]+
+syntax region vifmPattern contained
+ \ start='!\?//\ze\(/[^/]\|\n\s*\\\|\n\s*".*$\|[^/]\|\\/\)\+//'
+ \ skip='/[^/]\|\(\n\s*\\\)\|\(\n\s*".*$\)' end='//[iI]*' keepend
+ \ contains=vifmComment,vifmInlineComment,vifmNotComment,vifmNotPattern
+" [!]{regexp}
+syntax region vifmPattern contained
+ \ start='!\?{[^}]' skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='}' keepend
+ \ contains=vifmComment,vifmInlineComment,vifmNotComment,vifmNotPattern
+" [!]{{regexp}}
+syntax region vifmPattern contained
+ \ start='!\?{{\ze.\{-}}}' skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='}}' keepend
+ \ contains=vifmComment,vifmInlineComment,vifmNotComment,vifmNotPattern
+" [!]<regexp>
+syntax region vifmPattern contained
+ \ start='!\?<[^>]' skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='>' keepend
+ \ contains=vifmComment,vifmInlineComment,vifmNotComment,vifmNotPattern
+syntax match vifmNotPattern contained '!\?\({{}}\|\<//\>\|////\)'
+syntax region vifmHi
+ \ start='^\(\s\|:\)*\<hi\%[ghlight]\>' skip='\(\n\s*\\\)\|\(\n\s*".*$\)'
+ \ end='$' keepend
+ \ contains=vifmHiCommand,vifmHiArgs,vifmHiGroups,vifmHiStyles,vifmHiColors
+ \,vifmNumber,vifmComment,vifmInlineComment,vifmNotComment,vifmHiClear
+ \,vifmPattern
+syntax region vifmFtBeginning contained
+ \ start='\<\(filet\%[ype]\|filext\%[ype]\|filev\%[iewer]\)\>\s\+\S'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)'
+ \ end='\s' keepend
+ \ contains=vifmFtCommand,vifmPattern
+
+" common highlight for :command arguments
+syntax region vifmArgs start='!\?\zs\(\s*\S\+\|[^a-zA-Z]\)'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='|\|$'
+ \ contained
+ \ contains=vifmStringInExpr
+
+syntax region vifmSet
+ \ start='\(\s\|:\)*\<\(se\%[t]\|setg\%[lobal]\|setl\%[ocal]\)\>'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$'
+ \ keepend
+ \ contains=vifmSetCommand,vifmOption,vifmSetAssignSQS,vifmSetAssignDQS
+ \,vifmSetAssignNS,vifmComment,vifmInlineComment,vifmNotComment
+syntax region vifmSetN
+ \ start='\(\s\|:\)*\<\(se\%[t]\|setg\%[lobal]\|setl\%[ocal]\)\>'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$'
+ \ keepend
+ \ contains=vifmSetCommand,vifmOption,vifmSetAssignSQS,vifmSetAssignDQS
+ \,vifmSetAssignNSN,vifmComment,vifmInlineComment,vifmNotComment,vifmNotation
+syntax region vifmSet2 contained
+ \ start='^\(\s\|:\)*\<\(se\%[t]\|setg\%[lobal]\|setl\%[ocal]\)\>'
+ \ skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$'
+ \ keepend
+ \ contains=vifmSetCommand,vifmOption,vifmSetAssignSQS,vifmSetAssignDQS
+ \,vifmSetAssignNSN,vifmComment,vifmInlineComment,vifmNotComment,vifmNotation
+
+" Highlight for =value part of :set arguments of form option=value
+
+" For single quoted string (check that it starts with =')
+syntax region vifmSetAssignSQS contained
+ \ start="='" skip=+\\\\\|\\'+ end=+'+ keepend
+ \ contains=vifmString
+" For double quoted string (check that it starts with =")
+syntax region vifmSetAssignDQS contained
+ \ start='="' skip=+\\\\\|\\"+ end=+"+ keepend
+ \ contains=vifmString
+" For not strings (check that it doesn't start with either =' or =")
+syntax region vifmSetAssignNS contained
+ \ start='=[^"'' ]' skip='\(\n\s*\\\)\|\(\n\s*".*$\)\|^.*\S.*\\\s' end='^\s*\\\s\|[^\\]\s\|$'
+ \ extend
+ \ contains=vifmNumber,vifmComment,vifmInlineComment
+" For not strings (check that it doesn't start with either =' or =")
+syntax region vifmSetAssignNSN contained
+ \ start='=[^"'' ]' skip='\(\n\s*\\\)\|\(\n\s*".*$\)\|^.*\S.*\\\s' end='^\s*\\\s\|[^\\]\s\|$'
+ \ extend
+ \ contains=vifmNumber,vifmComment,vifmInlineComment,vifmNotation
+
+syntax region vifmLet
+ \ start='^\(\s\|:\)*\<let\>' skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$'
+ \ keepend
+ \ contains=vifmLetCommand,vifmEnvVar,vifmString,vifmStringInExpr,vifmComment
+ \,vifmInlineComment,vifmNotComment
+syntax region vifmUnlet
+ \ start='^\(\s\|:\)*\<unl\%[et]\>' skip='\(\n\s*\\\)\|\(\n\s*".*$\)' end='$'
+ \ keepend
+ \ contains=vifmUnletCommand,vifmEnvVar,vifmComment,vifmInlineComment,vifmNotComment
+syntax region vifmString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+
+syntax region vifmString contained start=+='+hs=s+1 skip=+\\\\\|\\'+ end=+'+
+syntax region vifmStringInExpr contained start=+=\@<="+hs=s+1 skip=+\\\\\|\\"+
+ \ end=+"+
+syntax region vifmStringInExpr contained start=+=\@<='+hs=s+1
+ \ skip=+\\\\\|\\'\|''+ end=+'+
+syntax region vifmStringInExpr contained start=+[.( ]"+hs=s+1 skip=+\\\\\|\\"+
+ \ end=+"+
+syntax region vifmStringInExpr contained start=+[.( ]'+hs=s+1
+ \ skip=+\\\\\|\\'\|''+ end=+'+
+syntax region vifmArgument contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syntax region vifmArgument contained start=+'+ skip=+\\\\\|\\'\|''+ end=+'+
+syntax match vifmEnvVar contained /\$[0-9a-zA-Z_]\+/
+syntax match vifmNumber contained /\d\+/
+
+" Ange-bracket notation
+syntax case ignore
+syntax match vifmNotation '<\(esc\|cr\|space\|del\|nop\|\(s-\)\?tab\|home\|end\|left\|right\|up\|down\|bs\|delete\|pageup\|pagedown\|\([acms]-\)\?f\d\{1,2\}\|c-s-[a-z[\]^_]\|s-c-[a-z[\]^_]\|c-[a-z[\]^_]\|[am]-c-[a-z]\|c-[am]-[a-z]\|[am]-[a-z]\)>'
+syntax case match
+
+" Whole line comment
+syntax region vifmComment contained contains=@Spell start='^\(\s\|:\)*"' end='$'
+" Comment at the end of a line
+syntax match vifmInlineComment contained contains=@Spell '\s"[^"]*$'
+" This prevents highlighting non-first line of multi-line command
+syntax match vifmNotComment contained '\s"[^"]*\(\(\n\s*\(\\\|"\)\)\@!\|$\)'
+
+" Empty line
+syntax match vifmEmpty /^\s*$/
+
+" :highlight clear
+syntax match vifmHiClear contained /\s*\<clear\>\s*/
+
+" Check spelling only in syntax elements marked with @Spell
+syntax spell notoplevel
+
+" Highlight
+highlight link vifmAutocmdCommand Statement
+highlight link vifmPatternCommands Statement
+highlight link vifmComment Comment
+highlight link vifmInlineComment Comment
+highlight link vifmCommand Statement
+highlight link vifmPrefixCommands Statement
+highlight link vifmCdCommand Statement
+highlight link vifmCmdCommand Statement
+highlight link vifmColoCommand Statement
+highlight link vifmHiCommand Statement
+highlight link vifmHiClear Statement
+highlight link vifmInvertCommand Statement
+highlight link vifmMarkCommand Statement
+highlight link vifmFtCommand Statement
+highlight link vifmExprCommand Statement
+highlight link vifmNormalCommand Statement
+highlight link vifmLetCommand Statement
+highlight link vifmUnletCommand Statement
+highlight link vifmSetCommand Statement
+highlight link vifmSoCommand Statement
+highlight link vifmBuiltinFunction Function
+highlight link vifmOperator Operator
+highlight link vifmMap Statement
+highlight link vifmCMapAbbr Statement
+highlight link vifmHiArgs Type
+highlight link vifmAutoEvent Type
+highlight link vifmHiGroups Identifier
+highlight link vifmPattern String
+highlight link vifmHiStyles PreProc
+highlight link vifmHiColors Special
+highlight link vifmOption PreProc
+highlight link vifmNotation Special
+highlight link vifmString String
+highlight link vifmStringInExpr String
+highlight link vifmEnvVar PreProc
+highlight link vifmNumber Number
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 :
+
+endif