forked from aniani/vim
runtime(vim): Update base-syntax, improve :echo and :execute highlighting (#14199)
Improve :echo and :execute highlighting. - Add better line-continuation support for both commands. - Improve the :execute command's expression argument matching. - Remove the fix for issue #9987 as this is now handled by correctly matching the parens in :echo (...) as operator parens. Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
" Language: Vim script
|
||||
" Maintainer: Hirohito Higashi (h_east)
|
||||
" URL: https://github.com/vim-jp/syntax-vim-ex
|
||||
" Last Change: 2024 Mar 09
|
||||
" Version: 2.0.5
|
||||
" Last Change: 2024 Mar 14
|
||||
" Version: 2.0.6
|
||||
|
||||
let s:keepcpo= &cpo
|
||||
set cpo&vim
|
||||
@@ -264,23 +264,21 @@ function! s:get_vim_command_type(cmd_name)
|
||||
" Return value:
|
||||
" 0: normal
|
||||
" 1: (Reserved)
|
||||
" 2: abbrev
|
||||
" 3: echo
|
||||
" 4: menu
|
||||
" 5: map
|
||||
" 6: mapclear
|
||||
" 7: unmap
|
||||
" 2: abbrev (without un)
|
||||
" 3: menu
|
||||
" 4: map
|
||||
" 5: mapclear
|
||||
" 6: unmap
|
||||
" 99: (Exclude registration of "syn keyword")
|
||||
let menu_prefix = '^\%([acinostvx]\?\|tl\)'
|
||||
let map_prefix = '^[acilnostvx]\?'
|
||||
let echo_suffix = '\%(n\|hl\|msg\|window\|err\|console\|\)$'
|
||||
let exclude_list = [
|
||||
\ 'map', 'mapclear',
|
||||
\ 'substitute', 'smagic', 'snomagic',
|
||||
\ 'setlocal', 'setglobal', 'set', 'var',
|
||||
\ 'autocmd', 'augroup', 'doautocmd', 'doautoall',
|
||||
\ 'echohl',
|
||||
\ 'execute',
|
||||
\ 'echo', 'echoconsole', 'echoerr', 'echohl', 'echomsg', 'echon', 'echowindow',
|
||||
\ 'execute',
|
||||
\ 'behave', 'augroup', 'normal', 'syntax',
|
||||
\ 'append', 'insert',
|
||||
\ 'Next', 'Print', 'X',
|
||||
@@ -293,16 +291,14 @@ function! s:get_vim_command_type(cmd_name)
|
||||
let ret = 99
|
||||
elseif a:cmd_name =~# '^\%(\%(un\)\?abbreviate\|noreabbrev\|\l\%(nore\|un\)\?abbrev\)$'
|
||||
let ret = 2
|
||||
elseif a:cmd_name =~# '^echo' . echo_suffix
|
||||
let ret = 3
|
||||
elseif a:cmd_name =~# menu_prefix . '\%(nore\|un\)\?menu$'
|
||||
let ret = 4
|
||||
let ret = 3
|
||||
elseif a:cmd_name =~# map_prefix . '\%(nore\)\?map$'
|
||||
let ret = 5
|
||||
let ret = 4
|
||||
elseif a:cmd_name =~# map_prefix . 'mapclear$'
|
||||
let ret = 6
|
||||
let ret = 5
|
||||
elseif a:cmd_name =~# map_prefix . 'unmap$'
|
||||
let ret = 7
|
||||
let ret = 6
|
||||
else
|
||||
let ret = 0
|
||||
endif
|
||||
@@ -621,19 +617,16 @@ function! s:update_syntax_vim_file(vim_info)
|
||||
let li = a:vim_info.cmd
|
||||
let lnum = s:search_and_check(kword . ' abbrev', base_fname, str_info)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 2)
|
||||
" vimCommand - echo
|
||||
let lnum = s:search_and_check(kword . ' echo', base_fname, str_info)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 3)
|
||||
" vimCommand - menu
|
||||
let lnum = s:search_and_check(kword . ' menu', base_fname, str_info)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 4)
|
||||
" vimCommand - map
|
||||
let lnum = s:search_and_check(kword . ' map', base_fname, str_info)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 5)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 4)
|
||||
let lnum = s:search_and_check(kword . ' mapclear', base_fname, str_info)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 6)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 5)
|
||||
let lnum = s:search_and_check(kword . ' unmap', base_fname, str_info)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 7)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 6)
|
||||
" vimCommand - menu
|
||||
let lnum = s:search_and_check(kword . ' menu', base_fname, str_info)
|
||||
let lnum = s:append_syn_vimcmd(lnum, str_info, li, 3)
|
||||
|
||||
update
|
||||
quit!
|
||||
|
@@ -167,7 +167,7 @@ syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSub
|
||||
syn case match
|
||||
|
||||
" All vimCommands are contained by vimIsCommand. {{{2
|
||||
syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimEcho,vimEchoHL,vimExecute,vimIsCommand,vimExtCmd,vimFunction,vimGlobal,vimHighlight,vimLet,vimMap,vimMark,vimNotFunc,vimNorm,vimSet,vimSyntax,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate
|
||||
syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,@vimEcho,vimExecute,vimIsCommand,vimExtCmd,vimFunction,vimGlobal,vimHighlight,vimLet,vimMap,vimMark,vimNotFunc,vimNorm,vimSet,vimSyntax,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate
|
||||
syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
|
||||
syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand
|
||||
syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
|
||||
@@ -450,15 +450,27 @@ syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)"
|
||||
|
||||
" Echo And Execute: -- prefer strings! {{{2
|
||||
" ================
|
||||
" GEN_SYN_VIM: vimCommand echo, START_STR='syn keyword vimEcho', END_STR='skipwhite nextgroup=vimEchoExpr'
|
||||
syn region vimEchoExpr contained start="[^[:space:]|]" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" end="$" contains=@vimContinue,@vimExprList
|
||||
" NOTE: No trailing comments
|
||||
|
||||
syn match vimEchoHL "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchoHLNone
|
||||
syn region vimEcho
|
||||
\ matchgroup=vimCommand
|
||||
\ start="\<ec\%[ho]\>"
|
||||
\ start="\<echoe\%[rr]\>"
|
||||
\ start="\<echom\%[sg]\>"
|
||||
\ start="\<echoc\%[onsole]\>"
|
||||
\ start="\<echon\>"
|
||||
\ start="\<echow\%[indow]\>"
|
||||
\ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
|
||||
\ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
|
||||
|
||||
syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
|
||||
syn case ignore
|
||||
syn keyword vimEchoHLNone none
|
||||
syn keyword vimEchohlNone contained none
|
||||
syn case match
|
||||
|
||||
syn region vimExecute oneline excludenl matchgroup=vimCommand start="\<exe\%[cute]\>" skip="\(\\\\\)*\\|" end="$\||\|<[cC][rR]>" contains=vimFuncVar,vimIsCommand,vimOper,vimNotation,vimOperParen,vimString,vimVar
|
||||
syn cluster vimEcho contains=vimEcho.*
|
||||
|
||||
syn region vimExecute matchgroup=vimCommand start="\<exe\%[cute]\>" skip=+\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
|
||||
|
||||
" Maps: {{{2
|
||||
" ====
|
||||
@@ -529,9 +541,8 @@ syn case match
|
||||
" User Function Highlighting: {{{2
|
||||
" (following Gautam Iyer's suggestion)
|
||||
" ==========================
|
||||
syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
|
||||
syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncName,vimUserFunc,vimExecute
|
||||
syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation
|
||||
syn keyword vimFuncEcho contained ec ech echo
|
||||
|
||||
" User Command Highlighting: {{{2
|
||||
syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
|
||||
@@ -971,8 +982,8 @@ if !exists("skip_vim_syntax_inits")
|
||||
hi def link vimContinueComment vimComment
|
||||
hi def link vimCtrlChar SpecialChar
|
||||
hi def link vimEcho vimCommand
|
||||
hi def link vimEchoHLNone vimGroup
|
||||
hi def link vimEchoHL vimCommand
|
||||
hi def link vimEchohlNone vimGroup
|
||||
hi def link vimEchohl vimCommand
|
||||
hi def link vimElseIfErr Error
|
||||
hi def link vimElseif vimCondHL
|
||||
hi def link vimEnvvar PreProc
|
||||
|
Reference in New Issue
Block a user