# HG changeset patch # User Bram Moolenaar # Date 1644587103 -3600 # Node ID 9fe2fed9bb4b7315b42a8566c4686c8c20849c64 # Parent 30029eb56fbcf9eba0aa7b3ca65e30eaaad89f40 Update runtime files. (closes #9741) Commit: https://github.com/vim/vim/commit/92f645bef7bb817822d115291fe584b15647d577 Author: Bram Moolenaar Date: Fri Feb 11 13:29:40 2022 +0000 Update runtime files. (closes https://github.com/vim/vim/issues/9741) 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: 2022 Feb 04 +*testing.txt* For Vim version 8.2. Last change: 2022 Feb 10 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: 2022 Feb 09 +*todo.txt* For Vim version 8.2. Last change: 2022 Feb 11 VIM REFERENCE MANUAL by Bram Moolenaar @@ -38,6 +38,9 @@ browser use: https://github.com/vim/vim/ *known-bugs* -------------------- Known bugs and current work ----------------------- +Disallow using "s:" in Vim9 script at the script level. +Disallow a legacy function creating an s: variable in Vim9 script. + Once Vim9 is stable: - Use Vim9 for runtime files. - Check code coverage, add more tests if needed. 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: 2022 Jan 28 +*usr_41.txt* For Vim version 8.2. Last change: 2022 Feb 11 VIM USER MANUAL - by Bram Moolenaar @@ -2512,6 +2512,8 @@ continuation, as mentioned above |use-cp For undoing the effect of an indent script, the b:undo_indent variable should be set accordingly. +Both these variables use legacy script syntax, not |Vim9| syntax. + FILE NAME 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: 2022 Feb 09 +*vim9.txt* For Vim version 8.2. Last change: 2022 Feb 11 VIM REFERENCE MANUAL by Bram Moolenaar @@ -219,20 +219,18 @@ be given. 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. To define a global function or -variable the "g:" prefix must be used. For functions in a script that is to -be imported and in an autoload script "export" needs to be used. > +in a Vim9 script, the function is local to the script. Like prefixing "s:" in +legacy script. To define a global function or variable the "g:" prefix must +be used. For functions in a script that is to be imported and in an autoload +script "export" needs to be used. > def ThisFunction() # script-local - def s:ThisFunction() # script-local def g:ThatFunction() # global export def Function() # for import and import autoload < *E1058* *E1075* When using `:function` or `:def` to specify a nested function inside a `:def` function and no namespace was given, this nested function is local to the code -block it is defined in. In a `:def` function it is not possible to define a -script-local function. It is possible to define a global function by using -the "g:" prefix. +block it is defined in. It is not possible to define a script-local function. +It is possible to define a global function by using the "g:" prefix. When referring to a function and no "s:" or "g:" prefix is used, Vim will search for the function: @@ -244,6 +242,13 @@ start with an upper case letter even whe script "s:funcref" could be used, because it could not be referred to with "funcref". In Vim9 script it can, therefore "s:Funcref" must be used to avoid that the name interferes with builtin functions. + *vim9-s-namespace* +The use of the "s:" prefix is not supported at the Vim9 script level. All +functions and variables without a prefix are script-local. +In :def functions the use of "s:" is optional. This is because in legacy +script the "s:" might be needed. Disallowing the use of "s:" only in a :def +function in Vim9 script would be a bit confusing. +In legacy functions the use of "s:" for script items is required, as before. In all cases the function must be defined before used. That is when it is called, when `:defcompile` causes it to be compiled, or when code that calls diff --git a/runtime/ftplugin.vim b/runtime/ftplugin.vim --- a/runtime/ftplugin.vim +++ b/runtime/ftplugin.vim @@ -3,7 +3,7 @@ vim9script noclear # Vim support file to switch on loading plugins for file types # # Maintainer: Bram Moolenaar -# Last change: 2022 Feb 09 +# Last change: 2022 Feb 11 if exists("g:did_load_ftplugin") finish @@ -21,7 +21,8 @@ endif def LoadFTPlugin() if exists("b:undo_ftplugin") - exe b:undo_ftplugin + # We assume b:undo_ftplugin is using legacy script syntax + legacy exe b:undo_ftplugin unlet! b:undo_ftplugin b:did_ftplugin endif diff --git a/runtime/indent.vim b/runtime/indent.vim --- a/runtime/indent.vim +++ b/runtime/indent.vim @@ -1,7 +1,7 @@ " Vim support file to switch on loading indent files for file types " " Maintainer: Bram Moolenaar -" Last Change: 2022 Feb 04 +" Last Change: 2022 Feb 11 if exists("did_indent_on") finish @@ -14,7 +14,7 @@ augroup END def s:LoadIndent() if exists("b:undo_indent") - exe b:undo_indent + legacy exe b:undo_indent unlet! b:undo_indent b:did_indent endif var s = expand("") diff --git a/runtime/pack/dist/opt/shellmenu/plugin/shellmenu.vim b/runtime/pack/dist/opt/shellmenu/plugin/shellmenu.vim --- a/runtime/pack/dist/opt/shellmenu/plugin/shellmenu.vim +++ b/runtime/pack/dist/opt/shellmenu/plugin/shellmenu.vim @@ -7,51 +7,57 @@ " Attached is a Vim script file for turning gvim into a shell script editor. " It may also be used as an example how to use menus in Vim. " -" Written by: Lennart Schultz +" Maintainer: Ada (Haowen) Yu +" Original author: Lennart Schultz (mail unreachable) -imenu Stmts.for for in do doneki kk0elli -imenu Stmts.case case in ) ;; esacbki k0elli -imenu Stmts.if if then fiki kk0elli -imenu Stmts.if-else if then else fiki kki kk0elli -imenu Stmts.elif elif then ki kk0elli -imenu Stmts.while while do doneki kk0elli +" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise +" would not be recognized. See ":help 'cpoptions'". +let s:cpo_save = &cpo +set cpo&vim + +imenu Stmts.for for in dodoneki kk0elli +imenu Stmts.case case in) ;;esacbki k0elli +imenu Stmts.if if thenfiki kk0elli +imenu Stmts.if-else if thenelsefiki kki kk0elli +imenu Stmts.elif elif thenki kk0elli +imenu Stmts.while while dodoneki kk0elli imenu Stmts.break break imenu Stmts.continue continue -imenu Stmts.function () { }ki k0i +imenu Stmts.function () {}ki k0i imenu Stmts.return return imenu Stmts.return-true return 0 imenu Stmts.return-false return 1 imenu Stmts.exit exit imenu Stmts.shift shift imenu Stmts.trap trap -imenu Test.existence [ -e ]hi -imenu Test.existence - file [ -f ]hi -imenu Test.existence - file (not empty) [ -s ]hi -imenu Test.existence - directory [ -d ]hi -imenu Test.existence - executable [ -x ]hi -imenu Test.existence - readable [ -r ]hi -imenu Test.existence - writable [ -w ]hi -imenu Test.String is empty [ x = "x$" ]hhi -imenu Test.String is not empty [ x != "x$" ]hhi -imenu Test.Strings is equal [ "" = "" ]hhhhhhhi -imenu Test.Strings is not equal [ "" != "" ]hhhhhhhhi -imenu Test.Values is greater than [ -gt ]hhhhhhi -imenu Test.Values is greater equal [ -ge ]hhhhhhi -imenu Test.Values is equal [ -eq ]hhhhhhi -imenu Test.Values is not equal [ -ne ]hhhhhhi -imenu Test.Values is less than [ -lt ]hhhhhhi -imenu Test.Values is less equal [ -le ]hhhhhhi -imenu ParmSub.Substitute word if parm not set ${:-}hhi -imenu ParmSub.Set parm to word if not set ${:=}hhi -imenu ParmSub.Substitute word if parm set else nothing ${:+}hhi -imenu ParmSub.If parm not set print word and exit ${:?}hhi -imenu SpShVars.Number of positional parameters ${#} -imenu SpShVars.All positional parameters (quoted spaces) ${*} -imenu SpShVars.All positional parameters (unquoted spaces) ${@} -imenu SpShVars.Flags set ${-} -imenu SpShVars.Return code of last command ${?} -imenu SpShVars.Process number of this shell ${$} -imenu SpShVars.Process number of last background command ${!} +imenu Test.existence [ -e ]hi +imenu Test.existence\ -\ file [ -f ]hi +imenu Test.existence\ -\ file\ (not\ empty) [ -s ]hi +imenu Test.existence\ -\ directory [ -d ]hi +imenu Test.existence\ -\ executable [ -x ]hi +imenu Test.existence\ -\ readable [ -r ]hi +imenu Test.existence\ -\ writable [ -w ]hi +imenu Test.String\ is\ empty [ x = "x$" ]hhi +imenu Test.String\ is\ not\ empty [ x != "x$" ]hhi +imenu Test.Strings\ is\ equal [ "" = "" ]hhhhhhhi +imenu Test.Strings\ is\ not\ equal [ "" != "" ]hhhhhhhhi +imenu Test.Values\ is\ greater\ than [ -gt ]hhhhhhi +imenu Test.Values\ is\ greater\ equal [ -ge ]hhhhhhi +imenu Test.Values\ is\ equal [ -eq ]hhhhhhi +imenu Test.Values\ is\ not\ equal [ -ne ]hhhhhhi +imenu Test.Values\ is\ less\ than [ -lt ]hhhhhhi +imenu Test.Values\ is\ less\ equal [ -le ]hhhhhhi +imenu ParmSub.Substitute\ word\ if\ parm\ not\ set ${:-}hhi +imenu ParmSub.Set\ parm\ to\ word\ if\ not\ set ${:=}hhi +imenu ParmSub.Substitute\ word\ if\ parm\ set\ else\ nothing ${:+}hhi +imenu ParmSub.If\ parm\ not\ set\ print\ word\ and\ exit ${:?}hhi +imenu SpShVars.Number\ of\ positional\ parameters ${#} +imenu SpShVars.All\ positional\ parameters\ (quoted\ spaces) ${*} +imenu SpShVars.All\ positional\ parameters\ (unquoted\ spaces) ${@} +imenu SpShVars.Flags\ set ${-} +imenu SpShVars.Return\ code\ of\ last\ command ${?} +imenu SpShVars.Process\ number\ of\ this\ shell ${$} +imenu SpShVars.Process\ number\ of\ last\ background\ command ${!} imenu Environ.HOME ${HOME} imenu Environ.PATH ${PATH} imenu Environ.CDPATH ${CDPATH} @@ -82,13 +88,17 @@ imenu Builtins.umask umask imenu Builtins.wait wait imenu Set.set set imenu Set.unset unset -imenu Set.mark modified or modified variables set -a -imenu Set.exit when command returns non-zero exit code set -e -imenu Set.Disable file name generation set -f -imenu Set.remember function commands set -h -imenu Set.All keyword arguments are placed in the environment set -k -imenu Set.Read commands but do not execute them set -n -imenu Set.Exit after reading and executing one command set -t -imenu Set.Treat unset variables as an error when substituting set -u -imenu Set.Print shell input lines as they are read set -v -imenu Set.Print commands and their arguments as they are executed set -x +imenu Set.mark\ modified\ or\ modified\ variables set -a +imenu Set.exit\ when\ command\ returns\ non-zero\ exit\ code set -e +imenu Set.Disable\ file\ name\ generation set -f +imenu Set.remember\ function\ commands set -h +imenu Set.All\ keyword\ arguments\ are\ placed\ in\ the\ environment set -k +imenu Set.Read\ commands\ but\ do\ not\ execute\ them set -n +imenu Set.Exit\ after\ reading\ and\ executing\ one\ command set -t +imenu Set.Treat\ unset\ variables\ as\ an\ error\ when\ substituting set -u +imenu Set.Print\ shell\ input\ lines\ as\ they\ are\ read set -v +imenu Set.Print\ commands\ and\ their\ arguments\ as\ they\ are\ executed set -x + +" Restore the previous value of 'cpoptions'. +let &cpo = s:cpo_save +unlet s:cpo_save