📄 sh.vim
字号:
" Vim syntax file" Language: shell (sh) Korn shell (ksh) bash (sh)" Maintainer: Dr. Charles E. Campbell, Jr. <Charles.E.Campbell.1@gsfc.nasa.gov>" Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int>" Last Change: May 1, 2001" Version: 22"" Using the following VIM variables:" b:is_kornshell if defined, enhance with kornshell syntax" b:is_bash if defined, enhance with bash syntax" is_kornshell if neither b:is_kornshell or b:is_bash is" defined, then if is_kornshell is set" b:is_kornshell is default" is_bash if none of the previous three variables are" defined, then if is_bash is set b:is_bash is default"" This file includes many ideas from 蓃ic Brunet (eric.brunet@ens.fr)" For version 5.x: Clear all syntax items" For version 6.x: Quit when a syntax file was already loadedif version < 600 syntax clearelseif exists("b:current_syntax") finishendif" b:is_sh is set when "#! /bin/sh" is found;" However, it often is just a masquerade by bash or kornshell." So, when the user to set "is_bash" or "is_kornshell"," a b:is_sh is converted into b:is_bash/b:is_kornshell," respectively.if !exists("b:is_kornshell") && !exists("b:is_bash") if exists("is_kornshell") let b:is_kornshell= 1 if exists("b:is_sh") unlet b:is_sh endif elseif exists("is_bash") let b:is_bash= 1 if exists("b:is_sh") unlet b:is_sh endif else let b:is_sh= 1 endifendif" sh syntax is case sensitivesyn case match" This one is needed INSIDE a CommandSub, so that" `echo bla` be correctsyn cluster shEchoList contains=shNumber,shArithmetic,shCommandSub,shSinglequote,shDeref,shSpecialVar,shSpecial,shOperator,shDoubleQuote,shCharClasssyn region shEcho matchgroup=shStatement start="\<echo\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoListsyn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList" This must be after the strings, so that bla \" be correctsyn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|`)]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=shNumber,shSinglequote,shDeref,shSpecialVar,shSpecial,shOperator,shDoubleQuote,shCharClass"Error Codessyn match shDoError "\<done\>"syn match shIfError "\<fi\>"syn match shInError "\<in\>"syn match shCaseError ";;"syn match shEsacError "\<esac\>"syn match shCurlyError "}"syn match shParenError ")"if exists("b:is_kornshell") syn match shDTestError "]]"endifsyn match shTestError "]"" Options interceptorsyn match shOption "\s[\-+][a-zA-Z0-9]\+\>"ms=s+1syn match shOption "\s--\S\+"ms=s+1" error clusters:"================syn cluster shErrorList contains=shCaseError,shCurlyError,shDTestError,shDerefError,shDoError,shEsacError,shIfError,shInError,shParenError,shTestErrorsyn cluster shErrorFuncList contains=shDerefErrorsyn cluster shErrorLoopList contains=shCaseError,shDTestError,shDerefError,shDoError,shInError,shParenError,shTestErrorsyn cluster shErrorCaseList contains=shCaseError,shDerefError,shDTestError,shDoError,shInError,shParenError,shTestErrorsyn cluster shErrorColonList contains=shDerefErrorsyn cluster shErrorNoneList contains=shDerefError" clusters: contains=@... clusters"==================================syn cluster shCaseEsacList contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shCommandSubsyn cluster shIdList contains=shCommandSub,shWrapLineOperator,shIdWhiteSpace,shDeref,shSpecialsyn cluster shDblQuoteList contains=shCommandSub,shDeref,shSpecial,shPosnParm" clusters: contains=ALLBUT,@... clusters"=========================================syn cluster shCaseList contains=shCase,shCaseStart,shCaseBar,shDblBrace,shDerefOp,shDerefText,@shErrorCaseList,shDerefVar,shDerefOpError,shStringSpecial,shSkipInitWS,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shColonList contains=shCase,shCaseStart,shCaseBar,shDblBrace,shDerefOp,shDerefText,shFunction,shTestOpr,@shErrorColonList,shDerefVar,shDerefOpError,shStringSpecial,shSkipInitWS,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shCommandSubList1 contains=shCase,shCaseStart,shCaseBar,shDblBrace,shCommandSub,shDerefOp,shDerefText,shEcho,shFunction,shTestOpr,@shErrorList,shDerefVar,shDerefOpError,shStringSpecial,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shCommandSubList2 contains=shCase,shCaseStart,shCaseBar,shDblBrace,shDerefOp,shDerefText,shEcho,shFunction,shTestOpr,@shErrorList,shDerefVar,shDerefOpError,shStringSpecial,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shLoopList contains=@shErrorLoopList,shCase,shCaseStart,shInEsac,shCaseBar,shDerefOp,shDerefText,shDerefVar,shDerefOpError,shStringSpecial,shSkipInitWS,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shExprList1 contains=shCase,shCaseStart,shCaseBar,shDblBrace,shDerefOp,shDerefText,shFunction,shSetList,@shErrorNoneList,shDerefVar,shDerefOpError,shStringSpecial,shSkipInitWS,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shExprList2 contains=shCase,shCaseStart,shCaseBar,shDblBrace,shDerefOp,shDerefText,@shErrorNoneList,shDerefVar,shDerefOpError,shStringSpecial,shSkipInitWS,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shSubShList contains=shCase,shCaseStart,shCaseBar,shDblBrace,shDerefOp,shDerefText,shParenError,shDerefVar,shDerefOpError,shStringSpecial,shSkipInitWS,shDerefError,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shTestList contains=shCase,shCaseStart,shCaseBar,shDblBrace,shDTestError,shDerefError,shDerefOp,shDerefText,shExpr,shFunction,shSetList,shTestError,shDerefVar,shDerefOpError,shStringSpecial,shSkipInitWS,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifiersyn cluster shFunctionList contains=shCase,shCaseStart,shCaseBar,shDblBrace,@shErrorFuncList,shDerefOp,shDerefText,shFunction,shDerefVar,shDerefOpError,shStringSpecial,shSkipInitWS,shIdWhiteSpace,shDerefTextError,shPattern,shSetIdentifier" Tests"======syn region shExpr transparent matchgroup=shOperator start="\[" skip=+\\\\\|\\$+ end="\]" contains=ALLBUT,@shTestListsyn region shExpr transparent matchgroup=shStatement start="\<test\>" skip=+\\\\\|\\$+ matchgroup=NONE end="[;&|]"me=e-1 end="$" contains=ALLBUT,@shExprList1if exists("b:is_kornshell") syn region shDblBrace transparent matchgroup=shOperator start="\[\[" skip=+\\\\\|\\$+ end="\]\]" contains=ALLBUT,@shTestListendifsyn match shTestOpr contained "[!=]\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>"" do, ifsyn region shDo transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=ALLBUT,@shLoopListsyn region shIf transparent matchgroup=shConditional start="\<if\>" matchgroup=shConditional end="\<fi\>" contains=ALLBUT,@shLoopListsyn region shFor matchgroup=shStatement start="\<for\>" end="\<in\>" end="\<do\>"me=e-2 contains=ALLBUT,@shLoopList" casesyn region shCaseEsac matchgroup=shConditional start="\<case\>" matchgroup=shConditional end="\<esac\>" contains=@shCaseEsacListsyn keyword shCaseIn contained skipwhite skipnl in nextgroup=shCase,shCaseStart,shCaseBar,shCommentsyn region shCase contained skipwhite skipnl matchgroup=shConditional start="[^$()]\{-})"ms=s,hs=e end=";;" end="esac"me=s-1 contains=ALLBUT,@shCaseList nextgroup=shCase,shCaseStart,shCaseBar,shCommentsyn match shCaseStart contained skipwhite skipnl "(" nextgroup=shCasesyn match shCaseBar contained "[^|)]\{-}|"hs=e nextgroup=shCase,shCaseStart,shCaseBarsyn region shExpr transparent matchgroup=shExprRegion start="{" end="}" contains=ALLBUT,@shExprList2syn region shSubSh transparent matchgroup=shSubShRegion start="(" end=")" contains=ALLBUT,@shSubShList" Misc"=====syn match shOperator "[!&;|]"syn match shOperator "\[\[[^:]\|]]"syn match shCharClass "\[:\(backspace\|escape\|return\|xdigit\|alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|tab\):\]"syn match shOperator "!\==" skipwhite nextgroup=shPatternsyn match shPattern "\<\S\+" contained contains=shSinglequote,shDoublequote,shDerefsyn match shWrapLineOperator "\\$"syn region shCommandSub start="`" skip="\\`" end="`" contains=ALLBUT,@shCommandSubList1" $(..) is not supported by sh (Bourne shell). However, apparently" some systems (HP?) have as their /bin/sh a (link to) Korn shell" (ie. Posix compliant shell). /bin/ksh should work for those" systems too, however, so the following syntax will flag $(..) as" an Error under /bin/sh. By consensus of vimdev'ers!if exists("b:is_kornshell") || exists("b:is_bash") syn region shCommandSub matchgroup=shCmdSubRegion start="\$(" end=")" contains=ALLBUT,@shCommandSubList2 syn region shArithmetic matchgroup=shArithRegion start="\$((" end="))" contains=ALLBUT,@shCommandSubList2 syn match shSkipInitWS contained "^\s\+"else syn region shCommandSub matchgroup=Error start="$(" end=")" contains=ALLBUT,@shCommandSubList2endifif exists("b:is_bash") syn keyword bashSpecialVariables contained BASH HISTCONTROL LANG OPTERR PWD syn keyword bashSpecialVariables contained BASH_ENV HISTFILE LC_ALL OPTIND RANDOM syn keyword bashSpecialVariables contained BASH_VERSINFO HISTFILESIZE LC_COLLATE OSTYPE REPLY syn keyword bashSpecialVariables contained BASH_VERSION HISTIGNORE LC_MESSAGES PATH SECONDS syn keyword bashSpecialVariables contained CDPATH HISTSIZE LINENO PIPESTATUS SHELLOPTS syn keyword bashSpecialVariables contained DIRSTACK HOME MACHTYPE PPID SHLVL syn keyword bashSpecialVariables contained EUID HOSTFILE MAIL PROMPT_COMMAND TIMEFORMAT syn keyword bashSpecialVariables contained FCEDIT HOSTNAME MAILCHECK PS1 TIMEOUT syn keyword bashSpecialVariables contained FIGNORE HOSTTYPE MAILPATH PS2 UID syn keyword bashSpecialVariables contained GLOBIGNORE IFS OLDPWD PS3 auto_resume syn keyword bashSpecialVariables contained GROUPS IGNOREEOF OPTARG PS4 histchars syn keyword bashSpecialVariables contained HISTCMD INPUTRC syn keyword bashStatement chmod fgrep install rm sort syn keyword bashStatement clear find less rmdir strip syn keyword bashStatement du gnufind ls rpm tail syn keyword bashStatement egrep gnugrep mkdir sed touch syn keyword bashStatement expr grep mv sleep complete syn keyword bashAdminStatement daemon killproc reload start stop syn keyword bashAdminStatement killall nice restart statusendifif exists("b:is_kornshell") syn keyword kshSpecialVariables contained CDPATH HISTFILE MAILCHECK PPID RANDOM syn keyword kshSpecialVariables contained COLUMNS HISTSIZE MAILPATH PS1 REPLY syn keyword kshSpecialVariables contained EDITOR HOME OLDPWD PS2 SECONDS syn keyword kshSpecialVariables contained ENV IFS OPTARG PS3 SHELL syn keyword kshSpecialVariables contained ERRNO LINENO OPTIND PS4 TMOUT syn keyword kshSpecialVariables contained FCEDIT LINES PATH PWD VISUAL syn keyword kshSpecialVariables contained FPATH MAIL syn keyword kshStatement cat expr less printenv strip syn keyword kshStatement chmod fgrep ls rm stty syn keyword kshStatement clear find mkdir rmdir tail syn keyword kshStatement cp grep mv sed touch syn keyword kshStatement du install nice sort tput syn keyword kshStatement egrep killallendifsyn match shSource "^\.\s"syn match shSource "\s\.\s"syn region shColon start="^\s*:" end="$\|" end="#"me=e-1 contains=ALLBUT,@shColonList" Comments"=========syn keyword shTodo contained TODO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -