aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--.travis.yml8
-rw-r--r--runtime/autoload/netrw.vim36
-rw-r--r--runtime/doc/lsp.txt130
-rw-r--r--runtime/doc/motion.txt54
-rw-r--r--runtime/doc/options.txt13
-rw-r--r--runtime/doc/quickref.txt1
-rw-r--r--runtime/doc/vim_diff.txt8
-rw-r--r--runtime/lua/vim/lsp/util.lua2
-rw-r--r--runtime/makemenu.vim15
-rw-r--r--runtime/synmenu.vim421
-rw-r--r--runtime/syntax/vim.vim4
-rw-r--r--snap/snapcraft.yaml2
-rw-r--r--src/nvim/ex_getln.c4
-rwxr-xr-xsrc/nvim/generators/gen_declarations.lua4
-rw-r--r--src/nvim/lua/vim.lua4
-rw-r--r--src/nvim/mark.c27
-rw-r--r--src/nvim/message.c4
-rw-r--r--src/nvim/option.c5
-rw-r--r--src/nvim/option_defs.h6
-rw-r--r--src/nvim/options.lua12
-rw-r--r--src/nvim/testdir/Makefile1
-rw-r--r--src/nvim/testdir/setup.vim1
-rw-r--r--src/nvim/testdir/shared.vim3
-rw-r--r--src/nvim/testdir/test48.in82
-rw-r--r--src/nvim/testdir/test48.ok23
-rw-r--r--src/nvim/testdir/test49.vim2
-rw-r--r--src/nvim/testdir/test_cmdline.vim5
-rw-r--r--src/nvim/testdir/test_virtualedit.vim135
-rw-r--r--src/nvim/version.c6
-rw-r--r--test/functional/helpers.lua2
-rw-r--r--test/functional/legacy/breakindent_spec.lua214
-rw-r--r--test/functional/lua/vim_spec.lua13
-rw-r--r--test/functional/normal/jump_spec.lua91
34 files changed, 682 insertions, 657 deletions
diff --git a/.gitignore b/.gitignore
index 6e8cbd0321..f4037c718a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@ compile_commands.json
/tmp/
/.clangd/
+.DS_Store
*.mo
.*.sw?
*~
diff --git a/.travis.yml b/.travis.yml
index 26e129a5e2..0417b67a5f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -158,7 +158,7 @@ jobs:
env:
- CLANG_SANITIZER=TSAN
- *common-job-env
- - if: false
+ - if: type != pull_request
name: snap
os: linux
env:
@@ -188,6 +188,12 @@ jobs:
script: ci/snap/deploy.sh
on:
branch: master
+ allow_failures:
+ - env:
+ - LC_ALL: C.UTF-8
+ - LANG: C.UTF-8
+ - SNAPCRAFT_ENABLE_SILENT_REPORT: y
+ - SNAPCRAFT_ENABLE_DEVELOPER_DEBUG: y
fast_finish: true
before_install: ci/before_install.sh
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index a5b47e06d5..9b1266c4ca 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -688,10 +688,6 @@ fun! netrw#Explore(indx,dosplit,style,...)
endif
" save registers
- if has("clipboard")
- sil! let keepregstar = @*
- sil! let keepregplus = @+
- endif
sil! let keepregslash= @/
" if dosplit
@@ -915,10 +911,6 @@ fun! netrw#Explore(indx,dosplit,style,...)
" call Decho("..case Nexplore with starpat=".starpat.": (indx=".indx.")",'~'.expand("<slnum>"))
if !exists("w:netrw_explore_list") " sanity check
NetrwKeepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
- if has("clipboard")
- sil! let @* = keepregstar
- sil! let @+ = keepregplus
- endif
sil! let @/ = keepregslash
" call Dret("netrw#Explore")
return
@@ -940,10 +932,6 @@ fun! netrw#Explore(indx,dosplit,style,...)
" call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")",'~'.expand("<slnum>"))
if !exists("w:netrw_explore_list") " sanity check
NetrwKeepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
- if has("clipboard")
- sil! let @* = keepregstar
- sil! let @+ = keepregplus
- endif
sil! let @/ = keepregslash
" call Dret("netrw#Explore")
return
@@ -995,10 +983,6 @@ fun! netrw#Explore(indx,dosplit,style,...)
catch /^Vim\%((\a\+)\)\=:E480/
keepalt call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
- if has("clipboard")
- sil! let @* = keepregstar
- sil! let @+ = keepregplus
- endif
sil! let @/ = keepregslash
" call Dret("netrw#Explore : no files matched pattern")
return
@@ -1031,10 +1015,6 @@ fun! netrw#Explore(indx,dosplit,style,...)
if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
keepalt NetrwKeepj call netrw#ErrorMsg(s:WARNING,"no files matched",42)
- if has("clipboard")
- sil! let @* = keepregstar
- sil! let @+ = keepregplus
- endif
sil! let @/ = keepregslash
" call Dret("netrw#Explore : no files matched")
return
@@ -1079,10 +1059,6 @@ fun! netrw#Explore(indx,dosplit,style,...)
if !exists("g:netrw_quiet")
keepalt NetrwKeepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
endif
- if has("clipboard")
- sil! let @* = keepregstar
- sil! let @+ = keepregplus
- endif
sil! let @/ = keepregslash
" call Dret("netrw#Explore : missing +path_extra")
return
@@ -1152,10 +1128,6 @@ fun! netrw#Explore(indx,dosplit,style,...)
" there's no danger of a late FocusGained event on initialization.
" Consequently, set s:netrw_events to 2.
let s:netrw_events= 2
- if has("clipboard")
- sil! let @* = keepregstar
- sil! let @+ = keepregplus
- endif
sil! let @/ = keepregslash
" call Dret("netrw#Explore : @/<".@/.">")
endfun
@@ -9559,10 +9531,6 @@ fun! s:NetrwWideListing()
let newcolstart = w:netrw_bannercnt + fpc
let newcolend = newcolstart + fpc - 1
" call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]",'~'.expand("<slnum>"))
- if has("clipboard")
- sil! let keepregstar = @*
- sil! let keepregplus = @+
- endif
while line("$") >= newcolstart
if newcolend > line("$") | let newcolend= line("$") | endif
let newcolqty= newcolend - newcolstart
@@ -9575,10 +9543,6 @@ fun! s:NetrwWideListing()
exe "sil! NetrwKeepj ".newcolstart.','.newcolend.'d _'
exe 'sil! NetrwKeepj '.w:netrw_bannercnt
endwhile
- if has("clipboard")
- sil! let @*= keepregstar
- sil! let @+= keepregplus
- endif
exe "sil! NetrwKeepj ".w:netrw_bannercnt.',$s/\s\+$//e'
NetrwKeepj call histdel("/",-1)
exe 'nno <buffer> <silent> w :call search(''^.\\|\s\s\zs\S'',''W'')'."\<cr>"
diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt
index c4c164ab6c..d6d16b8481 100644
--- a/runtime/doc/lsp.txt
+++ b/runtime/doc/lsp.txt
@@ -3,7 +3,7 @@
NVIM REFERENCE MANUAL
-Nvim Language Server Protocol (LSP) API *lsp*
+Nvim Language Server Protocol (LSP) API *lsp*
Nvim is a client to the Language Server Protocol:
@@ -12,25 +12,61 @@ Nvim is a client to the Language Server Protocol:
Type |gO| to see the table of contents.
================================================================================
-LSP API *lsp-api*
+LANGUAGE SERVER PROTOCOL (LSP) CLIENT *lsp-intro*
-Neovim exposes a API for the language server protocol. To get the real benefits
-of this API, a language server must be installed.
-Many examples can be found here:
+The `vim.lsp` Lua module provides a flexible API for consuming LSP servers.
+To use LSP in practice, a language server must be installed.
https://microsoft.github.io/language-server-protocol/implementors/servers/
-After installing a language server to your machine, you must let Neovim know
-how to start and interact with that language server.
+After installing a language server to your machine, you must tell Nvim how to
+start and interact with that language server.
+- Easy way: use the configs provided here by the nvim-lsp plugin.
+ https://github.com/neovim/nvim-lsp
+- Low-level way: use |vim.lsp.start_client()| and |vim.lsp.buf_attach_client()|
+ directly. Useful if you want to build advanced LSP plugins based on the
+ Nvim LSP module. |lsp-advanced-js-example|
+
+ *lsp-config*
+Nvim LSP client will automatically provide inline diagnostics when available.
+|lsp-callbacks| But you probably want to use other features too, such as
+go-to-definition, "hover", etc. Example config: >
+
+ nnoremap <silent> gd <cmd>lua vim.lsp.buf.declaration()<CR>
+ nnoremap <silent> <c-]> <cmd>lua vim.lsp.buf.definition()<CR>
+ nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR>
+ nnoremap <silent> gD <cmd>lua vim.lsp.buf.implementation()<CR>
+ nnoremap <silent> <c-k> <cmd>lua vim.lsp.buf.signature_help()<CR>
+ nnoremap <silent> 1gD <cmd>lua vim.lsp.buf.type_definition()<CR>
-To do so, you can either:
-- Use https://github.com/neovim/nvim-lsp and one of the existing servers there
- or set up a new one using the `nvim_lsp/skeleton` interface (and contribute
- it if you find it useful). This uses |vim.lsp.start_client()| under the
- hood.
-- Or |vim.lsp.start_client()| and |vim.lsp.buf_attach_client()|. These are the
- backbone of the LSP API. These are easy to use enough for basic or more
- complex configurations such as in |lsp-advanced-js-example|.
+<
+ *vim.lsp.omnifunc()*
+Nvim provides the vim.lsp.omnifunc 'omnifunc' handler which allows
+|i_CTRL-X_CTRL-O| to consume LSP completion features. Example config (note the
+use of |v:lua| to call Lua from Vimscript): >
+
+ " Use LSP omni-completion in Python files.
+ autocmd Filetype python setlocal omnifunc=v:lua.vim.lsp.omnifunc
+
+
+FAQ ~
+
+> How to force-reload LSP?
+
+Stop all clients, then reload the buffer. >
+
+ :lua vim.lsp.stop_all_clients()
+ :edit
+
+> Why isn't completion working?
+
+In the buffer where you want to use LSP, check that 'omnifunc' is set to
+"v:lua.vim.lsp.omnifunc": >
+
+ :verbose set omnifunc?
+
+Some other plugin may be overriding the option. To avoid that, you could set
+the option in an |after-directory| ftplugin, e.g. "after/ftplugin/python.vim".
================================================================================
*lsp-core-api*
@@ -75,7 +111,7 @@ vim.lsp.start_client({config})
`capabilities`
A {table} which will be used instead of
- `vim.lsp.protocol.make_client_capabilities()` which contains neovim's
+ `vim.lsp.protocol.make_client_capabilities()` which contains Nvim's
default capabilities and passed to the language server on initialization.
You'll probably want to use make_client_capabilities() and modify the
result.
@@ -264,11 +300,11 @@ vim.lsp.rpc_response_error({code}, [{message}], [{data}])
LSP CALLBACKS *lsp-callbacks*
DEFAULT CALLBACKS ~
- *vim.lsp.default_callbacks*
-The `vim.lsp.default_callbacks` table defines default callbacks used when
+ *vim.lsp.callbacks*
+The `vim.lsp.callbacks` table defines default callbacks used when
creating a new client. Keys are LSP method names: >
- :lua print(vim.inspect(vim.tbl_keys(vim.lsp.default_callbacks)))
+ :lua print(vim.inspect(vim.tbl_keys(vim.lsp.callbacks)))
These LSP requests/notifications are defined by default:
@@ -276,7 +312,7 @@ These LSP requests/notifications are defined by default:
window/logMessage
window/showMessage
-You can check these via `vim.tbl_keys(vim.lsp.default_callbacks)`.
+You can check these via `vim.tbl_keys(vim.lsp.callbacks)`.
These will be used preferrentially in `vim.lsp.buf` methods when handling
requests. They will also be used when responding to server requests and
@@ -285,16 +321,16 @@ notifications.
Use cases:
- Users can modify this to customize to their preferences.
- UI plugins can modify this by assigning to
- `vim.lsp.default_callbacks[method]` so as to provide more specialized
+ `vim.lsp.callbacks[method]` so as to provide more specialized
handling, allowing you to leverage the UI capabilities available. UIs should
try to be conscientious of any existing changes the user may have set
already by checking for existing values.
Any callbacks passed directly to `request` methods on a server client will
-have the highest precedence, followed by the `default_callbacks`.
+have the highest precedence, followed by the `callbacks`.
You can override the default handlers,
-- globally: by modifying the `vim.lsp.default_callbacks` table
+- globally: by modifying the `vim.lsp.callbacks` table
- per-client: by passing the {callbacks} table parameter to
|vim.lsp.start_client|
@@ -305,7 +341,7 @@ Each handler has this signature: >
Callbacks are functions which are called in a variety of situations by the
client. Their signature is `function(err, method, params, client_id)` They can
be set by the {callbacks} parameter for |vim.lsp.start_client| or via the
-|vim.lsp.default_callbacks|.
+|vim.lsp.callbacks|.
Handlers are called for:
- Notifications from the server (`err` is always `nil`).
@@ -420,52 +456,10 @@ vim.lsp.get_log_path()
vim.lsp.log_levels
Log level dictionary with reverse lookup as well.
- Can be used to lookup the number from the name or the name from the number.
- Levels by name: 'trace', 'debug', 'info', 'warn', 'error'
- Level numbers begin with 'trace' at 0
+ Can be used to lookup the number from the name or vice-versa.
+ Levels: "trace" (0), "debug" (1), "info" (2), "warn" (3), "error" (4)
================================================================================
- *lsp-omnifunc*
- *vim.lsp.omnifunc()*
-vim.lsp.omnifunc({findstart}, {base})
-
-To configure omnifunc, add the following in your init.vim:
->
- " Configure for python
- autocmd Filetype python setl omnifunc=v:lua.vim.lsp.omnifunc
-
- " Or with on_attach
- start_client {
- ...
- on_attach = function(client, bufnr)
- vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
- end;
- }
-
- " This is optional, but you may find it useful
- autocmd CompleteDone * pclose
-<
-================================================================================
-LSP FUNCTIONS *lsp-vim-functions*
-
-To use the functions from vim, it is recommended to use |v:lua| to interface
-with the Lua functions. No direct vim functions are provided, but the
-interface is still easy to use from mappings.
-
-These methods can be used in mappings and are the equivalent of using the
-request from lua as follows:
-
->
- " Example config
- autocmd Filetype rust,python,go,c,cpp setl omnifunc=v:lua.vim.lsp.omnifunc
- nnoremap <silent> ;dc <cmd>lua vim.lsp.buf.declaration()<CR>
- nnoremap <silent> ;df <cmd>lua vim.lsp.buf.definition()<CR>
- nnoremap <silent> ;h <cmd>lua vim.lsp.buf.hover()<CR>
- nnoremap <silent> ;i <cmd>lua vim.lsp.buf.implementation()<CR>
- nnoremap <silent> ;s <cmd>lua vim.lsp.buf.signature_help()<CR>
- nnoremap <silent> ;td <cmd>lua vim.lsp.buf.type_definition()<CR>
-<
-================================================================================
LSP EXAMPLE *lsp-advanced-js-example*
For more advanced configurations where just filtering by filetype isn't
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
index 07ff4cf030..3947e583b7 100644
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -1083,6 +1083,60 @@ When you split a window, the jumplist will be copied to the new window.
If you have included the ' item in the 'shada' option the jumplist will be
stored in the ShaDa file and restored when starting Vim.
+ *jumplist-stack*
+When jumpoptions includes "stack", the jumplist behaves like the history in a
+web browser and like the tag stack. When jumping to a new location from the
+middle of the jumplist, the locations after the current position will be
+discarded.
+
+This behavior corresponds to the following situation in a web browser.
+Navigate to first.com, second.com, third.com, fourth.com and then fifth.com.
+Then navigate backwards twice so that third.com is displayed. At that point,
+the history is:
+- first.com
+- second.com
+- third.com <--
+- fourth.com
+- fifth.com
+
+Finally, navigate to a different webpage, new.com. The history is
+- first.com
+- second.com
+- third.com
+- new.com <--
+
+When the jumpoptions includes "stack", this is the behavior of neovim as well.
+That is, given a jumplist like the following in which CTRL-O has been used to
+move back three times to location X
+
+ jump line col file/text
+ 2 1260 8 src/nvim/mark.c <-- location X-2
+ 1 685 0 src/nvim/option_defs.h <-- location X-1
+> 0 462 36 src/nvim/option_defs.h <-- location X
+ 1 479 39 src/nvim/option_defs.h
+ 2 213 2 src/nvim/mark.c
+ 3 181 0 src/nvim/mark.c
+
+jumping to location Y results in the locations after the current locations being
+removed:
+
+ jump line col file/text
+ 3 1260 8 src/nvim/mark.c
+ 2 685 0 src/nvim/option_defs.h
+ 1 462 36 src/nvim/option_defs.h <-- location X
+>
+
+Then, when yet another location Z is jumped to, the new location Y appears
+directly after location X in the jumplist and location X remains in the same
+position relative to the locations (X-1, X-2, etc., ...) that had been before it
+prior to the original jump from X to Y:
+
+ jump line col file/text
+ 4 1260 8 src/nvim/mark.c <-- location X-2
+ 3 685 0 src/nvim/option_defs.h <-- location X-1
+ 2 462 36 src/nvim/option_defs.h <-- location X
+ 1 100 0 src/nvim/option_defs.h <-- location Y
+>
CHANGE LIST JUMPS *changelist* *change-list-jumps* *E664*
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index e52fc2a2f5..4b8740c5d2 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -3457,6 +3457,17 @@ A jump table for the options with a short description can be found at |Q_op|.
Unprintable and zero-width Unicode characters are displayed as <xxxx>.
There is no option to specify these characters.
+ *'jumpoptions'* *'jop'*
+'jumpoptions' 'jop' string (default "")
+ global
+ List of words that change the behavior of the |jumplist|.
+ stack Make the jumplist behave like the tagstack or like a
+ web browser. Relative location of entries in the
+ jumplist is preserved at the cost of discarding
+ subsequent entries when navigating backwards in the
+ jumplist and then jumping to a location.
+ |jumplist-stack|
+
*'joinspaces'* *'js'* *'nojoinspaces'* *'nojs'*
'joinspaces' 'js' boolean (default on)
global
@@ -5746,7 +5757,7 @@ A jump table for the options with a short description can be found at |Q_op|.
current one. |:vsplit|
*'startofline'* *'sol'* *'nostartofline'* *'nosol'*
-'startofline' 'sol' boolean (default on)
+'startofline' 'sol' boolean (default off)
global
When "on" the commands listed below move the cursor to the first
non-blank of the line. When off the cursor is kept in the same column
diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt
index dfa7218bdf..224f14a18b 100644
--- a/runtime/doc/quickref.txt
+++ b/runtime/doc/quickref.txt
@@ -743,6 +743,7 @@ Short explanation of each option: *option-list*
'iskeyword' 'isk' characters included in keywords
'isprint' 'isp' printable characters
'joinspaces' 'js' two spaces after a period with a join command
+'jumpoptions' 'jop' specifies how jumping is done
'keymap' 'kmp' name of a keyboard mapping
'keymodel' 'km' enable starting/stopping selection with keys
'keywordprg' 'kp' program to use for the "K" command
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 4267aefbbf..64b5830575 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -55,6 +55,7 @@ the differences.
- 'showcmd' is enabled
- 'sidescroll' defaults to 1
- 'smarttab' is enabled
+- 'startofline' is disabled
- 'tabpagemax' defaults to 50
- 'tags' defaults to "./tags;,tags"
- 'ttimeoutlen' defaults to 50
@@ -168,6 +169,7 @@ Functions:
|system()|, |systemlist()| can run {cmd} directly (without 'shell')
Highlight groups:
+ |highlight-blend| controls blend level for a highlight group
|expr-highlight| highlight groups (prefixed with "Nvim")
|hl-NormalFloat| highlights floating window
|hl-NormalNC| highlights non-current windows
@@ -206,6 +208,7 @@ Options:
'statusline' supports unlimited alignment sections
'tabline' %@Func@foo%X can call any function on mouse-click
'wildoptions' `pum` flag to use popupmenu for wildmode completion
+ 'winblend' pseudo-transparency in floating windows |api-floatwin|
'winhighlight' window-local highlights
Signs:
@@ -333,6 +336,11 @@ Macro/|recording| behavior
Motion:
The |jumplist| avoids useless/phantom jumps.
+ When the new option |jumpoptions| includes 'stack', the jumplist behaves
+ like the tagstack or history in a web browser--jumping from the middle of
+ the jumplist discards the locations after the jumped-from position
+ (|jumplist-stack|).
+
Normal commands:
|Q| is the same as |gQ|
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
index b9990ed082..3798b30a46 100644
--- a/runtime/lua/vim/lsp/util.lua
+++ b/runtime/lua/vim/lsp/util.lua
@@ -313,6 +313,8 @@ end
function M.jump_to_location(location)
if location.uri == nil then return end
local bufnr = vim.uri_to_bufnr(location.uri)
+ -- Save position in jumplist
+ vim.cmd "normal! m'"
-- TODO(ashkan) use tagfunc here to update tagstack.
api.nvim_set_current_buf(bufnr)
local row = location.range.start.line
diff --git a/runtime/makemenu.vim b/runtime/makemenu.vim
index ff29d59063..27fa46fe25 100644
--- a/runtime/makemenu.vim
+++ b/runtime/makemenu.vim
@@ -1,6 +1,6 @@
" Script to define the syntax menu in synmenu.vim
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2018 May 17
+" Last Change: 2019 Dec 07
" This is used by "make menu" in the src directory.
edit <sfile>:p:h/synmenu.vim
@@ -101,6 +101,7 @@ SynMenu AB.AYacc:ayacc
SynMenu AB.B:b
SynMenu AB.Baan:baan
+SynMenu AB.Bash:bash
SynMenu AB.Basic.FreeBasic:freebasic
SynMenu AB.Basic.IBasic:ibasic
SynMenu AB.Basic.QBasic:basic
@@ -128,8 +129,9 @@ SynMenu C.Century\ Term:cterm
SynMenu C.CH\ script:ch
SynMenu C.ChaiScript:chaiscript
SynMenu C.ChangeLog:changelog
-SynMenu C.Cheetah\ template:cheetah
SynMenu C.CHILL:chill
+SynMenu C.Cheetah\ template:cheetah
+SynMenu C.Chicken:chicken
SynMenu C.ChordPro:chordpro
SynMenu C.Clean:clean
SynMenu C.Clever:cl
@@ -160,6 +162,7 @@ SynMenu C.Cyn++:cynpp
SynMenu C.Cynlib:cynlib
SynMenu DE.D:d
+SynMenu DE.Dart:dart
SynMenu DE.Datascript:datascript
SynMenu DE.Debian.Debian\ ChangeLog:debchangelog
SynMenu DE.Debian.Debian\ Control:debcontrol
@@ -192,12 +195,14 @@ SynMenu DE.DTD:dtd
SynMenu DE.DTML\ (Zope):dtml
SynMenu DE.DTrace:dtrace
SynMenu DE.Dts/dtsi:dts
+SynMenu DE.Dune:dune
SynMenu DE.Dylan.Dylan:dylan
SynMenu DE.Dylan.Dylan\ interface:dylanintr
SynMenu DE.Dylan.Dylan\ lid:dylanlid
SynMenu DE.EDIF:edif
SynMenu DE.Eiffel:eiffel
+SynMenu DE.Eight:8th
SynMenu DE.Elinks\ config:elinks
SynMenu DE.Elm\ filter\ rules:elmfilt
SynMenu DE.Embedix\ Component\ Description:ecd
@@ -307,6 +312,7 @@ SynMenu HIJK.Java.JavaCC:javacc
SynMenu HIJK.Java.Java\ Server\ Pages:jsp
SynMenu HIJK.Java.Java\ Properties:jproperties
SynMenu HIJK.JavaScript:javascript
+SynMenu HIJK.JavaScriptReact:javascriptreact
SynMenu HIJK.Jess:jess
SynMenu HIJK.Jgraph:jgraph
SynMenu HIJK.Jovial:jovial
@@ -365,6 +371,7 @@ SynMenu M.Mathematica:mma
SynMenu M.Matlab:matlab
SynMenu M.Maxima:maxima
SynMenu M.MEL\ (for\ Maya):mel
+SynMenu M.Meson:meson
SynMenu M.Messages\ (/var/log):messages
SynMenu M.Metafont:mf
SynMenu M.MetaPost:mp
@@ -467,6 +474,7 @@ SynMenu R.R.R\ help:rhelp
SynMenu R.R.R\ noweb:rnoweb
SynMenu R.Racc\ input:racc
SynMenu R.Radiance:radiance
+SynMenu R.Raml:raml
SynMenu R.Ratpoison:ratpoison
SynMenu R.RCS.RCS\ log\ output:rcslog
SynMenu R.RCS.RCS\ file:rcs
@@ -609,6 +617,8 @@ SynMenu T.Trustees:trustees
SynMenu T.TSS.Command\ Line:tsscl
SynMenu T.TSS.Geometry:tssgm
SynMenu T.TSS.Optics:tssop
+SynMenu T.Typescript:typescript
+SynMenu T.TypescriptReact:typescriptreact
SynMenu UV.Udev\ config:udevconf
SynMenu UV.Udev\ permissions:udevperm
@@ -637,6 +647,7 @@ SynMenu UV.VSE\ JCL:vsejcl
SynMenu WXYZ.WEB.CWEB:cweb
SynMenu WXYZ.WEB.WEB:web
SynMenu WXYZ.WEB.WEB\ Changes:change
+SynMenu WXYZ.WebAssembly:wast
SynMenu WXYZ.Webmacro:webmacro
SynMenu WXYZ.Website\ MetaLanguage:wml
SynMenu WXYZ.wDiff:wdiff
diff --git a/runtime/synmenu.vim b/runtime/synmenu.vim
index 70e0e83ba7..3367c68d3b 100644
--- a/runtime/synmenu.vim
+++ b/runtime/synmenu.vim
@@ -87,19 +87,20 @@ an 50.10.580 &Syntax.AB.Awk :cal SetSyn("awk")<CR>
an 50.10.590 &Syntax.AB.AYacc :cal SetSyn("ayacc")<CR>
an 50.10.610 &Syntax.AB.B :cal SetSyn("b")<CR>
an 50.10.620 &Syntax.AB.Baan :cal SetSyn("baan")<CR>
-an 50.10.630 &Syntax.AB.Basic.FreeBasic :cal SetSyn("freebasic")<CR>
-an 50.10.640 &Syntax.AB.Basic.IBasic :cal SetSyn("ibasic")<CR>
-an 50.10.650 &Syntax.AB.Basic.QBasic :cal SetSyn("basic")<CR>
-an 50.10.660 &Syntax.AB.Basic.Visual\ Basic :cal SetSyn("vb")<CR>
-an 50.10.670 &Syntax.AB.Bazaar\ commit\ file :cal SetSyn("bzr")<CR>
-an 50.10.680 &Syntax.AB.Bazel :cal SetSyn("bzl")<CR>
-an 50.10.690 &Syntax.AB.BC\ calculator :cal SetSyn("bc")<CR>
-an 50.10.700 &Syntax.AB.BDF\ font :cal SetSyn("bdf")<CR>
-an 50.10.710 &Syntax.AB.BibTeX.Bibliography\ database :cal SetSyn("bib")<CR>
-an 50.10.720 &Syntax.AB.BibTeX.Bibliography\ Style :cal SetSyn("bst")<CR>
-an 50.10.730 &Syntax.AB.BIND.BIND\ config :cal SetSyn("named")<CR>
-an 50.10.740 &Syntax.AB.BIND.BIND\ zone :cal SetSyn("bindzone")<CR>
-an 50.10.750 &Syntax.AB.Blank :cal SetSyn("blank")<CR>
+an 50.10.630 &Syntax.AB.Bash :cal SetSyn("bash")<CR>
+an 50.10.640 &Syntax.AB.Basic.FreeBasic :cal SetSyn("freebasic")<CR>
+an 50.10.650 &Syntax.AB.Basic.IBasic :cal SetSyn("ibasic")<CR>
+an 50.10.660 &Syntax.AB.Basic.QBasic :cal SetSyn("basic")<CR>
+an 50.10.670 &Syntax.AB.Basic.Visual\ Basic :cal SetSyn("vb")<CR>
+an 50.10.680 &Syntax.AB.Bazaar\ commit\ file :cal SetSyn("bzr")<CR>
+an 50.10.690 &Syntax.AB.Bazel :cal SetSyn("bzl")<CR>
+an 50.10.700 &Syntax.AB.BC\ calculator :cal SetSyn("bc")<CR>
+an 50.10.710 &Syntax.AB.BDF\ font :cal SetSyn("bdf")<CR>
+an 50.10.720 &Syntax.AB.BibTeX.Bibliography\ database :cal SetSyn("bib")<CR>
+an 50.10.730 &Syntax.AB.BibTeX.Bibliography\ Style :cal SetSyn("bst")<CR>
+an 50.10.740 &Syntax.AB.BIND.BIND\ config :cal SetSyn("named")<CR>
+an 50.10.750 &Syntax.AB.BIND.BIND\ zone :cal SetSyn("bindzone")<CR>
+an 50.10.760 &Syntax.AB.Blank :cal SetSyn("blank")<CR>
an 50.20.100 &Syntax.C.C :cal SetSyn("c")<CR>
an 50.20.110 &Syntax.C.C++ :cal SetSyn("cpp")<CR>
an 50.20.120 &Syntax.C.C# :cal SetSyn("cs")<CR>
@@ -113,89 +114,93 @@ an 50.20.190 &Syntax.C.Century\ Term :cal SetSyn("cterm")<CR>
an 50.20.200 &Syntax.C.CH\ script :cal SetSyn("ch")<CR>
an 50.20.210 &Syntax.C.ChaiScript :cal SetSyn("chaiscript")<CR>
an 50.20.220 &Syntax.C.ChangeLog :cal SetSyn("changelog")<CR>
-an 50.20.230 &Syntax.C.Cheetah\ template :cal SetSyn("cheetah")<CR>
-an 50.20.240 &Syntax.C.CHILL :cal SetSyn("chill")<CR>
-an 50.20.250 &Syntax.C.ChordPro :cal SetSyn("chordpro")<CR>
-an 50.20.260 &Syntax.C.Clean :cal SetSyn("clean")<CR>
-an 50.20.270 &Syntax.C.Clever :cal SetSyn("cl")<CR>
-an 50.20.280 &Syntax.C.Clipper :cal SetSyn("clipper")<CR>
-an 50.20.290 &Syntax.C.Clojure :cal SetSyn("clojure")<CR>
-an 50.20.300 &Syntax.C.Cmake :cal SetSyn("cmake")<CR>
-an 50.20.310 &Syntax.C.Cmod :cal SetSyn("cmod")<CR>
-an 50.20.320 &Syntax.C.Cmusrc :cal SetSyn("cmusrc")<CR>
-an 50.20.330 &Syntax.C.Cobol :cal SetSyn("cobol")<CR>
-an 50.20.340 &Syntax.C.Coco/R :cal SetSyn("coco")<CR>
-an 50.20.350 &Syntax.C.Cold\ Fusion :cal SetSyn("cf")<CR>
-an 50.20.360 &Syntax.C.Conary\ Recipe :cal SetSyn("conaryrecipe")<CR>
-an 50.20.370 &Syntax.C.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
-an 50.20.380 &Syntax.C.Config.Configure\.in :cal SetSyn("config")<CR>
-an 50.20.390 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
-an 50.20.400 &Syntax.C.CRM114 :cal SetSyn("crm")<CR>
-an 50.20.410 &Syntax.C.Crontab :cal SetSyn("crontab")<CR>
-an 50.20.420 &Syntax.C.CSDL :cal SetSyn("csdl")<CR>
-an 50.20.430 &Syntax.C.CSP :cal SetSyn("csp")<CR>
-an 50.20.440 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
-an 50.20.450 &Syntax.C.Cucumber :cal SetSyn("cucumber")<CR>
-an 50.20.460 &Syntax.C.CUDA :cal SetSyn("cuda")<CR>
-an 50.20.470 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
-an 50.20.480 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
-an 50.20.490 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
-an 50.20.500 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
-an 50.20.510 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
-an 50.20.520 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
+an 50.20.230 &Syntax.C.CHILL :cal SetSyn("chill")<CR>
+an 50.20.240 &Syntax.C.Cheetah\ template :cal SetSyn("cheetah")<CR>
+an 50.20.250 &Syntax.C.Chicken :cal SetSyn("chicken")<CR>
+an 50.20.260 &Syntax.C.ChordPro :cal SetSyn("chordpro")<CR>
+an 50.20.270 &Syntax.C.Clean :cal SetSyn("clean")<CR>
+an 50.20.280 &Syntax.C.Clever :cal SetSyn("cl")<CR>
+an 50.20.290 &Syntax.C.Clipper :cal SetSyn("clipper")<CR>
+an 50.20.300 &Syntax.C.Clojure :cal SetSyn("clojure")<CR>
+an 50.20.310 &Syntax.C.Cmake :cal SetSyn("cmake")<CR>
+an 50.20.320 &Syntax.C.Cmod :cal SetSyn("cmod")<CR>
+an 50.20.330 &Syntax.C.Cmusrc :cal SetSyn("cmusrc")<CR>
+an 50.20.340 &Syntax.C.Cobol :cal SetSyn("cobol")<CR>
+an 50.20.350 &Syntax.C.Coco/R :cal SetSyn("coco")<CR>
+an 50.20.360 &Syntax.C.Cold\ Fusion :cal SetSyn("cf")<CR>
+an 50.20.370 &Syntax.C.Conary\ Recipe :cal SetSyn("conaryrecipe")<CR>
+an 50.20.380 &Syntax.C.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
+an 50.20.390 &Syntax.C.Config.Configure\.in :cal SetSyn("config")<CR>
+an 50.20.400 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
+an 50.20.410 &Syntax.C.CRM114 :cal SetSyn("crm")<CR>
+an 50.20.420 &Syntax.C.Crontab :cal SetSyn("crontab")<CR>
+an 50.20.430 &Syntax.C.CSDL :cal SetSyn("csdl")<CR>
+an 50.20.440 &Syntax.C.CSP :cal SetSyn("csp")<CR>
+an 50.20.450 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
+an 50.20.460 &Syntax.C.Cucumber :cal SetSyn("cucumber")<CR>
+an 50.20.470 &Syntax.C.CUDA :cal SetSyn("cuda")<CR>
+an 50.20.480 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
+an 50.20.490 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
+an 50.20.500 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
+an 50.20.510 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
+an 50.20.520 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
+an 50.20.530 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
an 50.30.100 &Syntax.DE.D :cal SetSyn("d")<CR>
-an 50.30.110 &Syntax.DE.Datascript :cal SetSyn("datascript")<CR>
-an 50.30.120 &Syntax.DE.Debian.Debian\ ChangeLog :cal SetSyn("debchangelog")<CR>
-an 50.30.130 &Syntax.DE.Debian.Debian\ Control :cal SetSyn("debcontrol")<CR>
-an 50.30.140 &Syntax.DE.Debian.Debian\ Copyright :cal SetSyn("debcopyright")<CR>
-an 50.30.150 &Syntax.DE.Debian.Debian\ Sources\.list :cal SetSyn("debsources")<CR>
-an 50.30.160 &Syntax.DE.Denyhosts :cal SetSyn("denyhosts")<CR>
-an 50.30.170 &Syntax.DE.Desktop :cal SetSyn("desktop")<CR>
-an 50.30.180 &Syntax.DE.Dict\ config :cal SetSyn("dictconf")<CR>
-an 50.30.190 &Syntax.DE.Dictd\ config :cal SetSyn("dictdconf")<CR>
-an 50.30.200 &Syntax.DE.Diff :cal SetSyn("diff")<CR>
-an 50.30.210 &Syntax.DE.Digital\ Command\ Lang :cal SetSyn("dcl")<CR>
-an 50.30.220 &Syntax.DE.Dircolors :cal SetSyn("dircolors")<CR>
-an 50.30.230 &Syntax.DE.Dirpager :cal SetSyn("dirpager")<CR>
-an 50.30.240 &Syntax.DE.Django\ template :cal SetSyn("django")<CR>
-an 50.30.250 &Syntax.DE.DNS/BIND\ zone :cal SetSyn("bindzone")<CR>
-an 50.30.260 &Syntax.DE.Dnsmasq\ config :cal SetSyn("dnsmasq")<CR>
-an 50.30.270 &Syntax.DE.DocBook.auto-detect :cal SetSyn("docbk")<CR>
-an 50.30.280 &Syntax.DE.DocBook.SGML :cal SetSyn("docbksgml")<CR>
-an 50.30.290 &Syntax.DE.DocBook.XML :cal SetSyn("docbkxml")<CR>
-an 50.30.300 &Syntax.DE.Dockerfile :cal SetSyn("dockerfile")<CR>
-an 50.30.310 &Syntax.DE.Dot :cal SetSyn("dot")<CR>
-an 50.30.320 &Syntax.DE.Doxygen.C\ with\ doxygen :cal SetSyn("c.doxygen")<CR>
-an 50.30.330 &Syntax.DE.Doxygen.C++\ with\ doxygen :cal SetSyn("cpp.doxygen")<CR>
-an 50.30.340 &Syntax.DE.Doxygen.IDL\ with\ doxygen :cal SetSyn("idl.doxygen")<CR>
-an 50.30.350 &Syntax.DE.Doxygen.Java\ with\ doxygen :cal SetSyn("java.doxygen")<CR>
-an 50.30.360 &Syntax.DE.Doxygen.DataScript\ with\ doxygen :cal SetSyn("datascript.doxygen")<CR>
-an 50.30.370 &Syntax.DE.Dracula :cal SetSyn("dracula")<CR>
-an 50.30.380 &Syntax.DE.DSSSL :cal SetSyn("dsl")<CR>
-an 50.30.390 &Syntax.DE.DTD :cal SetSyn("dtd")<CR>
-an 50.30.400 &Syntax.DE.DTML\ (Zope) :cal SetSyn("dtml")<CR>
-an 50.30.410 &Syntax.DE.DTrace :cal SetSyn("dtrace")<CR>
-an 50.30.420 &Syntax.DE.Dts/dtsi :cal SetSyn("dts")<CR>
-an 50.30.430 &Syntax.DE.Dylan.Dylan :cal SetSyn("dylan")<CR>
-an 50.30.440 &Syntax.DE.Dylan.Dylan\ interface :cal SetSyn("dylanintr")<CR>
-an 50.30.450 &Syntax.DE.Dylan.Dylan\ lid :cal SetSyn("dylanlid")<CR>
-an 50.30.470 &Syntax.DE.EDIF :cal SetSyn("edif")<CR>
-an 50.30.480 &Syntax.DE.Eiffel :cal SetSyn("eiffel")<CR>
-an 50.30.490 &Syntax.DE.Elinks\ config :cal SetSyn("elinks")<CR>
-an 50.30.500 &Syntax.DE.Elm\ filter\ rules :cal SetSyn("elmfilt")<CR>
-an 50.30.510 &Syntax.DE.Embedix\ Component\ Description :cal SetSyn("ecd")<CR>
-an 50.30.520 &Syntax.DE.ERicsson\ LANGuage :cal SetSyn("erlang")<CR>
-an 50.30.530 &Syntax.DE.ESMTP\ rc :cal SetSyn("esmtprc")<CR>
-an 50.30.540 &Syntax.DE.ESQL-C :cal SetSyn("esqlc")<CR>
-an 50.30.550 &Syntax.DE.Essbase\ script :cal SetSyn("csc")<CR>
-an 50.30.560 &Syntax.DE.Esterel :cal SetSyn("esterel")<CR>
-an 50.30.570 &Syntax.DE.Eterm\ config :cal SetSyn("eterm")<CR>
-an 50.30.580 &Syntax.DE.Euphoria\ 3 :cal SetSyn("euphoria3")<CR>
-an 50.30.590 &Syntax.DE.Euphoria\ 4 :cal SetSyn("euphoria4")<CR>
-an 50.30.600 &Syntax.DE.Eviews :cal SetSyn("eviews")<CR>
-an 50.30.610 &Syntax.DE.Exim\ conf :cal SetSyn("exim")<CR>
-an 50.30.620 &Syntax.DE.Expect :cal SetSyn("expect")<CR>
-an 50.30.630 &Syntax.DE.Exports :cal SetSyn("exports")<CR>
+an 50.30.110 &Syntax.DE.Dart :cal SetSyn("dart")<CR>
+an 50.30.120 &Syntax.DE.Datascript :cal SetSyn("datascript")<CR>
+an 50.30.130 &Syntax.DE.Debian.Debian\ ChangeLog :cal SetSyn("debchangelog")<CR>
+an 50.30.140 &Syntax.DE.Debian.Debian\ Control :cal SetSyn("debcontrol")<CR>
+an 50.30.150 &Syntax.DE.Debian.Debian\ Copyright :cal SetSyn("debcopyright")<CR>
+an 50.30.160 &Syntax.DE.Debian.Debian\ Sources\.list :cal SetSyn("debsources")<CR>
+an 50.30.170 &Syntax.DE.Denyhosts :cal SetSyn("denyhosts")<CR>
+an 50.30.180 &Syntax.DE.Desktop :cal SetSyn("desktop")<CR>
+an 50.30.190 &Syntax.DE.Dict\ config :cal SetSyn("dictconf")<CR>
+an 50.30.200 &Syntax.DE.Dictd\ config :cal SetSyn("dictdconf")<CR>
+an 50.30.210 &Syntax.DE.Diff :cal SetSyn("diff")<CR>
+an 50.30.220 &Syntax.DE.Digital\ Command\ Lang :cal SetSyn("dcl")<CR>
+an 50.30.230 &Syntax.DE.Dircolors :cal SetSyn("dircolors")<CR>
+an 50.30.240 &Syntax.DE.Dirpager :cal SetSyn("dirpager")<CR>
+an 50.30.250 &Syntax.DE.Django\ template :cal SetSyn("django")<CR>
+an 50.30.260 &Syntax.DE.DNS/BIND\ zone :cal SetSyn("bindzone")<CR>
+an 50.30.270 &Syntax.DE.Dnsmasq\ config :cal SetSyn("dnsmasq")<CR>
+an 50.30.280 &Syntax.DE.DocBook.auto-detect :cal SetSyn("docbk")<CR>
+an 50.30.290 &Syntax.DE.DocBook.SGML :cal SetSyn("docbksgml")<CR>
+an 50.30.300 &Syntax.DE.DocBook.XML :cal SetSyn("docbkxml")<CR>
+an 50.30.310 &Syntax.DE.Dockerfile :cal SetSyn("dockerfile")<CR>
+an 50.30.320 &Syntax.DE.Dot :cal SetSyn("dot")<CR>
+an 50.30.330 &Syntax.DE.Doxygen.C\ with\ doxygen :cal SetSyn("c.doxygen")<CR>
+an 50.30.340 &Syntax.DE.Doxygen.C++\ with\ doxygen :cal SetSyn("cpp.doxygen")<CR>
+an 50.30.350 &Syntax.DE.Doxygen.IDL\ with\ doxygen :cal SetSyn("idl.doxygen")<CR>
+an 50.30.360 &Syntax.DE.Doxygen.Java\ with\ doxygen :cal SetSyn("java.doxygen")<CR>
+an 50.30.370 &Syntax.DE.Doxygen.DataScript\ with\ doxygen :cal SetSyn("datascript.doxygen")<CR>
+an 50.30.380 &Syntax.DE.Dracula :cal SetSyn("dracula")<CR>
+an 50.30.390 &Syntax.DE.DSSSL :cal SetSyn("dsl")<CR>
+an 50.30.400 &Syntax.DE.DTD :cal SetSyn("dtd")<CR>
+an 50.30.410 &Syntax.DE.DTML\ (Zope) :cal SetSyn("dtml")<CR>
+an 50.30.420 &Syntax.DE.DTrace :cal SetSyn("dtrace")<CR>
+an 50.30.430 &Syntax.DE.Dts/dtsi :cal SetSyn("dts")<CR>
+an 50.30.440 &Syntax.DE.Dune :cal SetSyn("dune")<CR>
+an 50.30.450 &Syntax.DE.Dylan.Dylan :cal SetSyn("dylan")<CR>
+an 50.30.460 &Syntax.DE.Dylan.Dylan\ interface :cal SetSyn("dylanintr")<CR>
+an 50.30.470 &Syntax.DE.Dylan.Dylan\ lid :cal SetSyn("dylanlid")<CR>
+an 50.30.490 &Syntax.DE.EDIF :cal SetSyn("edif")<CR>
+an 50.30.500 &Syntax.DE.Eiffel :cal SetSyn("eiffel")<CR>
+an 50.30.510 &Syntax.DE.Eight :cal SetSyn("8th")<CR>
+an 50.30.520 &Syntax.DE.Elinks\ config :cal SetSyn("elinks")<CR>
+an 50.30.530 &Syntax.DE.Elm\ filter\ rules :cal SetSyn("elmfilt")<CR>
+an 50.30.540 &Syntax.DE.Embedix\ Component\ Description :cal SetSyn("ecd")<CR>
+an 50.30.550 &Syntax.DE.ERicsson\ LANGuage :cal SetSyn("erlang")<CR>
+an 50.30.560 &Syntax.DE.ESMTP\ rc :cal SetSyn("esmtprc")<CR>
+an 50.30.570 &Syntax.DE.ESQL-C :cal SetSyn("esqlc")<CR>
+an 50.30.580 &Syntax.DE.Essbase\ script :cal SetSyn("csc")<CR>
+an 50.30.590 &Syntax.DE.Esterel :cal SetSyn("esterel")<CR>
+an 50.30.600 &Syntax.DE.Eterm\ config :cal SetSyn("eterm")<CR>
+an 50.30.610 &Syntax.DE.Euphoria\ 3 :cal SetSyn("euphoria3")<CR>
+an 50.30.620 &Syntax.DE.Euphoria\ 4 :cal SetSyn("euphoria4")<CR>
+an 50.30.630 &Syntax.DE.Eviews :cal SetSyn("eviews")<CR>
+an 50.30.640 &Syntax.DE.Exim\ conf :cal SetSyn("exim")<CR>
+an 50.30.650 &Syntax.DE.Expect :cal SetSyn("expect")<CR>
+an 50.30.660 &Syntax.DE.Exports :cal SetSyn("exports")<CR>
an 50.40.100 &Syntax.FG.Falcon :cal SetSyn("falcon")<CR>
an 50.40.110 &Syntax.FG.Fantom :cal SetSyn("fan")<CR>
an 50.40.120 &Syntax.FG.Fetchmail :cal SetSyn("fetchmail")<CR>
@@ -259,43 +264,44 @@ an 50.50.290 &Syntax.HIJK.HTML.XHTML :cal SetSyn("xhtml")<CR>
an 50.50.300 &Syntax.HIJK.Host\.conf :cal SetSyn("hostconf")<CR>
an 50.50.310 &Syntax.HIJK.Hosts\ access :cal SetSyn("hostsaccess")<CR>
an 50.50.320 &Syntax.HIJK.Hyper\ Builder :cal SetSyn("hb")<CR>
-an 50.50.330 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
-an 50.50.340 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
-an 50.50.350 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
-an 50.50.360 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
-an 50.50.370 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
-an 50.50.380 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
-an 50.50.390 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
-an 50.50.400 &Syntax.HIJK.Initng :cal SetSyn("initng")<CR>
-an 50.50.410 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
-an 50.50.420 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
-an 50.50.430 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ dat :cal SetSyn("upstreamdat")<CR>
-an 50.50.440 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ log :cal SetSyn("upstreamlog")<CR>
-an 50.50.450 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ rpt :cal SetSyn("upstreamrpt")<CR>
-an 50.50.460 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ Install\ log :cal SetSyn("upstreaminstalllog")<CR>
-an 50.50.470 &Syntax.HIJK.Innovation\ Data\ Processing.Usserver\ log :cal SetSyn("usserverlog")<CR>
-an 50.50.480 &Syntax.HIJK.Innovation\ Data\ Processing.USW2KAgt\ log :cal SetSyn("usw2kagtlog")<CR>
-an 50.50.490 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
-an 50.50.500 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
-an 50.50.510 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
-an 50.50.530 &Syntax.HIJK.J :cal SetSyn("j")<CR>
-an 50.50.540 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
-an 50.50.550 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
-an 50.50.560 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
-an 50.50.570 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
-an 50.50.580 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
-an 50.50.590 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
-an 50.50.600 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
-an 50.50.610 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
-an 50.50.620 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
-an 50.50.630 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
-an 50.50.640 &Syntax.HIJK.Jovial :cal SetSyn("jovial")<CR>
-an 50.50.650 &Syntax.HIJK.JSON :cal SetSyn("json")<CR>
-an 50.50.670 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
-an 50.50.680 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
-an 50.50.690 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
-an 50.50.700 &Syntax.HIJK.Kivy :cal SetSyn("kivy")<CR>
-an 50.50.710 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
+an 50.50.340 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
+an 50.50.350 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
+an 50.50.360 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
+an 50.50.370 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
+an 50.50.380 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
+an 50.50.390 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
+an 50.50.400 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
+an 50.50.410 &Syntax.HIJK.Initng :cal SetSyn("initng")<CR>
+an 50.50.420 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
+an 50.50.430 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
+an 50.50.440 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ dat :cal SetSyn("upstreamdat")<CR>
+an 50.50.450 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ log :cal SetSyn("upstreamlog")<CR>
+an 50.50.460 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ rpt :cal SetSyn("upstreamrpt")<CR>
+an 50.50.470 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ Install\ log :cal SetSyn("upstreaminstalllog")<CR>
+an 50.50.480 &Syntax.HIJK.Innovation\ Data\ Processing.Usserver\ log :cal SetSyn("usserverlog")<CR>
+an 50.50.490 &Syntax.HIJK.Innovation\ Data\ Processing.USW2KAgt\ log :cal SetSyn("usw2kagtlog")<CR>
+an 50.50.500 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
+an 50.50.510 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
+an 50.50.520 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
+an 50.50.540 &Syntax.HIJK.J :cal SetSyn("j")<CR>
+an 50.50.550 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
+an 50.50.560 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
+an 50.50.570 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
+an 50.50.580 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
+an 50.50.590 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
+an 50.50.600 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
+an 50.50.610 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
+an 50.50.620 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
+an 50.50.630 &Syntax.HIJK.JavaScriptReact :cal SetSyn("javascriptreact")<CR>
+an 50.50.640 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
+an 50.50.650 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
+an 50.50.660 &Syntax.HIJK.Jovial :cal SetSyn("jovial")<CR>
+an 50.50.670 &Syntax.HIJK.JSON :cal SetSyn("json")<CR>
+an 50.50.690 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
+an 50.50.700 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
+an 50.50.710 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
+an 50.50.720 &Syntax.HIJK.Kivy :cal SetSyn("kivy")<CR>
+an 50.50.730 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
an 50.60.100 &Syntax.L.Lace :cal SetSyn("lace")<CR>
an 50.60.110 &Syntax.L.LamdaProlog :cal SetSyn("lprolog")<CR>
an 50.60.120 &Syntax.L.Latte :cal SetSyn("latte")<CR>
@@ -343,34 +349,35 @@ an 50.70.240 &Syntax.M.Mathematica :cal SetSyn("mma")<CR>
an 50.70.250 &Syntax.M.Matlab :cal SetSyn("matlab")<CR>
an 50.70.260 &Syntax.M.Maxima :cal SetSyn("maxima")<CR>
an 50.70.270 &Syntax.M.MEL\ (for\ Maya) :cal SetSyn("mel")<CR>
-an 50.70.280 &Syntax.M.Messages\ (/var/log) :cal SetSyn("messages")<CR>
-an 50.70.290 &Syntax.M.Metafont :cal SetSyn("mf")<CR>
-an 50.70.300 &Syntax.M.MetaPost :cal SetSyn("mp")<CR>
-an 50.70.310 &Syntax.M.MGL :cal SetSyn("mgl")<CR>
-an 50.70.320 &Syntax.M.MIX :cal SetSyn("mix")<CR>
-an 50.70.330 &Syntax.M.MMIX :cal SetSyn("mmix")<CR>
-an 50.70.340 &Syntax.M.Modconf :cal SetSyn("modconf")<CR>
-an 50.70.350 &Syntax.M.Model :cal SetSyn("model")<CR>
-an 50.70.360 &Syntax.M.Modsim\ III :cal SetSyn("modsim3")<CR>
-an 50.70.370 &Syntax.M.Modula\ 2 :cal SetSyn("modula2")<CR>
-an 50.70.380 &Syntax.M.Modula\ 3 :cal SetSyn("modula3")<CR>
-an 50.70.390 &Syntax.M.Monk :cal SetSyn("monk")<CR>
-an 50.70.400 &Syntax.M.Motorola\ S-Record :cal SetSyn("srec")<CR>
-an 50.70.410 &Syntax.M.Mplayer\ config :cal SetSyn("mplayerconf")<CR>
-an 50.70.420 &Syntax.M.MOO :cal SetSyn("moo")<CR>
-an 50.70.430 &Syntax.M.Mrxvtrc :cal SetSyn("mrxvtrc")<CR>
-an 50.70.440 &Syntax.M.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR>
-an 50.70.450 &Syntax.M.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR>
-an 50.70.460 &Syntax.M.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR>
-an 50.70.470 &Syntax.M.MS-DOS/Windows.Message\ text :cal SetSyn("msmessages")<CR>
-an 50.70.480 &Syntax.M.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR>
-an 50.70.490 &Syntax.M.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR>
-an 50.70.500 &Syntax.M.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR>
-an 50.70.510 &Syntax.M.Msql :cal SetSyn("msql")<CR>
-an 50.70.520 &Syntax.M.MuPAD :cal SetSyn("mupad")<CR>
-an 50.70.530 &Syntax.M.Murphi :cal SetSyn("murphi")<CR>
-an 50.70.540 &Syntax.M.MUSHcode :cal SetSyn("mush")<CR>
-an 50.70.550 &Syntax.M.Muttrc :cal SetSyn("muttrc")<CR>
+an 50.70.280 &Syntax.M.Meson :cal SetSyn("meson")<CR>
+an 50.70.290 &Syntax.M.Messages\ (/var/log) :cal SetSyn("messages")<CR>
+an 50.70.300 &Syntax.M.Metafont :cal SetSyn("mf")<CR>
+an 50.70.310 &Syntax.M.MetaPost :cal SetSyn("mp")<CR>
+an 50.70.320 &Syntax.M.MGL :cal SetSyn("mgl")<CR>
+an 50.70.330 &Syntax.M.MIX :cal SetSyn("mix")<CR>
+an 50.70.340 &Syntax.M.MMIX :cal SetSyn("mmix")<CR>
+an 50.70.350 &Syntax.M.Modconf :cal SetSyn("modconf")<CR>
+an 50.70.360 &Syntax.M.Model :cal SetSyn("model")<CR>
+an 50.70.370 &Syntax.M.Modsim\ III :cal SetSyn("modsim3")<CR>
+an 50.70.380 &Syntax.M.Modula\ 2 :cal SetSyn("modula2")<CR>
+an 50.70.390 &Syntax.M.Modula\ 3 :cal SetSyn("modula3")<CR>
+an 50.70.400 &Syntax.M.Monk :cal SetSyn("monk")<CR>
+an 50.70.410 &Syntax.M.Motorola\ S-Record :cal SetSyn("srec")<CR>
+an 50.70.420 &Syntax.M.Mplayer\ config :cal SetSyn("mplayerconf")<CR>
+an 50.70.430 &Syntax.M.MOO :cal SetSyn("moo")<CR>
+an 50.70.440 &Syntax.M.Mrxvtrc :cal SetSyn("mrxvtrc")<CR>
+an 50.70.450 &Syntax.M.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR>
+an 50.70.460 &Syntax.M.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR>
+an 50.70.470 &Syntax.M.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR>
+an 50.70.480 &Syntax.M.MS-DOS/Windows.Message\ text :cal SetSyn("msmessages")<CR>
+an 50.70.490 &Syntax.M.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR>
+an 50.70.500 &Syntax.M.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR>
+an 50.70.510 &Syntax.M.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR>
+an 50.70.520 &Syntax.M.Msql :cal SetSyn("msql")<CR>
+an 50.70.530 &Syntax.M.MuPAD :cal SetSyn("mupad")<CR>
+an 50.70.540 &Syntax.M.Murphi :cal SetSyn("murphi")<CR>
+an 50.70.550 &Syntax.M.MUSHcode :cal SetSyn("mush")<CR>
+an 50.70.560 &Syntax.M.Muttrc :cal SetSyn("muttrc")<CR>
an 50.80.100 &Syntax.NO.N1QL :cal SetSyn("n1ql")<CR>
an 50.80.110 &Syntax.NO.Nanorc :cal SetSyn("nanorc")<CR>
an 50.80.120 &Syntax.NO.Nastran\ input/DMAP :cal SetSyn("nastran")<CR>
@@ -442,25 +449,26 @@ an 50.100.110 &Syntax.R.R.R\ help :cal SetSyn("rhelp")<CR>
an 50.100.120 &Syntax.R.R.R\ noweb :cal SetSyn("rnoweb")<CR>
an 50.100.130 &Syntax.R.Racc\ input :cal SetSyn("racc")<CR>
an 50.100.140 &Syntax.R.Radiance :cal SetSyn("radiance")<CR>
-an 50.100.150 &Syntax.R.Ratpoison :cal SetSyn("ratpoison")<CR>
-an 50.100.160 &Syntax.R.RCS.RCS\ log\ output :cal SetSyn("rcslog")<CR>
-an 50.100.170 &Syntax.R.RCS.RCS\ file :cal SetSyn("rcs")<CR>
-an 50.100.180 &Syntax.R.Readline\ config :cal SetSyn("readline")<CR>
-an 50.100.190 &Syntax.R.Rebol :cal SetSyn("rebol")<CR>
-an 50.100.200 &Syntax.R.ReDIF :cal SetSyn("redif")<CR>
-an 50.100.210 &Syntax.R.Relax\ NG :cal SetSyn("rng")<CR>
-an 50.100.220 &Syntax.R.Remind :cal SetSyn("remind")<CR>
-an 50.100.230 &Syntax.R.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
-an 50.100.240 &Syntax.R.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
-an 50.100.250 &Syntax.R.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
-an 50.100.260 &Syntax.R.Resolv\.conf :cal SetSyn("resolv")<CR>
-an 50.100.270 &Syntax.R.Reva\ Forth :cal SetSyn("reva")<CR>
-an 50.100.280 &Syntax.R.Rexx :cal SetSyn("rexx")<CR>
-an 50.100.290 &Syntax.R.Robots\.txt :cal SetSyn("robots")<CR>
-an 50.100.300 &Syntax.R.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
-an 50.100.310 &Syntax.R.Rpcgen :cal SetSyn("rpcgen")<CR>
-an 50.100.320 &Syntax.R.RPL/2 :cal SetSyn("rpl")<CR>
-an 50.100.330 &Syntax.R.ReStructuredText :cal SetSyn("rst")<CR>
+an 50.100.150 &Syntax.R.Raml :cal SetSyn("raml")<CR>
+an 50.100.160 &Syntax.R.Ratpoison :cal SetSyn("ratpoison")<CR>
+an 50.100.170 &Syntax.R.RCS.RCS\ log\ output :cal SetSyn("rcslog")<CR>
+an 50.100.180 &Syntax.R.RCS.RCS\ file :cal SetSyn("rcs")<CR>
+an 50.100.190 &Syntax.R.Readline\ config :cal SetSyn("readline")<CR>
+an 50.100.200 &Syntax.R.Rebol :cal SetSyn("rebol")<CR>
+an 50.100.210 &Syntax.R.ReDIF :cal SetSyn("redif")<CR>
+an 50.100.220 &Syntax.R.Relax\ NG :cal SetSyn("rng")<CR>
+an 50.100.230 &Syntax.R.Remind :cal SetSyn("remind")<CR>
+an 50.100.240 &Syntax.R.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
+an 50.100.250 &Syntax.R.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
+an 50.100.260 &Syntax.R.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
+an 50.100.270 &Syntax.R.Resolv\.conf :cal SetSyn("resolv")<CR>
+an 50.100.280 &Syntax.R.Reva\ Forth :cal SetSyn("reva")<CR>
+an 50.100.290 &Syntax.R.Rexx :cal SetSyn("rexx")<CR>
+an 50.100.300 &Syntax.R.Robots\.txt :cal SetSyn("robots")<CR>
+an 50.100.310 &Syntax.R.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
+an 50.100.320 &Syntax.R.Rpcgen :cal SetSyn("rpcgen")<CR>
+an 50.100.330 &Syntax.R.RPL/2 :cal SetSyn("rpl")<CR>
+an 50.100.340 &Syntax.R.ReStructuredText :cal SetSyn("rst")<CR>
an 50.110.100 &Syntax.M.ReStructuredText\ with\ R\ statements :cal SetSyn("rrst")<CR>
an 50.120.100 &Syntax.R.RTF :cal SetSyn("rtf")<CR>
an 50.120.110 &Syntax.R.Ruby :cal SetSyn("ruby")<CR>
@@ -581,6 +589,8 @@ an 50.150.370 &Syntax.T.Trustees :cal SetSyn("trustees")<CR>
an 50.150.380 &Syntax.T.TSS.Command\ Line :cal SetSyn("tsscl")<CR>
an 50.150.390 &Syntax.T.TSS.Geometry :cal SetSyn("tssgm")<CR>
an 50.150.400 &Syntax.T.TSS.Optics :cal SetSyn("tssop")<CR>
+an 50.150.410 &Syntax.T.Typescript :cal SetSyn("typescript")<CR>
+an 50.150.420 &Syntax.T.TypescriptReact :cal SetSyn("typescriptreact")<CR>
an 50.160.100 &Syntax.UV.Udev\ config :cal SetSyn("udevconf")<CR>
an 50.160.110 &Syntax.UV.Udev\ permissions :cal SetSyn("udevperm")<CR>
an 50.160.120 &Syntax.UV.Udev\ rules :cal SetSyn("udevrules")<CR>
@@ -607,32 +617,33 @@ an 50.160.330 &Syntax.UV.VSE\ JCL :cal SetSyn("vsejcl")<CR>
an 50.170.100 &Syntax.WXYZ.WEB.CWEB :cal SetSyn("cweb")<CR>
an 50.170.110 &Syntax.WXYZ.WEB.WEB :cal SetSyn("web")<CR>
an 50.170.120 &Syntax.WXYZ.WEB.WEB\ Changes :cal SetSyn("change")<CR>
-an 50.170.130 &Syntax.WXYZ.Webmacro :cal SetSyn("webmacro")<CR>
-an 50.170.140 &Syntax.WXYZ.Website\ MetaLanguage :cal SetSyn("wml")<CR>
-an 50.170.160 &Syntax.WXYZ.wDiff :cal SetSyn("wdiff")<CR>
-an 50.170.180 &Syntax.WXYZ.Wget\ config :cal SetSyn("wget")<CR>
-an 50.170.190 &Syntax.WXYZ.Whitespace\ (add) :cal SetSyn("whitespace")<CR>
-an 50.170.200 &Syntax.WXYZ.WildPackets\ EtherPeek\ Decoder :cal SetSyn("dcd")<CR>
-an 50.170.210 &Syntax.WXYZ.WinBatch/Webbatch :cal SetSyn("winbatch")<CR>
-an 50.170.220 &Syntax.WXYZ.Windows\ Scripting\ Host :cal SetSyn("wsh")<CR>
-an 50.170.230 &Syntax.WXYZ.WSML :cal SetSyn("wsml")<CR>
-an 50.170.240 &Syntax.WXYZ.WvDial :cal SetSyn("wvdial")<CR>
-an 50.170.260 &Syntax.WXYZ.X\ Keyboard\ Extension :cal SetSyn("xkb")<CR>
-an 50.170.270 &Syntax.WXYZ.X\ Pixmap :cal SetSyn("xpm")<CR>
-an 50.170.280 &Syntax.WXYZ.X\ Pixmap\ (2) :cal SetSyn("xpm2")<CR>
-an 50.170.290 &Syntax.WXYZ.X\ resources :cal SetSyn("xdefaults")<CR>
-an 50.170.300 &Syntax.WXYZ.XBL :cal SetSyn("xbl")<CR>
-an 50.170.310 &Syntax.WXYZ.Xinetd\.conf :cal SetSyn("xinetd")<CR>
-an 50.170.320 &Syntax.WXYZ.Xmodmap :cal SetSyn("xmodmap")<CR>
-an 50.170.330 &Syntax.WXYZ.Xmath :cal SetSyn("xmath")<CR>
-an 50.170.340 &Syntax.WXYZ.XML :cal SetSyn("xml")<CR>
-an 50.170.350 &Syntax.WXYZ.XML\ Schema\ (XSD) :cal SetSyn("xsd")<CR>
-an 50.170.360 &Syntax.WXYZ.XQuery :cal SetSyn("xquery")<CR>
-an 50.170.370 &Syntax.WXYZ.Xslt :cal SetSyn("xslt")<CR>
-an 50.170.380 &Syntax.WXYZ.XFree86\ Config :cal SetSyn("xf86conf")<CR>
-an 50.170.400 &Syntax.WXYZ.YAML :cal SetSyn("yaml")<CR>
-an 50.170.410 &Syntax.WXYZ.Yacc :cal SetSyn("yacc")<CR>
-an 50.170.430 &Syntax.WXYZ.Zimbu :cal SetSyn("zimbu")<CR>
+an 50.170.130 &Syntax.WXYZ.WebAssembly :cal SetSyn("wast")<CR>
+an 50.170.140 &Syntax.WXYZ.Webmacro :cal SetSyn("webmacro")<CR>
+an 50.170.150 &Syntax.WXYZ.Website\ MetaLanguage :cal SetSyn("wml")<CR>
+an 50.170.170 &Syntax.WXYZ.wDiff :cal SetSyn("wdiff")<CR>
+an 50.170.190 &Syntax.WXYZ.Wget\ config :cal SetSyn("wget")<CR>
+an 50.170.200 &Syntax.WXYZ.Whitespace\ (add) :cal SetSyn("whitespace")<CR>
+an 50.170.210 &Syntax.WXYZ.WildPackets\ EtherPeek\ Decoder :cal SetSyn("dcd")<CR>
+an 50.170.220 &Syntax.WXYZ.WinBatch/Webbatch :cal SetSyn("winbatch")<CR>
+an 50.170.230 &Syntax.WXYZ.Windows\ Scripting\ Host :cal SetSyn("wsh")<CR>
+an 50.170.240 &Syntax.WXYZ.WSML :cal SetSyn("wsml")<CR>
+an 50.170.250 &Syntax.WXYZ.WvDial :cal SetSyn("wvdial")<CR>
+an 50.170.270 &Syntax.WXYZ.X\ Keyboard\ Extension :cal SetSyn("xkb")<CR>
+an 50.170.280 &Syntax.WXYZ.X\ Pixmap :cal SetSyn("xpm")<CR>
+an 50.170.290 &Syntax.WXYZ.X\ Pixmap\ (2) :cal SetSyn("xpm2")<CR>
+an 50.170.300 &Syntax.WXYZ.X\ resources :cal SetSyn("xdefaults")<CR>
+an 50.170.310 &Syntax.WXYZ.XBL :cal SetSyn("xbl")<CR>
+an 50.170.320 &Syntax.WXYZ.Xinetd\.conf :cal SetSyn("xinetd")<CR>
+an 50.170.330 &Syntax.WXYZ.Xmodmap :cal SetSyn("xmodmap")<CR>
+an 50.170.340 &Syntax.WXYZ.Xmath :cal SetSyn("xmath")<CR>
+an 50.170.350 &Syntax.WXYZ.XML :cal SetSyn("xml")<CR>
+an 50.170.360 &Syntax.WXYZ.XML\ Schema\ (XSD) :cal SetSyn("xsd")<CR>
+an 50.170.370 &Syntax.WXYZ.XQuery :cal SetSyn("xquery")<CR>
+an 50.170.380 &Syntax.WXYZ.Xslt :cal SetSyn("xslt")<CR>
+an 50.170.390 &Syntax.WXYZ.XFree86\ Config :cal SetSyn("xf86conf")<CR>
+an 50.170.410 &Syntax.WXYZ.YAML :cal SetSyn("yaml")<CR>
+an 50.170.420 &Syntax.WXYZ.Yacc :cal SetSyn("yacc")<CR>
+an 50.170.440 &Syntax.WXYZ.Zimbu :cal SetSyn("zimbu")<CR>
" The End Of The Syntax Menu
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index b177fe641d..6f0818c845 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -558,7 +558,7 @@ syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
syn match vimHiGuiRgb contained "#\x\{6}"
" Highlighting: hi group key=arg ... {{{2
-syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
+syn cluster vimHiCluster contains=vimGroup,vimHiBlend,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
syn region vimHiKeyList contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||" contains=@vimHiCluster
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
syn match vimHiKeyError contained "\i\+="he=e-1
@@ -571,6 +571,7 @@ syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
syn match vimHiTermcap contained "\S\+" contains=vimNotation
+syn match vimHiBlend contained "\cblend="he=e-1 nextgroup=vimHiNmbr
syn match vimHiNmbr contained '\d\+'
" Highlight: clear {{{2
@@ -850,6 +851,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vimGroupSpecial Special
hi def link vimGroup Type
hi def link vimHiAttrib PreProc
+ hi def link vimHiBlend vimHiTerm
hi def link vimHiClear vimHighlight
hi def link vimHiCtermFgBg vimHiTerm
hi def link vimHiCTerm vimHiTerm
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index da3e74d3e7..218fdcf649 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -12,7 +12,7 @@ description: |
For lots more details, see the wiki!
grade: stable # must be 'stable' to release into candidate/stable channels
-confinement: classic
+confinement: devmode
apps:
nvim:
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index 73353f84cf..8065d764b9 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -878,7 +878,9 @@ static int command_line_execute(VimState *state, int key)
}
if (s->c == cedit_key || s->c == K_CMDWIN) {
- if (ex_normal_busy == 0 && got_int == false) {
+ // TODO(vim): why is ex_normal_busy checked here?
+ if ((s->c == K_CMDWIN || ex_normal_busy == 0)
+ && got_int == false) {
// Open a window to edit the command line (and history).
s->c = open_cmdwin();
s->some_key_typed = true;
diff --git a/src/nvim/generators/gen_declarations.lua b/src/nvim/generators/gen_declarations.lua
index ad44613f42..0782c8115d 100755
--- a/src/nvim/generators/gen_declarations.lua
+++ b/src/nvim/generators/gen_declarations.lua
@@ -207,9 +207,7 @@ preproc_f:close()
local header = [[
-#ifndef DEFINE_FUNC_ATTRIBUTES
-# define DEFINE_FUNC_ATTRIBUTES
-#endif
+#define DEFINE_FUNC_ATTRIBUTES
#include "nvim/func_attr.h"
#undef DEFINE_FUNC_ATTRIBUTES
]]
diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua
index 090869c68e..e7c5458102 100644
--- a/src/nvim/lua/vim.lua
+++ b/src/nvim/lua/vim.lua
@@ -374,9 +374,9 @@ do
if winnr == nil and type(k) == "number" then
return new_win_opt_accessor(k)
end
- return a.nvim_win_get_option(winnr or nil, k)
+ return a.nvim_win_get_option(winnr or 0, k)
end
- local function set(k, v) return a.nvim_win_set_option(winnr or nil, k, v) end
+ local function set(k, v) return a.nvim_win_set_option(winnr or 0, k, v) end
return make_meta_accessor(get, set)
end
vim.wo = new_win_opt_accessor(nil)
diff --git a/src/nvim/mark.c b/src/nvim/mark.c
index e5070f23ff..93bc497cf0 100644
--- a/src/nvim/mark.c
+++ b/src/nvim/mark.c
@@ -178,6 +178,16 @@ void setpcmark(void)
curwin->w_pcmark.lnum = 1;
}
+ if (jop_flags & JOP_STACK) {
+ // If we're somewhere in the middle of the jumplist discard everything
+ // after the current index.
+ if (curwin->w_jumplistidx < curwin->w_jumplistlen - 1) {
+ // Discard the rest of the jumplist by cutting the length down to
+ // contain nothing beyond the current index.
+ curwin->w_jumplistlen = curwin->w_jumplistidx + 1;
+ }
+ }
+
/* If jumplist is full: remove oldest entry */
if (++curwin->w_jumplistlen > JUMPLISTSIZE) {
curwin->w_jumplistlen = JUMPLISTSIZE;
@@ -1204,7 +1214,20 @@ void cleanup_jumplist(win_T *wp, bool checktail)
break;
}
}
- if (i >= wp->w_jumplistlen) { // no duplicate
+ bool mustfree;
+ if (i >= wp->w_jumplistlen) { // not duplicate
+ mustfree = false;
+ } else if (i > from + 1) { // non-adjacent duplicate
+ // When the jump options include "stack", duplicates are only removed from
+ // the jumplist when they are adjacent.
+ mustfree = !(jop_flags & JOP_STACK);
+ } else { // adjacent duplicate
+ mustfree = true;
+ }
+
+ if (mustfree) {
+ xfree(wp->w_jumplist[from].fname);
+ } else {
if (to != from) {
// Not using wp->w_jumplist[to++] = wp->w_jumplist[from] because
// this way valgrind complains about overlapping source and destination
@@ -1212,8 +1235,6 @@ void cleanup_jumplist(win_T *wp, bool checktail)
wp->w_jumplist[to] = wp->w_jumplist[from];
}
to++;
- } else {
- xfree(wp->w_jumplist[from].fname);
}
}
if (wp->w_jumplistidx == wp->w_jumplistlen) {
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 03cbe8ec18..067f1c3283 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -1378,7 +1378,7 @@ static void msg_home_replace_attr(char_u *fname, int attr)
/*
* Output 'len' characters in 'str' (including NULs) with translation
- * if 'len' is -1, output upto a NUL character.
+ * if 'len' is -1, output up to a NUL character.
* Use attributes 'attr'.
* Return the number of characters it takes on the screen.
*/
@@ -1501,7 +1501,7 @@ void msg_make(char_u *arg)
}
}
-/// Output the string 'str' upto a NUL character.
+/// Output the string 'str' up to a NUL character.
/// Return the number of characters it takes on the screen.
///
/// If K_SPECIAL is encountered, then it is taken in conjunction with the
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 68ab310329..e48ed201e8 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -2184,6 +2184,7 @@ static void didset_options(void)
(void)opt_strings_flags(p_tc, p_tc_values, &tc_flags, false);
(void)opt_strings_flags(p_ve, p_ve_values, &ve_flags, true);
(void)opt_strings_flags(p_wop, p_wop_values, &wop_flags, true);
+ (void)opt_strings_flags(p_jop, p_jop_values, &jop_flags, true);
(void)spell_check_msm();
(void)spell_check_sps();
(void)compile_cap_prog(curwin->w_s);
@@ -2632,6 +2633,10 @@ did_set_string_option(
if (strcmp((char *)(*varp), HIGHLIGHT_INIT) != 0) {
errmsg = e_unsupportedoption;
}
+ } else if (varp == &p_jop) { // 'jumpoptions'
+ if (opt_strings_flags(p_jop, p_jop_values, &jop_flags, true) != OK) {
+ errmsg = e_invarg;
+ }
} else if (gvarp == &p_nf) { // 'nrformats'
if (check_opt_strings(*varp, p_nf_values, true) != OK) {
errmsg = e_invarg;
diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h
index c6e3f71016..4f9f32794b 100644
--- a/src/nvim/option_defs.h
+++ b/src/nvim/option_defs.h
@@ -473,6 +473,12 @@ EXTERN char_u *p_isf; // 'isfname'
EXTERN char_u *p_isi; // 'isident'
EXTERN char_u *p_isp; // 'isprint'
EXTERN int p_js; // 'joinspaces'
+EXTERN char_u *p_jop; // 'jumpooptions'
+EXTERN unsigned jop_flags;
+#ifdef IN_OPTION_C
+static char *(p_jop_values[]) = { "stack", NULL };
+#endif
+#define JOP_STACK 0x01
EXTERN char_u *p_kp; // 'keywordprg'
EXTERN char_u *p_km; // 'keymodel'
EXTERN char_u *p_langmap; // 'langmap'
diff --git a/src/nvim/options.lua b/src/nvim/options.lua
index 0aa367e059..93bfc1c0b1 100644
--- a/src/nvim/options.lua
+++ b/src/nvim/options.lua
@@ -1300,6 +1300,14 @@ return {
defaults={if_true={vi=true}}
},
{
+ full_name='jumpoptions', abbreviation='jop',
+ type='string', list='onecomma', scope={'global'},
+ deny_duplicates=true,
+ varname='p_jop',
+ vim=true,
+ defaults={if_true={vim=''}}
+ },
+ {
full_name='keymap', abbreviation='kmp',
type='string', scope={'buffer'},
normal_fname_chars=true,
@@ -2325,9 +2333,9 @@ return {
full_name='startofline', abbreviation='sol',
type='bool', scope={'global'},
vi_def=true,
- vim=true,
+ vim=false,
varname='p_sol',
- defaults={if_true={vi=true}}
+ defaults={if_true={vi=false}}
},
{
full_name='statusline', abbreviation='stl',
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index 6bf070a7e2..b470dbf8f6 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -15,7 +15,6 @@ export TMPDIR := $(abspath Xtest-tmpdir)
SCRIPTS_DEFAULT = \
test42.out \
- test48.out \
test64.out \
ifneq ($(OS),Windows_NT)
diff --git a/src/nvim/testdir/setup.vim b/src/nvim/testdir/setup.vim
index ea28f328ae..d032c9a739 100644
--- a/src/nvim/testdir/setup.vim
+++ b/src/nvim/testdir/setup.vim
@@ -19,6 +19,7 @@ set sidescroll=0
set tags=./tags,tags
set undodir^=.
set wildoptions=
+set startofline
" Prevent Nvim log from writing to stderr.
let $NVIM_LOG_FILE = exists($NVIM_LOG_FILE) ? $NVIM_LOG_FILE : 'Xnvim.log'
diff --git a/src/nvim/testdir/shared.vim b/src/nvim/testdir/shared.vim
index b0b59db686..3875ffc056 100644
--- a/src/nvim/testdir/shared.vim
+++ b/src/nvim/testdir/shared.vim
@@ -314,6 +314,9 @@ func RunVimPiped(before, after, arguments, pipecmd)
let args .= ' -S Xafter.vim'
endif
+ " Optionally run Vim under valgrind
+ " let cmd = 'valgrind --tool=memcheck --leak-check=yes --num-callers=25 --log-file=valgrind ' . cmd
+
exe "silent !" . a:pipecmd . cmd . args . ' ' . a:arguments
if len(a:before) > 0
diff --git a/src/nvim/testdir/test48.in b/src/nvim/testdir/test48.in
deleted file mode 100644
index 1df5a3c46a..0000000000
--- a/src/nvim/testdir/test48.in
+++ /dev/null
@@ -1,82 +0,0 @@
-This is a test of 'virtualedit'.
-
-STARTTEST
-:set noswf
-:set ve=all
-j-dgg
-:"
-:" Insert "keyword keyw", ESC, C CTRL-N, shows "keyword ykeyword".
-:" Repeating CTRL-N fixes it. (Mary Ellen Foster)
-2/w
-C
-:"
-:" Using "C" then then <CR> moves the last remaining character to the next
-:" line. (Mary Ellen Foster)
-j^/are
-C are belong to vim
-:"
-:" When past the end of a line that ends in a single character "b" skips
-:" that word.
-^$15lbC7
-:"
-:" Make sure 'i' works
-$4li<-- should be 3 ' '
-:"
-:" Make sure 'C' works
-$4lC<-- should be 3 ' '
-:"
-:" Make sure 'a' works
-$4la<-- should be 4 ' '
-:"
-:" Make sure 'A' works
-$4lA<-- should be 0 ' '
-:"
-:" Make sure 'D' works
-$4lDi<-- 'D' should be intact
-:"
-:" Test for yank bug reported by Mark Waggoner.
-:set ve=block
-^2w3jyGp
-:"
-:" Test "r" beyond the end of the line
-:set ve=all
-/^"r"
-$5lrxa<-- should be 'x'
-:"
-:" Test "r" on a tab
-:" Note that for this test, 'ts' must be 8 (the default).
-^5lrxA<-- should be ' x '
-:"
-:" Test to make sure 'x' can delete control characters
-:set display=uhex
-^xxxxxxi[This line should contain only the text between the brackets.]
-:set display=
-:"
-:" Test for ^Y/^E due to bad w_virtcol value, reported by
-:" Roy <royl@netropolis.net>.
-^O3li4li4li <-- should show the name of a noted text editor
-^o4li4li4li <-- and its version number-dd
-:"
-:" Test for yanking and pasting using the small delete register
-gg/^foo
-dewve"-p
-:wq! test.out
-ENDTEST
-foo, bar
-keyword keyw
-all your base are belong to us
-1 2 3 4 5 6
-'i'
-'C'
-'a'
-'A'
-'D'
-this is a test
-this is a test
-this is a test
-"r"
-"r"
-ab sd
-abcv6efi.him0kl
-
-
diff --git a/src/nvim/testdir/test48.ok b/src/nvim/testdir/test48.ok
deleted file mode 100644
index 14cd9b12ec..0000000000
--- a/src/nvim/testdir/test48.ok
+++ /dev/null
@@ -1,23 +0,0 @@
-, foo
-keyword keyword
-all your base
-are belong to vim
-1 2 3 4 5 7
-'i' <-- should be 3 ' '
-'C' <-- should be 3 ' '
-'a' <-- should be 4 ' '
-'A'<-- should be 0 ' '
-'D' <-- 'D' should be intact
-this is a test
-this is a test
-this is a test
-"r" x<-- should be 'x'
-"r" x <-- should be ' x '
-[This line should contain only the text between the brackets.]
- v i m <-- should show the name of a noted text editor
- 6 . 0 <-- and its version number
-
-a
-a
-a
-
diff --git a/src/nvim/testdir/test49.vim b/src/nvim/testdir/test49.vim
index 837e55ebca..fc79f57d2e 100644
--- a/src/nvim/testdir/test49.vim
+++ b/src/nvim/testdir/test49.vim
@@ -178,7 +178,7 @@ endif
" next Xpath value. No new Xnext value is prepared. The argument
" should be 2^(n-1) for the nth Xloop command inside the loop.
" If the loop has only one Xloop command, the argument can be
-" ommitted (default: 1).
+" omitted (default: 1).
"
" - Use XloopNEXT before ":continue" and ":endwhile". This computes a new
" Xnext value for the next execution of the loop by multiplying the old
diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim
index 262ea11eb6..9c3c33a943 100644
--- a/src/nvim/testdir/test_cmdline.vim
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -750,3 +750,8 @@ func Test_cmdline_overstrike()
let &encoding = encoding_save
endfunc
+
+func Test_cmdwin_feedkeys()
+ " This should not generate E488
+ call feedkeys("q:\<CR>", 'x')
+endfunc
diff --git a/src/nvim/testdir/test_virtualedit.vim b/src/nvim/testdir/test_virtualedit.vim
index 1e6b26a057..8f992f7501 100644
--- a/src/nvim/testdir/test_virtualedit.vim
+++ b/src/nvim/testdir/test_virtualedit.vim
@@ -82,3 +82,138 @@ func Test_edit_change()
call assert_equal('x', getline(1))
bwipe!
endfunc
+
+" Insert "keyword keyw", ESC, C CTRL-N, shows "keyword ykeyword".
+" Repeating CTRL-N fixes it. (Mary Ellen Foster)
+func Test_ve_completion()
+ new
+ set completeopt&vim
+ set virtualedit=all
+ exe "normal ikeyword keyw\<Esc>C\<C-N>"
+ call assert_equal('keyword keyword', getline(1))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" Using "C" then then <CR> moves the last remaining character to the next
+" line. (Mary Ellen Foster)
+func Test_ve_del_to_eol()
+ new
+ set virtualedit=all
+ call append(0, 'all your base are belong to us')
+ call search('are', 'w')
+ exe "normal C\<CR>are belong to vim"
+ call assert_equal(['all your base ', 'are belong to vim'], getline(1, 2))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" When past the end of a line that ends in a single character "b" skips
+" that word.
+func Test_ve_b_past_eol()
+ new
+ set virtualedit=all
+ call append(0, '1 2 3 4 5 6')
+ normal gg^$15lbC7
+ call assert_equal('1 2 3 4 5 7', getline(1))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" Make sure 'i', 'C', 'a', 'A' and 'D' works
+func Test_ve_ins_del()
+ new
+ set virtualedit=all
+ call append(0, ["'i'", "'C'", "'a'", "'A'", "'D'"])
+ call cursor(1, 1)
+ normal $4lix
+ call assert_equal("'i' x", getline(1))
+ call cursor(2, 1)
+ normal $4lCx
+ call assert_equal("'C' x", getline(2))
+ call cursor(3, 1)
+ normal $4lax
+ call assert_equal("'a' x", getline(3))
+ call cursor(4, 1)
+ normal $4lAx
+ call assert_equal("'A'x", getline(4))
+ call cursor(5, 1)
+ normal $4lDix
+ call assert_equal("'D' x", getline(5))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" Test for yank bug reported by Mark Waggoner.
+func Test_yank_block()
+ new
+ set virtualedit=block
+ call append(0, repeat(['this is a test'], 3))
+ exe "normal gg^2w\<C-V>3jy"
+ call assert_equal("a\na\na\n ", @")
+ bwipe!
+ set virtualedit=
+endfunc
+
+" Test "r" beyond the end of the line
+func Test_replace_after_eol()
+ new
+ set virtualedit=all
+ call append(0, '"r"')
+ normal gg$5lrxa
+ call assert_equal('"r" x', getline(1))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" Test "r" on a tab
+" Note that for this test, 'ts' must be 8 (the default).
+func Test_replace_on_tab()
+ new
+ set virtualedit=all
+ call append(0, "'r'\t")
+ normal gg^5lrxAy
+ call assert_equal("'r' x y", getline(1))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" Test to make sure 'x' can delete control characters
+func Test_ve_del_ctrl_chars()
+ new
+ set virtualedit=all
+ call append(0, "a\<C-V>b\<CR>sd")
+ set display=uhex
+ normal gg^xxxxxxi[text]
+ set display=
+ call assert_equal('[text]', getline(1))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" Test for ^Y/^E due to bad w_virtcol value, reported by
+" Roy <royl@netropolis.net>.
+func Test_ins_copy_char()
+ new
+ set virtualedit=all
+ call append(0, 'abcv8efi.him2kl')
+ exe "normal gg^O\<Esc>3li\<C-E>\<Esc>4li\<C-E>\<Esc>4li\<C-E> <--"
+ exe "normal j^o\<Esc>4li\<C-Y>\<Esc>4li\<C-Y>\<Esc>4li\<C-Y> <--"
+ call assert_equal(' v i m <--', getline(1))
+ call assert_equal(' 8 . 2 <--', getline(3))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" Test for yanking and pasting using the small delete register
+func Test_yank_paste_small_del_reg()
+ new
+ set virtualedit=all
+ call append(0, "foo, bar")
+ normal ggdewve"-p
+ call assert_equal(', foo', getline(1))
+ bwipe!
+ set virtualedit=
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/nvim/version.c b/src/nvim/version.c
index f678b743c2..4cadc9fd6c 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -125,7 +125,7 @@ static const int included_patches[] = {
1796,
1795,
// 1794,
- // 1793,
+ 1793,
1792,
1791,
1790,
@@ -469,7 +469,7 @@ static const int included_patches[] = {
1452,
1451,
1450,
- // 1449,
+ 1449,
1448,
1447,
1446,
@@ -513,7 +513,7 @@ static const int included_patches[] = {
1408,
1407,
1406,
- // 1405,
+ 1405,
1404,
1403,
1402,
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
index 77d4b573fc..eead1ea3e0 100644
--- a/test/functional/helpers.lua
+++ b/test/functional/helpers.lua
@@ -35,7 +35,7 @@ module.nvim_prog = (
)
-- Default settings for the test session.
module.nvim_set = (
- 'set shortmess+=IS background=light noswapfile noautoindent'
+ 'set shortmess+=IS background=light noswapfile noautoindent startofline'
..' laststatus=1 undodir=. directory=. viewdir=. backupdir=.'
..' belloff= wildoptions-=pum noshowcmd noruler nomore redrawdebug=invalid')
module.nvim_argv = {
diff --git a/test/functional/legacy/breakindent_spec.lua b/test/functional/legacy/breakindent_spec.lua
deleted file mode 100644
index fd25e809e0..0000000000
--- a/test/functional/legacy/breakindent_spec.lua
+++ /dev/null
@@ -1,214 +0,0 @@
--- Test for breakindent
-
-local helpers = require('test.functional.helpers')(after_each)
-local feed, insert = helpers.feed, helpers.insert
-local clear, feed_command, expect = helpers.clear, helpers.feed_command, helpers.expect
-
-describe('breakindent', function()
- setup(clear)
-
- -- luacheck: ignore 621 (Indentation)
- -- luacheck: ignore 613 (Trailing whitespace in a string)
- -- luacheck: ignore 611 (Line contains only whitespaces)
- it('is working', function()
- insert('dummy text')
-
- feed_command('set wildchar=^E')
- feed_command('10new')
- feed_command('vsp')
- feed_command('vert resize 20')
- feed_command([[put =\"\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP\"]])
- feed_command('set ts=4 sw=4 sts=4 breakindent')
- feed_command('fu! ScreenChar(line, width)')
- feed_command(' let c=""')
- feed_command(' for i in range(1,a:width)')
- feed_command(' let c.=nr2char(screenchar(a:line, i))')
- feed_command(' endfor')
- feed_command([[ let c.="\n"]])
- feed_command(' for i in range(1,a:width)')
- feed_command(' let c.=nr2char(screenchar(a:line+1, i))')
- feed_command(' endfor')
- feed_command([[ let c.="\n"]])
- feed_command(' for i in range(1,a:width)')
- feed_command(' let c.=nr2char(screenchar(a:line+2, i))')
- feed_command(' endfor')
- feed_command(' return c')
- feed_command('endfu')
- feed_command('fu DoRecordScreen()')
- feed_command(' wincmd l')
- feed_command([[ $put =printf(\"\n%s\", g:test)]])
- feed_command(' $put =g:line1')
- feed_command(' wincmd p')
- feed_command('endfu')
- feed_command('set briopt=min:0')
- feed_command('let g:test="Test 1: Simple breakindent"')
- feed_command('let line1=ScreenChar(line("."),8)')
- feed_command('call DoRecordScreen()')
- feed_command('let g:test="Test 2: Simple breakindent + sbr=>>"')
- feed_command('set sbr=>>')
- feed_command('let line1=ScreenChar(line("."),8)')
- feed_command('call DoRecordScreen()')
- feed_command('let g:test ="Test 3: Simple breakindent + briopt:sbr"')
- feed_command('set briopt=sbr,min:0 sbr=++')
- feed_command('let line1=ScreenChar(line("."),8)')
- feed_command('call DoRecordScreen()')
- feed_command('let g:test ="Test 4: Simple breakindent + min width: 18"')
- feed_command('set sbr= briopt=min:18')
- feed_command('let line1=ScreenChar(line("."),8)')
- feed_command('call DoRecordScreen()')
- feed_command('let g:test =" Test 5: Simple breakindent + shift by 2"')
- feed_command('set briopt=shift:2,min:0')
- feed_command('let line1=ScreenChar(line("."),8)')
- feed_command('call DoRecordScreen()')
- feed_command('let g:test=" Test 6: Simple breakindent + shift by -1"')
- feed_command('set briopt=shift:-1,min:0')
- feed_command('let line1=ScreenChar(line("."),8)')
- feed_command('call DoRecordScreen()')
- feed_command('let g:test=" Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr"')
- feed_command('set briopt=shift:1,sbr,min:0 nu sbr=? nuw=4')
- feed_command('let line1=ScreenChar(line("."),10)')
- feed_command('call DoRecordScreen()')
- feed_command('let g:test=" Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr"')
- feed_command('set briopt=shift:1,sbr,min:0 nu sbr=# list lcs&vi')
- feed_command('let line1=ScreenChar(line("."),10)')
- feed_command('call DoRecordScreen()')
- feed_command([[let g:test=" Test 9: breakindent + shift by +1 + 'nu' + sbr=# list"]])
- feed_command('set briopt-=sbr')
- feed_command('let line1=ScreenChar(line("."),10)')
- feed_command('call DoRecordScreen()')
- feed_command([[let g:test=" Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n"]])
- feed_command('set cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0')
- feed_command('let line1=ScreenChar(line("."),10)')
- feed_command('call DoRecordScreen()')
- feed_command('wincmd p')
- feed_command([[let g:test="\n Test 11: strdisplaywidth when breakindent is on"]])
- feed_command('set cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4')
- -- Skip leading tab when calculating text width.
- feed_command('let text=getline(2)')
- -- Text wraps 3 times.
- feed_command('let width = strlen(text[1:])+indent(2)*4+strlen(&sbr)*3')
- feed_command('$put =g:test')
- feed_command([[$put =printf(\"strdisplaywidth: %d == calculated: %d\", strdisplaywidth(text), width)]])
- feed_command([[let g:str="\t\t\t\t\t{"]])
- feed_command('let g:test=" Test 12: breakindent + long indent"')
- feed_command('wincmd p')
- feed_command('set all& breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4')
- feed_command('$put =g:str')
- feed('zt')
- feed_command('let line1=ScreenChar(1,10)')
- feed_command('wincmd p')
- feed_command('call DoRecordScreen()')
-
- -- Test, that the string " a\tb\tc\td\te" is correctly displayed in a
- -- 20 column wide window (see bug report
- -- https://groups.google.com/d/msg/vim_dev/ZOdg2mc9c9Y/TT8EhFjEy0IJ ).
- feed_command('only')
- feed_command('vert 20new')
- feed_command('set all& breakindent briopt=min:10')
- feed_command([[call setline(1, [" a\tb\tc\td\te", " z y x w v"])]])
- feed_command([[/^\s*a]])
- feed('fbgjyl')
- feed_command('let line1 = @0')
- feed_command([[?^\s*z]])
- feed('fygjyl')
- feed_command('let line2 = @0')
- feed_command('quit!')
- feed_command([[$put ='Test 13: breakindent with wrapping Tab']])
- feed_command('$put =line1')
- feed_command('$put =line2')
-
- feed_command('let g:test="Test 14: breakindent + visual blockwise delete #1"')
- feed_command('set all& breakindent shada+=nX-test-breakindent.shada')
- feed_command('30vnew')
- feed_command('normal! 3a1234567890')
- feed_command('normal! a abcde')
- feed_command([[exec "normal! 0\<C-V>tex"]])
- feed_command('let line1=ScreenChar(line("."),8)')
- feed_command('call DoRecordScreen()')
-
- feed_command('let g:test="Test 15: breakindent + visual blockwise delete #2"')
- feed_command('%d')
- feed_command('normal! 4a1234567890')
- feed_command([[exec "normal! >>\<C-V>3f0x"]])
- feed_command('let line1=ScreenChar(line("."),20)')
- feed_command('call DoRecordScreen()')
- feed_command('quit!')
-
- -- Assert buffer contents.
- expect([[
-
- abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP
-
- Test 1: Simple breakindent
- abcd
- qrst
- GHIJ
-
- Test 2: Simple breakindent + sbr=>>
- abcd
- >>qr
- >>EF
-
- Test 3: Simple breakindent + briopt:sbr
- abcd
- ++ qrst
- ++ GHIJ
-
- Test 4: Simple breakindent + min width: 18
- abcd
- qrstuv
- IJKLMN
-
- Test 5: Simple breakindent + shift by 2
- abcd
- qr
- EF
-
- Test 6: Simple breakindent + shift by -1
- abcd
- qrstu
- HIJKL
-
- Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr
- 2 ab
- ? m
- ? x
-
- Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr
- 2 ^Iabcd
- # opq
- # BCD
-
- Test 9: breakindent + shift by +1 + 'nu' + sbr=# list
- 2 ^Iabcd
- #op
- #AB
-
- Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n
- 2 ab
- ~ mn
- ~ yz
-
- Test 11: strdisplaywidth when breakindent is on
- strdisplaywidth: 46 == calculated: 64
- {
-
- Test 12: breakindent + long indent
- 56
-
- ~
- Test 13: breakindent with wrapping Tab
- d
- w
-
- Test 14: breakindent + visual blockwise delete #1
- e
- ~
- ~
-
- Test 15: breakindent + visual blockwise delete #2
- 1234567890
- ~
- ~ ]])
- end)
-end)
diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua
index 22c975147f..17ffcd8d86 100644
--- a/test/functional/lua/vim_spec.lua
+++ b/test/functional/lua/vim_spec.lua
@@ -629,22 +629,27 @@ describe('lua stdlib', function()
end)
it('vim.wo', function()
- eq('', funcs.luaeval "vim.bo.filetype")
exec_lua [[
vim.api.nvim_win_set_option(0, "cole", 2)
- BUF = vim.api.nvim_create_buf(false, true)
- vim.api.nvim_buf_set_option(BUF, "modifiable", false)
+ vim.cmd "split"
+ vim.api.nvim_win_set_option(0, "cole", 2)
]]
eq(2, funcs.luaeval "vim.wo.cole")
exec_lua [[
vim.wo.conceallevel = 0
- vim.bo[BUF].modifiable = true
]]
eq(0, funcs.luaeval "vim.wo.cole")
+ eq(0, funcs.luaeval "vim.wo[0].cole")
+ eq(0, funcs.luaeval "vim.wo[1001].cole")
matches("^Error executing lua: .*: Invalid option name: 'notanopt'$",
pcall_err(exec_lua, 'return vim.wo.notanopt'))
matches("^Error executing lua: .*: Expected lua string$",
pcall_err(exec_lua, 'return vim.wo[0][0].list'))
+ eq(2, funcs.luaeval "vim.wo[1000].cole")
+ exec_lua [[
+ vim.wo[1000].cole = 0
+ ]]
+ eq(0, funcs.luaeval "vim.wo[1000].cole")
end)
it('vim.cmd', function()
diff --git a/test/functional/normal/jump_spec.lua b/test/functional/normal/jump_spec.lua
index 5bed541752..d53b5f7415 100644
--- a/test/functional/normal/jump_spec.lua
+++ b/test/functional/normal/jump_spec.lua
@@ -5,6 +5,7 @@ local command = helpers.command
local eq = helpers.eq
local funcs = helpers.funcs
local feed = helpers.feed
+local redir_exec = helpers.redir_exec
local write_file = helpers.write_file
describe('jumplist', function()
@@ -46,3 +47,93 @@ describe('jumplist', function()
eq(buf1, funcs.bufnr('%'))
end)
end)
+
+describe('jumpoptions=stack behaves like browser history', function()
+ before_each(function()
+ clear()
+ feed(':clearjumps<cr>')
+
+ -- Add lines so that we have locations to jump to.
+ for i = 1,101,1
+ do
+ feed('iLine ' .. i .. '<cr><esc>')
+ end
+
+ -- Jump around to add some locations to the jump list.
+ feed('0gg')
+ feed('10gg')
+ feed('20gg')
+ feed('30gg')
+ feed('40gg')
+ feed('50gg')
+
+ feed(':set jumpoptions=stack<cr>')
+ end)
+
+ after_each(function()
+ feed('set jumpoptions=')
+ end)
+
+ it('discards the tail when navigating from the middle', function()
+ feed('<C-O>')
+ feed('<C-O>')
+
+ eq( '\n'
+ .. ' jump line col file/text\n'
+ .. ' 4 102 0 \n'
+ .. ' 3 1 0 Line 1\n'
+ .. ' 2 10 0 Line 10\n'
+ .. ' 1 20 0 Line 20\n'
+ .. '> 0 30 0 Line 30\n'
+ .. ' 1 40 0 Line 40\n'
+ .. ' 2 50 0 Line 50',
+ redir_exec('jumps'))
+
+ feed('90gg')
+
+ eq( '\n'
+ .. ' jump line col file/text\n'
+ .. ' 5 102 0 \n'
+ .. ' 4 1 0 Line 1\n'
+ .. ' 3 10 0 Line 10\n'
+ .. ' 2 20 0 Line 20\n'
+ .. ' 1 30 0 Line 30\n'
+ .. '>',
+ redir_exec('jumps'))
+ end)
+
+ it('does not add the same location twice adjacently', function()
+ feed('60gg')
+ feed('60gg')
+
+ eq( '\n'
+ .. ' jump line col file/text\n'
+ .. ' 7 102 0 \n'
+ .. ' 6 1 0 Line 1\n'
+ .. ' 5 10 0 Line 10\n'
+ .. ' 4 20 0 Line 20\n'
+ .. ' 3 30 0 Line 30\n'
+ .. ' 2 40 0 Line 40\n'
+ .. ' 1 50 0 Line 50\n'
+ .. '>',
+ redir_exec('jumps'))
+ end)
+
+ it('does add the same location twice nonadjacently', function()
+ feed('10gg')
+ feed('20gg')
+
+ eq( '\n'
+ .. ' jump line col file/text\n'
+ .. ' 8 102 0 \n'
+ .. ' 7 1 0 Line 1\n'
+ .. ' 6 10 0 Line 10\n'
+ .. ' 5 20 0 Line 20\n'
+ .. ' 4 30 0 Line 30\n'
+ .. ' 3 40 0 Line 40\n'
+ .. ' 2 50 0 Line 50\n'
+ .. ' 1 10 0 Line 10\n'
+ .. '>',
+ redir_exec('jumps'))
+ end)
+end)