2323" 2026 Feb 11 improve support for KornShell function names and variables
2424" 2026 Feb 15 improve comment handling #19414
2525" 2026 Mar 23 improve matching of function definitions #19638
26+ " 2026 Apr 02 improve matching of function definitions #19849
2627" }}}
2728" Version: 208
2829" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
@@ -665,12 +666,12 @@ ShFoldFunctions syn region shFunctionSubSh matchgroup=shFunctionSubShRegion star
665666
666667if exists (" b:is_bash" )
667668 syn keyword shFunctionKey coproc
668- syn match shFunctionCmdOne " ^\s *\z s\% (\<\k\+\| [^()<>|&$;\t ]\+\)\+\s *()\z e\_ s*\% (\% (for\| case\| select\| if\| while\| until\)\>\|\[\[\s\| ((\) " skipwhite skipnl nextgroup =@shFunctionCmds
669- syn match shFunctionCmdTwo " \% ( \ <\k\+\>\| [^()<>|&$;\t ]\+\)\+\z e\s *\% (()\z e\)\=\_ s*\% (\<\% (for\| case\| select\| if\| while\| until\)\>\|\[\[\s\| ((\) " contained skipwhite skipnl nextgroup =@shFunctionCmds
670- syn match shFunctionOne " ^\s *\z s\% (\<\k\+\| [^()<>|&$;\t ]\+\)\+\s *()\z e\_ s*{" skipwhite skipnl nextgroup =shFunctionExpr
671- syn match shFunctionTwo " \% ( \ <\k\+\| [^()<>|&$;\t ]\+\)\+\z e\s *\% (()\z e\)\=\_ s*{" contained skipwhite skipnl nextgroup =shFunctionExpr
672- syn match shFunctionThree " ^\s *\z s\% (\<\k\+\| [^()<>|&$;\t ]\+\)\+\s *()\z e\_ s*((\@ !" skipwhite skipnl nextgroup =shFunctionSubSh
673- syn match shFunctionFour " \% ( \ <\k\+\| [^()<>|&$;\t ]\+\)\+\z e\s *\% (\% (()\z e\)\=\)\@ >\_ s*((\@ !" contained skipwhite skipnl nextgroup =shFunctionSubSh
669+ syn match shFunctionCmdOne " \% #=1 ^\s *\z s\% (\% ( \ <\k\+\| [^()<>|&$;\t ]\+\)\+\)\@ > \s *()\z e\_ s*\% (\% (for\| case\| select\| if\| while\| until\)\>\|\[\[\s\| ((\) " skipwhite skipnl nextgroup =@shFunctionCmds
670+ syn match shFunctionCmdTwo " \% #=1 \% ( \% ( \ <\k\+\>\| [^()<>|&$;\t ]\+\)\+\)\@ > \z e\s *\% (()\z e\)\=\_ s*\% (\<\% (for\| case\| select\| if\| while\| until\)\>\|\[\[\s\| ((\) " contained skipwhite skipnl nextgroup =@shFunctionCmds
671+ syn match shFunctionOne " \% #=1 ^\s *\z s\% (\% ( \ <\k\+\| [^()<>|&$;\t ]\+\)\+\)\@ > \s *()\z e\_ s*{" skipwhite skipnl nextgroup =shFunctionExpr
672+ syn match shFunctionTwo " \% #=1 \% ( \% ( \ <\k\+\| [^()<>|&$;\t ]\+\)\+\)\@ > \z e\s *\% (()\z e\)\=\_ s*{" contained skipwhite skipnl nextgroup =shFunctionExpr
673+ syn match shFunctionThree " \% #=1 ^\s *\z s\% (\% ( \ <\k\+\| [^()<>|&$;\t ]\+\)\+\)\@ > \s *()\z e\_ s*((\@ !" skipwhite skipnl nextgroup =shFunctionSubSh
674+ syn match shFunctionFour " \% #=1 \% ( \% ( \ <\k\+\| [^()<>|&$;\t ]\+\)\+\)\@ > \z e\s *\% (\% (()\z e\)\=\)\@ >\_ s*((\@ !" contained skipwhite skipnl nextgroup =shFunctionSubSh
674675elseif exists (" b:is_ksh88" )
675676 " AT&T ksh88
676677 syn match shFunctionCmdOne " ^\s *\z s\h\w *\s *()\z e\_ s*\% (\% (for\| case\| select\| if\| while\| until\)\>\|\[\[\s\| ((\) " skipwhite skipnl nextgroup =@shFunctionCmds
@@ -681,13 +682,13 @@ elseif exists("b:is_mksh")
681682 " MirBSD ksh is the wild west of absurd and abstruse function names...
682683 syn match shFunctionCmdOne " ^\s *\z s[-A-Za-z_@!+.%,0-9:]*[-A-Za-z_.%,0-9:]\s *()\z e\_ s*\% (\% (for\| case\| select\| if\| while\| until\)\>\|\[\[\s\| ((\) " skipwhite skipnl nextgroup =@shFunctionCmds
683684 syn match shFunctionOne " ^\s *\z s[-A-Za-z_@!+.%,0-9:]*[-A-Za-z_.%,0-9:]\s *()\z e\_ s*{" skipwhite skipnl nextgroup =shFunctionExpr
684- syn match shFunctionTwo " \% ( [@!+.%,:-]\+\|\<\w\+\ ) *[-A-Za-z_.%,0-9:]\z e\s *\% (()\z e\)\=\_ s*{" contained skipwhite skipnl nextgroup =shFunctionExpr
685+ syn match shFunctionTwo " \% #=1 \% ( \% ( \<\w\+\| [@!+.%,:-]\+\) *[-A-Za-z_.%,0-9:]\)\@ > \z e\s *\% (()\z e\)\=\_ s*{" contained skipwhite skipnl nextgroup =shFunctionExpr
685686 syn match shFunctionThree " ^\s *\z s[-A-Za-z_@!+.%,0-9:]*[-A-Za-z_.%,0-9:]\s *()\z e\_ s*((\@ !" skipwhite skipnl nextgroup =shFunctionSubSh
686687elseif exists (" b:is_kornshell" )
687688 " ksh93
688689 syn match shFunctionCmdOne " ^\s *\z s[A-Za-z_.][A-Za-z_.0-9]*\s *()\z e\_ s*\% (\% (for\| case\| select\| if\| while\| until\)\>\|\[\[\s\| ((\) " skipwhite skipnl nextgroup =@shFunctionCmds
689690 syn match shFunctionOne " ^\s *\z s[A-Za-z_.][A-Za-z_.0-9]*\s *()\z e\_ s*{" skipwhite skipnl nextgroup =shFunctionExpr
690- syn match shFunctionTwo " \% (\.\|\ <\h\+\) [A-Za-z_.0-9]*\z e\_ s*{" contained skipwhite skipnl nextgroup =shFunctionExpr
691+ syn match shFunctionTwo " \% (\<\h\+\|\. \) [A-Za-z_.0-9]*\z e\_ s*{" contained skipwhite skipnl nextgroup =shFunctionExpr
691692 syn match shFunctionThree " ^\s *\z s[A-Za-z_.][A-Za-z_.0-9]*\s *()\z e\_ s*((\@ !" skipwhite skipnl nextgroup =shFunctionSubSh
692693 syn match shNamespaceOne " \<\h\w *\>\z e\_ s*{" contained skipwhite skipnl nextgroup =shFunctionExpr
693694else
0 commit comments