neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

tcsh.vim (13581B)


      1 " Vim syntax file
      2 " Language:		tcsh scripts
      3 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
      4 " Previous Maintainer:	Gautam Iyer <gi1242+vim@NoSpam.com> where NoSpam=gmail (Original Author)
      5 " Last Change:		2026 Jan 16
      6 
      7 " Description: We break up each statement into a "command" and an "end" part.
      8 " All groups are either a "command" or part of the "end" of a statement (ie
      9 " everything after the "command"). This is because blindly highlighting tcsh
     10 " statements as keywords caused way too many false positives. Eg:
     11 "
     12 " 	set history=200
     13 "
     14 " causes history to come up as a keyword, which we want to avoid.
     15 
     16 " Quit when a syntax file was already loaded
     17 if exists('b:current_syntax')
     18  finish
     19 endif
     20 
     21 let s:oldcpo = &cpo
     22 set cpo&vim " Line continuation is used
     23 
     24 syn iskeyword @,48-57,_,192-255,-
     25 
     26 syn case match
     27 
     28 " ----- Clusters ----- {{{1
     29 syn cluster tcshModifiers	contains=tcshModifier,tcshModifierError
     30 syn cluster tcshQuoteList	contains=tcshDQuote,tcshSQuote,tcshBQuote
     31 syn cluster tcshStatementEnds	contains=@tcshQuoteList,tcshComment,@tcshVarList,tcshRedir,tcshMeta,tcshHereDoc,tcshSpecial,tcshArgument
     32 syn cluster tcshStatements	contains=tcshBuiltin,tcshCommands,tcshIf,tcshWhile
     33 syn cluster tcshVarList		contains=tcshUsrVar,tcshArgv,tcshSubst
     34 syn cluster tcshConditions	contains=tcshCmdSubst,tcshParenExpr,tcshOperator,tcshNumber,@tcshVarList
     35 
     36 " ----- Errors ----- {{{1
     37 " Define first, so can be easily overridden.
     38 syn match tcshError contained '\v\S.+'
     39 
     40 " ----- Statements ----- {{{1
     41 " Tcsh commands: Any filename / modifiable variable (must be first!)
     42 syn match tcshCommands	'\v[a-zA-Z0-9\\./_$:-]+' contains=tcshSpecial,tcshUsrVar,tcshArgv,tcshVarError nextgroup=tcshStatementEnd
     43 
     44 " Builtin commands except those treated specially. Currently (un)set(env),
     45 " (un)alias, if, while, else, bindkey
     46 syn keyword tcshBuiltin nextgroup=tcshStatementEnd alloc bg break breaksw builtins bye case cd chdir complete continue default dirs echo echotc end endif endsw eval exec exit fg filetest foreach getspath getxvers glob goto hashstat history hup inlib jobs kill limit log login logout ls ls-F migrate newgrp nice nohup notify onintr popd printenv pushd rehash repeat rootnode sched setpath setspath settc setty setxvers shift source stop suspend switch telltc termname time umask uncomplete unhash universe unlimit ver wait warp watchlog where which
     47 
     48 " StatementEnd is anything after a built-in / command till the lexical end of a
     49 " statement (;, |, ||, |&, && or end of line)
     50 syn region tcshStatementEnd	transparent contained matchgroup=tcshBuiltin start='' end='\v\\@<!(;|\|[|&]?|\&\&|$)' contains=@tcshStatementEnds
     51 
     52 " set expressions (Contains shell variables)
     53 syn keyword tcshShellVar contained addsuffix afsuser ampm anyerror argv autocorrect autoexpand autolist autologout autorehash backslash_quote catalog cdpath cdtohome color colorcat command compat_expr complete continue continue_args correct csubstnonl cwd dextract dirsfile dirstack dspmbyte dunique echo echo_style edit editors ellipsis euid euser fignore filec gid globdot globstar group highlight histchars histdup histfile histlit history home ignoreeof implicitcd inputmode killdup killring listflags listjobs listlinks listmax listmaxrows loginsh logout mail matchbeep nobeep noclobber noding noglob nokanji nonomatch nostat notify oid owd padhour parseoctal path printexitvalue prompt prompt2 prompt3 promptchars pushdtohome pushdsilent recexact recognize_only_executables rmstar rprompt savedirs savehist sched shell shlvl status symlinks tcsh term time tperiod tty uid user verbose version vimode visiblebell watch who wordchars
     54 syn keyword tcshBuiltin	nextgroup=tcshSetEnd set unset
     55 syn region  tcshSetEnd	contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=tcshShellVar,@tcshStatementEnds
     56 
     57 " setenv expressions (Contains environment variables)
     58 syn keyword tcshEnvVar contained AFSUSER COLUMNS DISPLAY EDITOR GROUP HOME HOST HOSTTYPE HPATH LANG LC_CTYPE LINES LS_COLORS MACHTYPE NOREBIND OSTYPE PATH PWD REMOTEHOST SHLVL SYSTYPE TERM TERMCAP USER VENDOR VISUAL
     59 syn keyword tcshBuiltin	nextgroup=tcshEnvEnd setenv unsetenv
     60 syn region  tcshEnvEnd	contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=tcshEnvVar,@tcshStatementEnds
     61 
     62 " alias and unalias (contains special aliases)
     63 syn keyword tcshAliases contained beepcmd cwdcmd jobcmd helpcommand periodic precmd postcmd shell
     64 syn keyword tcshBuiltin	nextgroup=tcshAliCmd skipwhite alias unalias
     65 syn match   tcshAliCmd	contained nextgroup=tcshAliEnd skipwhite '\v(\w|-)+' contains=tcshAliases
     66 syn region  tcshAliEnd	contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=@tcshStatementEnds
     67 
     68 " if statements
     69 syn keyword tcshIf	nextgroup=tcshIfEnd skipwhite if
     70 syn region  tcshIfEnd	contained start='\S' skip='\\$' matchgroup=tcshBuiltin end='\v<then>|$' contains=@tcshConditions,tcshSpecial,@tcshStatementEnds
     71 syn region  tcshIfEnd	contained matchgroup=tcshBuiltin contains=@tcshConditions,tcshSpecial start='(' end='\v\)%(\s+then>)?' skipwhite nextgroup=@tcshStatementEnds 
     72 syn region  tcshIfEnd	contained matchgroup=tcshBuiltin contains=tcshCommands,tcshSpecial start='\v\{\s+' end='\v\s+\}%(\s+then>)?' skipwhite nextgroup=@tcshStatementEnds keepend
     73 
     74 " else statements
     75 syn keyword tcshBuiltin	nextgroup=tcshIf skipwhite else
     76 
     77 " while statements (contains expressions / operators)
     78 syn keyword tcshBuiltin	nextgroup=@tcshConditions,tcshSpecial skipwhite while
     79 
     80 " Conditions (for if and while)
     81 syn region tcshParenExpr contained contains=@tcshConditions,tcshSpecial matchgroup=tcshBuiltin start='(' end=')'
     82 syn region tcshCmdSubst  contained contains=tcshCommands matchgroup=tcshBuiltin start='\v\{\s+' end='\v\s+\}' keepend
     83 
     84 " Bindkey. Internal editor functions
     85 syn keyword tcshBindkeyFuncs contained backward-char backward-delete-char
     86     \ backward-delete-word backward-kill-line backward-word
     87     \ beginning-of-line capitalize-word change-case
     88     \ change-till-end-of-line clear-screen complete-word
     89     \ complete-word-fwd complete-word-back complete-word-raw
     90     \ copy-prev-word copy-region-as-kill dabbrev-expand delete-char
     91     \ delete-char-or-eof delete-char-or-list
     92     \ delete-char-or-list-or-eof delete-word digit digit-argument
     93     \ down-history downcase-word end-of-file end-of-line
     94     \ exchange-point-and-mark expand-glob expand-history expand-line
     95     \ expand-variables forward-char forward-word
     96     \ gosmacs-transpose-chars history-search-backward
     97     \ history-search-forward insert-last-word i-search-fwd
     98     \ i-search-back keyboard-quit kill-line kill-region
     99     \ kill-whole-line list-choices list-choices-raw list-glob
    100     \ list-or-eof load-average magic-space newline newline-and-hold
    101     \ newline-and-down-history normalize-path normalize-command
    102     \ overwrite-mode prefix-meta quoted-insert redisplay
    103     \ run-fg-editor run-help self-insert-command sequence-lead-in
    104     \ set-mark-command spell-word spell-line stuff-char
    105     \ toggle-literal-history transpose-chars transpose-gosling
    106     \ tty-dsusp tty-flush-output tty-sigintr tty-sigquit tty-sigtsusp
    107     \ tty-start-output tty-stop-output undefined-key
    108     \ universal-argument up-history upcase-word
    109     \ vi-beginning-of-next-word vi-add vi-add-at-eol vi-chg-case
    110     \ vi-chg-meta vi-chg-to-eol vi-cmd-mode vi-cmd-mode-complete
    111     \ vi-delprev vi-delmeta vi-endword vi-eword vi-char-back
    112     \ vi-char-fwd vi-charto-back vi-charto-fwd vi-insert
    113     \ vi-insert-at-bol vi-repeat-char-fwd vi-repeat-char-back
    114     \ vi-repeat-search-fwd vi-repeat-search-back vi-replace-char
    115     \ vi-replace-mode vi-search-back vi-search-fwd vi-substitute-char
    116     \ vi-substitute-line vi-word-back vi-word-fwd vi-undo vi-zero
    117     \ which-command yank yank-pop e_copy_to_clipboard
    118     \ e_paste_from_clipboard e_dosify_next e_dosify_prev e_page_up
    119     \ e_page_down
    120 syn keyword tcshBuiltin nextgroup=tcshBindkeyEnd bindkey
    121 syn region tcshBindkeyEnd contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$' contains=@tcshQuoteList,tcshComment,@tcshVarList,tcshMeta,tcshSpecial,tcshArgument,tcshBindkeyFuncs
    122 
    123 " Expressions start with @.
    124 syn match tcshExprStart '\v\@\s+' nextgroup=tcshExprVar
    125 syn match tcshExprVar	contained '\v\h\w*%(\[\d+\])?' contains=tcshShellVar,tcshEnvVar nextgroup=tcshExprOp
    126 syn match tcshExprOp	contained '++\|--'
    127 syn match tcshExprOp	contained '\v\s*\=' nextgroup=tcshExprEnd
    128 syn match tcshExprEnd	contained '\v.*$'hs=e+1 contains=@tcshConditions
    129 syn match tcshExprEnd	contained '\v.{-};'hs=e	contains=@tcshConditions
    130 
    131 " ----- Comments: ----- {{{1
    132 syn match tcshSharpBang '\%^#!.*$'
    133 syn match tcshComment	'#.*' contains=tcshTodo,@Spell
    134 syn match tcshTodo	contained '\v%(^\s*#\s*)@<=\c<%(TODO|FIXME|XXX)>'
    135 
    136 " TODO: leading whitespace match is needed to prevent keyword matching
    137 syn match tcshLabel     '^\s*\w\+:\ze\s*$'
    138 
    139 " ----- Strings ----- {{{1
    140 " Tcsh does not allow \" in strings unless the "backslash_quote" shell
    141 " variable is set. Set the vim variable "tcsh_backslash_quote" to 0 if you
    142 " want VIM to assume that no backslash quote constructs exist.
    143 
    144 " Backquotes are treated as commands, and are not contained in anything
    145 if get(g:, 'tcsh_backslash_quote', 1)
    146    syn region tcshSQuote	contained start="'" skip="\v\\\\|\\'" end="'"
    147    syn region tcshDQuote	contained start='"' end='"' contains=@tcshVarList,tcshSpecial,@Spell
    148    syn region tcshBQuote	keepend matchgroup=tcshBQuoteGrp start='`' skip='\v\\\\|\\`' end='`' contains=@tcshStatements
    149 else
    150    syn region tcshSQuote	keepend contained start="'" end="'"
    151    syn region tcshDQuote	keepend contained start='"' end='"' contains=@tcshVarList,tcshSpecial,@Spell
    152    syn region tcshBQuote	keepend start='`' end='`' contains=@tcshStatements
    153 endif
    154 
    155 " ----- Variables ----- {{{1
    156 " Variable Errors. Must come first! \$ constructs will be flagged by
    157 " tcshSpecial, so we don't consider them here.
    158 syn match tcshVarError	'\v\$\S*'	contained
    159 
    160 " Modifiable Variables without {}.
    161 syn match tcshUsrVar contained '\v\$\h\w*%(\[\d+%(-\d+)?\])?' nextgroup=@tcshModifiers contains=tcshShellVar,tcshEnvVar
    162 syn match tcshArgv   contained '\v\$%(\d+|\*)' nextgroup=@tcshModifiers
    163 
    164 " Modifiable Variables with {}.
    165 syn match tcshUsrVar contained '\v\$\{\h\w*%(\[\d+%(-\d+)?\])?%(:\S*)?\}' contains=@tcshModifiers,tcshShellVar,tcshEnvVar
    166 syn match tcshArgv   contained '\v\$\{%(\d+|\*)%(:\S*)?\}' contains=@tcshModifiers
    167 
    168 " Un-modifiable Substitutions. Order is important here.
    169 syn match tcshSubst contained	'\v\$[?#$!_<]' nextgroup=tcshModifierError
    170 syn match tcshSubst contained	'\v\$[%#?]%(\h\w*|\d+)' nextgroup=tcshModifierError contains=tcshShellVar,tcshEnvVar
    171 syn match tcshSubst contained	'\v\$\{[%#?]%(\h\w*|\d+)%(:\S*)?\}' contains=tcshModifierError contains=tcshShellVar,tcshEnvVar
    172 
    173 " Variable Name Expansion Modifiers (order important)
    174 syn match tcshModifierError	contained '\v:\S*'
    175 syn match tcshModifier		contained '\v:[ag]?[htreuls&qx]' nextgroup=@tcshModifiers
    176 
    177 " ----- Operators / Specials ----- {{{1
    178 " Standard redirects (except <<) [<, >, >>, >>&, >>!, >>&!]
    179 syn match tcshRedir contained	'\v\<|\>\>?\&?!?'
    180 
    181 " Meta-chars
    182 syn match tcshMeta  contained	'\v[]{}*?[]'
    183 
    184 " Here documents (<<)
    185 syn region tcshHereDoc contained matchgroup=tcshShellVar start='\v\<\<\s*\z(\h\w*)' end='^\z1$' contains=@tcshVarList,tcshSpecial fold
    186 syn region tcshHereDoc contained matchgroup=tcshShellVar start="\v\<\<\s*'\z(\h\w*)'" start='\v\<\<\s*"\z(\h\w*)"$' start='\v\<\<\s*\\\z(\h\w*)$' end='^\z1$' fold
    187 
    188 " Operators
    189 syn match tcshOperator	contained '&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||'
    190 "syn match tcshOperator	contained '[(){}]'
    191 
    192 " Numbers
    193 syn match tcshNumber	contained '\v<-?\d+>'
    194 
    195 " Arguments
    196 syn match tcshArgument	contained '\v\s@<=-(\w|-)*'
    197 
    198 " Special characters. \xxx, or backslashed characters.
    199 "syn match tcshSpecial	contained '\v\\@<!\\(\d{3}|.)'
    200 syn match tcshSpecial	contained '\v\\%([0-7]{3}|.)'
    201 
    202 " ----- Synchronising ----- {{{1
    203 if exists('tcsh_minlines')
    204    if tcsh_minlines == 'fromstart'
    205 syn sync fromstart
    206    else
    207 exec 'syn sync minlines=' . tcsh_minlines
    208    endif
    209 else
    210    syn sync minlines=100	" Some completions can be quite long
    211 endif
    212 
    213 " ----- Highlighting ----- {{{1
    214 " Define highlighting of syntax groups
    215 hi def link tcshError		Error
    216 hi def link tcshBuiltin		Statement
    217 hi def link tcshShellVar	Preproc
    218 hi def link tcshEnvVar		tcshShellVar
    219 hi def link tcshAliases		tcshShellVar
    220 hi def link tcshAliCmd		Identifier
    221 hi def link tcshCommands	Identifier
    222 hi def link tcshIf		tcshBuiltin
    223 hi def link tcshWhile		tcshBuiltin
    224 hi def link tcshBindkeyFuncs	Function
    225 hi def link tcshExprStart	tcshBuiltin
    226 hi def link tcshExprVar		tcshUsrVar
    227 hi def link tcshExprOp		tcshOperator
    228 hi def link tcshExprEnd		tcshOperator
    229 hi def link tcshComment		Comment
    230 hi def link tcshSharpBang	PreProc
    231 hi def link tcshTodo		Todo
    232 hi def link tcshSQuote		String
    233 hi def link tcshDQuote		tcshSQuote
    234 hi def link tcshBQuoteGrp	Include
    235 hi def link tcshVarError	Error
    236 hi def link tcshUsrVar		Type
    237 hi def link tcshArgv		tcshUsrVar
    238 hi def link tcshSubst		tcshUsrVar
    239 hi def link tcshModifier	tcshArgument
    240 hi def link tcshModifierError	tcshVarError
    241 hi def link tcshMeta		tcshSubst
    242 hi def link tcshRedir		tcshOperator
    243 hi def link tcshHereDoc		tcshSQuote
    244 hi def link tcshOperator	Operator
    245 hi def link tcshNumber		Number
    246 hi def link tcshArgument	Special
    247 hi def link tcshSpecial		SpecialChar
    248 hi def link tcshLabel		Label
    249 " }}}
    250 
    251 let &cpo = s:oldcpo
    252 unlet s:oldcpo
    253 
    254 let b:current_syntax = 'tcsh'
    255 
    256 " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: