mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 21:25:04 -07:00
226 lines
9.2 KiB
VimL
226 lines
9.2 KiB
VimL
|
" 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
|