summaryrefslogtreecommitdiffstats
path: root/syntax/fish.vim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--syntax/fish.vim41
1 files changed, 41 insertions, 0 deletions
diff --git a/syntax/fish.vim b/syntax/fish.vim
new file mode 100644
index 00000000..f198dbaa
--- /dev/null
+++ b/syntax/fish.vim
@@ -0,0 +1,41 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1
+
+if exists('b:current_syntax')
+ finish
+endif
+
+syntax case match
+
+syntax keyword fishKeyword begin function end
+syntax keyword fishConditional if else switch
+syntax keyword fishRepeat while for in
+syntax keyword fishLabel case
+
+syntax match fishComment /#.*/
+syntax match fishSpecial /\\$/
+syntax match fishIdentifier /\$[[:alnum:]_]\+/
+syntax region fishString start=/'/ skip=/\\'/ end=/'/
+syntax region fishString start=/"/ skip=/\\"/ end=/"/ contains=fishIdentifier
+syntax match fishCharacter /\v\\[abefnrtv *?~%#(){}\[\]<>&;"']|\\[xX][0-9a-f]{1,2}|\\o[0-7]{1,2}|\\u[0-9a-f]{1,4}|\\U[0-9a-f]{1,8}|\\c[a-z]/
+syntax match fishStatement /\v;\s*\zs\k+>/
+syntax match fishCommandSub /\v\(\s*\zs\k+>/
+
+syntax region fishLineContinuation matchgroup=fishStatement
+ \ start='\v^\s*\zs\k+>' skip='\\$' end='$'
+ \ contains=fishSpecial,fishIdentifier,fishString,fishCharacter,fishStatement,fishCommandSub,fishComment
+
+highlight default link fishKeyword Keyword
+highlight default link fishConditional Conditional
+highlight default link fishRepeat Repeat
+highlight default link fishLabel Label
+highlight default link fishComment Comment
+highlight default link fishSpecial Special
+highlight default link fishIdentifier Identifier
+highlight default link fishString String
+highlight default link fishCharacter Character
+highlight default link fishStatement Statement
+highlight default link fishCommandSub fishStatement
+
+let b:current_syntax = 'fish'
+
+endif