diff runtime/syntax/fish.vim @ 32004:a9b5ffbc0428

Update runtime files. Commit: https://github.com/vim/vim/commit/938ae280c79b8cdb0fca60336ec4c090ecd8bb5a Author: Bram Moolenaar <Bram@vim.org> Date: Mon Feb 20 20:44:55 2023 +0000 Update runtime files.
author Bram Moolenaar <Bram@vim.org>
date Mon, 20 Feb 2023 22:00:05 +0100
parents
children
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/fish.vim
@@ -0,0 +1,225 @@
+" Vim syntax file
+" Language:     fish
+" Maintainer:   Nicholas Boyle (github.com/nickeb96)
+" Repository:   https://github.com/nickeb96/fish.vim
+" Last Change:  February 1, 2023
+
+if exists("b:current_syntax")
+    finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+
+" Statements
+syn cluster fishStatement contains=fishKeywordAndOr,fishNot,fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand,fishVariable
+
+syn keyword fishKeywordAndOr and or nextgroup=fishNot,fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
+hi def link fishKeywordAndOr fishOperator
+
+syn keyword fishNot not skipwhite nextgroup=fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
+syn match   fishNot /!/ skipwhite nextgroup=fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
+hi def link fishNot fishOperator
+
+syn keyword fishSelectStatement command builtin skipwhite nextgroup=fishKeyword,fishKeywordIf,fishCommand,fishOption
+hi def link fishSelectStatement fishKeyword
+
+syn keyword fishKeyword end skipwhite nextgroup=@fishTerminator
+
+syn keyword fishKeywordIf if skipwhite nextgroup=@fishStatement
+syn keyword fishKeyword else skipwhite nextgroup=fishKeywordIf,fishSemicolon
+hi def link fishKeywordIf fishKeyword
+
+syn keyword fishKeyword switch skipwhite nextgroup=@fishArgument
+syn keyword fishKeyword case skipwhite nextgroup=@fishArgument
+
+syn keyword fishKeyword while skipwhite nextgroup=@fishStatement
+
+syn keyword fishKeyword for skipwhite nextgroup=fishForVariable
+syn match   fishForVariable /[[:alnum:]_]\+/ contained skipwhite nextgroup=fishKeywordIn
+syn keyword fishKeywordIn in contained skipwhite nextgroup=@fishArgument
+hi def link fishForVariable fishParameter
+hi def link fishKeywordIn fishKeyword
+
+syn keyword fishKeyword _ abbr argparse begin bg bind block break breakpoint cd commandline
+    \ complete continue count disown echo emit eval exec exit false fg function functions
+    \ history jobs math printf pwd random read realpath return set set_color source status
+    \ string test time true type ulimit wait
+    \ skipwhite nextgroup=@fishNext
+syn match   fishKeyword /\<contains\>/ skipwhite nextgroup=@fishNext
+
+syn match   fishCommand /[[:alnum:]_\/[][[:alnum:]+._-]*/ skipwhite nextgroup=@fishNext
+
+
+" Internally Nested Arguments
+
+syn cluster fishSubscriptArgs contains=fishInnerVariable,fishIndexNum,fishIndexRange,fishInnerCommandSub
+
+syn match   fishInnerVariable /\$\+[[:alnum:]_]\+/ contained
+syn match   fishInnerVariable /\$\+[[:alnum:]_]\+\[/me=e-1,he=e-1 contained nextgroup=fishInnerSubscript
+hi def link fishInnerVariable fishVariable
+
+syn region  fishInnerSubscript matchgroup=fishVariable start=/\[/ end=/]/ contained
+    \ keepend contains=@fishSubscriptArgs
+hi def link fishInnerSubscript fishSubscript
+
+syn match   fishIndexNum /[+-]?[[:digit:]]\+/ contained
+hi def link fishIndexNum fishParameter
+
+syn match   fishIndexRange /\.\./ contained
+hi def link fishIndexRange fishParameter
+
+syn region  fishInnerCommandSub matchgroup=fishOperator start=/(/ start=/\$(/ end=/)/ contained
+    \ contains=@fishStatement
+hi def link fishInnerCommandSub fishCommandSub
+
+syn region  fishQuotedCommandSub matchgroup=fishOperator start=/\$(/ end=/)/ contained
+    \ contains=@fishStatement
+hi def link fishQuotedCommandSub fishCommandSub
+
+syn match   fishBraceExpansionComma /,/ contained
+hi def link fishBraceExpansionComma fishOperator
+
+syn match   fishBracedParameter '[[:alnum:]\u5b\u5d@:=+.%/!_-]\+' contained contains=fishInnerPathGlob
+hi def link fishBracedParameter fishParameter
+
+syn region  fishBracedQuote start=/'/ skip=/\\'/ end=/'/ contained
+    \ contains=fishEscapedEscape,fishEscapedSQuote
+syn region  fishBracedQuote start=/"/ skip=/\\"/ end=/"/ contained
+    \ contains=fishEscapedEscape,fishEscapedDQuote,fishEscapedDollar,fishInnerVariable,fishInnerCommandSub
+hi def link fishBracedQuote fishQuote
+
+
+" Arguments
+
+syn cluster fishArgument contains=fishParameter,fishOption,fishVariable,fishPathGlob,fishBraceExpansion,fishQuote,fishCharacter,fishCommandSub,fishRedirection,fishSelfPid
+
+syn match   fishParameter '[[:alnum:]\u5b\u5d@:=+.,%/!_-]\+' contained skipwhite nextgroup=@fishNext
+
+syn match   fishOption /-[[:alnum:]=_-]*/ contained skipwhite nextgroup=@fishNext
+
+syn match   fishPathGlob /\(\~\|*\|?\)/ contained skipwhite nextgroup=@fishNext
+
+syn region  fishBraceExpansion matchgroup=fishOperator start=/{/ end=/}/ contained
+    \ contains=fishBraceExpansionComma,fishInnerVariable,fishInnerCommandSub,fishBracedParameter,fishBracedQuote
+    \ skipwhite nextgroup=@fishNext
+
+syn match   fishVariable /\$\+[[:alnum:]_]\+/ skipwhite nextgroup=@fishNext
+syn match   fishVariable /\$\+[[:alnum:]_]\+\[/me=e-1,he=e-1 nextgroup=fishSubscript
+
+syn region  fishSubscript matchgroup=fishVariable start=/\[/ end=/]/ contained
+    \ keepend contains=@fishSubscriptArgs
+    \ skipwhite nextgroup=@fishNext
+
+syn region  fishCommandSub matchgroup=fishOperator start=/(/ start=/\$(/ end=/)/ contained
+    \ contains=@fishStatement
+    \ skipwhite nextgroup=@fishNext
+
+syn region  fishQuote start=/'/ skip=/\\'/ end=/'/ contained
+    \ contains=fishEscapedEscape,fishEscapedSQuote
+    \ skipwhite nextgroup=@fishNext
+syn region  fishQuote start=/"/ skip=/\\"/ end=/"/ contained
+    \ contains=fishEscapedEscape,fishEscapedDQuote,fishEscapedDollar,fishInnerVariable,fishQuotedCommandSub
+    \ skipwhite nextgroup=@fishNext
+
+syn match   fishEscapedEscape /\\\\/ contained
+syn match   fishEscapedSQuote /\\'/ contained
+syn match   fishEscapedDQuote /\\"/ contained
+syn match   fishEscapedDollar /\\\$/ contained
+hi def link fishEscapedEscape fishCharacter
+hi def link fishEscapedSQuote fishCharacter
+hi def link fishEscapedDQuote fishCharacter
+hi def link fishEscapedDollar fishCharacter
+
+syn match   fishCharacter /\\[0-7]\{1,3}/                          contained skipwhite nextgroup=@fishNext
+syn match   fishCharacter /\\u[0-9a-fA-F]\{4}/                     contained skipwhite nextgroup=@fishNext
+syn match   fishCharacter /\\U[0-9a-fA-F]\{8}/                     contained skipwhite nextgroup=@fishNext
+syn match   fishCharacter /\\x[0-7][0-9a-fA-F]\|\\x[0-9a-fA-F]/    contained skipwhite nextgroup=@fishNext
+syn match   fishCharacter /\\X[0-9a-fA-F]\{1,2}/                   contained skipwhite nextgroup=@fishNext
+syn match   fishCharacter /\\[abcefnrtv[\](){}<>\\*?~%#$|&;'" ]/   contained skipwhite nextgroup=@fishNext
+
+syn match   fishRedirection /</ contained skipwhite nextgroup=fishRedirectionTarget
+syn match   fishRedirection /[0-9&]\?>[>?]\?/ contained skipwhite nextgroup=fishRedirectionTarget
+syn match   fishRedirection /[0-9&]\?>&[0-9-]/ contained skipwhite nextgroup=@fishNext
+
+syn match   fishRedirectionTarget /[[:alnum:]$~*?{,}"'\/._-]\+/ contained contains=fishInnerVariable skipwhite nextgroup=@fishNext
+hi def link fishRedirectionTarget fishRedirection
+
+syn match fishSelfPid /%self\>/ contained nextgroup=@fishNext
+hi def link fishSelfPid fishOperator
+
+
+" Terminators
+
+syn cluster fishTerminator contains=fishPipe,fishBackgroundJob,fishSemicolon,fishSymbolicAndOr
+
+syn match   fishPipe /\(1>\|2>\|&\)\?|/ contained skipwhite nextgroup=@fishStatement
+hi def link fishPipe fishEnd
+
+syn match   fishBackgroundJob /&$/ contained skipwhite nextgroup=@fishStatement
+syn match   fishBackgroundJob /&[^<>&|]/me=s+1,he=s+1 contained skipwhite nextgroup=@fishStatement
+hi def link fishBackgroundJob fishEnd
+
+syn match   fishSemicolon /;/ skipwhite nextgroup=@fishStatement
+hi def link fishSemicolon fishEnd
+
+syn match   fishSymbolicAndOr /\(&&\|||\)/ contained skipwhite skipempty nextgroup=@fishStatement
+hi def link fishSymbolicAndOr fishOperator
+
+
+" Other
+
+syn cluster fishNext contains=fishEscapedNl,@fishArgument,@fishTerminator
+
+syn match   fishEscapedNl /\\$/ skipnl skipwhite contained nextgroup=@fishNext
+
+syn match   fishComment /#.*/ contains=fishTodo,@Spell
+
+syn keyword fishTodo TODO contained
+
+
+
+syn sync minlines=200
+syn sync maxlines=300
+
+
+" Intermediate highlight groups matching $fish_color_* variables
+
+hi def link fishCommand                 fish_color_command
+hi def link fishComment                 fish_color_comment
+hi def link fishEnd                     fish_color_end
+hi def link fishCharacter               fish_color_escape
+hi def link fishKeyword                 fish_color_keyword
+hi def link fishEscapedNl               fish_color_normal
+hi def link fishOperator                fish_color_operator
+hi def link fishVariable                fish_color_operator
+hi def link fishInnerVariable           fish_color_operator
+hi def link fishPathGlob                fish_color_operator
+hi def link fishOption                  fish_color_option
+hi def link fishParameter               fish_color_param
+hi def link fishQuote                   fish_color_quote
+hi def link fishRedirection             fish_color_redirection
+
+
+" Default highlight groups 
+
+hi def link fish_color_param        Normal
+hi def link fish_color_normal       Normal
+hi def link fish_color_option       Normal
+hi def link fish_color_command      Function
+hi def link fish_color_keyword      Keyword
+hi def link fish_color_end          Delimiter
+hi def link fish_color_operator     Operator
+hi def link fish_color_redirection  Type
+hi def link fish_color_quote        String
+hi def link fish_color_escape       Character
+hi def link fish_color_comment      Comment
+
+hi def link fishTodo                Todo
+
+
+let b:current_syntax = 'fish'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save