aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/colors/lunaperche.vim250
-rw-r--r--runtime/colors/pablo.vim3
-rw-r--r--runtime/colors/quiet.vim44
-rw-r--r--runtime/doc/api.txt5
-rw-r--r--runtime/doc/builtin.txt44
-rw-r--r--runtime/doc/change.txt19
-rw-r--r--runtime/doc/diagnostic.txt12
-rw-r--r--runtime/doc/intro.txt4
-rw-r--r--runtime/doc/lsp.txt5
-rw-r--r--runtime/doc/lua.txt19
-rw-r--r--runtime/doc/options.txt3
-rw-r--r--runtime/doc/spell.txt2
-rw-r--r--runtime/doc/tagsrch.txt8
-rw-r--r--runtime/doc/treesitter.txt778
-rw-r--r--runtime/doc/userfunc.txt6
-rw-r--r--runtime/doc/usr_41.txt3
-rw-r--r--runtime/filetype.vim37
-rw-r--r--runtime/ftplugin/crontab.vim16
-rw-r--r--runtime/ftplugin/gitattributes.vim13
-rw-r--r--runtime/ftplugin/gitignore.vim13
-rw-r--r--runtime/ftplugin/jsonnet.vim17
-rw-r--r--runtime/ftplugin/lua.vim38
-rw-r--r--runtime/ftplugin/lynx.vim29
-rw-r--r--runtime/ftplugin/sh.vim53
-rw-r--r--runtime/ftplugin/vdf.vim14
-rw-r--r--runtime/ftplugin/vim.vim2
-rw-r--r--runtime/ftplugin/zimbu.vim4
-rw-r--r--runtime/ftplugin/zsh.vim2
-rw-r--r--runtime/indent/json.vim3
-rw-r--r--runtime/indent/lua.vim3
-rw-r--r--runtime/lua/man.lua8
-rw-r--r--runtime/lua/vim/compat.lua12
-rw-r--r--runtime/lua/vim/diagnostic.lua2
-rw-r--r--runtime/lua/vim/filetype.lua62
-rw-r--r--runtime/lua/vim/fs.lua56
-rw-r--r--runtime/lua/vim/keymap.lua31
-rw-r--r--runtime/lua/vim/lsp.lua44
-rw-r--r--runtime/lua/vim/lsp/rpc.lua6
-rw-r--r--runtime/lua/vim/lsp/util.lua65
-rw-r--r--runtime/lua/vim/shared.lua2
-rw-r--r--runtime/lua/vim/treesitter.lua97
-rw-r--r--runtime/lua/vim/treesitter/health.lua2
-rw-r--r--runtime/lua/vim/treesitter/highlighter.lua14
-rw-r--r--runtime/lua/vim/treesitter/language.lua16
-rw-r--r--runtime/lua/vim/treesitter/languagetree.lua115
-rw-r--r--runtime/lua/vim/treesitter/query.lua118
-rw-r--r--runtime/optwin.vim2
-rw-r--r--runtime/queries/vim/highlights.scm32
-rw-r--r--runtime/syntax/gdscript.vim12
-rw-r--r--runtime/syntax/gitattributes.vim63
-rw-r--r--runtime/syntax/gitignore.vim29
-rw-r--r--runtime/syntax/lua.vim317
-rw-r--r--runtime/syntax/lyrics.vim43
-rw-r--r--runtime/syntax/srt.vim62
-rw-r--r--runtime/syntax/vdf.vim54
-rw-r--r--runtime/syntax/zsh.vim163
56 files changed, 1867 insertions, 1009 deletions
diff --git a/runtime/colors/lunaperche.vim b/runtime/colors/lunaperche.vim
index b717ca7855..159e04cc0b 100644
--- a/runtime/colors/lunaperche.vim
+++ b/runtime/colors/lunaperche.vim
@@ -4,7 +4,7 @@
" Maintainer: Maxim Kim <habamax@gmail.com>
" Website: https://www.github.com/vim/colorschemes
" License: Vim License (see `:help license`)
-" Last Updated: Sat 03 Sep 2022 14:31:51 MSK
+" Last Updated: Fri 16 Sep 2022 13:15:33 MSK
" Generated by Colortemplate v2.2.0
@@ -26,12 +26,15 @@ hi! link fugitiveUnstagedModifier PreProc
hi! link fugitiveHash Constant
hi! link diffFile PreProc
hi! link markdownHeadingDelimiter Special
-hi! link rstSectionDelimiter PreProc
-hi! link rstDirective Special
+hi! link rstSectionDelimiter Statement
+hi! link rstDirective PreProc
hi! link rstHyperlinkReference Special
-hi! link rstFieldName Special
+hi! link rstFieldName Constant
hi! link rstDelimiter Special
hi! link rstInterpretedText Special
+hi! link rstCodeBlock Normal
+hi! link rstLiteralBlock rstCodeBlock
+hi! link markdownUrl String
hi! link colortemplateKey Statement
hi! link xmlTagName Statement
hi! link javaScriptFunction Statement
@@ -92,6 +95,20 @@ hi! link phpOperator Normal
hi! link phpVarSelector Special
hi! link phpMemberSelector Special
hi! link phpDocCustomTags phpDocTags
+hi! link javaExternal Statement
+hi! link javaType Statement
+hi! link javaScopeDecl Statement
+hi! link javaClassDecl Statement
+hi! link javaStorageClass Statement
+hi! link javaDocParam PreProc
+hi! link csStorage Statement
+hi! link csAccessModifier Statement
+hi! link csClass Statement
+hi! link csModifier Statement
+hi! link csAsyncModifier Statement
+hi! link csLogicSymbols Normal
+hi! link csClassType Normal
+hi! link csType Statement
hi! link Terminal Normal
hi! link StatuslineTerm Statusline
hi! link StatuslineTermNC StatuslineNC
@@ -101,7 +118,7 @@ hi! link MessageWindow PMenu
hi! link PopupNotification Todo
if &background ==# 'dark'
if (has('termguicolors') && &termguicolors) || has('gui_running')
- let g:terminal_ansi_colors = ['#000000', '#af5f5f', '#5faf5f', '#af875f', '#5f87af', '#d787af', '#5fafaf', '#c6c6c6', '#767676', '#ff5f5f', '#5fd75f', '#ffd787', '#87afd7', '#ffafd7', '#5fd7d7', '#ffffff']
+ let g:terminal_ansi_colors = ['#000000', '#af5f5f', '#5faf5f', '#af875f', '#5f87af', '#d787d7', '#5fafaf', '#c6c6c6', '#767676', '#ff5f5f', '#5fd75f', '#ffd787', '#5fafff', '#ff87ff', '#5fd7d7', '#ffffff']
endif
hi Normal guifg=#c6c6c6 guibg=#000000 gui=NONE cterm=NONE
hi Statusline guifg=#c6c6c6 guibg=#000000 gui=bold,reverse cterm=bold,reverse
@@ -112,7 +129,7 @@ if &background ==# 'dark'
hi TabLineSel guifg=#ffffff guibg=#000000 gui=bold cterm=bold
hi ToolbarLine guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi ToolbarButton guifg=#000000 guibg=#ffffff gui=NONE cterm=NONE
- hi QuickFixLine guifg=#000000 guibg=#87afd7 gui=NONE cterm=NONE
+ hi QuickFixLine guifg=#000000 guibg=#5fafff gui=NONE cterm=NONE
hi CursorLineNr guifg=#ffffff guibg=NONE gui=bold cterm=bold
hi LineNr guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi NonText guifg=#585858 guibg=NONE gui=NONE cterm=NONE
@@ -128,7 +145,7 @@ if &background ==# 'dark'
hi ErrorMsg guifg=#ffffff guibg=#ff5f5f gui=NONE cterm=NONE
hi ModeMsg guifg=#ffd787 guibg=NONE gui=reverse cterm=reverse
hi MoreMsg guifg=#5fd75f guibg=NONE gui=NONE cterm=NONE
- hi Question guifg=#ffafd7 guibg=NONE gui=NONE cterm=NONE
+ hi Question guifg=#ff87ff guibg=NONE gui=NONE cterm=NONE
hi WarningMsg guifg=#ff5f5f guibg=NONE gui=NONE cterm=NONE
hi Todo guifg=#5fd7d7 guibg=#000000 gui=reverse cterm=reverse
hi Search guifg=#000000 guibg=#ffd787 gui=NONE cterm=NONE
@@ -137,7 +154,7 @@ if &background ==# 'dark'
hi WildMenu guifg=#000000 guibg=#ffd787 gui=bold cterm=bold
hi debugPC guifg=#5f87af guibg=NONE gui=reverse cterm=reverse
hi debugBreakpoint guifg=#5fafaf guibg=NONE gui=reverse cterm=reverse
- hi Cursor guifg=#ffffff guibg=#000000 gui=reverse cterm=reverse
+ hi Cursor guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
hi lCursor guifg=#ff5fff guibg=#000000 gui=reverse cterm=reverse
hi Visual guifg=#ffffff guibg=#005f87 gui=NONE cterm=NONE
hi MatchParen guifg=#c5e7c5 guibg=#000000 gui=reverse cterm=reverse
@@ -149,17 +166,18 @@ if &background ==# 'dark'
hi SpellBad guifg=NONE guibg=NONE guisp=#ff5f5f gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
hi SpellCap guifg=NONE guibg=NONE guisp=#5fafaf gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
hi SpellLocal guifg=NONE guibg=NONE guisp=#5faf5f gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
- hi SpellRare guifg=NONE guibg=NONE guisp=#ffafd7 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Comment guifg=#87afd7 guibg=NONE gui=NONE cterm=NONE
- hi Constant guifg=#ffd787 guibg=NONE gui=NONE cterm=NONE
+ hi SpellRare guifg=NONE guibg=NONE guisp=#ff87ff gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Comment guifg=#5fafff guibg=NONE gui=NONE cterm=NONE
+ hi Constant guifg=#ff87ff guibg=NONE gui=NONE cterm=NONE
+ hi String guifg=#ffd787 guibg=NONE gui=NONE cterm=NONE
hi Identifier guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Statement guifg=#eeeeee guibg=NONE gui=bold cterm=bold
- hi Type guifg=#5fd75f guibg=NONE gui=bold cterm=bold
- hi PreProc guifg=#af875f guibg=NONE gui=NONE cterm=NONE
+ hi Statement guifg=#e4e4e4 guibg=NONE gui=bold cterm=bold
+ hi Type guifg=#5fd75f guibg=NONE gui=NONE cterm=NONE
+ hi PreProc guifg=#5fd7d7 guibg=NONE gui=NONE cterm=NONE
hi Special guifg=#5fafaf guibg=NONE gui=NONE cterm=NONE
hi Underlined guifg=NONE guibg=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline
hi Title guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
- hi Directory guifg=#5fd7d7 guibg=NONE gui=bold cterm=bold
+ hi Directory guifg=#5fafff guibg=NONE gui=bold cterm=bold
hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd guifg=#000000 guibg=#af87af gui=NONE cterm=NONE
@@ -168,8 +186,8 @@ if &background ==# 'dark'
hi DiffDelete guifg=#d78787 guibg=NONE gui=NONE cterm=NONE
hi diffAdded guifg=#5fd75f guibg=NONE gui=NONE cterm=NONE
hi diffRemoved guifg=#d78787 guibg=NONE gui=NONE cterm=NONE
- hi diffSubname guifg=#ffafd7 guibg=NONE gui=NONE cterm=NONE
- hi dirType guifg=#d787af guibg=NONE gui=NONE cterm=NONE
+ hi diffSubname guifg=#ff87ff guibg=NONE gui=NONE cterm=NONE
+ hi dirType guifg=#d787d7 guibg=NONE gui=NONE cterm=NONE
hi dirPermissionUser guifg=#5faf5f guibg=NONE gui=NONE cterm=NONE
hi dirPermissionGroup guifg=#af875f guibg=NONE gui=NONE cterm=NONE
hi dirPermissionOther guifg=#5fafaf guibg=NONE gui=NONE cterm=NONE
@@ -177,7 +195,7 @@ if &background ==# 'dark'
hi dirGroup guifg=#767676 guibg=NONE gui=NONE cterm=NONE
hi dirTime guifg=#767676 guibg=NONE gui=NONE cterm=NONE
hi dirSize guifg=#ffd787 guibg=NONE gui=NONE cterm=NONE
- hi dirSizeMod guifg=#d787af guibg=NONE gui=NONE cterm=NONE
+ hi dirSizeMod guifg=#d787d7 guibg=NONE gui=NONE cterm=NONE
hi FilterMenuDirectorySubtle guifg=#878787 guibg=NONE gui=NONE cterm=NONE
hi dirFilterMenuBookmarkPath guifg=#878787 guibg=NONE gui=NONE cterm=NONE
hi dirFilterMenuHistoryPath guifg=#878787 guibg=NONE gui=NONE cterm=NONE
@@ -186,7 +204,7 @@ if &background ==# 'dark'
else
" Light background
if (has('termguicolors') && &termguicolors) || has('gui_running')
- let g:terminal_ansi_colors = ['#000000', '#870000', '#008700', '#875f00', '#005faf', '#870087', '#005f5f', '#808080', '#767676', '#d70000', '#87d787', '#d7d787', '#0087d7', '#af00af', '#00afaf', '#ffffff']
+ let g:terminal_ansi_colors = ['#000000', '#af0000', '#008700', '#af5f00', '#005fd7', '#af00af', '#005f5f', '#808080', '#767676', '#d70000', '#87d787', '#ffd787', '#0087d7', '#ff00ff', '#008787', '#ffffff']
endif
hi Normal guifg=#000000 guibg=#ffffff gui=NONE cterm=NONE
hi Statusline guifg=#ffffff guibg=#000000 gui=bold cterm=bold
@@ -211,40 +229,41 @@ else
hi SignColumn guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error guifg=#ffffff guibg=#d70000 gui=NONE cterm=NONE
hi ErrorMsg guifg=#ffffff guibg=#d70000 gui=NONE cterm=NONE
- hi ModeMsg guifg=#d7d787 guibg=#000000 gui=reverse cterm=reverse
+ hi ModeMsg guifg=#ffd787 guibg=#000000 gui=reverse cterm=reverse
hi MoreMsg guifg=#008700 guibg=NONE gui=bold cterm=bold
- hi Question guifg=#870087 guibg=NONE gui=bold cterm=bold
+ hi Question guifg=#af00af guibg=NONE gui=bold cterm=bold
hi WarningMsg guifg=#d70000 guibg=NONE gui=bold cterm=bold
- hi Todo guifg=#005f5f guibg=#ffffff gui=reverse cterm=reverse
- hi Search guifg=#000000 guibg=#d7d787 gui=NONE cterm=NONE
+ hi Todo guifg=#008787 guibg=#ffffff gui=reverse cterm=reverse
+ hi Search guifg=#000000 guibg=#ffd787 gui=NONE cterm=NONE
hi IncSearch guifg=#000000 guibg=#87d787 gui=NONE cterm=NONE
hi CurSearch guifg=#000000 guibg=#87d787 gui=NONE cterm=NONE
- hi WildMenu guifg=#000000 guibg=#d7d787 gui=bold cterm=bold
- hi debugPC guifg=#005faf guibg=NONE gui=reverse cterm=reverse
+ hi WildMenu guifg=#000000 guibg=#ffd787 gui=bold cterm=bold
+ hi debugPC guifg=#005fd7 guibg=NONE gui=reverse cterm=reverse
hi debugBreakpoint guifg=#005f5f guibg=NONE gui=reverse cterm=reverse
- hi Cursor guifg=#000000 guibg=#ffffff gui=reverse cterm=reverse
+ hi Cursor guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
hi lCursor guifg=#ff00ff guibg=#000000 gui=reverse cterm=reverse
hi Visual guifg=#ffffff guibg=#5f87af gui=NONE cterm=NONE
hi MatchParen guifg=NONE guibg=#c5e7c5 gui=NONE cterm=NONE
- hi VisualNOS guifg=#ffffff guibg=#00afaf gui=NONE cterm=NONE
+ hi VisualNOS guifg=#ffffff guibg=#008787 gui=NONE cterm=NONE
hi CursorLine guifg=NONE guibg=#e4e4e4 gui=NONE cterm=NONE
hi CursorColumn guifg=NONE guibg=#e4e4e4 gui=NONE cterm=NONE
hi Folded guifg=#767676 guibg=#eeeeee gui=NONE cterm=NONE
hi ColorColumn guifg=NONE guibg=#eeeeee gui=NONE cterm=NONE
- hi SpellBad guifg=NONE guibg=NONE guisp=#870000 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi SpellBad guifg=NONE guibg=NONE guisp=#af0000 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
hi SpellCap guifg=NONE guibg=NONE guisp=#005f5f gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
hi SpellLocal guifg=NONE guibg=NONE guisp=#008700 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
- hi SpellRare guifg=NONE guibg=NONE guisp=#af00af gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Comment guifg=#005faf guibg=NONE gui=NONE cterm=NONE
- hi Constant guifg=#870000 guibg=NONE gui=NONE cterm=NONE
+ hi SpellRare guifg=NONE guibg=NONE guisp=#ff00ff gui=undercurl ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Comment guifg=#005fd7 guibg=NONE gui=NONE cterm=NONE
+ hi Constant guifg=#af00af guibg=NONE gui=NONE cterm=NONE
+ hi String guifg=#af5f00 guibg=NONE gui=NONE cterm=NONE
hi Identifier guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Statement guifg=#000000 guibg=NONE gui=bold cterm=bold
- hi Type guifg=#008700 guibg=NONE gui=bold cterm=bold
- hi PreProc guifg=#875f00 guibg=NONE gui=NONE cterm=NONE
- hi Special guifg=#005f5f guibg=NONE gui=NONE cterm=NONE
+ hi Type guifg=#008700 guibg=NONE gui=NONE cterm=NONE
+ hi PreProc guifg=#005f5f guibg=NONE gui=NONE cterm=NONE
+ hi Special guifg=#008787 guibg=NONE gui=NONE cterm=NONE
hi Underlined guifg=NONE guibg=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline
hi Title guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
- hi Directory guifg=#005faf guibg=NONE gui=bold cterm=bold
+ hi Directory guifg=#005fd7 guibg=NONE gui=bold cterm=bold
hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd guifg=#000000 guibg=#d7afd7 gui=NONE cterm=NONE
@@ -253,22 +272,22 @@ else
hi DiffDelete guifg=#870000 guibg=NONE gui=NONE cterm=NONE
hi diffAdded guifg=#008700 guibg=NONE gui=NONE cterm=NONE
hi diffRemoved guifg=#d70000 guibg=NONE gui=NONE cterm=NONE
- hi diffSubname guifg=#870087 guibg=NONE gui=NONE cterm=NONE
+ hi diffSubname guifg=#af00af guibg=NONE gui=NONE cterm=NONE
hi dirType guifg=#005f5f guibg=NONE gui=NONE cterm=NONE
- hi dirPermissionUser guifg=#875f00 guibg=NONE gui=NONE cterm=NONE
+ hi dirPermissionUser guifg=#af5f00 guibg=NONE gui=NONE cterm=NONE
hi dirPermissionGroup guifg=#008700 guibg=NONE gui=NONE cterm=NONE
- hi dirPermissionOther guifg=#870087 guibg=NONE gui=NONE cterm=NONE
+ hi dirPermissionOther guifg=#af00af guibg=NONE gui=NONE cterm=NONE
hi dirOwner guifg=#808080 guibg=NONE gui=NONE cterm=NONE
hi dirGroup guifg=#808080 guibg=NONE gui=NONE cterm=NONE
hi dirTime guifg=#808080 guibg=NONE gui=NONE cterm=NONE
- hi dirSize guifg=#870000 guibg=NONE gui=NONE cterm=NONE
+ hi dirSize guifg=#af0000 guibg=NONE gui=NONE cterm=NONE
hi dirSizeMod guifg=#005f5f guibg=NONE gui=NONE cterm=NONE
hi dirLink guifg=#008700 guibg=NONE gui=bold cterm=bold
hi dirFilterMenuBookmarkPath guifg=#626262 guibg=NONE gui=NONE cterm=NONE
hi dirFilterMenuHistoryPath guifg=#626262 guibg=NONE gui=NONE cterm=NONE
hi FilterMenuDirectorySubtle guifg=#626262 guibg=NONE gui=NONE cterm=NONE
hi FilterMenuLineNr guifg=#626262 guibg=NONE gui=NONE cterm=NONE
- hi CocSearch guifg=#870000 guibg=NONE gui=NONE cterm=NONE
+ hi CocSearch guifg=#af0000 guibg=NONE gui=NONE cterm=NONE
endif
if s:t_Co >= 256
@@ -285,12 +304,15 @@ if s:t_Co >= 256
hi! link fugitiveHash Constant
hi! link diffFile PreProc
hi! link markdownHeadingDelimiter Special
- hi! link rstSectionDelimiter PreProc
- hi! link rstDirective Special
+ hi! link rstSectionDelimiter Statement
+ hi! link rstDirective PreProc
hi! link rstHyperlinkReference Special
- hi! link rstFieldName Special
+ hi! link rstFieldName Constant
hi! link rstDelimiter Special
hi! link rstInterpretedText Special
+ hi! link rstCodeBlock Normal
+ hi! link rstLiteralBlock rstCodeBlock
+ hi! link markdownUrl String
hi! link colortemplateKey Statement
hi! link xmlTagName Statement
hi! link javaScriptFunction Statement
@@ -351,6 +373,20 @@ if s:t_Co >= 256
hi! link phpVarSelector Special
hi! link phpMemberSelector Special
hi! link phpDocCustomTags phpDocTags
+ hi! link javaExternal Statement
+ hi! link javaType Statement
+ hi! link javaScopeDecl Statement
+ hi! link javaClassDecl Statement
+ hi! link javaStorageClass Statement
+ hi! link javaDocParam PreProc
+ hi! link csStorage Statement
+ hi! link csAccessModifier Statement
+ hi! link csClass Statement
+ hi! link csModifier Statement
+ hi! link csAsyncModifier Statement
+ hi! link csLogicSymbols Normal
+ hi! link csClassType Normal
+ hi! link csType Statement
hi! link Terminal Normal
hi! link StatuslineTerm Statusline
hi! link StatuslineTermNC StatuslineNC
@@ -368,7 +404,7 @@ if s:t_Co >= 256
hi TabLineSel ctermfg=231 ctermbg=16 cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi ToolbarButton ctermfg=16 ctermbg=231 cterm=NONE
- hi QuickFixLine ctermfg=16 ctermbg=110 cterm=NONE
+ hi QuickFixLine ctermfg=16 ctermbg=75 cterm=NONE
hi CursorLineNr ctermfg=231 ctermbg=NONE cterm=bold
hi LineNr ctermfg=240 ctermbg=NONE cterm=NONE
hi NonText ctermfg=240 ctermbg=NONE cterm=NONE
@@ -384,7 +420,7 @@ if s:t_Co >= 256
hi ErrorMsg ctermfg=231 ctermbg=203 cterm=NONE
hi ModeMsg ctermfg=222 ctermbg=NONE cterm=reverse
hi MoreMsg ctermfg=77 ctermbg=NONE cterm=NONE
- hi Question ctermfg=218 ctermbg=NONE cterm=NONE
+ hi Question ctermfg=213 ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=203 ctermbg=NONE cterm=NONE
hi Todo ctermfg=116 ctermbg=16 cterm=reverse
hi Search ctermfg=16 ctermbg=222 cterm=NONE
@@ -403,17 +439,18 @@ if s:t_Co >= 256
hi SpellBad ctermfg=203 ctermbg=NONE cterm=underline
hi SpellCap ctermfg=73 ctermbg=NONE cterm=underline
hi SpellLocal ctermfg=77 ctermbg=NONE cterm=underline
- hi SpellRare ctermfg=218 ctermbg=NONE cterm=underline
- hi Comment ctermfg=110 ctermbg=NONE cterm=NONE
- hi Constant ctermfg=222 ctermbg=NONE cterm=NONE
+ hi SpellRare ctermfg=213 ctermbg=NONE cterm=underline
+ hi Comment ctermfg=75 ctermbg=NONE cterm=NONE
+ hi Constant ctermfg=213 ctermbg=NONE cterm=NONE
+ hi String ctermfg=222 ctermbg=NONE cterm=NONE
hi Identifier ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Statement ctermfg=255 ctermbg=NONE cterm=bold
- hi Type ctermfg=77 ctermbg=NONE cterm=bold
- hi PreProc ctermfg=137 ctermbg=NONE cterm=NONE
+ hi Statement ctermfg=254 ctermbg=NONE cterm=bold
+ hi Type ctermfg=77 ctermbg=NONE cterm=NONE
+ hi PreProc ctermfg=116 ctermbg=NONE cterm=NONE
hi Special ctermfg=73 ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
- hi Directory ctermfg=116 ctermbg=NONE cterm=bold
+ hi Directory ctermfg=75 ctermbg=NONE cterm=bold
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=16 ctermbg=139 cterm=NONE
@@ -422,8 +459,8 @@ if s:t_Co >= 256
hi DiffDelete ctermfg=174 ctermbg=NONE cterm=NONE
hi diffAdded ctermfg=77 ctermbg=NONE cterm=NONE
hi diffRemoved ctermfg=174 ctermbg=NONE cterm=NONE
- hi diffSubname ctermfg=218 ctermbg=NONE cterm=NONE
- hi dirType ctermfg=175 ctermbg=NONE cterm=NONE
+ hi diffSubname ctermfg=213 ctermbg=NONE cterm=NONE
+ hi dirType ctermfg=176 ctermbg=NONE cterm=NONE
hi dirPermissionUser ctermfg=71 ctermbg=NONE cterm=NONE
hi dirPermissionGroup ctermfg=137 ctermbg=NONE cterm=NONE
hi dirPermissionOther ctermfg=73 ctermbg=NONE cterm=NONE
@@ -431,7 +468,7 @@ if s:t_Co >= 256
hi dirGroup ctermfg=243 ctermbg=NONE cterm=NONE
hi dirTime ctermfg=243 ctermbg=NONE cterm=NONE
hi dirSize ctermfg=222 ctermbg=NONE cterm=NONE
- hi dirSizeMod ctermfg=175 ctermbg=NONE cterm=NONE
+ hi dirSizeMod ctermfg=176 ctermbg=NONE cterm=NONE
hi FilterMenuDirectorySubtle ctermfg=102 ctermbg=NONE cterm=NONE
hi dirFilterMenuBookmarkPath ctermfg=102 ctermbg=NONE cterm=NONE
hi dirFilterMenuHistoryPath ctermfg=102 ctermbg=NONE cterm=NONE
@@ -462,38 +499,39 @@ if s:t_Co >= 256
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=231 ctermbg=160 cterm=NONE
hi ErrorMsg ctermfg=231 ctermbg=160 cterm=NONE
- hi ModeMsg ctermfg=186 ctermbg=16 cterm=reverse
+ hi ModeMsg ctermfg=222 ctermbg=16 cterm=reverse
hi MoreMsg ctermfg=28 ctermbg=NONE cterm=bold
- hi Question ctermfg=90 ctermbg=NONE cterm=bold
+ hi Question ctermfg=127 ctermbg=NONE cterm=bold
hi WarningMsg ctermfg=160 ctermbg=NONE cterm=bold
- hi Todo ctermfg=23 ctermbg=231 cterm=reverse
- hi Search ctermfg=16 ctermbg=186 cterm=NONE
+ hi Todo ctermfg=30 ctermbg=231 cterm=reverse
+ hi Search ctermfg=16 ctermbg=222 cterm=NONE
hi IncSearch ctermfg=16 ctermbg=114 cterm=NONE
hi CurSearch ctermfg=16 ctermbg=114 cterm=NONE
- hi WildMenu ctermfg=16 ctermbg=186 cterm=bold
- hi debugPC ctermfg=25 ctermbg=NONE cterm=reverse
+ hi WildMenu ctermfg=16 ctermbg=222 cterm=bold
+ hi debugPC ctermfg=26 ctermbg=NONE cterm=reverse
hi debugBreakpoint ctermfg=23 ctermbg=NONE cterm=reverse
hi Visual ctermfg=231 ctermbg=67 cterm=NONE
hi MatchParen ctermfg=30 ctermbg=231 cterm=reverse
- hi VisualNOS ctermfg=231 ctermbg=37 cterm=NONE
+ hi VisualNOS ctermfg=231 ctermbg=30 cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=254 cterm=NONE
hi CursorColumn ctermfg=NONE ctermbg=254 cterm=NONE
hi Folded ctermfg=243 ctermbg=255 cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=255 cterm=NONE
- hi SpellBad ctermfg=88 ctermbg=NONE cterm=underline
+ hi SpellBad ctermfg=124 ctermbg=NONE cterm=underline
hi SpellCap ctermfg=23 ctermbg=NONE cterm=underline
hi SpellLocal ctermfg=28 ctermbg=NONE cterm=underline
hi SpellRare ctermfg=133 ctermbg=NONE cterm=underline
- hi Comment ctermfg=25 ctermbg=NONE cterm=NONE
- hi Constant ctermfg=88 ctermbg=NONE cterm=NONE
+ hi Comment ctermfg=26 ctermbg=NONE cterm=NONE
+ hi Constant ctermfg=127 ctermbg=NONE cterm=NONE
+ hi String ctermfg=130 ctermbg=NONE cterm=NONE
hi Identifier ctermfg=NONE ctermbg=NONE cterm=NONE
hi Statement ctermfg=16 ctermbg=NONE cterm=bold
- hi Type ctermfg=28 ctermbg=NONE cterm=bold
- hi PreProc ctermfg=94 ctermbg=NONE cterm=NONE
- hi Special ctermfg=23 ctermbg=NONE cterm=NONE
+ hi Type ctermfg=28 ctermbg=NONE cterm=NONE
+ hi PreProc ctermfg=23 ctermbg=NONE cterm=NONE
+ hi Special ctermfg=30 ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
- hi Directory ctermfg=25 ctermbg=NONE cterm=bold
+ hi Directory ctermfg=26 ctermbg=NONE cterm=bold
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=16 ctermbg=182 cterm=NONE
@@ -502,22 +540,22 @@ if s:t_Co >= 256
hi DiffDelete ctermfg=88 ctermbg=NONE cterm=NONE
hi diffAdded ctermfg=28 ctermbg=NONE cterm=NONE
hi diffRemoved ctermfg=160 ctermbg=NONE cterm=NONE
- hi diffSubname ctermfg=90 ctermbg=NONE cterm=NONE
+ hi diffSubname ctermfg=127 ctermbg=NONE cterm=NONE
hi dirType ctermfg=23 ctermbg=NONE cterm=NONE
- hi dirPermissionUser ctermfg=94 ctermbg=NONE cterm=NONE
+ hi dirPermissionUser ctermfg=130 ctermbg=NONE cterm=NONE
hi dirPermissionGroup ctermfg=28 ctermbg=NONE cterm=NONE
- hi dirPermissionOther ctermfg=90 ctermbg=NONE cterm=NONE
+ hi dirPermissionOther ctermfg=127 ctermbg=NONE cterm=NONE
hi dirOwner ctermfg=244 ctermbg=NONE cterm=NONE
hi dirGroup ctermfg=244 ctermbg=NONE cterm=NONE
hi dirTime ctermfg=244 ctermbg=NONE cterm=NONE
- hi dirSize ctermfg=88 ctermbg=NONE cterm=NONE
+ hi dirSize ctermfg=124 ctermbg=NONE cterm=NONE
hi dirSizeMod ctermfg=23 ctermbg=NONE cterm=NONE
hi dirLink ctermfg=28 ctermbg=NONE cterm=bold
hi dirFilterMenuBookmarkPath ctermfg=241 ctermbg=NONE cterm=NONE
hi dirFilterMenuHistoryPath ctermfg=241 ctermbg=NONE cterm=NONE
hi FilterMenuDirectorySubtle ctermfg=241 ctermbg=NONE cterm=NONE
hi FilterMenuLineNr ctermfg=241 ctermbg=NONE cterm=NONE
- hi CocSearch ctermfg=88 ctermbg=NONE cterm=NONE
+ hi CocSearch ctermfg=124 ctermbg=NONE cterm=NONE
endif
unlet s:t_Co
finish
@@ -571,15 +609,16 @@ if s:t_Co >= 16
hi SpellLocal ctermfg=green ctermbg=NONE cterm=underline
hi SpellRare ctermfg=magenta ctermbg=NONE cterm=underline
hi Comment ctermfg=blue ctermbg=NONE cterm=NONE
- hi Constant ctermfg=yellow ctermbg=NONE cterm=NONE
+ hi Constant ctermfg=magenta ctermbg=NONE cterm=NONE
+ hi String ctermfg=yellow ctermbg=NONE cterm=NONE
hi Identifier ctermfg=NONE ctermbg=NONE cterm=NONE
hi Statement ctermfg=grey ctermbg=NONE cterm=bold
- hi Type ctermfg=green ctermbg=NONE cterm=bold
- hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
+ hi Type ctermfg=green ctermbg=NONE cterm=NONE
+ hi PreProc ctermfg=cyan ctermbg=NONE cterm=NONE
hi Special ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
- hi Directory ctermfg=cyan ctermbg=NONE cterm=bold
+ hi Directory ctermfg=blue ctermbg=NONE cterm=bold
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=black ctermbg=darkmagenta cterm=NONE
@@ -632,7 +671,7 @@ if s:t_Co >= 16
hi MoreMsg ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Question ctermfg=darkmagenta ctermbg=NONE cterm=bold
hi WarningMsg ctermfg=red ctermbg=NONE cterm=bold
- hi Todo ctermfg=darkcyan ctermbg=white cterm=reverse
+ hi Todo ctermfg=cyan ctermbg=white cterm=reverse
hi Search ctermfg=black ctermbg=yellow cterm=NONE
hi IncSearch ctermfg=black ctermbg=green cterm=NONE
hi CurSearch ctermfg=black ctermbg=green cterm=NONE
@@ -651,12 +690,13 @@ if s:t_Co >= 16
hi SpellLocal ctermfg=darkgreen ctermbg=NONE cterm=underline
hi SpellRare ctermfg=magenta ctermbg=NONE cterm=underline
hi Comment ctermfg=darkblue ctermbg=NONE cterm=NONE
- hi Constant ctermfg=darkred ctermbg=NONE cterm=NONE
+ hi Constant ctermfg=darkmagenta ctermbg=NONE cterm=NONE
+ hi String ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Identifier ctermfg=NONE ctermbg=NONE cterm=NONE
hi Statement ctermfg=black ctermbg=NONE cterm=bold
- hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
- hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
- hi Special ctermfg=darkcyan ctermbg=NONE cterm=NONE
+ hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
+ hi PreProc ctermfg=darkcyan ctermbg=NONE cterm=NONE
+ hi Special ctermfg=cyan ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=darkblue ctermbg=NONE cterm=bold
@@ -707,7 +747,7 @@ if s:t_Co >= 8
hi FoldColumn ctermfg=black ctermbg=NONE cterm=NONE
hi EndOfBuffer ctermfg=black ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=black ctermbg=NONE cterm=NONE
- hi Pmenu ctermfg=black ctermbg=grey cterm=NONE
+ hi Pmenu ctermfg=NONE ctermbg=grey cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkgreen cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
@@ -725,7 +765,7 @@ if s:t_Co >= 8
hi WildMenu ctermfg=black ctermbg=darkyellow cterm=bold
hi debugPC ctermfg=darkblue ctermbg=NONE cterm=reverse
hi debugBreakpoint ctermfg=darkcyan ctermbg=NONE cterm=reverse
- hi Visual ctermfg=black ctermbg=darkblue cterm=NONE
+ hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi MatchParen ctermfg=darkcyan ctermbg=black cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
@@ -740,12 +780,12 @@ if s:t_Co >= 8
hi Constant ctermfg=darkred ctermbg=NONE cterm=NONE
hi Identifier ctermfg=NONE ctermbg=NONE cterm=NONE
hi Statement ctermfg=grey ctermbg=NONE cterm=bold
- hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
- hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
+ hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
+ hi PreProc ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Special ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
- hi Directory ctermfg=darkcyan ctermbg=NONE cterm=bold
+ hi Directory ctermfg=darkblue ctermbg=NONE cterm=bold
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=black ctermbg=darkmagenta cterm=NONE
@@ -770,10 +810,10 @@ if s:t_Co >= 8
hi FoldColumn ctermfg=black ctermbg=NONE cterm=NONE
hi EndOfBuffer ctermfg=black ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=black ctermbg=NONE cterm=NONE
- hi Pmenu ctermfg=grey ctermbg=black cterm=NONE
+ hi Pmenu ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkgreen cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
- hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
+ hi PmenuSel ctermfg=NONE ctermbg=darkcyan cterm=NONE
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=grey ctermbg=darkred cterm=NONE
hi ErrorMsg ctermfg=grey ctermbg=darkred cterm=NONE
@@ -788,7 +828,7 @@ if s:t_Co >= 8
hi WildMenu ctermfg=black ctermbg=darkyellow cterm=bold
hi debugPC ctermfg=darkblue ctermbg=NONE cterm=reverse
hi debugBreakpoint ctermfg=darkcyan ctermbg=NONE cterm=reverse
- hi Visual ctermfg=grey ctermbg=darkblue cterm=NONE
+ hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi MatchParen ctermfg=darkcyan ctermbg=grey cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
@@ -803,12 +843,12 @@ if s:t_Co >= 8
hi Constant ctermfg=darkred ctermbg=NONE cterm=NONE
hi Identifier ctermfg=NONE ctermbg=NONE cterm=NONE
hi Statement ctermfg=black ctermbg=NONE cterm=bold
- hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
- hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
+ hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
+ hi PreProc ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Special ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=black ctermbg=NONE cterm=bold
- hi Directory ctermfg=darkcyan ctermbg=NONE cterm=bold
+ hi Directory ctermfg=darkblue ctermbg=NONE cterm=bold
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=black ctermbg=darkmagenta cterm=NONE
@@ -899,14 +939,14 @@ endif
" Color: color03 #AF875F 137 darkyellow
" Color: color11 #FFD787 222 yellow
" Color: color04 #5F87AF 67 darkblue
-" Color: color12 #87AFD7 110 blue
-" Color: color05 #D787AF 175 darkmagenta
-" Color: color13 #FFAFD7 218 magenta
+" Color: color12 #5FAFFF 75 blue
+" Color: color05 #D787D7 176 darkmagenta
+" Color: color13 #FF87FF 213 magenta
" Color: color06 #5FAFAF 73 darkcyan
" Color: color14 #5FD7D7 116 cyan
" Color: color07 #C6C6C6 251 grey
" Color: color15 #FFFFFF 231 white
-" Color: colorDimWhite #EEEEEE 255 grey
+" Color: colorDimWhite #E4E4E4 254 grey
" Color: colorLine #262626 235 darkgrey
" Color: colorB #1C1C1C 234 darkgrey
" Color: colorNonT #585858 240 grey
@@ -927,18 +967,18 @@ endif
" Background: light
" Color: color00 #000000 16 black
" Color: color08 #767676 243 darkgrey
-" Color: color01 #870000 88 darkred
+" Color: color01 #AF0000 124 darkred
" Color: color09 #D70000 160 red
" Color: color02 #008700 28 darkgreen
" Color: color10 #87D787 114 green
-" Color: color03 #875F00 94 darkyellow
-" Color: color11 #D7D787 186 yellow
-" Color: color04 #005FAF 25 darkblue
+" Color: color03 #AF5F00 130 darkyellow
+" Color: color11 #FFD787 222 yellow
+" Color: color04 #005FD7 26 darkblue
" Color: color12 #0087D7 32 blue
-" Color: color05 #870087 90 darkmagenta
-" Color: color13 #AF00AF 133 magenta
+" Color: color05 #AF00AF 127 darkmagenta
+" Color: color13 #FF00FF 133 magenta
" Color: color06 #005F5F 23 darkcyan
-" Color: color14 #00AFAF 37 cyan
+" Color: color14 #008787 30 cyan
" Color: color07 #808080 244 grey
" Color: color15 #FFFFFF 231 white
" Color: colorLine #E4E4E4 254 grey
diff --git a/runtime/colors/pablo.vim b/runtime/colors/pablo.vim
index f404951b2a..dc3e496853 100644
--- a/runtime/colors/pablo.vim
+++ b/runtime/colors/pablo.vim
@@ -3,7 +3,7 @@
" Maintainer: Original maintainerRon Aaron <ron@ronware.org>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Sun 04 Sep 2022 09:53:40 MSK
+" Last Updated: Wed 14 Sep 2022 19:05:27 MSK
" Generated by Colortemplate v2.2.0
@@ -280,7 +280,6 @@ if s:t_Co >= 8
hi SpellLocal ctermfg=darkmagenta ctermbg=darkyellow cterm=reverse
hi SpellRare ctermfg=darkgreen ctermbg=NONE cterm=reverse
hi Comment ctermfg=grey ctermbg=NONE cterm=bold
- hi Comment ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Constant ctermfg=darkcyan ctermbg=NONE cterm=bold
hi Identifier ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Statement ctermfg=darkyellow ctermbg=NONE cterm=bold
diff --git a/runtime/colors/quiet.vim b/runtime/colors/quiet.vim
index 9e81ba3857..aecc69619b 100644
--- a/runtime/colors/quiet.vim
+++ b/runtime/colors/quiet.vim
@@ -4,7 +4,7 @@
" Maintainer: neutaaaaan <neutaaaaan-gh@protonmail.com>
" Website: https://github.com/vim/colorschemes
" License: Vim License (see `:help license`)`
-" Last Updated: Fri 02 Sep 2022 09:55:30 MSK
+" Last Updated: Fri 16 Sep 2022 09:52:50 MSK
" Generated by Colortemplate v2.2.0
@@ -61,8 +61,8 @@ if &background ==# 'dark'
hi DiffChange guifg=#87afd7 guibg=#080808 gui=reverse cterm=reverse
hi DiffDelete guifg=#d75f5f guibg=#080808 gui=reverse cterm=reverse
hi DiffText guifg=#d787d7 guibg=#080808 gui=reverse cterm=reverse
- hi Directory guifg=#dadada guibg=#080808 gui=NONE cterm=NONE
- hi EndOfBuffer guifg=#dadada guibg=#080808 gui=NONE cterm=NONE
+ hi Directory guifg=#dadada guibg=NONE gui=NONE cterm=NONE
+ hi EndOfBuffer guifg=#dadada guibg=NONE gui=NONE cterm=NONE
hi ErrorMsg guifg=#dadada guibg=#080808 gui=reverse cterm=reverse
hi FoldColumn guifg=#707070 guibg=NONE gui=NONE cterm=NONE
hi Folded guifg=#707070 guibg=#080808 gui=NONE cterm=NONE
@@ -86,13 +86,13 @@ if &background ==# 'dark'
hi SpellLocal guifg=#d787d7 guibg=NONE guisp=#d787d7 gui=undercurl cterm=underline
hi SpellRare guifg=#00afaf guibg=NONE guisp=#00afaf gui=undercurl cterm=underline
hi StatusLine guifg=#080808 guibg=#dadada gui=bold cterm=bold
- hi StatusLineNC guifg=#707070 guibg=#080808 gui=underline cterm=underline
- hi TabLine guifg=#707070 guibg=#080808 gui=underline cterm=underline
+ hi StatusLineNC guifg=#707070 guibg=#080808 gui=reverse cterm=reverse
+ hi TabLine guifg=#707070 guibg=#080808 gui=reverse cterm=reverse
hi TabLineFill guifg=#dadada guibg=NONE gui=NONE cterm=NONE
hi TabLineSel guifg=#080808 guibg=#dadada gui=bold cterm=bold
- hi Title guifg=#dadada guibg=NONE gui=NONE cterm=NONE
+ hi Title guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi VertSplit guifg=#707070 guibg=#080808 gui=NONE cterm=NONE
- hi Visual guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi Visual guifg=#ffaf00 guibg=#080808 gui=reverse cterm=reverse
hi VisualNOS guifg=NONE guibg=#303030 gui=NONE cterm=NONE
hi WarningMsg guifg=#dadada guibg=NONE gui=NONE cterm=NONE
hi WildMenu guifg=#00afff guibg=#080808 gui=bold cterm=bold
@@ -155,9 +155,9 @@ else
hi TabLine guifg=#080808 guibg=#a8a8a8 gui=NONE cterm=NONE
hi TabLineFill guifg=#080808 guibg=#d7d7d7 gui=NONE cterm=NONE
hi TabLineSel guifg=#eeeeee guibg=#080808 gui=bold cterm=bold
- hi Title guifg=#080808 guibg=NONE gui=NONE cterm=NONE
+ hi Title guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi VertSplit guifg=#626262 guibg=#d7d7d7 gui=NONE cterm=NONE
- hi Visual guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi Visual guifg=#ffaf00 guibg=#080808 gui=reverse cterm=reverse
hi VisualNOS guifg=NONE guibg=#eeeeee gui=NONE cterm=NONE
hi WarningMsg guifg=#080808 guibg=NONE gui=NONE cterm=NONE
hi WildMenu guifg=#080808 guibg=#eeeeee gui=bold cterm=bold
@@ -190,8 +190,8 @@ if s:t_Co >= 256
hi DiffChange ctermfg=110 ctermbg=232 cterm=reverse
hi DiffDelete ctermfg=167 ctermbg=232 cterm=reverse
hi DiffText ctermfg=176 ctermbg=232 cterm=reverse
- hi Directory ctermfg=253 ctermbg=232 cterm=NONE
- hi EndOfBuffer ctermfg=253 ctermbg=232 cterm=NONE
+ hi Directory ctermfg=253 ctermbg=NONE cterm=NONE
+ hi EndOfBuffer ctermfg=253 ctermbg=NONE cterm=NONE
hi ErrorMsg ctermfg=253 ctermbg=232 cterm=reverse
hi FoldColumn ctermfg=242 ctermbg=NONE cterm=NONE
hi Folded ctermfg=242 ctermbg=232 cterm=NONE
@@ -215,13 +215,13 @@ if s:t_Co >= 256
hi SpellLocal ctermfg=176 ctermbg=NONE cterm=underline
hi SpellRare ctermfg=37 ctermbg=NONE cterm=underline
hi StatusLine ctermfg=232 ctermbg=253 cterm=bold
- hi StatusLineNC ctermfg=242 ctermbg=232 cterm=underline
- hi TabLine ctermfg=242 ctermbg=232 cterm=underline
+ hi StatusLineNC ctermfg=242 ctermbg=232 cterm=reverse
+ hi TabLine ctermfg=242 ctermbg=232 cterm=reverse
hi TabLineFill ctermfg=253 ctermbg=NONE cterm=NONE
hi TabLineSel ctermfg=232 ctermbg=253 cterm=bold
- hi Title ctermfg=253 ctermbg=NONE cterm=NONE
+ hi Title ctermfg=NONE ctermbg=NONE cterm=NONE
hi VertSplit ctermfg=242 ctermbg=232 cterm=NONE
- hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi Visual ctermfg=214 ctermbg=232 cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=236 cterm=NONE
hi WarningMsg ctermfg=253 ctermbg=NONE cterm=NONE
hi WildMenu ctermfg=39 ctermbg=232 cterm=bold
@@ -281,9 +281,9 @@ if s:t_Co >= 256
hi TabLine ctermfg=232 ctermbg=248 cterm=NONE
hi TabLineFill ctermfg=232 ctermbg=188 cterm=NONE
hi TabLineSel ctermfg=255 ctermbg=232 cterm=bold
- hi Title ctermfg=232 ctermbg=NONE cterm=NONE
+ hi Title ctermfg=NONE ctermbg=NONE cterm=NONE
hi VertSplit ctermfg=241 ctermbg=188 cterm=NONE
- hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi Visual ctermfg=214 ctermbg=232 cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=255 cterm=NONE
hi WarningMsg ctermfg=232 ctermbg=NONE cterm=NONE
hi WildMenu ctermfg=232 ctermbg=255 cterm=bold
@@ -350,7 +350,7 @@ if s:t_Co >= 16
hi TabLineSel ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi Title ctermfg=NONE ctermbg=NONE cterm=NONE
hi VertSplit ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi Visual ctermfg=darkyellow ctermbg=black cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=NONE ctermbg=NONE cterm=standout
hi WildMenu ctermfg=NONE ctermbg=NONE cterm=bold
@@ -412,7 +412,7 @@ if s:t_Co >= 16
hi TabLineSel ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi Title ctermfg=NONE ctermbg=NONE cterm=NONE
hi VertSplit ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi Visual ctermfg=darkyellow ctermbg=black cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=NONE ctermbg=NONE cterm=standout
hi WildMenu ctermfg=NONE ctermbg=NONE cterm=bold
@@ -479,7 +479,7 @@ if s:t_Co >= 8
hi TabLineSel ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi Title ctermfg=NONE ctermbg=NONE cterm=NONE
hi VertSplit ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi Visual ctermfg=darkyellow ctermbg=black cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=NONE ctermbg=NONE cterm=standout
hi WildMenu ctermfg=NONE ctermbg=NONE cterm=bold
@@ -541,7 +541,7 @@ if s:t_Co >= 8
hi TabLineSel ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi Title ctermfg=NONE ctermbg=NONE cterm=NONE
hi VertSplit ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi Visual ctermfg=darkyellow ctermbg=black cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=NONE ctermbg=NONE cterm=standout
hi WildMenu ctermfg=NONE ctermbg=NONE cterm=bold
@@ -652,7 +652,7 @@ endif
" Color: diffred #d75f5f 167 darkred
" Color: diffgreen #00af00 34 darkgreen
" Color: diffblue #87afd7 110 darkblue
-" Color: diffpink #d787d7 176 darkmagenta
+" Color: diffpink #d787d7 176 darkmagenta
" Color: uipink #ff00af 199 magenta
" Color: uilime #afff00 154 green
" Color: uiteal #00ffaf 49 green
diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt
index 00a3759936..7e55bb8f4e 100644
--- a/runtime/doc/api.txt
+++ b/runtime/doc/api.txt
@@ -3378,7 +3378,10 @@ nvim_get_autocmds({*opts}) *nvim_get_autocmds()*
• event (string|array): event or events to match against
|autocmd-events|.
• pattern (string|array): pattern or patterns to match against
- |autocmd-pattern|.
+ |autocmd-pattern|. Cannot be used with {buffer}
+ • buffer: Buffer number or list of buffer numbers for buffer
+ local autocommands |autocmd-buflocal|. Cannot be used with
+ {pattern}
Return: ~
Array of autocommands matching the criteria, with each item containing
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 57b41c664b..7b1a50c1fb 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -277,6 +277,8 @@ join({list} [, {sep}]) String join {list} items into one String
json_decode({expr}) any Convert {expr} from JSON
json_encode({expr}) String Convert {expr} to JSON
keys({dict}) List keys in {dict}
+keytrans({string}) String translate internal keycodes to a form
+ that can be used by |:map|
len({expr}) Number the length of {expr}
libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg}
libcallnr({lib}, {func}, {arg}) Number idem, but return a Number
@@ -526,6 +528,8 @@ uniq({list} [, {func} [, {dict}]])
List remove adjacent duplicates from a list
values({dict}) List values in {dict}
virtcol({expr}) Number screen column of cursor or mark
+virtcol2col({winid}, {lnum}, {col})
+ Number byte index of a character on screen
visualmode([expr]) String last visual mode used
wait({timeout}, {condition} [, {interval}])
Number Wait until {condition} is satisfied
@@ -4535,6 +4539,16 @@ keys({dict}) *keys()*
Can also be used as a |method|: >
mydict->keys()
+keytrans({string}) *keytrans()*
+ Turn the internal byte representation of keys into a form that
+ can be used for |:map|. E.g. >
+ :let xx = "\<C-Home>"
+ :echo keytrans(xx)
+< <C-Home>
+
+ Can also be used as a |method|: >
+ "\<C-Home>"->keytrans()
+
< *len()* *E701*
len({expr}) The result is a Number, which is the length of the argument.
When {expr} is a String or a Number the length in bytes is
@@ -5620,12 +5634,19 @@ nvim_...({...}) *E5555* *nvim_...()* *eval-api*
or({expr}, {expr}) *or()*
Bitwise OR on the two arguments. The arguments are converted
to a number. A List, Dict or Float argument causes an error.
+ Also see `and()` and `xor()`.
Example: >
:let bits = or(bits, 0x80)
< Can also be used as a |method|: >
:let bits = bits->or(0x80)
-pathshorten({expr} [, {len}]) *pathshorten()*
+< Rationale: The reason this is a function and not using the "|"
+ character like many languages, is that Vi has always used "|"
+ to separate commands. In many places it would not be clear if
+ "|" is an operator or a command separator.
+
+
+pathshorten({path} [, {len}]) *pathshorten()*
Shorten directory names in the path {path} and return the
result. The tail, the file name, is kept as-is. The other
components in the path are reduced to {len} letters in length.
@@ -8831,6 +8852,26 @@ virtcol({expr}) *virtcol()*
< Can also be used as a |method|: >
GetPos()->virtcol()
+virtcol2col({winid}, {lnum}, {col}) *virtcol2col()*
+ The result is a Number, which is the byte index of the
+ character in window {winid} at buffer line {lnum} and virtual
+ column {col}.
+
+ If {col} is greater than the last virtual column in line
+ {lnum}, then the byte index of the character at the last
+ virtual column is returned.
+
+ The {winid} argument can be the window number or the
+ |window-ID|. If this is zero, then the current window is used.
+
+ Returns -1 if the window {winid} doesn't exist or the buffer
+ line {lnum} or virtual column {col} is invalid.
+
+ See also |screenpos()|, |virtcol()| and |col()|.
+
+ Can also be used as a |method|: >
+ GetWinid()->virtcol2col(lnum, col)
+
visualmode([{expr}]) *visualmode()*
The result is a String, which describes the last Visual mode
used in the current buffer. Initially it returns an empty
@@ -9262,6 +9303,7 @@ writefile({object}, {fname} [, {flags}])
xor({expr}, {expr}) *xor()*
Bitwise XOR on the two arguments. The arguments are converted
to a number. A List, Dict or Float argument causes an error.
+ Also see `and()` and `or()`.
Example: >
:let bits = xor(bits, 0x80)
<
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index a4ff4474e6..bed5cb26d7 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1130,11 +1130,20 @@ used. If you do need it you can use |p| with another register. E.g., yank
the text to copy, Visually select the text to replace and use "0p . You can
repeat this as many times as you like, and the unnamed register will be
changed each time.
-
-When you use a blockwise Visual mode command and yank only a single line into
-a register, a paste on a visual selected area will paste that single line on
-each of the selected lines (thus replacing the blockwise selected region by a
-block of the pasted line).
+ *blockwise-put*
+When a register contains text from one line (characterwise), using a
+blockwise Visual selection, putting that register will paste that text
+repeatedly in each of the selected lines, thus replacing the blockwise
+selected region by multiple copies of the register text. For example:
+ - yank the word "TEXT" into a register with `yw`
+ - select a visual block, marked with "v" in this text:
+ aaavvaaa
+ bbbvvbbb
+ cccvvccc
+ - press `p`, results in:
+ aaaTEXTaaa
+ bbbTEXTbbb
+ cccTEXTccc
*blockwise-register*
If you use a blockwise Visual mode command to get the text into the register,
diff --git a/runtime/doc/diagnostic.txt b/runtime/doc/diagnostic.txt
index e1b52746be..78254c6f2b 100644
--- a/runtime/doc/diagnostic.txt
+++ b/runtime/doc/diagnostic.txt
@@ -295,10 +295,18 @@ option in the "signs" table of |vim.diagnostic.config()| or 10 if unset).
EVENTS *diagnostic-events*
*DiagnosticChanged*
-DiagnosticChanged After diagnostics have changed.
+DiagnosticChanged After diagnostics have changed. When used from Lua,
+ the new diagnostics are passed to the autocmcd
+ callback in the "data" table.
Example: >
- autocmd DiagnosticChanged * lua vim.diagnostic.setqflist({ open = false })
+
+ vim.api.nvim_create_autocmd('DiagnosticChanged', {
+ callback = function(args)
+ local diagnostics = args.data.diagnostics
+ vim.pretty_print(diagnostics)
+ end,
+ })
<
==============================================================================
Lua module: vim.diagnostic *diagnostic-api*
diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt
index ae80935032..a5630dabaa 100644
--- a/runtime/doc/intro.txt
+++ b/runtime/doc/intro.txt
@@ -416,6 +416,10 @@ one always works.
To get a literal "<lt>" in a mapping: >
:map <C-L> <lt>lt>
+The notation can be used in a double quoted strings, using "\<" at the start,
+e.g. "\<C-Space>". This results in a special key code. To convert this back
+to readable text use `keytrans()`.
+
==============================================================================
Modes, introduction *vim-modes-intro* *vim-modes*
diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt
index a3d21cc6f7..00aaf759e2 100644
--- a/runtime/doc/lsp.txt
+++ b/runtime/doc/lsp.txt
@@ -1962,8 +1962,9 @@ rpc_response_error({code}, {message}, {data})
*vim.lsp.rpc.start()*
start({cmd}, {cmd_args}, {dispatchers}, {extra_spawn_params})
Starts an LSP server process and create an LSP RPC client object to
- interact with it. Communication with the server is currently limited to
- stdio.
+ interact with it. Communication with the spawned process happens via
+ stdio. For communication via TCP, spawn a process manually and use
+ |vim.lsp.rpc.connect|
Parameters: ~
{cmd} (string) Command to start the LSP server.
diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt
index 35badb13b1..a6a51c1e36 100644
--- a/runtime/doc/lua.txt
+++ b/runtime/doc/lua.txt
@@ -1587,7 +1587,7 @@ defaulttable({create}) *vim.defaulttable()*
They mimic defaultdict in python.
- If `create` is `nil`, this will create a defaulttable whose constructor
+ If {create} is `nil`, this will create a defaulttable whose constructor
function is this function, effectively allowing to create nested tables on
the fly:
>
@@ -2082,7 +2082,10 @@ add({filetypes}) *vim.filetype.add()*
Filename patterns can specify an optional priority to resolve cases when a
file path matches multiple patterns. Higher priorities are matched first.
- When omitted, the priority defaults to 0.
+ When omitted, the priority defaults to 0. A pattern can contain
+ environment variables of the form "${SOME_VAR}" that will be automatically
+ expanded. If the environment variable is not set, the pattern won't be
+ matched.
See $VIMRUNTIME/lua/vim/filetype.lua for more examples.
@@ -2112,6 +2115,8 @@ add({filetypes}) *vim.filetype.add()*
['.*/etc/foo/.*'] = 'fooscript',
-- Using an optional priority
['.*/etc/foo/.*%.conf'] = { 'dosini', { priority = 10 } },
+ -- A pattern containing an environment variable
+ ['${XDG_CONFIG_HOME}/foo/git'] = 'git',
['README.(a+)$'] = function(path, bufnr, ext)
if ext == 'md' then
return 'markdown'
@@ -2212,7 +2217,7 @@ del({modes}, {lhs}, {opts}) *vim.keymap.del()*
<
Parameters: ~
- {opts} (table) A table of optional arguments:
+ {opts} (table|nil) A table of optional arguments:
• buffer: (number or boolean) Remove a mapping from the given
buffer. When "true" or 0, use the current buffer.
@@ -2257,7 +2262,7 @@ set({mode}, {lhs}, {rhs}, {opts}) *vim.keymap.set()*
{lhs} (string) Left-hand side |{lhs}| of the mapping.
{rhs} string|function Right-hand side |{rhs}| of the mapping. Can
also be a Lua function.
- {opts} (table) A table of |:map-arguments|.
+ {opts} (table|nil) A table of |:map-arguments|.
• Accepts options accepted by the {opts} parameter in
|nvim_set_keymap()|, with the following notable differences:
• replace_keycodes: Defaults to `true` if "expr" is `true`.
@@ -2323,8 +2328,10 @@ find({names}, {opts}) *vim.fs.find()*
specifying {type} to be "file" or "directory", respectively.
Parameters: ~
- {names} (string|table) Names of the files and directories to find.
- Must be base names, paths and globs are not supported.
+ {names} (string|table|fun(name: string): boolean) Names of the files
+ and directories to find. Must be base names, paths and globs
+ are not supported. If a function it is called per file and
+ dir within the traversed directories to test if they match.
{opts} (table) Optional keyword arguments:
• path (string): Path to begin searching from. If omitted,
the current working directory is used.
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 110f7400e6..14b7eb2d71 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1337,7 +1337,8 @@ A jump table for the options with a short description can be found at |Q_op|.
page can have a different value.
When 'cmdheight' is zero, there is no command-line unless it is being
- used. Some informative messages will not be displayed, any other
+ used. The command-line will cover the last line of the screen when
+ shown. Some informative messages will not be displayed, any other
messages will cause the |hit-enter| prompt. Expect some other
unexpected behavior too.
diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt
index 23d5905ec3..15aa0117ec 100644
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1583,7 +1583,7 @@ CHECKCOMPOUNDTRIPLE (Hunspell) *spell-CHECKCOMPOUNDTRIPLE*
Forbid three identical characters when compounding. Not
supported.
-CHECKSHARPS (Hunspell)) *spell-CHECKSHARPS*
+CHECKSHARPS (Hunspell) *spell-CHECKSHARPS*
SS letter pair in uppercased (German) words may be upper case
sharp s (ß). Not supported.
diff --git a/runtime/doc/tagsrch.txt b/runtime/doc/tagsrch.txt
index 2485290667..82deb0fa0c 100644
--- a/runtime/doc/tagsrch.txt
+++ b/runtime/doc/tagsrch.txt
@@ -870,13 +870,15 @@ like |CTRL-]|.
The function used for generating the taglist is specified by setting the
'tagfunc' option. The function will be called with three arguments:
- a:pattern The tag identifier or pattern used during the tag search.
- a:flags String containing flags to control the function behavior.
- a:info Dict containing the following entries:
+ pattern The tag identifier or pattern used during the tag search.
+ flags String containing flags to control the function behavior.
+ info Dict containing the following entries:
buf_ffname Full filename which can be used for priority.
user_data Custom data String, if stored in the tag
stack previously by tagfunc.
+Note that "a:" needs to be prepended to the argument name when using it.
+
Currently up to three flags may be passed to the tag function:
'c' The function was invoked by a normal command being processed
(mnemonic: the tag function may use the context around the
diff --git a/runtime/doc/treesitter.txt b/runtime/doc/treesitter.txt
index 0a48b435b6..eda1a5e496 100644
--- a/runtime/doc/treesitter.txt
+++ b/runtime/doc/treesitter.txt
@@ -4,77 +4,75 @@
NVIM REFERENCE MANUAL
-Tree-sitter integration *treesitter*
+Treesitter integration *treesitter*
- Type |gO| to see the table of contents.
-
-------------------------------------------------------------------------------
-VIM.TREESITTER *lua-treesitter*
+Nvim integrates the `tree-sitter` library for incremental parsing of buffers:
+https://tree-sitter.github.io/tree-sitter/
-Nvim integrates the tree-sitter library for incremental parsing of buffers.
+WARNING: Treesitter support is still experimental and subject to frequent
+changes. This documentation may also not fully reflect the latest changes.
- *vim.treesitter.language_version*
-The latest parser ABI version that is supported by the bundled tree-sitter
-library.
-
- *vim.treesitter.minimum_language_version*
-The earliest parser ABI version that is supported by the bundled tree-sitter
-library.
+ Type |gO| to see the table of contents.
-Parser files *treesitter-parsers*
+==============================================================================
+PARSER FILES *treesitter-parsers*
Parsers are the heart of tree-sitter. They are libraries that tree-sitter will
-search for in the `parser` runtime directory. Currently Nvim does not provide
-the tree-sitter parsers, instead these must be built separately, for instance
-using the tree-sitter utility. The only exception is a C parser being included
-in official builds for testing purposes. Parsers are searched for as
-`parser/{lang}.*` in any 'runtimepath' directory.
+search for in the `parser` runtime directory. By default, Nvim bundles only
+parsers for C, Lua, and Vimscript, but parsers can be installed manually or
+via a plugin like https://github.com/nvim-treesitter/nvim-treesitter.
+Parsers are searched for as `parser/{lang}.*` in any 'runtimepath' directory.
+If multiple parsers for the same language are found, the first one is used.
+(This typically implies the priority "user config > plugins > bundled".
A parser can also be loaded manually using a full path: >
vim.treesitter.require_language("python", "/path/to/python.so")
+<
+==============================================================================
+LANGUAGE TREES *treesitter-languagetree*
+ *LanguageTree*
-<Create a parser for a buffer and a given language (if another plugin uses the
-same buffer/language combination, it will be safely reused). Use >
+As buffers can contain multiple languages (e.g., Vimscript commands in a Lua
+file), multiple parsers may be needed to parse the full buffer. These are
+combined in a |LanguageTree| object.
- parser = vim.treesitter.get_parser(bufnr, lang)
+To create a LanguageTree (parser object) for a buffer and a given language,
+use >
-<`bufnr=0` can be used for current buffer. `lang` will default to 'filetype'.
+ tsparser = vim.treesitter.get_parser(bufnr, lang)
+<
+`bufnr=0` can be used for current buffer. `lang` will default to 'filetype'.
Currently, the parser will be retained for the lifetime of a buffer but this
is subject to change. A plugin should keep a reference to the parser object as
long as it wants incremental updates.
-
-Parser methods *lua-treesitter-parser*
-
-tsparser:parse() *tsparser:parse()*
Whenever you need to access the current syntax tree, parse the buffer: >
- tstree = parser:parse()
-
-<This will return a table of immutable trees that represent the current state
-of the buffer. When the plugin wants to access the state after a (possible)
-edit it should call `parse()` again. If the buffer wasn't edited, the same tree
-will be returned again without extra work. If the buffer was parsed before,
-incremental parsing will be done of the changed parts.
-
-Note: to use the parser directly inside a |nvim_buf_attach| Lua callback, you
-must call `get_parser()` before you register your callback. But preferably
+ tstree = tsparser:parse()
+<
+This will return a table of immutable |lua-treesitter-tree|s that represent the
+current state of the buffer. When the plugin wants to access the state after a
+(possible) edit it should call `parse()` again. If the buffer wasn't edited,
+the same tree will be returned again without extra work. If the buffer was
+parsed before, incremental parsing will be done of the changed parts.
+
+Note: To use the parser directly inside a |nvim_buf_attach/)| Lua callback, you
+must call |get_parser()| before you register your callback. But preferably
parsing shouldn't be done directly in the change callback anyway as they will
be very frequent. Rather a plugin that does any kind of analysis on a tree
should use a timer to throttle too frequent updates.
-tsparser:set_included_regions({region_list}) *tsparser:set_included_regions()*
- Changes the regions the parser should consider. This is used for language
- injection. {region_list} should be of the form (all zero-based): >
- {
- {node1, node2},
- ...
- }
-<
- `node1` and `node2` are both considered part of the same region and will
- be parsed together with the parser in the same context.
+See |lua-treesitter-languagetree| for the list of available methods.
+
+==============================================================================
+TREESITTER TREES *treesitter-tree*
+ *tstree*
+
+A "treesitter tree" represents the parsed contents of a buffer, which can be
+used to perform further analysis. It is a |luaref-userdata| reference to an
+object held by the tree-sitter library.
-Tree methods *lua-treesitter-tree*
+An instance `tstree` of a treesitter tree supports the following methods.
tstree:root() *tstree:root()*
Return the root node of this tree.
@@ -82,8 +80,15 @@ tstree:root() *tstree:root()*
tstree:copy() *tstree:copy()*
Returns a copy of the `tstree`.
+==============================================================================
+TREESITTER NODES *treesitter-node*
+ *tsnode*
+
+A "treesitter node" represents one specific element of the parsed contents of
+a buffer, which can be captured by a |Query| for, e.g., highlighting. It is a
+|luaref-userdata| reference to an object held by the tree-sitter library.
-Node methods *lua-treesitter-node*
+An instance `tsnode` of a treesitter node supports the following methods.
tsnode:parent() *tsnode:parent()*
Get the node's immediate parent.
@@ -160,10 +165,10 @@ tsnode:id() *tsnode:id()*
Get an unique identifier for the node inside its own tree.
No guarantees are made about this identifier's internal representation,
- except for being a primitive lua type with value equality (so not a
+ except for being a primitive Lua type with value equality (so not a
table). Presently it is a (non-printable) string.
- Note: the id is not guaranteed to be unique for nodes from different
+ Note: The `id` is not guaranteed to be unique for nodes from different
trees.
*tsnode:descendant_for_range()*
@@ -176,121 +181,93 @@ tsnode:named_descendant_for_range({start_row}, {start_col}, {end_row}, {end_col}
Get the smallest named node within this node that spans the given range of
(row, column) positions
-Query *lua-treesitter-query*
-
-Tree-sitter queries are supported, they are a way to do pattern-matching over
-a tree, using a simple to write lisp-like format. See
-https://tree-sitter.github.io/tree-sitter/using-parsers#query-syntax for more
-information on how to write queries.
-
-Note: The predicates listed in the web page above differ from those Neovim
-supports. See |lua-treesitter-predicates| for a complete list of predicates
-supported by Neovim.
-
+==============================================================================
+TREESITTER QUERIES *treesitter-query*
+
+Treesitter queries are a way to extract information about a parsed |tstree|,
+e.g., for the purpose of highlighting. Briefly, a `query` consists of one or
+more patterns. A `pattern` is defined over node types in the syntax tree. A
+`match` corresponds to specific elements of the syntax tree which match a
+pattern. Patterns may optionally define captures and predicates. A `capture`
+allows you to associate names with a specific node in a pattern. A `predicate`
+adds arbitrary metadata and conditional data to a match.
+
+Queries are written in a lisp-like language documented in
+https://tree-sitter.github.io/tree-sitter/using-parsers#query-syntax
+Note: The predicates listed there page differ from those Nvim supports. See
+|treesitter-predicates| for a complete list of predicates supported by Nvim.
+
+Nvim looks for queries as `*.scm` files in a `queries` directory under
+`runtimepath`, where each file contains queries for a specific language and
+purpose, e.g., `queries/lua/highlights.scm` for highlighting Lua files.
By default, the first query on `runtimepath` is used (which usually implies
that user config takes precedence over plugins, which take precedence over
queries bundled with Neovim). If a query should extend other queries instead
-of replacing them, use the `; extends` modeline below.
+of replacing them, use |treesitter-query-modeline-extends|.
-A `query` consists of one or more patterns. A `pattern` is defined over node
-types in the syntax tree. A `match` corresponds to specific elements of the
-syntax tree which match a pattern. Patterns may optionally define captures
-and predicates. A `capture` allows you to associate names with a specific
-node in a pattern. A `predicate` adds arbitrary metadata and conditional data
-to a match.
+See |lua-treesitter-query| for the list of available methods for working with
+treesitter queries from Lua.
-Neovim supports to customize the behavior of the queries using a set of
-"modelines", that is comments in the queries starting with `;`. Here are the
-currently supported modeline alternatives:
- `inherits: {lang}...`
- Specifies that this query should inherit the queries from {lang}.
- This will recursively descend in the queries of {lang} unless wrapped
- in parentheses: `({lang})`.
+TREESITTER QUERY PREDICATES *treesitter-predicates*
- `extends`
- Specifies that this query should be used as an extension for the
- query, i.e. that it should be merged with the others.
- Note: the order of the extensions, and the query that will be used as
- a base depends on your 'runtimepath' value.
+Predicates are special scheme nodes that are evaluated to conditionally capture
+nodes. For example, the |eq?| predicate can be used as follows: >
-Note: these modeline comments must be at the top of the query, but can be
-repeated, for example, the following modeline blocks are all valid:
->
- ;; inherits: foo,bar
- ;; extends
-
- ;; extends
- ;;
- ;; inherits: baz
-<
-
-Treesitter Query Predicates *lua-treesitter-predicates*
-
-When writing queries for treesitter, one might use `predicates`, that is,
-special scheme nodes that are evaluated to verify things on a captured node
-for example, the |eq?| predicate : >
((identifier) @foo (#eq? @foo "foo"))
+<
+to only match identifier corresponding to the `"foo"` text.
-This will only match identifier corresponding to the `"foo"` text.
-Here is a list of built-in predicates :
+The following predicates are built in:
- `eq?` *ts-predicate-eq?*
- This predicate will check text correspondence between nodes or
- strings: >
+ `eq?` *treesitter-predicate-eq?*
+ Match a string against the text corresponding to a node: >
((identifier) @foo (#eq? @foo "foo"))
((node1) @left (node2) @right (#eq? @left @right))
<
- `match?` *ts-predicate-match?*
- `vim-match?` *ts-predicate-vim-match?*
- This will match if the provided vim regex matches the text
- corresponding to a node: >
+ `match?` *treesitter-predicate-match?*
+ `vim-match?` *treesitter-predicate-vim-match?*
+ Match a |regexp| against the text corresponding to a node: >
((identifier) @constant (#match? @constant "^[A-Z_]+$"))
-< Note: the `^` and `$` anchors will respectively match the start and
- end of the node's text.
+< Note: The `^` and `$` anchors will match the start and end of the
+ node's text.
- `lua-match?` *ts-predicate-lua-match?*
- This will match the same way than |match?| but using lua regexes.
+ `lua-match?` *treesitter-predicate-lua-match?*
+ Match a |lua-pattern| against the text corresponding to a node,
+ similar to `match?`
- `contains?` *ts-predicate-contains?*
- Will check if any of the following arguments appears in the text
- corresponding to the node: >
+ `contains?` *treesitter-predicate-contains?*
+ Match a string against parts of the text corresponding to a node: >
((identifier) @foo (#contains? @foo "foo"))
((identifier) @foo-bar (#contains @foo-bar "foo" "bar"))
<
- `any-of?` *ts-predicate-any-of?*
- Will check if the text is the same as any of the following arguments: >
+ `any-of?` *treesitter-predicate-any-of?*
+ Match any of the given strings against the text corresponding to
+ a node: >
((identifier) @foo (#any-of? @foo "foo" "bar"))
<
This is the recommended way to check if the node matches one of many
- keywords for example, as it has been optimized for this.
-<
+ keywords, as it has been optimized for this.
+
*lua-treesitter-not-predicate*
Each predicate has a `not-` prefixed predicate that is just the negation of
the predicate.
- *vim.treesitter.query.add_predicate()*
-vim.treesitter.query.add_predicate({name}, {handler})
+Further predicates can be added via `vim.treesitter.query.`|add_predicate()|.
+Use `vim.treesitter.query.`|list_predicates()| to list all available
+predicates.
-This adds a predicate with the name {name} to be used in queries.
-{handler} should be a function whose signature will be : >
- handler(match, pattern, bufnr, predicate)
-<
- *vim.treesitter.query.list_predicates()*
-vim.treesitter.query.list_predicates()
-This lists the currently available predicates to use in queries.
+TREESITTER QUERY DIRECTIVES *treesitter-directives*
-Treesitter Query Directive *lua-treesitter-directives*
+Treesitter directives store metadata for a node or match and perform side
+effects. For example, the |set!| predicate sets metadata on the match or node: >
-Treesitter queries can also contain `directives`. Directives store metadata
-for a node or match and perform side effects. For example, the |set!|
-predicate sets metadata on the match or node : >
((identifier) @foo (#set! "type" "parameter"))
+<
+The following directives are built in:
-Built-in directives:
-
- `set!` *ts-directive-set!*
+ `set!` *treesitter-directive-set!*
Sets key/value metadata for a specific match or capture. Value is
accessible as either `metadata[key]` (match specific) or
`metadata[capture_id][key]` (capture specific).
@@ -304,7 +281,7 @@ Built-in directives:
((identifier) @foo (#set! @foo "kind" "parameter"))
((node1) @left (node2) @right (#set! "type" "pair"))
<
- `offset!` *ts-directive-offset!*
+ `offset!` *treesitter-directive-offset!*
Takes the range of the captured node and applies an offset. This will
generate a new range object for the captured node as
`metadata[capture_id].range`.
@@ -320,51 +297,74 @@ Built-in directives:
((identifier) @constant (#offset! @constant 0 1 0 -1))
<
-Treesitter syntax highlighting (WIP) *lua-treesitter-highlight*
+Further directives can be added via `vim.treesitter.query.`|add_directive()|.
+Use `vim.treesitter.query.`|list_directives()| to list all available
+directives.
-NOTE: This is a partially implemented feature, and not usable as a default
-solution yet. What is documented here is a temporary interface intended
-for those who want to experiment with this feature and contribute to
-its development.
-Highlights are defined in the same query format as in the tree-sitter
-highlight crate, with some limitations and additions. Set a highlight query
-for a buffer with this code: >
+TREESITTER QUERY MODELINES *treesitter-query-modeline*
- local query = [[
- "for" @keyword
- "if" @keyword
- "return" @keyword
+Neovim supports to customize the behavior of the queries using a set of
+"modelines", that is comments in the queries starting with `;`. Here are the
+currently supported modeline alternatives:
- (string_literal) @string
- (number_literal) @number
- (comment) @comment
+ `inherits: {lang}...` *treesitter-query-modeline-inherits*
+ Specifies that this query should inherit the queries from {lang}.
+ This will recursively descend in the queries of {lang} unless wrapped
+ in parentheses: `({lang})`.
+ Note: This is meant to be used to include queries from another
+ language. If you want your query to extend the queries of the same
+ language, use `extends`.
- (preproc_function_def name: (identifier) @function)
+ `extends` *treesitter-query-modeline-extends*
+ Specifies that this query should be used as an extension for the
+ query, i.e. that it should be merged with the others.
+ Note: The order of the extensions, and the query that will be used as
+ a base depends on your 'runtimepath' value.
+
+Note: These modeline comments must be at the top of the query, but can be
+repeated, for example, the following two modeline blocks are both valid: >
+
+ ;; inherits: foo,bar
+ ;; extends
- ; ... more definitions
- ]]
+ ;; extends
+ ;;
+ ;; inherits: baz
+<
+==============================================================================
+TREESITTER SYNTAX HIGHLIGHTING *treesitter-highlight*
- highlighter = vim.treesitter.TSHighlighter.new(query, bufnr, lang)
- -- alternatively, to use the current buffer and its filetype:
- -- highlighter = vim.treesitter.TSHighlighter.new(query)
+Syntax highlighting is specified through queries named `highlights.scm`,
+which match a |tsnode| in the parsed |tstree| to a `capture` that can be
+assigned a highlight group. For example, the query >
- -- Don't recreate the highlighter for the same buffer, instead
- -- modify the query like this:
- local query2 = [[ ... ]]
- highlighter:set_query(query2)
+ (parameters (identifier) @parameter)
+<
+matches any `identifier` node inside a function `parameter` node (e.g., the
+`bar` in `foo(bar)`) to the capture named `@parameter`. It is also possible to
+match literal expressions (provided the parser returns them): >
+ "return" @keyword.return
+<
+Assuming a suitable parser and `highlights.scm` query is found in runtimepath,
+treesitter highlighting for the current buffer can be enabled simply via
+|vim.treesitter.start()|.
- *lua-treesitter-highlight-groups*
+ *treesitter-highlight-groups*
The capture names, with `@` included, are directly usable as highlight groups.
+For many commonly used captures, the corresponding highlight groups are linked
+to Nvim's standard |highlight-groups| by default but can be overridden in
+colorschemes.
+
A fallback system is implemented, so that more specific groups fallback to
-more generic ones. For instance, in a language that has separate doc
-comments, `@comment.doc` could be used. If this group is not defined, the
-highlighting for an ordinary `@comment` is used. This way, existing color
-schemes already work out of the box, but it is possible to add
-more specific variants for queries that make them available.
+more generic ones. For instance, in a language that has separate doc comments,
+`@comment.doc` could be used. If this group is not defined, the highlighting
+for an ordinary `@comment` is used. This way, existing color schemes already
+work out of the box, but it is possible to add more specific variants for
+queries that make them available.
-As an additional rule, captures highlights can always be specialized by
+As an additional rule, capture highlights can always be specialized by
language, by appending the language name after an additional dot. For
instance, to highlight comments differently per language: >
@@ -372,47 +372,75 @@ instance, to highlight comments differently per language: >
hi @comment.lua @guifg=DarkBlue
hi link @comment.doc.java String
<
-It is possible to use custom highlight groups. As an example, if we
-define the `@warning` group: >
+ *treesitter-highlight-spell*
+The special `@spell` capture can be used to indicate that a node should be
+spell checked by Nvim's builtin |spell| checker. For example, the following
+capture marks comments as to be checked: >
- hi link @warning WarningMsg
+ (comment) @spell
<
-the following query warns of a binary expression with two
-identical identifiers, highlighting both as |hl-WarningMsg|: >
+ *treesitter-highlight-conceal*
+Treesitter highlighting supports |conceal| via the `conceal` metadata. By
+convention, nodes to be concealed are captured as `@conceal`, but any capture
+can be used. For example, the following query can be used to hide code block
+delimiters in Markdown: >
- ((binary_expression left: (identifier) @warning.left right: (identifier) @warning.right)
- (eq? @warning.left @warning.right))
+ (fenced_code_block_delimiter) @conceal (#set! conceal "")
<
-Treesitter Highlighting Priority *lua-treesitter-highlight-priority*
+It is also possible to replace a node with a single character, which (unlike
+legacy syntax) can be given a custom highlight. For example, the following
+(ill-advised) query replaces the `!=` operator by a Unicode glyph, which is
+still highlighted the same as other operators: >
-Tree-sitter uses |nvim_buf_set_extmark()| to set highlights with a default
+ "!=" @operator (#set! conceal "≠")
+<
+Conceals specified in this way respect |conceallevel|.
+
+ *treesitter-highlight-priority*
+Treesitter uses |nvim_buf_set_extmark()| to set highlights with a default
priority of 100. This enables plugins to set a highlighting priority lower or
higher than tree-sitter. It is also possible to change the priority of an
individual query pattern manually by setting its `"priority"` metadata
attribute: >
- (
- (super_important_node) @ImportantHighlight
- ; Give the whole query highlight priority higher than the default (100)
- (set! "priority" 105)
- )
+ (super_important_node) @ImportantHighlight (#set! "priority" 105)
<
+==============================================================================
+VIM.TREESITTER *lua-treesitter*
+
+The remainder of this document is a reference manual for the `vim.treesitter`
+Lua module, which is the main interface for Nvim's tree-sitter integration.
+Most of the following content is automatically generated from the function
+documentation.
+
+
+ *vim.treesitter.language_version*
+The latest parser ABI version that is supported by the bundled tree-sitter
+library.
+
+ *vim.treesitter.minimum_language_version*
+The earliest parser ABI version that is supported by the bundled tree-sitter
+library.
==============================================================================
Lua module: vim.treesitter *lua-treesitter-core*
get_captures_at_cursor({winnr}) *get_captures_at_cursor()*
- Gets a list of captures under the cursor
+ Returns a list of highlight capture names under the cursor
Parameters: ~
{winnr} (number|nil) Window handle or 0 for current window (default)
Return: ~
- (table) Named node under the cursor
+ string[] List of capture names
*get_captures_at_position()*
get_captures_at_position({bufnr}, {row}, {col})
- Gets a list of captures for a given cursor position
+ Returns a list of highlight captures at the given position
+
+ Each capture is represented by a table containing the capture name as a
+ string as well as a table of metadata (`priority`, `conceal`, ...; empty
+ if none are defined).
Parameters: ~
{bufnr} (number) Buffer number (0 for current buffer)
@@ -420,20 +448,21 @@ get_captures_at_position({bufnr}, {row}, {col})
{col} (number) Position column
Return: ~
- (table) Table of captures
+ table[] List of captures `{ capture = "capture name", metadata = { ...
+ } }`
get_node_at_cursor({winnr}) *get_node_at_cursor()*
- Gets the smallest named node under the cursor
+ Returns the smallest named node under the cursor
Parameters: ~
{winnr} (number|nil) Window handle or 0 for current window (default)
Return: ~
- (string) Named node under the cursor
+ (string) Name of node under the cursor
*get_node_at_position()*
get_node_at_position({bufnr}, {row}, {col}, {opts})
- Gets the smallest named node at position
+ Returns the smallest named node at the given position
Parameters: ~
{bufnr} (number) Buffer number (0 for current buffer)
@@ -444,56 +473,59 @@ get_node_at_position({bufnr}, {row}, {col}, {opts})
(default true)
Return: ~
- (table) Named node under the cursor
+ userdata |tsnode| under the cursor
get_node_range({node_or_range}) *get_node_range()*
- Get the node's range or unpack a range table
+ Returns the node's range or an unpacked range table
Parameters: ~
- {node_or_range} (table)
+ {node_or_range} (userdata|table) |tsnode| or table of positions
Return: ~
- (table) start_row, start_col, end_row, end_col
+ (table) `{ start_row, start_col, end_row, end_col }`
get_parser({bufnr}, {lang}, {opts}) *get_parser()*
- Gets the parser for this bufnr / ft combination.
+ Returns the parser for a specific buffer and filetype and attaches it to
+ the buffer
- If needed this will create the parser. Unconditionally attach the provided
- callback
+ If needed, this will create the parser.
Parameters: ~
{bufnr} (number|nil) Buffer the parser should be tied to (default:
current buffer)
- {lang} (string) |nil Filetype of this parser (default: buffer
+ {lang} (string|nil) Filetype of this parser (default: buffer
filetype)
{opts} (table|nil) Options to pass to the created language tree
Return: ~
- (table) Parser object
+ LanguageTree |LanguageTree| object to use for parsing
get_string_parser({str}, {lang}, {opts}) *get_string_parser()*
- Gets a string parser
+ Returns a string parser
Parameters: ~
- {str} The string to parse
- {lang} The language of this string
- {opts} Options to pass to the created language tree
+ {str} (string) Text to parse
+ {lang} (string) Language of this string
+ {opts} (table|nil) Options to pass to the created language tree
+
+ Return: ~
+ LanguageTree |LanguageTree| object to use for parsing
is_ancestor({dest}, {source}) *is_ancestor()*
Determines whether a node is the ancestor of another
Parameters: ~
- {dest} (table) Possible ancestor
- {source} (table) Possible descendant node
+ {dest} userdata Possible ancestor |tsnode|
+ {source} userdata Possible descendant |tsnode|
Return: ~
- (boolean) True if dest is an ancestor of source
+ (boolean) True if {dest} is an ancestor of {source}
is_in_node_range({node}, {line}, {col}) *is_in_node_range()*
Determines whether (line, col) position is in node range
Parameters: ~
- {node} (table) Node defining the range
+ {node} userdata |tsnode| defining the range
{line} (number) Line (0-based)
{col} (number) Column (0-based)
@@ -504,30 +536,29 @@ node_contains({node}, {range}) *node_contains()*
Determines if a node contains a range
Parameters: ~
- {node} (table)
+ {node} userdata |tsnode|
{range} (table)
Return: ~
- (boolean) True if the node contains the range
+ (boolean) True if the {node} contains the {range}
start({bufnr}, {lang}) *start()*
- Start treesitter highlighting for a buffer
+ Starts treesitter highlighting for a buffer
- Can be used in an ftplugin or FileType autocommand
+ Can be used in an ftplugin or FileType autocommand.
Note: By default, disables regex syntax highlighting, which may be
required for some plugins. In this case, add `vim.bo.syntax = 'on'` after
the call to `start`.
- Example:
->
+ Example: >
- vim.api.nvim_create_autocmd( 'FileType', { pattern = 'tex',
- callback = function(args)
- vim.treesitter.start(args.buf, 'latex')
- vim.bo[args.buf].syntax = 'on' -- only if additional legacy syntax is needed
- end
- })
+ vim.api.nvim_create_autocmd( 'FileType', { pattern = 'tex',
+ callback = function(args)
+ vim.treesitter.start(args.buf, 'latex')
+ vim.bo[args.buf].syntax = 'on' -- only if additional legacy syntax is needed
+ end
+ })
<
Parameters: ~
@@ -537,7 +568,7 @@ start({bufnr}, {lang}) *start()*
filetype)
stop({bufnr}) *stop()*
- Stop treesitter highlighting for a buffer
+ Stops treesitter highlighting for a buffer
Parameters: ~
{bufnr} (number|nil) Buffer to stop highlighting (default: current
@@ -545,7 +576,7 @@ stop({bufnr}) *stop()*
==============================================================================
-Lua module: vim.treesitter.language *treesitter-language*
+Lua module: vim.treesitter.language *lua-treesitter-language*
inspect_language({lang}) *inspect_language()*
Inspects the provided language.
@@ -554,26 +585,32 @@ inspect_language({lang}) *inspect_language()*
names, ...
Parameters: ~
- {lang} The language.
+ {lang} (string) Language
+
+ Return: ~
+ (table)
*require_language()*
require_language({lang}, {path}, {silent}, {symbol_name})
- Asserts that the provided language is installed, and optionally provide a
- path for the parser
+ Asserts that a parser for the language {lang} is installed.
- Parsers are searched in the `parser` runtime directory.
+ Parsers are searched in the `parser` runtime directory, or the provided
+ {path}
Parameters: ~
- {lang} (string) The language the parser should parse
+ {lang} (string) Language the parser should parse
{path} (string|nil) Optional path the parser is located at
{silent} (boolean|nil) Don't throw an error if language not
found
{symbol_name} (string|nil) Internal symbol name for the language to
load
+ Return: ~
+ (boolean) If the specified language is installed
+
==============================================================================
-Lua module: vim.treesitter.query *treesitter-query*
+Lua module: vim.treesitter.query *lua-treesitter-query*
add_directive({name}, {handler}, {force}) *add_directive()*
Adds a new directive to be used in queries
@@ -584,65 +621,74 @@ add_directive({name}, {handler}, {force}) *add_directive()*
`metadata[capture_id].key = value`
Parameters: ~
- {name} the name of the directive, without leading #
- {handler} the handler function to be used signature will be (match,
- pattern, bufnr, predicate, metadata)
+ {name} (string) Name of the directive, without leading #
+ {handler} function(match:string, pattern:string, bufnr:number,
+ predicate:function, metadata:table)
add_predicate({name}, {handler}, {force}) *add_predicate()*
Adds a new predicate to be used in queries
Parameters: ~
- {name} the name of the predicate, without leading #
- {handler} the handler function to be used signature will be (match,
- pattern, bufnr, predicate)
+ {name} (string) Name of the predicate, without leading #
+ {handler} function(match:string, pattern:string, bufnr:number,
+ predicate:function)
get_node_text({node}, {source}, {opts}) *get_node_text()*
Gets the text corresponding to a given node
Parameters: ~
- {node} (table) The node
- {source} (table) The buffer or string from which the node is
+ {node} userdata |tsnode|
+ {source} (number|string) Buffer or string from which the {node} is
extracted
- {opts} (table) Optional parameters.
- • concat: (boolean default true) Concatenate result in a
- string
+ {opts} (table|nil) Optional parameters.
+ • concat: (boolean) Concatenate result in a string (default
+ true)
+
+ Return: ~
+ (string[]|string)
get_query({lang}, {query_name}) *get_query()*
Returns the runtime query {query_name} for {lang}.
Parameters: ~
- {lang} The language to use for the query
- {query_name} The name of the query (i.e. "highlights")
+ {lang} (string) Language to use for the query
+ {query_name} (string) Name of the query (e.g. 'highlights')
Return: ~
- The corresponding query, parsed.
+ Query Parsed query
*get_query_files()*
get_query_files({lang}, {query_name}, {is_included})
Gets the list of files used to make up a query
Parameters: ~
- {lang} The language
- {query_name} The name of the query to load
- {is_included} Internal parameter, most of the time left as `nil`
+ {lang} (string) Language to get query for
+ {query_name} (string) Name of the query to load (e.g., 'highlights')
+ {is_included} (boolean|nil) Internal parameter, most of the time left
+ as `nil`
+
+ Return: ~
+ string[] query_files List of files to load for given query and
+ language
list_directives() *list_directives()*
Lists the currently available directives to use in queries.
Return: ~
- The list of supported directives.
+ string[] List of supported directives.
list_predicates() *list_predicates()*
+ Lists the currently available predicates to use in queries.
+
Return: ~
- The list of supported predicates.
+ string[] List of supported predicates.
parse_query({lang}, {query}) *parse_query()*
Parse {query} as a string. (If the query is in a file, the caller should
read the contents into a string before calling).
- Returns a `Query` (see |lua-treesitter-query|) object which can be used to
- search nodes in the syntax tree for the patterns defined in {query} using
- `iter_*` methods below.
+ Returns a `Query` (see |lua-treesitter-query|) object which can be used to search nodes in
+ the syntax tree for the patterns defined in {query} using `iter_*` methods below.
Exposes `info` and `captures` with additional context about {query}.
• `captures` contains the list of unique capture names defined in {query}.
@@ -650,106 +696,109 @@ parse_query({lang}, {query}) *parse_query()*
• `info.patterns` contains information about predicates.
Parameters: ~
- {lang} (string) The language
- {query} (string) A string containing the query (s-expr syntax)
+ {lang} (string) Language to use for the query
+ {query} (string) Query in s-expr syntax
Return: ~
- The query
+ Query Parsed query
*Query:iter_captures()*
Query:iter_captures({self}, {node}, {source}, {start}, {stop})
Iterate over all captures from all matches inside {node}
- {source} is needed if the query contains predicates, then the caller must
+ {source} is needed if the query contains predicates; then the caller must
ensure to use a freshly parsed tree consistent with the current text of
the buffer (if relevant). {start_row} and {end_row} can be used to limit
matches inside a row range (this is typically used with root node as the
- node, i e to get syntax highlight matches in the current viewport). When
- omitted the start and end row values are used from the given node.
+ {node}, i.e., to get syntax highlight matches in the current viewport).
+ When omitted, the {start} and {end} row values are used from the given
+ node.
- The iterator returns three values, a numeric id identifying the capture,
+ The iterator returns three values: a numeric id identifying the capture,
the captured node, and metadata from any directives processing the match.
- The following example shows how to get captures by name:
->
-
- for id, node, metadata in query:iter_captures(tree:root(), bufnr, first, last) do
- local name = query.captures[id] -- name of the capture in the query
- -- typically useful info about the node:
- local type = node:type() -- type of the captured node
- local row1, col1, row2, col2 = node:range() -- range of the capture
- ... use the info here ...
- end
+ The following example shows how to get captures by name: >
+
+ for id, node, metadata in query:iter_captures(tree:root(), bufnr, first, last) do
+ local name = query.captures[id] -- name of the capture in the query
+ -- typically useful info about the node:
+ local type = node:type() -- type of the captured node
+ local row1, col1, row2, col2 = node:range() -- range of the capture
+ ... use the info here ...
+ end
<
Parameters: ~
- {node} The node under which the search will occur
- {source} The source buffer or string to extract text from
- {start} The starting line of the search
- {stop} The stopping line of the search (end-exclusive)
+ {node} userdata |tsnode| under which the search will occur
+ {source} (number|string) Source buffer or string to extract text from
+ {start} (number) Starting line for the search
+ {stop} (number) Stopping line for the search (end-exclusive)
{self}
Return: ~
- The matching capture id
- The captured node
+ (number) capture Matching capture id
+ (table) capture_node Capture for {node}
+ (table) metadata for the {capture}
*Query:iter_matches()*
Query:iter_matches({self}, {node}, {source}, {start}, {stop})
Iterates the matches of self on a given range.
- Iterate over all matches within a node. The arguments are the same as for
- |query:iter_captures()| but the iterated values are different: an
+ Iterate over all matches within a {node}. The arguments are the same as
+ for |query:iter_captures()| but the iterated values are different: an
(1-based) index of the pattern in the query, a table mapping capture
indices to nodes, and metadata from any directives processing the match.
- If the query has more than one pattern the capture table might be sparse,
- and e.g. `pairs()` method should be used over `ipairs`. Here an example
- iterating over all captures in every match:
->
+ If the query has more than one pattern, the capture table might be sparse
+ and e.g. `pairs()` method should be used over `ipairs` . Here is an example iterating over all captures in every match: >
- for pattern, match, metadata in cquery:iter_matches(tree:root(), bufnr, first, last) do
- for id, node in pairs(match) do
- local name = query.captures[id]
- -- `node` was captured by the `name` capture in the match
+ for pattern, match, metadata in cquery:iter_matches(tree:root(), bufnr, first, last) do
+ for id, node in pairs(match) do
+ local name = query.captures[id]
+ -- `node` was captured by the `name` capture in the match
- local node_data = metadata[id] -- Node level metadata
+ local node_data = metadata[id] -- Node level metadata
- ... use the info here ...
- end
- end
+ ... use the info here ...
+ end
+ end
<
Parameters: ~
- {node} The node under which the search will occur
- {source} The source buffer or string to search
- {start} The starting line of the search
- {stop} The stopping line of the search (end-exclusive)
+ {node} userdata |tsnode| under which the search will occur
+ {source} (number|string) Source buffer or string to search
+ {start} (number) Starting line for the search
+ {stop} (number) Stopping line for the search (end-exclusive)
{self}
Return: ~
- The matching pattern id
- The matching match
+ (number) pattern id
+ (table) match
+ (table) metadata
set_query({lang}, {query_name}, {text}) *set_query()*
- Sets the runtime query {query_name} for {lang}
+ Sets the runtime query named {query_name} for {lang}
This allows users to override any runtime files and/or configuration set
by plugins.
Parameters: ~
- {lang} string: The language to use for the query
- {query_name} string: The name of the query (i.e. "highlights")
- {text} string: The query text (unparsed).
+ {lang} (string) Language to use for the query
+ {query_name} (string) Name of the query (e.g., 'highlights')
+ {text} (string) Query text (unparsed).
==============================================================================
-Lua module: vim.treesitter.highlighter *treesitter-highlighter*
+Lua module: vim.treesitter.highlighter *lua-treesitter-highlighter*
new({tree}, {opts}) *highlighter.new()*
Creates a new highlighter using
Parameters: ~
- {tree} The language tree to use for highlighting
- {opts} Table used to configure the highlighter
- • queries: Table to overwrite queries used by the highlighter
+ {tree} LanguageTree |LanguageTree| parser object to use for highlighting
+ {opts} (table|nil) Configuration of the highlighter:
+ • queries table overwrite queries used by the highlighter
+
+ Return: ~
+ TSHighlighter Created highlighter object
TSHighlighter:destroy({self}) *TSHighlighter:destroy()*
Removes all internal references to the highlighter
@@ -757,25 +806,9 @@ TSHighlighter:destroy({self}) *TSHighlighter:destroy()*
Parameters: ~
{self}
-TSHighlighter:get_query({self}, {lang}) *TSHighlighter:get_query()*
- Gets the query used for
-
- Parameters: ~
- {lang} A language used by the highlighter.
- {self}
-
==============================================================================
-Lua module: vim.treesitter.languagetree *treesitter-languagetree*
-
-LanguageTree:add_child({self}, {lang}) *LanguageTree:add_child()*
- Adds a child language to this tree.
-
- If the language already exists as a child, it will first be removed.
-
- Parameters: ~
- {lang} The language to add.
- {self}
+Lua module: vim.treesitter.languagetree *lua-treesitter-languagetree*
LanguageTree:children({self}) *LanguageTree:children()*
Returns a map of language to child tree.
@@ -784,15 +817,17 @@ LanguageTree:children({self}) *LanguageTree:children()*
{self}
LanguageTree:contains({self}, {range}) *LanguageTree:contains()*
- Determines whether {range} is contained in this language tree
+ Determines whether {range} is contained in the |LanguageTree|.
Parameters: ~
- {range} A range, that is a `{ start_line, start_col, end_line,
- end_col }` table.
+ {range} (table) `{ start_line, start_col, end_line, end_col }`
{self}
+ Return: ~
+ (boolean)
+
LanguageTree:destroy({self}) *LanguageTree:destroy()*
- Destroys this language tree and all its children.
+ Destroys this |LanguageTree| and all its children.
Any cleanup logic should be performed here.
@@ -803,22 +838,21 @@ LanguageTree:destroy({self}) *LanguageTree:destroy()*
*LanguageTree:for_each_child()*
LanguageTree:for_each_child({self}, {fn}, {include_self})
- Invokes the callback for each LanguageTree and it's children recursively
+ Invokes the callback for each |LanguageTree| and its children recursively
Parameters: ~
- {fn} The function to invoke. This is invoked with arguments
- (tree: LanguageTree, lang: string)
- {include_self} Whether to include the invoking tree in the results.
+ {fn} function(tree: LanguageTree, lang: string)
+ {include_self} (boolean) Whether to include the invoking tree in the
+ results
{self}
LanguageTree:for_each_tree({self}, {fn}) *LanguageTree:for_each_tree()*
- Invokes the callback for each treesitter trees recursively.
+ Invokes the callback for each |LanguageTree| recursively.
- Note, this includes the invoking language tree's trees as well.
+ Note: This includes the invoking tree's child trees as well.
Parameters: ~
- {fn} The callback to invoke. The callback is invoked with arguments
- (tree: TSTree, languageTree: LanguageTree)
+ {fn} function(tree: TSTree, languageTree: LanguageTree)
{self}
LanguageTree:included_regions({self}) *LanguageTree:included_regions()*
@@ -847,23 +881,29 @@ LanguageTree:lang({self}) *LanguageTree:lang()*
*LanguageTree:language_for_range()*
LanguageTree:language_for_range({self}, {range})
- Gets the appropriate language that contains {range}
+ Gets the appropriate language that contains {range}.
Parameters: ~
- {range} A text range, see |LanguageTree:contains|
+ {range} (table) `{ start_line, start_col, end_line, end_col }`
{self}
+ Return: ~
+ LanguageTree Managing {range}
+
*LanguageTree:named_node_for_range()*
LanguageTree:named_node_for_range({self}, {range}, {opts})
- Gets the smallest named node that contains {range}
+ Gets the smallest named node that contains {range}.
Parameters: ~
- {range} (table) A text range
- {opts} (table) Options table
- {opts.ignore_injections} (boolean) (default true) Ignore injected
- languages.
+ {range} (table) `{ start_line, start_col, end_line, end_col }`
+ {opts} (table|nil) Optional keyword arguments:
+ • ignore_injections boolean Ignore injected languages
+ (default true)
{self}
+ Return: ~
+ userdata|nil Found |tsnode|
+
LanguageTree:parse({self}) *LanguageTree:parse()*
Parses all defined regions using a treesitter parser for the language this
tree represents. This will run the injection query for this language to
@@ -872,12 +912,16 @@ LanguageTree:parse({self}) *LanguageTree:parse()*
Parameters: ~
{self}
+ Return: ~
+ userdata[] Table of parsed |tstree|
+ (table) Change list
+
LanguageTree:register_cbs({self}, {cbs}) *LanguageTree:register_cbs()*
- Registers callbacks for the parser.
+ Registers callbacks for the |LanguageTree|.
Parameters: ~
{cbs} (table) An |nvim_buf_attach()|-like table argument with the
- following keys :
+ following handlers:
• `on_bytes` : see |nvim_buf_attach()|, but this will be called after the parsers callback.
• `on_changedtree` : a callback that will be called every time
the tree has syntactical changes. It will only be passed one
@@ -889,35 +933,6 @@ LanguageTree:register_cbs({self}, {cbs}) *LanguageTree:register_cbs()*
the tree.
{self}
-LanguageTree:remove_child({self}, {lang}) *LanguageTree:remove_child()*
- Removes a child language from this tree.
-
- Parameters: ~
- {lang} The language to remove.
- {self}
-
- *LanguageTree:set_included_regions()*
-LanguageTree:set_included_regions({self}, {regions})
- Sets the included regions that should be parsed by this parser. A region
- is a set of nodes and/or ranges that will be parsed in the same context.
-
- For example, `{ { node1 }, { node2} }` is two separate regions. This will
- be parsed by the parser in two different contexts... thus resulting in two
- separate trees.
-
- `{ { node1, node2 } }` is a single region consisting of two nodes. This
- will be parsed by the parser in a single context... thus resulting in a
- single tree.
-
- This allows for embedded languages to be parsed together across different
- nodes, which is useful for templating languages like ERB and EJS.
-
- Note, this call invalidates the tree and requires it to be parsed again.
-
- Parameters: ~
- {regions} (table) list of regions this tree should manage and parse.
- {self}
-
LanguageTree:source({self}) *LanguageTree:source()*
Returns the source content of the language tree (bufnr or string).
@@ -926,15 +941,18 @@ LanguageTree:source({self}) *LanguageTree:source()*
*LanguageTree:tree_for_range()*
LanguageTree:tree_for_range({self}, {range}, {opts})
- Gets the tree that contains {range}
+ Gets the tree that contains {range}.
Parameters: ~
- {range} (table) A text range
- {opts} (table) Options table
- {opts.ignore_injections} (boolean) (default true) Ignore injected
- languages.
+ {range} (table) `{ start_line, start_col, end_line, end_col }`
+ {opts} (table|nil) Optional keyword arguments:
+ • ignore_injections boolean Ignore injected languages
+ (default true)
{self}
+ Return: ~
+ userdata|nil Contained |tstree|
+
LanguageTree:trees({self}) *LanguageTree:trees()*
Returns all trees this language tree contains. Does not include child
languages.
@@ -943,16 +961,20 @@ LanguageTree:trees({self}) *LanguageTree:trees()*
{self}
new({source}, {lang}, {opts}) *languagetree.new()*
- Represents a single treesitter parser for a language. The language can
- contain child languages with in its range, hence the tree.
+ A |LanguageTree| holds the treesitter parser for a given language {lang}
+ used to parse a buffer. As the buffer may contain injected languages, the LanguageTree needs to store parsers for these child languages as well (which in turn
+ may contain child languages themselves, hence the name).
Parameters: ~
- {source} Can be a bufnr or a string of text to parse
- {lang} The language this tree represents
- {opts} Options table
- {opts.injections} A table of language to injection query strings.
- This is useful for overriding the built-in runtime
- file searching for the injection language query per
- language.
+ {source} (number|string) Buffer or a string of text to parse
+ {lang} (string) Root language this tree represents
+ {opts} (table|nil) Optional keyword arguments:
+ • injections table Mapping language to injection query
+ strings. This is useful for overriding the built-in
+ runtime file searching for the injection language query
+ per language.
+
+ Return: ~
+ LanguageTree |LanguageTree| parser object
vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl:
diff --git a/runtime/doc/userfunc.txt b/runtime/doc/userfunc.txt
index 39c246e21d..c015b12c27 100644
--- a/runtime/doc/userfunc.txt
+++ b/runtime/doc/userfunc.txt
@@ -12,7 +12,7 @@ This is introduced in section |41.7| of the user manual.
==============================================================================
-1. Defining a fuction ~
+1. Defining a function ~
*define-function*
New functions can be defined. These can be called just like builtin
functions. The function executes a sequence of Ex commands. Normal mode
@@ -20,7 +20,7 @@ commands can be executed with the |:normal| command.
The function name must start with an uppercase letter, to avoid confusion with
builtin functions. To prevent from using the same name in different scripts
-make them script-local. If you do use a global function the avoid obvious,
+make them script-local. If you do use a global function then avoid obvious,
short names. A good habit is to start the function name with the name of the
script, e.g., "HTMLcolor()".
@@ -287,7 +287,7 @@ This function can then be called with: >
<
==============================================================================
-2. Calling a fuction ~
+2. Calling a function ~
*:cal* *:call* *E107* *E117*
:[range]cal[l] {name}([arguments])
Call a function. The name of the function and its arguments
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 76c2f8454f..1aa9aaa0c4 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -604,6 +604,8 @@ String manipulation: *string-functions*
fnameescape() escape a file name for use with a Vim command
tr() translate characters from one set to another
strtrans() translate a string to make it printable
+ keytrans() translate internal keycodes to a form that
+ can be used by |:map|
tolower() turn a string to lowercase
toupper() turn a string to uppercase
charclass() class of a character
@@ -745,6 +747,7 @@ Cursor and mark position: *cursor-functions* *mark-functions*
screencol() get screen column of the cursor
screenrow() get screen row of the cursor
screenpos() screen row and col of a text character
+ virtcol2col() byte index of a text character on screen
getcurpos() get position of the cursor
getpos() get position of cursor, mark, etc.
setpos() set position of cursor, mark, etc.
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 4fea421ece..4de1720c75 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2022 Jul 5
+" Last Change: 2022 Sep 11
" Only run this if enabled
if !exists("do_legacy_filetype")
@@ -300,6 +300,9 @@ au BufNewFile,BufRead cfengine.conf setf cfengine
" ChaiScript
au BufRead,BufNewFile *.chai setf chaiscript
+" Chatito
+au BufNewFile,BufRead *.chatito setf chatito
+
" Comshare Dimension Definition Language
au BufNewFile,BufRead *.cdl setf cdl
@@ -449,6 +452,9 @@ endif
" Lynx config files
au BufNewFile,BufRead lynx.cfg setf lynx
+" LyRiCs
+au BufNewFile,BufRead *.lrc setf lyrics
+
" Modula-3 configuration language (must be before *.cfg and *makefile)
au BufNewFile,BufRead *.quake,cm3.cfg setf m3quake
au BufNewFile,BufRead m3makefile,m3overrides setf m3build
@@ -721,9 +727,16 @@ au BufNewFile,BufRead *.git/worktrees/*/config.worktree setf gitconfig
au BufNewFile,BufRead .gitmodules,*.git/modules/*/config setf gitconfig
if !empty($XDG_CONFIG_HOME)
au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config setf gitconfig
+ au BufNewFile,BufRead $XDG_CONFIG_HOME/git/attributes setf gitattributes
+ au BufNewFile,BufRead $XDG_CONFIG_HOME/git/ignore setf gitignore
endif
-au BufNewFile,BufRead git-rebase-todo setf gitrebase
-au BufRead,BufNewFile .gitsendemail.msg.?????? setf gitsendemail
+au BufNewFile,BufRead .gitattributes,*.git/info/attributes setf gitattributes
+au BufNewFile,BufRead */.config/git/attributes setf gitattributes
+au BufNewFile,BufRead */etc/gitattributes setf gitattributes
+au BufNewFile,BufRead .gitignore,*.git/info/exclude setf gitignore
+au BufNewFile,BufRead */.config/git/ignore setf gitignore
+au BufNewFile,BufRead git-rebase-todo setf gitrebase
+au BufRead,BufNewFile .gitsendemail.msg.?????? setf gitsendemail
au BufNewFile,BufRead *.git/*
\ if getline(1) =~# '^\x\{40,\}\>\|^ref: ' |
\ setf git |
@@ -868,11 +881,11 @@ au BufNewFile,BufRead *.htt,*.htb setf httest
" i3
au BufNewFile,BufRead */i3/config setf i3config
-au BufNewFile,BufRead */.i3/config setf i3config
+au BufNewFile,BufRead */.i3/config setf i3config
" sway
au BufNewFile,BufRead */sway/config setf swayconfig
-au BufNewFile,BufRead */.sway/config setf swayconfig
+au BufNewFile,BufRead */.sway/config setf swayconfig
" Icon
au BufNewFile,BufRead *.icn setf icon
@@ -1320,7 +1333,7 @@ au BufNewFile,BufRead *.or setf openroad
au BufNewFile,BufRead *.[Oo][Pp][Ll] setf opl
" OpenSCAD
-au BufNewFile,BufRead *.scad setf openscad
+au BufNewFile,BufRead *.scad setf openscad
" Oracle config file
au BufNewFile,BufRead *.ora setf ora
@@ -1395,7 +1408,8 @@ au BufNewFile,BufRead *.pod setf pod
" Also Phtml (was used for PHP 2 in the past).
" Also .ctp for Cake template file.
" Also .phpt for php tests.
-au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp,*.phpt setf php
+" Also .theme for Drupal theme files.
+au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp,*.phpt,*.theme setf php
" PHP config
au BufNewFile,BufRead php.ini-* setf dosini
@@ -1716,6 +1730,9 @@ au BufNewFile,BufRead *.sdl,*.pr setf sdl
" sed
au BufNewFile,BufRead *.sed setf sed
+" SubRip
+au BufNewFile,BufRead *.srt setf srt
+
" svelte
au BufNewFile,BufRead *.svelte setf svelte
@@ -2101,6 +2118,9 @@ au BufNewFile,BufRead */.config/upstart/*.override setf upstart
" Vala
au BufNewFile,BufRead *.vala setf vala
+" VDF
+au BufNewFile,BufRead *.vdf setf vdf
+
" VDM
au BufRead,BufNewFile *.vdmpp,*.vpp setf vdmpp
au BufRead,BufNewFile *.vdmrt setf vdmrt
@@ -2575,6 +2595,9 @@ au BufNewFile,BufRead *.txt
\| setf text
\| endif
+" Blueprint markup files
+au BufNewFile,BufRead *.blp setf blueprint
+
if !exists('g:did_load_ftdetect')
" Use the filetype detect plugins. They may overrule any of the previously
" detected filetypes.
diff --git a/runtime/ftplugin/crontab.vim b/runtime/ftplugin/crontab.vim
new file mode 100644
index 0000000000..8dac007ccc
--- /dev/null
+++ b/runtime/ftplugin/crontab.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin
+" Language: crontab
+" Maintainer: Keith Smiley <keithbsmiley@gmail.com>
+" Last Change: 2022 Sep 11
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl commentstring<"
+
+setlocal commentstring=#\ %s
diff --git a/runtime/ftplugin/gitattributes.vim b/runtime/ftplugin/gitattributes.vim
new file mode 100644
index 0000000000..2025d009d2
--- /dev/null
+++ b/runtime/ftplugin/gitattributes.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: git attributes
+" Maintainer: ObserverOfTime <chronobserver@disroot.org>
+" Last Change: 2022 Sep 08
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:# commentstring=#\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/gitignore.vim b/runtime/ftplugin/gitignore.vim
new file mode 100644
index 0000000000..3502dd2717
--- /dev/null
+++ b/runtime/ftplugin/gitignore.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: git ignore
+" Maintainer: ObserverOfTime <chronobserver@disroot.org>
+" Last Change: 2022 Sep 10
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:# commentstring=#\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/jsonnet.vim b/runtime/ftplugin/jsonnet.vim
new file mode 100644
index 0000000000..1e621e1867
--- /dev/null
+++ b/runtime/ftplugin/jsonnet.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin
+" Language: Jsonnet
+" Maintainer: Cezary Drożak <cezary@drozak.net>
+" URL: https://github.com/google/vim-jsonnet
+" Last Change: 2022-09-08
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = "setlocal commentstring<"
diff --git a/runtime/ftplugin/lua.vim b/runtime/ftplugin/lua.vim
index 2604257594..aaa61f71d9 100644
--- a/runtime/ftplugin/lua.vim
+++ b/runtime/ftplugin/lua.vim
@@ -1,46 +1,46 @@
" Vim filetype plugin file.
-" Language: Lua
+" Language: Lua
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: Max Ischenko <mfi@ukr.net>
-" Last Change: 2021 Nov 15
+" Contributor: Dorai Sitaram <ds26@gte.com>
+" Last Change: 2022 Sep 05
-" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
finish
endif
-
-" Don't load another plugin for this buffer
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
-" Set 'formatoptions' to break comment lines but not other lines, and insert
-" the comment leader when hitting <CR> or using "o".
+setlocal comments=:--
+setlocal commentstring=--\ %s
setlocal formatoptions-=t formatoptions+=croql
-setlocal comments=:--
-setlocal commentstring=--%s
+let &l:define = '\<function\|\<local\%(\s\+function\)\='
+
setlocal suffixesadd=.lua
-let b:undo_ftplugin = "setlocal fo< com< cms< sua<"
+let b:undo_ftplugin = "setlocal cms< com< def< fo< sua<"
if exists("loaded_matchit") && !exists("b:match_words")
let b:match_ignorecase = 0
let b:match_words =
- \ '\<\%(do\|function\|if\)\>:' .
- \ '\<\%(return\|else\|elseif\)\>:' .
- \ '\<end\>,' .
- \ '\<repeat\>:\<until\>,' .
- \ '\%(--\)\=\[\(=*\)\[:]\1]'
- let b:undo_ftplugin .= " | unlet! b:match_words b:match_ignorecase"
+ \ '\<\%(do\|function\|if\)\>:' ..
+ \ '\<\%(return\|else\|elseif\)\>:' ..
+ \ '\<end\>,' ..
+ \ '\<repeat\>:\<until\>,' ..
+ \ '\%(--\)\=\[\(=*\)\[:]\1]'
+ let b:undo_ftplugin ..= " | unlet! b:match_words b:match_ignorecase"
endif
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
- let b:browsefilter = "Lua Source Files (*.lua)\t*.lua\n" .
- \ "All Files (*.*)\t*.*\n"
- let b:undo_ftplugin .= " | unlet! b:browsefilter"
+ let b:browsefilter = "Lua Source Files (*.lua)\t*.lua\n" ..
+ \ "All Files (*.*)\t*.*\n"
+ let b:undo_ftplugin ..= " | unlet! b:browsefilter"
endif
let &cpo = s:cpo_save
unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8 noet:
diff --git a/runtime/ftplugin/lynx.vim b/runtime/ftplugin/lynx.vim
new file mode 100644
index 0000000000..b76c69f0ae
--- /dev/null
+++ b/runtime/ftplugin/lynx.vim
@@ -0,0 +1,29 @@
+" Vim filetype plugin file
+" Language: Lynx Web Browser Configuration
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2022 Sep 09
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:#
+setlocal commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let b:undo_ftplugin = "setl cms< com< fo<"
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "Lynx Configuration Files (lynx.cfg .lynxrc)\tlynx.cfg;.lynxrc\n" ..
+ \ "All Files (*.*)\t*.*\n"
+ let b:undo_ftplugin ..= " | unlet! b:browsefilter"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8 noet:
diff --git a/runtime/ftplugin/sh.vim b/runtime/ftplugin/sh.vim
index 93a46f63e2..b6fdb8f3e2 100644
--- a/runtime/ftplugin/sh.vim
+++ b/runtime/ftplugin/sh.vim
@@ -1,12 +1,12 @@
" Vim filetype plugin file
-" Language: sh
-"
-" This runtime file is looking for a new maintainer.
-"
-" Former maintainer: Dan Sharp
-" Last Changed: 20 Jan 2009
-
-if exists("b:did_ftplugin") | finish | endif
+" Language: sh
+" Maintainer: Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainer: Dan Sharp
+" Last Change: 2022 Sep 07
+
+if exists("b:did_ftplugin")
+ finish
+endif
let b:did_ftplugin = 1
" Make sure the continuation lines below do not cause problems in
@@ -14,28 +14,35 @@ let b:did_ftplugin = 1
let s:save_cpo = &cpo
set cpo-=C
-setlocal commentstring=#%s
+setlocal comments=:#
+setlocal commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let b:undo_ftplugin = "setl com< cms< fo<"
" Shell: thanks to Johannes Zellner
-if exists("loaded_matchit")
- let s:sol = '\%(;\s*\|^\s*\)\@<=' " start of line
- let b:match_words =
- \ s:sol.'if\>:' . s:sol.'elif\>:' . s:sol.'else\>:' . s:sol. 'fi\>,' .
- \ s:sol.'\%(for\|while\)\>:' . s:sol. 'done\>,' .
- \ s:sol.'case\>:' . s:sol. 'esac\>'
+if exists("loaded_matchit") && !exists("b:match_words")
+ let b:match_ignorecase = 0
+ let s:sol = '\%(;\s*\|^\s*\)\@<=' " start of line
+ let b:match_words =
+ \ s:sol .. 'if\>:' .. s:sol.'elif\>:' .. s:sol.'else\>:' .. s:sol .. 'fi\>,' ..
+ \ s:sol .. '\%(for\|while\)\>:' .. s:sol .. 'done\>,' ..
+ \ s:sol .. 'case\>:' .. s:sol .. 'esac\>'
+ unlet s:sol
+ let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words"
endif
" Change the :browse e filter to primarily show shell-related files.
-if has("gui_win32")
- let b:browsefilter="Bourne Shell Scripts (*.sh)\t*.sh\n" .
- \ "Korn Shell Scripts (*.ksh)\t*.ksh\n" .
- \ "Bash Shell Scripts (*.bash)\t*.bash\n" .
- \ "All Files (*.*)\t*.*\n"
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = "Bourne Shell Scripts (*.sh)\t*.sh\n" ..
+ \ "Korn Shell Scripts (*.ksh)\t*.ksh\n" ..
+ \ "Bash Shell Scripts (*.bash)\t*.bash\n" ..
+ \ "All Files (*.*)\t*.*\n"
+ let b:undo_ftplugin ..= " | unlet! b:browsefilter"
endif
-" Undo the stuff we changed.
-let b:undo_ftplugin = "setlocal cms< | unlet! b:browsefilter b:match_words"
-
" Restore the saved compatibility options.
let &cpo = s:save_cpo
unlet s:save_cpo
+
+" vim: nowrap sw=2 sts=2 ts=8 noet:
diff --git a/runtime/ftplugin/vdf.vim b/runtime/ftplugin/vdf.vim
new file mode 100644
index 0000000000..973d7c0e48
--- /dev/null
+++ b/runtime/ftplugin/vdf.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin
+" Language: Valve Data Format
+" Maintainer: ObserverOfTime <chronobserver@disroot.org>
+" Last Change: 2022 Sep 15
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:// commentstring=//\ %s
+setl foldmethod=syntax
+
+let b:undo_ftplugin = 'setl com< cms< fdm<'
diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim
index 772899cb42..82a4b13f9f 100644
--- a/runtime/ftplugin/vim.vim
+++ b/runtime/ftplugin/vim.vim
@@ -1,7 +1,7 @@
" Vim filetype plugin
" Language: Vim
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2022 Aug 4
+" Last Change: 2022 Sep 09
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
diff --git a/runtime/ftplugin/zimbu.vim b/runtime/ftplugin/zimbu.vim
index e365ccf07e..cbe2f55572 100644
--- a/runtime/ftplugin/zimbu.vim
+++ b/runtime/ftplugin/zimbu.vim
@@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: Zimbu
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2021 Nov 12
+" Last Change: 2022 Sep 07
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@@ -28,7 +28,7 @@ endif
" Set 'comments' to format dashed lists in comments.
" And to keep Zudocu comment characters.
-setlocal comments=sO:#\ -,mO:#\ \ ,:#=,:#-,:#%,:#
+setlocal comments=sO:#\ -,mO:#\ \ ,exO:#/,s:/*,m:\ ,ex:*/,:#=,:#-,:#%,:#
setlocal errorformat^=%f\ line\ %l\ col\ %c:\ %m,ERROR:\ %m
diff --git a/runtime/ftplugin/zsh.vim b/runtime/ftplugin/zsh.vim
index 34410f1c62..0ca8077305 100644
--- a/runtime/ftplugin/zsh.vim
+++ b/runtime/ftplugin/zsh.vim
@@ -2,7 +2,7 @@
" Language: Zsh shell script
" Maintainer: Christian Brabandt <cb@256bit.org>
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2020-09-01
+" Latest Revision: 2021-04-03
" License: Vim (see :h license)
" Repository: https://github.com/chrisbra/vim-zsh
diff --git a/runtime/indent/json.vim b/runtime/indent/json.vim
index 09c7d7a85a..510f7e8f42 100644
--- a/runtime/indent/json.vim
+++ b/runtime/indent/json.vim
@@ -3,6 +3,7 @@
" Maintainer: Eli Parra <eli@elzr.com> https://github.com/elzr/vim-json
" Last Change: 2020 Aug 30
" https://github.com/jakar/vim-json/commit/20b650e22aa750c4ab6a66aa646bdd95d7cd548a#diff-e81fc111b2052e306d126bd9989f7b7c
+" 2022 Sep 07: b:undo_indent added by Doug Kearns
" Original Author: Rogerz Zhang <rogerz.zhang at gmail.com> http://github.com/rogerz/vim-json
" Acknowledgement: Based off of vim-javascript maintained by Darrick Wiebe
" http://www.vim.org/scripts/script.php?script_id=2765
@@ -22,6 +23,8 @@ setlocal nosmartindent
setlocal indentexpr=GetJSONIndent(v:lnum)
setlocal indentkeys=0{,0},0),0[,0],!^F,o,O,e
+let b:undo_indent = "setl inde< indk< si<"
+
" Only define the function once.
if exists("*GetJSONIndent")
finish
diff --git a/runtime/indent/lua.vim b/runtime/indent/lua.vim
index 604cd333c9..0d1f934a03 100644
--- a/runtime/indent/lua.vim
+++ b/runtime/indent/lua.vim
@@ -3,6 +3,7 @@
" Maintainer: Marcus Aurelius Farias <marcus.cf 'at' bol.com.br>
" First Author: Max Ischenko <mfi 'at' ukr.net>
" Last Change: 2017 Jun 13
+" 2022 Sep 07: b:undo_indent added by Doug Kearns
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@@ -18,6 +19,8 @@ setlocal indentkeys+=0=end,0=until
setlocal autoindent
+let b:undo_indent = "setlocal autoindent< indentexpr< indentkeys<"
+
" Only define the function once.
if exists("*GetLuaIndent")
finish
diff --git a/runtime/lua/man.lua b/runtime/lua/man.lua
index 82ed0305f7..88535321ac 100644
--- a/runtime/lua/man.lua
+++ b/runtime/lua/man.lua
@@ -1,5 +1,3 @@
-require('vim.compat')
-
local api, fn = vim.api, vim.fn
local find_arg = '-w'
@@ -23,13 +21,15 @@ local function man_system(cmd, silent)
local done = false
local exit_code
- local handle = vim.loop.spawn(cmd[1], {
+ local handle
+ handle = vim.loop.spawn(cmd[1], {
args = vim.list_slice(cmd, 2),
stdio = { nil, stdout, stderr },
}, function(code)
exit_code = code
stdout:close()
stderr:close()
+ handle:close()
done = true
end)
@@ -54,7 +54,7 @@ local function man_system(cmd, silent)
if not done then
if handle then
- vim.loop.shutdown(handle)
+ handle:close()
stdout:close()
stderr:close()
end
diff --git a/runtime/lua/vim/compat.lua b/runtime/lua/vim/compat.lua
deleted file mode 100644
index 2c9786d491..0000000000
--- a/runtime/lua/vim/compat.lua
+++ /dev/null
@@ -1,12 +0,0 @@
--- Lua 5.1 forward-compatibility layer.
--- For background see https://github.com/neovim/neovim/pull/9280
---
--- Reference the lua-compat-5.2 project for hints:
--- https://github.com/keplerproject/lua-compat-5.2/blob/c164c8f339b95451b572d6b4b4d11e944dc7169d/compat52/mstrict.lua
--- https://github.com/keplerproject/lua-compat-5.2/blob/c164c8f339b95451b572d6b4b4d11e944dc7169d/tests/test.lua
-
-local lua_version = _VERSION:sub(-3)
-
-if lua_version >= '5.2' then
- unpack = table.unpack -- luacheck: ignore 121 143
-end
diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua
index 4f7d8cccd5..98dbe0779b 100644
--- a/runtime/lua/vim/diagnostic.lua
+++ b/runtime/lua/vim/diagnostic.lua
@@ -727,6 +727,7 @@ function M.set(namespace, bufnr, diagnostics, opts)
vim.api.nvim_exec_autocmds('DiagnosticChanged', {
modeline = false,
buffer = bufnr,
+ data = { diagnostics = diagnostics },
})
end
@@ -1425,6 +1426,7 @@ function M.reset(namespace, bufnr)
vim.api.nvim_exec_autocmds('DiagnosticChanged', {
modeline = false,
buffer = iter_bufnr,
+ data = { diagnostics = {} },
})
end
end
diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua
index fc2bcdabd2..5f58da7a34 100644
--- a/runtime/lua/vim/filetype.lua
+++ b/runtime/lua/vim/filetype.lua
@@ -177,6 +177,7 @@ local extension = {
bbappend = 'bitbake',
bbclass = 'bitbake',
bl = 'blank',
+ blp = 'blueprint',
bsd = 'bsdl',
bsdl = 'bsdl',
bst = 'bst',
@@ -201,6 +202,7 @@ local extension = {
return require('vim.filetype.detect').change(bufnr)
end,
chs = 'chaskell',
+ chatito = 'chatito',
chopro = 'chordpro',
crd = 'chordpro',
crdpro = 'chordpro',
@@ -610,6 +612,7 @@ local extension = {
nse = 'lua',
rockspec = 'lua',
lua = 'lua',
+ lrc = 'lyrics',
m = function(path, bufnr)
return require('vim.filetype.detect').m(bufnr)
end,
@@ -746,6 +749,7 @@ local extension = {
php = 'php',
phpt = 'php',
phtml = 'php',
+ theme = 'php',
pike = 'pike',
pmod = 'pike',
rcp = 'pilrc',
@@ -957,6 +961,7 @@ local extension = {
srec = 'srec',
mot = 'srec',
['s19'] = 'srec',
+ srt = 'srt',
st = 'st',
imata = 'stata',
['do'] = 'stata',
@@ -1018,6 +1023,7 @@ local extension = {
dsm = 'vb',
ctl = 'vb',
vbs = 'vb',
+ vdf = 'vdf',
vdmpp = 'vdmpp',
vpp = 'vdmpp',
vdmrt = 'vdmrt',
@@ -1290,7 +1296,6 @@ local filename = {
WORKSPACE = 'bzl',
BUILD = 'bzl',
['cabal.project'] = 'cabalproject',
- [vim.env.HOME .. '/cabal.config'] = 'cabalconfig',
['cabal.config'] = 'cabalconfig',
calendar = 'calendar',
catalog = 'catalog',
@@ -1383,6 +1388,8 @@ local filename = {
['EDIT_DESCRIPTION'] = 'gitcommit',
['.gitconfig'] = 'gitconfig',
['.gitmodules'] = 'gitconfig',
+ ['.gitattributes'] = 'gitattributes',
+ ['.gitignore'] = 'gitignore',
['gitolite.conf'] = 'gitolite',
['git-rebase-todo'] = 'gitrebase',
gkrellmrc = 'gkrellmrc',
@@ -1696,6 +1703,7 @@ local pattern = {
['.*/meta%-.*/conf/.*%.conf'] = 'bitbake',
['bzr_log%..*'] = 'bzr',
['.*enlightenment/.*%.cfg'] = 'c',
+ ['${HOME}/cabal%.config'] = 'cabalconfig',
['cabal%.project%..*'] = starsetf('cabalproject'),
['.*/%.calendar/.*'] = starsetf('calendar'),
['.*/share/calendar/.*/calendar%..*'] = starsetf('calendar'),
@@ -1820,26 +1828,21 @@ local pattern = {
['.*/%.config/git/config'] = 'gitconfig',
['.*%.git/config%.worktree'] = 'gitconfig',
['.*%.git/worktrees/.*/config%.worktree'] = 'gitconfig',
- ['.*/git/config'] = function(path, bufnr)
- if vim.env.XDG_CONFIG_HOME and path:find(vim.env.XDG_CONFIG_HOME .. '/git/config') then
- return 'gitconfig'
- end
- end,
+ ['${XDG_CONFIG_HOME}/git/config'] = 'gitconfig',
+ ['.*%.git/info/attributes'] = 'gitattributes',
+ ['.*/etc/gitattributes'] = 'gitattributes',
+ ['.*/%.config/git/attributes'] = 'gitattributes',
+ ['${XDG_CONFIG_HOME}/git/attributes'] = 'gitattributes',
+ ['.*%.git/info/exclude'] = 'gitignore',
+ ['.*/%.config/git/ignore'] = 'gitignore',
+ ['${XDG_CONFIG_HOME}/git/ignore'] = 'gitignore',
['%.gitsendemail%.msg%.......'] = 'gitsendemail',
['gkrellmrc_.'] = 'gkrellmrc',
['.*/usr/.*/gnupg/options%.skel'] = 'gpg',
['.*/%.gnupg/options'] = 'gpg',
['.*/%.gnupg/gpg%.conf'] = 'gpg',
- ['.*/options'] = function(path, bufnr)
- if vim.env.GNUPGHOME and path:find(vim.env.GNUPGHOME .. '/options') then
- return 'gpg'
- end
- end,
- ['.*/gpg%.conf'] = function(path, bufnr)
- if vim.env.GNUPGHOME and path:find(vim.env.GNUPGHOME .. '/gpg%.conf') then
- return 'gpg'
- end
- end,
+ ['${GNUPGHOME}/options'] = 'gpg',
+ ['${GNUPGHOME}/gpg%.conf'] = 'gpg',
['.*/etc/group'] = 'group',
['.*/etc/gshadow'] = 'group',
['.*/etc/group%.edit'] = 'group',
@@ -1853,7 +1856,7 @@ local pattern = {
['.*/etc/grub%.conf'] = 'grub',
-- gtkrc* and .gtkrc*
['%.?gtkrc.*'] = starsetf('gtkrc'),
- [vim.env.VIMRUNTIME .. '/doc/.*%.txt'] = 'help',
+ ['${VIMRUNTIME}/doc/.*%.txt'] = 'help',
['hg%-editor%-.*%.txt'] = 'hgcommit',
['.*/etc/host%.conf'] = 'hostconf',
['.*/etc/hosts%.deny'] = 'hostsaccess',
@@ -2257,6 +2260,9 @@ end
--- Filename patterns can specify an optional priority to resolve cases when a
--- file path matches multiple patterns. Higher priorities are matched first.
--- When omitted, the priority defaults to 0.
+--- A pattern can contain environment variables of the form "${SOME_VAR}" that will
+--- be automatically expanded. If the environment variable is not set, the pattern
+--- won't be matched.
---
--- See $VIMRUNTIME/lua/vim/filetype.lua for more examples.
---
@@ -2285,6 +2291,8 @@ end
--- ['.*/etc/foo/.*'] = 'fooscript',
--- -- Using an optional priority
--- ['.*/etc/foo/.*%.conf'] = { 'dosini', { priority = 10 } },
+--- -- A pattern containing an environment variable
+--- ['${XDG_CONFIG_HOME}/foo/git'] = 'git',
--- ['README.(%a+)$'] = function(path, bufnr, ext)
--- if ext == 'md' then
--- return 'markdown'
@@ -2358,8 +2366,28 @@ local function dispatch(ft, path, bufnr, ...)
end
end
+-- Lookup table/cache for patterns that contain an environment variable pattern, e.g. ${SOME_VAR}.
+local expand_env_lookup = {}
+
---@private
local function match_pattern(name, path, tail, pat)
+ if expand_env_lookup[pat] == nil then
+ expand_env_lookup[pat] = pat:find('%${') ~= nil
+ end
+ if expand_env_lookup[pat] then
+ local return_early
+ pat = pat:gsub('%${(%S-)}', function(env)
+ -- If an environment variable is present in the pattern but not set, there is no match
+ if not vim.env[env] then
+ return_early = true
+ return nil
+ end
+ return vim.env[env]
+ end)
+ if return_early then
+ return false
+ end
+ end
-- If the pattern contains a / match against the full path, otherwise just the tail
local fullpat = '^' .. pat .. '$'
local matches
diff --git a/runtime/lua/vim/fs.lua b/runtime/lua/vim/fs.lua
index ce845eda15..7bd635d8b6 100644
--- a/runtime/lua/vim/fs.lua
+++ b/runtime/lua/vim/fs.lua
@@ -76,8 +76,11 @@ end
--- The search can be narrowed to find only files or or only directories by
--- specifying {type} to be "file" or "directory", respectively.
---
----@param names (string|table) Names of the files and directories to find. Must
---- be base names, paths and globs are not supported.
+---@param names (string|table|fun(name: string): boolean) Names of the files
+--- and directories to find.
+--- Must be base names, paths and globs are not supported.
+--- If a function it is called per file and dir within the
+--- traversed directories to test if they match.
---@param opts (table) Optional keyword arguments:
--- - path (string): Path to begin searching from. If
--- omitted, the current working directory is used.
@@ -98,7 +101,7 @@ end
function M.find(names, opts)
opts = opts or {}
vim.validate({
- names = { names, { 's', 't' } },
+ names = { names, { 's', 't', 'f' } },
path = { opts.path, 's', true },
upward = { opts.upward, 'b', true },
stop = { opts.stop, 's', true },
@@ -123,18 +126,31 @@ function M.find(names, opts)
end
if opts.upward then
- ---@private
- local function test(p)
- local t = {}
- for _, name in ipairs(names) do
- local f = p .. '/' .. name
- local stat = vim.loop.fs_stat(f)
- if stat and (not opts.type or opts.type == stat.type) then
- t[#t + 1] = f
+ local test
+
+ if type(names) == 'function' then
+ test = function(p)
+ local t = {}
+ for name, type in M.dir(p) do
+ if names(name) and (not opts.type or opts.type == type) then
+ table.insert(t, p .. '/' .. name)
+ end
end
+ return t
end
+ else
+ test = function(p)
+ local t = {}
+ for _, name in ipairs(names) do
+ local f = p .. '/' .. name
+ local stat = vim.loop.fs_stat(f)
+ if stat and (not opts.type or opts.type == stat.type) then
+ t[#t + 1] = f
+ end
+ end
- return t
+ return t
+ end
end
for _, match in ipairs(test(path)) do
@@ -162,17 +178,25 @@ function M.find(names, opts)
break
end
- for other, type in M.dir(dir) do
+ for other, type_ in M.dir(dir) do
local f = dir .. '/' .. other
- for _, name in ipairs(names) do
- if name == other and (not opts.type or opts.type == type) then
+ if type(names) == 'function' then
+ if names(other) and (not opts.type or opts.type == type_) then
if add(f) then
return matches
end
end
+ else
+ for _, name in ipairs(names) do
+ if name == other and (not opts.type or opts.type == type_) then
+ if add(f) then
+ return matches
+ end
+ end
+ end
end
- if type == 'directory' then
+ if type_ == 'directory' then
dirs[#dirs + 1] = f
end
end
diff --git a/runtime/lua/vim/keymap.lua b/runtime/lua/vim/keymap.lua
index 219de16b5c..af41794c53 100644
--- a/runtime/lua/vim/keymap.lua
+++ b/runtime/lua/vim/keymap.lua
@@ -36,17 +36,17 @@ local keymap = {}
---@param lhs string Left-hand side |{lhs}| of the mapping.
---@param rhs string|function Right-hand side |{rhs}| of the mapping. Can also be a Lua function.
--
----@param opts table A table of |:map-arguments|.
---- + Accepts options accepted by the {opts} parameter in |nvim_set_keymap()|,
---- with the following notable differences:
---- - replace_keycodes: Defaults to `true` if "expr" is `true`.
---- - noremap: Always overridden with the inverse of "remap" (see below).
---- + In addition to those options, the table accepts the following keys:
---- - buffer: (number or boolean) Add a mapping to the given buffer.
---- When `0` or `true`, use the current buffer.
---- - remap: (boolean) Make the mapping recursive.
---- This is the inverse of the "noremap" option from |nvim_set_keymap()|.
---- Defaults to `false`.
+---@param opts table|nil A table of |:map-arguments|.
+--- + Accepts options accepted by the {opts} parameter in |nvim_set_keymap()|,
+--- with the following notable differences:
+--- - replace_keycodes: Defaults to `true` if "expr" is `true`.
+--- - noremap: Always overridden with the inverse of "remap" (see below).
+--- + In addition to those options, the table accepts the following keys:
+--- - buffer: (number or boolean) Add a mapping to the given buffer.
+--- When `0` or `true`, use the current buffer.
+--- - remap: (boolean) Make the mapping recursive.
+--- This is the inverse of the "noremap" option from |nvim_set_keymap()|.
+--- Defaults to `false`.
---@see |nvim_set_keymap()|
function keymap.set(mode, lhs, rhs, opts)
vim.validate({
@@ -57,7 +57,6 @@ function keymap.set(mode, lhs, rhs, opts)
})
opts = vim.deepcopy(opts) or {}
- local is_rhs_luaref = type(rhs) == 'function'
mode = type(mode) == 'string' and { mode } or mode
if opts.expr and opts.replace_keycodes ~= false then
@@ -73,7 +72,7 @@ function keymap.set(mode, lhs, rhs, opts)
opts.remap = nil
end
- if is_rhs_luaref then
+ if type(rhs) == 'function' then
opts.callback = rhs
rhs = ''
end
@@ -99,9 +98,9 @@ end
---
--- vim.keymap.del({'n', 'i', 'v'}, '<leader>w', { buffer = 5 })
--- </pre>
----@param opts table A table of optional arguments:
---- - buffer: (number or boolean) Remove a mapping from the given buffer.
---- When "true" or 0, use the current buffer.
+---@param opts table|nil A table of optional arguments:
+--- - buffer: (number or boolean) Remove a mapping from the given buffer.
+--- When "true" or 0, use the current buffer.
---@see |vim.keymap.set()|
---
function keymap.del(modes, lhs, opts)
diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua
index 1dc1a045fd..22933d8143 100644
--- a/runtime/lua/vim/lsp.lua
+++ b/runtime/lua/vim/lsp.lua
@@ -1147,33 +1147,34 @@ function lsp.start_client(config)
local namespace = vim.lsp.diagnostic.get_namespace(client_id)
vim.diagnostic.reset(namespace, bufnr)
- end)
- client_ids[client_id] = nil
- end
- if vim.tbl_isempty(client_ids) then
- vim.schedule(function()
- unset_defaults(bufnr)
+ client_ids[client_id] = nil
+ if vim.tbl_isempty(client_ids) then
+ unset_defaults(bufnr)
+ end
end)
end
end
- local client = active_clients[client_id] and active_clients[client_id]
- or uninitialized_clients[client_id]
- active_clients[client_id] = nil
- uninitialized_clients[client_id] = nil
- -- Client can be absent if executable starts, but initialize fails
- -- init/attach won't have happened
- if client then
- changetracking.reset(client)
- end
- if code ~= 0 or (signal ~= 0 and signal ~= 15) then
- local msg =
- string.format('Client %s quit with exit code %s and signal %s', client_id, code, signal)
- vim.schedule(function()
+ -- Schedule the deletion of the client object so that it exists in the execution of LspDetach
+ -- autocommands
+ vim.schedule(function()
+ local client = active_clients[client_id] and active_clients[client_id]
+ or uninitialized_clients[client_id]
+ active_clients[client_id] = nil
+ uninitialized_clients[client_id] = nil
+
+ -- Client can be absent if executable starts, but initialize fails
+ -- init/attach won't have happened
+ if client then
+ changetracking.reset(client)
+ end
+ if code ~= 0 or (signal ~= 0 and signal ~= 15) then
+ local msg =
+ string.format('Client %s quit with exit code %s and signal %s', client_id, code, signal)
vim.notify(msg, vim.log.levels.WARN)
- end)
- end
+ end
+ end)
end
-- Start the RPC client.
@@ -1644,6 +1645,7 @@ function lsp.buf_attach_client(bufnr, client_id)
if vim.tbl_get(client.server_capabilities, 'textDocumentSync', 'openClose') then
client.notify('textDocument/didClose', params)
end
+ client.attached_buffers[bufnr] = nil
end)
util.buf_versions[bufnr] = nil
all_buffer_active_clients[bufnr] = nil
diff --git a/runtime/lua/vim/lsp/rpc.lua b/runtime/lua/vim/lsp/rpc.lua
index 70f838f34d..755c0ffc6f 100644
--- a/runtime/lua/vim/lsp/rpc.lua
+++ b/runtime/lua/vim/lsp/rpc.lua
@@ -405,8 +405,7 @@ function Client:handle_body(body)
{ status = status, result = result, err = err }
)
if status then
- if not (result or err) then
- -- TODO this can be a problem if `null` is sent for result. needs vim.NIL
+ if result == nil and err == nil then
error(
string.format(
'method %q: either a result or an error must be sent to the server in response',
@@ -635,7 +634,8 @@ local function connect(host, port)
end
--- Starts an LSP server process and create an LSP RPC client object to
---- interact with it. Communication with the server is currently limited to stdio.
+--- interact with it. Communication with the spawned process happens via stdio. For
+--- communication via TCP, spawn a process manually and use |vim.lsp.rpc.connect|
---
---@param cmd (string) Command to start the LSP server.
---@param cmd_args (table) List of additional string arguments to pass to {cmd}.
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
index 283099bbcf..1909dbd4d1 100644
--- a/runtime/lua/vim/lsp/util.lua
+++ b/runtime/lua/vim/lsp/util.lua
@@ -459,35 +459,52 @@ function M.apply_text_edits(text_edits, bufnr, offset_encoding)
text = split(text_edit.newText, '\n', true),
}
- -- Some LSP servers may return +1 range of the buffer content but nvim_buf_set_text can't accept it so we should fix it here.
local max = api.nvim_buf_line_count(bufnr)
- if max <= e.start_row or max <= e.end_row then
- local len = #(get_line(bufnr, max - 1) or '')
- if max <= e.start_row then
- e.start_row = max - 1
- e.start_col = len
- table.insert(e.text, 1, '')
- end
+ -- If the whole edit is after the lines in the buffer we can simply add the new text to the end
+ -- of the buffer.
+ if max <= e.start_row then
+ api.nvim_buf_set_lines(bufnr, max, max, false, e.text)
+ else
+ local last_line_len = #(get_line(bufnr, math.min(e.end_row, max - 1)) or '')
+ -- Some LSP servers may return +1 range of the buffer content but nvim_buf_set_text can't
+ -- accept it so we should fix it here.
if max <= e.end_row then
e.end_row = max - 1
- e.end_col = len
+ e.end_col = last_line_len
+ has_eol_text_edit = true
+ else
+ -- If the replacement is over the end of a line (i.e. e.end_col is out of bounds and the
+ -- replacement text ends with a newline We can likely assume that the replacement is assumed
+ -- to be meant to replace the newline with another newline and we need to make sure this
+ -- doens't add an extra empty line. E.g. when the last line to be replaced contains a '\r'
+ -- in the file some servers (clangd on windows) will include that character in the line
+ -- while nvim_buf_set_text doesn't count it as part of the line.
+ if
+ e.end_col > last_line_len
+ and #text_edit.newText > 0
+ and string.sub(text_edit.newText, -1) == '\n'
+ then
+ table.remove(e.text, #e.text)
+ end
end
- has_eol_text_edit = true
- end
- api.nvim_buf_set_text(bufnr, e.start_row, e.start_col, e.end_row, e.end_col, e.text)
-
- -- Fix cursor position.
- local row_count = (e.end_row - e.start_row) + 1
- if e.end_row < cursor.row then
- cursor.row = cursor.row + (#e.text - row_count)
- is_cursor_fixed = true
- elseif e.end_row == cursor.row and e.end_col <= cursor.col then
- cursor.row = cursor.row + (#e.text - row_count)
- cursor.col = #e.text[#e.text] + (cursor.col - e.end_col)
- if #e.text == 1 then
- cursor.col = cursor.col + e.start_col
+ -- Make sure we don't go out of bounds for e.end_col
+ e.end_col = math.min(last_line_len, e.end_col)
+
+ api.nvim_buf_set_text(bufnr, e.start_row, e.start_col, e.end_row, e.end_col, e.text)
+
+ -- Fix cursor position.
+ local row_count = (e.end_row - e.start_row) + 1
+ if e.end_row < cursor.row then
+ cursor.row = cursor.row + (#e.text - row_count)
+ is_cursor_fixed = true
+ elseif e.end_row == cursor.row and e.end_col <= cursor.col then
+ cursor.row = cursor.row + (#e.text - row_count)
+ cursor.col = #e.text[#e.text] + (cursor.col - e.end_col)
+ if #e.text == 1 then
+ cursor.col = cursor.col + e.start_col
+ end
+ is_cursor_fixed = true
end
- is_cursor_fixed = true
end
end
diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua
index 59cb669609..de5f7240aa 100644
--- a/runtime/lua/vim/shared.lua
+++ b/runtime/lua/vim/shared.lua
@@ -720,7 +720,7 @@ end
---
--- They mimic defaultdict in python.
---
---- If @p create is @c nil, this will create a defaulttable whose constructor function is
+--- If {create} is `nil`, this will create a defaulttable whose constructor function is
--- this function, effectively allowing to create nested tables on the fly:
---
--- <pre>
diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua
index d93c485dfe..04e12cbe0b 100644
--- a/runtime/lua/vim/treesitter.lua
+++ b/runtime/lua/vim/treesitter.lua
@@ -25,15 +25,15 @@ setmetatable(M, {
end,
})
---- Creates a new parser.
+--- Creates a new parser
---
---- It is not recommended to use this, use vim.treesitter.get_parser() instead.
+--- It is not recommended to use this; use |get_parser()| instead.
---
---@param bufnr string Buffer the parser will be tied to (0 for current buffer)
---@param lang string Language of the parser
----@param opts table|nil Options to pass to the created language tree
+---@param opts (table|nil) Options to pass to the created language tree
---
----@returns table Created parser object
+---@return LanguageTree |LanguageTree| object to use for parsing
function M._create_parser(bufnr, lang, opts)
language.require_language(lang)
if bufnr == 0 then
@@ -73,16 +73,15 @@ function M._create_parser(bufnr, lang, opts)
return self
end
---- Gets the parser for this bufnr / ft combination.
+--- Returns the parser for a specific buffer and filetype and attaches it to the buffer
---
---- If needed this will create the parser.
---- Unconditionally attach the provided callback
+--- If needed, this will create the parser.
---
----@param bufnr number|nil Buffer the parser should be tied to (default: current buffer)
----@param lang string |nil Filetype of this parser (default: buffer filetype)
----@param opts table|nil Options to pass to the created language tree
+---@param bufnr (number|nil) Buffer the parser should be tied to (default: current buffer)
+---@param lang (string|nil) Filetype of this parser (default: buffer filetype)
+---@param opts (table|nil) Options to pass to the created language tree
---
----@returns table Parser object
+---@return LanguageTree |LanguageTree| object to use for parsing
function M.get_parser(bufnr, lang, opts)
opts = opts or {}
@@ -102,11 +101,13 @@ function M.get_parser(bufnr, lang, opts)
return parsers[bufnr]
end
---- Gets a string parser
+--- Returns a string parser
---
----@param str The string to parse
----@param lang The language of this string
----@param opts Options to pass to the created language tree
+---@param str string Text to parse
+---@param lang string Language of this string
+---@param opts (table|nil) Options to pass to the created language tree
+---
+---@return LanguageTree |LanguageTree| object to use for parsing
function M.get_string_parser(str, lang, opts)
vim.validate({
str = { str, 'string' },
@@ -119,10 +120,10 @@ end
--- Determines whether a node is the ancestor of another
---
----@param dest table Possible ancestor
----@param source table Possible descendant node
+---@param dest userdata Possible ancestor |tsnode|
+---@param source userdata Possible descendant |tsnode|
---
----@returns (boolean) True if dest is an ancestor of source
+---@return boolean True if {dest} is an ancestor of {source}
function M.is_ancestor(dest, source)
if not (dest and source) then
return false
@@ -140,11 +141,11 @@ function M.is_ancestor(dest, source)
return false
end
---- Get the node's range or unpack a range table
+--- Returns the node's range or an unpacked range table
---
----@param node_or_range table
+---@param node_or_range (userdata|table) |tsnode| or table of positions
---
----@returns table start_row, start_col, end_row, end_col
+---@return table `{ start_row, start_col, end_row, end_col }`
function M.get_node_range(node_or_range)
if type(node_or_range) == 'table' then
return unpack(node_or_range)
@@ -153,13 +154,13 @@ function M.get_node_range(node_or_range)
end
end
----Determines whether (line, col) position is in node range
+--- Determines whether (line, col) position is in node range
---
----@param node table Node defining the range
+---@param node userdata |tsnode| defining the range
---@param line number Line (0-based)
---@param col number Column (0-based)
---
----@returns (boolean) True if the position is in node range
+---@return boolean True if the position is in node range
function M.is_in_node_range(node, line, col)
local start_line, start_col, end_line, end_col = M.get_node_range(node)
if line >= start_line and line <= end_line then
@@ -177,11 +178,12 @@ function M.is_in_node_range(node, line, col)
end
end
----Determines if a node contains a range
----@param node table
+--- Determines if a node contains a range
+---
+---@param node userdata |tsnode|
---@param range table
---
----@returns (boolean) True if the node contains the range
+---@return boolean True if the {node} contains the {range}
function M.node_contains(node, range)
local start_row, start_col, end_row, end_col = node:range()
local start_fits = start_row < range[1] or (start_row == range[1] and start_col <= range[2])
@@ -190,16 +192,16 @@ function M.node_contains(node, range)
return start_fits and end_fits
end
----Gets a list of captures for a given cursor position
----@param bufnr number Buffer number (0 for current buffer)
----@param row number Position row
----@param col number Position column
+--- Returns a list of highlight captures at the given position
+---
+--- Each capture is represented by a table containing the capture name as a string as
+--- well as a table of metadata (`priority`, `conceal`, ...; empty if none are defined).
---
---@param bufnr number Buffer number (0 for current buffer)
---@param row number Position row
---@param col number Position column
---
----@returns (table) Table of captures
+---@return table[] List of captures `{ capture = "capture name", metadata = { ... } }`
function M.get_captures_at_position(bufnr, row, col)
if bufnr == 0 then
bufnr = a.nvim_get_current_buf()
@@ -238,7 +240,7 @@ function M.get_captures_at_position(bufnr, row, col)
if M.is_in_node_range(node, row, col) then
local c = q._query.captures[capture] -- name of the capture in the query
if c ~= nil then
- table.insert(matches, { capture = c, priority = metadata.priority })
+ table.insert(matches, { capture = c, metadata = metadata })
end
end
end
@@ -246,11 +248,11 @@ function M.get_captures_at_position(bufnr, row, col)
return matches
end
----Gets a list of captures under the cursor
+--- Returns a list of highlight capture names under the cursor
---
----@param winnr number|nil Window handle or 0 for current window (default)
+---@param winnr (number|nil) Window handle or 0 for current window (default)
---
----@returns (table) Named node under the cursor
+---@return string[] List of capture names
function M.get_captures_at_cursor(winnr)
winnr = winnr or 0
local bufnr = a.nvim_win_get_buf(winnr)
@@ -267,7 +269,7 @@ function M.get_captures_at_cursor(winnr)
return captures
end
---- Gets the smallest named node at position
+--- Returns the smallest named node at the given position
---
---@param bufnr number Buffer number (0 for current buffer)
---@param row number Position row
@@ -275,7 +277,7 @@ end
---@param opts table Optional keyword arguments:
--- - ignore_injections boolean Ignore injected languages (default true)
---
----@returns (table) Named node under the cursor
+---@return userdata |tsnode| under the cursor
function M.get_node_at_position(bufnr, row, col, opts)
if bufnr == 0 then
bufnr = a.nvim_get_current_buf()
@@ -290,11 +292,11 @@ function M.get_node_at_position(bufnr, row, col, opts)
return root_lang_tree:named_node_for_range(ts_range, opts)
end
---- Gets the smallest named node under the cursor
+--- Returns the smallest named node under the cursor
---
----@param winnr number|nil Window handle or 0 for current window (default)
+---@param winnr (number|nil) Window handle or 0 for current window (default)
---
----@returns (string) Named node under the cursor
+---@return string Name of node under the cursor
function M.get_node_at_cursor(winnr)
winnr = winnr or 0
local bufnr = a.nvim_win_get_buf(winnr)
@@ -304,15 +306,14 @@ function M.get_node_at_cursor(winnr)
:type()
end
---- Start treesitter highlighting for a buffer
+--- Starts treesitter highlighting for a buffer
---
---- Can be used in an ftplugin or FileType autocommand
+--- Can be used in an ftplugin or FileType autocommand.
---
--- Note: By default, disables regex syntax highlighting, which may be required for some plugins.
--- In this case, add ``vim.bo.syntax = 'on'`` after the call to `start`.
---
--- Example:
----
--- <pre>
--- vim.api.nvim_create_autocmd( 'FileType', { pattern = 'tex',
--- callback = function(args)
@@ -322,8 +323,8 @@ end
--- })
--- </pre>
---
----@param bufnr number|nil Buffer to be highlighted (default: current buffer)
----@param lang string|nil Language of the parser (default: buffer filetype)
+---@param bufnr (number|nil) Buffer to be highlighted (default: current buffer)
+---@param lang (string|nil) Language of the parser (default: buffer filetype)
function M.start(bufnr, lang)
bufnr = bufnr or a.nvim_get_current_buf()
@@ -334,9 +335,9 @@ function M.start(bufnr, lang)
vim.b[bufnr].ts_highlight = true
end
----Stop treesitter highlighting for a buffer
+--- Stops treesitter highlighting for a buffer
---
----@param bufnr number|nil Buffer to stop highlighting (default: current buffer)
+---@param bufnr (number|nil) Buffer to stop highlighting (default: current buffer)
function M.stop(bufnr)
bufnr = bufnr or a.nvim_get_current_buf()
diff --git a/runtime/lua/vim/treesitter/health.lua b/runtime/lua/vim/treesitter/health.lua
index 3bd59ca282..4995c80a02 100644
--- a/runtime/lua/vim/treesitter/health.lua
+++ b/runtime/lua/vim/treesitter/health.lua
@@ -3,7 +3,7 @@ local ts = vim.treesitter
--- Lists the parsers currently installed
---
----@return A list of parsers
+---@return string[] list of parser files
function M.list_parsers()
return vim.api.nvim_get_runtime_file('parser/*', true)
end
diff --git a/runtime/lua/vim/treesitter/highlighter.lua b/runtime/lua/vim/treesitter/highlighter.lua
index 1e625eddb8..83a26aff13 100644
--- a/runtime/lua/vim/treesitter/highlighter.lua
+++ b/runtime/lua/vim/treesitter/highlighter.lua
@@ -2,6 +2,7 @@ local a = vim.api
local query = require('vim.treesitter.query')
-- support reload for quick experimentation
+---@class TSHighlighter
local TSHighlighter = rawget(vim.treesitter, 'TSHighlighter') or {}
TSHighlighter.__index = TSHighlighter
@@ -45,9 +46,10 @@ end
--- Creates a new highlighter using @param tree
---
----@param tree The language tree to use for highlighting
----@param opts Table used to configure the highlighter
---- - queries: Table to overwrite queries used by the highlighter
+---@param tree LanguageTree |LanguageTree| parser object to use for highlighting
+---@param opts (table|nil) Configuration of the highlighter:
+--- - queries table overwrite queries used by the highlighter
+---@return TSHighlighter Created highlighter object
function TSHighlighter.new(tree, opts)
local self = setmetatable({}, TSHighlighter)
@@ -149,8 +151,10 @@ function TSHighlighter:on_changedtree(changes)
end
--- Gets the query used for @param lang
----
----@param lang A language used by the highlighter.
+--
+---@private
+---@param lang string Language used by the highlighter.
+---@return Query
function TSHighlighter:get_query(lang)
if not self._queries[lang] then
self._queries[lang] = TSHighlighterQuery.new(lang)
diff --git a/runtime/lua/vim/treesitter/language.lua b/runtime/lua/vim/treesitter/language.lua
index d14b825603..c92d63b8c4 100644
--- a/runtime/lua/vim/treesitter/language.lua
+++ b/runtime/lua/vim/treesitter/language.lua
@@ -2,14 +2,15 @@ local a = vim.api
local M = {}
---- Asserts that the provided language is installed, and optionally provide a path for the parser
+--- Asserts that a parser for the language {lang} is installed.
---
---- Parsers are searched in the `parser` runtime directory.
+--- Parsers are searched in the `parser` runtime directory, or the provided {path}
---
----@param lang string The language the parser should parse
----@param path string|nil Optional path the parser is located at
----@param silent boolean|nil Don't throw an error if language not found
----@param symbol_name string|nil Internal symbol name for the language to load
+---@param lang string Language the parser should parse
+---@param path (string|nil) Optional path the parser is located at
+---@param silent (boolean|nil) Don't throw an error if language not found
+---@param symbol_name (string|nil) Internal symbol name for the language to load
+---@return boolean If the specified language is installed
function M.require_language(lang, path, silent, symbol_name)
if vim._ts_has_language(lang) then
return true
@@ -42,7 +43,8 @@ end
---
--- Inspecting provides some useful information on the language like node names, ...
---
----@param lang The language.
+---@param lang string Language
+---@return table
function M.inspect_language(lang)
M.require_language(lang)
return vim._ts_inspect_language(lang)
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua
index 70317a9f94..e9d70c4204 100644
--- a/runtime/lua/vim/treesitter/languagetree.lua
+++ b/runtime/lua/vim/treesitter/languagetree.lua
@@ -2,19 +2,35 @@ local a = vim.api
local query = require('vim.treesitter.query')
local language = require('vim.treesitter.language')
+---@class LanguageTree
+---@field _callbacks function[] Callback handlers
+---@field _children LanguageTree[] Injected languages
+---@field _injection_query table Queries defining injected languages
+---@field _opts table Options
+---@field _parser userdata Parser for language
+---@field _regions table List of regions this tree should manage and parse
+---@field _lang string Language name
+---@field _regions table
+---@field _source (number|string) Buffer or string to parse
+---@field _trees userdata[] Reference to parsed |tstree| (one for each language)
+---@field _valid boolean If the parsed tree is valid
+
local LanguageTree = {}
LanguageTree.__index = LanguageTree
---- Represents a single treesitter parser for a language.
---- The language can contain child languages with in its range,
---- hence the tree.
+--- A |LanguageTree| holds the treesitter parser for a given language {lang} used
+--- to parse a buffer. As the buffer may contain injected languages, the LanguageTree
+--- needs to store parsers for these child languages as well (which in turn may contain
+--- child languages themselves, hence the name).
---
----@param source Can be a bufnr or a string of text to parse
----@param lang The language this tree represents
----@param opts Options table
----@param opts.injections A table of language to injection query strings.
---- This is useful for overriding the built-in runtime file
---- searching for the injection language query per language.
+---@param source (number|string) Buffer or a string of text to parse
+---@param lang string Root language this tree represents
+---@param opts (table|nil) Optional keyword arguments:
+--- - injections table Mapping language to injection query strings.
+--- This is useful for overriding the built-in
+--- runtime file searching for the injection language
+--- query per language.
+---@return LanguageTree |LanguageTree| parser object
function LanguageTree.new(source, lang, opts)
language.require_language(lang)
opts = opts or {}
@@ -94,6 +110,9 @@ end
--- for the language this tree represents.
--- This will run the injection query for this language to
--- determine if any child languages should be created.
+---
+---@return userdata[] Table of parsed |tstree|
+---@return table Change list
function LanguageTree:parse()
if self._valid then
return self._trees
@@ -167,10 +186,10 @@ function LanguageTree:parse()
return self._trees, changes
end
---- Invokes the callback for each LanguageTree and it's children recursively
+--- Invokes the callback for each |LanguageTree| and its children recursively
---
----@param fn The function to invoke. This is invoked with arguments (tree: LanguageTree, lang: string)
----@param include_self Whether to include the invoking tree in the results.
+---@param fn function(tree: LanguageTree, lang: string)
+---@param include_self boolean Whether to include the invoking tree in the results
function LanguageTree:for_each_child(fn, include_self)
if include_self then
fn(self, self._lang)
@@ -181,12 +200,11 @@ function LanguageTree:for_each_child(fn, include_self)
end
end
---- Invokes the callback for each treesitter trees recursively.
+--- Invokes the callback for each |LanguageTree| recursively.
---
---- Note, this includes the invoking language tree's trees as well.
+--- Note: This includes the invoking tree's child trees as well.
---
----@param fn The callback to invoke. The callback is invoked with arguments
---- (tree: TSTree, languageTree: LanguageTree)
+---@param fn function(tree: TSTree, languageTree: LanguageTree)
function LanguageTree:for_each_tree(fn)
for _, tree in ipairs(self._trees) do
fn(tree, self)
@@ -197,11 +215,13 @@ function LanguageTree:for_each_tree(fn)
end
end
---- Adds a child language to this tree.
+--- Adds a child language to this |LanguageTree|.
---
--- If the language already exists as a child, it will first be removed.
---
----@param lang The language to add.
+---@private
+---@param lang string Language to add.
+---@return LanguageTree Injected |LanguageTree|
function LanguageTree:add_child(lang)
if self._children[lang] then
self:remove_child(lang)
@@ -215,9 +235,10 @@ function LanguageTree:add_child(lang)
return self._children[lang]
end
---- Removes a child language from this tree.
+--- Removes a child language from this |LanguageTree|.
---
----@param lang The language to remove.
+---@private
+---@param lang string Language to remove.
function LanguageTree:remove_child(lang)
local child = self._children[lang]
@@ -229,12 +250,11 @@ function LanguageTree:remove_child(lang)
end
end
---- Destroys this language tree and all its children.
+--- Destroys this |LanguageTree| and all its children.
---
--- Any cleanup logic should be performed here.
---
---- Note:
---- This DOES NOT remove this tree from a parent. Instead,
+--- Note: This DOES NOT remove this tree from a parent. Instead,
--- `remove_child` must be called on the parent to remove it.
function LanguageTree:destroy()
-- Cleanup here
@@ -243,23 +263,24 @@ function LanguageTree:destroy()
end
end
---- Sets the included regions that should be parsed by this parser.
+--- Sets the included regions that should be parsed by this |LanguageTree|.
--- A region is a set of nodes and/or ranges that will be parsed in the same context.
---
---- For example, `{ { node1 }, { node2} }` is two separate regions.
---- This will be parsed by the parser in two different contexts... thus resulting
+--- For example, `{ { node1 }, { node2} }` contains two separate regions.
+--- They will be parsed by the parser in two different contexts, thus resulting
--- in two separate trees.
---
---- `{ { node1, node2 } }` is a single region consisting of two nodes.
---- This will be parsed by the parser in a single context... thus resulting
+--- On the other hand, `{ { node1, node2 } }` is a single region consisting of
+--- two nodes. This will be parsed by the parser in a single context, thus resulting
--- in a single tree.
---
--- This allows for embedded languages to be parsed together across different
--- nodes, which is useful for templating languages like ERB and EJS.
---
---- Note, this call invalidates the tree and requires it to be parsed again.
+--- Note: This call invalidates the tree and requires it to be parsed again.
---
----@param regions (table) list of regions this tree should manage and parse.
+---@private
+---@param regions table List of regions this tree should manage and parse.
function LanguageTree:set_included_regions(regions)
-- Transform the tables from 4 element long to 6 element long (with byte offset)
for _, region in ipairs(regions) do
@@ -288,7 +309,7 @@ function LanguageTree:set_included_regions(regions)
-- Trees are no longer valid now that we have changed regions.
-- TODO(vigoux,steelsojka): Look into doing this smarter so we can use some of the
-- old trees for incremental parsing. Currently, this only
- -- effects injected languages.
+ -- affects injected languages.
self._trees = {}
self:invalidate()
end
@@ -493,8 +514,8 @@ function LanguageTree:_on_detach(...)
self:_do_callback('detach', ...)
end
---- Registers callbacks for the parser.
----@param cbs table An |nvim_buf_attach()|-like table argument with the following keys :
+--- Registers callbacks for the |LanguageTree|.
+---@param cbs table An |nvim_buf_attach()|-like table argument with the following handlers:
--- - `on_bytes` : see |nvim_buf_attach()|, but this will be called _after_ the parsers callback.
--- - `on_changedtree` : a callback that will be called every time the tree has syntactical changes.
--- It will only be passed one argument, which is a table of the ranges (as node ranges) that
@@ -536,9 +557,10 @@ local function tree_contains(tree, range)
return start_fits and end_fits
end
---- Determines whether {range} is contained in this language tree
+--- Determines whether {range} is contained in the |LanguageTree|.
---
----@param range A range, that is a `{ start_line, start_col, end_line, end_col }` table.
+---@param range table `{ start_line, start_col, end_line, end_col }`
+---@return boolean
function LanguageTree:contains(range)
for _, tree in pairs(self._trees) do
if tree_contains(tree, range) then
@@ -549,11 +571,12 @@ function LanguageTree:contains(range)
return false
end
---- Gets the tree that contains {range}
+--- Gets the tree that contains {range}.
---
----@param range table A text range
----@param opts table Options table
----@param opts.ignore_injections boolean (default true) Ignore injected languages.
+---@param range table `{ start_line, start_col, end_line, end_col }`
+---@param opts table|nil Optional keyword arguments:
+--- - ignore_injections boolean Ignore injected languages (default true)
+---@return userdata|nil Contained |tstree|
function LanguageTree:tree_for_range(range, opts)
opts = opts or {}
local ignore = vim.F.if_nil(opts.ignore_injections, true)
@@ -577,19 +600,21 @@ function LanguageTree:tree_for_range(range, opts)
return nil
end
---- Gets the smallest named node that contains {range}
+--- Gets the smallest named node that contains {range}.
---
----@param range table A text range
----@param opts table Options table
----@param opts.ignore_injections boolean (default true) Ignore injected languages.
+---@param range table `{ start_line, start_col, end_line, end_col }`
+---@param opts table|nil Optional keyword arguments:
+--- - ignore_injections boolean Ignore injected languages (default true)
+---@return userdata|nil Found |tsnode|
function LanguageTree:named_node_for_range(range, opts)
local tree = self:tree_for_range(range, opts)
return tree:root():named_descendant_for_range(unpack(range))
end
---- Gets the appropriate language that contains {range}
+--- Gets the appropriate language that contains {range}.
---
----@param range A text range, see |LanguageTree:contains|
+---@param range table `{ start_line, start_col, end_line, end_col }`
+---@return LanguageTree Managing {range}
function LanguageTree:language_for_range(range)
for _, child in pairs(self._children) do
if child:contains(range) then
diff --git a/runtime/lua/vim/treesitter/query.lua b/runtime/lua/vim/treesitter/query.lua
index 2f6227af8e..d1dc29969b 100644
--- a/runtime/lua/vim/treesitter/query.lua
+++ b/runtime/lua/vim/treesitter/query.lua
@@ -3,6 +3,11 @@ local language = require('vim.treesitter.language')
-- query: pattern matching on trees
-- predicate matching is implemented in lua
+--
+---@class Query
+---@field captures string[] List of captures used in query
+---@field info table Contains used queries, predicates, directives
+---@field query userdata Parsed query
local Query = {}
Query.__index = Query
@@ -34,11 +39,24 @@ local function safe_read(filename, read_quantifier)
return content
end
+---@private
+--- Adds {ilang} to {base_langs}, only if {ilang} is different than {lang}
+---
+---@return boolean true If lang == ilang
+local function add_included_lang(base_langs, lang, ilang)
+ if lang == ilang then
+ return true
+ end
+ table.insert(base_langs, ilang)
+ return false
+end
+
--- Gets the list of files used to make up a query
---
----@param lang The language
----@param query_name The name of the query to load
----@param is_included Internal parameter, most of the time left as `nil`
+---@param lang string Language to get query for
+---@param query_name string Name of the query to load (e.g., 'highlights')
+---@param is_included (boolean|nil) Internal parameter, most of the time left as `nil`
+---@return string[] query_files List of files to load for given query and language
function M.get_query_files(lang, query_name, is_included)
local query_path = string.format('queries/%s/%s.scm', lang, query_name)
local lang_files = dedupe_files(a.nvim_get_runtime_file(query_path, true))
@@ -84,10 +102,14 @@ function M.get_query_files(lang, query_name, is_included)
if is_optional then
if not is_included then
- table.insert(base_langs, incllang:sub(2, #incllang - 1))
+ if add_included_lang(base_langs, lang, incllang:sub(2, #incllang - 1)) then
+ extension = true
+ end
end
else
- table.insert(base_langs, incllang)
+ if add_included_lang(base_langs, lang, incllang) then
+ extension = true
+ end
end
end
elseif modeline:match(EXTENDS_FORMAT) then
@@ -134,24 +156,24 @@ local explicit_queries = setmetatable({}, {
end,
})
---- Sets the runtime query {query_name} for {lang}
+--- Sets the runtime query named {query_name} for {lang}
---
--- This allows users to override any runtime files and/or configuration
--- set by plugins.
---
----@param lang string: The language to use for the query
----@param query_name string: The name of the query (i.e. "highlights")
----@param text string: The query text (unparsed).
+---@param lang string Language to use for the query
+---@param query_name string Name of the query (e.g., 'highlights')
+---@param text string Query text (unparsed).
function M.set_query(lang, query_name, text)
explicit_queries[lang][query_name] = M.parse_query(lang, text)
end
--- Returns the runtime query {query_name} for {lang}.
---
----@param lang The language to use for the query
----@param query_name The name of the query (i.e. "highlights")
+---@param lang string Language to use for the query
+---@param query_name string Name of the query (e.g. 'highlights')
---
----@return The corresponding query, parsed.
+---@return Query Parsed query
function M.get_query(lang, query_name)
if explicit_queries[lang][query_name] then
return explicit_queries[lang][query_name]
@@ -182,10 +204,10 @@ end)
--- -` info.captures` also points to `captures`.
--- - `info.patterns` contains information about predicates.
---
----@param lang string The language
----@param query string A string containing the query (s-expr syntax)
+---@param lang string Language to use for the query
+---@param query string Query in s-expr syntax
---
----@returns The query
+---@return Query Parsed query
function M.parse_query(lang, query)
language.require_language(lang)
local cached = query_cache[lang][query]
@@ -203,10 +225,11 @@ end
--- Gets the text corresponding to a given node
---
----@param node table The node
----@param source table The buffer or string from which the node is extracted
----@param opts table Optional parameters.
---- - concat: (boolean default true) Concatenate result in a string
+---@param node userdata |tsnode|
+---@param source (number|string) Buffer or string from which the {node} is extracted
+---@param opts (table|nil) Optional parameters.
+--- - concat: (boolean) Concatenate result in a string (default true)
+---@return (string[]|string)
function M.get_node_text(node, source, opts)
opts = opts or {}
local concat = vim.F.if_nil(opts.concat, true)
@@ -394,9 +417,8 @@ local directive_handlers = {
--- Adds a new predicate to be used in queries
---
----@param name the name of the predicate, without leading #
----@param handler the handler function to be used
---- signature will be (match, pattern, bufnr, predicate)
+---@param name string Name of the predicate, without leading #
+---@param handler function(match:string, pattern:string, bufnr:number, predicate:function)
function M.add_predicate(name, handler, force)
if predicate_handlers[name] and not force then
error(string.format('Overriding %s', name))
@@ -412,9 +434,8 @@ end
--- can set node level data by using the capture id on the
--- metadata table `metadata[capture_id].key = value`
---
----@param name the name of the directive, without leading #
----@param handler the handler function to be used
---- signature will be (match, pattern, bufnr, predicate, metadata)
+---@param name string Name of the directive, without leading #
+---@param handler function(match:string, pattern:string, bufnr:number, predicate:function, metadata:table)
function M.add_directive(name, handler, force)
if directive_handlers[name] and not force then
error(string.format('Overriding %s', name))
@@ -424,12 +445,13 @@ function M.add_directive(name, handler, force)
end
--- Lists the currently available directives to use in queries.
----@return The list of supported directives.
+---@return string[] List of supported directives.
function M.list_directives()
return vim.tbl_keys(directive_handlers)
end
----@return The list of supported predicates.
+--- Lists the currently available predicates to use in queries.
+---@return string[] List of supported predicates.
function M.list_predicates()
return vim.tbl_keys(predicate_handlers)
end
@@ -516,17 +538,16 @@ end
--- Iterate over all captures from all matches inside {node}
---
---- {source} is needed if the query contains predicates, then the caller
+--- {source} is needed if the query contains predicates; then the caller
--- must ensure to use a freshly parsed tree consistent with the current
--- text of the buffer (if relevant). {start_row} and {end_row} can be used to limit
--- matches inside a row range (this is typically used with root node
---- as the node, i e to get syntax highlight matches in the current
---- viewport). When omitted the start and end row values are used from the given node.
+--- as the {node}, i.e., to get syntax highlight matches in the current
+--- viewport). When omitted, the {start} and {end} row values are used from the given node.
---
---- The iterator returns three values, a numeric id identifying the capture,
+--- The iterator returns three values: a numeric id identifying the capture,
--- the captured node, and metadata from any directives processing the match.
--- The following example shows how to get captures by name:
----
--- <pre>
--- for id, node, metadata in query:iter_captures(tree:root(), bufnr, first, last) do
--- local name = query.captures[id] -- name of the capture in the query
@@ -537,13 +558,14 @@ end
--- end
--- </pre>
---
----@param node The node under which the search will occur
----@param source The source buffer or string to extract text from
----@param start The starting line of the search
----@param stop The stopping line of the search (end-exclusive)
+---@param node userdata |tsnode| under which the search will occur
+---@param source (number|string) Source buffer or string to extract text from
+---@param start number Starting line for the search
+---@param stop number Stopping line for the search (end-exclusive)
---
----@returns The matching capture id
----@returns The captured node
+---@return number capture Matching capture id
+---@return table capture_node Capture for {node}
+---@return table metadata for the {capture}
function Query:iter_captures(node, source, start, stop)
if type(source) == 'number' and source == 0 then
source = vim.api.nvim_get_current_buf()
@@ -573,14 +595,13 @@ end
--- Iterates the matches of self on a given range.
---
---- Iterate over all matches within a node. The arguments are the same as
+--- Iterate over all matches within a {node}. The arguments are the same as
--- for |query:iter_captures()| but the iterated values are different:
--- an (1-based) index of the pattern in the query, a table mapping
--- capture indices to nodes, and metadata from any directives processing the match.
---- If the query has more than one pattern the capture table might be sparse,
+--- If the query has more than one pattern, the capture table might be sparse
--- and e.g. `pairs()` method should be used over `ipairs`.
---- Here an example iterating over all captures in every match:
----
+--- Here is an example iterating over all captures in every match:
--- <pre>
--- for pattern, match, metadata in cquery:iter_matches(tree:root(), bufnr, first, last) do
--- for id, node in pairs(match) do
@@ -594,13 +615,14 @@ end
--- end
--- </pre>
---
----@param node The node under which the search will occur
----@param source The source buffer or string to search
----@param start The starting line of the search
----@param stop The stopping line of the search (end-exclusive)
+---@param node userdata |tsnode| under which the search will occur
+---@param source (number|string) Source buffer or string to search
+---@param start number Starting line for the search
+---@param stop number Stopping line for the search (end-exclusive)
---
----@returns The matching pattern id
----@returns The matching match
+---@return number pattern id
+---@return table match
+---@return table metadata
function Query:iter_matches(node, source, start, stop)
if type(source) == 'number' and source == 0 then
source = vim.api.nvim_get_current_buf()
diff --git a/runtime/optwin.vim b/runtime/optwin.vim
index 02cf573ea3..9e2a616f80 100644
--- a/runtime/optwin.vim
+++ b/runtime/optwin.vim
@@ -1,7 +1,7 @@
" These commands create the option window.
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2022 Apr 07
+" Last Change: 2022 Sep 11
" If there already is an option window, jump to that one.
let buf = bufnr('option-window')
diff --git a/runtime/queries/vim/highlights.scm b/runtime/queries/vim/highlights.scm
index 1bbaebef01..3d1729b2cd 100644
--- a/runtime/queries/vim/highlights.scm
+++ b/runtime/queries/vim/highlights.scm
@@ -40,7 +40,7 @@
(parameters (identifier) @parameter)
(default_parameter (identifier) @parameter)
-[ (bang) (spread) (at) ] @punctuation.special
+[ (bang) (spread) ] @punctuation.special
[ (no_option) (inv_option) (default_option) (option_name) ] @variable.builtin
[
@@ -92,6 +92,12 @@
"topleft"
"botright"
(unknown_command_name)
+ "edit"
+ "enew"
+ "find"
+ "ex"
+ "visual"
+ "view"
] @keyword
(map_statement cmd: _ @keyword)
(command_name) @function.macro
@@ -125,11 +131,6 @@
"<unique>"
] @constant.builtin
-(hl_attribute
- key: _ @property
- val: _ @constant)
-
-(hl_group) @variable
(augroup_name) @namespace
(au_event) @constant
@@ -137,6 +138,12 @@
;; Highlight command
+(hl_attribute
+ key: _ @property
+ val: _ @constant)
+
+(hl_group) @type
+
(highlight_statement [
"default"
"link"
@@ -145,12 +152,19 @@
;; Command command
+(command) @string
+
(command_attribute
name: _ @property
val: (behavior
name: _ @constant
val: (identifier)? @function)?)
+;; Edit command
+(plus_plus_opt
+ val: _? @constant) @property
+(plus_cmd "+" @property) @property
+
;; Runtime command
(runtime_statement (where) @keyword.operator)
@@ -161,12 +175,10 @@
;; Literals
-(string_literal) @string
-(string_literal) @spell
+(string_literal) @string @spell
(integer_literal) @number
(float_literal) @float
-(comment) @comment
-(comment) @spell
+(comment) @comment @spell
(pattern) @string.special
(pattern_multi) @string.regex
(filename) @string
diff --git a/runtime/syntax/gdscript.vim b/runtime/syntax/gdscript.vim
index e9295a411d..48af153513 100644
--- a/runtime/syntax/gdscript.vim
+++ b/runtime/syntax/gdscript.vim
@@ -18,8 +18,6 @@ syn keyword gdscriptRepeat for while break continue
syn keyword gdscriptOperator is as not and or in
-syn match gdscriptClass "\v<\u\w+>"
-syn match gdscriptConstant "\<[_A-Z]\+[0-9_A-Z]*\>"
syn match gdscriptBlockStart ":\s*$"
syn keyword gdscriptKeyword null self owner parent tool
@@ -33,14 +31,16 @@ syn keyword gdscriptStatement onready
syn keyword gdscriptStatement class_name extends
syn keyword gdscriptType void bool int float String contained
+syn match gdscriptType ":\s*\zs\h\w*" contained
+syn match gdscriptType "->\s*\zs\h\w*" contained
syn keyword gdscriptStatement var nextgroup=gdscriptTypeDecl skipwhite
syn keyword gdscriptStatement const nextgroup=gdscriptTypeDecl skipwhite
-syn match gdscriptTypeDecl "\h\w*\s*:\s*\h\w*" contains=gdscriptOperator,gdscriptType,gdscriptClass contained skipwhite
-syn match gdscriptTypeDecl "->\s*\h\w*" contains=gdscriptOperator,gdscriptType,gdscriptClass skipwhite
+syn match gdscriptTypeDecl "\h\w*\s*:\s*\h\w*" contains=gdscriptType contained skipwhite
+syn match gdscriptTypeDecl "->\s*\h\w*" contains=gdscriptType skipwhite
syn keyword gdscriptStatement export nextgroup=gdscriptExportTypeDecl skipwhite
-syn match gdscriptExportTypeDecl "(.\{-}[,)]" contains=gdscriptOperator,gdscriptType,gdscriptClass contained skipwhite
+syn match gdscriptExportTypeDecl "(.\{-}[,)]" contains=gdscriptOperator,gdscriptType contained skipwhite
syn keyword gdscriptStatement setget nextgroup=gdscriptSetGet,gdscriptSetGetSeparator skipwhite
syn match gdscriptSetGet "\h\w*" nextgroup=gdscriptSetGetSeparator display contained skipwhite
@@ -84,8 +84,6 @@ hi def link gdscriptOperator Operator
hi def link gdscriptRepeat Repeat
hi def link gdscriptSetGet Function
hi def link gdscriptFunctionName Function
-hi def link gdscriptClass Type
-hi def link gdscriptConstant Constant
hi def link gdscriptBuiltinStruct Typedef
hi def link gdscriptComment Comment
hi def link gdscriptString String
diff --git a/runtime/syntax/gitattributes.vim b/runtime/syntax/gitattributes.vim
new file mode 100644
index 0000000000..b6d997f45d
--- /dev/null
+++ b/runtime/syntax/gitattributes.vim
@@ -0,0 +1,63 @@
+" Vim syntax file
+" Language: git attributes
+" Maintainer: ObserverOfTime <chronobserver@disroot.org>
+" Filenames: .gitattributes, *.git/info/attributes
+" Last Change: 2022 Sep 09
+
+if exists('b:current_syntax')
+ finish
+endif
+
+let s:cpo_save = &cpoptions
+set cpoptions&vim
+
+" Comment
+syn keyword gitattributesTodo contained TODO FIXME XXX
+syn match gitattributesComment /^\s*#.*/ contains=gitattributesTodo
+
+" Pattern
+syn match gitattributesPattern /^\s*#\@!\(".\+"\|\S\+\)/ skipwhite
+ \ nextgroup=gitattributesAttrPrefixed,gitattributesAttrAssigned skipwhite
+ \ contains=gitattributesGlob,gitattributesRange,gitattributesSeparator
+syn match gitattributesGlob /\\\@1<![?*]/ contained
+syn match gitattributesRange /\\\@1<!\[.\{-}\]/ contained
+syn match gitattributesSeparator '/' contained
+
+" Attribute
+syn match gitattributesAttrPrefixed /[!-]\?[A-Za-z0-9_.][-A-Za-z0-9_.]*/
+ \ transparent contained skipwhite
+ \ nextgroup=gitattributesAttrPrefixed,gitattributesAttrAssigned
+ \ contains=gitattributesPrefix,gitattributesName
+syn match gitattributesAttrAssigned /[A-Za-z0-9_.][-A-Za-z0-9_.]*=\S\+/
+ \ transparent contained skipwhite
+ \ nextgroup=gitattributesAttrPrefixed,gitattributesAttrAssigned
+ \ contains=gitattributesName,gitattributesAssign,gitattributesBoolean,gitattributesString
+syn match gitattributesName /[A-Za-z0-9_.][-A-Za-z0-9_.]*/
+ \ contained nextgroup=gitattributesAssign
+syn match gitattributesPrefix /[!-]/ contained
+ \ nextgroup=gitAttributesName
+syn match gitattributesAssign '=' contained
+ \ nextgroup=gitattributesBoolean,gitattributesString
+syn match gitattributesString /=\@1<=\S\+/ contained
+syn keyword gitattributesBoolean true false contained
+
+" Macro
+syn match gitattributesMacro /^\s*\[attr\]\s*\S\+/
+ \ nextgroup=gitattributesAttribute skipwhite
+
+hi def link gitattributesAssign Operator
+hi def link gitattributesBoolean Boolean
+hi def link gitattributesComment Comment
+hi def link gitattributesGlob Special
+hi def link gitattributesMacro Define
+hi def link gitattributesName Identifier
+hi def link gitattributesPrefix SpecialChar
+hi def link gitattributesRange Special
+hi def link gitattributesSeparator Delimiter
+hi def link gitattributesString String
+hi def link gitattributesTodo Todo
+
+let b:current_syntax = 'gitattributes'
+
+let &cpoptions = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/syntax/gitignore.vim b/runtime/syntax/gitignore.vim
new file mode 100644
index 0000000000..8e6d098acd
--- /dev/null
+++ b/runtime/syntax/gitignore.vim
@@ -0,0 +1,29 @@
+" Vim syntax file
+" Language: git ignore
+" Maintainer: ObserverOfTime <chronobserver@disroot.org>
+" Filenames: .gitignore, *.git/info/exclude
+" Last Change: 2022 Sep 10
+
+if exists('b:current_syntax')
+ finish
+endif
+
+" Comment
+syn keyword gitignoreTodo contained TODO FIXME XXX
+syn match gitignoreComment /^#.*/ contains=gitignoreTodo
+
+" Pattern
+syn match gitignorePattern /^#\@!.*$/ contains=gitignoreNegation,gitignoreGlob,gitignoreRange,gitignoreSeparator
+syn match gitignoreNegation /^!/ contained
+syn match gitignoreGlob /\\\@1<![?*]/ contained
+syn match gitignoreRange /\\\@1<!\[.\{-}\]/ contained
+syn match gitignoreSeparator '/' contained
+
+hi def link gitignoreComment Comment
+hi def link gitignoreGlob Special
+hi def link gitignoreNegation SpecialChar
+hi def link gitignoreRange Special
+hi def link gitignoreSeparator Delimiter
+hi def link gitignoreTodo Todo
+
+let b:current_syntax = 'gitignore'
diff --git a/runtime/syntax/lua.vim b/runtime/syntax/lua.vim
index b398e2e5c6..9c5a490582 100644
--- a/runtime/syntax/lua.vim
+++ b/runtime/syntax/lua.vim
@@ -1,11 +1,12 @@
" Vim syntax file
-" Language: Lua 4.0, Lua 5.0, Lua 5.1 and Lua 5.2
-" Maintainer: Marcus Aurelius Farias <masserahguard-lua 'at' yahoo com>
-" First Author: Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
-" Last Change: 2022 Mar 31
-" Options: lua_version = 4 or 5
-" lua_subversion = 0 (4.0, 5.0) or 1 (5.1) or 2 (5.2)
-" default 5.2
+" Language: Lua 4.0, Lua 5.0, Lua 5.1, Lua 5.2 and Lua 5.3
+" Maintainer: Marcus Aurelius Farias <masserahguard-lua 'at' yahoo com>
+" First Author: Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
+" Last Change: 2022 Sep 07
+" Options: lua_version = 4 or 5
+" lua_subversion = 0 (for 4.0 or 5.0)
+" or 1, 2, 3 (for 5.1, 5.2 or 5.3)
+" the default is 5.3
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -16,70 +17,78 @@ let s:cpo_save = &cpo
set cpo&vim
if !exists("lua_version")
- " Default is lua 5.2
+ " Default is lua 5.3
let lua_version = 5
- let lua_subversion = 2
+ let lua_subversion = 3
elseif !exists("lua_subversion")
- " lua_version exists, but lua_subversion doesn't. So, set it to 0
+ " lua_version exists, but lua_subversion doesn't. In this case set it to 0
let lua_subversion = 0
endif
syn case match
" syncing method
-syn sync minlines=100
+syn sync minlines=1000
-" Comments
-syn keyword luaTodo contained TODO FIXME XXX
-syn match luaComment "--.*$" contains=luaTodo,@Spell
-if lua_version == 5 && lua_subversion == 0
- syn region luaComment matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
- syn region luaInnerComment contained transparent start="\[\[" end="\]\]"
-elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
- " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
- syn region luaComment matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
+if lua_version >= 5
+ syn keyword luaMetaMethod __add __sub __mul __div __pow __unm __concat
+ syn keyword luaMetaMethod __eq __lt __le
+ syn keyword luaMetaMethod __index __newindex __call
+ syn keyword luaMetaMethod __metatable __mode __gc __tostring
endif
-" First line may start with #!
-syn match luaComment "\%^#!.*"
+if lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
+ syn keyword luaMetaMethod __mod __len
+endif
+
+if lua_version > 5 || (lua_version == 5 && lua_subversion >= 2)
+ syn keyword luaMetaMethod __pairs
+endif
+
+if lua_version > 5 || (lua_version == 5 && lua_subversion >= 3)
+ syn keyword luaMetaMethod __idiv __name
+ syn keyword luaMetaMethod __band __bor __bxor __bnot __shl __shr
+endif
+
+if lua_version > 5 || (lua_version == 5 && lua_subversion >= 4)
+ syn keyword luaMetaMethod __close
+endif
" catch errors caused by wrong parenthesis and wrong curly brackets or
" keywords placed outside their respective blocks
-syn region luaParen transparent start='(' end=')' contains=ALLBUT,luaParenError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
-syn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaBraceError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
+syn region luaParen transparent start='(' end=')' contains=TOP,luaParenError
syn match luaParenError ")"
-syn match luaBraceError "}"
+syn match luaError "}"
syn match luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>"
-" function ... end
-syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
+" Function declaration
+syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=TOP
-" if ... then
-syn region luaIfThen transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaIn nextgroup=luaThenEnd skipwhite skipempty
+" else
+syn keyword luaCondElse matchgroup=luaCond contained containedin=luaCondEnd else
" then ... end
-syn region luaThenEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaThenEnd,luaIn
+syn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=TOP
" elseif ... then
-syn region luaElseifThen contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
+syn region luaCondElseif contained containedin=luaCondEnd transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=TOP
-" else
-syn keyword luaElse contained else
+" if ... then
+syn region luaCondStart transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=TOP nextgroup=luaCondEnd skipwhite skipempty
" do ... end
-syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
-
+syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=TOP
" repeat ... until
-syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
+syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=TOP
" while ... do
-syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaIn nextgroup=luaBlock skipwhite skipempty
+syn region luaWhile transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=TOP nextgroup=luaBlock skipwhite skipempty
" for ... do and for ... in ... do
-syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd nextgroup=luaBlock skipwhite skipempty
+syn region luaFor transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=TOP nextgroup=luaBlock skipwhite skipempty
-syn keyword luaIn contained in
+syn keyword luaFor contained containedin=luaFor in
" other keywords
syn keyword luaStatement return local break
@@ -87,35 +96,59 @@ if lua_version > 5 || (lua_version == 5 && lua_subversion >= 2)
syn keyword luaStatement goto
syn match luaLabel "::\I\i*::"
endif
+
+" operators
syn keyword luaOperator and or not
+
+if (lua_version == 5 && lua_subversion >= 3) || lua_version > 5
+ syn match luaSymbolOperator "[#<>=~^&|*/%+-]\|\.\{2,3}"
+elseif lua_version == 5 && (lua_subversion == 1 || lua_subversion == 2)
+ syn match luaSymbolOperator "[#<>=~^*/%+-]\|\.\{2,3}"
+else
+ syn match luaSymbolOperator "[<>=~^*/+-]\|\.\{2,3}"
+endif
+
+" comments
+syn keyword luaTodo contained TODO FIXME XXX
+syn match luaComment "--.*$" contains=luaTodo,@Spell
+if lua_version == 5 && lua_subversion == 0
+ syn region luaComment matchgroup=luaCommentDelimiter start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
+ syn region luaInnerComment contained transparent start="\[\[" end="\]\]"
+elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
+ " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
+ syn region luaComment matchgroup=luaCommentDelimiter start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
+endif
+
+" first line may start with #!
+syn match luaComment "\%^#!.*"
+
syn keyword luaConstant nil
if lua_version > 4
syn keyword luaConstant true false
endif
-" Strings
-if lua_version < 5
- syn match luaSpecial contained "\\[\\abfnrtv\'\"]\|\\[[:digit:]]\{,3}"
-elseif lua_version == 5
+" strings
+syn match luaSpecial contained #\\[\\abfnrtv'"[\]]\|\\[[:digit:]]\{,3}#
+if lua_version == 5
if lua_subversion == 0
- syn match luaSpecial contained #\\[\\abfnrtv'"[\]]\|\\[[:digit:]]\{,3}#
- syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
+ syn region luaString2 matchgroup=luaStringDelimiter start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
else
- if lua_subversion == 1
- syn match luaSpecial contained #\\[\\abfnrtv'"]\|\\[[:digit:]]\{,3}#
- else " Lua 5.2
- syn match luaSpecial contained #\\[\\abfnrtvz'"]\|\\x[[:xdigit:]]\{2}\|\\[[:digit:]]\{,3}#
+ if lua_subversion >= 2
+ syn match luaSpecial contained #\\z\|\\x[[:xdigit:]]\{2}#
+ endif
+ if lua_subversion >= 3
+ syn match luaSpecial contained #\\u{[[:xdigit:]]\+}#
endif
- syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
+ syn region luaString2 matchgroup=luaStringDelimiter start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
endif
endif
-syn region luaString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell
-syn region luaString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell
+syn region luaString matchgroup=luaStringDelimiter start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell
+syn region luaString matchgroup=luaStringDelimiter start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell
" integer number
syn match luaNumber "\<\d\+\>"
" floating point number, with dot, optional exponent
-syn match luaNumber "\<\d\+\.\d*\%([eE][-+]\=\d\+\)\=\>"
+syn match luaNumber "\<\d\+\.\d*\%([eE][-+]\=\d\+\)\="
" floating point number, starting with a dot, optional exponent
syn match luaNumber "\.\d\+\%([eE][-+]\=\d\+\)\=\>"
" floating point number, without dot, with exponent
@@ -130,8 +163,15 @@ if lua_version >= 5
endif
endif
+" tables
+syn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=TOP,luaStatement
+
+" methods
+syntax match luaFunc ":\@<=\k\+"
+
+" built-in functions
syn keyword luaFunc assert collectgarbage dofile error next
-syn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
+syn keyword luaFunc print rawget rawset self tonumber tostring type _VERSION
if lua_version == 4
syn keyword luaFunc _ALERT _ERRORMESSAGE gcinfo
@@ -168,30 +208,26 @@ elseif lua_version == 5
syn match luaFunc /\<package\.loaded\>/
syn match luaFunc /\<package\.loadlib\>/
syn match luaFunc /\<package\.path\>/
+ syn match luaFunc /\<package\.preload\>/
if lua_subversion == 1
syn keyword luaFunc getfenv setfenv
syn keyword luaFunc loadstring module unpack
syn match luaFunc /\<package\.loaders\>/
- syn match luaFunc /\<package\.preload\>/
syn match luaFunc /\<package\.seeall\>/
- elseif lua_subversion == 2
+ elseif lua_subversion >= 2
syn keyword luaFunc _ENV rawlen
syn match luaFunc /\<package\.config\>/
syn match luaFunc /\<package\.preload\>/
syn match luaFunc /\<package\.searchers\>/
syn match luaFunc /\<package\.searchpath\>/
- syn match luaFunc /\<bit32\.arshift\>/
- syn match luaFunc /\<bit32\.band\>/
- syn match luaFunc /\<bit32\.bnot\>/
- syn match luaFunc /\<bit32\.bor\>/
- syn match luaFunc /\<bit32\.btest\>/
- syn match luaFunc /\<bit32\.bxor\>/
- syn match luaFunc /\<bit32\.extract\>/
- syn match luaFunc /\<bit32\.lrotate\>/
- syn match luaFunc /\<bit32\.lshift\>/
- syn match luaFunc /\<bit32\.replace\>/
- syn match luaFunc /\<bit32\.rrotate\>/
- syn match luaFunc /\<bit32\.rshift\>/
+ endif
+
+ if lua_subversion >= 3
+ syn match luaFunc /\<coroutine\.isyieldable\>/
+ endif
+ if lua_subversion >= 4
+ syn keyword luaFunc warn
+ syn match luaFunc /\<coroutine\.close\>/
endif
syn match luaFunc /\<coroutine\.running\>/
endif
@@ -200,6 +236,7 @@ elseif lua_version == 5
syn match luaFunc /\<coroutine\.status\>/
syn match luaFunc /\<coroutine\.wrap\>/
syn match luaFunc /\<coroutine\.yield\>/
+
syn match luaFunc /\<string\.byte\>/
syn match luaFunc /\<string\.char\>/
syn match luaFunc /\<string\.dump\>/
@@ -218,6 +255,18 @@ elseif lua_version == 5
syn match luaFunc /\<string\.match\>/
syn match luaFunc /\<string\.reverse\>/
endif
+ if lua_subversion >= 3
+ syn match luaFunc /\<string\.pack\>/
+ syn match luaFunc /\<string\.packsize\>/
+ syn match luaFunc /\<string\.unpack\>/
+ syn match luaFunc /\<utf8\.char\>/
+ syn match luaFunc /\<utf8\.charpattern\>/
+ syn match luaFunc /\<utf8\.codes\>/
+ syn match luaFunc /\<utf8\.codepoint\>/
+ syn match luaFunc /\<utf8\.len\>/
+ syn match luaFunc /\<utf8\.offset\>/
+ endif
+
if lua_subversion == 0
syn match luaFunc /\<table\.getn\>/
syn match luaFunc /\<table\.setn\>/
@@ -225,19 +274,40 @@ elseif lua_version == 5
syn match luaFunc /\<table\.foreachi\>/
elseif lua_subversion == 1
syn match luaFunc /\<table\.maxn\>/
- elseif lua_subversion == 2
+ elseif lua_subversion >= 2
syn match luaFunc /\<table\.pack\>/
syn match luaFunc /\<table\.unpack\>/
+ if lua_subversion >= 3
+ syn match luaFunc /\<table\.move\>/
+ endif
endif
syn match luaFunc /\<table\.concat\>/
- syn match luaFunc /\<table\.sort\>/
syn match luaFunc /\<table\.insert\>/
+ syn match luaFunc /\<table\.sort\>/
syn match luaFunc /\<table\.remove\>/
+
+ if lua_subversion == 2
+ syn match luaFunc /\<bit32\.arshift\>/
+ syn match luaFunc /\<bit32\.band\>/
+ syn match luaFunc /\<bit32\.bnot\>/
+ syn match luaFunc /\<bit32\.bor\>/
+ syn match luaFunc /\<bit32\.btest\>/
+ syn match luaFunc /\<bit32\.bxor\>/
+ syn match luaFunc /\<bit32\.extract\>/
+ syn match luaFunc /\<bit32\.lrotate\>/
+ syn match luaFunc /\<bit32\.lshift\>/
+ syn match luaFunc /\<bit32\.replace\>/
+ syn match luaFunc /\<bit32\.rrotate\>/
+ syn match luaFunc /\<bit32\.rshift\>/
+ endif
+
syn match luaFunc /\<math\.abs\>/
syn match luaFunc /\<math\.acos\>/
syn match luaFunc /\<math\.asin\>/
syn match luaFunc /\<math\.atan\>/
- syn match luaFunc /\<math\.atan2\>/
+ if lua_subversion < 3
+ syn match luaFunc /\<math\.atan2\>/
+ endif
syn match luaFunc /\<math\.ceil\>/
syn match luaFunc /\<math\.sin\>/
syn match luaFunc /\<math\.cos\>/
@@ -251,25 +321,36 @@ elseif lua_version == 5
if lua_subversion == 0
syn match luaFunc /\<math\.mod\>/
syn match luaFunc /\<math\.log10\>/
- else
- if lua_subversion == 1
- syn match luaFunc /\<math\.log10\>/
- endif
+ elseif lua_subversion == 1
+ syn match luaFunc /\<math\.log10\>/
+ endif
+ if lua_subversion >= 1
syn match luaFunc /\<math\.huge\>/
syn match luaFunc /\<math\.fmod\>/
syn match luaFunc /\<math\.modf\>/
- syn match luaFunc /\<math\.cosh\>/
- syn match luaFunc /\<math\.sinh\>/
- syn match luaFunc /\<math\.tanh\>/
+ if lua_subversion == 1 || lua_subversion == 2
+ syn match luaFunc /\<math\.cosh\>/
+ syn match luaFunc /\<math\.sinh\>/
+ syn match luaFunc /\<math\.tanh\>/
+ endif
endif
- syn match luaFunc /\<math\.pow\>/
syn match luaFunc /\<math\.rad\>/
syn match luaFunc /\<math\.sqrt\>/
- syn match luaFunc /\<math\.frexp\>/
- syn match luaFunc /\<math\.ldexp\>/
+ if lua_subversion < 3
+ syn match luaFunc /\<math\.pow\>/
+ syn match luaFunc /\<math\.frexp\>/
+ syn match luaFunc /\<math\.ldexp\>/
+ else
+ syn match luaFunc /\<math\.maxinteger\>/
+ syn match luaFunc /\<math\.mininteger\>/
+ syn match luaFunc /\<math\.tointeger\>/
+ syn match luaFunc /\<math\.type\>/
+ syn match luaFunc /\<math\.ult\>/
+ endif
syn match luaFunc /\<math\.random\>/
syn match luaFunc /\<math\.randomseed\>/
syn match luaFunc /\<math\.pi\>/
+
syn match luaFunc /\<io\.close\>/
syn match luaFunc /\<io\.flush\>/
syn match luaFunc /\<io\.input\>/
@@ -284,6 +365,7 @@ elseif lua_version == 5
syn match luaFunc /\<io\.tmpfile\>/
syn match luaFunc /\<io\.type\>/
syn match luaFunc /\<io\.write\>/
+
syn match luaFunc /\<os\.clock\>/
syn match luaFunc /\<os\.date\>/
syn match luaFunc /\<os\.difftime\>/
@@ -295,6 +377,7 @@ elseif lua_version == 5
syn match luaFunc /\<os\.setlocale\>/
syn match luaFunc /\<os\.time\>/
syn match luaFunc /\<os\.tmpname\>/
+
syn match luaFunc /\<debug\.debug\>/
syn match luaFunc /\<debug\.gethook\>/
syn match luaFunc /\<debug\.getinfo\>/
@@ -307,53 +390,49 @@ elseif lua_version == 5
if lua_subversion == 1
syn match luaFunc /\<debug\.getfenv\>/
syn match luaFunc /\<debug\.setfenv\>/
+ endif
+ if lua_subversion >= 1
syn match luaFunc /\<debug\.getmetatable\>/
syn match luaFunc /\<debug\.setmetatable\>/
syn match luaFunc /\<debug\.getregistry\>/
- elseif lua_subversion == 2
- syn match luaFunc /\<debug\.getmetatable\>/
- syn match luaFunc /\<debug\.setmetatable\>/
- syn match luaFunc /\<debug\.getregistry\>/
- syn match luaFunc /\<debug\.getuservalue\>/
- syn match luaFunc /\<debug\.setuservalue\>/
- syn match luaFunc /\<debug\.upvalueid\>/
- syn match luaFunc /\<debug\.upvaluejoin\>/
- endif
- if lua_subversion >= 3
- "https://www.lua.org/manual/5.3/manual.html#6.5
- syn match luaFunc /\<utf8\.char\>/
- syn match luaFunc /\<utf8\.charpattern\>/
- syn match luaFunc /\<utf8\.codes\>/
- syn match luaFunc /\<utf8\.codepoint\>/
- syn match luaFunc /\<utf8\.len\>/
- syn match luaFunc /\<utf8\.offset\>/
+ if lua_subversion >= 2
+ syn match luaFunc /\<debug\.getuservalue\>/
+ syn match luaFunc /\<debug\.setuservalue\>/
+ syn match luaFunc /\<debug\.upvalueid\>/
+ syn match luaFunc /\<debug\.upvaluejoin\>/
+ endif
+ if lua_subversion >= 4
+ syn match luaFunc /\<debug.setcstacklimit\>/
+ endif
endif
endif
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
-hi def link luaStatement Statement
-hi def link luaRepeat Repeat
-hi def link luaFor Repeat
-hi def link luaString String
-hi def link luaString2 String
-hi def link luaNumber Number
-hi def link luaOperator Operator
-hi def link luaIn Operator
-hi def link luaConstant Constant
-hi def link luaCond Conditional
-hi def link luaElse Conditional
-hi def link luaFunction Function
-hi def link luaComment Comment
-hi def link luaTodo Todo
-hi def link luaTable Structure
-hi def link luaError Error
-hi def link luaParenError Error
-hi def link luaBraceError Error
-hi def link luaSpecial SpecialChar
-hi def link luaFunc Identifier
-hi def link luaLabel Label
+hi def link luaStatement Statement
+hi def link luaRepeat Repeat
+hi def link luaFor Repeat
+hi def link luaString String
+hi def link luaString2 String
+hi def link luaStringDelimiter luaString
+hi def link luaNumber Number
+hi def link luaOperator Operator
+hi def link luaSymbolOperator luaOperator
+hi def link luaConstant Constant
+hi def link luaCond Conditional
+hi def link luaCondElse Conditional
+hi def link luaFunction Function
+hi def link luaMetaMethod Function
+hi def link luaComment Comment
+hi def link luaCommentDelimiter luaComment
+hi def link luaTodo Todo
+hi def link luaTable Structure
+hi def link luaError Error
+hi def link luaParenError Error
+hi def link luaSpecial SpecialChar
+hi def link luaFunc Identifier
+hi def link luaLabel Label
let b:current_syntax = "lua"
diff --git a/runtime/syntax/lyrics.vim b/runtime/syntax/lyrics.vim
new file mode 100644
index 0000000000..42a288b51b
--- /dev/null
+++ b/runtime/syntax/lyrics.vim
@@ -0,0 +1,43 @@
+" Vim syntax file
+" Language: LyRiCs
+" Maintainer: ObserverOfTime <chronobserver@disroot.org>
+" Filenames: *.lrc
+" Last Change: 2022 Sep 18
+
+if exists('b:current_syntax')
+ finish
+endif
+
+let s:cpo_save = &cpoptions
+set cpoptions&vim
+
+syn case ignore
+
+" Errors
+syn match lrcError /^.\+$/
+
+" ID tags
+syn match lrcTag /^\s*\[\a\+:.\+\]\s*$/ contains=lrcTagName,lrcTagValue
+syn match lrcTagName contained nextgroup=lrcTagValue
+ \ /\[\zs\(al\|ar\|au\|by\|encoding\|la\|id\|length\|offset\|re\|ti\|ve\)\ze:/
+syn match lrcTagValue /:\zs.\+\ze\]/ contained
+
+" Lyrics
+syn match lrcLyricTime /^\s*\[\d\d:\d\d\.\d\d\]/
+ \ contains=lrcNumber nextgroup=lrcLyricLine
+syn match lrcLyricLine /.*$/ contained contains=lrcWordTime,@Spell
+syn match lrcWordTime /<\d\d:\d\d\.\d\d>/ contained contains=lrcNumber,@NoSpell
+syn match lrcNumber /[+-]\=\d\+/ contained
+
+hi def link lrcLyricTime Label
+hi def link lrcNumber Number
+hi def link lrcTag PreProc
+hi def link lrcTagName Identifier
+hi def link lrcTagValue String
+hi def link lrcWordTime Special
+hi def link lrcError Error
+
+let b:current_syntax = 'lyrics'
+
+let &cpoptions = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/syntax/srt.vim b/runtime/syntax/srt.vim
new file mode 100644
index 0000000000..12fb264d8e
--- /dev/null
+++ b/runtime/syntax/srt.vim
@@ -0,0 +1,62 @@
+" Vim syntax file
+" Language: SubRip
+" Maintainer: ObserverOfTime <chronobserver@disroot.org>
+" Filenames: *.srt
+" Last Change: 2022 Sep 12
+
+if exists('b:current_syntax')
+ finish
+endif
+
+syn spell toplevel
+
+syn cluster srtSpecial contains=srtBold,srtItalics,srtStrikethrough,srtUnderline,srtFont,srtTag,srtEscape
+
+" Number
+syn match srtNumber /^\d\+$/ contains=@NoSpell
+
+" Range
+syn match srtRange /\d\d:\d\d:\d\d[,.]\d\d\d --> \d\d:\d\d:\d\d[,.]\d\d\d/ skipwhite contains=srtArrow,srtTime nextgroup=srtCoordinates
+syn match srtArrow /-->/ contained contains=@NoSpell
+syn match srtTime /\d\d:\d\d:\d\d[,.]\d\d\d/ contained contains=@NoSpell
+syn match srtCoordinates /X1:\d\+ X2:\d\+ Y1:\d\+ Y2:\d\+/ contained contains=@NoSpell
+
+" Bold
+syn region srtBold matchgroup=srtFormat start=+<b>+ end=+</b>+ contains=@srtSpecial
+syn region srtBold matchgroup=srtFormat start=+{b}+ end=+{/b}+ contains=@srtSpecial
+
+" Italics
+syn region srtItalics matchgroup=srtFormat start=+<i>+ end=+</i>+ contains=@srtSpecial
+syn region srtItalics matchgroup=srtFormat start=+{i}+ end=+{/i}+ contains=@srtSpecial
+
+" Strikethrough
+syn region srtStrikethrough matchgroup=srtFormat start=+<s>+ end=+</s>+ contains=@srtSpecial
+syn region srtStrikethrough matchgroup=srtFormat start=+{s}+ end=+{/s}+ contains=@srtSpecial
+
+" Underline
+syn region srtUnderline matchgroup=srtFormat start=+<u>+ end=+</u>+ contains=@srtSpecial
+syn region srtUnderline matchgroup=srtFormat start=+{u}+ end=+{/u}+ contains=@srtSpecial
+
+" Font
+syn region srtFont matchgroup=srtFormat start=+<font[^>]\{-}>+ end=+</font>+ contains=@srtSpecial
+
+" ASS tags
+syn match srtTag /{\\[^}]\{1,}}/ contains=@NoSpell
+
+" Special characters
+syn match srtEscape /\\[nNh]/ contains=@NoSpell
+
+hi def link srtArrow Delimiter
+hi def link srtCoordinates Label
+hi def link srtEscape SpecialChar
+hi def link srtFormat Special
+hi def link srtNumber Number
+hi def link srtTag PreProc
+hi def link srtTime String
+
+hi srtBold cterm=bold gui=bold
+hi srtItalics cterm=italic gui=italic
+hi srtStrikethrough cterm=strikethrough gui=strikethrough
+hi srtUnderline cterm=underline gui=underline
+
+let b:current_syntax = 'srt'
diff --git a/runtime/syntax/vdf.vim b/runtime/syntax/vdf.vim
new file mode 100644
index 0000000000..c690b706ea
--- /dev/null
+++ b/runtime/syntax/vdf.vim
@@ -0,0 +1,54 @@
+" Vim syntax file
+" Language: Valve Data Format
+" Maintainer: ObserverOfTime <chronobserver@disroot.org>
+" Filenames: *.vdf
+" Last Change: 2022 Sep 15
+
+if exists('b:current_syntax')
+ finish
+endif
+
+let s:cpo_save = &cpoptions
+set cpoptions&vim
+
+" Comment
+syn keyword vdfTodo contained TODO FIXME XXX
+syn match vdfComment +//.*+ contains=vdfTodo
+
+" Macro
+syn match vdfMacro /^\s*#.*/
+
+" Tag
+syn region vdfTag start=/"/ skip=/\\"/ end=/"/
+ \ nextgroup=vdfValue skipwhite oneline
+
+" Section
+syn region vdfSection matchgroup=vdfBrace
+ \ start=/{/ end=/}/ transparent fold
+ \ contains=vdfTag,vdfSection,vdfComment,vdfConditional
+
+" Conditional
+syn match vdfConditional /\[\$\w\{1,1021}\]/ nextgroup=vdfTag
+
+" Value
+syn region vdfValue start=/"/ skip=/\\"/ end=/"/
+ \ oneline contained contains=vdfVariable,vdfNumber,vdfEscape
+syn region vdfVariable start=/%/ skip=/\\%/ end=/%/ oneline contained
+syn match vdfEscape /\\[nt\\"]/ contained
+syn match vdfNumber /"-\?\d\+"/ contained
+
+hi def link vdfBrace Delimiter
+hi def link vdfComment Comment
+hi def link vdfConditional Constant
+hi def link vdfEscape SpecialChar
+hi def link vdfMacro Macro
+hi def link vdfNumber Number
+hi def link vdfTag Keyword
+hi def link vdfTodo Todo
+hi def link vdfValue String
+hi def link vdfVariable Identifier
+
+let b:current_syntax = 'vdf'
+
+let &cpoptions = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/syntax/zsh.vim b/runtime/syntax/zsh.vim
index bab89b916e..69671c59ca 100644
--- a/runtime/syntax/zsh.vim
+++ b/runtime/syntax/zsh.vim
@@ -2,7 +2,7 @@
" Language: Zsh shell script
" Maintainer: Christian Brabandt <cb@256bit.org>
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2020-11-21
+" Latest Revision: 2022-07-26
" License: Vim (see :h license)
" Repository: https://github.com/chrisbra/vim-zsh
@@ -19,9 +19,9 @@ function! s:ContainedGroup()
" vim-pandoc syntax defines the @langname cluster for embedded syntax languages
" However, if no syntax is defined yet, `syn list @zsh` will return
" "No syntax items defined", so make sure the result is actually a valid syn cluster
- for cluster in ['markdownHighlightzsh', 'zsh']
+ for cluster in ['markdownHighlight_zsh', 'zsh']
try
- " markdown syntax defines embedded clusters as @markdownhighlight<lang>,
+ " markdown syntax defines embedded clusters as @markdownhighlight_<lang>,
" pandoc just uses @<lang>, so check both for both clusters
let a=split(execute('syn list @'. cluster), "\n")
if len(a) == 2 && a[0] =~# '^---' && a[1] =~? cluster
@@ -48,17 +48,28 @@ syn match zshPOSIXQuoted '\\u[0-9a-fA-F]\{1,4}'
syn match zshPOSIXQuoted '\\U[1-9a-fA-F]\{1,8}'
syn region zshString matchgroup=zshStringDelimiter start=+"+ end=+"+
- \ contains=zshQuoted,@zshDerefs,@zshSubst fold
+ \ contains=zshQuoted,@zshDerefs,@zshSubstQuoted fold
syn region zshString matchgroup=zshStringDelimiter start=+'+ end=+'+ fold
syn region zshPOSIXString matchgroup=zshStringDelimiter start=+\$'+
\ skip=+\\[\\']+ end=+'+ contains=zshPOSIXQuoted,zshQuoted
syn match zshJobSpec '%\(\d\+\|?\=\w\+\|[%+-]\)'
+syn match zshNumber '[+-]\=\<\d\+\>'
+syn match zshNumber '[+-]\=\<0x\x\+\>'
+syn match zshNumber '[+-]\=\<0\o\+\>'
+syn match zshNumber '[+-]\=\d\+#[-+]\=\w\+\>'
+syn match zshNumber '[+-]\=\d\+\.\d\+\>'
+
syn keyword zshPrecommand noglob nocorrect exec command builtin - time
syn keyword zshDelimiter do done end
-syn keyword zshConditional if then elif else fi case in esac select
+syn keyword zshConditional if then elif else fi esac select
+
+syn keyword zshCase case nextgroup=zshCaseWord skipwhite
+syn match zshCaseWord /\S\+/ nextgroup=zshCaseIn skipwhite contained transparent
+syn keyword zshCaseIn in nextgroup=zshCasePattern skipwhite skipnl contained
+syn match zshCasePattern /\S[^)]*)/ contained
syn keyword zshRepeat while until repeat
@@ -73,9 +84,13 @@ syn match zshFunction '^\s*\k\+\ze\s*()'
syn match zshOperator '||\|&&\|;\|&!\='
-syn match zshRedir '\d\=\(<\|<>\|<<<\|<&\s*[0-9p-]\=\)'
-syn match zshRedir '\d\=\(>\|>>\|>&\s*[0-9p-]\=\|&>\|>>&\|&>>\)[|!]\='
-syn match zshRedir '|&\='
+ " <<<, <, <>, and variants.
+syn match zshRedir '\d\=\(<<<\|<&\s*[0-9p-]\=\|<>\?\)'
+ " >, >>, and variants.
+syn match zshRedir '\d\=\(>&\s*[0-9p-]\=\|&>>\?\|>>\?&\?\)[|!]\='
+ " | and |&, but only if it's not preceeded or
+ " followed by a | to avoid matching ||.
+syn match zshRedir '|\@1<!|&\=|\@!'
syn region zshHereDoc matchgroup=zshRedir
\ start='<\@<!<<\s*\z([^<]\S*\)'
@@ -125,7 +140,7 @@ syn keyword zshCommands alias autoload bg bindkey break bye cap cd
\ enable eval exec exit export false fc fg
\ functions getcap getln getopts hash history
\ jobs kill let limit log logout popd print
- \ printf pushd pushln pwd r read
+ \ printf prompt pushd pushln pwd r read
\ rehash return sched set setcap shift
\ source stat suspend test times trap true
\ ttyctl type ulimit umask unalias unfunction
@@ -139,10 +154,120 @@ syn case ignore
syn match zshOptStart
\ /\v^\s*%(%(un)?setopt|set\s+[-+]o)/
\ nextgroup=zshOption skipwhite
-syn match zshOption nextgroup=zshOption,zshComment skipwhite contained /\v
- \ <%(no_?)?%(
- \ auto_?cd|auto_?pushd|cdable_?vars|cd_?silent|chase_?dots|chase_?links|posix_?cd|pushd_?ignore_?dups|pushd_?minus|pushd_?silent|pushd_?to_?home|always_?last_?prompt|always_?to_?end|auto_?list|auto_?menu|auto_?name_?dirs|auto_?param_?keys|auto_?param_?slash|auto_?remove_?slash|bash_?auto_?list|complete_?aliases|complete_?in_?word|glob_?complete|hash_?list_?all|list_?ambiguous|list_?beep|list_?packed|list_?rows_?first|list_?types|menu_?complete|rec_?exact|bad_?pattern|bare_?glob_?qual|brace_?ccl|case_?glob|case_?match|case_?paths|csh_?null_?glob|equals|extended_?glob|force_?float|glob|glob_?assign|glob_?dots|glob_?star_?short|glob_?subst|hist_?subst_?pattern|ignore_?braces|ignore_?close_?braces|ksh_?glob|magic_?equal_?subst|mark_?dirs|multibyte|nomatch|null_?glob|numeric_?glob_?sort|rc_?expand_?param|rematch_?pcre|sh_?glob|unset|warn_?create_?global|warn_?nested_?var|warnnestedvar|append_?history|bang_?hist|extended_?history|hist_?allow_?clobber|hist_?beep|hist_?expire_?dups_?first|hist_?fcntl_?lock|hist_?find_?no_?dups|hist_?ignore_?all_?dups|hist_?ignore_?dups|hist_?ignore_?space|hist_?lex_?words|hist_?no_?functions|hist_?no_?store|hist_?reduce_?blanks|hist_?save_?by_?copy|hist_?save_?no_?dups|hist_?verify|inc_?append_?history|inc_?append_?history_?time|share_?history|all_?export|global_?export|global_?rcs|rcs|aliases|clobber|clobber_?empty|correct|correct_?all|dvorak|flow_?control|ignore_?eof|interactive_?comments|hash_?cmds|hash_?dirs|hash_?executables_?only|mail_?warning|path_?dirs|path_?script|print_?eight_?bit|print_?exit_?value|rc_?quotes|rm_?star_?silent|rm_?star_?wait|short_?loops|short_?repeat|sun_?keyboard_?hack|auto_?continue|auto_?resume|bg_?nice|check_?jobs|check_?running_?jobs|hup|long_?list_?jobs|monitor|notify|posix_?jobs|prompt_?bang|prompt_?cr|prompt_?sp|prompt_?percent|prompt_?subst|transient_?rprompt|alias_?func_?def|c_?bases|c_?precedences|debug_?before_?cmd|err_?exit|err_?return|eval_?lineno|exec|function_?argzero|local_?loops|local_?options|local_?patterns|local_?traps|multi_?func_?def|multios|octal_?zeroes|pipe_?fail|source_?trace|typeset_?silent|typeset_?to_?unset|verbose|xtrace|append_?create|bash_?rematch|bsd_?echo|continue_?on_?error|csh_?junkie_?history|csh_?junkie_?loops|csh_?junkie_?quotes|csh_?nullcmd|ksh_?arrays|ksh_?autoload|ksh_?option_?print|ksh_?typeset|ksh_?zero_?subscript|posix_?aliases|posix_?argzero|posix_?builtins|posix_?identifiers|posix_?strings|posix_?traps|sh_?file_?expansion|sh_?nullcmd|sh_?option_?letters|sh_?word_?split|traps_?async|interactive|login|privileged|restricted|shin_?stdin|single_?command|beep|combining_?chars|emacs|overstrike|single_?line_?zle|vi|zle|brace_?expand|dot_?glob|hash_?all|hist_?append|hist_?expand|log|mail_?warn|one_?cmd|physical|prompt_?vars|stdin|track_?all|no_?match
- \)>/
+syn keyword zshOption nextgroup=zshOption,zshComment skipwhite contained
+ \ auto_cd no_auto_cd autocd noautocd auto_pushd no_auto_pushd autopushd noautopushd cdable_vars
+ \ no_cdable_vars cdablevars nocdablevars cd_silent no_cd_silent cdsilent nocdsilent chase_dots
+ \ no_chase_dots chasedots nochasedots chase_links no_chase_links chaselinks nochaselinks posix_cd
+ \ posixcd no_posix_cd noposixcd pushd_ignore_dups no_pushd_ignore_dups pushdignoredups
+ \ nopushdignoredups pushd_minus no_pushd_minus pushdminus nopushdminus pushd_silent no_pushd_silent
+ \ pushdsilent nopushdsilent pushd_to_home no_pushd_to_home pushdtohome nopushdtohome
+ \ always_last_prompt no_always_last_prompt alwayslastprompt noalwayslastprompt always_to_end
+ \ no_always_to_end alwaystoend noalwaystoend auto_list no_auto_list autolist noautolist auto_menu
+ \ no_auto_menu automenu noautomenu auto_name_dirs no_auto_name_dirs autonamedirs noautonamedirs
+ \ auto_param_keys no_auto_param_keys autoparamkeys noautoparamkeys auto_param_slash
+ \ no_auto_param_slash autoparamslash noautoparamslash auto_remove_slash no_auto_remove_slash
+ \ autoremoveslash noautoremoveslash bash_auto_list no_bash_auto_list bashautolist nobashautolist
+ \ complete_aliases no_complete_aliases completealiases nocompletealiases complete_in_word
+ \ no_complete_in_word completeinword nocompleteinword glob_complete no_glob_complete globcomplete
+ \ noglobcomplete hash_list_all no_hash_list_all hashlistall nohashlistall list_ambiguous
+ \ no_list_ambiguous listambiguous nolistambiguous list_beep no_list_beep listbeep nolistbeep
+ \ list_packed no_list_packed listpacked nolistpacked list_rows_first no_list_rows_first listrowsfirst
+ \ nolistrowsfirst list_types no_list_types listtypes nolisttypes menu_complete no_menu_complete
+ \ menucomplete nomenucomplete rec_exact no_rec_exact recexact norecexact bad_pattern no_bad_pattern
+ \ badpattern nobadpattern bare_glob_qual no_bare_glob_qual bareglobqual nobareglobqual brace_ccl
+ \ no_brace_ccl braceccl nobraceccl case_glob no_case_glob caseglob nocaseglob case_match
+ \ no_case_match casematch nocasematch case_paths no_case_paths casepaths nocasepaths csh_null_glob
+ \ no_csh_null_glob cshnullglob nocshnullglob equals no_equals noequals extended_glob no_extended_glob
+ \ extendedglob noextendedglob force_float no_force_float forcefloat noforcefloat glob no_glob noglob
+ \ glob_assign no_glob_assign globassign noglobassign glob_dots no_glob_dots globdots noglobdots
+ \ glob_star_short no_glob_star_short globstarshort noglobstarshort glob_subst no_glob_subst globsubst
+ \ noglobsubst hist_subst_pattern no_hist_subst_pattern histsubstpattern nohistsubstpattern
+ \ ignore_braces no_ignore_braces ignorebraces noignorebraces ignore_close_braces
+ \ no_ignore_close_braces ignoreclosebraces noignoreclosebraces ksh_glob no_ksh_glob kshglob nokshglob
+ \ magic_equal_subst no_magic_equal_subst magicequalsubst nomagicequalsubst mark_dirs no_mark_dirs
+ \ markdirs nomarkdirs multibyte no_multibyte nomultibyte nomatch no_nomatch nonomatch null_glob
+ \ no_null_glob nullglob nonullglob numeric_glob_sort no_numeric_glob_sort numericglobsort
+ \ nonumericglobsort rc_expand_param no_rc_expand_param rcexpandparam norcexpandparam rematch_pcre
+ \ no_rematch_pcre rematchpcre norematchpcre sh_glob no_sh_glob shglob noshglob unset no_unset nounset
+ \ warn_create_global no_warn_create_global warncreateglobal nowarncreateglobal warn_nested_var
+ \ no_warn_nested_var warnnestedvar no_warnnestedvar append_history no_append_history appendhistory
+ \ noappendhistory bang_hist no_bang_hist banghist nobanghist extended_history no_extended_history
+ \ extendedhistory noextendedhistory hist_allow_clobber no_hist_allow_clobber histallowclobber
+ \ nohistallowclobber hist_beep no_hist_beep histbeep nohistbeep hist_expire_dups_first
+ \ no_hist_expire_dups_first histexpiredupsfirst nohistexpiredupsfirst hist_fcntl_lock
+ \ no_hist_fcntl_lock histfcntllock nohistfcntllock hist_find_no_dups no_hist_find_no_dups
+ \ histfindnodups nohistfindnodups hist_ignore_all_dups no_hist_ignore_all_dups histignorealldups
+ \ nohistignorealldups hist_ignore_dups no_hist_ignore_dups histignoredups nohistignoredups
+ \ hist_ignore_space no_hist_ignore_space histignorespace nohistignorespace hist_lex_words
+ \ no_hist_lex_words histlexwords nohistlexwords hist_no_functions no_hist_no_functions
+ \ histnofunctions nohistnofunctions hist_no_store no_hist_no_store histnostore nohistnostore
+ \ hist_reduce_blanks no_hist_reduce_blanks histreduceblanks nohistreduceblanks hist_save_by_copy
+ \ no_hist_save_by_copy histsavebycopy nohistsavebycopy hist_save_no_dups no_hist_save_no_dups
+ \ histsavenodups nohistsavenodups hist_verify no_hist_verify histverify nohistverify
+ \ inc_append_history no_inc_append_history incappendhistory noincappendhistory
+ \ inc_append_history_time no_inc_append_history_time incappendhistorytime noincappendhistorytime
+ \ share_history no_share_history sharehistory nosharehistory all_export no_all_export allexport
+ \ noallexport global_export no_global_export globalexport noglobalexport global_rcs no_global_rcs
+ \ globalrcs noglobalrcs rcs no_rcs norcs aliases no_aliases noaliases clobber no_clobber noclobber
+ \ clobber_empty no_clobber_empty clobberempty noclobberempty correct no_correct nocorrect correct_all
+ \ no_correct_all correctall nocorrectall dvorak no_dvorak nodvorak flow_control no_flow_control
+ \ flowcontrol noflowcontrol ignore_eof no_ignore_eof ignoreeof noignoreeof interactive_comments
+ \ no_interactive_comments interactivecomments nointeractivecomments hash_cmds no_hash_cmds hashcmds
+ \ nohashcmds hash_dirs no_hash_dirs hashdirs nohashdirs hash_executables_only
+ \ no_hash_executables_only hashexecutablesonly nohashexecutablesonly mail_warning no_mail_warning
+ \ mailwarning nomailwarning path_dirs no_path_dirs pathdirs nopathdirs path_script no_path_script
+ \ pathscript nopathscript print_eight_bit no_print_eight_bit printeightbit noprinteightbit
+ \ print_exit_value no_print_exit_value printexitvalue noprintexitvalue rc_quotes no_rc_quotes
+ \ rcquotes norcquotes rm_star_silent no_rm_star_silent rmstarsilent normstarsilent rm_star_wait
+ \ no_rm_star_wait rmstarwait normstarwait short_loops no_short_loops shortloops noshortloops
+ \ short_repeat no_short_repeat shortrepeat noshortrepeat sun_keyboard_hack no_sun_keyboard_hack
+ \ sunkeyboardhack nosunkeyboardhack auto_continue no_auto_continue autocontinue noautocontinue
+ \ auto_resume no_auto_resume autoresume noautoresume bg_nice no_bg_nice bgnice nobgnice check_jobs
+ \ no_check_jobs checkjobs nocheckjobs check_running_jobs no_check_running_jobs checkrunningjobs
+ \ nocheckrunningjobs hup no_hup nohup long_list_jobs no_long_list_jobs longlistjobs nolonglistjobs
+ \ monitor no_monitor nomonitor notify no_notify nonotify posix_jobs posixjobs no_posix_jobs
+ \ noposixjobs prompt_bang no_prompt_bang promptbang nopromptbang prompt_cr no_prompt_cr promptcr
+ \ nopromptcr prompt_sp no_prompt_sp promptsp nopromptsp prompt_percent no_prompt_percent
+ \ promptpercent nopromptpercent prompt_subst no_prompt_subst promptsubst nopromptsubst
+ \ transient_rprompt no_transient_rprompt transientrprompt notransientrprompt alias_func_def
+ \ no_alias_func_def aliasfuncdef noaliasfuncdef c_bases no_c_bases cbases nocbases c_precedences
+ \ no_c_precedences cprecedences nocprecedences debug_before_cmd no_debug_before_cmd debugbeforecmd
+ \ nodebugbeforecmd err_exit no_err_exit errexit noerrexit err_return no_err_return errreturn
+ \ noerrreturn eval_lineno no_eval_lineno evallineno noevallineno exec no_exec noexec function_argzero
+ \ no_function_argzero functionargzero nofunctionargzero local_loops no_local_loops localloops
+ \ nolocalloops local_options no_local_options localoptions nolocaloptions local_patterns
+ \ no_local_patterns localpatterns nolocalpatterns local_traps no_local_traps localtraps nolocaltraps
+ \ multi_func_def no_multi_func_def multifuncdef nomultifuncdef multios no_multios nomultios
+ \ octal_zeroes no_octal_zeroes octalzeroes nooctalzeroes pipe_fail no_pipe_fail pipefail nopipefail
+ \ source_trace no_source_trace sourcetrace nosourcetrace typeset_silent no_typeset_silent
+ \ typesetsilent notypesetsilent typeset_to_unset no_typeset_to_unset typesettounset notypesettounset
+ \ verbose no_verbose noverbose xtrace no_xtrace noxtrace append_create no_append_create appendcreate
+ \ noappendcreate bash_rematch no_bash_rematch bashrematch nobashrematch bsd_echo no_bsd_echo bsdecho
+ \ nobsdecho continue_on_error no_continue_on_error continueonerror nocontinueonerror
+ \ csh_junkie_history no_csh_junkie_history cshjunkiehistory nocshjunkiehistory csh_junkie_loops
+ \ no_csh_junkie_loops cshjunkieloops nocshjunkieloops csh_junkie_quotes no_csh_junkie_quotes
+ \ cshjunkiequotes nocshjunkiequotes csh_nullcmd no_csh_nullcmd cshnullcmd nocshnullcmd ksh_arrays
+ \ no_ksh_arrays ksharrays noksharrays ksh_autoload no_ksh_autoload kshautoload nokshautoload
+ \ ksh_option_print no_ksh_option_print kshoptionprint nokshoptionprint ksh_typeset no_ksh_typeset
+ \ kshtypeset nokshtypeset ksh_zero_subscript no_ksh_zero_subscript kshzerosubscript
+ \ nokshzerosubscript posix_aliases no_posix_aliases posixaliases noposixaliases posix_argzero
+ \ no_posix_argzero posixargzero noposixargzero posix_builtins no_posix_builtins posixbuiltins
+ \ noposixbuiltins posix_identifiers no_posix_identifiers posixidentifiers noposixidentifiers
+ \ posix_strings no_posix_strings posixstrings noposixstrings posix_traps no_posix_traps posixtraps
+ \ noposixtraps sh_file_expansion no_sh_file_expansion shfileexpansion noshfileexpansion sh_nullcmd
+ \ no_sh_nullcmd shnullcmd noshnullcmd sh_option_letters no_sh_option_letters shoptionletters
+ \ noshoptionletters sh_word_split no_sh_word_split shwordsplit noshwordsplit traps_async
+ \ no_traps_async trapsasync notrapsasync interactive no_interactive nointeractive login no_login
+ \ nologin privileged no_privileged noprivileged restricted no_restricted norestricted shin_stdin
+ \ no_shin_stdin shinstdin noshinstdin single_command no_single_command singlecommand nosinglecommand
+ \ beep no_beep nobeep combining_chars no_combining_chars combiningchars nocombiningchars emacs
+ \ no_emacs noemacs overstrike no_overstrike nooverstrike single_line_zle no_single_line_zle
+ \ singlelinezle nosinglelinezle vi no_vi novi zle no_zle nozle brace_expand no_brace_expand
+ \ braceexpand nobraceexpand dot_glob no_dot_glob dotglob nodotglob hash_all no_hash_all hashall
+ \ nohashall hist_append no_hist_append histappend nohistappend hist_expand no_hist_expand histexpand
+ \ nohistexpand log no_log nolog mail_warn no_mail_warn mailwarn nomailwarn one_cmd no_one_cmd onecmd
+ \ noonecmd physical no_physical nophysical prompt_vars no_prompt_vars promptvars nopromptvars stdin
+ \ no_stdin nostdin track_all no_track_all trackall notrackall
syn case match
syn keyword zshTypes float integer local typeset declare private readonly
@@ -150,15 +275,12 @@ syn keyword zshTypes float integer local typeset declare private read
" XXX: this may be too much
" syn match zshSwitches '\s\zs--\=[a-zA-Z0-9-]\+'
-syn match zshNumber '[+-]\=\<\d\+\>'
-syn match zshNumber '[+-]\=\<0x\x\+\>'
-syn match zshNumber '[+-]\=\<0\o\+\>'
-syn match zshNumber '[+-]\=\d\+#[-+]\=\w\+\>'
-syn match zshNumber '[+-]\=\d\+\.\d\+\>'
-
" TODO: $[...] is the same as $((...)), so add that as well.
syn cluster zshSubst contains=zshSubst,zshOldSubst,zshMathSubst
+syn cluster zshSubstQuoted contains=zshSubstQuoted,zshOldSubst,zshMathSubst
exe 'syn region zshSubst matchgroup=zshSubstDelim transparent start=/\$(/ skip=/\\)/ end=/)/ contains='.s:contained. ' fold'
+exe 'syn region zshSubstQuoted matchgroup=zshSubstDelim transparent start=/\$(/ skip=/\\)/ end=/)/ contains='.s:contained. ' fold'
+syn region zshSubstQuoted matchgroup=zshSubstDelim start='\${' skip='\\}' end='}' contains=@zshSubst,zshBrackets,zshQuoted fold
syn region zshParentheses transparent start='(' skip='\\)' end=')' fold
syn region zshGlob start='(#' end=')'
syn region zshMathSubst matchgroup=zshSubstDelim transparent
@@ -201,6 +323,8 @@ hi def link zshJobSpec Special
hi def link zshPrecommand Special
hi def link zshDelimiter Keyword
hi def link zshConditional Conditional
+hi def link zshCase zshConditional
+hi def link zshCaseIn zshCase
hi def link zshException Exception
hi def link zshRepeat Repeat
hi def link zshKeyword Keyword
@@ -223,6 +347,7 @@ hi def link zshTypes Type
hi def link zshSwitches Special
hi def link zshNumber Number
hi def link zshSubst PreProc
+hi def link zshSubstQuoted zshSubst
hi def link zshMathSubst zshSubst
hi def link zshOldSubst zshSubst
hi def link zshSubstDelim zshSubst