mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04: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 |