# HG changeset patch # User Bram Moolenaar # Date 1592149504 -7200 # Node ID 83cfa1ef1bf27bcd29735572ab5151dfb7b98954 # Parent 6390b8b611fbca8366fb941dbd06e1560c939f8e Update runtime files Commit: https://github.com/vim/vim/commit/65e0d77a66b7e50beb562ad554ace46c32ef8f0f Author: Bram Moolenaar Date: Sun Jun 14 17:29:55 2020 +0200 Update runtime files diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile --- a/runtime/doc/Makefile +++ b/runtime/doc/Makefile @@ -141,6 +141,7 @@ DOCS = \ usr_43.txt \ usr_44.txt \ usr_45.txt \ + usr_46.txt \ usr_90.txt \ usr_toc.txt \ various.txt \ @@ -282,6 +283,7 @@ HTMLS = \ usr_43.html \ usr_44.html \ usr_45.html \ + usr_46.html \ usr_90.html \ usr_toc.html \ various.html \ diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -1,4 +1,4 @@ -*autocmd.txt* For Vim version 8.2. Last change: 2020 Jan 26 +*autocmd.txt* For Vim version 8.2. Last change: 2020 Jun 10 VIM REFERENCE MANUAL by Bram Moolenaar diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 8.2. Last change: 2020 Jun 07 +*eval.txt* For Vim version 8.2. Last change: 2020 Jun 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1533,6 +1533,7 @@ An internal variable is explicitly destr Using a name that is not an internal variable or refers to a variable that has been destroyed results in an error. + *variable-scope* There are several name spaces for variables. Which one is to be used is specified by what is prepended: @@ -1551,7 +1552,9 @@ delete all script-local variables: > :for k in keys(s:) : unlet s:[k] :endfor -< + +Note: in Vim9 script this is different, see |vim9-scopes|. + *buffer-variable* *b:var* *b:* A variable name that is preceded with "b:" is local to the current buffer. Thus you can have several "b:foo" variables, one for each buffer. @@ -4523,7 +4526,7 @@ flatten({list} [, {maxdepth}]) *flat a very large number. The {list} is changed in place, make a copy first if you do not want that. - *E964* + *E900* {maxdepth} means how deep in nested lists changes are made. {list} is not modified when {maxdepth} is 0. {maxdepth} must be positive number. @@ -6278,10 +6281,11 @@ inputlist({textlist}) *inputlist()* displayed, one string per line. The user will be prompted to enter a number, which is returned. The user can also select an item by clicking on it with the - mouse. For the first string 0 is returned. When clicking - above the first item a negative number is returned. When - clicking on the prompt one more than the length of {textlist} - is returned. + mouse, if the mouse is enabled in the command line ('mouse' is + "a" or includes "c"). For the first string 0 is returned. + When clicking above the first item a negative number is + returned. When clicking on the prompt one more than the + length of {textlist} is returned. Make sure {textlist} has less than 'lines' entries, otherwise it won't work. It's a good idea to put the entry number at the start of the string. And put a prompt in the first item. @@ -11783,6 +11787,9 @@ like this: > :call filename#funcname() +These functions are always global, in Vim9 script "g:" needs to be used: > + :call g:filename#funcname() + When such a function is called, and it is not defined yet, Vim will search the "autoload" directories in 'runtimepath' for a script file called "filename.vim". For example "~/.vim/autoload/filename.vim". That file should @@ -11794,7 +11801,11 @@ then define the function like this: > The file name and the name used before the # in the function must match exactly, and the defined function must have the name exactly as it will be -called. +called. In Vim9 script the "g:" prefix must be used: > + function g:filename#funcname() + +or for a compiled function: > + def g:filename#funcname() It is possible to use subdirectories. Every # in the function name works like a path separator. Thus when calling a function: > @@ -11877,6 +11888,9 @@ This does NOT work: > ============================================================================== 7. Commands *expression-commands* +Note: in Vim9 script `:let` is used for variable declaration, not assignment. +An assignment leaves out the `:let` command. |vim9-declaration| + :let {var-name} = {expr1} *:let* *E18* Set internal variable {var-name} to the result of the expression {expr1}. The variable will get the type @@ -12099,12 +12113,14 @@ text... s: script-local variables l: local function variables v: Vim variables. + This does not work in Vim9 script. |vim9-declaration| :let List the values of all variables. The type of the variable is indicated before the value: String # Number * Funcref + This does not work in Vim9 script. |vim9-declaration| :unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795* Remove the internal variable {name}. Several variable diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 8.2. Last change: 2020 May 31 +*options.txt* For Vim version 8.2. Last change: 2020 Jun 10 VIM REFERENCE MANUAL by Bram Moolenaar @@ -5232,7 +5232,7 @@ A jump table for the options with a shor < If your terminal can't overrule the mouse events going to the application, use: > :set mouse=nvi -< The you can press ":", select text for the system, and press Esc to go +< Then you can press ":", select text for the system, and press Esc to go back to Vim using the mouse events. In |defaults.vim| "nvi" is used if the 'term' option is not matching "xterm". diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt --- a/runtime/doc/os_vms.txt +++ b/runtime/doc/os_vms.txt @@ -1,4 +1,4 @@ -*os_vms.txt* For Vim version 8.2. Last change: 2019 Jan 29 +*os_vms.txt* For Vim version 8.2. Last change: 2020 Jun 07 VIM REFERENCE MANUAL diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt --- a/runtime/doc/quickref.txt +++ b/runtime/doc/quickref.txt @@ -1,4 +1,4 @@ -*quickref.txt* For Vim version 8.2. Last change: 2020 Jun 02 +*quickref.txt* For Vim version 8.2. Last change: 2020 Jun 10 VIM REFERENCE MANUAL by Bram Moolenaar @@ -910,6 +910,7 @@ Short explanation of each option: *opti 'spellcapcheck' 'spc' pattern to locate end of a sentence 'spellfile' 'spf' files where |zg| and |zw| store words 'spelllang' 'spl' language(s) to do spell checking for +'spelloptions' 'spo' options for spell checking 'spellsuggest' 'sps' method(s) used to suggest spelling corrections 'splitbelow' 'sb' new window from split is below the current one 'splitright' 'spr' new window is put right of the current one diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt --- a/runtime/doc/spell.txt +++ b/runtime/doc/spell.txt @@ -1,4 +1,4 @@ -*spell.txt* For Vim version 8.2. Last change: 2019 Aug 16 +*spell.txt* For Vim version 8.2. Last change: 2020 Jun 10 VIM REFERENCE MANUAL by Bram Moolenaar diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1214,11 +1214,13 @@ DESKTOP *desktop.vim* *ft-desktop Primary goal of this syntax file is to highlight .desktop and .directory files according to freedesktop.org standard: -http://standards.freedesktop.org/desktop-entry-spec/latest/ -But actually almost none implements this standard fully. Thus it will -highlight all Unix ini files. But you can force strict highlighting according -to standard by placing this in your vimrc file: > - :let enforce_freedesktop_standard = 1 +https://specifications.freedesktop.org/desktop-entry-spec/latest/ +To highlight nonstandard extensions that does not begin with X-, set > + let g:desktop_enable_nonstd = 1 +Note that this may cause wrong highlight. +To highlight KDE-reserved features, set > + let g:desktop_enable_kde = 1 +g:desktop_enable_kde follows g:desktop_enable_nonstd if not supplied DIFF *diff.vim* diff --git a/runtime/doc/tags b/runtime/doc/tags --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -915,11 +915,13 @@ 'spellcapcheck' options.txt /*'spellcapcheck'* 'spellfile' options.txt /*'spellfile'* 'spelllang' options.txt /*'spelllang'* +'spelloptions' options.txt /*'spelloptions'* 'spellsuggest' options.txt /*'spellsuggest'* 'spf' options.txt /*'spf'* 'spl' options.txt /*'spl'* 'splitbelow' options.txt /*'splitbelow'* 'splitright' options.txt /*'splitright'* +'spo' options.txt /*'spo'* 'spr' options.txt /*'spr'* 'sps' options.txt /*'sps'* 'sr' options.txt /*'sr'* @@ -1926,6 +1928,10 @@ 45.2 usr_45.txt /*45.2* 45.3 usr_45.txt /*45.3* 45.4 usr_45.txt /*45.4* 45.5 usr_45.txt /*45.5* +46.1 usr_46.txt /*46.1* +46.2 usr_46.txt /*46.2* +46.3 usr_46.txt /*46.3* +46.? usr_46.txt /*46.?* 8g8 various.txt /*8g8* 90.1 usr_90.txt /*90.1* 90.2 usr_90.txt /*90.2* @@ -3886,6 +3892,7 @@ E101 diff.txt /*E101* E102 diff.txt /*E102* E103 diff.txt /*E103* E104 digraph.txt /*E104* +E1042 vim9.txt /*E1042* E105 mbyte.txt /*E105* E107 eval.txt /*E107* E108 eval.txt /*E108* @@ -4732,6 +4739,7 @@ E897 eval.txt /*E897* E898 channel.txt /*E898* E899 eval.txt /*E899* E90 message.txt /*E90* +E900 eval.txt /*E900* E901 channel.txt /*E901* E902 channel.txt /*E902* E903 channel.txt /*E903* @@ -5059,6 +5067,7 @@ SessionLoad-variable starting.txt /*Sess SessionLoadPost autocmd.txt /*SessionLoadPost* ShellCmdPost autocmd.txt /*ShellCmdPost* ShellFilterPost autocmd.txt /*ShellFilterPost* +SigUSR1 autocmd.txt /*SigUSR1* SourceCmd autocmd.txt /*SourceCmd* SourcePost autocmd.txt /*SourcePost* SourcePre autocmd.txt /*SourcePre* @@ -5450,20 +5459,7 @@ bars help.txt /*bars* base_font_name_list mbyte.txt /*base_font_name_list* basic.vim syntax.txt /*basic.vim* beep options.txt /*beep* -beos-colors os_beos.txt /*beos-colors* -beos-compiling os_beos.txt /*beos-compiling* -beos-dragndrop os_beos.txt /*beos-dragndrop* -beos-fonts os_beos.txt /*beos-fonts* -beos-general os_beos.txt /*beos-general* -beos-gui os_beos.txt /*beos-gui* -beos-launch os_beos.txt /*beos-launch* -beos-meta os_beos.txt /*beos-meta* -beos-mouse os_beos.txt /*beos-mouse* -beos-perl os_beos.txt /*beos-perl* -beos-timeout os_beos.txt /*beos-timeout* -beos-unicode os_beos.txt /*beos-unicode* -beos-utf8 os_beos.txt /*beos-utf8* -beos-vimdir os_beos.txt /*beos-vimdir* +beos os_beos.txt /*beos* better-python-interface version7.txt /*better-python-interface* beval_bufnr-variable eval.txt /*beval_bufnr-variable* beval_col-variable eval.txt /*beval_col-variable* @@ -6342,6 +6338,7 @@ filetype.txt filetype.txt /*filetype.txt filetypedetect-changed version6.txt /*filetypedetect-changed* filetypes filetype.txt /*filetypes* filewritable() eval.txt /*filewritable()* +filler-lines windows.txt /*filler-lines* filter change.txt /*filter* filter() eval.txt /*filter()* find-manpage usr_12.txt /*find-manpage* @@ -6364,6 +6361,7 @@ fixed-7.1 version7.txt /*fixed-7.1* fixed-7.2 version7.txt /*fixed-7.2* fixed-7.3 version7.txt /*fixed-7.3* fixed-7.4 version7.txt /*fixed-7.4* +flatten() eval.txt /*flatten()* flexwiki.vim syntax.txt /*flexwiki.vim* float-e eval.txt /*float-e* float-functions usr_41.txt /*float-functions* @@ -8885,6 +8883,7 @@ sound_playevent() eval.txt /*sound_playe sound_playfile() eval.txt /*sound_playfile()* sound_stop() eval.txt /*sound_stop()* soundfold() eval.txt /*soundfold()* +source-vim9-script usr_46.txt /*source-vim9-script* space intro.txt /*space* spec-customizing pi_spec.txt /*spec-customizing* spec-how-to-use-it pi_spec.txt /*spec-how-to-use-it* @@ -9525,6 +9524,7 @@ terminal-unix terminal.txt /*terminal-un terminal-use terminal.txt /*terminal-use* terminal-window terminal.txt /*terminal-window* terminal.txt terminal.txt /*terminal.txt* +terminalprops() eval.txt /*terminalprops()* terminfo term.txt /*terminfo* termresponse-variable eval.txt /*termresponse-variable* test-functions usr_41.txt /*test-functions* @@ -9701,6 +9701,7 @@ usr_42.txt usr_42.txt /*usr_42.txt* usr_43.txt usr_43.txt /*usr_43.txt* usr_44.txt usr_44.txt /*usr_44.txt* usr_45.txt usr_45.txt /*usr_45.txt* +usr_46.txt usr_46.txt /*usr_46.txt* usr_90.txt usr_90.txt /*usr_90.txt* usr_toc.txt usr_toc.txt /*usr_toc.txt* utf-8 mbyte.txt /*utf-8* @@ -9920,6 +9921,7 @@ val-variable eval.txt /*val-variable* valgrind debug.txt /*valgrind* values() eval.txt /*values()* var-functions usr_41.txt /*var-functions* +variable-scope eval.txt /*variable-scope* variables eval.txt /*variables* various various.txt /*various* various-cmds various.txt /*various-cmds* @@ -9993,11 +9995,15 @@ vim.vim syntax.txt /*vim.vim* vim7 version7.txt /*vim7* vim8 version8.txt /*vim8* vim9 vim9.txt /*vim9* +vim9-declaration vim9.txt /*vim9-declaration* +vim9-declarations usr_46.txt /*vim9-declarations* vim9-differences vim9.txt /*vim9-differences* vim9-export vim9.txt /*vim9-export* vim9-import vim9.txt /*vim9-import* vim9-rationale vim9.txt /*vim9-rationale* +vim9-scopes vim9.txt /*vim9-scopes* vim9-script vim9.txt /*vim9-script* +vim9-script-intro usr_46.txt /*vim9-script-intro* vim9-types vim9.txt /*vim9-types* vim9.txt vim9.txt /*vim9.txt* vim9script vim9.txt /*vim9script* diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt --- a/runtime/doc/testing.txt +++ b/runtime/doc/testing.txt @@ -1,4 +1,4 @@ -*testing.txt* For Vim version 8.2. Last change: 2020 Jun 03 +*testing.txt* For Vim version 8.2. Last change: 2020 Jun 13 VIM REFERENCE MANUAL by Bram Moolenaar diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 8.2. Last change: 2020 Jun 07 +*todo.txt* For Vim version 8.2. Last change: 2020 Jun 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -40,15 +40,17 @@ browser use: https://github.com/vim/vim/ Include src/po/vim.pot ? -If there are no complaints, remove more typecasts from vim_strnsave() length -argument. - Vim9 script: Making everything work: +- assignment to script var should check type +- Compile: let [var, var] = expr + share code for :let between compiled and uncompiled? +- do not allow "let g:var = value", must drop "let" - possible memory leak in test_vim9_func through compile_nested_function. - memory leaks in test_vim9_expr - memory leaks in test_vim9_script - Test that a script-local function in Vim9 script cannot be deleted. +- Check that when sourcing a Vim9 script, only the global items can be used. - Make "true" and "false" work in vim9script - Test that a function defined inside a :def function is local to that function, g: functions can be defined and script-local functions cannot be @@ -56,7 +58,6 @@ Making everything work: - make 0 == 'string' fail on the script level, like inside :def. - Check that when using a user function name without prefix, it does not find a global function. Prefixing g: is required. -- Compile: let [var, var] = expr - Compile: for [key, value] in items(map) - Assignment to dict doesn't work: let ret: dict = #{} @@ -76,6 +77,7 @@ Making everything work: (Ben Jackson, #5671) Can we share the code from ex_let_const() between direct execution and compiling? +- Implement "as Name" in "import Item as Name from ..." - Disallow unlet for local/script/imported vars - Make "++nr" work. - Make closures work: @@ -88,13 +90,14 @@ Making everything work: New syntax and functionality: Improve error checking: - "echo Func()" is an error if Func() does not return anything. +Test: +- Using a Vim9 autoload script (functions must be global). Also: - For range: make table of first ASCII character with flag to quickly check if it can be a Vim9 command. E.g. "+" can, but "." can't. - better implementation for partial and tests for that. - Make "g:imported = Export.exported" work in Vim9 script. - Make Foo.Bar() work to call the dict function. (#5676) -- Check that import in legacy script works and puts item in s: - Error in any command in "vim9script" aborts sourcing. - Find a way to test expressions in legacy and Vim9 script without duplication - Fix memory leaks for test_vim9_disassemble, test_vim9_expr, test_vim9_script @@ -237,7 +240,25 @@ Terminal emulator window: conversions. Error numbers available: -E489, E610, E611, E653, E856, E857, E861, E900 +E489, E610, E611, E653, E856, E857, E861 + +Remove SPACE_IN_FILENAME ? It is only used for completion. + +Can we detect true color support? https://gist.github.com/XVilka/8346728 +Try setting a color then request the current color, like using t_u7. + +Check out PR #543 (Roland Puntaier). +Patch for multi-byte characters in langmap and applying a mapping on them. +(Christian Brabandt, 2015 Jun 12, update July 25) +Is this the right solution? Need to cleanup langmap behavior: +- in vgetorpeek() apply langmap to the typeahead buffer and put the result in + a copy-buffer, only when langmap is appropriate for the current mode. Then + check for mapping and let gotchars() work on the copy-buffer. +- Remove LANGMAP_ADJUST() in other parts of the code. Make sure the mode is + covered by the above change. +So that replaying the register doesn't use keymap/langmap and still does the +same thing. +Also see #737: langmap not applied to replaying recording. Buffer autocommands are a bit inconsistent. Add a separate set of autocommands for the buffer lifecycle: @@ -275,6 +296,9 @@ undo result wrong: Masato Nishihata, #47 When 'lazyredraw' is set sometimes the title is not updated. (Jason Franklin, 2020 Feb 3) Looks like a race condition. +Regexp to search for duplicate lines does not work correctly: +/\(^.*\n\)\1 (Chris Morgan, #6239) + With bash ":make" does not set v:shell_error. Possible solution: set 'shellpipe' to "2>&1| tee %s; exit ${PIPESTATUS[0]}" #5994 @@ -305,6 +329,8 @@ Wrong error when using local arglist. (H Request to support in mappings, similar to how Neovim does this. (Daniel Hahler, #4784) +Test loose_clipboard() by selecting text before suspending. + Undo puts cursor in wrong line after "cG" undo. :unmap gives error but does remove the mapping. (Antony Scriven, 2019 @@ -391,7 +417,7 @@ When using :packadd files under "later" with packages under "start". (xtal8, #1994) Patch to add new motion ]( and ]{. (Yasuhiro Matsumoto, #5320) -Better: use the "z" prefix. +Better: use the "z" prefix. or ]t) and [t(. Modeless selection doesn't work in gvim. (#4783) Caused by patch 8.1.1534. @@ -439,18 +465,12 @@ Can be used to update highlighting. #312 Incorrect formatting with autoindent. (Sebastian Gniazdowski, #4909) Patch to add the :bvimgrep command. (Christian Brabandt, 2014 Nov 12) -Updated 2016 Jun 10, #858 Update 2017 Mar 28: use +Updated 2016 Jun 10, #858 Update 2017 Mar 28: use . +Better use ":bufgrep" ? Errors found with random data: heap-buffer-overflow in alist_add (#2472) -Patch to support CamelCase for spell checking: See a lower-to-upper case -change as a word boundary. (btucker-MPCData, 2016 Nov 6, #1235) -patch for 'spellcamelcase' option: spellcheck each CamelCased word. -(Ben Tucker, 2016 Dec 2) - -Patch to add "cmdline" completion to getcompletion(). (Shougo, Oct 1, #1140) - Improve fallback for menu translations, to avoid having to create lots of files that source the actual file. E.g. menu_da_de -> menu_da Include part of #3242? @@ -466,18 +486,6 @@ Added tests (James McCoy, 2016 Aug 3, #9 window 2. User expects 10 to be added to size of window 2. (Daniel Steinberg, #5443) -Patch for multi-byte characters in langmap and applying a mapping on them. -(Christian Brabandt, 2015 Jun 12, update July 25) -Is this the right solution? Need to cleanup langmap behavior: -- in vgetorpeek() apply langmap to the typeahead buffer and put the result in - a copy-buffer, only when langmap is appropriate for the current mode. Then - check for mapping and let gotchars() work on the copy-buffer. -- Remove LANGMAP_ADJUST() in other parts of the code. Make sure the mode is - covered by the above change. -So that replaying the register doesn't use keymap/langmap and still does the -same thing. Remarks on PR #543 (Roland Puntaier). -Also see #737: langmap not applied to replaying recording. - Would be nice to set tab-local values for 'diffexpr' and 'diffopt'. Use t:diffexpr_option t:diffopt_option? (#4782) @@ -507,10 +515,10 @@ Give a few examples. (#4288) Opening a file with --remote-tab-silent that matches 'wildignore' does not work, results in (E479: No match". (#4610) -Patch for this (Tristan Konolige, #1011, only adds the option, no implem.): 7 Add an option to add one pixel column to the character width? Lucida Console italic is wider than the normal font ("d" overlaps with next char). Opposite of 'linespace': 'columnspace'. +Patch for this (Tristan Konolige, #1011, only added the option, no implem.) Bug: script written with "-W scriptout" contains Key codes, while the script read with "-s scriptin" expects escape codes. Probably "scriptout" needs to @@ -583,9 +591,6 @@ C syntax: {} inside () causes following Check: __attribute__((format(printf, on semsg() and siemsg(). Where was this added? -Patch to add a flatten() function. #3676. Check that the doc explains the -maxdepth argument (applies to the input "recursiveness"). - Add test for urxvt mouse codes. Also test that mouse coordinates can be negative. (see #4326) @@ -656,11 +661,6 @@ punctuation is repeated. (Smylers, 2018 ml_get error: (Israel Chauca Fuentes, 2018 Oct 17, #3550). -Patch to add more info to OptionSet. Should mention what triggered the change -":set", ":setlocal", ":setglobal", "modeline"; and the old global value. -#4118. Proposed implementation: 2019 Mar 27. -Updated 2019 May 25. - Using single wide base character with double wide composing character gives drawing errors. Fill up the base character? (Dominique, #4328) @@ -711,23 +711,13 @@ Neovim uses "eob:X" in 'fillchars'. Sourceforge Vim pages still have content, redirect from empty page. Check for PHP errors. (Wayne Davison, 2018 Oct 26) -Patch to support ":tag ". (emmrk, 2018 May 7, #2871) -Use something like ":tag {kind}/{tagname}". -Not ready to include. - Problem with Visual yank when 'linebreak' and 'showbreak' are set. Patch with tests, but it's not clear how it is supposed to work. (tommm, 2018 Nov 17) Asked about this, Dec 22. Christian will have a look. -Patch for larger icons in installer. (#978) Still not good. - Patch to fix that using "5gj" starting inside a closed fold does not work on screen lines but on text lines. (Julius Hulsmann, #4095) Lacks a test. -Patch to implement 'diffref' option. (#3535) - Easier to use a 'diffmaster' option, is the extra complexity needed? - Not ready to include. - home_replace() uses $HOME instead of "homedir". (Cesar Martins, 2018 Aug 9) When the status line uses term_gettitle(), it does not get updated when the @@ -755,7 +745,7 @@ Further xdiff changes: Difference between two regexp engines: #3373 Patch to add ch_listen() (Yasuhiro Matsumoto, 2018 Nov 26, #3639) -What is the practical use for this? +What is the practical use for this? Need an example. When the last line wraps, selecting with the mouse below that line only includes the first screen line. (2018 Aug 23, #3368) @@ -779,8 +769,6 @@ when adding a sign for every quickfix en Win32 key codes are messy. Mike Williams tried to fix that, but now old mappings no longer work. Create a new terminal for the better solution? -Patch to "fix" 'visualbell'. Add option to set delay? (#1789) - Script generated by :mksession does not work well if there are windows with modified buffers change "silent only" into "silent only!" @@ -870,9 +858,6 @@ deleting autocmds, not when adding them. Alternative manpager.vim. (Enno, 2018 Jan 5, #2529) -Delete all the specific stuff for the Borland compiler? (#3374) -Patch in #3377 (Thomas Dziedzic) - With 'foldmethod' "indent" and appending an empty line, what follows isn't included in the existing fold. Deleting the empty line and undo fixes it. (Oleg Koshovetc, 2018 Jul 15, #3214) @@ -1037,6 +1022,7 @@ The ":move" command does not honor close Patch to fix increment/decrement not working properly when 'virtualedit' is set. (Hirohito Higashi, 2016 Aug 1, #923) +Was this fixed? Cannot copy modeless selection when cursor is inside it. (lkintact, #2300) @@ -1106,8 +1092,6 @@ Or is this not an actual problem? Better TeX indent file. (Christian Brabandt, 2017 May 3) -Patch to use a separate code for BS on Windows. (Linwei, #1823) - Use gvimext.dll from the nightly build? (Issue #249) 'synmaxcol' works with bytes instead of screen cells. (Llandon, 2017 May 31, @@ -1216,13 +1200,6 @@ Implement named arguments for functions: Add a command to take a range of lines, filter them and put the output somewhere else. :{range}copy {dest} !cmd -Patch to fix that empty first tab is not in session. -(Hirohito Higashi, 2016 Nov 25, #1282) - -Patch to fix escaping of job arguments. (Yasuhiro Matsumoto, 2016 Oct 5) -Update Oct 14: https://gist.github.com/mattn/d47e7d3bfe5ade4be86062b565a4bfca -Update Aug 2017: #1954 - The TermResponse event is not triggered when a plugin has set 'eventignore' to "all". Netrw does this. (Gary Johnson, 2017 Jan 24) Postpone the event until 'eventignore' is reset. @@ -1386,11 +1363,6 @@ Undo message is not always properly disp 3. Doesn't work properly according to Yukihiro Nakadaira. Also see #1635. -Patch for systemlist(), add empty item. (thinca, Sep 30, #1135) -Add an argument to choose binary or non-binary (like readfile()), when omitted -use the current behavior. -Include the test. - When 'keywordprg' starts with ":" the argument is still escaped as a shell command argument. (Romain Lafourcade, 2016 Oct 16, #1175) @@ -1412,9 +1384,6 @@ synced. (Ryan Carney, 2016 Sep 14) Syntax highlighting for messages with RFC3339 timestamp (#946) Did maintainer reply? -Patch to avoid problem with special characters in file name. -(Shougo, 2016 Sept 19, #1099) Not finished? - ml_get errors when reloading file. (Chris Desjardins, 2016 Apr 19) Also with latest version. @@ -1450,8 +1419,6 @@ Filetype plugin for awk. (Doug Kearns, 2 Patch to improve map documentation. Issue #799. -Patch for syntax folding optimization. (Shougo, 2016 Sep 6, #1045) - We can use '. to go to the last change in the current buffer, but how about the last change in any buffer? Can we use ', (, is next to .)? @@ -1508,11 +1475,6 @@ Mechelynck) Perhaps use exists("::tearo Use vim.vim syntax highlighting for help file examples, but without ":" in 'iskeyword' for syntax. -Patch to make "%:h:h" return "." instead of the full path. -(Coot, 2016 Jan 24, #592) - -Remove SPACE_IN_FILENAME ? What could possibly go wrong? - When command names are very long :command output is difficult to read. Use a maximum for the column width? (#871) Patcy by varmanishant, 2016 Jun 18, #876 @@ -2107,11 +2069,6 @@ Vim using lots of memory when joining li BT regexp engine: After trying a \@> match and failing, submatches are not cleared. See test64. -Patch to make "z=" work when 'spell' is off. Does this have nasty side -effects? (Christian Brabandt, 2012 Aug 5, Update 2013 Aug 12) -Would also need to do this for spellbadword() and spellsuggest(). -https://github.com/chrisbra/vim-mq-patches/blob/master/enable_spellchecking - On 64 bit MS-Windows "long" is only 32 bits, but we sometimes need to store a 64 bits value. Change all number options to use nropt_T and define it to the right type. diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -1,4 +1,4 @@ -*usr_41.txt* For Vim version 8.2. Last change: 2020 Jun 01 +*usr_41.txt* For Vim version 8.2. Last change: 2020 Jun 13 VIM USER MANUAL - by Bram Moolenaar @@ -41,10 +41,11 @@ prefer. And you can use any colon comma specific file type. A complicated macro can be defined by a separate Vim script file. You can think of other uses yourself. -Note: if you are familiar with Python, you can find a comparison between -Python and Vim script here, with pointers to other documents: - https://gist.github.com/yegappan/16d964a37ead0979b05e655aa036cad0 - + If you are familiar with Python, you can find a comparison between + Python and Vim script here, with pointers to other documents: + https://gist.github.com/yegappan/16d964a37ead0979b05e655aa036cad0 + And if you are familiar with Javascript: + https://w0rp.com/blog/post/vim-script-for-the-javascripter/ Let's start with a simple example: > @@ -98,6 +99,8 @@ and the value of the variable i. Since Then there is the ":let i += 1" command. This does the same thing as ":let i = i + 1". This adds one to the variable i and assigns the new value to the same variable. +Note: this is how it works in legacy Vim script, which is what we discuss in +this file. In Vim9 script it's a bit different, see |usr_46.txt|. The example was given to explain the commands, but would you really want to make such a loop, it can be written much more compact: > diff --git a/runtime/doc/usr_45.txt b/runtime/doc/usr_45.txt --- a/runtime/doc/usr_45.txt +++ b/runtime/doc/usr_45.txt @@ -1,8 +1,8 @@ -*usr_45.txt* For Vim version 8.2. Last change: 2008 Nov 15 +*usr_45.txt* For Vim version 8.2. Last change: 2020 Jun 11 VIM USER MANUAL - by Bram Moolenaar - Select your language + Select your language (locale) The messages in Vim can be given in several languages. This chapter explains @@ -15,7 +15,7 @@ in various languages is explained. |45.4| Editing files with a different encoding |45.5| Entering language text - Next chapter: |usr_90.txt| Installing Vim + Next chapter: |usr_46.txt| Write plugins using Vim9 script Previous chapter: |usr_44.txt| Your own syntax highlighted Table of contents: |usr_toc.txt| @@ -408,6 +408,6 @@ Don't type the spaces. See |i_CTRL-V_di ============================================================================== -Next chapter: |usr_90.txt| Installing Vim +Next chapter: |usr_46.txt| Write plugins using Vim9 script Copyright: see |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/usr_46.txt b/runtime/doc/usr_46.txt new file mode 100644 --- /dev/null +++ b/runtime/doc/usr_46.txt @@ -0,0 +1,192 @@ +*usr_46.txt* For Vim version 8.2. Last change: 2020 Jun 14 + + VIM USER MANUAL - by Bram Moolenaar + + Write plugins using Vim9 script + + +The Vim9 script language is used for writing plugins, especially larger ones +that use multiple files. This chapter explains how to split up a plugin into +modules, import and export items and keep the rest local. + +|46.1| Introduction +|46.2| Variable declarations +|46.3| Functions and types +|46.?| Using a Vim9 script from legacy script + + Next chapter: |usr_90.txt| Installing Vim + Previous chapter: |usr_45.txt| Select your language (locale) +Table of contents: |usr_toc.txt| + +============================================================================== +*46.1* Introduction *vim9-script-intro* + +Vim9 script was designed to make it easier to write large Vim scripts. It +looks more like other script languages, especially Typescript. Also, +functions are compiled into instructions that can be executed quickly. This +makes Vim9 script a lot faster, up to a 100 times. + +The basic idea is that a script file has items that are private, only used +inside the script file, and items that are exported, used outside of the +script file. The exported items can then be used by scripts that import them. +That makes very clear what is defined where. + +Let's start with an example, a script that exports one function and has one +private function: > + + vim9script " This indicates a Vim9 script file, + + export def GetMessage(): string + let result = '' + ... + result = GetPart(count) + ... + return result + enddef + + def GetPart(nr: number): string + if nr == 4 + return 'yes' + else + return 'no' + endif + enddef + +The `vim9script` command must be the very first command in the file. Without +it Vim will assume legacy script syntax. + +The `export def GetMessage(): string` line starts with `export`, meaning that +this function can be imported and called by other scripts. The line +`def GetPart(...` does not start with `export`, this is a script-local +function, it can only be used inside this script file. + +In the `export def GetMessage(): string` line you will notice the colon and +the return type. Vim9 functions, defined with `def`, require specifying the +type of arguments and the return type. That way Vim can compile the code +efficiently. The GetPart function defines an argument "nr" of type "number". + +Notice that the assignment `result = GetPart(count)` does not use the `let` +command. That is explained in the next section. + +============================================================================== +*46.2* Variable declarations *vim9-declarations* + +In Vim9 script variables are declared once with a `:let` or `:const` command. +Assigning a value is done without `:let` and it is not possible to `:unlet` +the variable. + +In most cases you will want to declare the variable and initialize it at the +same time: > + let myText = 'some text' + ... + myText = 'other text' + +The type of the variable will be inferred from the expression. In this case +it is a string. If you initialize with a number, then the type is number: > + let myNumber = 1234 + ... + myNumber = 0 + +If you try to assign a string to this variable, you will get an error: > + let myNumber = 'this fails!' + +In the rare case you want a variable that can take values of any type, you +have to specify the type: > + let myVar: any = 1234 + myVar = 'text also works' + +You can also declare a variable without assigning a value. In that case Vim +will initialize it to zero or empty: > + let word: string + if condition + word = 'yes' + else + word = 'no' + endif + +Although it's shorter to do: > + let word = condition ? 'yes' : 'no' + +============================================================================== +*46.3* Functions and types + +Legacy Vim script does have type checking, but this happens at runtime, when +the code is executed. And it's permissive, often a computation gives an +unexpected value instead of reporting an error . Thus you can define a +function and think it's fine, but see a problem only later when it is called: > + let s:collected = '' + func ExtendAndReturn(add) + let s:collected += a:add + return s:collected + endfunc + +Can you spot the error? Try this: > + echo ExtendAndReturn('text') +And you'll see zero. Why? Because in legacy Vim script "+=" will convert the +arguments to numbers, and any string without a number results in zero! + +With `:def` the type checking happens when compiling the function. For that +you need to specify the argument types and the return type. Also notice that +the argument is used without the "a:" prefix: > + let s:collected = '' + def ExtendAndReturn(add: string): string + s:collected += add + return s:collected + enddef + defcompile + +Here we use `:defcompile` to do the compilation right away, without it the +compilation would happen when the function is called. Vim will tell you what +you did wrong: > + E1013: type mismatch, expected number but got string + +Vim9 script is strict, it uses the "+" operator only for numbers and floats. +For string concatenation ".." must be used. This avoids mistakes and avoids +the automatic conversion that gave a suprising result above. So you change +the first line of the function to: > + s:collected ..= add +And now it works. + +If the function does not return anything, just leave out the return type: > + def ReportResult(result: string) + echo 'The result is: ' .. result + enddef + +This is also checked, if you try to return a value you'll get an error. + +In case you don't care about types or have a function that does work with +multiple types, you can use the "any" type: > + def Store(key: string, value: any) + resultDict[key] = value + enddef + +============================================================================== +*46.?* Using a Vim9 script from legacy script *source-vim9-script* + +In some cases you have a legacy Vim script where you want to use items from a +Vim9 script. For example in your .vimrc you want to initialize a plugin. The +best way to do this is to use `:import`. For example: > + + import Init as NiceInit from 'myNicePlugin.vim' + call NiceInit('today') + +This finds the exported function "Init" in the Vim9 script file and makes it +available as script-local item "NiceInit". `:import` always uses the script +namespace, even when "s:" is not given. If "myNicePlugin.vim" was already +sourced it is not sourced again. + +Besides avoiding putting any items in the global namespace (where name clashes +can cause unexpected errors), this also means the script is sourced only once, +no matter how many times items from it are imported. + +In some cases, e.g. for testing, you may just want to source the Vim9 script. +That is OK, but then only global items will be available. The Vim9 script +will have to make sure to use a unique name for these global items. Example: > + source ~/.vim/extra/myNicePlugin.vim + call g:NicePluginTest() + +============================================================================== + +Next chapter: |usr_90.txt| Installing Vim + +Copyright: see |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/usr_90.txt b/runtime/doc/usr_90.txt --- a/runtime/doc/usr_90.txt +++ b/runtime/doc/usr_90.txt @@ -1,4 +1,4 @@ -*usr_90.txt* For Vim version 8.2. Last change: 2008 Sep 10 +*usr_90.txt* For Vim version 8.2. Last change: 2020 Jun 11 VIM USER MANUAL - by Bram Moolenaar @@ -15,7 +15,7 @@ upgrading to a new version is done. |90.4| Common installation issues |90.5| Uninstalling Vim - Previous chapter: |usr_45.txt| Select your language + Previous chapter: |usr_46.txt| Write plugins using Vim9 script Table of contents: |usr_toc.txt| ============================================================================== diff --git a/runtime/doc/usr_toc.txt b/runtime/doc/usr_toc.txt --- a/runtime/doc/usr_toc.txt +++ b/runtime/doc/usr_toc.txt @@ -1,4 +1,4 @@ -*usr_toc.txt* For Vim version 8.2. Last change: 2019 May 24 +*usr_toc.txt* For Vim version 8.2. Last change: 2020 Jun 11 VIM USER MANUAL - by Bram Moolenaar @@ -42,7 +42,8 @@ Tuning Vim |usr_42.txt| Add new menus |usr_43.txt| Using filetypes |usr_44.txt| Your own syntax highlighted -|usr_45.txt| Select your language +|usr_45.txt| Select your language (locale) +|usr_46.txt| Write plugins using Vim9 script Making Vim Run |usr_90.txt| Installing Vim diff --git a/runtime/doc/version8.txt b/runtime/doc/version8.txt --- a/runtime/doc/version8.txt +++ b/runtime/doc/version8.txt @@ -1,4 +1,4 @@ -*version8.txt* For Vim version 8.2. Last change: 2020 Feb 04 +*version8.txt* For Vim version 8.2. Last change: 2020 Jun 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -30777,7 +30777,7 @@ Solution: Use a double quoted string. Files: src/ex_docmd.c, src/testdir/test_mksession.vim Patch 8.1.0804 -Problem: Crash when setting v:errmsg to empty list. (Jaon Franklin) +Problem: Crash when setting v:errmsg to empty list. (Jason Franklin) Solution: Separate getting value and assigning result. Files: src/eval.c, src/testdir/test_eval_stuff.vim @@ -33684,8 +33684,8 @@ Solution: Also change the textprop imp Files: src/textprop.c Patch 8.1.1279 -Problem: Cannot set 'spellang' to "sr@latin". (Bojan Stipic) -Solution: Allow using '@' in 'spellang'. (closes #4342) +Problem: Cannot set 'spelllang' to "sr@latin". (Bojan Stipic) +Solution: Allow using '@' in 'spelllang'. (closes #4342) Files: src/option.c, src/testdir/gen_opt_test.vim Patch 8.1.1280 diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt --- a/runtime/doc/vim9.txt +++ b/runtime/doc/vim9.txt @@ -1,4 +1,4 @@ -*vim9.txt* For Vim version 8.2. Last change: 2020 May 25 +*vim9.txt* For Vim version 8.2. Last change: 2020 Jun 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -106,7 +106,7 @@ list type, similar to Typescript. For e Functions and variables are script-local by default ~ - + *vim9-scopes* When using `:function` or `:def` to specify a new function at the script level in a Vim9 script, the function is local to the script, as if "s:" was prefixed. Using the "s:" prefix is optional. @@ -136,7 +136,7 @@ and cannot be deleted or replaced. Variable declarations with :let and :const ~ - + *vim9-declaration* Local variables need to be declared with `:let`. Local constants need to be declared with `:const`. We refer to both as "variables". @@ -388,13 +388,17 @@ THIS IS STILL UNDER DEVELOPMENT - ANYTHI The second and third form are optional arguments. When the caller omits an argument the {value} is used. + The function will be compiled into instructions when + called, or when `:defcompile` is used. Syntax and + type errors will be produced at that time. + NOTE: It is possible to nest `:def` inside another `:def`, but it is not possible to nest `:def` inside `:function`, for backwards compatibility. [!] is used as with `:function`. Note that in Vim9 script script-local functions cannot be deleted or - redefined. + redefined later in the same script. *:enddef* :enddef End of a function defined with `:def`. @@ -402,8 +406,9 @@ THIS IS STILL UNDER DEVELOPMENT - ANYTHI If the script the function is defined in is Vim9 script, then script-local variables can be accessed without the "s:" prefix. They must be defined -before the function. If the script the function is defined in is legacy -script, then script-local variables must be accessed with the "s:" prefix. +before the function is compiled. If the script the function is defined in is +legacy script, then script-local variables must be accessed with the "s:" +prefix. *:defc* *:defcompile* :defc[ompile] Compile functions defined in the current script that @@ -555,6 +560,9 @@ be exported. Alternatively, an export statement can be used to export several already defined (otherwise script-local) items: > export {EXPORTED_CONST, someValue, MyFunc, MyClass} +< + *E1042* +`:export` can only be used in Vim9 script, at the script level. Import ~ @@ -629,8 +637,8 @@ 3. Other functionality, possibly shared Import in legacy Vim script ~ -If an `import` statement is used in legacy Vim script, for identifier the -script-local "s:" namespace will be used, even when "s:" is not specified. +If an `import` statement is used in legacy Vim script, the script-local "s:" +namespace will be used for the imported item, even when "s:" is not specified. ============================================================================== @@ -673,12 +681,37 @@ widely used. The type names are what wa additions such as "void" and "bool". -JavaScript/TypeScript syntax and semantics ~ +Compiling functions early ~ + +Functions are compiled when called or when `:defcompile` is used. Why not +compile them early, so that syntax and type errors are reported early? + +The functions can't be compiled right away when encountered, because there may +be forward references to functions defined later. Consider defining functions +A, B and C, where A calls B, B calls C, and C calls A again. It's impossible +to reorder the functions to avoid forward references. + +An alternative would be to first scan through the file to locate items and +figure out their type, so that forward refeferences are found, and only then +execute the script and compile the functions. This means the script has to be +parsed twice, which is slower, and some conditions at the script level, such +as checking if a feature is supported, are hard to use. An attempt was made +to see if it works, but it turned out to be impossible to make work nicely. + +It would be possible to compile all the functions at the end of the script. +The drawback is that if a function never gets called, the overhead of +compiling it counts anyway. Since startup speed is very important, in most +cases it's better to do it later and accept that syntax and type errors are +only reported then. In case these errors should be found early, e.g. when +testing, the `:defcompile` command will help out. + + +TypeScript syntax and semantics ~ Script writers have complained that the Vim script syntax is unexpectedly different from what they are used to. To reduce this complaint popular -languages will be used as an example. At the same time, we do not want to -abandon the well-known parts of legacy Vim script. +languages are used as an example. At the same time, we do not want to abandon +the well-known parts of legacy Vim script. Since Vim already uses `:let` and `:const` and optional type checking is desirable, the JavaScript/TypeScript syntax fits best for variable @@ -695,7 +728,7 @@ are doing. Some details are unexpected ... return result || 0 " returns 1 -Vim9 script works like JavaScript, keep the value: > +Vim9 script works like JavaScript/Typescript, keep the value: > let result = 44 ... return result || 0 " returns 44 @@ -727,6 +760,16 @@ that works like one would expect: avoided. - The Vim-specific use of "s:" to make things script-local can be dropped. +When sourcing a Vim9 script from a legacy script, only the items defined +globally can be used, not the exported items. Alternatives considered: +- All the exported items become available as script-local items. This makes + it uncontrollable what items get defined. +- Use the exported items and make them global. Disadvantage is that it's then + not possible to avoid name clashes in the global namespace. +- Completely disallow sourcing a Vim9 script, require using `:import`. That + makes it difficult to use scripts for testing, or sourcing them from the + command line to try them out. + Classes ~ diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt --- a/runtime/doc/windows.txt +++ b/runtime/doc/windows.txt @@ -137,6 +137,12 @@ invert the status line. Now it should b status line is inverted anyway; you will only see this problem on terminals that have termcap codes for italics. + *filler-lines* +The lines after the last buffer line in a window are called filler lines. +These lines start with a tilde (~) character. By default, these are +highlighted as NonText (|hl-NonText|). The EndOfBuffer highlight group +(|hl-EndOfBuffer|) can be used to change the highlighting of filler lines. + ============================================================================== 3. Opening and closing a window *opening-window* *E36* diff --git a/runtime/menu.vim b/runtime/menu.vim --- a/runtime/menu.vim +++ b/runtime/menu.vim @@ -453,12 +453,12 @@ if has("spell") an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell an 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call SpellLang() - let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages'] + let s:undo_spelllang = ['aun &Tools.&Spelling.&Find\ More\ Languages'] func s:SpellLang() - for cmd in s:undo_spellang + for cmd in s:undo_spelllang exe "silent! " . cmd endfor - let s:undo_spellang = [] + let s:undo_spelllang = [] if &enc == "iso-8859-15" let enc = "latin1" @@ -481,7 +481,7 @@ if has("spell") let found += 1 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"' exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell' - let s:undo_spellang += ['aun ' . menuname] + let s:undo_spelllang += ['aun ' . menuname] endif let n += 10 endfor diff --git a/runtime/optwin.vim b/runtime/optwin.vim --- a/runtime/optwin.vim +++ b/runtime/optwin.vim @@ -1,7 +1,7 @@ " These commands create the option window. " " Maintainer: Bram Moolenaar -" Last Change: 2020 Jun 02 +" Last Change: 2020 Jun 10 " If there already is an option window, jump to that one. let buf = bufnr('option-window') @@ -447,6 +447,9 @@ if has("syntax") call append("$", "spellcapcheck\tpattern to locate the end of a sentence") call append("$", "\t(local to buffer)") call OptionL("spc") + call append("$", "spelloptions\tflags to change how spell checking works") + call append("$", "\t(local to buffer)") + call OptionL("spo") call append("$", "spellsuggest\tmethods used to suggest corrections") call OptionG("sps", &sps) call append("$", "mkspellmem\tamount of memory used by :mkspell before compressing") diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -2,7 +2,7 @@ " " Author: Bram Moolenaar " Copyright: Vim license applies, see ":help license" -" Last Change: 2020 May 22 +" Last Change: 2020 Jun 12 " " WORK IN PROGRESS - Only the basics work " Note: On MS-Windows you need a recent version of gdb. The one included with @@ -710,7 +710,7 @@ func s:DeleteCommands() delcommand Source delcommand Winbar - if exists('s:k_map_saved') + if exists('s:k_map_saved') && !empty(s:k_map_saved) call mapset('n', 0, s:k_map_saved) unlet s:k_map_saved endif diff --git a/runtime/syntax/desktop.vim b/runtime/syntax/desktop.vim --- a/runtime/syntax/desktop.vim +++ b/runtime/syntax/desktop.vim @@ -1,107 +1,267 @@ " Vim syntax file -" Language: .desktop, .directory files -" according to freedesktop.org specification 0.9.4 -" http://pdx.freedesktop.org/Standards/desktop-entry-spec/desktop-entry-spec-0.9.4.html -" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2016 Apr 02 -" (added "Keywords") -" Version Info: desktop.vim 0.9.4-1.2 +" Language: XDG desktop entry +" Filenames: *.desktop, *.directory +" Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com ) +" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) +" Last Change: 2020-06-11 +" Version Info: desktop.vim 1.5 +" References: +" - https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.5.html (2020-04-27) +" - https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-0.11.html (2006-02-07) " quit when a syntax file was already loaded if exists("b:current_syntax") - finish + finish +endif + +let s:cpo_save = &cpo +set cpo&vim +syn case match + +" Variable {{{1 +" This syntax file can be used to all *nix configuration files similar to dos +" ini format (eg. .xawtv, .radio, kde rc files) - this is default mode. +" By default strict following of freedesktop.org standard is enforced. +" To highlight nonstandard extensions that does not begin with X-, set +" let g:desktop_enable_nonstd = v:true +" Note that this may cause wrong highlight. +" To highlight KDE-reserved features, set +" let g:desktop_enable_kde = v:true +" g:desktop_enable_kde follows g:desktop_enable_nonstd if not supplied + +if exists("g:desktop_enable_nonstd") && g:desktop_enable_nonstd + let s:desktop_enable_nonstd = v:true +else + let s:desktop_enable_nonstd = v:false +endif + +if exists("g:desktop_enable_kde") && g:desktop_enable_kde || s:desktop_enable_nonstd + let s:desktop_enable_kde = v:true +else + let s:desktop_enable_kde = v:false endif -" This syntax file can be used to all *nix configuration files similar to dos -" ini format (eg. .xawtv, .radio, kde rc files) - this is default mode. But -" you can also enforce strict following of freedesktop.org standard for -" .desktop and .directory files . Set (eg. in vimrc) -" let enforce_freedesktop_standard = 1 -" and nonstandard extensions not following X- notation will not be highlighted. -if exists("enforce_freedesktop_standard") - let b:enforce_freedesktop_standard = 1 -else - let b:enforce_freedesktop_standard = 0 +" Comment {{{1 +syn match dtComment /^#.*$/ + +" Error {{{1 +syn match dtError /\%(^\s.*\|\s\+$\)/ + +" Group Header {{{1 +" ASCII printable characters except for brackets [ (0x5B) and ] (0x5D) +syn match dtGroup /^\[[\x20-\x5A\x5C\x5E-\x7E]\+\]$/ + +" Entries {{{1 +syn match dtDelim /=/ contained +" lang_territory.codeset@modifier +syn match dtLocaleSuffix + \ /\[\%(C\|POSIX\|[a-z]\{2,4}\%(_[A-Z0-9]\{2,3}\)\?\)\%(\.[A-Za-z0-9_-]\+\)\?\%(@[A-Za-z]\+\)\?\]\ze\s*=/ + \ contained + +" Boolean Value {{{2 +syn match dtBoolean + \ /^\%(DBusActivatable\|Hidden\|NoDisplay\|PrefersNonDefaultGPU\|StartupNotify\|Terminal\)\s*=\s*\%(true\|false\)/ + \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent +syn keyword dtBooleanKey + \ DBusActivatable Hidden NoDisplay PrefersNonDefaultGPU StartupNotify Terminal + \ contained nextgroup=dtDelim + +if s:desktop_enable_kde + syn match dtBoolean + \ /^ReadOnly\s*=\s*\%(true\|false\)/ + \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent + syn keyword dtBooleanKey + \ ReadOnly + \ contained nextgroup=dtDelim +endif +syn keyword dtBooleanValue true false contained + +" Numeric Value {{{2 +" icon theme +syn match dtNumeric /^\%(MaxSize\|MinSize\|Size\|Threshold\)\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal +syn keyword dtNumericKey + \ MaxSize MinSize Size Threshold + \ contained nextgroup=dtDelim + +if s:desktop_enable_kde + syn match dtNumeric /^InitialPreference\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal + syn keyword dtNumericKey + \ InitialPreference + \ contained nextgroup=dtDelim endif -" case on -syn case match +syn match dtNumericDecimal /\<\d\+$/ contained + +" String Value {{{2 +syn match dtString + \ /^\%(Actions\|Implements\|MimeType\|NotShowIn\|OnlyShowIn\|Path\|StartupWMClass\|URL\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent +syn keyword dtStringKey + \ Actions Implements MimeType NotShowIn OnlyShowIn Path StartupWMClass URL Version + \ contained nextgroup=dtDelim -" General -if b:enforce_freedesktop_standard == 0 - syn match dtNotStLabel "^.\{-}=\@=" nextgroup=dtDelim +" icon theme +syn match dtString + \ /^\%(Context\|Directories\|Example\|Inherits\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent +syn keyword dtStringKey + \ Context Directories Example Inherits + \ contained nextgroup=dtDelim + +if s:desktop_enable_kde + syn match dtString + \ /^\%(Dev\|DocPath\|FSType\|MountPoint\|ServiceTypes\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent + syn keyword dtStringKey + \ Dev DocPath FSType MountPoint ServiceTypes + \ contained nextgroup=dtDelim endif -syn match dtGroup /^\s*\[.*\]/ -syn match dtComment /^\s*#.*$/ -syn match dtDelim /=/ contained - -" Locale -syn match dtLocale /^\s*\<\(Name\|GenericName\|Comment\|SwallowTitle\|Icon\|UnmountIcon\)\>.*/ contains=dtLocaleKey,dtLocaleName,dtDelim transparent -syn keyword dtLocaleKey Name GenericName Comment SwallowTitle Icon UnmountIcon nextgroup=dtLocaleName containedin=dtLocale -syn match dtLocaleName /\(\[.\{-}\]\s*=\@=\|\)/ nextgroup=dtDelim containedin=dtLocale contained +" Categories {{{3 +" https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry +syn match dtCategories /^Categories\s*=.\+\S/ contains=dtCategoriesKey,dtDelim,dtCategoriesValue transparent +syn keyword dtCategoriesKey + \ Categories + \ contained nextgroup=dtDelim -" Numeric -syn match dtNumeric /^\s*\/ contains=dtNumericKey,dtDelim -syn keyword dtNumericKey Version nextgroup=dtDelim containedin=dtNumeric contained - -" Boolean -syn match dtBoolean /^\s*\<\(StartupNotify\|ReadOnly\|Terminal\|Hidden\|NoDisplay\)\>.*/ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent -syn keyword dtBooleanKey StartupNotify ReadOnly Terminal Hidden NoDisplay nextgroup=dtDelim containedin=dtBoolean contained -syn keyword dtBooleanValue true false containedin=dtBoolean contained +" Main Categories +syn keyword dtCategoriesValue + \ Audio AudioVideo Development Education Game Graphics Network Office + \ Settings System Utility Video + \ contained -" String -syn match dtString /^\s*\<\(Encoding\|Icon\|Path\|Actions\|FSType\|MountPoint\|UnmountIcon\|URL\|Keywords\|Categories\|OnlyShowIn\|NotShowIn\|StartupWMClass\|FilePattern\|MimeType\)\>.*/ contains=dtStringKey,dtDelim transparent -syn keyword dtStringKey Type Encoding TryExec Exec Path Actions FSType MountPoint URL Keywords Categories OnlyShowIn NotShowIn StartupWMClass FilePattern MimeType nextgroup=dtDelim containedin=dtString contained - -" Exec -syn match dtExec /^\s*\<\(Exec\|TryExec\|SwallowExec\)\>.*/ contains=dtExecKey,dtDelim,dtExecParam transparent -syn keyword dtExecKey Exec TryExec SwallowExec nextgroup=dtDelim containedin=dtExec contained -syn match dtExecParam /%[fFuUnNdDickv]/ containedin=dtExec contained +" Additional Categories +syn keyword dtCategoriesValue + \ BoardGame Chat Clock Geoscience Presentation 2DGraphics 3DGraphics + \ Accessibility ActionGame AdventureGame Amusement ArcadeGame Archiving + \ Art ArtificialIntelligence Astronomy AudioVideoEditing Biology + \ BlocksGame BoardGame Building Calculator Calendar CardGame Chart Chat + \ Chemistry Clock Compression ComputerScience ConsoleOnly Construction + \ ContactManagement Core DataVisualization Database Debugger + \ DesktopSettings Dialup Dictionary DiscBurning Documentation Economy + \ Electricity Electronics Email Emulator Engineering FileManager + \ FileTools FileTransfer Filesystem Finance FlowChart GNOME GTK + \ GUIDesigner Geography Geology Geoscience HamRadio HardwareSettings + \ History IDE IRCClient ImageProcessing InstantMessaging Java KDE + \ KidsGame Languages Literature LogicGame Math MedicalSoftware Midi + \ Mixer Monitor Motif Music News NumericalAnalysis OCR P2P PDA + \ PackageManager ParallelComputing Photography Physics Player + \ Presentation Printing Profiling ProjectManagement Publishing Qt + \ RasterGraphics Recorder RemoteAccess RevisionControl Robotics + \ RolePlaying Scanning Science Security Sequencer Simulation Sports + \ SportsGame Spreadsheet StrategyGame TV Telephony TelephonyTools + \ TerminalEmulator TextEditor TextTools Translation Tuner VectorGraphics + \ VideoConference Viewer WebBrowser WebDevelopment WordProcessor + \ contained -" Type -syn match dtType /^\s*\.*/ contains=dtTypeKey,dtDelim,dtTypeValue transparent -syn keyword dtTypeKey Type nextgroup=dtDelim containedin=dtType contained -syn keyword dtTypeValue Application Link FSDevice Directory containedin=dtType contained +" Reserved Category +syn keyword dtCategoriesValue + \ Applet Screensaver Shell TrayIcon + \ contained + +" Exec/TryExec {{{3 +syn match dtExec /^\%(Exec\|TryExec\)\s*=.\+\S/ contains=dtExecKey,dtDelim,dtExecParam transparent +syn keyword dtExecKey + \ Exec TryExec + \ contained nextgroup=dtDelim +" code for file(s), URL(s), etc +syn match dtExecParam /\s\zs%[fFuUick]\ze\%(\W\|$\)/ contained -" X-Addition -syn match dtXAdd /^\s*X-.*/ contains=dtXAddKey,dtDelim transparent -syn match dtXAddKey /^\s*X-.\{-}\s*=\@=/ nextgroup=dtDelim containedin=dtXAdd contains=dtXLocale contained +" Type {{{3 +syn match dtType /^Type\s*=\s*\S\+/ contains=dtTypeKey,dtDelim,dtTypeValue transparent +syn keyword dtTypeKey + \ Type + \ contained nextgroup=dtDelim +syn keyword dtTypeValue + \ Application Directory Link + \ contained -" Locale for X-Addition -syn match dtXLocale /\[.\{-}\]\s*=\@=/ containedin=dtXAddKey contained - -" Locale for all -syn match dtALocale /\[.\{-}\]\s*=\@=/ containedin=ALL +if s:desktop_enable_kde + syn keyword dtTypeValue + \ FSDevice Service ServiceType + \ contained +endif -" Define the default highlighting. -" Only when an item doesn't have highlighting yet +" Version {{{3 +syn match dtVersion /^Version\s*=\s*\S\+/ contains=dtVersionKey,dtDelim,dtVersionValue transparent +syn keyword dtVersionKey + \ Version + \ contained nextgroup=dtDelim +syn match dtVersionValue /[0-9]\+\%(\.[0-9]\+\)\{1,2}$/ contained -hi def link dtGroup Special -hi def link dtComment Comment -hi def link dtDelim String +" Localestring Value {{{2 +syn match dtLocalestring + \ /^\%(Comment\|GenericName\|Keywords\|Name\)\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtLocalestringKey,dtLocaleSuffix,dtDelim transparent +syn keyword dtLocalestringKey + \ Comment GenericName Keywords Name + \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite -hi def link dtLocaleKey Type -hi def link dtLocaleName Identifier -hi def link dtXLocale Identifier -hi def link dtALocale Identifier +" Iconstring Value {{{2 +syn match dtIconstring + \ /^Icon\s*=.*\S/ + \ contains=dtIconstringKey,dtDelim transparent +syn keyword dtIconstringKey + \ Icon + \ contained nextgroup=dtDelim skipwhite -hi def link dtNumericKey Type +if s:desktop_enable_kde + syn match dtIconstring + \ /^UnmountIcon\>\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtIconstringKey,dtLocaleSuffix,dtDelim transparent + syn keyword dtIconstringKey + \ UnmountIcon + \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite +endif + +" X-Extension {{{2 +syn match dtXExtension /^X-[0-9A-Za-z-]*\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtXExtensionKey,dtLocaleSuffix,dtDelim transparent +syn match dtXExtensionKey /^X-[0-9A-Za-z-]*/ contained nextgroup=dtLocaleSuffix,dtDelim -hi def link dtBooleanKey Type -hi def link dtBooleanValue Constant +" non standard {{{2 +if s:desktop_enable_nonstd + syn match dtNonStdLabel /^[0-9A-Za-z-]\+\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtNonStdLabelKey,dtLocaleSuffix,dtDelim transparent + syn match dtNonStdLabelKey /^[0-9A-Za-z-]\+/ contained nextgroup=dtLocaleSuffix,dtDelim +endif + +" Highlight {{{1 +hi def link dtComment Comment +hi def link dtError Error -hi def link dtStringKey Type +hi def link dtGroup Special + +hi def link dtDelim Delimiter +hi def link dtLocaleSuffix Identifier + +hi def link dtBooleanKey Type +hi def link dtBooleanValue Boolean + +hi def link dtNumericKey Type +hi def link dtNumericDecimal Number -hi def link dtExecKey Type -hi def link dtExecParam Special -hi def link dtTypeKey Type -hi def link dtTypeValue Constant -hi def link dtNotStLabel Type -hi def link dtXAddKey Type +hi def link dtStringKey Type +hi def link dtCategoriesKey Type +hi def link dtCategoriesValue Constant +hi def link dtExecKey Type +hi def link dtExecParam Special +hi def link dtTypeKey Type +hi def link dtTypeValue Constant +hi def link dtVersionKey Type +hi def link dtVersionValue Constant + +hi def link dtLocalestringKey Type +hi def link dtIconStringKey Type +hi def link dtXExtensionKey Type + +hi def link dtNonStdLabelKey Type + +" Clean Up {{{1 let b:current_syntax = "desktop" +let &cpo = s:cpo_save -" vim:ts=8 +" vim:ts=8:sw=2:fdm=marker diff --git a/runtime/syntax/objc.vim b/runtime/syntax/objc.vim --- a/runtime/syntax/objc.vim +++ b/runtime/syntax/objc.vim @@ -1,7 +1,8 @@ " Vim syntax file " Language: Objective-C " Maintainer: Kazunobu Kuriyama -" Last Change: 2015 Dec 14 +" Last Change: 2020 Jun 07 +" Last Change By Maintainer: 2015 Dec 14 """ Preparation for loading ObjC stuff if exists("b:current_syntax") @@ -24,7 +25,7 @@ syn keyword objcUsefulTerm nil Nil NO YE " Preprocessor Directives syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ -syn match objcImported display contained "\(<\h[-a-zA-Z0-9_/]*\.h>\|<[a-z0-9]\+>\)" +syn match objcImported display contained "\(<\h[-+a-zA-Z0-9_/]*\.h>\|<[a-z0-9]\+>\)" syn match objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported " ObjC Compiler Directives diff --git a/runtime/syntax/tex.vim b/runtime/syntax/tex.vim --- a/runtime/syntax/tex.vim +++ b/runtime/syntax/tex.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: TeX " Maintainer: Charles E. Campbell -" Last Change: May 19, 2020 -" Version: 117 +" Last Change: Jun 07, 2020 +" Version: 118 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX " " Notes: {{{1 @@ -755,6 +755,8 @@ if has("conceal") && &enc == 'utf-8' \ ['lceil' , '⌈'], \ ['ldots' , '…'], \ ['le' , '≤'], + \ ['left|' , '|'], + \ ['left\|' , '‖'], \ ['left(' , '('], \ ['left\[' , '['], \ ['left\\{' , '{'], @@ -805,6 +807,8 @@ if has("conceal") && &enc == 'utf-8' \ ['quad' , ' '], \ ['qquad' , ' '], \ ['rfloor' , '⌋'], + \ ['right|' , '|'], + \ ['right\\|' , '‖'], \ ['right)' , ')'], \ ['right]' , ']'], \ ['right\\}' , '}'],