diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 35da109210..0000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,52 +0,0 @@ -version: "{build}" - -image: Visual Studio 2015 - -skip_tags: true - -environment: - matrix: - - FEATURE: HUGE - - # Alternate environments, not used right now. 2022 is a lot slower. - # - # - job_name: VS-2015 - # appveyor_build_worker_image: Visual Studio 2015 - # FEATURE: HUGE - - # - job_name: VS-2017 - # appveyor_build_worker_image: Visual Studio 2017 - # FEATURE: HUGE - - # - job_name: VS-2019 - # appveyor_build_worker_image: Visual Studio 2019 - # FEATURE: HUGE - - # - job_name: VS-2022 - # appveyor_build_worker_image: Visual Studio 2022 - # FEATURE: HUGE - -# disabled -# - FEATURE: TINY -# - FEATURE: NORMAL - -matrix: - fast_finish: true - -before_build: - - call ver - - ci\appveyor.bat install - -build_script: - - ci\appveyor.bat build - -test_script: - - ci\appveyor.bat test - -artifacts: - - path: src/vim.exe - name: vim - - path: src/gvim.exe - name: gvim - -# vim: sw=2 sts=2 et ts=8 sr diff --git a/.cirrus.yml b/.cirrus.yml deleted file mode 100644 index b8d9c78525..0000000000 --- a/.cirrus.yml +++ /dev/null @@ -1,31 +0,0 @@ -env: - CIRRUS_CLONE_DEPTH: 3 - FEATURES: huge - -freebsd_task: - name: FreeBSD - matrix: - - name: FreeBSD 14.3 - freebsd_instance: - image_family: freebsd-14-3 - timeout_in: 20m - install_script: - - pkg install -y gettext - build_script: - - NPROC=$(getconf _NPROCESSORS_ONLN) - - ./configure --with-features=${FEATURES} - - make -j${NPROC} - test_script: - - src/vim --version - # run tests as user "cirrus" instead of root - - pw useradd cirrus -m - - chown -R cirrus:cirrus . - - sudo -u cirrus make test - on_failure: - test_artifacts: - name: "Cirrus-${CIRRUS_BUILD_ID}-freebsd-failed-tests" - path: | - runtime/indent/testdir/*.fail - runtime/syntax/testdir/failed/* - src/testdir/failed/* - type: application/octet-stream diff --git a/.editorconfig b/.editorconfig index 7b09a2cae1..3225dd7b96 100644 --- a/.editorconfig +++ b/.editorconfig @@ -41,10 +41,13 @@ trim_trailing_whitespace = false trim_trailing_whitespace = false # -# Some custom files do not use tabs +# Some custom files and git commit message do not use tabs # [src/sign.c] indent_style = space [src/sound.c] indent_style = space + +[.git/COMMIT_EDITMSG] +indent_style = space diff --git a/.gitattributes b/.gitattributes index bad1d9edb2..8e1788a752 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,13 @@ -src/testdir/test42.in diff +# The old test .ok files are expected to use LF line endings, even on Windows. +# In src/testdir/Make_mvc.mak and src/testdir/Make_ming.mak, the test result +# files .out are converted to LF line endings before being compared. +# Therefore, if the .ok files' line endings are not specified and are +# converted to CRLF, the comparison between .ok and .out will fail. +src/testdir/test*.ok text eol=lf + +# This ok file contains literal CR LF endings. Should not be touched by git, +# so handle as binary +src/testdir/test21.ok -text # `vim.pot` is updated every time any of the *.c files are modified. And as it # contains line numbers for strings from *.c files, inserting a line into a @@ -24,8 +33,11 @@ src/po/vim.pot -diff src/po/vim.pot diff=ignore_vim_pot # GitHub reacts to the `linguist-generated` attribute, by ignoring marked files -# for the repository's language statistics and hiddning changes in these files +# for the repository's language statistics and hiding changes in these files # by default in diffs. # # https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github src/po/vim.pot linguist-generated=true +*.dump linguist-generated=true + +runtime/syntax/testdir/input/vim_ex_help.vim -text diff linguist-language=vim linguist-detectable=true diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index d904e1c95a..10f8ecbac3 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -3,22 +3,28 @@ # You can use github users with @user or email addresses # These owners will be the default owners for everything in the repo. -#* @brammool +#* @brammool # Order is important. The last matching pattern has the most precedence. # So if a pull request only touches javascript files, only these owners # will be requested to review. -nsis/lang/russian.nsi @RestorerZ +runtime/autoload/beancount.vim @nathangrigg +runtime/autoload/beancountcomplete.vim @nathangrigg +runtime/autoload/context.vim @lifepillar runtime/autoload/freebasic.vim @dkearns runtime/autoload/hare.vim @selenebun runtime/autoload/hcl.vim @gpanders +runtime/autoload/javascriptcomplete.vim @jsit runtime/autoload/modula2.vim @dkearns runtime/autoload/rubycomplete.vim @segfault @dkearns runtime/autoload/rust.vim @lilyball +runtime/autoload/tohtml.vim @fritzophrenic +runtime/autoload/typeset.vim @lifepillar runtime/autoload/xmlformat.vim @chrisbra runtime/autoload/dist/json.vim @habamax runtime/colors/blue.vim @habamax @romainl @neutaaaaan +runtime/colors/catppuccin.vim @mao-yining runtime/colors/darkblue.vim @habamax @romainl @neutaaaaan runtime/colors/default.vim @habamax @romainl @neutaaaaan runtime/colors/delek.vim @habamax @romainl @neutaaaaan @@ -44,8 +50,14 @@ runtime/colors/torte.vim @habamax @romainl @neutaaaaan runtime/colors/wildcharm.vim @habamax @romainl @neutaaaaan runtime/colors/zaibatsu.vim @habamax @romainl @neutaaaaan runtime/colors/zellner.vim @habamax @romainl @neutaaaaan +runtime/compiler/bash.vim @Konfekt +runtime/compiler/bean_check.vim @nathangrigg +runtime/compiler/biome.vim @Konfekt +runtime/compiler/cabal.vim @mateoxh runtime/compiler/checkstyle.vim @dkearns runtime/compiler/cm3.vim @dkearns +runtime/compiler/context.vim @lifepillar +runtime/compiler/cppcheck.vim @Konfekt runtime/compiler/cucumber.vim @tpope runtime/compiler/dart.vim @dkearns runtime/compiler/dart2js.vim @dkearns @@ -68,9 +80,12 @@ runtime/compiler/icon.vim @dkearns runtime/compiler/javac.vim @dkearns runtime/compiler/jest.vim @dkearns runtime/compiler/jjs.vim @dkearns +runtime/compiler/jq.vim @vito-c runtime/compiler/jshint.vim @dkearns runtime/compiler/jsonlint.vim @dkearns -runtime/compiler/jq.vim @vito-c +runtime/compiler/just.vim @Alarcritty +runtime/compiler/make.vim @Konfekt +runtime/compiler/mypy.vim @Konfekt runtime/compiler/pandoc.vim @Konfekt runtime/compiler/perl.vim @petdance @heptite runtime/compiler/perlcritic.vim @petdance @dkearns @@ -78,6 +93,8 @@ runtime/compiler/php.vim @dkearns runtime/compiler/phpstan.vim @dietrichm runtime/compiler/podchecker.vim @petdance @dkearns runtime/compiler/powershell.vim @heaths +runtime/compiler/pyright.vim @Konfekt +runtime/compiler/pytest.vim @Konfekt runtime/compiler/raco.vim @benknoble runtime/compiler/racomake.vim @benknoble runtime/compiler/racosetup.vim @benknoble @@ -93,12 +110,14 @@ runtime/compiler/se.vim @dkearns runtime/compiler/shellcheck.vim @dkearns runtime/compiler/sml.vim @dkearns runtime/compiler/spectral.vim @romainl -runtime/compiler/svelte-check.vim @Konfekt runtime/compiler/stylelint.vim @dkearns +runtime/compiler/svelte-check.vim @Konfekt runtime/compiler/tcl.vim @dkearns runtime/compiler/tidy.vim @dkearns +runtime/compiler/tombi.vim @Konfekt runtime/compiler/ts-node.vim @dkearns runtime/compiler/tsc.vim @dkearns +runtime/compiler/ty.vim @Konfekt runtime/compiler/typedoc.vim @dkearns runtime/compiler/xmllint.vim @dkearns runtime/compiler/xo.vim @dkearns @@ -117,6 +136,7 @@ runtime/doc/xxd-ru.1 @RestorerZ runtime/doc/xxd-ru.UTF-8.1 @RestorerZ runtime/ftplugin/abaqus.vim @costerwi runtime/ftplugin/abnf.vim @A4-Tacks +runtime/ftplugin/algol68.vim @dkearns runtime/ftplugin/antlr4.vim @jiangyinzuo runtime/ftplugin/apache.vim @dubgeiser runtime/ftplugin/arduino.vim @k-takata @@ -125,9 +145,13 @@ runtime/ftplugin/asy.vim @avidseeker runtime/ftplugin/autohotkey.vim @telemachus runtime/ftplugin/awk.vim @dkearns runtime/ftplugin/basic.vim @dkearns +runtime/ftplugin/beancount.vim @nathangrigg +runtime/ftplugin/bicep.vim @scottmckendry +runtime/ftplugin/bicep-params.vim @scottmckendry runtime/ftplugin/brighterscript.vim @ribru17 runtime/ftplugin/brightscript.vim @ribru17 runtime/ftplugin/bst.vim @tpope +runtime/ftplugin/bpftrace.vim @sgruszka runtime/ftplugin/c3.vim @ttytm runtime/ftplugin/cabal.vim @ribru17 runtime/ftplugin/cedar.vim @ribru17 @@ -137,6 +161,7 @@ runtime/ftplugin/chicken.vim @evhan runtime/ftplugin/clojure.vim @axvr runtime/ftplugin/cmakecache.vim @ribru17 runtime/ftplugin/codeowners.vim @jparise +runtime/ftplugin/context.vim @lifepillar runtime/ftplugin/cook.vim @ribru17 runtime/ftplugin/cs.vim @nickspoons runtime/ftplugin/csh.vim @dkearns @@ -214,17 +239,22 @@ runtime/ftplugin/julia.vim @carlobaldassi runtime/ftplugin/just.vim @pbnj runtime/ftplugin/kconfig.vim @chrisbra runtime/ftplugin/kdl.vim @imsnif @jiangyinzuo -runtime/ftplugin/kerml.vim @daumantas-kavolis-sensmetry +runtime/ftplugin/kerml.vim @daumantas-kavolis-sensmetry +runtime/ftplugin/kitty.vim @rivenirvana runtime/ftplugin/kivy.vim @ribru17 runtime/ftplugin/kotlin.vim @udalov runtime/ftplugin/lc.vim @ribru17 runtime/ftplugin/ldapconf.vim @ribru17 +runtime/ftplugin/leex.vim @jparise runtime/ftplugin/leo.vim @ribru17 runtime/ftplugin/less.vim @genoma runtime/ftplugin/lex.vim @ribru17 runtime/ftplugin/lf.vim @andis-sprinkis runtime/ftplugin/liquid.vim @tpope +runtime/ftplugin/logtalk.dict @pmoura +runtime/ftplugin/logtalk.vim @pmoura runtime/ftplugin/lua.vim @dkearns +runtime/ftplugin/luau.vim @lopi-py runtime/ftplugin/lynx.vim @dkearns runtime/ftplugin/m17ndb.vim @dseomn runtime/ftplugin/m3build.vim @dkearns @@ -233,11 +263,14 @@ runtime/ftplugin/markdown.vim @tpope runtime/ftplugin/mbsync.vim @fymyte runtime/ftplugin/mediawiki.vim @avidseeker runtime/ftplugin/meson.vim @Liambeguin +runtime/ftplugin/mf.vim @lifepillar runtime/ftplugin/modula2.vim @dkearns runtime/ftplugin/modula3.vim @dkearns runtime/ftplugin/mojo.vim @ribru17 +runtime/ftplugin/mp.vim @lifepillar runtime/ftplugin/mss.vim @Freed-Wu runtime/ftplugin/nginx.vim @chr4 +runtime/ftplugin/nickel.vim @ribru17 runtime/ftplugin/nim.vim @ribru17 runtime/ftplugin/nroff.vim @averms runtime/ftplugin/nsis.vim @k-takata @@ -245,7 +278,7 @@ runtime/ftplugin/nu.vim @elkasztano runtime/ftplugin/octave.vim @dkearns runtime/ftplugin/ondir.vim @jparise runtime/ftplugin/opencl.vim @Freed-Wu -runtime/ftplugin/openscad.vim @squibid +runtime/ftplugin/openscad.vim @squibid runtime/ftplugin/openvpn.vim @ObserverOfTime runtime/ftplugin/pascal.vim @dkearns runtime/ftplugin/pbtxt.vim @lakshayg @@ -286,6 +319,7 @@ runtime/ftplugin/sed.vim @dkearns runtime/ftplugin/sh.vim @dkearns runtime/ftplugin/shaderslang.vim @mTvare6 runtime/ftplugin/slint.vim @ribru17 +runtime/ftplugin/sml.vim @tocariimaa runtime/ftplugin/snakemake.vim @ribru17 runtime/ftplugin/solidity.vim @coti-z runtime/ftplugin/solution.vim @dkearns @@ -298,7 +332,7 @@ runtime/ftplugin/sshdconfig.vim @jiangyinzuo runtime/ftplugin/svelte.vim @igorlfs runtime/ftplugin/sway.vim @ribru17 runtime/ftplugin/swayconfig.vim @jamespeapen -runtime/ftplugin/sysml.vim @daumantas-kavolis-sensmetry +runtime/ftplugin/sysml.vim @daumantas-kavolis-sensmetry runtime/ftplugin/systemverilog.vim @Kocha runtime/ftplugin/swig.vim @jmarrec runtime/ftplugin/tap.vim @petdance @@ -310,6 +344,7 @@ runtime/ftplugin/thrift.vim @jiangyinzuo runtime/ftplugin/tiasm.vim @Freed-Wu runtime/ftplugin/tidy.vim @dkearns runtime/ftplugin/tmux.vim @ericpruitt +runtime/ftplugin/tolk.vim @redavy runtime/ftplugin/toml.vim @averms runtime/ftplugin/tt2html.vim @petdance runtime/ftplugin/twig.vim @ribru17 @@ -322,6 +357,7 @@ runtime/ftplugin/vdf.vim @ObserverOfTime runtime/ftplugin/vim.vim @dkearns runtime/ftplugin/wget.vim @dkearns runtime/ftplugin/wget2.vim @dkearns +runtime/ftplugin/wks.vim @anakin4747 runtime/ftplugin/xcompose.vim @ObserverOfTime runtime/ftplugin/xml.vim @chrisbra runtime/ftplugin/xs.vim @petdance @@ -331,11 +367,14 @@ runtime/import/dist/vimhighlight.vim @lacygoill runtime/indent/arduino.vim @k-takata runtime/indent/astro.vim @wuelnerdotexe runtime/indent/basic.vim @dkearns +runtime/indent/beancount.vim @nathangrigg +runtime/indent/bpftrace.vim @sgruszka runtime/indent/bst.vim @tpope runtime/indent/cdl.vim @dkearns runtime/indent/chatito.vim @ObserverOfTime runtime/indent/clojure.vim @axvr runtime/indent/config.vim @dkearns +runtime/indent/context.vim @lifepillar runtime/indent/cs.vim @nickspoons runtime/indent/css.vim @dkearns runtime/indent/cucumber.vim @tpope @@ -359,6 +398,7 @@ runtime/indent/go.vim @dbarnett runtime/indent/graphql.vim @jparise runtime/indent/gyp.vim @ObserverOfTime runtime/indent/haml.vim @tpope +runtime/indent/handlebars.vim @sukima runtime/indent/hare.vim @selenebun runtime/indent/hcl.vim @gpanders runtime/indent/hog.vim @wtfbbqhax @@ -370,18 +410,24 @@ runtime/indent/json.vim @elzr runtime/indent/jsonc.vim @izhakjakov runtime/indent/julia.vim @carlobaldassi runtime/indent/just.vim @pbnj +runtime/indent/karel.vim @KnoP-01 runtime/indent/kdl.vim @imsnif @jiangyinzuo runtime/indent/kotlin.vim @udalov runtime/indent/krl.vim @KnoP-01 runtime/indent/ld.vim @dkearns +runtime/indent/lf.vim @andis-sprinkis runtime/indent/less.vim @genoma runtime/indent/liquid.vim @tpope +runtime/indent/logtalk.vim @pmoura runtime/indent/lua.vim @marcuscf +runtime/indent/luau.vim @lopi-py runtime/indent/m17ndb.vim @dseomn runtime/indent/make.vim @dkearns runtime/indent/meson.vim @Liambeguin +runtime/indent/mf.vim @lifepillar runtime/indent/mma.vim @dkearns runtime/indent/mojo.vim @ribru17 +runtime/indent/mp.vim @lifepillar runtime/indent/nginx.vim @chr4 runtime/indent/nsis.vim @k-takata runtime/indent/nu.vim @elkasztano @@ -432,10 +478,13 @@ runtime/pack/dist/opt/helptoc/ @kennypete runtime/pack/dist/opt/matchit/ @chrisbra runtime/pack/dist/opt/nohlsearch/ @habamax runtime/plugin/manpager.vim @Konfekt -runtime/syntax/shared/hgcommitDiff.vim @vegerot +runtime/plugin/tohtml.vim @fritzophrenic +runtime/syntax/2html.vim @fritzophrenic runtime/syntax/abaqus.vim @costerwi runtime/syntax/abnf.vim @A4-Tacks runtime/syntax/aidl.vim @dpelle +runtime/syntax/algol68.vim @dkearns +runtime/syntax/amiga.vim @sodero runtime/syntax/ant.vim @dkearns runtime/syntax/antlr4.vim @jiangyinzuo runtime/syntax/arduino.vim @johshoff @@ -448,6 +497,8 @@ runtime/syntax/asy.vim @avidseeker runtime/syntax/autohotkey.vim @mmikeww runtime/syntax/awk.vim @dkearns runtime/syntax/basic.vim @dkearns +runtime/syntax/beancount.vim @nathangrigg +runtime/syntax/bpftrace.vim @sgruszka runtime/syntax/bst.vim @tpope runtime/syntax/bzl.vim @dbarnett runtime/syntax/bzr.vim @hdima @@ -461,7 +512,10 @@ runtime/syntax/chicken.vim @evhan runtime/syntax/chuck.vim @andreacfromtheapp runtime/syntax/clojure.vim @axvr runtime/syntax/codeowners.vim @jparise +runtime/syntax/context.vim @lifepillar runtime/syntax/cs.vim @nickspoons +runtime/syntax/csh.vim @dkearns +runtime/syntax/css.vim @jsit runtime/syntax/csv.vim @habamax runtime/syntax/cucumber.vim @tpope runtime/syntax/d.vim @JesseKPhillips @@ -492,6 +546,7 @@ runtime/syntax/forth.vim @jkotlinski runtime/syntax/fpcmake.vim @dkearns runtime/syntax/freebasic.vim @dkearns runtime/syntax/fstab.vim @rid9 +runtime/syntax/gdb.vim @dkearns runtime/syntax/gdresource.vim @habamax runtime/syntax/gdscript.vim @habamax runtime/syntax/gdshader.vim @habamax @@ -503,6 +558,7 @@ runtime/syntax/gitignore.vim @ObserverOfTime runtime/syntax/gitolite.vim @sitaramc runtime/syntax/gitrebase.vim @tpope runtime/syntax/gleam.vim @kirillmorozov +runtime/syntax/glimmer.vim @sukima runtime/syntax/glsl.vim @gpanders runtime/syntax/go.vim @bhcleek runtime/syntax/goaccess.vim @meonkeys @@ -513,6 +569,7 @@ runtime/syntax/graphql.vim @jparise runtime/syntax/groff.vim @jmarshall runtime/syntax/gyp.vim @ObserverOfTime runtime/syntax/haml.vim @tpope +runtime/syntax/handlebars.vim @sukima runtime/syntax/hare.vim @selenebun runtime/syntax/haredoc.vim @selenebun runtime/syntax/haskell.vim @coot @@ -534,41 +591,45 @@ runtime/syntax/java.vim @zzzyxwvut runtime/syntax/javascript.vim @fleiner runtime/syntax/jinja.vim @gpanders runtime/syntax/jjdescription.vim @gpanders +runtime/syntax/jq.vim @vito-c runtime/syntax/json.vim @vito-c runtime/syntax/jsonc.vim @izhakjakov runtime/syntax/julia.vim @carlobaldassi runtime/syntax/just.vim @pbnj -runtime/syntax/jq.vim @vito-c runtime/syntax/karel.vim @kirillmorozov runtime/syntax/kconfig.vim @chrisbra +runtime/syntax/kdl.vim @imsnif @jiangyinzuo runtime/syntax/kitty.vim @OXY2DEV runtime/syntax/kivy.vim @prophittcorey runtime/syntax/kotlin.vim @udalov -runtime/syntax/kdl.vim @imsnif @jiangyinzuo runtime/syntax/krl.vim @KnoP-01 +runtime/syntax/leex.vim @jparise runtime/syntax/less.vim @genoma runtime/syntax/lf.vim @andis-sprinkis runtime/syntax/liquid.vim @tpope runtime/syntax/log.vim @mao-yining +runtime/syntax/logtalk.vim @pmoura runtime/syntax/lua.vim @marcuscf +runtime/syntax/luau.vim @lopi-py runtime/syntax/lynx.vim @dkearns runtime/syntax/lyrics.vim @ObserverOfTime runtime/syntax/m17ndb.vim @dseomn runtime/syntax/m3build.vim @dkearns runtime/syntax/m3quake.vim @dkearns runtime/syntax/mailcap.vim @dkearns -runtime/syntax/make.vim @rohieb runtime/syntax/mallard.vim @jhradilek runtime/syntax/markdown.vim @tpope -runtime/syntax/mbsync.vim @fymyte runtime/syntax/mason.vim @petdance +runtime/syntax/mbsync.vim @fymyte runtime/syntax/mediawiki.vim @avidseeker runtime/syntax/meson.vim @Liambeguin +runtime/syntax/mf.vim @lifepillar runtime/syntax/modula2.vim @dkearns runtime/syntax/modula2/opt/iso.vim @trijezdci runtime/syntax/modula2/opt/pim.vim @trijezdci runtime/syntax/modula2/opt/r10.vim @trijezdci runtime/syntax/modula3.vim @dkearns +runtime/syntax/mp.vim @lifepillar runtime/syntax/mss.vim @Freed-Wu runtime/syntax/n1ql.vim @pr3d4t0r runtime/syntax/nginx.vim @chr4 @@ -608,8 +669,8 @@ runtime/syntax/qml.vim @ChaseKnowlden runtime/syntax/racket.vim @benknoble runtime/syntax/raml.vim @in3d runtime/syntax/rapid.vim @KnoP-01 -runtime/syntax/ratpoison.vim @trapd00r runtime/syntax/rasi.vim @fymyte +runtime/syntax/ratpoison.vim @trapd00r runtime/syntax/rc.vim @chrisbra runtime/syntax/rcs.vim @hdima runtime/syntax/rebol.vim @mrdubya @@ -625,8 +686,11 @@ runtime/syntax/scala.vim @derekwyatt runtime/syntax/scheme.vim @evhan runtime/syntax/scss.vim @tpope runtime/syntax/sed.vim @dkearns -runtime/syntax/shared/debversions.vim @jamessan +runtime/syntax/sgf.vim @lykahb runtime/syntax/shaderslang.vim @mTvare6 +runtime/syntax/shared/debversions.vim @jamessan +runtime/syntax/shared/hgcommitDiff.vim @vegerot +runtime/syntax/skhd.vim @kiyoon runtime/syntax/solidity.vim @coti-z runtime/syntax/spajson.vim @dseomn runtime/syntax/spec.vim @ignatenkobrain @@ -650,6 +714,7 @@ runtime/syntax/thrift.vim @jiangyinzuo runtime/syntax/tiasm.vim @Freed-Wu runtime/syntax/tidy.vim @dkearns runtime/syntax/tmux.vim @ericpruitt +runtime/syntax/tolk.vim @redavy runtime/syntax/toml.vim @averms runtime/syntax/tt2.vim @petdance runtime/syntax/tt2html.vim @petdance @@ -664,13 +729,16 @@ runtime/syntax/vroom.vim @dbarnett runtime/syntax/wdl.vim @zenmatic runtime/syntax/wget.vim @dkearns runtime/syntax/wget2.vim @dkearns +runtime/syntax/wks.vim @anakin4747 runtime/syntax/xbl.vim @dkearns runtime/syntax/xcompose.vim @ObserverOfTime runtime/syntax/xml.vim @chrisbra +runtime/syntax/xsd.vim @chrisbra runtime/syntax/xs.vim @petdance -runtime/syntax/xslt.vim @Boobies +runtime/syntax/xslt.vim @chrisbra runtime/syntax/zserio.vim @dpelle runtime/syntax/zsh.vim @chrisbra +runtime/tools/preproc_indent.vim @h-east runtime/tutor/tutor1.eo @dpelle runtime/tutor/tutor1.fr @dpelle runtime/tutor/tutor1.ru @RestorerZ diff --git a/.github/actions/build_vim_on_linux/action.yml b/.github/actions/build_vim_on_linux/action.yml new file mode 100644 index 0000000000..c6486cd34f --- /dev/null +++ b/.github/actions/build_vim_on_linux/action.yml @@ -0,0 +1,325 @@ +name: Build Vim on Linux +description: Build Vim on Linux + +inputs: + features: + description: Vim features + required: true + compiler: + description: Compiler + required: true + architecture: + description: Architecture + required: false + extra: + description: Extra flags + required: true + shadow: + description: Shadow directory + required: false + interface: + description: Interface of language interpreter + required: false + lua_ver: + description: Lua version + required: false + python3: + description: Python3 ABI type + required: false + coverage: + description: Enable coverage + required: false + +runs: + using: "composite" + steps: + - name: Check Filelist (for packaging) + shell: bash + run: | + echo '::group::Check Filelist (for packaging)' + # If any files in the repository are not listed in Filelist this will + # exit with an error code and list the missing entries. + make -f ci/unlisted.make + echo '::endgroup::' + + - name: Check hlgroups (are any new hlgroups added, but not handled in highlight.c) + shell: bash + run: | + echo '::group::Check hlgroups (are any new hlgroups added, but not handled in highlight.c)' + # If any highlight groups have been documented, but not handled in + # highlight.c, nor listed as 'intentionally left out' in hlgroups.ignore, + # exit with an error code and list the missing entries. + make -C ci -f hlgroups.make + echo '::endgroup::' + + - name: Report executable syntax tests + if: contains(fromJSON(inputs.extra), 'syn_test_execs') + shell: bash + run: | + echo '::group::Report executable syntax tests' + # Search and list all found executable syntax tests, and exit with + # an error code. + make -C runtime/syntax executables + echo '::endgroup::' + + - name: Add i386 packages to dpkg + if: inputs.architecture == 'i386' + shell: bash + run: | + echo '::group::Add i386 packages to dpkg' + sudo dpkg --add-architecture i386 + echo '::endgroup::' + + - name: Uninstall snap + shell: bash + run: | + echo '::group::Uninstall snap' + sudo bash ci/remove_snap.sh + echo '::endgroup::' + + - name: Enable debug packages + shell: bash + run: | + echo '::group::Enable debug packages' + # Some of the ASAN suppressions are in libraries linked with dlopen + # and symbolization of them requires these debug packages. + sudo apt install ubuntu-dbgsym-keyring + sudo cp ci/ddebs.list /etc/apt/sources.list.d/ddebs.list + sudo cp ci/pinned-pkgs /etc/apt/preferences.d/pinned-pkgs + echo '::endgroup::' + + # TODO: switch to GTK4 GUI + - name: Install packages + shell: bash + run: | + echo '::group::Install packages' + # This is added by default, and it is often broken, but we don't need anything from it + sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list + PKGS=( \ + gettext \ + x11-utils \ + labwc \ + wl-clipboard \ + wayland-utils \ + libgtk-3-dev:${{ inputs.architecture }} \ + libgtk-3-bin:${{ inputs.architecture }} \ + desktop-file-utils \ + libc6-dbgsym:${{ inputs.architecture }} \ + libtool-bin \ + libncurses-dev:${{ inputs.architecture }} \ + libxt-dev:${{ inputs.architecture }} \ + libegl-mesa0:${{ inputs.architecture }} \ + libegl1:${{ inputs.architecture }} \ + libegl1-mesa-dev:${{ inputs.architecture }} \ + libepoxy-dev:${{ inputs.architecture }} \ + libwayland-egl1:${{ inputs.architecture }} \ + libwayland-client0:${{ inputs.architecture }} \ + libwayland-cursor0:${{ inputs.architecture }} \ + locales-all \ + software-properties-common \ + ) + if ${{ contains(fromJSON(inputs.extra), 'asan') }} && ${{ contains(inputs.architecture, 'native') }}; then + PKGS+=( \ + libepoxy0-dbgsym:${{ inputs.architecture }} \ + libxdamage1-dbgsym:${{ inputs.architecture }} \ + libxcb1-dbgsym:${{ inputs.architecture }} \ + libgtk-3-bin-dbgsym:${{ inputs.architecture }} \ + libgtk-3-0t64-dbgsym:${{ inputs.architecture }} \ + libglib2.0-0t64-dbgsym:${{ inputs.architecture }} \ + libglib2.0-bin-dbgsym:${{ inputs.architecture }} \ + libglib2.0-dev-bin-dbgsym:${{ inputs.architecture }} \ + ) + fi + if ${{ inputs.features == 'huge' }}; then + LUA_VER=${{ inputs.lua_ver || '5.4' }} + PKGS+=( \ + autoconf \ + gdb \ + lcov \ + libcanberra-dev \ + libperl-dev \ + python3-dev \ + liblua${LUA_VER}-dev \ + lua${LUA_VER} \ + ruby-dev \ + tcl-dev \ + cscope \ + libsodium-dev \ + attr \ + libattr1-dev + ) + fi + if ${{ contains(fromJSON(inputs.extra), 'proto') }}; then + PKGS+=( python3-clang ) + fi + sudo apt-get update && sudo apt-get upgrade -y --allow-downgrades && sudo apt-get install -y --allow-downgrades "${PKGS[@]}" + + - name: Install gcc-${{ env.GCC_VER }} + if: inputs.compiler == 'gcc' + shell: bash + run: | + echo '::group::Install gcc-${{ env.GCC_VER }}' + # ubuntu-toolchain-r/test PPA for gcc-13 compiler + # disabled because the installation failed, causing test failures + # sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + sudo apt-get update -y + sudo apt-get install -y gcc-${{ env.GCC_VER }}:${{ inputs.architecture }} + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_VER }} 100 + sudo update-alternatives --set gcc /usr/bin/gcc-${{ env.GCC_VER }} + echo '::endgroup::' + + - name: Install clang-${{ env.CLANG_VER }} + if: inputs.compiler == 'clang' + shell: bash + run: | + echo '::group::Install clang-${{ env.CLANG_VER }}' + . /etc/lsb-release + curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/llvm-archive-keyring.gpg > /dev/null + echo "Types: deb + URIs: https://apt.llvm.org/${DISTRIB_CODENAME}/ + Suites: llvm-toolchain-${DISTRIB_CODENAME}-${{ env.CLANG_VER }} + Components: main + Signed-By: /usr/share/keyrings/llvm-archive-keyring.gpg" | sudo tee /etc/apt/sources.list.d/llvm-toolchain.sources > /dev/null + sudo apt-get update -y + sudo apt-get install -y clang-${{ env.CLANG_VER }} llvm-${{ env.CLANG_VER }} + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.CLANG_VER }} 100 + sudo update-alternatives --set clang /usr/bin/clang-${{ env.CLANG_VER }} + sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${{ env.CLANG_VER }} 100 + sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${{ env.CLANG_VER }} 100 + echo '::endgroup::' + + - name: Set up environment + shell: bash + run: | + echo '::group::Set up environment' + mkdir -p "${LOG_DIR}" + mkdir -p "${HOME}/bin" + echo "${HOME}/bin" >> $GITHUB_PATH + ( + echo "LINUX_VERSION=$(uname -r)" + echo "NPROC=$(getconf _NPROCESSORS_ONLN)" + echo "TMPDIR=$(mktemp -d -p /tmp)" + + case "${{ inputs.features }}" in + tiny) + echo "TEST=testtiny" + if ${{ contains(fromJSON(inputs.extra), 'nogui') }}; then + CONFOPT="--disable-gui" + fi + ;; + normal) + ;; + huge) + echo "TEST=scripttests test_libvterm indenttest syntaxtest" + INTERFACE=${{ inputs.interface || 'yes' }} + if ${{ inputs.python3 == 'stable-abi' }}; then + PYTHON3_CONFOPT="--with-python3-stable-abi=3.8" + fi + # The ubuntu-24.04 CI runner does not provide a python2 package. + CONFOPT="--enable-perlinterp=${INTERFACE} --enable-pythoninterp=no --enable-python3interp=${INTERFACE} --enable-rubyinterp=${INTERFACE} --enable-luainterp=${INTERFACE} --enable-tclinterp=${INTERFACE} ${PYTHON3_CONFOPT}" + ;; + esac + + if ${{ contains(fromJSON(inputs.extra), 'no_x11_wl') }}; then + CONFOPT="${CONFOPT} --without-x --disable-gui --without-wayland --enable-socketserver" + fi + if ${{ inputs.coverage == true }}; then + CFLAGS="${CFLAGS} --coverage -DUSE_GCOV_FLUSH" + echo "LDFLAGS=--coverage" + fi + if ${{ contains(fromJSON(inputs.extra), 'uchar') }}; then + CFLAGS="${CFLAGS} -funsigned-char" + fi + if ${{ contains(fromJSON(inputs.extra), 'testgui') }}; then + echo "TEST=-C src testgui" + fi + if ${{ contains(fromJSON(inputs.extra), 'unittests') }}; then + echo "TEST=unittests" + fi + if ${{ contains(fromJSON(inputs.extra), 'asan') }}; then + echo "SANITIZER_CFLAGS=-g -O0 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" + echo "ASAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/asan" + echo "UBSAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/ubsan" + echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt" + fi + if ${{ contains(fromJSON(inputs.extra), 'vimtags') }}; then + echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim" + fi + if ${{ contains(fromJSON(inputs.extra), 'proto') }}; then + echo "TEST=-C src protoclean proto" + fi + echo "CFLAGS=${CFLAGS}" + echo "CONFOPT=${CONFOPT}" + # Disables GTK attempt to integrate with the accessibility service that does run in CI. + echo "NO_AT_BRIDGE=1" + ) >> $GITHUB_ENV + echo '::endgroup::' + + - name: Set up system + shell: bash + run: | + echo '::group::Set up system' + if [[ ${CC} = clang ]]; then + # Use llvm-cov instead of gcov when compiler is clang. + ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov + fi + sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 + sudo usermod -a -G audio "${USER}" + sudo bash ci/setup-xvfb.sh + echo '::endgroup::' + + - name: Check autoconf + if: contains(fromJSON(inputs.extra), 'unittests') + shell: bash + run: | + echo '::group::Check autoconf' + make -C src autoconf + echo '::endgroup::' + + - name: Set up shadow dir + if: inputs.shadow + shell: bash + run: | + echo '::group::Set up shadow dir' + make -C src shadow + echo "SRCDIR=${{ inputs.shadow }}" >> $GITHUB_ENV + echo "SHADOWOPT=-C ${{ inputs.shadow }}" >> $GITHUB_ENV + echo '::endgroup::' + + - name: Configure + shell: bash + run: | + echo '::group::Configure' + ./configure --with-features=${{ inputs.features }} ${CONFOPT} --enable-fail-if-missing + # Append various warning flags to CFLAGS. + sed -i -f ci/config.mk.sed ${SRCDIR}/auto/config.mk + sed -i -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk + if [[ ${CC} = clang ]]; then + # Suppress some warnings produced by clang 12 and later. + sed -i -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk + fi + echo '::endgroup::' + + - name: Build + if: (!contains(fromJSON(inputs.extra), 'unittests')) + shell: bash + run: | + echo '::group::Build' + make ${SHADOWOPT} -j${NPROC} + echo '::endgroup::' + + - name: Check version + if: (!contains(fromJSON(inputs.extra), 'unittests')) + shell: bash + run: | + echo '::group::Check version' + "${SRCDIR}"/vim --version + "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit + "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit + if ${{ inputs.features == 'huge' }}; then + # Also check that optional and dynamic features are configured and working + "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \ + -c "let g:required=['gettext', 'sodium', 'sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \ + -S ci/if_feat_check.vim -c quit + fi + echo '::endgroup::' diff --git a/.github/actions/test_artifacts/action.yml b/.github/actions/test_artifacts/action.yml index 0afcd6d779..17065f7532 100644 --- a/.github/actions/test_artifacts/action.yml +++ b/.github/actions/test_artifacts/action.yml @@ -1,4 +1,4 @@ -name: 'test_artifacts' +name: "test_artifacts" description: "Upload failed test artifacts" inputs: artifact-name: @@ -14,7 +14,7 @@ runs: # it from the matrix automatically like in Vim # upstream. # - name: Collect matrix properties for naming -# uses: actions/github-script@v8 +# uses: actions/github-script@v9 # id: matrix-props # env: # MATRIX_PROPS: ${{ toJSON(inputs) }} @@ -37,7 +37,7 @@ runs: # # set as the "result". # result-encoding: string - name: Upload failed tests - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: # Name of the artifact to upload. name: ${{ format('GH-{0}-{1}-{2}-{3}-{4}-failed-tests', @@ -50,9 +50,10 @@ runs: # A file, directory or wildcard pattern that describes what # to upload. path: | - ${{ github.workspace }}/runtime/indent/testdir/*.fail - ${{ github.workspace }}/runtime/syntax/testdir/failed/* - ${{ github.workspace }}/src/testdir/failed/* + ${{ github.workspace }}/logs/**/*.symbolized + ${{ github.workspace }}/runtime/indent/testdir/*.fail + ${{ github.workspace }}/runtime/syntax/testdir/failed/* + ${{ github.workspace }}/src/testdir/failed/* # The desired behavior if no files are found using the # provided path. if-no-files-found: ignore diff --git a/.github/actions/test_macvim_artifacts/action.yml b/.github/actions/test_macvim_artifacts/action.yml index a0ec557045..e4c150a847 100644 --- a/.github/actions/test_macvim_artifacts/action.yml +++ b/.github/actions/test_macvim_artifacts/action.yml @@ -13,7 +13,7 @@ runs: using: "composite" steps: - name: Upload failed tests - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: # Name of the artifact to upload. name: ${{ format('GH-{0}-{1}-{2}-{3}-{4}-failed-macvim-tests', diff --git a/.github/actions/universal-package/action.yml b/.github/actions/universal-package/action.yml index 6d5f0a9e5a..81a4532dee 100644 --- a/.github/actions/universal-package/action.yml +++ b/.github/actions/universal-package/action.yml @@ -7,15 +7,19 @@ description: Create universal Homebrew package which contains x86_64 and arm64 # that has both x86_64 and arm64 arch, as Homebrew's distributed bottles are thin binaries with only one arch. # # We still use Homebrew to manage the library because their formulas are up to date and have correct build instructions -# that will work. This way we don't have to manually configuring and building and updating the package info. +# that will work. This way we don't have to manually configure, build, and update the package info. inputs: formula: - description: Formura name + description: Formula name required: true contents: description: Path for contents in package's keg required: true + gnuiconv: + description: Use the Homebrew GNU libiconv instead of system one + type: boolean + required: false runs: using: 'composite' steps: @@ -31,14 +35,24 @@ runs: # version and stomp what we have here. brew update + brew cat ${formula} >${formula}.rb + + if [[ "${{ inputs.gnuiconv }}" == "true" ]]; then + # Modify formula to build using Homebrew libiconv. Usually just adding "depends_on" is enough, but since we + # override "CC" to use vanilla system clang, we need to manually inject the compilation/link flags to specify + # the locations. + sed -i.bak '/^[[:blank:]]*def install$/i\'$'\n depends_on "libiconv"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["CFLAGS"] += " -I'$(brew --prefix)$'/opt/libiconv/include"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["LDFLAGS"] += " -L'$(brew --prefix)$'/opt/libiconv/lib"\n' ${formula}.rb + fi + # Patch the official Homebrew formula to explicitly build for min deployment target and a universal binary. We # also need to explicitly use system Clang because Homebrew's bundled clang script tries to inject -march # compiler flags that will cause universal builds to fail as Clang does not like that. - brew cat ${formula} | \ - sed '/^[[:blank:]]*def install$/a\'$'\n ENV["MACOSX_DEPLOYMENT_TARGET"] = "'${MACOSX_DEPLOYMENT_TARGET}$'"\n' | \ - sed '/^[[:blank:]]*def install$/a\'$'\n ENV["CC"] = "/usr/bin/clang"\n' | \ - sed '/^[[:blank:]]*def install$/a\'$'\n ENV["CFLAGS"] = "-arch x86_64 -arch arm64"\n' | \ - sed '/^[[:blank:]]*def install$/a\'$'\n ENV["LDFLAGS"] = "-arch x86_64 -arch arm64"\n' >${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["MACOSX_DEPLOYMENT_TARGET"] = "'${MACOSX_DEPLOYMENT_TARGET}$'"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["CC"] = "/usr/bin/clang"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["CFLAGS"] = "-arch x86_64 -arch arm64"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["LDFLAGS"] = "-arch x86_64 -arch arm64"\n' ${formula}.rb # Homebrew requires formula files to be placed in taps and disallows # installing from raw paths, so we manually create a taps folder for a @@ -46,6 +60,7 @@ runs: FORMULA_DIR="$(brew --repository)/Library/Taps/macvim-dev/homebrew-deps/Formula/" mkdir -p "$FORMULA_DIR" cp ${formula}.rb "$FORMULA_DIR" + brew trust macvim-dev/deps # Uninstall the already installed formula because we want to build our own brew uninstall --ignore-dependencies ${formula} || true @@ -62,7 +77,7 @@ runs: - name: Restore keg cache id: cache-keg-restore - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ steps.setup-formula.outputs.brew_prefix }}/Cellar/${{ inputs.formula }} key: ${{ inputs.formula }}-homebrew-cache-custom-unified-prefix${{ steps.setup-formula.outputs.brew_prefix }}-xcode${{ steps.setup-formula.outputs.xcode_version }}-${{ hashFiles(format('{0}.rb', inputs.formula)) }} @@ -85,7 +100,9 @@ runs: brew list ${formula} &>/dev/null || brew install --quiet --formula -s macvim-dev/deps/${formula} # If formula was cached, this step is necessary to relink it to brew prefix (e.g. /usr/local) - brew unlink ${formula} && brew link ${formula} + # The "-f" is there to force link keg-only formulas. Homebrew doesn't provide a command to just link in the + # optional /opt/homebrew/opt/... folders, so we have to resort to doing this. + brew unlink ${formula} && brew link -f ${formula} echo '::endgroup::' echo '::group::Verify built version' @@ -104,7 +121,7 @@ runs: - name: Save keg cache id: cache-keg-save - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 # We always save the generated artifact even if the whole run # fails due to other issues. This helps debugging build # failure issues faster if the cache doesn't already exist as diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 54873486da..5e841dde2c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,8 +1,16 @@ version: 2 updates: - package-ecosystem: "github-actions" - directory: "/" + directories: + - "/" + - "/.github/actions/**/*" schedule: interval: "weekly" commit-message: prefix: "CI" + cooldown: + default-days: 7 + groups: + github-actions: + patterns: + - "*" diff --git a/.github/labeler.yml b/.github/labeler.yml index 5b884c89e0..6ecb29399e 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -4,11 +4,9 @@ CI: - all: - changed-files: - any-glob-to-any-file: - - '.cirrus.yml' - '.github/dependabot.yml' - '.github/labeler.yml' - '.github/workflows/*' - - '.appveyor.yml' - '.codecov.yml' documentation: @@ -128,9 +126,12 @@ runtime: - all: - changed-files: - any-glob-to-any-file: - - 'runtime/ftplugin' - - 'runtime/syntax' - - 'runtime/indent' + - 'runtime/autoload/**/*.vim' + - 'runtime/colors/**/*.vim' + - 'runtime/compiler/**/*.vim' + - 'runtime/ftplugin/**/*.vim' + - 'runtime/indent/**/*.vim' + - 'runtime/syntax/**/*.vim' - 'runtime/pack/dist/opt/termdebug/plugin/termdebug.vim' termdebug: diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml new file mode 100644 index 0000000000..2bd08c452a --- /dev/null +++ b/.github/workflows/ci-linux.yml @@ -0,0 +1,176 @@ +name: CI for Linux + +on: + workflow_call: + +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for + # pull requests or the commit hash for any other events. + group: ${{ github.workflow }}-linux-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + linux: + runs-on: ${{ matrix.architecture == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }} + + env: + CC: ${{ matrix.compiler }} + GCC_VER: 14 + CLANG_VER: 22 + TEST: test + SRCDIR: ./src + LEAK_CFLAGS: -DEXITFREE + LOG_DIR: ${{ github.workspace }}/logs + TERM: xterm + DISPLAY: ":99" + DEBIAN_FRONTEND: noninteractive + + strategy: + fail-fast: false + matrix: + features: [tiny, normal, huge] + compiler: [clang, gcc] + extra: [[]] + # Only use non-native architecture when features != huge. + # features=huge tries to install python3-dev, which fails to install + # for the non-native architecture. + architecture: [native] + include: + - features: tiny + compiler: clang + extra: [nogui] + - features: tiny + compiler: gcc + extra: [nogui, syn_test_execs] + - features: tiny + compiler: gcc + extra: [nogui] + architecture: arm64 + - features: normal + shadow: ./src/shadow + compiler: gcc + architecture: i386 + - features: huge + coverage: true + - features: huge + compiler: clang + interface: dynamic + python3: stable-abi + - features: huge + compiler: gcc + coverage: true + interface: dynamic + extra: [uchar, testgui] + - features: huge + compiler: gcc + coverage: true + extra: [unittests] + - features: huge + compiler: gcc + coverage: true + extra: [unittests] + architecture: arm64 + - features: normal + compiler: gcc + extra: [vimtags, proto, preproc_indent, encoding, codestyle] + - features: huge + compiler: gcc + extra: [no_x11_wl] + + steps: + - name: Checkout repository from GitHub + uses: actions/checkout@v6.0.3 + + - name: Build + timeout-minutes: 15 + uses: ./.github/actions/build_vim_on_linux + with: + features: ${{ matrix.features }} + compiler: ${{ matrix.compiler }} + architecture: ${{ matrix.architecture }} + extra: ${{ toJSON(matrix.extra) }} + shadow: ${{ matrix.shadow }} + interface: ${{ matrix.interface }} + lua_ver: ${{ matrix.lua_ver }} + python3: ${{ matrix.python3 }} + coverage: ${{ matrix.coverage }} + + - name: Test + timeout-minutes: 20 + run: make ${SHADOWOPT} ${TEST} + + # Enable to debug failing tests live and ssh into the CI runners + # - name: Setup tmate session + # if: ${{ failure() }} + # uses: mxschmitt/action-tmate@v3 + # with: + # limit-access-to-actor: true + + - name: Upload failed test artifacts + if: ${{ !cancelled() }} + uses: ./.github/actions/test_artifacts + + - name: Vim tags + if: contains(matrix.extra, 'vimtags') + run: | + # This will exit with an error code if the generated vim tags differs from source. + ( + cd runtime/doc + git diff --exit-code -- tags + make html; rm *.html tags.ref; + test -f errors.log && exit 3; + true + ) + + - name: Generate Proto files + if: contains(matrix.extra, 'proto') + run: | + # This will exit with an error code if the generated proto files differ from source + ( + git diff --exit-code -- src/proto/ + true + ) + + - name: Check Source Code style + if: contains(matrix.extra, 'codestyle') + run: | + make -C src/testdir codestyle + + - name: Check preprocessor indent + if: contains(matrix.extra, 'preproc_indent') + run: | + # This will exit with an error code if the files differ from source + ( + "${SRCDIR}"/vim -u NONE --not-a-term -esNX +"cd runtime/tools" -S preproc_indent.vim + git diff --exit-code -- src/*.[ch] src/xxd/xxd.c + true + ) + + - name: Check encoding of utf-8 runtime files + if: contains(matrix.extra, 'encoding') + run: | + # This will exit with an error code if utf-8 runtime files are not in utf-8 encoding + ( + find . -type f -name "*utf-8*.vim" -exec sh -c \ + 'iconv -f utf-8 -t utf-8 "$1" >/dev/null 2>&1 || echo "non utf-8 encoding detected in $1"' \ + find-sh {} \; |grep "non utf-8 encoding" && exit 3 + true + ) + + - name: Generate gcov files + if: matrix.coverage + run: | + cd "${SRCDIR}" + find . -type f -name '*.gcno' -exec gcov -pb {} + || true + + - name: Codecov + timeout-minutes: 20 + if: matrix.coverage + uses: codecov/codecov-action@v7 + with: + flags: linux,${{ matrix.features }}-${{ matrix.compiler }}-${{ join(matrix.extra, '-') }} + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/ci-linux_asan.yml b/.github/workflows/ci-linux_asan.yml new file mode 100644 index 0000000000..54dcd2dca6 --- /dev/null +++ b/.github/workflows/ci-linux_asan.yml @@ -0,0 +1,82 @@ +name: CI for Linux ASan + +on: + workflow_call: + +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for + # pull requests or the commit hash for any other events. + group: ${{ github.workflow }}-linux_asan-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + linux-asan: + runs-on: ubuntu-24.04 + + env: + CC: clang + CLANG_VER: 21 + SRCDIR: ./src + LEAK_CFLAGS: -DEXITFREE + LOG_DIR: ${{ github.workspace }}/logs + TERM: xterm + DISPLAY: ":99" + DEBIAN_FRONTEND: noninteractive + + strategy: + fail-fast: false + matrix: + testset: + - tinytests + - newtests.1 + - newtests.2 + + steps: + - name: Checkout repository from GitHub + uses: actions/checkout@v6.0.3 + + - name: Build + timeout-minutes: 15 + uses: ./.github/actions/build_vim_on_linux + with: + features: huge + compiler: clang + extra: '["asan"]' + # Lua5.1 is the most widely used version (since it's what LuaJIT is + # compatible with), so ensure it works + lua_ver: "5.1" + + - name: Test (tinytests) + if: matrix.testset == 'tinytests' + timeout-minutes: 20 + run: make ${TEST} NEW_TESTS_RES= + + - name: Test (newtests) + if: startsWith(matrix.testset, 'newtests') + timeout-minutes: 20 + env: + JOB_INDEX: ${{ strategy.job-index }} + JOB_TOTAL: ${{ strategy.job-total }} + run: | + set -x + make -C src/testdir SCRIPTS_TINY_OUT= \ + NEW_TESTS_RES="$(python3 ci/gen_testset.py $((JOB_TOTAL-1)) | jq -r --argjson i $((JOB_INDEX-1)) '.[$i]|join(" ")')" + + - name: ASan logs + if: ${{ !cancelled() }} + run: | + for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}"); do + ( + echo "$f" + asan_symbolize -l "$f" + ) | tee "$f".symbolized + false # in order to fail a job + done + + - name: Upload failed test artifacts + if: ${{ !cancelled() }} + uses: ./.github/actions/test_artifacts diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml new file mode 100644 index 0000000000..2ab16012c2 --- /dev/null +++ b/.github/workflows/ci-macos.yml @@ -0,0 +1,103 @@ +name: CI for macOS + +on: + workflow_call: + +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for + # pull requests or the commit hash for any other events. + group: ${{ github.workflow }}-macos-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + macos: + runs-on: ${{ matrix.runner }} + + env: + CC: clang + TEST: test + SRCDIR: ./src + LEAK_CFLAGS: -DEXITFREE + TERM: xterm + + strategy: + fail-fast: false + matrix: + features: [tiny, normal, huge] + runner: [macos-15-intel, macos-26] + + steps: + - name: Checkout repository from GitHub + uses: actions/checkout@v6.0.3 + + - name: Install packages + if: matrix.features == 'huge' + run: | + brew install lua libtool + echo "LUA_PREFIX=$(brew --prefix)" >> $GITHUB_ENV + + - name: Set up environment + run: | + ( + echo "NPROC=$(getconf _NPROCESSORS_ONLN)" + case "${{ matrix.features }}" in + tiny) + echo "TEST=testtiny" + echo "CONFOPT=--disable-gui" + ;; + normal) + ;; + huge) + echo "CONFOPT=--enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" + ;; + esac + ) >> $GITHUB_ENV + + - name: Configure + run: | + ./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing + # Append various warning flags to CFLAGS. + # BSD sed needs backup extension specified. + sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk + # On macOS, the entity of gcc is clang. + sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk + # Suppress some warnings produced by clang 12 and later. + if clang --version | grep -qs 'Apple clang version \(1[3-9]\|[2-9]\)\.'; then + sed -i.bak -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk + fi + + - name: Build + env: + LC_ALL: C + run: | + make -j${NPROC} + + - name: Check version + run: | + "${SRCDIR}"/vim --version + "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit + "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit + if ${{ matrix.features == 'huge' }}; then + # Also check that optional and dynamic features are configured and working + "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \ + -c "let g:required=['sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \ + -S ci/if_feat_check.vim -c quit + fi + + - name: Install packages for testing + run: | + # Apple diff is broken. Use GNU diff instead. See #14032. + brew install diffutils + + - name: Test + timeout-minutes: 25 + run: | + make ${TEST} + + - name: Upload failed test artifacts + if: ${{ !cancelled() }} + uses: ./.github/actions/test_artifacts diff --git a/.github/workflows/ci-macvim.yaml b/.github/workflows/ci-macvim.yaml index 7bd4fedcc8..2aa9b0c337 100644 --- a/.github/workflows/ci-macvim.yaml +++ b/.github/workflows/ci-macvim.yaml @@ -29,20 +29,14 @@ jobs: skip: ${{ ! startswith(github.ref, 'refs/tags/release') }} legacy: true - - os: macos-13 - xcode: '15.2' - testgui: true - extra: [vimtags, check-xcodeproj-compat] - - # Below runners use Apple Silicon. - os: macos-14 xcode: '15.4' - testgui: false + testgui: true + extra: [vimtags, check-xcodeproj-compat] - # Most up to date OS and Xcode. Used to publish release for the main build. - os: macos-15 xcode: '16.4' - testgui: true + testgui: false publish: true optimized: true diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml new file mode 100644 index 0000000000..013d5142b1 --- /dev/null +++ b/.github/workflows/ci-windows.yml @@ -0,0 +1,362 @@ +name: CI for Windows + +on: + workflow_call: + +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for + # pull requests or the commit hash for any other events. + group: ${{ github.workflow }}-windows-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + windows: + runs-on: windows-2022 + + env: + # Interfaces + # Lua + LUA_VER: 54 + LUA_VER_DOT: "5.4" + LUA_RELEASE: 5.4.2 + LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip + LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip + LUA_DIR: D:\Lua + # do not want \L to end up in pathdef.c and compiler complaining about unknown escape sequences \l + LUA_DIR_SLASH: D:/Lua + # Python 2 + PYTHON_VER: 27 + PYTHON_VER_DOT: "2.7" + PYTHON_DIR: 'C:\Python27' + # Python 3 + PYTHON3_VER: 313 + PYTHON3_VER_DOT: "3.13" + # Other dependencies + # winpty + WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip + # libsodium + SODIUM_VER: "1.0.20" + # SODIUM_MSVC_URL: https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-msvc.zip + SODIUM_MSVC_URL: https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-msvc.zip + SODIUM_MSVC_VER: v143 + # SODIUM_MINGW_URL: https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-mingw.tar.gz + SODIUM_MINGW_URL: https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-mingw.tar.gz + SODIUM_MINGW_VER: 26 + # Gettext-tools, iconv and libraries + GETTEXT32_URL: https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-32.zip + GETTEXT64_URL: https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-64.zip + # Escape sequences + COL_RED: "\x1b[31m" + COL_GREEN: "\x1b[32m" + COL_YELLOW: "\x1b[33m" + COL_RESET: "\x1b[m" + + strategy: + fail-fast: false + matrix: + include: + - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: no, arch: x64, python3: stable } + - { features: HUGE, toolchain: mingw, VIMDLL: yes, GUI: yes, arch: x86, python3: stable, coverage: yes } + - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: yes, arch: x86 } + - { features: HUGE, toolchain: mingw, VIMDLL: yes, GUI: no, arch: x64, coverage: yes } + - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: no, arch: x64, ttytype: conpty } + - { features: NORMAL, toolchain: msvc, VIMDLL: yes, GUI: no, arch: x86 } + - { features: NORMAL, toolchain: mingw, VIMDLL: no, GUI: yes, arch: x64 } + - { features: TINY, toolchain: msvc, VIMDLL: yes, GUI: yes, arch: x64 } + - { features: TINY, toolchain: mingw, VIMDLL: no, GUI: no, arch: x86 } + + steps: + - name: Initialize + id: init + shell: bash + run: | + # Show Windows version + cmd /c ver + + if ${{ matrix.arch == 'x64' }}; then + cygreg=registry + pyreg= + echo "VCARCH=amd64" >> $GITHUB_ENV + echo "WARCH=x64" >> $GITHUB_ENV + echo "BITS=64" >> $GITHUB_ENV + echo "MSYSTEM=MINGW64" >> $GITHUB_ENV + else + cygreg=registry32 + pyreg=-32 + echo "VCARCH=x86" >> $GITHUB_ENV + echo "WARCH=ia32" >> $GITHUB_ENV + echo "BITS=32" >> $GITHUB_ENV + echo "MSYSTEM=MINGW32" >> $GITHUB_ENV + fi + + echo "VCVARSALL=$(vswhere -products \* -latest -property installationPath)\\VC\\Auxiliary\\Build\\vcvarsall.bat" >> $GITHUB_ENV + if ${{ matrix.features != 'TINY' }}; then + if ${{ matrix.arch == 'x86' }}; then + choco install python2 --no-progress --forcex86 + else + choco install python2 --no-progress + fi + fi + python3_dir=$(cat "/proc/$cygreg/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}$pyreg/InstallPath/@") + echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV + + if ${{ matrix.toolchain == 'msvc' }}; then + SODIUM_DIR=D:\\libsodium + echo "SODIUM_LIB=${SODIUM_DIR}\\${{ matrix.arch == 'x64' && 'x64' || 'Win32' }}\\Release\\${SODIUM_MSVC_VER}\\dynamic" >> $GITHUB_ENV + else + SODIUM_DIR=D:\\libsodium-win${{ matrix.arch == 'x64' && '64' || '32' }} + # do not want \L to end up in pathdef.c and compiler complaining about unknown escape sequences \l + SODIUM_DIR_SLASH=D:/libsodium-win${{ matrix.arch == 'x64' && '64' || '32' }} + echo "SODIUM_LIB=${SODIUM_DIR}\\bin" >> $GITHUB_ENV + echo "SODIUM_DIR_SLASH=${SODIUM_DIR_SLASH}" >> $GITHUB_ENV + fi + echo "SODIUM_DIR=${SODIUM_DIR}" >> $GITHUB_ENV + echo "GETTEXT_PATH=D:\gettext${{ matrix.arch == 'x64' && '64' || '32' }}" >> $GITHUB_ENV + + - uses: msys2/setup-msys2@v2.32.0 + if: matrix.toolchain == 'mingw' + with: + update: true + install: tar + pacboy: >- + make:p gcc:p + msystem: ${{ env.MSYSTEM }} + release: false + + - name: Checkout repository from GitHub + uses: actions/checkout@v6.0.3 + + - name: Create a list of download URLs + shell: cmd + run: | + type NUL > urls.txt + echo %LUA_RELEASE%>> urls.txt + echo %WINPTY_URL%>> urls.txt + echo %SODIUM_VER%>> urls.txt + echo %GETTEXT32_URL%>> urls.txt + echo %GETTEXT64_URL%>> urls.txt + + - name: Cache downloaded files + uses: actions/cache@v5.0.5 + with: + path: downloads + key: ${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('urls.txt') }} + + - name: Download dependencies + shell: cmd + run: | + path C:\Program Files\7-Zip;%path% + if not exist downloads mkdir downloads + + echo %COL_GREEN%Download Lua%COL_RESET% + call :downloadfile %LUA${{ env.BITS }}_URL% downloads\lua.zip + 7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1 + + if not "${{ matrix.ttytype }}" == "conpty" ( + echo %COL_GREEN%Download winpty%COL_RESET% + call :downloadfile %WINPTY_URL% downloads\winpty.zip + 7z x -y downloads\winpty.zip -oD:\winpty > nul || exit 1 + copy /Y D:\winpty\%WARCH%\bin\winpty.dll src\winpty%BITS%.dll + copy /Y D:\winpty\%WARCH%\bin\winpty-agent.exe src\ + ) + + echo %COL_GREEN%Download libsodium%COL_RESET% + if "${{ matrix.toolchain }}"=="msvc" ( + call :downloadfile %SODIUM_MSVC_URL% downloads\libsodium.zip + 7z x -y downloads\libsodium.zip -oD:\ > nul || exit 1 + ) else ( + call :downloadfile %SODIUM_MINGW_URL% downloads\libsodium.tar.gz + 7z x -y downloads\libsodium.tar.gz -so | 7z x -si -ttar -oD:\ > nul || exit 1 + mklink %SODIUM_LIB%\libsodium.dll %SODIUM_LIB%\libsodium-%SODIUM_MINGW_VER%.dll + ) + + echo %COL_GREEN%Download Gettext%COL_RESET% + call :downloadfile %GETTEXT${{ env.BITS }}_URL% downloads\gettext${{ env.BITS }}.zip + 7z e -y downloads\gettext${{ env.BITS }}.zip -oD:\gettext${{ env.BITS }} > nul || exit 1 + copy /y D:\gettext${{ env.BITS }}\libintl-8.dll src\ || exit 1 + copy /y D:\gettext${{ env.BITS }}\libiconv-2.dll src\ || exit 1 + + goto :eof + + :downloadfile + :: call :downloadfile + if not exist %2 ( + curl -f -L %1 -o %2 + ) + if ERRORLEVEL 1 ( + rem Retry once. + curl -f -L %1 -o %2 || exit 1 + ) + goto :eof + + - name: Build (MSVC) + if: matrix.toolchain == 'msvc' + shell: cmd + run: | + call "%VCVARSALL%" %VCARCH% + cd src + if "${{ matrix.VIMDLL }}"=="yes" ( + set GUI=yes + ) else ( + set GUI=${{ matrix.GUI }} + ) + if "${{ matrix.python3 }}"=="stable" ( + set PYTHON3_STABLE=yes + ) else ( + set PYTHON3_STABLE=no + ) + if "${{ matrix.features }}"=="HUGE" ( + nmake -nologo -f Make_mvc.mak ^ + FEATURES=${{ matrix.features }} ^ + GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^ + DYNAMIC_LUA=yes LUA=%LUA_DIR% ^ + DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^ + DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^ + DYNAMIC_PYTHON3_STABLE_ABI=%PYTHON3_STABLE% ^ + DYNAMIC_SODIUM=yes SODIUM=%SODIUM_DIR% ^ + CI_FLAGS=/we4267 + ) else ( + nmake -nologo -f Make_mvc.mak ^ + FEATURES=${{ matrix.features }} ^ + GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^ + CI_FLAGS=/we4267 + ) + + - name: Build (MinGW) + if: matrix.toolchain == 'mingw' + shell: msys2 {0} + run: | + cd src + if [ "${{ matrix.VIMDLL }}" = "yes" ]; then + GUI=yes + else + GUI=${{ matrix.GUI }} + fi + if [ "${{ matrix.python3 }}" = "stable" ]; then + PYTHON3_STABLE=yes + else + PYTHON3_STABLE=no + fi + if [ "${{ matrix.features }}" = "HUGE" ]; then + mingw32-make -f Make_ming.mak -j2 \ + FEATURES=${{ matrix.features }} \ + GUI=$GUI IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} \ + DYNAMIC_LUA=yes LUA=${LUA_DIR_SLASH} \ + DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \ + DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \ + DYNAMIC_PYTHON3_STABLE_ABI=${PYTHON3_STABLE} \ + DYNAMIC_SODIUM=yes SODIUM=${SODIUM_DIR_SLASH} \ + STATIC_STDCPLUS=yes COVERAGE=${{ matrix.coverage }} + else + mingw32-make -f Make_ming.mak -j2 \ + FEATURES=${{ matrix.features }} \ + GUI=$GUI IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} \ + STATIC_STDCPLUS=yes + fi + + - name: Check version + shell: cmd + run: | + PATH %LUA_DIR%;C:\msys64\%MSYSTEM%\bin;%PYTHON3_DIR%;%PATH% + if "${{ matrix.GUI }}"=="yes" ( + start /wait src\gvim -u NONE -i NONE -c "redir > version.txt | ver | q" || exit 1 + type version.txt + echo. + start /wait src\gvim -u NONE -i NONE -c "redir! > version.txt | so ci\if_ver-1.vim | q" + start /wait src\gvim -u NONE -i NONE -c "redir >> version.txt | so ci\if_ver-2.vim | q" + type version.txt + del version.txt + ) else ( + src\vim --version || exit 1 + src\vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit + src\vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit + if "${{ matrix.features }}"=="HUGE" ( + src\vim -u NONE -i NONE --not-a-term -esNX -V1 ^ + -c "let g:required=['gettext', 'sodium', 'sound', 'python3', 'lua']" ^ + -S ci/if_feat_check.vim -c quit + ) + ) + + #- name: Prepare Artifact + # shell: cmd + # run: | + # mkdir artifacts + # copy src\*vim.exe artifacts + # copy src\vim*.dll artifacts + # + #- name: Upload Artifact + # uses: actions/upload-artifact@v7 + # with: + # name: vim${{ matrix.bits }}-${{ matrix.toolchain }} + # path: ./artifacts + + # disabled because of https://github.com/tunisiano187/Chocolatey-packages/issues/3916 + #- name: Install packages for testing + # shell: bash + # run: | + # if ${{ matrix.features != 'TINY' }}; then + # if ${{ matrix.arch == 'x64' }}; then + # choco install netbeans --no-progress + # else + # exit 0 + # fi + # fi + + - name: Test and show the result of testing gVim + if: matrix.GUI == 'yes' || matrix.VIMDLL == 'yes' + shell: cmd + timeout-minutes: 15 + run: | + PATH %LUA_DIR%;C:\msys64\%MSYSTEM%\bin;%PYTHON3_DIR%;%PATH%;%SODIUM_LIB% + call "%VCVARSALL%" %VCARCH% + + echo %COL_GREEN%Test gVim:%COL_RESET% + cd src\testdir + if "${{ matrix.GUI }}"=="yes" ( + nmake -nologo -f Make_mvc.mak VIMPROG=..\gvim || exit 1 + ) else ( + @rem Run only tiny tests. + nmake -nologo -f Make_mvc.mak tiny VIMPROG=..\gvim || exit 1 + ) + + - name: Test and show the result of testing Vim + if: matrix.GUI == 'no' || matrix.VIMDLL == 'yes' + shell: cmd + timeout-minutes: 15 + run: | + PATH %LUA_DIR%;C:\msys64\%MSYSTEM%\bin;%PYTHON3_DIR%;%PATH%;%SODIUM_LIB% + call "%VCVARSALL%" %VCARCH% + + echo %COL_GREEN%Test Vim:%COL_RESET% + cd src\testdir + nmake -nologo -f Make_mvc.mak clean + if "${{ matrix.GUI }}"=="no" ( + nmake -nologo -f Make_mvc.mak VIMPROG=..\vim || exit 1 + ) else ( + @rem Run only tiny tests. + nmake -nologo -f Make_mvc.mak tiny VIMPROG=..\vim || exit 1 + ) + + - name: Upload failed test artifacts + if: ${{ !cancelled() }} + uses: ./.github/actions/test_artifacts + + - name: Generate gcov files + if: matrix.coverage + shell: msys2 {0} + run: | + cd src + find . -type f -name '*.gcno' -exec gcov -pb {} + || true + + - name: Codecov + timeout-minutes: 20 + if: matrix.coverage + uses: codecov/codecov-action@v7 + with: + directory: src + flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{ matrix.features }} + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ac9e71ae52..e5c02fbb9a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,11 +44,11 @@ jobs: steps: - name: Checkout repository from github - uses: actions/checkout@v5 + uses: actions/checkout@v6.0.3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v4 + uses: github/codeql-action/init@v4.36.2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -59,7 +59,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v4 + uses: github/codeql-action/autobuild@v4.36.2 # â„¹ï¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -73,4 +73,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v4 + uses: github/codeql-action/analyze@v4.36.2 diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml deleted file mode 100644 index f74174636b..0000000000 --- a/.github/workflows/coverity.yml +++ /dev/null @@ -1,85 +0,0 @@ -name: Coverity -on: - schedule: - - cron: '42 0 * * *' # Run once per day, to avoid Coverity's submission limits - workflow_dispatch: - -permissions: - contents: read # to fetch code (actions/checkout) - -jobs: - scan: - runs-on: ubuntu-24.04 - - env: - CC: gcc - DEBIAN_FRONTEND: noninteractive - TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} - - steps: - - name: Checkout repository from github - if: env.TOKEN - uses: actions/checkout@v5 - - - name: Download Coverity - if: env.TOKEN - run: | - wget -q https://scan.coverity.com/download/cxx/linux64 --post-data "token=$TOKEN&project=vim" -O coverity_tool.tgz - mkdir cov-scan - tar ax -f coverity_tool.tgz --strip-components=1 -C cov-scan - - - name: Install packages - if: env.TOKEN - run: | - sudo apt-get update && sudo apt-get install -y \ - autoconf \ - gettext \ - libcanberra-dev \ - libperl-dev \ - python3-dev \ - liblua5.4-dev \ - lua5.4 \ - ruby-dev \ - tcl-dev \ - libgtk2.0-dev \ - desktop-file-utils \ - libtool-bin \ - libsodium-dev - - - name: Set up environment - if: env.TOKEN - run: | - echo "$(pwd)/cov-scan/bin" >> $GITHUB_PATH - ( - echo "NPROC=$(getconf _NPROCESSORS_ONLN)" - echo "CONFOPT=--enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" - ) >> $GITHUB_ENV - - - name: Configure - if: env.TOKEN - run: | - ./configure --with-features=huge ${CONFOPT} --enable-fail-if-missing - # Append various warning flags to CFLAGS. - sed -i -f ci/config.mk.sed src/auto/config.mk - sed -i -f ci/config.mk.${CC}.sed src/auto/config.mk - # -O2 gives false warning and turns it into an error: - # warning: function may return address of local variable [-Wreturn-local-addr] - sed -i 's/-O2 \?//' src/auto/config.mk - - - name: Build/scan vim - if: env.TOKEN - run: | - cov-build --dir cov-int make -j${NPROC} - - - name: Submit results - if: env.TOKEN - run: | - tar zcf cov-scan.tgz cov-int - curl --form token=$TOKEN \ - --form email=$EMAIL \ - --form file=@cov-scan.tgz \ - --form version="$(git rev-parse HEAD)" \ - --form description="Automatic GHA scan" \ - 'https://scan.coverity.com/builds?project=vim' - env: - EMAIL: ${{ secrets.COVERITY_SCAN_EMAIL }} diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml index e413603bd4..4172d28e0d 100644 --- a/.github/workflows/label.yml +++ b/.github/workflows/label.yml @@ -17,6 +17,6 @@ jobs: pull-requests: write steps: - - uses: actions/labeler@v6 + - uses: actions/labeler@v6.1.0 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml index 59ced56920..da69554647 100644 --- a/.github/workflows/link-check.yml +++ b/.github/workflows/link-check.yml @@ -8,7 +8,7 @@ jobs: lychee: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6.0.3 - name: Run Lychee uses: lycheeverse/lychee-action@v2 with: diff --git a/.github/workflows/macvim-buildtest.yaml b/.github/workflows/macvim-buildtest.yaml index f4c727e5f9..26f62ae81c 100644 --- a/.github/workflows/macvim-buildtest.yaml +++ b/.github/workflows/macvim-buildtest.yaml @@ -64,7 +64,7 @@ jobs: runs-on: ${{ inputs.os }} steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Set up legacy build if: inputs.legacy @@ -89,6 +89,15 @@ jobs: xcode-select -p xcodebuild -version + # Set up, install, and cache GNU libiconv library to work around Apple iconv issues in newer macOS versions. + + - name: Set up libiconv + if: inputs.publish && !inputs.legacy + uses: ./.github/actions/universal-package + with: + formula: libiconv + contents: opt/libiconv/lib/libiconv.a,opt/libiconv/lib/libiconv.dylib + # Set up, install, and cache gettext library for localization. - name: Set up gettext @@ -97,6 +106,7 @@ jobs: with: formula: gettext contents: lib/libintl.a,lib/libintl.dylib + gnuiconv: ${{ inputs.legacy == false }} # gettext needs to match MacVim in using the same version of iconv # Set up, install, and cache libsodium library for encryption. @@ -125,7 +135,7 @@ jobs: # Note: Legacy self-hosted runner already has this installed and doesn't need this. - name: Cache Python 2 if: inputs.publish && !inputs.legacy - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: python27-cache key: ${{ inputs.os }}-python27 @@ -222,6 +232,11 @@ jobs: sed -i.bak -f ci/config.mk.optimized.sed src/auto/config.mk fi + if ${{ inputs.publish == true && inputs.legacy == false }}; then + # Use Homebrew GNU libiconv since Apple iconv has been broken since macOS 14 + sed -i.bak -f ci/config.mk.brew-libiconv.sed src/auto/config.mk + fi + - name: Modify configure result if: inputs.publish run: | @@ -271,6 +286,13 @@ jobs: echo 'Found external dynamic linkage!'; false fi + if ${{ inputs.publish == true && inputs.legacy == false }}; then + # Make sure we are not using system iconv, which has been buggy since macOS 14. + if otool -L ${VIM_BIN} | grep '^\s*/usr/lib/libiconv'; then + echo 'Using system iconv! We should be linking against GNU iconv instead.'; false + fi + fi + # Make sure that --disable-sparkle flag will properly exclude all references to Sparkle symbols. This is # necessary because we still use weak linking to Sparkle when that flag is set and so references to Sparkle # wouldn't fail the build (we just remove Sparkle.framework from the built app after the fact). @@ -413,7 +435,7 @@ jobs: # and add pictures to make them look nice. - name: Upload MacVim image if: inputs.publish && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master') - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v7 with: name: MacVim${{ inputs.publish_postfix }}.dmg path: src/MacVim/build/Release/MacVim${{ inputs.publish_postfix }}.dmg diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..291c07900b --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,325 @@ +# AGENTS.md + +Guidance for AI coding agents working in the Vim repository. + +## Project + +Vim is a text editor written in C. The canonical repository is +https://github.com/vim/vim. The code is old and has grown organically over +the past 30+ years. Some files are vendored from upstream projects +(`src/xdiff`, `src/libvterm`); parts of the runtime are occasionally shared +with forks like Neovim. + +Vim strives to be portable across several different operating systems and +aims to be a stable, robust editor gradually developing new features while +remaining backwards compatible as much as possible. + +At the same time, Vim can be compiled with different feature sets, from the +POSIX compatible minimal vi to a full-fledged GUI editor which includes +additional scripting interfaces. + +See `runtime/doc/develop.txt` for the high level design goals. + +## Build and test + + # Full build on Unix/Linux (from src/): + make + + # Run the full test suite: + make test + + # Generate proto files + make proto + + # Run a single test file: + cd src/testdir && make test_name.res + +Output is in testdir/messages and testdir/test.log + +Builds on Windows depend on the Environment, see `src/INSTALLpc.txt` +for Cygwin/MSYS and MSVC ways to build Vim + +Before submitting any patch, at minimum: +1. The build succeeds without new warnings. +2. Relevant tests pass. +3. The code matches the style of the file being edited. + +## Layout + +- `src/` - the C source. Subsystem names are usually obvious from filenames + (`buffer.c`, `window.c`, `search.c`, `vim9compile.c`, etc.). +- `src/proto/` - function prototypes, one `.pro` file per source file. + Regenerated; do not hand-edit unless you know what you're doing. +- `src/po` - Translations +- `src/xxd` - for the xxd subproject +- `src/xdiff` - for the xdiff library (imported from git) +- `src/libvterm` - for the libvterm library +- `src/testdir/` - tests. Vim-script files named `test_*.vim`. + Screendump expected output lives in `src/testdir/dumps/`. +- `runtime/doc/` - user-facing documentation in Vim help format, when updating, + also update the Last Change header +- `runtime/syntax/generator` - Syntax script for Vim Script, automatically generated + from Vims source +- `runtime/` - runtime files shipped with Vim, when updating, also update the + Last Change header and a short description if this file has no maintainer + If the file has a maintainer, changes should go via them (so make a merge + request against the upstream repo instead) +- `src/version.c` - contains the `included_patches[]` list. Every + patch touching anything below `src/` (with the exception of `src/po`) needs a + new entry at the top, will be updated only when merging into + the master tree. + +## Commit format + +Vim uses a strict commit message format. The subject line is a +one-sentence **problem statement**, not a description of the fix: + + patch 9.2.NNNN: short description of the problem + + Problem: Restatement of the problem as a full sentence, possibly + with a reporter attribution in parentheses. + Solution: Short description of the fix, ending with the author's + name in parentheses. + + optional longer description of the problem and solution goes here in prose. + Do not use bullet points. + + fixes: #NNNN + related: #NNNN + closes: #NNNN + + Co-authored-by: Name + Signed-off-by: Author Name + +Rules: + +- **Subject line states the problem**, not the solution. "fix typo" is + wrong; "typo in foo() causes OOB read" is right. +- **Problem line is a full sentence with a trailing period.** It mirrors + the subject. +- **Solution line ends with `(Author Name)`** — parentheses, period + after them. +- **Longer prose**, if any, goes after the Problem/Solution header +- **`fixes:` references the issue** the patch fixes. + **`closes:` references the PR** that introduces the fix. + **`related:` references related issues**, including issues that caused this + one. + All can appear. Colon, aligned, no trailing period. +- **`Signed-off-by:` is required** — DCO. +- **`Co-Authored-By:` is allowed** and is the accepted way to + acknowledge AI assistance transparently. Human + coauthors should usually also have their own Signed-off-by. + +## C code conventions + +- **Indentation is 4 spaces per level.** Existing files use tabs with + `ts=8 sts=4 sw=4 noet` (set by the modeline in the file), + so tabs of width 8 appear where two levels of indent collapse. `sign.c`, + `sound.c`, and any new file must use spaces only and follow the style from + the .editorconfig file. +- **Opening braces go on their own line (Allman style)** — for function + definitions and for control-flow constructs (`if`/`else`/`for`/`while`/ + `do`) alike. +- **Function definitions**: return type on its own indented line, with + the function name beginning on the next line. +- Initialize locals where a reader cannot trivially see the first + assignment (common for pointers and return-value accumulators). + Don't add `= 0` initializers for values that are always assigned + before use — they can hide real uninitialized-read bugs from + the compiler. +- `for (int i = 0; ...)` loop declarations are fine in files that + use them; older files may declare the counter at the top of the + block. +- **Function-scope declarations at the top of a block** is the historical + style, but mid-block declarations are acceptable in files that have + adopted them. Match the surrounding code. +- **Custom types end in `_T`** (e.g., `buf_T`, `linenr_T`, `pos_T`). + Never use `_t` — it collides with POSIX typedefs. +- **C language is C95 plus specific C99 features**: `//` comments, + mixed declarations and statements, `__func__`, `bool`/`_Bool`, + variadic macros, compound literals, `static inline`, trailing enum + commas. Do not reach for later C standards — Vim still must build + with Compaq C on OpenVMS. See `*assumptions-C-compiler*` in + `develop.txt` for the full list. +- **`bool` / `true` / `false` are acceptable.** Vim is transitioning + from `int` with `TRUE`/`FALSE` to C99 `bool`. Do not "fix" `bool` + back to `int`. Within a single patch, be consistent — don't mix + `true` and `TRUE` in new code. +- **Do not mass-convert** `TRUE`/`FALSE` to `true`/`false` across files + unless that is the patch's explicit purpose. Opportunistic + conversions create noise in diffs. +- **`STRLEN_LITERAL("...")`** should be used when the length of a + string literal is needed. Avoid `STRLEN()` on literals. +- **`vim_snprintf_safelen()`** returns the written length; prefer it + over `vim_snprintf()` when the length is then needed. +- **Prefer `dict_add_string_len()`** when the string length is already + known, over `dict_add_string()` which calls `STRLEN()`. +- **String/buffer parameters go `(char_u *buf, size_t buflen)`** — + length alongside pointer, in bytes. Use `size_t` for byte counts, + `int` only where required by legacy APIs. +- **Guards before divisions.** Check for divisor zero explicitly, even + when a composite earlier guard would prevent it. Relying on + transitive guards is fragile. +- When introducing new allocations, verify the cleanup paths handle all exit + conditions (early return, error branches, etc). + +**Use Vim wrappers instead of libc where one exists:** + +| libc | Vim | Why | +|---------------|------------------------|-----------------------------| +| `free()` | `vim_free()` | Tolerates NULL | +| `malloc()` | `alloc()` / `lalloc()` | Checks for OOM | +| `strcpy()` | `STRCPY()` | Cast for `char_u *` | +| `strchr()` | `vim_strchr()` | Handles special characters | +| `strrchr()` | `vim_strrchr()` | Handles special characters | +| `memcpy()` | `mch_memmove()` | Handles overlapping copies | +| `bcopy()` | `mch_memmove()` | Handles overlapping copies | +| `memset()` | `vim_memset()` | Uniform across systems | +| `isspace()` | `vim_isspace()` | Handles bytes > 127 | +| `iswhite()` | `vim_iswhite()` | TRUE only for tab and space | + +Further rules, not spelled out here, live in `runtime/doc/develop.txt`: + +- `*style-names*` — reserved name patterns (`is*`, `to*`, `str*`, `mem*`, + `wcs*`, `.*_t`, `__.*`), forbidden identifiers (`delete`, `this`, `new`, + `time`, `index`), and the 31-character function-name limit. +- `*style-spaces*`, `*style-examples*` — spacing and one-statement-per-line. +- `*style-various*` — `FEAT_` feature prefix, uppercase `#define`, + `#ifdef HAVE_X` rather than `#if HAVE_X`, no `'\"'`. +- `*assumptions-makefiles*` — POSIX.1-2001 `make` only in the main + Makefiles (no `%` rules, `:=`, `.ONESHELL`, GNU conditionals). +- Vim uses `char_u` instead of `char` type +- Vim uses the macros `STRLEN`, `STRCPY`, `STRCMP`, `STRCAT` that work + with the `char_u` type. +- `*style-clang-format*` — `sign.c` and `sound.c` are formatted with + `clang-format`; re-run it after editing those files. + +## Vim9 script conventions (in tests and runtime files) + +- Write modern Vim style (new files can use Vim9 script, but compatibility + with Neovim and other forks is a concern, so in doubt please ask!) +- **Drop `l:` prefix from local variables** in Vim-script tests. +- **Don't add `CheckFeature` inside individual tests** if it's already + at the top of the file. +- If a test file doesn't gate features at the top, add CheckFeature to + individual tests that depend on specific build features. + +## Test conventions + +- Tests are in `src/testdir/test_*.vim`. +- Reproducible tests beat "it doesn't crash" tests. If a patch fixes + a rendering bug, add a screendump test. If it fixes incorrect output, + assert the output. +- Add comprehensive tests for newly added features and include them + in existing tests if possible +- **Screendump tests** use `CheckScreendump`, `RunVimInTerminal`, + `VerifyScreenDump`, and live dumps in `src/testdir/dumps/`. +- `v9.CheckScriptSuccess(lines)` / `v9.CheckScriptFailure(lines, error, lnum)` + are the standard way to test Vim9 script behavior at script-load time. +- When fixing a bug reported as an issue, include a test that + reproduces the original report, not just a minimal synthetic case. +- Tests for Syntax runtime are in `runtime/syntax/testdir` +- Tests for Indent runtime are in `runtime/indent/testdir` + +## Common gotchas + +- **Distinguish what code enforces from what docs claim.** If a patch + changes documented behavior, say so in the Problem/Solution. +- **Generated files** (`src/auto/configure`, generated Wayland protocol + C, etc.) should only be regenerated when their source changes. + Mixing unrelated regeneration into a functional patch creates noise. + +## Documentation + +- User-facing option or feature changes require a `runtime/doc/*.txt` + update in the same patch. +- When editing an existing help file, bump the `Last change:` header + at the top. + +### Help file style + +See `runtime/doc/helphelp.txt` (`*help-writing*`) for the authoritative +reference. Key conventions: + +- **File header**: first line is `*filename.txt*` then a tab then a + short description. That description appears under `LOCAL ADDITIONS` + in `help.txt`. The version and `Last change:` date go on the second + line, right aligned. +- **Modeline**: every help file ends with a Vim modeline — typically + `vim:tw=78:ts=8:noet:ft=help:norl:`. +- **Layout**: `'textwidth'` 78, `'tabstop'` 8, indent and align with + tab characters. Two spaces between sentences. Run `:retab` + (not `:retab!`, and review the diff) after editing. +- **Tags** are defined as `*tag-name*`, usually right-aligned on the + line where the thing they name is introduced. Tag names must be + unique across all of `runtime/doc/`; for plugin help, prefix with + the plugin name. +- **Cross-references inside help text**: + - `|tag-name|` — hot-link to an existing tag. + - `` `:cmd` `` — Ex command, highlighted as a code block. + - `'option'` — option name, in single quotes. + - `` or `CTRL-X` — special keys. + - `{placeholder}` — user-supplied argument. +- **Sections** are separated by a line of `=` starting in column 1. + Column or subsection headings end with `~` to trigger heading + highlighting. +- **Code blocks** start with `>` at the end of the introducing line + and end with `<` as the first non-blank on a later line (any line + starting in column 1 also implicitly closes the block). Use `>vim` + (or another language name) to request syntax highlighting inside + the block. +- **Notation** — `Note`, `Todo`, `Error` and a few similar words are + auto-highlighted; do not try to fake the highlighting by other means. +- **Language**: gender-neutral language is preferred for new or updated + text; existing wording does not need to be rewritten for this alone. + +## Release policy + +Vim alternates between development cycles and stability periods — see +`runtime/doc/develop.txt` `*design-policy*`. + +- **During a stability period** only clear bug fixes, security fixes, + documentation updates, translations, and runtime file updates are + accepted. No new features, no backwards-incompatible changes. +- **Once released in a minor version**, C-core features must stay + backwards-compatible. Runtime files have a bit more flexibility so + their maintainers can correct old behavior. +- **Deprecated features** stay reachable via config (do not hard-error), + are documented as deprecated, can be disabled at compile time, and + may be removed in a later cycle. + +## Security + +Before reporting a suspected security issue or submitting a patch +that touches security-sensitive code, read `SECURITY.md`. Follow +the disclosure process described there. + +## Before submitting + +1. Commit message follows the format above. +2. All modified code compiles without new warnings. +3. Tests pass, and new functionality has regression tests. +4. Documentation is updated for user-visible changes. +5. Signed-off-by is present. +6. Diff contains only changes relevant to the stated problem — + no stray whitespace fixes, no unrelated refactors, no unrelated + regeneration of `auto/configure`. +7. For multi-patch series: each commit compiles and passes its own + tests. A known-broken intermediate state that a later patch fixes + is not acceptable — squash instead. + +## When in doubt + +- Make the smallest possible change to achieve the goal. Do not rewrite + entire files or functions when a targeted edit suffices. +- Read surrounding code and match its style rather than imposing an + "improvement." +- Err toward smaller, more focused patches. A patch that does three + things is three patches. +- If a patch fixes a symptom of a deeper bug, say so in the Problem + and acknowledge the scope limitation in the Solution. +- Before claiming a bug exists, reproduce it. Before claiming code does X, read + the code. Do not rely on training-data memory of file contents. +- Before running shell commands that modify files outside the working tree, + install packages, push branches, or invoke network operations, confirm with + the user. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b37315d030..41de1d0b50 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,10 +12,10 @@ A pull request has the advantage that it will trigger the Continuous Integration tests, you will be warned of problems (you can ignore the coverage warning, it's noisy). -Please consider adding a test. All new functionality should be tested and bug -fixes should be tested for regressions: the test should fail before the fix and -pass after the fix. Look through recent patches for examples and find help -with ":help testing". The tests are located under "src/testdir". +Please always add a test, if possible. All new functionality should be tested +and bug fixes should be tested for regressions: the test should fail before the +fix and pass after the fix. Look through recent patches for examples and find +help with ":help testing". The tests are located under "src/testdir". Contributions will be distributed with Vim under the Vim license. Providing a change to be included implies that you agree with this and your contribution @@ -46,6 +46,15 @@ When merging PRs into Vim, the current maintainer @chrisbra usually adds missing anybody that explicitly *ACK*s a pull request as a statement that those approvers are happy with that particular change. +## Using AI + +When using AI for contributions, please disclose this. Any AI-generated code +must follow the Vim code style. In particular, [test_codestyle.vim][18] +must not report any failures. Check the CI output for any test failures. + +Ensure that changes are properly tested. Do not submit a single PR that +addresses multiple unrelated issues. + # Reporting issues We use GitHub [issues][17], but that is not a requirement. Writing to the Vim @@ -121,7 +130,7 @@ can be translated: - Menus, see [runtime/lang/README.txt][2] - Vim tutor, see [runtime/tutor/README.txt][3] - Manual pages, see [runtime/doc/\*.1][4] for examples -- Installer, see [nsis/lang/README.txt][5] +- Installer, see [nsis/lang/README.txt][5] in the [vim-win32-installer][20] repository The help files can be translated and made available separately. See https://www.vim.org/translations.php for examples. @@ -138,8 +147,9 @@ For the recommended documentation style, please check [helphelp.txt][16]. # I have a question If you have some question on the style guide, please contact the [vim-dev][0] -mailing list. For other questions please use the [Vi Stack Exchange][8] website, the -[vim-use][9] mailing list or make use of the [discussion][10] feature here at github. +mailing list. For other questions you can join [`#vim`][19], use the +[Vi Stack Exchange][8] website, the [vim-use][9] mailing list or make use of the +[discussion][10] feature here at github. [todo list]: https://github.com/vim/vim/blob/master/runtime/doc/todo.txt [0]: http://www.vim.org/maillist.php#vim-dev @@ -147,7 +157,7 @@ mailing list. For other questions please use the [Vi Stack Exchange][8] website, [2]: https://github.com/vim/vim/blob/master/runtime/lang/README.txt [3]: https://github.com/vim/vim/blob/master/runtime/tutor/README.txt [4]: https://github.com/vim/vim/blob/master/runtime/doc/vim.1 -[5]: https://github.com/vim/vim/blob/master/nsis/lang/README.txt +[5]: https://github.com/vim/vim-win32-installer/blob/master/nsis/lang/README.txt [6]: https://github.com/vim/vim/discussions/13087 [7]: https://github.com/vim/vim/blob/master/runtime/doc/develop.txt [8]: https://vi.stackexchange.com @@ -160,3 +170,6 @@ mailing list. For other questions please use the [Vi Stack Exchange][8] website, [15]: https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin [16]: https://github.com/vim/vim/blob/master/runtime/doc/helphelp.txt [17]: https://github.com/vim/vim/issues +[18]: https://github.com/vim/vim/blob/master/src/testdir/test_codestyle.vim +[19]: https://web.libera.chat/#vim +[20]: https://github.com/vim/vim-win32-installer diff --git a/Filelist b/Filelist index 9ab71cb892..8f36b1c66f 100644 --- a/Filelist +++ b/Filelist @@ -3,31 +3,32 @@ # Source files for all source archives. SRC_ALL = \ - .cirrus.yml \ .gitattributes \ .git-blame-ignore-revs \ .github/MAINTAINERS \ .github/ISSUE_TEMPLATE/bug_report.yml \ .github/ISSUE_TEMPLATE/feature_request.md \ + .github/workflows/ci-linux.yml \ + .github/workflows/ci-linux_asan.yml \ + .github/workflows/ci-macos.yml \ + .github/workflows/ci-windows.yml \ .github/workflows/ci.yml \ .github/workflows/codeql-analysis.yml \ - .github/workflows/coverity.yml \ .github/workflows/link-check.yml \ + .github/actions/build_vim_on_linux/action.yml \ .github/actions/test_artifacts/action.yml \ .github/dependabot.yml \ .gitignore \ .hgignore \ - .appveyor.yml \ .clang-format \ .codecov.yml \ .editorconfig \ - ci/appveyor.bat \ ci/config.mk*.sed \ + ci/gen_testset.py \ ci/if_ver*.vim \ ci/if_feat_check.vim \ ci/lychee.toml \ ci/setup-xvfb.sh \ - ci/setup-sway.sh \ ci/remove_snap.sh \ ci/ddebs.list \ ci/pinned-pkgs \ @@ -146,12 +147,17 @@ SRC_ALL = \ src/session.c \ src/sha256.c \ src/sign.c \ + src/sixel.c \ + src/kitty.c \ + src/cairo.c \ + src/socketserver.c \ src/sound.c \ src/spell.c \ src/spell.h \ src/spellfile.c \ src/spellsuggest.c \ src/strings.c \ + src/strptime.c \ src/structs.h \ src/syntax.c \ src/tabpanel.c \ @@ -214,6 +220,7 @@ SRC_ALL = \ src/testdir/ru_RU/LC_MESSAGES/__PACKAGE__.po \ src/testdir/runtest.vim \ src/testdir/samples/*.html \ + src/testdir/samples/*.swp \ src/testdir/samples/*.txt \ src/testdir/samples/*.vim \ src/testdir/samples/evil.zip \ @@ -224,6 +231,8 @@ SRC_ALL = \ src/testdir/samples/test000 \ src/testdir/samples/test_undo.txt.undo \ src/testdir/samples/testa.zip \ + src/testdir/samples/crypt_utf8_test.txt \ + src/testdir/samples/uncrypt_utf8_test.txt \ src/testdir/sautest/autoload/*.vim \ src/testdir/silent.wav \ src/testdir/test77a.com \ @@ -248,6 +257,7 @@ SRC_ALL = \ src/testdir/util/view_util.vim \ src/testdir/util/vim9.vim \ src/testdir/util/window_manager.vim \ + src/testdir/util/socketserver.vim \ src/testdir/viewdumps.vim \ src/proto.h \ src/protodef.h \ @@ -340,6 +350,10 @@ SRC_ALL = \ src/proto/session.pro \ src/proto/sha256.pro \ src/proto/sign.pro \ + src/proto/sixel.pro \ + src/proto/kitty.pro \ + src/proto/cairo.pro \ + src/proto/socketserver.pro \ src/proto/sound.pro \ src/proto/spell.pro \ src/proto/spellfile.pro \ @@ -437,6 +451,7 @@ SRC_ALL = \ src/libvterm/t/66screen_extent.test \ src/libvterm/t/67screen_dbl_wh.test \ src/libvterm/t/68screen_termprops.test \ + src/libvterm/t/69screen_pushline.test \ src/libvterm/t/69screen_reflow.test \ src/libvterm/t/90vttest_01-movement-1.test \ src/libvterm/t/90vttest_01-movement-2.test \ @@ -493,6 +508,15 @@ SRC_UNIX = \ src/gui_gtk_f.c \ src/gui_gtk_f.h \ src/gui_gtk_x11.c \ + src/gui_gtk4.c \ + src/gui_gtk4_f.c \ + src/gui_gtk4_f.h \ + src/gui_gtk4_cb.c \ + src/gui_gtk4_cb.h \ + src/gui_gtk4_da.c \ + src/gui_gtk4_da.h \ + src/gui_gtk4_tb.c \ + src/gui_gtk4_tb.h \ src/gui_gtk_res.xml \ src/gui_motif.c \ src/gui_xmdlg.c \ @@ -522,6 +546,7 @@ SRC_UNIX = \ src/proto/gui_gtk.pro \ src/proto/gui_gtk_x11.pro \ src/proto/gui_gtk_gresources.pro \ + src/proto/gui_gtk4.pro \ src/proto/gui_motif.pro \ src/proto/gui_xmdlg.pro \ src/proto/gui_x11.pro \ @@ -540,7 +565,6 @@ SRC_UNIX = \ src/wayland.c \ src/wayland.h \ src/which.sh \ - src/gen-wayland-protocols.sh \ src/xxd/Makefile \ # Source files for both MS Windows and Unix-like. @@ -638,13 +662,7 @@ SRC_DOS = \ src/tee/tee.c \ src/xxd/Make_ming.mak \ src/xxd/Make_mvc.mak \ - nsis/auxiliary.nsh \ - nsis/gvim.nsi \ - nsis/Makefile \ - nsis/Make_mvc.mak \ nsis/README.txt \ - nsis/lang/*.nsi \ - nsis/lang/README.txt \ uninstall.txt \ # Source files for MS Windows without CR/LF translation (also in the extra archive). @@ -662,7 +680,6 @@ SRC_DOS_BIN = \ src/xpm/x86/lib-vc14/libXpm.lib \ src/xpm/x86/lib/libXpm.a \ runtime/bitmaps/vim.ico \ - nsis/icons.zip \ # Source files for Amiga, DOS, etc. (also in the extra archive). SRC_AMI_DOS = \ @@ -676,6 +693,7 @@ SRC_AMI = \ src/Make_ami.mak \ src/os_amiga.c \ src/os_amiga.h \ + src/os_amiga_stubs.c \ src/proto/os_amiga.pro \ src/testdir/Make_amiga.mak \ src/testdir/util/amiga.vim \ @@ -804,6 +822,10 @@ RT_ALL = \ runtime/tutor/en/vim-01-beginner.tutor.json \ runtime/tutor/en/vim-02-beginner.tutor \ runtime/tutor/en/vim-02-beginner.tutor.json \ + runtime/tutor/sv/vim-01-beginner.tutor \ + runtime/tutor/sv/vim-01-beginner.tutor.json \ + runtime/tutor/sv/vim-02-beginner.tutor \ + runtime/tutor/sv/vim-02-beginner.tutor.json \ runtime/tutor/tutor.tutor \ runtime/tutor/tutor.tutor.json \ runtime/tutor/tutor.vim \ @@ -821,7 +843,6 @@ RT_ALL = \ runtime/pack/dist/opt/editorconfig/.editorconfig \ runtime/pack/dist/opt/editorconfig/CONTRIBUTORS \ runtime/pack/dist/opt/editorconfig/LICENSE* \ - runtime/pack/dist/opt/editorconfig/mkzip.sh \ runtime/pack/dist/opt/editorconfig/README.md \ runtime/pack/dist/opt/editorconfig/autoload/*.vim \ runtime/pack/dist/opt/editorconfig/autoload/editorconfig_core/*.vim \ @@ -829,6 +850,10 @@ RT_ALL = \ runtime/pack/dist/opt/editorconfig/doc/editorconfig.txt \ runtime/pack/dist/opt/editorconfig/ftdetect/editorconfig.vim \ runtime/pack/dist/opt/editorconfig/plugin/editorconfig.vim \ + runtime/pack/dist/opt/helpcurwin/autoload/helpcurwin.vim \ + runtime/pack/dist/opt/helpcurwin/doc/helpcurwin.txt \ + runtime/pack/dist/opt/helpcurwin/doc/tags \ + runtime/pack/dist/opt/helpcurwin/plugin/helpcurwin.vim \ runtime/pack/dist/opt/helptoc/autoload/helptoc.vim \ runtime/pack/dist/opt/helptoc/doc/helptoc.txt \ runtime/pack/dist/opt/helptoc/doc/tags \ @@ -852,7 +877,12 @@ RT_ALL = \ runtime/pack/dist/opt/netrw/autoload/netrw_gitignore.vim \ runtime/pack/dist/opt/netrw/doc/netrw.txt \ runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim \ - runtime/pack/dist/opt/netrw/syntax/netrw.vim + runtime/pack/dist/opt/netrw/syntax/netrw.vim \ + runtime/pack/dist/opt/osc52/plugin/osc52.vim \ + runtime/pack/dist/opt/osc52/autoload/osc52.vim \ + runtime/pack/dist/opt/osc52/doc/osc52.txt \ + runtime/pack/dist/opt/osc52/doc/tags \ + runtime/xdg.vim # Runtime files for all distributions without CR/LF translation. RT_ALL_BIN = \ @@ -907,7 +937,6 @@ RT_SCRIPTS = \ runtime/syntax/testdir/input/selftestdir/* \ runtime/syntax/testdir/input/setup/*.* \ runtime/syntax/testdir/dumps/*.dump \ - runtime/syntax/testdir/dumps/*.vim \ runtime/syntax/testdir/tools/* \ runtime/syntax/generator/Makefile \ runtime/syntax/generator/README.md \ @@ -928,12 +957,15 @@ RT_UNIX_DOS_BIN = \ runtime/vim16x16.gif \ runtime/vim16x16.png \ runtime/vim16x16.xpm \ + runtime/vim16x16_png.h \ runtime/vim32x32.gif \ runtime/vim32x32.png \ runtime/vim32x32.xpm \ + runtime/vim32x32_png.h \ runtime/vim48x48.gif \ runtime/vim48x48.png \ runtime/vim48x48.xpm \ + runtime/vim48x48_png.h \ # Runtime not for Unix-like or extra. RT_NO_UNIX = \ @@ -979,8 +1011,7 @@ RT_AMI = \ runtime/macros/maze/*.info \ runtime/macros/urm/*.info \ runtime/tools.info \ - runtime/tutor.info \ - runtime/tutor/*.info \ + runtime/tutor.info # Runtime files in extra archive. RT_EXTRA = \ @@ -1095,6 +1126,8 @@ LANG_GEN = \ runtime/doc/*-pl.UTF-8.1 \ runtime/doc/*-ru.1 \ runtime/doc/*-ru.UTF-8.1 \ + runtime/doc/*-sv.1 \ + runtime/doc/*-sv.UTF-8.1 \ runtime/doc/*-tr.1 \ runtime/doc/*-tr.UTF-8.1 \ runtime/lang/README.txt \ @@ -1114,6 +1147,8 @@ LANG_GEN = \ runtime/tutor/sr/vim-01-beginner.tutor.json \ runtime/tutor/sr/vim-02-beginner.tutor \ runtime/tutor/sr/vim-02-beginner.tutor.json \ + runtime/tutor/zh/vim-01-beginner.tutor \ + runtime/tutor/zh/vim-01-beginner.tutor.json \ runtime/tutor/tutor1.?? \ runtime/tutor/tutor1.??_?? \ runtime/tutor/tutor1.bar \ @@ -1171,10 +1206,10 @@ LANG_DOS = \ # be excluded from distribution tarballs and the like. # This excludes them from the CI check for unlisted files. IGNORE = \ - .appveyor.yml \ .github/FUNDING.yml \ .github/labeler.yml \ .github/workflows/label.yml \ + AGENTS.md \ SECURITY.md \ ci/unlisted.make \ ci/hlgroups.make \ diff --git a/Makefile b/Makefile index c334613455..2552083a51 100644 --- a/Makefile +++ b/Makefile @@ -98,7 +98,7 @@ syntaxtest: # Before creating an archive first delete all backup files, *.orig, etc. MAJOR = 9 -MINOR = 1 +MINOR = 2 # CHECKLIST for creating a new version: # @@ -205,23 +205,7 @@ MINOR = 1 # - in this directory: # > make dosbin # NSIS self installing exe: -# - To get NSIS see http://nsis.sourceforge.net -# - Make sure gvim_ole.exe, vimw32.exe, installw32.exe, -# uninstallw32.exe, teew32.exe and xxdw32.exe have been build as mentioned -# above. -# - copy these files (get them from a binary archive or build them): -# gvimext.dll in src/GvimExt -# gvimext64.dll in src/GvimExt -# gvimext64.dll can be obtained from: -# https://github.com/vim/vim-win32-installer/releases -# It is part of gvim_9.1.*_x64.zip as vim/vim91/GvimExt/gvimext64.dll. -# - Make sure there is a diff.exe two levels up (get it from a previous Vim -# version). Also put winpty32.dll and winpty-agent.exe there. -# - go to ../nsis and do: -# > nmake.exe -f Make_mvc.mak all -# (takes a few minutes). -# See nsis/README.txt for details. -# - Copy gvim##.exe to the dist directory. +# See https://github.com/vim/vim-win32-installer # # 64 bit builds (these are not in the normal distribution, the 32 bit build # works just fine on 64 bit systems). @@ -410,7 +394,7 @@ amisrc: dist prepare mv dist/vim$(VERSION)src.tar.gz dist/vim$(VERSION)src.tgz # MS-DOS sources -dossrc: dist dist/$(COMMENT_SRC) license +dossrc: dist dist/$(COMMENT_SRC) -rm -rf dist/vim$(VERSION)src.zip -rm -rf dist/vim mkdir dist/vim @@ -428,9 +412,6 @@ dossrc: dist dist/$(COMMENT_SRC) license rmdir dist/vim/$(VIMRTDIR)/runtime cd dist && zip -9 -rD -z vim$(VERSION)src.zip vim <$(COMMENT_SRC) -license: - cd nsis && $(MAKE) -f Makefile $@ - dosrt: dist dist/$(COMMENT_RT) dosrt_files -rm -rf dist/vim$(VERSION)rt.zip cd dist && zip -9 -rD -z vim$(VERSION)rt.zip vim <$(COMMENT_RT) @@ -460,6 +441,7 @@ dosrt_files: dist prepare $(LANG_GEN_BIN) \ | (cd dist/vim/$(VIMRTDIR); tar xf -) -rm $(IN_README_DIR) + mv dist/vim/$(VIMRTDIR)/lang/ dist/vim/$(VIMRTDIR)/readme/ mv dist/vim/$(VIMRTDIR)/runtime/* dist/vim/$(VIMRTDIR) rmdir dist/vim/$(VIMRTDIR)/runtime # Add the message translations. Trick: skip ja.mo/ja.euc-jp.mo and use diff --git a/README.txt b/README.txt index 80ec9e3c43..18c3e53b32 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -README.txt for version 9.1 of Vim: Vi IMproved. +README.txt for version 9.2 of Vim: Vi IMproved. WHAT IS VIM? diff --git a/README_VIM9.md b/README_VIM9.md index c9ce73a2d1..7442b0bcdc 100644 --- a/README_VIM9.md +++ b/README_VIM9.md @@ -28,7 +28,7 @@ way: * Local variables are not available in an l: dictionary. * A few more things that slow us down, such as exception handling details. -I Implemented a "proof of concept" and measured the time to run a simple +I implemented a "proof of concept" and measured the time to run a simple for loop with an addition (Justin used this example in his presentation, full code is below): @@ -224,7 +224,7 @@ Eventually this will lead to Vim 9! ## Code for sum time measurements -Vim was build with -O2. +Vim was built with -O2. ``` vim func VimOld() diff --git a/README_vim.md b/README_vim.md index 30b0bd7b51..387e5b2bca 100644 --- a/README_vim.md +++ b/README_vim.md @@ -1,23 +1,7 @@ -
- Special thanks for supporting Vim by donating to the ICCF: -
-
- - Warp sponsorship - - -### [Warp, built for coding with multiple AI agents.](https://www.warp.dev/vim) -[Available for MacOS, Linux, & Windows](https://www.warp.dev/vim)
-
-
- # [![Vim The editor](https://github.com/vim/vim/raw/master/runtime/vimlogo.gif)](https://www.vim.org) [![Github Build status](https://github.com/vim/vim/workflows/GitHub%20CI/badge.svg)](https://github.com/vim/vim/actions?query=workflow%3A%22GitHub+CI%22) -[![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim) -[![Cirrus Build Status](https://api.cirrus-ci.com/github/vim/vim.svg)](https://cirrus-ci.com/github/vim/vim) [![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master) -[![Coverity Scan](https://scan.coverity.com/projects/241/badge.svg)](https://scan.coverity.com/projects/vim) [![Debian CI](https://badges.debian.net/badges/debian/testing/vim/version.svg)](https://buildd.debian.org/vim) [![Packages](https://repology.org/badge/tiny-repos/vim.svg)](https://repology.org/metapackage/vim) [![Fossies codespell report](https://fossies.org/linux/test/vim-master.tar.gz/codespell.svg)](https://fossies.org/linux/test/vim-master.tar.gz/codespell.html) @@ -25,7 +9,9 @@ If you find a bug or want to discuss the best way to add a new feature, please [open an issue](https://github.com/vim/vim/issues/new/choose). If you have a question or want to discuss the best way to do something with -Vim, you can use [StackExchange](https://vi.stackexchange.com/) +Vim, you can join [`#vim`](https://web.libera.chat/#vim), +[reddit.com/r/vim](https://reddit.com/r/vim), +use [StackExchange](https://vi.stackexchange.com/), or one of the [Maillists](https://www.vim.org/community.php). ## What is Vim? @@ -167,4 +153,4 @@ Most of Vim was created by Bram Moolenaar `` Send any other comments, patches, flowers and suggestions to the vim-dev mailing list: `` -This is `README.md` for version 9.1 of Vim: Vi IMproved. +This is `README.md` for version 9.2 of Vim: Vi IMproved. diff --git a/READMEdir/Contents b/READMEdir/Contents index 48b7c59ec5..f01a3fc560 100644 --- a/READMEdir/Contents +++ b/READMEdir/Contents @@ -9,15 +9,15 @@ Vim Vi IMproved. A clone of the UNIX text editor Vi. Very useful messages, shows current file name in window title, on-line help, rectangular cut/paste, etc., etc., etc... - Version 9.1. Also runs under UNIX, MS-Windows, Mac, etc. - vim91rt.tgz contains the documentation and syntax files. - vim91bin.tgz contains the binaries. - vim91src.tgz contains the sources. + Version 9.2. Also runs under UNIX, MS-Windows, Mac, etc. + vim92rt.tgz contains the documentation and syntax files. + vim92bin.tgz contains the binaries. + vim92src.tgz contains the sources. Author: Bram Moolenaar et al. Xxd Hex dumper and reader. Can be used to view files as hex, edit them and write them back. Can also be used to patch files. - Version 2023 Oct 25 - Author: Juergen Weigert + Version 2025 Nov 26 + Author: Juergen Weigert et al. diff --git a/READMEdir/README_ami.txt b/READMEdir/README_ami.txt index f9815108d1..a321fa064f 100644 --- a/READMEdir/README_ami.txt +++ b/READMEdir/README_ami.txt @@ -1,4 +1,4 @@ -README_ami.txt for version 9.1 of Vim: Vi IMproved. +README_ami.txt for version 9.2 of Vim: Vi IMproved. This file explains the installation of Vim on Amiga systems. See README.txt for general information about Vim. @@ -16,8 +16,8 @@ easily upgrade to a new version. For example: You would then unpack the archives like this: cd dh0:editors - tar xf t:vim91bin.tar - tar xf t:vim91rt.tar + tar xf t:vim92bin.tar + tar xf t:vim92rt.tar Set the $VIM environment variable to point to the top directory of your Vim files. For the above example: diff --git a/READMEdir/README_amibin.txt b/READMEdir/README_amibin.txt index 224ff36cd1..69b5320f54 100644 --- a/READMEdir/README_amibin.txt +++ b/READMEdir/README_amibin.txt @@ -1,8 +1,8 @@ -README_amibin.txt for version 9.1 of Vim: Vi IMproved. +README_amibin.txt for version 9.2 of Vim: Vi IMproved. See "README.txt" for general information about Vim. See "README_ami.txt" for installation instructions for the Amiga. -These files are in the runtime archive (vim91rt.tgz). +These files are in the runtime archive (vim92rt.tgz). The Amiga "bin" archive contains the Vim executable for the Amiga. It was diff --git a/READMEdir/README_amisrc.txt b/READMEdir/README_amisrc.txt index 5fd4cf2c90..fb3a455929 100644 --- a/READMEdir/README_amisrc.txt +++ b/READMEdir/README_amisrc.txt @@ -1,8 +1,8 @@ -README_amisrc.txt for version 9.1 of Vim: Vi IMproved. +README_amisrc.txt for version 9.2 of Vim: Vi IMproved. See "README.txt" for general information about Vim. See "README_ami.txt" for installation instructions for the Amiga. -These files are in the runtime archive (vim91rt.tgz). +These files are in the runtime archive (vim92rt.tgz). The Amiga source archive contains the files needed to compile Vim on the diff --git a/READMEdir/README_bindos.txt b/READMEdir/README_bindos.txt index 51fc2c59ef..43a5455365 100644 --- a/READMEdir/README_bindos.txt +++ b/READMEdir/README_bindos.txt @@ -1,16 +1,16 @@ -README_bindos.txt for version 9.1 of Vim: Vi IMproved. +README_bindos.txt for version 9.2 of Vim: Vi IMproved. See "README.txt" for general information about Vim. See "README_dos.txt" for installation instructions for MS-DOS and MS-Windows. -These files are in the runtime archive (vim91rt.zip). +These files are in the runtime archive (vim92rt.zip). There are several binary distributions of Vim for the PC. You would normally pick only one of them, but it's also possible to install several. These ones are available (the version number may differ): - vim91w32.zip Windows console version - gvim91.zip Windows GUI version - gvim91ole.zip Windows GUI version with OLE + vim92w32.zip Windows console version + gvim92.zip Windows GUI version + gvim92ole.zip Windows GUI version with OLE -You MUST also get the runtime archive (vim91rt.zip). -The sources are also available (vim91src.zip). +You MUST also get the runtime archive (vim92rt.zip). +The sources are also available (vim92src.zip). diff --git a/READMEdir/README_dos.txt b/READMEdir/README_dos.txt index c650980459..ce1779b0ab 100644 --- a/READMEdir/README_dos.txt +++ b/READMEdir/README_dos.txt @@ -1,4 +1,4 @@ -README_dos.txt for version 9.1 of Vim: Vi IMproved. +README_dos.txt for version 9.2 of Vim: Vi IMproved. This file explains the installation of Vim on MS-Windows systems. See "README.txt" for general information about Vim. @@ -41,19 +41,19 @@ These are the normal steps to install Vim from the .zip archives: located. Check the $VIM setting to see where it points to: set VIM For example, if you have - C:\vim\vim91 + C:\vim\vim92 do cd C:\ Binary and runtime Vim archives are normally unpacked in the same location, on top of each other. -2. Unpack the zip archives. This will create a new directory "vim\vim91", +2. Unpack the zip archives. This will create a new directory "vim\vim92", in which all the distributed Vim files are placed. Since the directory name includes the version number, it is unlikely that you overwrite existing files. Examples: - pkunzip -d gvim91.zip - unzip vim91w32.zip + pkunzip -d gvim92.zip + unzip vim92w32.zip You need to unpack the runtime archive and at least one of the binary archives. When using more than one binary version, be careful not to @@ -65,7 +65,7 @@ These are the normal steps to install Vim from the .zip archives: won't move or copy the runtime files. 3. Change to the new directory: - cd vim\vim91 + cd vim\vim92 Run the "install.exe" program. It will ask you a number of questions about how you would like to have your Vim setup. Among these are: - You can tell it to write a "_vimrc" file with your preferences in the @@ -76,8 +76,8 @@ These are the normal steps to install Vim from the .zip archives: console or in a shell. You can select one of the directories in your $PATH. If you skip this, you can add Vim to the search path manually: The simplest is to add a line to your autoexec.bat. Examples: - set path=%path%;C:\vim\vim91 - set path=%path%;D:\editors\vim\vim91 + set path=%path%;C:\vim\vim92 + set path=%path%;D:\editors\vim\vim92 - Create entries for Vim on the desktop and in the Start menu. That's it! @@ -89,8 +89,8 @@ Remarks: won't show a menubar. Then you need to set the $VIM environment variable to point to the top directory of your Vim files. Example: set VIM=C:\editors\vim - Vim version 9.1 will look for your vimrc file in $VIM, and for the runtime - files in $VIM/vim91. See ":help $VIM" for more information. + Vim version 9.2 will look for your vimrc file in $VIM, and for the runtime + files in $VIM/vim92. See ":help $VIM" for more information. - To avoid confusion between distributed files of different versions and your own modified vim scripts, it is recommended to use this directory layout: @@ -101,14 +101,14 @@ Remarks: C:\vim\vimfiles\ftplugin\*.vim Filetype plugins C:\vim\... Other files you made. Distributed files: - C:\vim\vim91\vim.exe The Vim version 9.1 executable. - C:\vim\vim91\doc\*.txt The version 9.1 documentation files. - C:\vim\vim91\bugreport.vim A Vim version 9.1 script. - C:\vim\vim91\... Other version 9.1 distributed files. + C:\vim\vim92\vim.exe The Vim version 9.2 executable. + C:\vim\vim92\doc\*.txt The version 9.2 documentation files. + C:\vim\vim92\bugreport.vim A Vim version 9.2 script. + C:\vim\vim92\... Other version 9.2 distributed files. In this case the $VIM environment variable would be set like this: set VIM=C:\vim - Then $VIMRUNTIME will automatically be set to "$VIM\vim91". Don't add - "vim91" to $VIM, that won't work. + Then $VIMRUNTIME will automatically be set to "$VIM\vim92". Don't add + "vim92" to $VIM, that won't work. - You can put your Vim executable anywhere else. If the executable is not with the other Vim files, you should set $VIM. The simplest is to add a line diff --git a/READMEdir/README_extra.txt b/READMEdir/README_extra.txt index 84a858d54c..393ca5c6db 100644 --- a/READMEdir/README_extra.txt +++ b/READMEdir/README_extra.txt @@ -1,4 +1,4 @@ -README_extra.txt for version 9.1 of Vim: Vi IMproved. +README_extra.txt for version 9.2 of Vim: Vi IMproved. These extra files of Vim are for special purposes. This README explains what the files are for. For general information about Vim, see the "README.txt" @@ -33,8 +33,6 @@ src/if_ole.* OLE automation interface, for MS Windows. src/GvimExt/* DLL for the "Edit with Vim" context menu entry -nsis/* NSIS script to build the self-installing MS-Windows exe - runtime/doc/*.man Preprocessed manual pages. runtime/macros/file_select.vim Vim script to browse directories (Unix only). diff --git a/READMEdir/README_haiku.txt b/READMEdir/README_haiku.txt index e4caf71ace..c6d42f58db 100644 --- a/READMEdir/README_haiku.txt +++ b/READMEdir/README_haiku.txt @@ -1,4 +1,4 @@ -README_haiku.txt for version 9.1 of Vim: Vi IMproved. +README_haiku.txt for version 9.2 of Vim: Vi IMproved. This file explains the installation of Vim on Haiku operating system. See "README.txt" for general information about Vim. diff --git a/READMEdir/README_mac.txt b/READMEdir/README_mac.txt index 3e5160e8d3..77411cc3a6 100644 --- a/READMEdir/README_mac.txt +++ b/READMEdir/README_mac.txt @@ -1,4 +1,4 @@ -README_mac.txt for version 9.1 of Vim: Vi IMproved. +README_mac.txt for version 9.2 of Vim: Vi IMproved. How to install MacVim? ======================== diff --git a/READMEdir/README_ole.txt b/READMEdir/README_ole.txt index f34b679a1c..17638a9268 100644 --- a/READMEdir/README_ole.txt +++ b/READMEdir/README_ole.txt @@ -1,4 +1,4 @@ -README_ole.txt for version 9.1 of Vim: Vi IMproved. +README_ole.txt for version 9.2 of Vim: Vi IMproved. This archive contains gvim.exe with OLE interface. This version of gvim.exe can also load a number of interface dynamically (you diff --git a/READMEdir/README_os2.txt b/READMEdir/README_os2.txt index a440918e18..1e6b344cdc 100644 --- a/READMEdir/README_os2.txt +++ b/READMEdir/README_os2.txt @@ -1,4 +1,4 @@ -README_os2.txt for version 9.1 of Vim: Vi IMproved. +README_os2.txt for version 9.2 of Vim: Vi IMproved. This file used to explain the installation of Vim on OS/2 systems. However, support for OS/2 has been removed in patch 7.4.1008. diff --git a/READMEdir/README_os390.txt b/READMEdir/README_os390.txt index 94709792c7..94f2a1cc15 100644 --- a/READMEdir/README_os390.txt +++ b/READMEdir/README_os390.txt @@ -1,4 +1,4 @@ -README_os390.txt for version 9.1 of Vim: Vi IMproved. +README_os390.txt for version 9.2 of Vim: Vi IMproved. This readme explains how to build Vim on z/OS. Formerly called OS/390. See "README.txt" for general information about Vim. diff --git a/READMEdir/README_src.txt b/READMEdir/README_src.txt index fc5ea15dfe..df1c97c81f 100644 --- a/READMEdir/README_src.txt +++ b/READMEdir/README_src.txt @@ -1,8 +1,8 @@ -README_src.txt for version 9.1 of Vim: Vi IMproved. +README_src.txt for version 9.2 of Vim: Vi IMproved. The source archive contains the files needed to compile Vim on Unix systems. It is packed for Unix systems (NL line separator). For more information, see the README.txt file that comes with the runtime -archive (vim-9.1-rt.tar.gz). To be able to run Vim you MUST get the runtime +archive (vim-9.2-rt.tar.gz). To be able to run Vim you MUST get the runtime archive too! diff --git a/READMEdir/README_srcdos.txt b/READMEdir/README_srcdos.txt index e7ae7a26d8..1ec96d528c 100644 --- a/READMEdir/README_srcdos.txt +++ b/READMEdir/README_srcdos.txt @@ -1,8 +1,8 @@ -README_srcdos.txt for version 9.1 of Vim: Vi IMproved. +README_srcdos.txt for version 9.2 of Vim: Vi IMproved. See "README.txt" for general information about Vim. See "README_dos.txt" for installation instructions for MS-Windows. -These files are in the runtime archive (vim91rt.zip). +These files are in the runtime archive (vim92rt.zip). The DOS source archive contains the files needed to compile Vim on MS-Windows. diff --git a/READMEdir/README_unix.txt b/READMEdir/README_unix.txt index 196628f114..fefe58d80d 100644 --- a/READMEdir/README_unix.txt +++ b/READMEdir/README_unix.txt @@ -1,4 +1,4 @@ -README_unix.txt for version 9.1 of Vim: Vi IMproved. +README_unix.txt for version 9.2 of Vim: Vi IMproved. This file explains the installation of Vim on Unix systems. See "README.txt" for general information about Vim. diff --git a/READMEdir/README_vms.txt b/READMEdir/README_vms.txt index 4c47921c67..6c697bb09d 100644 --- a/READMEdir/README_vms.txt +++ b/READMEdir/README_vms.txt @@ -1,4 +1,4 @@ -README_vms.txt for version 9.1 of Vim: Vi IMproved. +README_vms.txt for version 9.2 of Vim: Vi IMproved. This file explains the installation of Vim on VMS systems. See "README.txt" in the runtime archive for information about Vim. diff --git a/READMEdir/README_w32s.txt b/READMEdir/README_w32s.txt index d71faeb4ee..bbd2175055 100644 --- a/READMEdir/README_w32s.txt +++ b/READMEdir/README_w32s.txt @@ -1,4 +1,4 @@ -README_w32s.txt for version 9.1 of Vim: Vi IMproved. +README_w32s.txt for version 9.2 of Vim: Vi IMproved. This file used to explain the installation of Vim on MS-Windows 3.1 and 3.11 systems. However, support for MS-Windows 3.1 and 3.11 has been removed in diff --git a/SECURITY.md b/SECURITY.md index 7d1e0166c9..9d1ecf35ab 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,9 +2,16 @@ ## Reporting a vulnerability -If you want to report a security issue, please privately disclose the issue to the vim-security mailing list -vim-security@googlegroups.com - -This is a private list, read only by the maintainers, but anybody can post, after moderation. +If you want to report a security issue, please privately disclose the issue either via: +- The vim-security mailing list: vim-security@googlegroups.com + This is a private list, read only by the maintainers, but anybody can post. +- [GitHub Security Advisories](https://github.com/vim/vim/security/advisories/new) **Please don't publicly disclose the issue until it has been addressed by us.** + +## Guidelines for reporting +- Clearly explain **why** the behaviour is a security issue, not just that a bug exists. +- Keep reports concise and focused. +- Do not flood us with a list of issues. Report them one by one to ensure to not overwhelm us with the work load. +- Do **not** submit AI-generated reports without carefully reviewing them first. Low-quality or + speculative reports waste maintainer time and will be closed without action, and repeat offenders **will be banned**. diff --git a/ci/appveyor.bat b/ci/appveyor.bat deleted file mode 100644 index 17d95ff691..0000000000 --- a/ci/appveyor.bat +++ /dev/null @@ -1,131 +0,0 @@ -@echo off -:: Batch file for building/testing Vim on AppVeyor -set target=%1 -set "GETTEXT_PATH=c:\gettext64\bin" - -setlocal ENABLEDELAYEDEXPANSION -cd %APPVEYOR_BUILD_FOLDER% - -:: Python3 -set "PYTHON3_VER=311" -set "PYTHON3_RELEASE=3.11.1" -set "PYTHON3_URL=https://www.python.org/ftp/python/%PYTHON3_RELEASE%/python-%PYTHON3_RELEASE%-amd64.exe" -set "PYTHON3_DIR=C:\python%PYTHON3_VER%-x64" - -:: Gettext-tools, iconv and libraries -set "GETTEXT64_URL=https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-64.zip" -set "GETTEXT64_DIR=c:\gettext64" - -set "VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" - -if exist "%VSWHERE%" ( - for /f "usebackq delims=" %%i in ( - `"%VSWHERE%" -products * -latest -property installationPath` - ) do ( - set "VCVARSALL=%%i\VC\Auxiliary\Build\vcvarsall.bat" - ) -) - -if not exist "%VCVARSALL%" ( - set "VCVARSALL=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" -) -call "%VCVARSALL%" x64 - -goto %target% -echo Unknown build target. -exit 1 - -:: ---------------------------------------------------------------------------- -:install -@echo on -if not exist downloads mkdir downloads - -:: Python 3 -if not exist %PYTHON3_DIR% ( - call :downloadfile %PYTHON3_URL% downloads\python3.exe - cmd /c start /wait downloads\python3.exe /quiet TargetDir=%PYTHON3_DIR% ^ - Include_pip=0 Include_tcltk=0 Include_test=0 Include_tools=0 ^ - AssociateFiles=0 Shortcuts=0 Include_doc=0 Include_launcher=0 ^ - InstallLauncherAllUsers=0 -) -:: GETTEXT -if not exist %GETTEXT64_DIR% ( - mkdir %GETTEXT64_DIR% - call :downloadfile %GETTEXT64_URL% downloads\gettext64.zip - cmd /c powershell.exe -NoLogo -NoProfile -Command ^ - Add-Type -AssemblyName 'System.IO.Compression.FileSystem'; ^ - [System.IO.Compression.ZipFile]::ExtractToDirectory^('downloads\gettext64.zip', ^ - '%GETTEXT64_DIR%'^) - copy /y %GETTEXT64_DIR%\bin\libintl-8.dll C:\projects\vim\src\ || exit 1 - copy /y %GETTEXT64_DIR%\bin\libiconv-2.dll C:\projects\vim\src\ || exit 1 -) - -@echo off -goto :eof - -:: ---------------------------------------------------------------------------- -:build - -cd src - -echo "Building MSVC 64bit console Version" -nmake -f Make_mvc.mak CPU=AMD64 ^ - OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^ - FEATURES=%FEATURE% CI_CFLAGS=/we4267 -if not exist vim.exe ( - echo Build failure. - exit 1 -) - -:: build MSVC huge version with python and channel support -:: GUI needs to be last, so that testing works -echo "Building MSVC 64bit GUI Version" -if "%FEATURE%" == "HUGE" ( - nmake -f Make_mvc.mak CPU=AMD64 ^ - OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no POSTSCRIPT=yes ^ - PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 ^ - PYTHON3_VER=%PYTHON3_VER% DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^ - FEATURES=%FEATURE% CI_CFLAGS=/we4267 -) ELSE ( - nmake -f Make_mvc.mak CPU=AMD64 ^ - OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^ - FEATURES=%FEATURE% CI_CFLAGS=/we4267 -) -if not exist gvim.exe ( - echo Build failure. - exit 1 -) -.\gvim -u NONE -c "redir @a | ver |0put a | wq" ver_msvc.txt || exit 1 - -echo "version output MSVC console" -.\vim --version || exit 1 -echo "version output MSVC GUI" -type ver_msvc.txt || exit 1 - -goto :eof - -:: ---------------------------------------------------------------------------- -:test -@echo on -cd src/testdir -:: Testing with MSVC gvim -path %PYTHON3_DIR%;%GETTEXT_PATH%;%PATH% -nmake -f Make_mvc.mak VIMPROG=..\gvim -nmake -f Make_mvc.mak clean -:: Testing with MSVC console version -nmake -f Make_mvc.mak VIMPROG=..\vim - -@echo off -goto :eof - -:: ---------------------------------------------------------------------------- -:downloadfile -:: call :downloadfile -if not exist %2 ( - curl -f -L %1 -o %2 -) -if ERRORLEVEL 1 ( - rem Retry once. - curl -f -L %1 -o %2 || exit 1 -) -@goto :eof diff --git a/ci/config.mk.brew-libiconv.sed b/ci/config.mk.brew-libiconv.sed new file mode 100644 index 0000000000..6bfc3d6919 --- /dev/null +++ b/ci/config.mk.brew-libiconv.sed @@ -0,0 +1,8 @@ +# Use Homebrew GNU libiconv to work around broken Apple iconv. Use static +# linking as we don't want our binary releases to pull in third-party +# dependencies. +# +# If gettext is configured in the build, it also needs to be built against GNU +# libiconv. Otherwise we would get a link error from this. +/^CFLAGS[[:blank:]]*=/s/$/ -I\/opt\/homebrew\/opt\/libiconv\/include/ +/^LIBS[[:blank:]]*=/s/-liconv/\/opt\/homebrew\/opt\/libiconv\/lib\/libiconv.a/ diff --git a/ci/config.mk.sed b/ci/config.mk.sed index d888901931..f667b2c04f 100644 --- a/ci/config.mk.sed +++ b/ci/config.mk.sed @@ -1,3 +1,3 @@ /^CFLAGS[[:blank:]]*=/s/$/ -Wall -Wextra -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Werror -Wno-deprecated-declarations/ -/^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-function -Wno-shadow/ +/^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-function -Wno-strict-prototypes -Wno-shadow/ /^RUBY_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-parameter -Wno-strict-prototypes/ diff --git a/ci/ddebs.list b/ci/ddebs.list index e4491a6042..f767e9366e 100644 --- a/ci/ddebs.list +++ b/ci/ddebs.list @@ -1,3 +1,2 @@ deb http://ddebs.ubuntu.com noble main restricted universe multiverse deb http://ddebs.ubuntu.com noble-updates main restricted universe multiverse -deb http://ddebs.ubuntu.com noble-proposed main restricted universe multiverse diff --git a/ci/gen_testset.py b/ci/gen_testset.py new file mode 100644 index 0000000000..91eeca111e --- /dev/null +++ b/ci/gen_testset.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +import argparse +import itertools +import json +import re +import subprocess + + +def generate_testset(n): + cp = subprocess.run(["make", "-C", "src/testdir", "-npq"], capture_output=True) + + tests = set() + for line in cp.stdout.decode().split("\n"): + if re.match(r"^(NEW_TESTS_RES|TEST_VIM9_RES) = ", line): + tests.update(re.findall(r"\btest\w+\.res\b", line)) + + tests = sorted(list(tests)) + # move test_alot*.res to the end + tests = ( + [t for t in tests if not t.startswith("test_alot")] + + [t for t in tests if t.startswith("test_alot_")] + + ["test_alot.res"] + ) + targets = tests + + if n > 1: + targets = [ts for ts in itertools.batched(tests, n)] + targets = [[t for t in ts if t] for ts in itertools.zip_longest(*targets)] + + return targets + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("n", type=int, nargs="?", default=1) + args = parser.parse_args() + + print(json.dumps(generate_testset(args.n))) + + +if __name__ == "__main__": + main() diff --git a/ci/hlgroups.ignore b/ci/hlgroups.ignore index a046eb127d..681b120875 100644 --- a/ci/hlgroups.ignore +++ b/ci/hlgroups.ignore @@ -67,3 +67,4 @@ Visual VisualNOS WarningMsg WildMenu +WinColor diff --git a/ci/lychee.toml b/ci/lychee.toml index 941a2d7f6f..515e4f54d9 100644 --- a/ci/lychee.toml +++ b/ci/lychee.toml @@ -13,7 +13,7 @@ extensions = ["c", "h", "md", "html", "txt"] accept = ["100..=103", "200..=299", "429"] # Retry each request a few times on transient network errors -retries = 2 +max_retries = 2 retry_wait_time = 2 # Timeout per request in seconds @@ -26,7 +26,6 @@ exclude = [ '^file://.*', '^https?://(www\.)?badges\.debian\.net/.*$', '^https?://(www\.)?repology\.org/.*$', - '^https?://scan\.coverity\.com/.*$', '^https?://(www\.)?img\.shields\.io/.*$', '^https?://(www\.)?fossies\.org/.*$', '^https?://(www\.)?adobe\.com.*$', diff --git a/lang/LICENSE.ja.txt b/lang/LICENSE.ja.txt new file mode 100644 index 0000000000..700064180d --- /dev/null +++ b/lang/LICENSE.ja.txt @@ -0,0 +1,73 @@ +注æ„: ã“ã®æ—¥æœ¬èªžè¨³ã¯å‚考ã®ãŸã‚ã«ç¤ºã™ã‚‚ã®ã§ã‚ã‚Šã€æ³•的効力をæŒã¡ã¾ã›ã‚“。 + å¿…ãšåŽŸæ–‡ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + +VIM ライセンス + +I) Vim ã®ã‚³ãƒ”ーを変更ã›ãšã«é…布ã™ã‚‹ã“ã¨ã¯ã€ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ–‡ã‚’å«ã‚ãªã‘れã°ãª + らãªã„ã“ã¨ä»¥å¤–ã«åˆ¶é™ã•れã¾ã›ã‚“。ã¾ãŸã€å¤‰æ›´ã‚’加ãˆã¦ã„ãªã„ Vim ã®ä¸€éƒ¨åˆ†ã  + ã‘ã‚’é…布ã™ã‚‹ã“ã¨ã‚‚åŒæ§˜ã«ã€ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ–‡ã‚’å«ã‚ãªã‘れã°ãªã‚‰ãªã„ã“ã¨ä»¥å¤– + ã«åˆ¶é™ã•れã¾ã›ã‚“。é…布物ã«ã¯ã€å¤‰æ›´ã‚’加ãˆã¦ã„ãªã„ Vim ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ä½œæˆã— + ãŸå®Ÿè¡Œå¯èƒ½ãƒ•ァイルやã€ã‚ãªãŸç‹¬è‡ªã®èª¬æ˜Žæ›¸ã‚„ Vim script ã‚’å«ã‚ã‚‹ã“ã¨ã‚‚ã§ãã¾ + ã™ã€‚ + +II) 以下㮠4 ã¤ã®æ¡ä»¶ã‚’満ãŸã™å ´åˆã«é™ã‚Šã€Vim ã«å¤‰æ›´ (ã¾ãŸã¯æ‹¡å¼µ) を加ãˆãŸç‰© + ã‚’ã€å®Ÿè¡Œå¯èƒ½ãƒ•ァイルやソースコードもå«ã‚ã¦é…布ã™ã‚‹ã“ã¨ãŒèªã‚られã¦ã„ã¾ã™: + 1) ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ–‡ã‚’変更ã›ãšã«é…布物ã«å«ã‚ã‚‹ã“ã¨ã€‚ + 2) 変更ã•れ㟠Vim ã¯ä»¥ä¸‹ã® 5 ã¤ã®æ–¹æ³•ã®ã©ã‚Œã‹ã§é…布ã—ãªã‘れã°ãªã‚‰ãªã„。 + a) Vim ã«ç‹¬è‡ªã®å¤‰æ›´ã‚’加ãˆãŸå ´åˆã€é…布物ã«ã‚ãªãŸã®é€£çµ¡å…ˆã‚’明確ã«ç¤ºã—㦠+ ãã ã•ã„。メンテナーãŒã‚ãªãŸãŒé…布ã—ãŸå¤‰æ›´ã•れ㟠Vim ã®ã‚³ãƒ”ーã«ã¤ã„ + 㦠(何ã‹ã‚’) å°‹ã­ãŸã¨ãã«ã€ã‚ãªãŸãŒåŠ ãˆãŸå¤‰æ›´ã‚’ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚‚å«ã‚ + ã¦ã€ç„¡å„Ÿã§ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒåˆ©ç”¨ã§ãるよã†ã«ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。メン + テナーã¯å…¬å¼ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Vim ã«ã‚ãªãŸã®å¤‰æ›´ã‚’å–り込むãŸã‚ã®æ¨©åˆ©ã‚’ + ä¿æœ‰ã—ã¾ã™ã€‚メンテナーãŒã‚ãªãŸã®å¤‰æ›´ã‚’ã©ã®ã‚ˆã†ã«ã—ã€ã©ã†ã„ã£ãŸãƒ©ã‚¤ + センスã§é…布ã™ã‚‹ã‹ã‚’交渉ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚交渉ãŒè¡Œã‚れãªã‘れã°ã€ + ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã€ã‚‚ã—ãã¯ã“ã‚Œã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ãŒã‚ãªãŸ + ã®å¤‰æ›´ã«é©ç”¨ã•れã¾ã™ã€‚ç¾åœ¨ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ã“ã“ã«ãƒªã‚¹ãƒˆã•れã¦ã„ã¾ã™: + https://github.com/orgs/vim/people + ã“れãŒå¤‰æ›´ã•れるã¨ãã¯é©åˆ‡ãªå ´æ‰€ã§å‘ŠçŸ¥ã•れã¾ã™(ãŠãらã vim.sf.net + ã‚„ www.vim.org ãã—㦠comp.editors)ã€‚ã‚‚ã—æœ¬å½“ã«ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¨é€£çµ¡ãŒå– + れãªã„å ´åˆã«ã¯ã€ã‚ãªãŸã®å¤‰æ›´ã‚’æå‡ºã™ã‚‹ç¾©å‹™ã¯ã‚りã¾ã›ã‚“。一旦ã€ãƒ¡ãƒ³ãƒ† + ナーãŒã‚ãªãŸã®å¤‰æ›´ã‚’å—ã‘å–ã£ãŸã“ã¨ã‚’確èªã§ããŸãªã‚‰ã€å†åº¦æå‡ºã™ã‚‹å¿…è¦ + ã¯ã‚りã¾ã›ã‚“。 + b) a) ã«åŸºã¥ã„ã¦é…布ã•れãŸå¤‰æ›´ã•れ㟠Vim ã‚’å—ã‘å–ã£ãŸå ´åˆã€ãれを変更 + ã™ã‚‹ã“ã¨ãªã—ã«ã€I) ã«åŸºã¥ã„ã¦å†é…布ã§ãã¾ã™ã€‚ã•らãªã‚‹å¤‰æ›´ã‚’加ãˆãŸ + å ´åˆã€ãã®å¤‰æ›´ã«ã¯ a) ãŒé©ç”¨ã•れã¾ã™ã€‚ + c) 変更ã•れ㟠Vim ã®é…布物全ã¦ã«ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚‚å«ã‚ã¦ã€å…¨ã¦ã®å¤‰æ›´ç‚¹ã‚’ + æä¾›ã—ã¦ãã ã•ã„。ã“れ㯠context diff ã®å½¢å¼ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚ + ã‚ãªãŸã¯ã€ã‚ãªãŸãŒåŠ ãˆãŸæ–°ã—ã„コードã«å¯¾ã—ã¦ã©ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’é©ç”¨ã™ + ã‚‹ã‹é¸æŠžã§ãã¾ã™ã€‚ãã®å¤‰æ›´ã¨ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã¯ã€å…¬å¼ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Vim + ã«å–り込むã“ã¨ã§ã€ä»–ã®ã‚‚ã®ã‚’制é™ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。 + d) c) ã«åŸºã¥ã„ã¦é…布ã•れãŸå¤‰æ›´ã•れ㟠Vim ãŒã‚ã‚‹ã¨ãã€æ¬¡ã®æ¡ä»¶ã‚’満ãŸã™ + å ´åˆã«é™ã‚Šã€ãã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å«ã‚ãšã«é…布ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™: + - ãã®å¤‰æ›´ã«é©ç”¨ã•れã¦ã„るライセンスãŒã€ãã®å¤‰æ›´ã‚’無償ã§åˆ¶é™ãªã—ã« + Vim ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«æä¾›ã™ã‚‹ã“ã¨ã‚’èªã‚ã€ãã—ã¦ã€Vim ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒ + ãã®å¤‰æ›´ã‚’å…¬å¼ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Vim ã«å–り込むã“ã¨ã‚’無償ã§åˆ¶é™ãªã—ã« + èªã‚ã¦ã„る。 + - ãã®å¤‰æ›´ã•れ㟠Vim ã®å¤‰æ›´ç‚¹ã‚’ã€æœ€å¾Œã«é…布ã—ãŸã¨ãã‹ã‚‰å°‘ãªãã¨ã‚‚ + 3 å¹´ã¯ä¿æŒã—ã¦ãã ã•ã„。ãã®æœŸé–“内ã«ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã‚„誰ã‹ãŒãã®å¤‰æ›´ + ã«ã¤ã„㦠(何ã‹ã‚’) å°‹ã­ãŸå ´åˆã€å½¼ã‚‰ãŒãã®å¤‰æ›´ã‚’利用ã§ãるよã†ã«ã— + ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 + - ãã®é…布物ã«ã‚ãªãŸã®é€£çµ¡å…ˆã‚’明確ã«ç¤ºã—ã¦ãã ã•ã„。ãã®é€£çµ¡æ–¹æ³•ã¯ã€ + ãã®å¤‰æ›´ã•れ㟠Vim ã«ç›¸å½“ã™ã‚‹é…å¸ƒç‰©ãŒæœ€å¾Œã«æä¾›ã•れã¦ã‹ã‚‰ã€å°‘ãªã + ã¨ã‚‚ 3 å¹´ã€ãã—ã¦å¯èƒ½ãªé™ã‚Šé•·ãã€æœ‰åйã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 + e) ãã®å¤‰æ›´ã« GNU General Public License (GPL) ãŒé©ç”¨ã•れã¦ã„ã‚‹å ´åˆã€ + GNU GPL ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2ã€ã¾ãŸã¯ãれより新ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«åŸºã¥ã„ã¦ã€ãã® + 変更ã•れ㟠Vim ã‚’é…布ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + 3) ãã®å¤‰æ›´ã•れ㟠Vim を利用ã—ã¦ã„るユーザーãŒã€ãれãŒå¤‰æ›´ã•れã¦ã„ã‚‹ã¨ç¢º + èªã§ãるよã†ã«ã€å°‘ãªãã¨ã‚‚ã€":version" ã‚³ãƒžãƒ³ãƒ‰ã‚„èµ·å‹•æ™‚ã®æŒ¨æ‹¶ãƒ¡ãƒƒã‚»ãƒ¼ + ジã«ã€å¤‰æ›´ã•れã¦ã„る旨を表示ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ãã®é…布物㌠2)e) + ã«ã‚ˆã‚‹ã‚‚ã®ã§ã‚ã‚‹å ´åˆã€ãã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ãŒå¤‰æ›´å‰ã®ã‚‚ã®ã¨çŸ›ç›¾ã—ã¦ã„ãªã„〠+ ã¨ã„ã†æ—¨ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã ã‘ãŒå¿…è¦ã§ã™ã€‚ + 4) 2)a) 㨠2)d) ã«ã‚ˆã‚Šè¦æ±‚ã•れã¦ã„る連絡方法をã€ãã®æœ¬äººãŒè¨‚æ­£ã™ã‚‹ä»¥å¤– + ã«ã€å¤‰æ›´ã—ãŸã‚Šå‰Šé™¤ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。 + +III) 変更ã•れ㟠Vim ã‚’é…布ã™ã‚‹å ´åˆã€ã‚ãªãŸã®å¤‰æ›´ã« Vim ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’使ã„〠+ ãã®å¤‰æ›´ã‚’ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚‚å«ã‚ã¦ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒåˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹ã“ã¨ãŒ + 奨励ã•れã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã«ã¯é›»å­ãƒ¡ãƒ¼ãƒ«ã§é€ã‚‹ã‹ã€ã‚µãƒ¼ãƒãƒ¼ã«ã‚¢ãƒƒãƒ—ロード + ã—ã¦ãã® URL ã‚’é›»å­ãƒ¡ãƒ¼ãƒ«ã§çŸ¥ã‚‰ã›ã‚‹ã®ãŒæœ›ã¾ã—ã„ã§ã™ã€‚å°‘ã—ã®å¤‰æ›´ãªã‚‰ (例㈠+ ã° Makefile ã®å¤‰æ›´ãªã©) context diff ã‚’é›»å­ãƒ¡ãƒ¼ãƒ«ã§é€ã‚‹ã®ãŒã„ã„ã§ã—ょã†ã€‚ + é›»å­ãƒ¡ãƒ¼ãƒ«ã®é€ã‚Šå…ˆã¯ ã§ã™ã€‚ + +IV) Vim ã®ã‚½ãƒ¼ã‚¹ã‚„ã€ãã®ä¸€éƒ¨ã€ã¾ãŸã¯å¤‰æ›´ã•れ㟠Vimã€ã®é…布物ã‹ã‚‰ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ + スを削除ã™ã‚‹ã“ã¨ã¯èªã‚られã¦ã„ã¾ã›ã‚“。望むãªã‚‰ã€ä»¥å‰ã® Vim リリースã«ã€ + ãã®æ™‚点ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã§ã¯ãªãã€ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’é©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ diff --git a/lang/LICENSE.ru.txt b/lang/LICENSE.ru.txt index ba9deae972..d51f178c7d 100644 --- a/lang/LICENSE.ru.txt +++ b/lang/LICENSE.ru.txt @@ -1,3 +1,8 @@ +Примечание. Данный текÑÑ‚ перевода лицензии Vim предоÑтавлÑетÑÑ Ñ Ñ†ÐµÐ»ÑŒÑŽ +Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ не ÑвлÑетÑÑ ÑŽÑ€Ð¸Ð´Ð¸Ñ‡ÐµÑки значимым. Переводчик не неÑёт +ответÑтвенноÑти за возможные неточноÑти и ошибки при переводе лицензии. +ЕдинÑтвенно юридичеÑки значимым ÑвлÑетÑÑ Ñ‚ÐµÐºÑÑ‚ лицензии Vim на английÑком Ñзыке. + ЛИЦЕÐЗИЯ VIM I) Ðеизменённые копии программы Vim могут раÑпроÑтранÑтьÑÑ Ð±ÐµÐ· Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ @@ -29,15 +34,15 @@ II) Изменённую (или дополненную) верÑию прогр будут раÑпроÑтранÑтьÑÑ Ð½Ð° уÑловиÑÑ… наÑтоÑщей лицензии или более поздней её верÑии. Лица, в данное Ð²Ñ€ÐµÐ¼Ñ ÑвлÑющиеÑÑ Ð¾Ñ‚Ð²ÐµÑ‚Ñтвенными за разработку, указаны в перечне, размещённом по адреÑу: - https://github.com/orgs/vim/people. Ð’ Ñлучае Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтой - информации, актуальные данные будут опубликованы на - ÑоответÑтвующих реÑурÑах (вероÑтнее вÑего по интернетâ€Ð°Ð´Ñ€ÐµÑам - vim.sf.net, www.vim.org и/или comp.editors). Ð’ Ñлучае полной - невозможноÑти уÑтановить контакт Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ñтвенным разработчиком, - обÑзательÑтва по отправке изменений утрачивают Ñилу. ПоÑле - передачи Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¾ получении изменений от ответÑтвенного - разработчика, необходимоÑть в повторной отправке копии изменённой - программы Vim неприменима. + https://github.com/orgs/vim/people. + При изменении Ñтой информации, актуальные данные будут + опубликованы на ÑоответÑтвующих реÑурÑах (вероÑтнее вÑего + по интернетâ€Ð°Ð´Ñ€ÐµÑам vim.sf.net, www.vim.org и/или comp.editors). + Ð’ Ñлучае полной невозможноÑти ÑвÑзатьÑÑ Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ñтвенным + разработчиком, обÑзательÑтва по отправке изменений утрачивают + Ñилу. ПоÑле передачи Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¾ получении изменений + от ответÑтвенного разработчика, необходимоÑть в повторной + отправке копии изменённой программы Vim неприменима. b) ЕÑли лицом получена Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° Vim, раÑпроÑтранÑющаÑÑÑ Ð½Ð° уÑловиÑÑ…, указанных в ч. II) п. 2) пп. а) допуÑкаетÑÑ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐµ её раÑпроÑтранение Ñтим лицом без внеÑÐµÐ½Ð¸Ñ diff --git a/lang/LICENSE.sv.txt b/lang/LICENSE.sv.txt new file mode 100644 index 0000000000..29a34222cd --- /dev/null +++ b/lang/LICENSE.sv.txt @@ -0,0 +1,78 @@ +VIM-LICENS + +I) Det finns inga begränsningar för distribution av oförändrade kopior av Vim förutom + att de mÃ¥ste innehÃ¥lla denna licenstext. Du kan ocksÃ¥ distribuera + oförändrade delar av Vim, likasÃ¥ utan begränsningar förutom att de mÃ¥ste + innehÃ¥lla denna licenstext. Du fÃ¥r ocksÃ¥ inkludera körbara filer + som du har skapat frÃ¥n de oförändrade Vim-källorna, samt dina egna användningsexempel + och Vim-skript. + +II) Det är tillÃ¥tet att distribuera en modifierad (eller utökad) version av Vim, + inklusive körbara filer och/eller källkod, när följande fyra + villkor är uppfyllda: + 1) Denna licenstext mÃ¥ste inkluderas oförändrad. + 2) Den modifierade Vim mÃ¥ste distribueras pÃ¥ ett av följande fem sätt: + a) Om du själv gör ändringar i Vim mÃ¥ste du tydligt beskriva + distributionen hur man kan kontakta dig. När underhÃ¥llaren ber dig + (pÃ¥ nÃ¥got sätt) om en kopia av den modifierade Vim du distribuerat, mÃ¥ste du + mÃ¥ste du göra dina ändringar, inklusive källkoden, tillgängliga för + underhÃ¥llaren utan kostnad. UnderhÃ¥llaren förbehÃ¥ller sig rätten att + inkludera dina ändringar i den officiella versionen av Vim. Vad + underhÃ¥llaren kommer att göra med dina ändringar och under vilken licens de + kommer att distribueras är förhandlingsbart. Om ingen förhandling har ägt rum + gäller denna licens, eller en senare version, även för dina ändringar. + De nuvarande underhÃ¥llarna finns listade här: https://github.com/orgs/vim/people. + Om detta ändras kommer det att meddelas pÃ¥ lämpliga platser (troligen + vim.sf.net, www.vim.org och/eller comp.editors). När det är helt + omöjligt att kontakta underhÃ¥llaren upphör skyldigheten att skicka + dina ändringar upphör. När underhÃ¥llaren har bekräftat att han har + mottagit dina ändringar behöver de inte skickas igen. + b) Om du har fÃ¥tt en modifierad Vim som distribuerats enligt + nämnts under a) fÃ¥r du distribuera den vidare + oförändrat, enligt vad som anges i I). Om du gör ytterligare ändringar gäller + gäller texten under a) för dessa ändringar. + c) TillhandahÃ¥ll alla ändringar, inklusive källkod, med varje kopia av + den modifierade Vim du distribuerar. Detta kan göras i form av en + kontextdiff. Du kan välja vilken licens du vill använda för ny kod som du + lägger till. Ändringarna och deras licens fÃ¥r inte hindra andra frÃ¥n att + göra egna ändringar i den officiella versionen av Vim. + d) När du har en modifierad Vim som innehÃ¥ller ändringar enligt + under c), kan du distribuera den utan källkoden för + ändringarna om följande tre villkor är uppfyllda: + - Licensen som gäller för ändringarna tillÃ¥ter dig att distribuera + ändringarna till Vim-underhÃ¥llaren utan avgift eller begränsningar, och + tillÃ¥ter Vim-underhÃ¥llaren att inkludera ändringarna i den officiella + versionen av Vim utan avgift eller begränsningar. + - Du behÃ¥ller ändringarna i minst tre Ã¥r efter senaste + distribution av motsvarande modifierade Vim. När underhÃ¥llaren + eller nÃ¥gon som du distribuerat den modifierade Vim till ber dig (pÃ¥ + nÃ¥got sätt) om ändringarna inom denna period mÃ¥ste du göra dem + tillgängliga för honom. + - Du beskriver tydligt i distributionen hur man kan kontakta dig. Denna + kontaktinformationen mÃ¥ste vara giltig i minst tre Ã¥r + efter den sista distributionen av motsvarande modifierade Vim, eller sÃ¥ länge + som möjligt. + e) När GNU General Public License (GPL) gäller för ändringarna, + kan du distribuera den modifierade Vim under GNU GPL version 2 eller + nÃ¥gon senare version. + 3) Ett meddelande mÃ¥ste läggas till, Ã¥tminstone i utdata frÃ¥n kommandot ":version" + och i introduktionsskärmen, sÃ¥ att användaren av den modifierade Vim + kan se att den har modifierats. Vid distribution enligt + under 2)e) krävs det endast att meddelandet läggs till i den mÃ¥n detta + inte strider mot den licens som används för ändringarna. + 4) Kontaktinformationen som krävs enligt 2)a) och 2)d) fÃ¥r inte + tas bort eller ändras, förutom att personen själv kan göra + korrigeringar. + +III) Om du distribuerar en modifierad version av Vim uppmuntras du att använda + Vim-licensen för dina ändringar och göra dem tillgängliga för + underhÃ¥llaren, inklusive källkoden. Det bästa sättet att göra detta är + via e-post eller genom att ladda upp filerna till en server och e-posta URL:en. + Om antalet ändringar är litet (t.ex. en modifierad Makefile) räcker det att skicka ett + kontextdiff. E-postadressen som ska användas är + + +IV) Det är inte tillÃ¥tet att ta bort denna licens frÃ¥n distributionen av Vim + källkoden, delar av den eller frÃ¥n en modifierad version. Du fÃ¥r använda denna + licensen för tidigare Vim-utgÃ¥vor istället för den licens som de levererades med + med, om du sÃ¥ önskar. diff --git a/lang/LICENSE.zh_cn.txt b/lang/LICENSE.zh_cn.txt new file mode 100644 index 0000000000..e3eef9a32d --- /dev/null +++ b/lang/LICENSE.zh_cn.txt @@ -0,0 +1,60 @@ +注æ„: 本译文仅供å‚考。若因译文错æ¼å¼•å‘ä»»ä½•é—®é¢˜ï¼Œè¯‘è€…æ¦‚ä¸æ‰¿æ‹…责任。VIM 许å¯è¯çš„ +å®Œæ•´è‹±æ–‡ç‰ˆæœ¬ä¸ºå”¯ä¸€æ³•å¾‹ä¾æ®ã€‚如有任何疑问,以英文原文为准。 + +VIM 许å¯è¯ + +I) å¯ä»¥ä»»æ„å‘布没有修改的 Vim 的拷è´ï¼Œä½†æ˜¯å¿…é¡»ä¿è¯åŒ…嫿œ¬è®¸å¯è¯ã€‚您也å¯ä»¥å‘布 + 未ç»ä¿®æ”¹çš„部分 Vimï¼ŒåŒæ ·ä¹Ÿå¿…须包å«è¿™ä»½è®¸å¯è¯ã€‚å‘布由未ç»ä¿®æ”¹çš„ Vim æºä»£ç  + 所编译出的 Vim 坿‰§è¡Œæ–‡ä»¶ï¼Œå¤–加您自己的应用实例和 Vim 脚本也是å…许的。 + +II) 在满足以下全部四个æ¡ä»¶çš„å‰æä¸‹ï¼Œæ‚¨å¯ä»¥å‘布ç»è¿‡ä¿®æ”¹ (或扩充) çš„ Vim 版本, + åŒ…æ‹¬å¯æ‰§è¡Œæ–‡ä»¶ å’Œ/或 æºä»£ç : + 1) 本许å¯è¯å¿…须包å«åœ¨å†…,并且ä¸èƒ½è¢«ä¿®æ”¹ã€‚ + 2) ç»è¿‡ä¿®æ”¹çš„ Vim å¿…é¡»ä»¥ä¸‹è¿°äº”ç§æ–¹å¼ä¹‹ä¸€å‘布: + a) 如果您本人对 Vim åšäº†æ”¹åŠ¨ï¼Œæ‚¨å¿…é¡»åœ¨å‘布版本里清楚地说明如何与您è”系。 + 当 Vim 的维护者 (以任何方å¼) 呿‚¨ç´¢å–您所å‘布的 Vim æ—¶ï¼Œæ‚¨å¿…é¡»æŠŠæ‰€åš + 的改动包括æºä»£ç æ— å¿åœ°æä¾›å‡ºæ¥ã€‚维护者ä¿ç•™æŠŠè¿™äº›æ”¹åŠ¨åŠ å…¥ Vim æ­£å¼ç‰ˆæœ¬ + çš„æƒåˆ©ã€‚至于维护者怎样处ç†è¿™äº›æ”¹åŠ¨ï¼Œä»¥åŠç”¨ä»€ä¹ˆè®¸å¯è¯å‘布,å¯ä»¥å商。 + 如果没有å商,那么,本许å¯è¯ï¼Œæˆ–è€…å®ƒæ›´æ–°çš„ç‰ˆæœ¬ï¼ŒåŒæ ·é€‚用于您åšå‡ºçš„æ”¹ + 动。Vim 现在的几ä½ç»´æŠ¤è€…å¯è§: + https://github.com/orgs/vim/people + 如果维护者å‘生å˜åŠ¨ï¼Œä¼šåœ¨åˆé€‚的地方 (很å¯èƒ½æ˜¯ vim.sf.netã€www.vim.org + å’Œ/或 comp.editors) 公布,当完全ä¸èƒ½ä¸Žç»´æŠ¤è€…è”系时,å‘é€å˜æ›´çš„约定自 + 动终止。一旦维护者确认收到了您所åšçš„修改,您就ä¸å¿…冿¬¡å‘é€äº†ã€‚ + + b) 如果您得到的是一个修改过的 Vim,并且它是在æ¡ä»¶ a) 下å‘å¸ƒçš„ï¼Œé‚£ä¹ˆæ‚¨å¯ + 以ä¸åŠ æ”¹åŠ¨åœ°åœ¨æ¡ä»¶ I) 下å‘布它;如果您åˆåšäº†é¢å¤–çš„æ”¹åŠ¨ï¼Œåˆ™è¿™äº›æ”¹åŠ¨å— + 到 a) æ¬¾æ¡æ–‡çš„约æŸã€‚ + + c) 在您å‘布的ç»è¿‡ä¿®æ”¹çš„ Vim çš„æ¯ä¸€ä»½æ‹·è´é‡Œï¼Œæä¾›æ‰€æœ‰çš„å˜æ›´éƒ¨åˆ†ï¼ŒåŒ…括æºä»£ + ç ã€‚æä¾›çš„å½¢å¼å¯ä»¥é‡‡ç”¨ä¸Šä¸‹æ–‡é£Žæ ¼çš„差异比较记录 (context diff)。您å¯ä»¥ + 为添加的新代ç é€‰æ‹©è®¸å¯è¯ï¼Œä½†æ˜¯è¿™äº›æ›´æ”¹å’Œä¸ºå…¶é€‰æ‹©çš„许å¯è¯ä¸èƒ½é™åˆ¶ä»–人 + 对 Vim æ­£å¼ç‰ˆæœ¬ä½œå‡ºè‡ªå·±çš„æ”¹åŠ¨ã€‚ + + d) 在满足以下全部三个æ¡ä»¶çš„å‰æä¸‹ï¼Œæ‚¨å¯ä»¥ç»§ç»­å‘布带有æ¡ä»¶ c) 所æåŠä¹‹å˜ + æ›´çš„ç»è¿‡ä¿®æ”¹çš„ Vim,而ä¸å¿…在å‘布时æä¾›æ›´æ”¹éƒ¨åˆ†çš„æºä»£ç : + - è¿™äº›å˜æ›´æ‰€é™„带的许å¯è¯å…è®¸æ‚¨æŠŠè¿™äº›å˜æ›´æ— å¿åœ°å¹¶ä¸”没有任何é™åˆ¶åœ°æä¾› + ç»™ Vim 的维护者,而且å…许 Vim 的维护者无å¿åœ°å¹¶ä¸”没有任何é™åˆ¶åœ°æŠŠè¿™ + 些更改加入到 Vim 的正å¼ç‰ˆæœ¬ä¸­ã€‚ + - 从您最åŽä¸€æ¬¡å‘布更改的 Vim 之日起,您è¦ä¿å­˜è¿™äº›æ”¹åŠ¨è‡³å°‘ä¸‰å¹´æ—¶é—´ã€‚åœ¨ + 这期间,维护者或别人 (以任何方å¼) 呿‚¨è¦æ±‚æä¾›è¿™äº›å˜æ›´æ—¶ï¼Œæ‚¨å¿…é¡»æ + 供给他。 + - 您è¦åœ¨å‘布版本中清楚地说明如何与您è”系,这个è”系方å¼å¿…é¡»ä¿è¯è‡ªæœ€åŽ + 一次å‘布相应的ç»è¿‡ä¿®æ”¹çš„ Vim 之日起至少三年有效,或尽å¯èƒ½é•¿ã€‚ + e) å½“è¿™äº›å˜æ›´ä»¥ GPL (GNU General Public License,GNU 通用公共许å¯è¯) å‘ + 布时,您å¯ä»¥åœ¨ GPL 版本 2,或更高版本的 GPL 下å‘布修改过的 Vim。 + 3) å¿…é¡»æ·»åŠ ä¸€æ¡æ”¹åŠ¨çš„ä¿¡æ¯ã€‚è‡³å°‘è¦æ”¾åœ¨ "version" 命令的输出和å¯åŠ¨ç”»é¢é‡Œï¼Œå¥½ + 让用户知é“自己用的是一个修改过的 Vim。当以 2)e) æ¡ä»¶å‘å¸ƒæ—¶ï¼Œåªæœ‰ä¸ä¸Žå˜ + 更适用的许å¯è¯å†²çªï¼Œè¿™ä¸ªä¿¡æ¯çš„æ·»åŠ æ‰æ˜¯å¿…è¦çš„。 + 4) 在 2)a) å’Œ 2)d) æ¡ä»¶é‡Œè¦æ±‚çš„è”系方å¼ä¸èƒ½éšä¾¿æ›´æ”¹æˆ–åˆ é™¤ï¼Œé™¤éžæ˜¯ä½œè€…自己 + 作出的更正。 + +III) 如果您å‘布一个更改过的 Vimï¼Œå¼ºçƒˆå»ºè®®æ‚¨å¯¹å˜æ›´éƒ¨åˆ†ä½¿ç”¨ Vim 的许å¯è¯ï¼Œå¹¶ä¸”对 + 维护者æä¾›å˜æ›´éƒ¨åˆ†å¹¶å¼€æ”¾æºä»£ç ã€‚æœ€å¥½çš„æ–¹å¼æ˜¯é€šè¿‡ç”µå­é‚®ä»¶æˆ–è€…æŠŠæ–‡ä»¶æ”¾åˆ°æœ + 务器上,通过电å­é‚®ä»¶ä¼ é€ URL。如果åªä¿®æ”¹äº†å¾ˆå°‘的部分 (ä¾‹å¦‚ï¼Œåªæ˜¯ä¸€ä¸ªä¿®æ”¹ + 过的 Makefile),那么传é€ä¸€ä¸ªä¸Šä¸‹æ–‡é£Žæ ¼çš„差异比较记录 (context diff) å°±å¯ + 以了。电å­é‚®ä»¶çš„åœ°å€æ˜¯ + +IV) ä¸å…许从 Vim çš„æºä»£ç çš„å‘行版本或其中部分的æºä»£ç é‡Œåˆ é™¤æœ¬è®¸å¯è¯ï¼Œå³ä½¿æ¥è‡ª + 更改过的版本也是如此。您å¯èƒ½æƒ³ç”¨è¿™ä»½è®¸å¯è¯ä»£æ›¿ä»¥å‰ç‰ˆæœ¬çš„ Vim 里的许å¯è¯ï¼Œ + è¿™å¯ä»¥ç”±æ‚¨è‡ªè¡Œå†³å®šã€‚ diff --git a/lang/README.ja.txt b/lang/README.ja.txt new file mode 100644 index 0000000000..793282f804 --- /dev/null +++ b/lang/README.ja.txt @@ -0,0 +1,146 @@ +Vim ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 9.2 用 README.txt: Vi IMproved + + +VIM ã¨ã¯ï¼Ÿ + +Vim ã¯ã€å¤ãã‹ã‚‰è¦ªã—ã¾ã‚Œã¦ã㟠UNIX エディタ Vi ã‚’å¤§å¹…ã«æ”¹è‰¯ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ +ã™ã€‚多ãã®æ–°æ©Ÿèƒ½ãŒè¿½åŠ ã•れã¦ã„ã¾ã™ã€‚多段階ã®ã‚¢ãƒ³ãƒ‰ã‚¥ã€æ§‹æ–‡ãƒã‚¤ãƒ©ã‚¤ãƒˆã€ã‚³ãƒžãƒ³ãƒ‰ +ライン履歴ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ˜ãƒ«ãƒ—ã€ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯ã€ãƒ•ァイルå補完ã€ãƒ–ロックæ“作ã€ã‚¹ +クリプト言語ãªã©ã§ã™ã€‚ã¾ãŸã€ã‚°ãƒ©ãƒ•ィカルユーザーインターフェース (GUI) も利用 +å¯èƒ½ã§ã™ã€‚Vi ã¨ã®äº’æ›æ€§ã‚‚ç¶­æŒã•れã¦ã„ã‚‹ãŸã‚ã€Vi ã‚’ä½¿ã„æ…£ã‚Œã¦ã„るユーザーã¯ã™ã +ã«é¦´æŸ“ã‚ã‚‹ã§ã—ょã†ã€‚Vi ã¨ã®é•ã„ã«ã¤ã„ã¦ã¯ã€"runtime/doc/vi_diff.txt" ã‚’å‚ç…§ã— +ã¦ãã ã•ã„。 + +ã“ã®ã‚¨ãƒ‡ã‚£ã‚¿ã¯ã€ãƒ—ログラムやãã®ä»–ã®ãƒ—レーンテキストファイルã®ç·¨é›†ã«éžå¸¸ã«ä¾¿åˆ© +ã§ã™ã€‚ã™ã¹ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ã¯é€šå¸¸ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰æ–‡å­—ã§å…¥åŠ›ã§ãã‚‹ãŸã‚ã€10æœ¬ã®æŒ‡ã§ã‚¿ã‚¤ãƒ” +ングã§ãるユーザーã¯éžå¸¸ã«é«˜é€Ÿã«ä½œæ¥­ã§ãã¾ã™ã€‚ã•らã«ã€ãƒ•ァンクションキーをコマ +ンドã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã€ãƒžã‚¦ã‚¹ã‚‚使用ã§ãã¾ã™ã€‚ + +Vim ã¯ã€æœ€å°é™ã®æ©Ÿèƒ½ã‚»ãƒƒãƒˆ (通常㯠vim.tiny ã¨å‘¼ã°ã‚Œã‚‹) ã§ã‚³ãƒ³ãƒ‘イルã—ãŸå ´åˆã€ +(ã»ã¼) POSIX 互æ›ã® vi 実装をæä¾›ã™ã‚‹ã“ã¨ã‚’目指ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€å¤šãã® +Linux ディストリビューションã§ãƒ‡ãƒ•ォルト㮠vi エディタã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚ + +Vim ã¯ã€MS-Windows (7ã€8ã€10ã€11)ã€macOSã€Haikuã€VMSã€ãã—ã¦ã»ã¼ã™ã¹ã¦ã® UNIX +ç³» OS ã§å‹•作ã—ã¾ã™ã€‚ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ã¸ã®ç§»æ¤ã¯ãれã»ã©é›£ã—ããªã„ã¯ãšã§ã™ã€‚ +å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Vim ã¯ã€MS-DOSã€MS-Windows 95/98/Me/NT/2000/XP/Vistaã€Amiga +DOSã€Atari MiNTã€BeOSã€RISC OSã€OS/2 ã§å‹•作ã—ã¦ã„ã¾ã—ãŸãŒã€ã“れらã¯ç¾åœ¨ãƒ¡ãƒ³ãƒ† +ナンスã•れã¦ã„ã¾ã›ã‚“。 + + +é…布 + +多ãã®å ´åˆã€ãŠå¥½ã¿ã®ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ã‚’使用ã—㦠Vim をインストールã§ãã¾ã™ã€‚ +Mac 㨠Linux ã«ã¯ã€Vim ã®è»½é‡ç‰ˆãŒãƒ—リインストールã•れã¦ã„ã¾ã™ãŒã€ã‚ˆã‚Šå¤šãã®æ©Ÿ +能ãŒå¿…è¦ãªå ´åˆã¯ã€åˆ¥é€” Vim をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ + +Unixã€PCã€Amigaã€ãã®ä»–ã„ãã¤ã‹ã®ã‚·ã‚¹ãƒ†ãƒ å‘ã‘ã«ã€ãれãžã‚Œåˆ¥ã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ュー +ションãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ +ã“ã® README.txt ファイルã¯ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã«åŒæ¢±ã•れã¦ã„ã¾ã™ã€‚ã“れã«ã¯ã€ +ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€æ§‹æ–‡ãƒ•ァイルã€ãŠã‚ˆã³ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã§ä½¿ç”¨ã•れるãã®ä»–ã®ãƒ•ァイルãŒå«ã¾ +れã¦ã„ã¾ã™ã€‚Vim を実行ã™ã‚‹ã«ã¯ã€ãƒã‚¤ãƒŠãƒªã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¾ãŸã¯ã‚½ãƒ¼ã‚¹ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã®ã„ãš +れã‹ã‚’入手ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ +ã©ã¡ã‚‰ãŒå¿…è¦ã‹ã¯ã€å®Ÿè¡Œã—ãŸã„システムã¨ã€è‡ªåˆ†ã§ã‚³ãƒ³ãƒ‘イルã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ +ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚ +ç¾åœ¨åˆ©ç”¨å¯èƒ½ãªãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã®æ¦‚è¦ã«ã¤ã„ã¦ã¯ã€ +"https://www.vim.org/download.php" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + +最新版㮠Vim を入手ã§ãる一般的ãªå ´æ‰€: +* GitHub ã® Git リãƒã‚¸ãƒˆãƒªã‚’確èªã—ã¦ãã ã•ã„: https://github.com/vim/vim +* ソースコードをアーカイブã¨ã—ã¦å…¥æ‰‹ã§ãã¾ã™: https://github.com/vim/vim/tags +* vim-win32-installer リãƒã‚¸ãƒˆãƒªã‹ã‚‰ Windows 実行ファイルを入手ã§ãã¾ã™: + https://github.com/vim/vim-win32-installer/releases + + +コンパイル + +ãƒã‚¤ãƒŠãƒªç‰ˆã‚’入手ã—ãŸå ´åˆã¯ã€Vim をコンパイルã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。ソース版を入 +手ã—ãŸå ´åˆã¯ã€Vim ã®ã‚³ãƒ³ãƒ‘イルã«å¿…è¦ãªã™ã¹ã¦ã®ãƒ•ァイル㌠"src" ディレクトリ㫠+ã‚りã¾ã™ã€‚手順㯠src/INSTALL ファイルをå‚ç…§ã—ã¦ãã ã•ã„。 + + +インストール + +システム固有ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ‰‹é †ã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®ãƒ•ァイルをå‚ç…§ã—ã¦ã +ã ã•ã„。READMEdir ディレクトリ(リãƒã‚¸ãƒˆãƒªå†…)ã¾ãŸã¯æœ€ä¸Šä½ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªï¼ˆã‚¢ãƒ¼ã‚« +イブを解å‡ã—ãŸå ´åˆï¼‰ã«ã€ä»¥ä¸‹ã®ãƒ•ァイルãŒã‚りã¾ã™ã€‚ + +README_ami.txt Amiga +README_unix.txt Unix +README_dos.txt MS-DOS ãŠã‚ˆã³ MS-Windows +README_mac.txt Macintosh +README_haiku.txt Haiku +README_vms.txt VMS + +使用ã—ã¦ã„るディストリビューションã«ã‚ˆã£ã¦ã¯ã€ä»–ã«ã‚‚ README_*.txt ファイルãŒå­˜ +在ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ + + +ドキュメント + +Vim ãƒãƒ¥ãƒ¼ã‚¿ãƒ¼ã¯ã€åˆå¿ƒè€…å‘ã‘ã® 1 時間ã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã‚³ãƒ¼ã‚¹ã§ã™ã€‚多ãã®å ´åˆã€ +"vimtutor" ã§èµ·å‹•ã§ãã¾ã™ã€‚詳ã—ãã¯ã€":help tutor" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + +Vim ã§ã¯ã€":help" を使用ã™ã‚‹ã®ãŒæœ€é©ã§ã™ã€‚実行ファイルãŒãªã„å ´åˆã¯ã€ +"runtime/doc/help.txt" ã‚’ãŠèª­ã¿ãã ã•ã„。他ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ァイルã¸ã®ãƒªãƒ³ã‚¯ãŒ +å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ +ユーザーマニュアルã¯ã¾ã‚‹ã§æœ¬ã®ã‚ˆã†ã«èª­ã¿ã‚„ã™ãã€Vim ã®ä½¿ã„方を学ã¶ã®ã«ãŠå‹§ã‚ã§ +ã™ã€‚":help user-manual" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + + +複製・é…布æ¡ä»¶ + +Vim ã¯ãƒãƒ£ãƒªãƒ†ã‚£ã‚¦ã‚§ã‚¢ã§ã™ã€‚自由ã«åˆ©ç”¨ãƒ»ã‚³ãƒ”ーã§ãã¾ã™ãŒã€ã‚¦ã‚¬ãƒ³ãƒ€ã®å­¤å…支æ´ã® +ãŸã‚ã®å¯„付ã«ã”å”力ã„ãŸã ã‘れã°å¹¸ã„ã§ã™ã€‚詳細ã¯ã€"runtime/doc/uganda.txt" ファ +イルをã”覧ãã ã•ã„(Vim 内㧠":help uganda" ã¨å…¥åŠ›ã—ã¦ãã ã•ã„)。 + +ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®æ¦‚è¦: Vim ã®æœªæ”¹å¤‰ã‚³ãƒ”ーã®ä½¿ç”¨ãƒ»é…布ã«åˆ¶é™ã¯ã‚りã¾ã›ã‚“。Vim ã®ä¸€éƒ¨ +ã‚’é…布ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ãŒã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ–‡ã‚’å¿…ãšå«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚改変版ã«ã¯ +ã„ãã¤ã‹ã®åˆ¶é™ãŒã‚りã¾ã™ã€‚ライセンス㯠GPL 互æ›ã§ã™ã€‚GPL ライブラリを使用ã—㦠+Vim をコンパイルã—ã€é…布ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + + +スãƒãƒ³ã‚µãƒ¼ã‚·ãƒƒãƒ— + +ãƒã‚°ä¿®æ­£ã‚„新機能ã®è¿½åŠ ã«ã¯ã€å¤šãã®æ™‚é–“ã¨åŠ´åŠ›ãŒå¿…è¦ã§ã™ã€‚Vim ã®é–‹ç™ºã¸ã®æ„Ÿè¬ã®æ°— +æŒã¡ã‚’表ã—ã€é–‹ç™ºè€…ã®ãƒ¢ãƒãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã‚’高ã‚ã‚‹ãŸã‚ã«ã€ãœã²ã”寄付をãŠé¡˜ã„ã„ãŸã—ã¾ +ã™ã€‚ + +ã”寄付ã„ãŸã ã„ãŸè³‡é‡‘ã¯ã€ä¸»ã«ã‚¦ã‚¬ãƒ³ãƒ€ã®å­ã©ã‚‚ãŸã¡ã®æ”¯æ´ã«æ´»ç”¨ã•ã›ã¦ã„ãŸã ãã¾ +ã™ã€‚詳細㯠"runtime/doc/uganda.txt" ã‚’ã”覧ãã ã•ã„ã€‚åŒæ™‚ã«ã€ã”寄付ã¯é–‹ç™ºãƒãƒ¼ãƒ  +ã® Vim 開発ã¸ã®æ„欲を高ã‚ã‚‹ã“ã¨ã«ã‚‚繋ãŒã‚Šã¾ã™ã€‚ + +スãƒãƒ³ã‚µãƒ¼ã‚·ãƒƒãƒ—ã«é–¢ã™ã‚‹æœ€æ–°æƒ…å ±ã¯ã€Vim ウェブサイトをã”覧ãã ã•ã„。 + https://www.vim.org/sponsor/ + + +貢献ã«ã¤ã„㦠+ +Vim ã®æ”¹å–„ã«ã”å”力ã„ãŸã ã‘ã‚‹æ–¹ã¯ã€CONTRIBUTING.md ファイルをã”覧ãã ã•ã„。 + + +情報 + +macOS ã‚’ã”利用ã®å ´åˆã¯ã€MacVim ã‚’ã”利用ã„ãŸã ã‘ã¾ã™: https://macvim.org + +Vim ã«é–¢ã™ã‚‹æœ€æ–°æƒ…å ±ã¯ã€Vim ã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã‚’ã”覧ãã ã•ã„: + https://www.vim.org/ + +å•題ãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€Vim ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¾ãŸã¯ãƒ’ントをã”覧ãã ã•ã„: + https://www.vim.org/docs.php + https://vim.fandom.com/wiki/Vim_Tips_Wiki + +ãれã§ã‚‚å•題ãŒè§£æ±ºã—ãªã„å ´åˆã€ã¾ãŸã¯ãã®ä»–ã®ã”質å•ãŒã‚ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ãƒ¡ãƒ¼ãƒªãƒ³ +グリストをã”利用ãã ã•ã„。Vim ユーザーや開発者ã¨è­°è«–ã§ãã¾ã™: + https://www.vim.org/maillist.php + +ãれã§ã‚‚解決ã—ãªã„å ´åˆã¯ã€vim-dev メーリングリストã«ç›´æŽ¥ãƒã‚°ã‚’報告ã—ã¦ãã ã•ã„: + + + +主ãªè‘—者 + +Vim ã®å¤§éƒ¨åˆ†ã¯ã€Bram Moolenaar ã«ã‚ˆã£ã¦ä½œæˆã•れã¾ã—ãŸã€‚ +":help Bram-Moolenaar" + +ãã®ä»–ã®ã”æ„見ã€ãƒ‘ッãƒã€ã”ææ¡ˆã¯ã€vim-devメーリングリストã¾ã§ãŠé€ã‚Šãã ã•ã„: + diff --git a/lang/README.ru.txt b/lang/README.ru.txt index 5a58e1ef87..c794e4db46 100644 --- a/lang/README.ru.txt +++ b/lang/README.ru.txt @@ -1,4 +1,4 @@ -README.ru.txt Ð´Ð»Ñ Ð²ÐµÑ€Ñии 9.1 программы Vim — Vi IMproved. +Краткое опиÑание Ð´Ð»Ñ Ð²ÐµÑ€Ñии 9.2 программы Vim — Vi IMproved. ЧТО ТÐКОЕ РЕДÐКТОР VIM? @@ -10,8 +10,8 @@ README.ru.txt Ð´Ð»Ñ Ð²ÐµÑ€Ñии 9.1 программы Vim — Vi IMproved. наименований файлов и команд, операции Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ блоками текÑта, вÑтроенный Ñзык Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ñ‚. д. Также доÑтупен графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (GUI). И при Ñтом ÑохранÑетÑÑ ÑовмеÑтимоÑть Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi, -и те, у кого Vi «в крови», будут чувÑтвовать ÑÐµÐ±Ñ ÐºÐ°Ðº дома. ПодробноÑти о -различиÑÑ… Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi Ñм. в файле "runtime/doc/vi_diff.txt". +и те, у кого Vi «в крови», будут чувÑтвовать ÑÐµÐ±Ñ ÐºÐ°Ðº дома. ПодробноÑти +о различиÑÑ… Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi Ñм. в файле "runtime/doc/vi_diff.txt". Этот редактор очень удобен Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð¸Ñходным кодом программ, а также разного рода других текÑтовых файлов. Ð’Ñе команды вводÑÑ‚ÑÑ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ обычных @@ -25,9 +25,9 @@ README.ru.txt Ð´Ð»Ñ Ð²ÐµÑ€Ñии 9.1 программы Vim — Vi IMproved. функционала (обычно называемый vim.tiny). Ð”Ð°Ð½Ð½Ð°Ñ Ñборка чаще вÑего иÑпользуетÑÑ Ð²Ð¾ многих диÑтрибутивах Linux в качеÑтве предуÑтановленного редактора vi. -Редактор Vim работает в ОС MS Windows (7, 8, 10, 11), macOS, Haiku, VMS и -практичеÑки во вÑех UNIX-подобных ÑиÑтемах. Ð Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ Ð½Ð° другие платформы не -должен предÑтавлÑть оÑобой ÑложноÑти. +Редактор Vim работает в ОС MS Windows (7, 8, 10, 11), macOS, Haiku, VMS +и практичеÑки во вÑех UNIX-подобных ÑиÑтемах. Ð Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ Ð½Ð° другие платформы +не должен предÑтавлÑть оÑобой ÑложноÑти. Предыдущие верÑии редактора Vim работают в операционных ÑиÑтемах OS/2, MS-DOS, MS Windows 95/98/Me/NT/2000/XP/Vista, AmigaDOS, Atari MiNT, BeOS и RISC OS. Ðо поддержка Ñтих верÑий больше не оÑущеÑтвлÑетÑÑ. @@ -45,11 +45,11 @@ MS Windows 95/98/Me/NT/2000/XP/Vista, AmigaDOS, Atari MiNT, BeOS и RISC OS. программы. Этот архив включает в ÑÐµÐ±Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸ÑŽ, файлы подÑветки ÑинтакÑиÑа и другие файлы, которые иÑпользуютÑÑ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹. Чтобы запуÑтить программу Vim, вы должны получить либо архив Ñ Ð¸ÑполнÑемыми файлами, -либо архив Ñ Ð¸Ñходным кодом. Какой из них вам нужен, завиÑит от того, на какой -ÑиÑтеме вы хотите запуÑтить редактор Vim, и еÑть ли Ð´Ð»Ñ Ñтой ÑиÑтемы +либо архив Ñ Ð¸Ñходным кодом. Какой из них вам нужен, завиÑит от того, +на какой ÑиÑтеме вы хотите запуÑтить редактор Vim, и еÑть ли Ð´Ð»Ñ Ñтой ÑиÑтемы иÑполнÑемые файлы или вы должны компилировать программу ÑамоÑтоÑтельно. -Чтобы узнать о доÑтупных в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ñ… программы, поÑмотрите на -вебâ€Ñтранице https://www.vim.org/download.php. +Чтобы узнать о доÑтупных в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ñ… программы, поÑмотрите +на вебâ€Ñтранице https://www.vim.org/download.php. ÐеÑколько полезных меÑÑ‚, где можно получить поÑледнюю верÑию редактора Vim: * ПоÑмотрите в git-хранилище на GitHub: https://github.com/vim/vim. @@ -61,8 +61,8 @@ https://github.com/vim/vim-win32-installer/releases. КОМПИЛЯЦИЯ РЕДÐКТОРРVim ЕÑли Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ ÑиÑтемы уже еÑть готовые иÑполнÑемые файлы, вам не нужно Ñамому -компилировать редактор Vim. ЕÑли вы Ñкачали архив Ñ Ð¸Ñходным кодом, то вÑÑ‘ -необходимое Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции программы Vim находитÑÑ Ð² каталоге "src". +компилировать редактор Vim. ЕÑли вы Ñкачали архив Ñ Ð¸Ñходным кодом, +то вÑÑ‘ необходимое Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции программы Vim находитÑÑ Ð² каталоге "src". ИнÑтрукции Ñмотрите в файле src/INSTALL. @@ -85,12 +85,12 @@ README_vms.txt VMS ДОКУМЕÐТÐЦИЯ ПО РЕДÐКТОРУ Vim -Учебник Vim — Ñто чаÑовой практичеÑкий ÐºÑƒÑ€Ñ Ð´Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ…. Как правило, Ð´Ð»Ñ -работы Ñ Ð½Ð¸Ð¼ нужно набрать команду "vimtutor". Чтобы получить дополнительную -информацию, Ñмотрите раздел документации ":help tutor". +Учебник Vim — Ñто чаÑовой практичеÑкий ÐºÑƒÑ€Ñ Ð´Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ…. Как правило, +Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¸Ð¼ нужно набрать команду "vimtutor". Чтобы получить +дополнительную информацию, Ñмотрите раздел документации ":help tutor". -Лучше вÑего воÑпользоватьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ":help" в редакторе Vim. ЕÑли у Ð²Ð°Ñ ÐµÑ‰Ñ‘ -нет иÑполнÑемого файла программы, прочитайте файл "runtime/doc/help.txt". +Лучше вÑего воÑпользоватьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ":help" в редакторе Vim. ЕÑли у Ð²Ð°Ñ +ещё нет иÑполнÑемого файла программы, прочитайте файл "runtime/doc/help.txt". Ð’ нём ÑодержатÑÑ Ð¾Ñ‚Ñылки на другие полезные файлы документации. РуководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ читать как книгу, и оно рекомендуетÑÑ Ð´Ð»Ñ Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ðµ Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vim. Смотрите ":help user-manual". @@ -100,7 +100,7 @@ README_vms.txt VMS Редактор Vim ÑвлÑетÑÑ Ð±Ð»Ð°Ð³Ð¾Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ программным обеÑпечением. ИÑпользование и копирование программы Vim не ограничено, однако рекомендуетÑÑ -Ñделать добровольное пожертвование Ð´Ð»Ñ Ð½ÑƒÐ¶Ð´Ð°ÑŽÑ‰Ð¸Ñ…ÑÑ Ð´ÐµÑ‚ÐµÐ¹ в Уганде. Чтобы узнать +Ñделать добровольное пожертвование Ð´Ð»Ñ Ð½ÑƒÐ¶Ð´Ð°ÑŽÑ‰Ð¸Ñ…ÑÑ Ð´ÐµÑ‚ÐµÐ¹ в Уганде. Чтобы узнать подробноÑти, прочитайте, пожалуйÑта, файл "runtime/doc/uganda.txt" (введите команду ":help uganda" в редакторе Vim). @@ -125,8 +125,8 @@ README_vms.txt VMS будет ÑпоÑобÑтвовать повышению заинтереÑованноÑти команды разработчиков в продолжении работы над редактором Vim! -Ð¡Ð°Ð¼Ð°Ñ ÑÐ²ÐµÐ¶Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± оказании финанÑовой поддержки публикуетÑÑ Ð½Ð° -веб-Ñайте программы Vim: +Ð¡Ð°Ð¼Ð°Ñ ÑÐ²ÐµÐ¶Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± оказании финанÑовой поддержки публикуетÑÑ +на веб-Ñайте программы Vim: https://www.vim.org/sponsor/ @@ -137,13 +137,13 @@ README_vms.txt VMS ДОПОЛÐИТЕЛЬÐÐЯ ИÐФОРМÐЦИЯ -Ð”Ð»Ñ ÑиÑтеме macOS вы може иÑпользовать MacVim: https://macvim.org +Ð”Ð»Ñ ÑиÑтеме macOS вы можете иÑпользовать MacVim: https://macvim.org ПоÑледние новоÑти о редакторе Vim можно найти на его домашней Ñтранице: https://www.vim.org/ -ЕÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ вопроÑÑ‹, поÑмотрите полезные Ñоветы или документацию по -редактору Vim: +ЕÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ вопроÑÑ‹, поÑмотрите полезные Ñоветы или документацию +по редактору Vim: https://www.vim.org/docs.php https://vim.fandom.com/wiki/Vim_Tips_Wiki diff --git a/lang/README.sv.txt b/lang/README.sv.txt new file mode 100644 index 0000000000..43d70648ae --- /dev/null +++ b/lang/README.sv.txt @@ -0,0 +1,139 @@ +README.txt för version 9.1 av Vim: Vi IMproved. + + +VAD ÄR VIM? + +Vim är en kraftigt förbättrad version av den gamla goda UNIX-editorn Vi. MÃ¥nga nya +funktioner har lagts till: Ã¥ngra pÃ¥ flera nivÃ¥er, syntaxmarkering, kommandoradshistorik +historik, onlinehjälp, stavningskontroll, filnamns komplettering, blockoperationer, +skriptsprÃ¥k etc. Det finns ocksÃ¥ ett grafiskt användargränssnitt (GUI) tillgängligt. +Vi-kompatibiliteten bibehÃ¥lls dock, sÃ¥ de som har Vi "i fingrarna" kommer +känna sig som hemma. Se "runtime/doc/vi_diff.txt" för skillnader jämfört med Vi. + +Denna editor är mycket användbar för att redigera program och andra vanliga textfiler. +Alla kommandon ges med vanliga tangentbordstecken, sÃ¥ de som kan skriva +med tio fingrar kan arbeta mycket snabbt. Dessutom kan funktionsknapparna +mappas till kommandon av användaren, och musen kan användas. + +Vim syftar ocksÃ¥ till att tillhandahÃ¥lla en (mestadels) POSIX-kompatibel vi-implementering när +kompileras med en minimal uppsättning funktioner (vanligtvis kallad vim.tiny), som används +av mÃ¥nga Linux-distributioner som standardvi-redigerare. + +Vim körs under MS-Windows (7, 8, 10, 11), macOS, Haiku, VMS och nästan alla +varianter av UNIX. Det bör inte vara särskilt svÃ¥rt att porta till andra system. +Äldre versioner av Vim körs pÃ¥ MS-DOS, MS-Windows 95/98/Me/NT/2000/XP/Vista, +Amiga DOS, Atari MiNT, BeOS, RISC OS och OS/2. Dessa underhÃ¥lls inte längre. + + +DISTRIBUTION + +Du kan ofta använda din favoritpakethanterare för att installera Vim. PÃ¥ Mac och +Linux är en liten version av Vim förinstallerad, men du behöver ändÃ¥ installera Vim +om du vill ha fler funktioner. + +Det finns separata distributioner för Unix, PC, Amiga och vissa andra system. +Denna README.txt-fil medföljer runtime-arkivet. Den innehÃ¥ller +dokumentation, syntaxfiler och andra filer som används vid körning. För att köra +Vim mÃ¥ste du skaffa antingen ett av binärarkiven eller ett källarkiv. +Vilket du behöver beror pÃ¥ vilket system du vill köra det pÃ¥ och om du +vill eller mÃ¥ste kompilera det själv. Se "https://www.vim.org/download.php" för +en översikt över de distributioner som för närvarande finns tillgängliga. + +NÃ¥gra populära ställen att hämta den senaste versionen av Vim: +* Kolla in git-arkivet frÃ¥n github: https://github.com/vim/vim. +* Hämta källkoden som ett arkiv: https://github.com/vim/vim/tags. +* Hämta en Windows-körbar fil frÃ¥n vim-win32-installer-arkivet: + https://github.com/vim/vim-win32-installer/releases. + + +KOMPILERING + +Om du har skaffat en binär distribution behöver du inte kompilera Vim. Om du +har skaffat en källkodsdistribution finns allt du behöver för att kompilera Vim i +katalogen "src". Se src/INSTALL för instruktioner. + + +INSTALLATION + +Se nÃ¥gon av dessa filer för systemspecifika instruktioner. Antingen i +READMEdir-katalogen (i arkivet) eller i toppkatalogen (om du packar upp en +arkiv): + +README_ami.txt Amiga +README_unix.txt Unix +README_dos.txt MS-DOS och MS-Windows +README_mac.txt Macintosh +README_haiku.txt Haiku +README_vms.txt VMS + +Det finns andra README_*.txt-filer, beroende pÃ¥ vilken distribution du använde. + + +DOKUMENTATION + +Vim-tutorn är en timmes lÃ¥ng utbildningskurs för nybörjare. Ofta kan den +startas som "vimtutor". Se ":help tutor" för mer information. + +Det bästa är att använda ":help" i Vim. Om du ännu inte har en körbar fil, läs +"runtime/doc/help.txt". Den innehÃ¥ller hänvisningar till andra dokumentationsfiler. +Användarhandboken läses som en bok och rekommenderas för att lära sig använda Vim. Se +":help user-manual". + + +KOPIERING + +Vim är Charityware. Du kan använda och kopiera det sÃ¥ mycket du vill, men du +uppmuntras att göra en donation för att hjälpa föräldralösa barn i Uganda. Läs filen +"runtime/doc/uganda.txt" för mer information (skriv ":help uganda" i Vim). + +Sammanfattning av licensen: Det finns inga begränsningar för användning eller distribution av en +oförändrad kopia av Vim. Delar av Vim fÃ¥r ocksÃ¥ distribueras, men licenstexten +texten mÃ¥ste alltid inkluderas. För modifierade versioner gäller nÃ¥gra begränsningar. +Licensen är GPL-kompatibel, du kan kompilera Vim med GPL-bibliotek och +distribuera det. + + +SPONSRING + +Att fixa buggar och lägga till nya funktioner tar mycket tid och ansträngning. För att visa +din uppskattning för arbetet och motivera utvecklarna att fortsätta arbeta med +Vim, skicka gärna en donation. + +Pengarna du donerar kommer huvudsakligen att användas för att hjälpa barn i Uganda. Se +"runtime/doc/uganda.txt". Men samtidigt ökar donationerna +utvecklingsteamets motivation att fortsätta arbeta med Vim! + +För den senaste informationen om sponsring, se Vims webbplats: + https://www.vim.org/sponsor/ + + +BIDRA + +Om du vill hjälpa till att förbättra Vim, se filen CONTRIBUTING.md. + + +INFORMATION + +Om du använder macOS kan du använda MacVim: https://macvim.org + +De senaste nyheterna om Vim finns pÃ¥ Vims hemsida: + https://www.vim.org/ + +Om du har problem, ta en titt pÃ¥ Vims dokumentation eller tips: + https://www.vim.org/docs.php + https://vim.fandom.com/wiki/Vim_Tips_Wiki + +Om du fortfarande har problem eller andra frÃ¥gor, använd nÃ¥gon av mailinglistorna +för att diskutera dem med Vim-användare och utvecklare: + https://www.vim.org/maillist.php + +Om inget annat fungerar, rapportera buggar direkt till vim-dev-maillistan: + + + +HUVUDFÖRFATTARE + +Det mesta av Vim har skapats av Bram Moolenaar , ":help Bram-Moolenaar" + +Skicka övriga kommentarer, patchar, blommor och förslag till vim-dev +: diff --git a/lang/README.zh_cn.txt b/lang/README.zh_cn.txt new file mode 100644 index 0000000000..94e8d8dd3b --- /dev/null +++ b/lang/README.zh_cn.txt @@ -0,0 +1,122 @@ +Vim: Vi IMproved 9.1 版本的 README.txt 文件 + + +什 么 是 VIM ? + +Vim 是ç»å…¸ UNIX 编辑器 Vi 的一个æžå¤§æ”¹è¿›ç‰ˆæœ¬ã€‚它新增了许多功能:多级撤销ã€è¯­æ³•高 +亮ã€å‘½ä»¤è¡Œåކå²ã€åœ¨çº¿å¸®åŠ©ã€æ‹¼å†™æ£€æŸ¥ã€æ–‡ä»¶å补全ã€å—æ“作ã€è„šæœ¬è¯­è¨€ç­‰ã€‚åŒæ—¶ä¹Ÿæä¾›äº† +图形用户界é¢ï¼ˆGUI)。尽管如此,Vi 兼容性ä¾ç„¶å¾—以ä¿ç•™ï¼Œä¹ æƒ¯ä½¿ç”¨ Vi 的用户æ“ä½œæ—¶ä» +会感到得心应手。与 Vi 的差异请å‚阅 "runtime/doc/vi_diff.txt"。 + +此编辑器对于编辑代ç å’Œå…¶ä»–纯文本文件éžå¸¸æœ‰ç”¨ã€‚所有命令都通过常规键盘字符输入,因 +此熟练盲打的用户能够高效工作。此外,用户å¯ä»¥å°†åŠŸèƒ½é”®æ˜ å°„åˆ°å‘½ä»¤ï¼Œå¹¶ä¸”å¯ä»¥ä½¿ç”¨é¼ æ ‡ã€‚ + +Vim 也致力于æä¾›ä¸€ä¸ªï¼ˆåŸºæœ¬ï¼‰ç¬¦åˆ POSIX 标准的 vi 实现。当它以最å°åŠŸèƒ½é›†ï¼ˆé€šå¸¸ç§° +为 vim.tiny)编译时,被许多 Linux å‘行版用作默认的 vi 编辑器。 + +Vim å¯åœ¨ MS-Windows (7, 8, 10, 11)ã€macOSã€Haikuã€VMS 以åŠå‡ ä¹Žæ‰€æœ‰ UNIX å˜ä½“ä¸Šè¿ +行。移æ¤åˆ°å…¶ä»–系统应该ä¸å¤ªå›°éš¾ã€‚旧版本的 Vim 曾在 Amiga DOSã€Atari MiNTã€BeOS〠+MS-DOSã€MS-Windows 95/98/Me/NT/2000/XP/Vistaã€RISC OS å’Œ OS/2 上è¿è¡Œã€‚这些版本的 +维护现已终止。 + + +获 å– é€” 径 + +通常你å¯ä»¥ä½¿ç”¨ä½ å–œæ¬¢çš„软件包管ç†å™¨æ¥å®‰è£… Vim。在 Mac å’Œ Linux 上,会预装一个简化 +版的 Vimï¼Œå¦‚æžœä½ éœ€è¦æ›´å¤šåŠŸèƒ½ï¼Œä»éœ€è¦å®‰è£…完整的 Vim。 + +有针对 Unixã€PCã€Amiga 和其他一些系统的独立å‘行版。本 README.txt 文件éšè¿è¡Œæ—¶å­˜ +档一起æä¾›ã€‚è¯¥å­˜æ¡£åŒ…å«æ–‡æ¡£ã€è¯­æ³•文件以åŠå…¶ä»–è¿è¡Œæ—¶ä½¿ç”¨çš„æ–‡ä»¶ã€‚è¦è¿è¡Œ Vim,你必须 +获å–二进制存档或æºä»£ç å­˜æ¡£ä¹‹ä¸€ã€‚您需è¦å“ªä¸€ç§å–决于您想è¦è¿è¡Œ Vim çš„ç³»ç»Ÿä»¥åŠæ‚¨æ˜¯ +å¦å¸Œæœ›æˆ–必须自行编译。请查阅 "https://www.vim.org/download.php" 以了解当å‰å¯ç”¨çš„ +å‘行版概览。 + +èŽ·å–æœ€æ–°ç‰ˆ Vim çš„å¸¸è§æ–¹å¼ï¼š +* 从 github 检出 git 仓库:https://github.com/vim/vim。 +* 以存档形å¼èŽ·å–æºä»£ç ï¼šhttps://github.com/vim/vim/tags。 +* 从 vim-win32-installer ä»“åº“èŽ·å– Windows 坿‰§è¡Œæ–‡ä»¶ï¼š + https://github.com/vim/vim-win32-installer/releases。 + + +ç¼– 译 + +如果你获得的是二进制å‘行版,则无需编译 Vim。如果你获得的是æºä»£ç å‘行版,编译 Vim +所需的所有内容都在 "src" 目录中。请å‚阅 src/INSTALL 文件中的说明。 + + +安 装 + +请查阅以下文件之一以获å–系统特定的安装说明。这些文件ä½äºŽä»“库中的 READMEdir 目录, +或者在你解压缩存档åŽçš„顶级目录中: + +README_ami.txt Amiga +README_unix.txt Unix +README_dos.txt MS-DOS å’Œ MS-Windows +README_mac.txt Macintosh +README_haiku.txt Haiku +README_vms.txt VMS + +æ ¹æ®ä½ ä½¿ç”¨çš„å‘行版,å¯èƒ½è¿˜æœ‰å…¶ä»– README_*.txt 文件。 + + +æ–‡ æ¡£ + +Vim tutor 是为åˆå­¦è€…è®¾è®¡çš„ä¸€å°æ—¶åŸ¹è®­è¯¾ç¨‹ã€‚通常å¯ä»¥é€šè¿‡ "vimtutor" 命令å¯åŠ¨ã€‚æ›´å¤š +ä¿¡æ¯è¯·å‚阅 ":help tutor"。 + +æœ€ä½³æ–¹å¼æ˜¯åœ¨ Vim 中使用 ":help" å‘½ä»¤ã€‚å¦‚æžœæ‚¨å°šæœªå®‰è£…å¯æ‰§è¡Œæ–‡ä»¶ï¼Œè¯·é˜…读 +"runtime/doc/help.txt"ã€‚è¯¥æ–‡ä»¶åŒ…å«æŒ‡å‘其他文档文件的指引。用户手册采用书ç±ä½“例编 +排,是学习使用 Vim 的推è资料。具体请å‚阅 ":help user-manual"。 + + +å¤ åˆ¶ 与 版 æƒ + +Vim 是慈善软件。您å¯ä»¥å°½æƒ…使用和å¤åˆ¶å®ƒï¼Œä½†é¼“åŠ±æ‚¨ææ¬¾ä»¥å¸®åŠ©ä¹Œå¹²è¾¾çš„å­¤å„¿ã€‚è¯·é˜…è¯» +"runtime/doc/uganda.txt" 文件了解详情(在 Vim 中执行 ":help uganda")。 + +è®¸å¯æ‘˜è¦ï¼šå¯¹äºŽæœªç»ä¿®æ”¹çš„ Vim 副本,其使用或分å‘ä¸å—任何é™åˆ¶ã€‚Vim çš„éƒ¨åˆ†å†…å®¹äº¦å¯ +分å‘,但必须始终包å«è®¸å¯æ–‡æœ¬ã€‚对于修改版本,则需éµå¾ªè‹¥å¹²é™åˆ¶æ¡æ¬¾ã€‚本许å¯è¯ä¸Ž GPL +兼容,您å¯ä½¿ç”¨ GPL 库编译 Vim 并进行分å‘。 + + +赞 助 + +ä¿®å¤é”™è¯¯ä¸Žå¢žæ·»æ–°åŠŸèƒ½å‡éœ€æŠ•入大釿—¶é—´ä¸Žç²¾åŠ›ã€‚ä¸ºæ”¯æŒå¼€å‘工作并激励开å‘者æŒç»­å®Œå–„ +Vim,敬请通过æèµ è¡¨è¾¾æ‚¨çš„认å¯ã€‚ + +您æèµ çš„资金将主è¦ç”¨äºŽå¸®åŠ©ä¹Œå¹²è¾¾çš„å„¿ç«¥ã€‚è¯·å‚阅 "runtime/doc/uganda.txt"ã€‚ä½†åŒæ—¶ï¼Œ +您的æèµ ä¹Ÿå°†æ¿€åб开å‘团队æŒç»­æŠ•å…¥ Vim 的开å‘工作。 + +关于赞助的最新信æ¯ï¼Œè¯·æŸ¥çœ‹ Vim 网站: + https://www.vim.org/sponsor/ + + +è´¡ 献 + +如果您想帮助改进 Vim,请å‚阅 CONTRIBUTING.md 文件。 + + +ä¿¡ æ¯ ä¸Ž 支 æŒ + +如果您在 macOS 上,å¯ä»¥ä½¿ç”¨ MacVim:https://macvim.org + +关于 Vim 的最新消æ¯å¯ä»¥åœ¨ Vim 主页上找到: + https://www.vim.org/ + +如果您é‡åˆ°é—®é¢˜ï¼Œè¯·æŸ¥é˜… Vim 文档或使用技巧: + https://www.vim.org/docs.php + https://vim.fandom.com/wiki/Vim_Tips_Wiki + +å¦‚æžœæ‚¨ä»æœ‰é—®é¢˜æˆ–其他疑问,请使用其中一个邮件列表与 Vim 用户和开å‘者讨论: + https://www.vim.org/maillist.php + +如果其他方法都无效,请直接将错误报告å‘é€åˆ° vim-dev 邮件列表: + + + +主 è¦ ä½œ 者 + +Vim 主è¦ç”± Bram Moolenaar 创建,å¯é€šè¿‡ ":help Bram-Moolenaar" 命 +令了解更多信æ¯ã€‚ + +请将任何其他评论ã€è¡¥ä¸ã€é²œèŠ±å’Œå»ºè®®å‘é€åˆ° vim-dev 邮件列表: diff --git a/nsis/Make_mvc.mak b/nsis/Make_mvc.mak deleted file mode 100644 index a1f1ae4b34..0000000000 --- a/nsis/Make_mvc.mak +++ /dev/null @@ -1,95 +0,0 @@ -# -# Makefile for MS Windows for create self-installing exe of Vim. -# 2025-10-03, Restorer, restorer@mail2k.ru -# - - -# included common tools -!INCLUDE ..\src\auto\nmake\tools.mak - -.SUFFIXES : - -!IFDEF PROGRAMW6432 -ProgFiles=%%PROGRAMFILES(x86)%% -!ELSE -ProgFiles=$(PROGRAMFILES) -!ENDIF - -!IFDEF VIMSRC -MKNSISFLAGS = /D"VIMSRC=$(VIMSRC)" -!ENDIF - -!IFDEF VIMRT -MKNSISFLAGS = $(MKNSISFLAGS) /D"VIMRT=$(VIMRT)" -!ENDIF - -!IFDEF VIMTOOLS -MKNSISFLAGS = $(MKNSISFLAGS) /D"VIMTOOLS=$(VIMTOOLS)" -!ENDIF - -!IFDEF GETTEXT -MKNSISFLAGS = $(MKNSISFLAGS) /D"GETTEXT=$(GETTEXT)" -!ENDIF - -!IFDEF HAVE_UPX -MKNSISFLAGS = $(MKNSISFLAGS) /DHAVE_UPX=$(HAVE_UPX) -!ENDIF - -!IFDEF HAVE_NLS -MKNSISFLAGS = $(MKNSISFLAGS) /DHAVE_NLS=$(HAVE_NLS) -!ENDIF - -!IFDEF HAVE_MULTI_LANG -MKNSISFLAGS = $(MKNSISFLAGS) /DHAVE_MULTI_LANG=$(HAVE_MULTI_LANG) -!ENDIF - -!IFDEF WIN64 -MKNSISFLAGS = $(MKNSISFLAGS) /DWIN64=$(WIN64) -!ENDIF - -!IFDEF ARM64 -MKNSISFLAGS = $(MKNSISFLAGS) /DARM64=$(ARM64) -!ENDIF - -!IFDEF INCLUDE_LIBGCC -MKNSISFLAGS = $(MKNSISFLAGS) /DINCLUDE_LIBGCC=$(INCLUDE_LIBGCC) -!ENDIF - -!IFDEF X -XX = /X"$(X:;=" /X")" -!ENDIF - -# If necessary, correct the full path of the NSIS compiler in the next line. -# Please do not enclose the path in quotation marks. -MKNSIS = $(ProgFiles)\NSIS\makensis.exe - -MKNSISFLAGS = /INPUTCHARSET UTF8 $(MKNSISFLAGS) - - -all : makeinst - -makeinst : prepare - ^"$(MKNSIS)" $(MKNSISFLAGS) gvim.nsi $(XX) - -prepare : unzipicons license rename - -unzipicons : icons.zip - @ if exist %|fF\nul $(RD) %|fF - @ $(PS) $(PSFLAGS) \ - Add-Type -AssemblyName 'System.IO.Compression.FileSystem'; \ - [System.IO.Compression.ZipFile]::ExtractToDirectory('$**', '.') - -license : ..\lang\LICENSE.*.txt ..\LICENSE - !@ $(PS) $(PSFLAGS) \ - Get-Content -Path '$**' -Encoding UTF8 ^| \ - Set-Content -Path '..\lang\$(**B).nsis.txt' -Enc Unicode -Force - -rename : - @ ..\tools\rename.bat "$(SRC)" "$(DST)" 1> nul - -clean : - @ if exist ..\lang\LICENSE*.nsis.txt $(RM) ..\lang\LICENSE*.nsis.txt - @ if exist .\icons\nul $(RD) .\icons - @ if exist .\gvim??.exe $(RM) .\gvim??.exe - -# vim: set noet sw=8 ts=8 sts=0 wm=0 tw=79 ft=make: diff --git a/nsis/Makefile b/nsis/Makefile deleted file mode 100644 index 4b51b2ac71..0000000000 --- a/nsis/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -# -# Makefile for UNIX-like for create self-installing exe of Vim. -# 2025-10-03, Restorer, restorer@mail2k.ru -# - - -.SUFFIXES: -.PHONY: all makeinst prepare rename clean - -ifdef VIMSRC -MKNSISFLAGS := -D"VIMSRC=$(VIMSRC)" -endif - -ifdef VIMRT -MKNSISFLAGS := $(MKNSISFLAGS) -D"VIMRT=$(VIMRT)" -endif - -ifdef VIMTOOLS -MKNSISFLAGS := $(MKNSISFLAGS) -D"VIMTOOLS=$(VIMTOOLS)" -endif - -ifdef GETTEXT -MKNSISFLAGS := $(MKNSISFLAGS) -D"GETTEXT=$(GETTEXT)" -endif - -ifdef HAVE_UPX -MKNSISFLAGS := $(MKNSISFLAGS) -DHAVE_UPX=$(HAVE_UPX) -endif - -ifdef HAVE_NLS -MKNSISFLAGS := $(MKNSISFLAGS) -DHAVE_NLS=$(HAVE_NLS) -endif - -ifdef HAVE_MULTI_LANG -MKNSISFLAGS := $(MKNSISFLAGS) -DHAVE_MULTI_LANG=$(HAVE_MULTI_LANG) -endif - -ifdef WIN64 -MKNSISFLAGS := $(MKNSISFLAGS) -DWIN64=$(WIN64) -endif - -ifdef ARM64 -MKNSISFLAGS := $(MKNSISFLAGS) -DARM64=$(ARM64) -endif - -ifdef INCLUDE_LIBGCC -MKNSISFLAGS := $(MKNSISFLAGS) -DINCLUDE_LIBGCC=$(INCLUDE_LIBGCC) -endif - -ifdef X -XX := -X"$(X:;=" -X")" -endif - -MKNSISFLAGS := -INPUTCHARSET UTF8 $(MKNSISFLAGS) - -all: makeinst - -makeinst: prepare - makensis $(MKNSISFLAGS) gvim.nsi $(XX) - -prepare: unzipicons license rename - -unzipicons: icons.zip - if test -d `basename $? .zip` ; then rm -rf `basename $? .zip` ; fi - unzip $? - -license: ../lang/LICENSE.*.txt ../LICENSE - for lic in $? ; do \ - bn=`basename $$lic .txt` ; \ - awk 'sub("$$", "\r")' < $$lic | \ - iconv -f UTF-8 -t UTF-16 > ../lang/$$bn.nsis.txt ; \ - done - -rename: - ../tools/rename.bat "$(SRC)" "$(DST)" - -clean: - rm -f ../lang/LICENSE*.nsis.txt - if test -d icons ; then rm -rf icons ; fi - if test -f gvim??.exe ; then rm -f gvim??.exe ; fi - -# vim: set noet sw=8 ts=8 sts=0 wm=0 tw=0 ft=make: diff --git a/nsis/README.txt b/nsis/README.txt index c4f3645ab1..f7e72a02e3 100644 --- a/nsis/README.txt +++ b/nsis/README.txt @@ -1,112 +1,4 @@ -This builds a one-click install for Vim for MS Windows using the Nullsoft -Installation System (NSIS), available at http://nsis.sourceforge.net/ +The code for the one-click installer for Vim for MS Windows has been moved to +the vim-win32-installer repository. -To build the installable .exe file: - -Preparatory stage - -1. Clone using the git tool the Vim repository or download its zip file - available at: - https://github.com/vim/vim - -2. Go to the "/src" directory and build the Vim editor, making sure to use the - following variable values: "GUI=yes"; "OLE=yes"; "VIMDLL=yes". See - INSTALLpc.txt and Make_mvc.mak for details. - -3. Go to the GvimExt directory and build gvimext.dll (or get it from a binary - archive). Both 64- and 32-bit versions are needed and should be placed - as follows: - 64-bit: src/GvimExt/gvimext64.dll - 32-bit: src/GvimExt/gvimext.dll - -4. Get a "diff.exe" program. If you skip this the built-in diff will always - be used (which is fine for most users). - You can find one in previous Vim versions or in this archive: - https://www.mediafire.com/file/9edk4g3xvfgzby0/diff4Vim.zip/file - When will you have "diff.exe" put it in the "../.." directory (above the - "vim91" directory, it's the same for all Vim versions). However, you can - specify a different directory by specifying the appropriate makefile value. - How to do this is described below. - -5. For the terminal window to work in Vim, the library winpty is required. - You can get it at the following url: - https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip - For the 32-bit version, rename "winpty.dll" from ia32/bin to "winpty32.dll", - and for the 64-bit version — "winpty.dll" from x64/bin to "winpty64.dll". - Put the renamed file and "winpty-agent.exe" in "../.." (above the "vim91" - directory). However, you can specify a different directory by specifying - the appropriate makefile value. How to do this is described below. - -6. To use stronger encryption, add the Sodium library. You can get it here: - https://github.com/jedisct1/libsodium/releases/download/1.0.19-RELEASE/libsodium-1.0.19-msvc.zip - Unpack the archive. Put the "libsodium.dll" from - path/to/libsodium/Win32/Release/v143/dynamic for the 32â€bit version or - path/to/libsodium/X64/Release/v143/dynamic for the 64â€bit version in the - "../.." directory (above the "vim91" directory, where "diff.exe" and - "winpty{32|64}.dll"). - -7. Get gettext and iconv DLLs from the following site: - https://github.com/mlocati/gettext-iconv-windows/releases - Both 64- and 32-bit versions are needed. - Download the files gettextX.X.X.X-iconvX.XX-shared-{32,64}.zip, extract - DLLs and place them as follows: - - - | - + gettext32/ - | libintl-8.dll - | libiconv-2.dll - | libgcc_s_sjlj-1.dll - | - + gettext64/ - libintl-8.dll - libiconv-2.dll - - The default is "../..". However, you can specify a - different directory by specifying the appropriate makefile value. How to do - this is described below. - -8. Install NSIS if you didn't do that already. - Download Unicode version the ShellExecAsUser plug-in for NSIS from: - https://nsis.sourceforge.io/ShellExecAsUser_plug-in - and put "ShellExecAsUser.dll" to path\to\NSIS\Plugins\x86-unicode - -Installer assembly stage - - On MS Windows, open the Developer Command Prompt for VS and go to the - "/nsis" directory and type the command - nmake.exe -lf Make_mvc.mak [variables] all - - After the installer is created and you copy it to the desired location, run - the following command in the "/nsis" directory - nmake.exe -lf Make_mvc.mak clean - - On UNIX-like systems, go to the "/nsis" directory and type the command - make -f Makefile [variables] all - - After the installer is created and you copy it to the desired location, run - the following command in the "/nsis" directory - make -f Makefile clean - -Variables and their values available for building the installer (not mandatory): - - "VIMSRC=" — directory where location of gvim_ole.exe, vimw32.exe, - GvimExt/*, etc. - "VIMRT=" — directory where location of runtime files. - "VIMTOOLS=" — directory where location of extra tools: diff.exe, - winpty{32|64}.dll, winpty-agent.exe, libsodium.dll. - "GETTEXT=" — directory where location of gettext libraries. - "HAVE_UPX=1" — additional compression of the installer. UPX program - must be installed. - "HAVE_NLS=0" — do not add native language support. - "HAVE_MULTI_LANG=0" — to create an English-only the installer. - "WIN64=1" — to create a 64-bit the installer. - "ARM64=1" — to create the installer for ARM64. The WIN64 variable - must be set to 1. - "X=" — executes scriptcmd in script. If multiple scriptcmd - are specified, they are separated by a semicolon. - Example "X=OutFile MyVim.exe;XPMode on" - "MKNSIS=" — the directory where the "makensis.exe" program is - located. - -Note: for icons used in the installer, see the README.txt in the icons.zip + https://github.com/vim/vim-win32-installer/tree/master/nsis diff --git a/nsis/auxiliary.nsh b/nsis/auxiliary.nsh deleted file mode 100644 index c350f69e0b..0000000000 --- a/nsis/auxiliary.nsh +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- -# NSIS helper file for creating a self-installing exe for Vim. -# Contains service macros and functions. -# Last Change: 2025-09-03 -# - -!ifndef __AUXILIARY__NSH__ - !define __AUXILIARY__NSH__ - -# See https://nsis.sourceforge.io/LogicLib -;FileExists is already part of LogicLib, but returns true for directories -;as well as files - !macro _FileExists2 _a _b _t _f - !insertmacro _LOGICLIB_TEMP - StrCpy $_LOGICLIB_TEMP "0" -;if path is not blank, continue to next check - StrCmp `${_b}` `` +4 0 -;if path exists, continue to next check (IfFileExists returns true if this -;is a directory) - IfFileExists `${_b}` `0` +3 -;if path is not a directory, continue to confirm exists - IfFileExists `${_b}\*.*` +2 0 - StrCpy $_LOGICLIB_TEMP "1" ;file exists -;now we have a definitive value - the file exists or it does not - StrCmp $_LOGICLIB_TEMP "1" `${_t}` `${_f}` - !macroend - !undef FileExists - !define FileExists `"" FileExists2` - !macro _DirExists _a _b _t _f - !insertmacro _LOGICLIB_TEMP - StrCpy $_LOGICLIB_TEMP "0" -;if path is not blank, continue to next check - StrCmp `${_b}` `` +3 0 -;if directory exists, continue to confirm exists - IfFileExists `${_b}\*.*` 0 +2 - StrCpy $_LOGICLIB_TEMP "1" - StrCmp $_LOGICLIB_TEMP "1" `${_t}` `${_f}` - !macroend - !define DirExists `"" DirExists` - -# Get parent directory -# Share this function both on installer and uninstaller - !macro GetParent un - Function ${un}GetParent - Exch $0 ; old $0 is on top of stack - Push $1 - Push $2 - StrCpy $1 -1 - ${Do} - StrCpy $2 $0 1 $1 - ${If} $2 == "" - ${OrIf} $2 == "\" - ${ExitDo} - ${EndIf} - IntOp $1 $1 - 1 - ${Loop} - StrCpy $0 $0 $1 - Pop $2 - Pop $1 - Exch $0 ; put $0 on top of stack, restore $0 to original value - FunctionEnd - !macroend - - !insertmacro GetParent "" - !insertmacro GetParent "un." - -# Get home directory - !macro GetHomeDir un - Function ${un}GetHomeDir - Push $0 - Push $1 - ReadEnvStr $0 "HOME" - ${If} $0 == "" - ReadEnvStr $0 "HOMEDRIVE" - ReadEnvStr $1 "HOMEPATH" - StrCpy $0 "$0$1" - ${If} $0 == "" - ReadEnvStr $0 "USERPROFILE" - ${EndIf} - ${EndIf} - Pop $1 - Exch $0 ; put $0 on top of stack, restore $0 to original value - FunctionEnd - !macroend - - !insertmacro GetHomeDir "" - !insertmacro GetHomeDir "un." - -# Saving the status of sections of the current installation in the registry - !macro SaveSectionSelection section_id reg_value - ${If} ${SectionIsSelected} ${section_id} - WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} 1 - ${Else} - WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} 0 - ${EndIf} - !macroend - -# Reading the status of sections from the registry of the previous installation - !macro LoadSectionSelection section_id reg_value - ClearErrors - ReadRegDWORD $3 HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} - ${IfNot} ${Errors} - ${If} $3 = 1 - !insertmacro SelectSection ${section_id} - ${Else} - !insertmacro UnselectSection ${section_id} - ${EndIf} - ${EndIf} - !macroend - -# Reading the settings for _vimrc from the registry of a previous installation - !macro LoadDefaultVimrc out_var reg_value default_value - ClearErrors - ReadRegStr ${out_var} HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} - ${If} ${Errors} - ${OrIf} ${out_var} == "" - StrCpy ${out_var} ${default_value} - ${EndIf} - !macroend - -# Get user locale - !if ${HAVE_NLS} - Var lng_usr ; variable containing the locale of the current user - - !include "StrFunc.nsh" - ${StrRep} - - Function GetUserLocale - ClearErrors - System::Call \ - 'kernel32::GetUserDefaultLocaleName(t.r19, *i${NSIS_MAX_STRLEN})' - StrCmp $R9 "zh-cn" coincide 0 - StrCmp $R9 "zh-tw" coincide 0 - StrCmp $R9 "pt-br" 0 part - coincide: - System::Call 'User32::CharLower(t r19 r19)*i${NSIS_MAX_STRLEN}' - ${StrRep} $lng_usr "$R9" "-" "_" - Goto done - part: - StrCpy $lng_usr $R9 2 - done: - FunctionEnd - !endif - - - -!endif # __AUXILIARY__NSH__ -# vi:set ts=8 sw=2 sts=2 tw=79 wm=0 ft=nsis: diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi deleted file mode 100644 index 5cfc051226..0000000000 --- a/nsis/gvim.nsi +++ /dev/null @@ -1,1154 +0,0 @@ -# -*- coding: utf-8 -*- -# NSIS file to create a self-installing exe for Vim. -# It requires NSIS version 3.0 or later. -# Last Change: 2025-09-30 -# - -Unicode true ; !include defaults to UTF-8 after Unicode True since 3.0 Alpha 2 - -# WARNING: if you make changes to this script, look out for $0 to be valid, -# because uninstall deletes most files in $0. - -# Location of gvim_ole.exe, vimw32.exe, GvimExt/*, etc. -!ifndef VIMSRC - !define VIMSRC "..\src" -!endif - -# Location of runtime files -!ifndef VIMRT - !define VIMRT "..\runtime" -!endif - -# Location of extra tools: diff.exe, winpty{32|64}.dll, winpty-agent.exe, etc. -!ifndef VIMTOOLS - !define VIMTOOLS "..\.." -!endif - -# Location of gettext. -# It must contain two directories: gettext32 and gettext64. -# See README.txt for detail. -!ifndef GETTEXT - !define GETTEXT ${VIMTOOLS} -!endif - -# If you have UPX, use the switch /DHAVE_UPX=1 on the command line makensis.exe. -# This property will be set to 1. Get it at https://upx.github.io/ -!ifndef HAVE_UPX - !define HAVE_UPX 0 -!endif - -# If you do not want to add Native Language Support, use the switch /DHAVE_NLS=0 -# in the command line makensis.exe. This property will be set to 0. -!ifndef HAVE_NLS - !define HAVE_NLS 1 -!endif - -# To create an English-only the installer, use the switch /DHAVE_MULTI_LANG=0 on -# the command line makensis.exe. This property will be set to 0. -!ifndef HAVE_MULTI_LANG - !define HAVE_MULTI_LANG 1 -!endif - -# if you want to create a 64-bit the installer, use the switch /DWIN64=1 on -# the command line makensis.exe. This property will be set to 1. -!ifndef WIN64 - !define WIN64 0 -!endif - -# if you want to create the installer for ARM64, use the /DARM64=1 on -# the command line makensis.exe. This property will be set to 1. -!ifndef ARM64 - !define ARM64 0 -!else - !if ${ARM64} > 0 - !if ${WIN64} < 1 - !define /redef WIN64 1 - !endif - !endif -!endif - -# if you don't want to include libgcc_s_sjlj-1.dll in the package, use the -# switch /DINCLUDE_LIBGCC=0 on the command line makensis.exe. -!ifndef INCLUDE_LIBGCC - !define INCLUDE_LIBGCC 1 -!endif - -# Get version numbers -!getdllversion "${VIMSRC}\gvim_ole.exe" VimVer_ -!echo "Vim version MAJOR=${VimVer_1} MINOR=${VimVer_2} PATCHLEVEL=${VimVer_3}" - -!ifndef VER_MAJOR - !define VER_MAJOR ${VimVer_1} -!endif -!ifndef VER_MINOR - !define VER_MINOR ${VimVer_2} -!endif -!ifndef PATCHLEVEL - !define PATCHLEVEL ${VimVer_3} -!endif - -# ----------- No configurable settings below this line ----------- - -########################################################## -# Installer Attributes, Including headers, Plugins and etc. - -CRCCheck force - -SetCompressor /SOLID lzma -SetCompressorDictSize 64 -SetDatablockOptimize on - -!if ${HAVE_UPX} - !packhdr temp.dat "upx.exe --best --compress-icons=1 temp.dat" -!endif - -RequestExecutionLevel highest -ManifestDPIAware true -# https://github.com/NSIS-Dev/nsis/blob/691211035c2aaaebe8fbca48ee02d4de93594a52/Docs/src/attributes.but#L292 -ManifestDPIAwareness "PerMonitorV2,System" -ManifestSupportedOS \ - {35138b9a-5d96-4fbd-8e2d-a2440225f93a} /* WinNT 6.1 */ \ - {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} /* WinNT 6.2 */ \ - {1f676c76-80e1-4239-95bb-83d0f6d0da78} /* WinNT 6.3 */ \ - {8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a} /* WinNT 10/11 */ - -!define PRODUCT "Vim ${VER_MAJOR}.${VER_MINOR}" -!define UNINST_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall" -!define UNINST_REG_KEY_VIM "${UNINST_REG_KEY}\${PRODUCT}" - -!if ${WIN64} - !define BIT 64 -# This adds '\Vim' to the user choice automagically. The actual value is -# obtained below with CheckOldVim. - !define DEFAULT_INSTDIR "$PROGRAMFILES64\Vim" - !if ${ARM64} - Name "${PRODUCT} (ARM64)" - !else - Name "${PRODUCT} (x64)" - !endif -!else - !define BIT 32 - !define DEFAULT_INSTDIR "$PROGRAMFILES\Vim" - Name "${PRODUCT}" -!endif - -OutFile gvim${VER_MAJOR}${VER_MINOR}.exe -InstallDir ${DEFAULT_INSTDIR} -BrandingText "Vim - the text editor" - -# Types of installs we can perform: -InstType $(str_type_typical) -InstType $(str_type_minimal) -InstType $(str_type_full) - -SilentInstall normal - -########################################################## -# Version resources - -VIFileVersion ${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0 -VIProductVersion ${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0 -VIAddVersionKey /LANG=0 "ProductName" "Vim" -VIAddVersionKey /LANG=0 "CompanyName" "The Vim Project" -VIAddVersionKey /LANG=0 "LegalTrademarks" "Vim" -VIAddVersionKey /LANG=0 "LegalCopyright" "Copyright (C) 1996" -VIAddVersionKey /LANG=0 "FileDescription" \ - "Vi Improved - A Text Editor" -VIAddVersionKey /LANG=0 "ProductVersion" \ - "${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0" -VIAddVersionKey /LANG=0 "FileVersion" \ - "${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0" - -########################################################## -# including headers - -!include "Library.nsh" ; for DLL install -!include "LogicLib.nsh" -!include "MUI2.nsh" ; new user interface -!include "nsDialogs.nsh" -!include "Sections.nsh" ; for section control -!include "x64.nsh" - -!include .\auxiliary.nsh ; helper file - -########################################################## -# MUI2 settings - -!define MUI_ABORTWARNING -!define MUI_UNABORTWARNING - -!define MUI_ICON "icons\in_vim_32bpp.ico" -!define MUI_UNICON "icons\un_vim_32bpp.ico" - -# Show all languages, despite user's codepage: -!define MUI_LANGDLL_ALLLANGUAGES -# Always show dialog choice language -#!define MUI_LANGDLL_ALWAYSSHOW -!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" -!define MUI_LANGDLL_REGISTRY_KEY "Software\Vim" -!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" - -!define MUI_WELCOMEFINISHPAGE_BITMAP "icons\in_welcome.bmp" -!define MUI_UNWELCOMEFINISHPAGE_BITMAP "icons\un_welcome.bmp" -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "icons\in_header.bmp" -!define MUI_HEADERIMAGE_UNBITMAP "icons\un_header.bmp" - -!define MUI_WELCOMEFINISHPAGE_BITMAP_STRETCH "AspectFitHeight" -!define MUI_UNWELCOMEFINISHPAGE_BITMAP_STRETCH "AspectFitHeight" -!define MUI_HEADERIMAGE_BITMAP_STRETCH "AspectFitHeight" -!define MUI_HEADERIMAGE_UNBITMAP_STRETCH "AspectFitHeight" - -!define MUI_COMPONENTSPAGE_SMALLDESC -!define MUI_LICENSEPAGE_CHECKBOX -!define MUI_FINISHPAGE_SHOWREADME -!define MUI_FINISHPAGE_SHOWREADME_TEXT $(str_show_readme) -!define MUI_FINISHPAGE_SHOWREADME_FUNCTION LaunchApplication - -# Installer pages: -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE $(page_lic_file) -!insertmacro MUI_PAGE_COMPONENTS -Page custom SetCustom ValidateCustom -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES -!define MUI_FINISHPAGE_NOREBOOTSUPPORT -!insertmacro MUI_PAGE_FINISH - -# Uninstaller pages: -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_COMPONENTS -!insertmacro MUI_UNPAGE_INSTFILES -!define MUI_FINISHPAGE_NOREBOOTSUPPORT -!insertmacro MUI_UNPAGE_FINISH - -########################################################## -# Languages Files - -!insertmacro MUI_RESERVEFILE_LANGDLL -!include "lang\english.nsi" - -# Include support for other languages: -!if ${HAVE_MULTI_LANG} - !include "lang\danish.nsi" - !include "lang\dutch.nsi" - !include "lang\german.nsi" - !include "lang\greek.nsi" - !include "lang\italian.nsi" - !include "lang\japanese.nsi" - !include "lang\portuguesebr.nsi" - !include "lang\russian.nsi" - !include "lang\serbian.nsi" - !include "lang\simpchinese.nsi" - !include "lang\tradchinese.nsi" - !include "lang\turkish.nsi" -!endif - -########################################################## -# Global variables -Var vim_dialog -Var vim_nsd_compat -Var vim_nsd_keymap -Var vim_nsd_mouse -Var vim_compat_stat -Var vim_keymap_stat -Var vim_mouse_stat - -########################################################## -# Reserve files -ReserveFile ${VIMSRC}\installw32.exe - -########################################################## -# Functions - -# Check if Vim is already installed. -# return: Installed directory. If not found, it will be empty. -Function CheckOldVim - Push $0 - Push $R0 - Push $R1 - Push $R2 - - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - - ClearErrors - StrCpy $0 "" ; Installed directory - StrCpy $R0 0 ; Sub-key index - StrCpy $R1 "" ; Sub-key - ${Do} - # Enumerate the sub-key: - EnumRegKey $R1 HKLM ${UNINST_REG_KEY} $R0 - - # Stop if no more sub-key: - ${If} ${Errors} - ${OrIf} $R1 == "" - ${ExitDo} - ${EndIf} - - # Move to the next sub-key: - IntOp $R0 $R0 + 1 - - # Check if the key is Vim uninstall key or not: - StrCpy $R2 $R1 4 - ${If} $R2 S!= "Vim " - ${Continue} - ${EndIf} - - # Verifies required sub-keys: - ReadRegStr $R2 HKLM "${UNINST_REG_KEY}\$R1" "DisplayName" - ${If} ${Errors} - ${OrIf} $R2 == "" - ${Continue} - ${EndIf} - - ReadRegStr $R2 HKLM "${UNINST_REG_KEY}\$R1" "UninstallString" - ${If} ${Errors} - ${OrIf} $R2 == "" - ${Continue} - ${EndIf} - - # Found - Push $R2 - call GetParent - call GetParent - Pop $0 ; Vim directory - ${ExitDo} - - ${Loop} - - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - - Pop $R2 - Pop $R1 - Pop $R0 - Exch $0 ; put $0 on top of stack, restore $0 to original value -FunctionEnd - -Function LaunchApplication - SetOutPath $0 - !if ${HAVE_NLS} - ShellExecAsUser::ShellExecAsUser "" "$0\gvim.exe" \ - '-R "$0\$(vim_readme_file)"' - !else - ShellExecAsUser::ShellExecAsUser "" "$0\gvim.exe" '-R "$0\README.txt"' - !endif -FunctionEnd - -########################################################## -# Installer Functions and Sections - -Section "$(str_section_old_ver)" id_section_old_ver - SectionIn 1 2 3 RO - - # run the install program to check for already installed versions - SetOutPath $TEMP - File /oname=install.exe ${VIMSRC}\installw32.exe - DetailPrint "$(str_msg_uninstalling)" - ${Do} - nsExec::Exec "$TEMP\install.exe -uninstall-check" - Pop $3 - - call CheckOldVim - Pop $3 - ${If} $3 == "" - ${ExitDo} - ${Else} - # It seems that the old version is still remaining. - # TODO: Should we show a warning and run the uninstaller again? - - ${ExitDo} ; Just ignore for now. - ${EndIf} - ${Loop} - Delete $TEMP\install.exe - Delete $TEMP\vimini.ini ; install.exe creates this, but we don't need it. - - # We may have been put to the background when uninstall did something. - BringToFront -SectionEnd - -########################################################## -Section "$(str_section_exe)" id_section_exe - SectionIn 1 2 3 RO - - # we need also this here if the user changes the instdir - StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}" - - SetOutPath $0 - File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe - !if /FileExists "${VIMSRC}\vim${BIT}.dll" - File ${VIMSRC}\vim${BIT}.dll - !endif - File /oname=install.exe ${VIMSRC}\installw32.exe - File /oname=uninstall.exe ${VIMSRC}\uninstallw32.exe - File ${VIMSRC}\vimrun.exe - File /oname=tee.exe ${VIMSRC}\teew32.exe - File /oname=xxd.exe ${VIMSRC}\xxdw32.exe - File ..\vimtutor.bat - File ..\README.txt - File /oname=LICENSE.txt ..\LICENSE - File ..\uninstall.txt - File ${VIMRT}\*.vim - - !if /FileExists "${VIMTOOLS}\diff.exe" - File ${VIMTOOLS}\diff.exe - !endif - !if /FileExists "${VIMTOOLS}\winpty${BIT}.dll" - File ${VIMTOOLS}\winpty${BIT}.dll - !endif - !if /FileExists "${VIMTOOLS}\winpty-agent.exe" - File ${VIMTOOLS}\winpty-agent.exe - !endif - !if /FileExists "${VIMTOOLS}\libsodium.dll" - File ${VIMTOOLS}\libsodium.dll - !endif - - SetOutPath $0\colors - File /r ${VIMRT}\colors\*.* - - SetOutPath $0\compiler - File ${VIMRT}\compiler\*.* - - SetOutPath $0\doc - File /x uganda.nsis.txt ${VIMRT}\doc\*.txt - File ${VIMRT}\doc\tags - - SetOutPath $0\ftplugin - File ${VIMRT}\ftplugin\*.* - - SetOutPath $0\indent - File ${VIMRT}\indent\README.txt - File ${VIMRT}\indent\*.vim - - SetOutPath $0\keymap - File ${VIMRT}\keymap\README.txt - File ${VIMRT}\keymap\*.vim - - SetOutPath $0\macros - File /r /x *.info ${VIMRT}\macros\*.* - - SetOutPath $0\pack - File /r ${VIMRT}\pack\*.* - - SetOutPath $0\plugin - File ${VIMRT}\plugin\*.* - - SetOutPath $0\autoload - File /r ${VIMRT}\autoload\*.* - - SetOutPath $0\import\dist - File ${VIMRT}\import\dist\*.* - - SetOutPath $0\bitmaps - File ${VIMSRC}\vim.ico - - SetOutPath $0\syntax - File /r /x testdir /x generator /x Makefile ${VIMRT}\syntax\*.* - - SetOutPath $0\spell - File ${VIMRT}\spell\*.txt - File ${VIMRT}\spell\*.vim - File ${VIMRT}\spell\*.spl - File ${VIMRT}\spell\*.sug - - SetOutPath $0\tools - File ${VIMRT}\tools\*.* - - SetOutPath $0\tutor - File /r /x *.info ${VIMRT}\tutor\*.* -SectionEnd - -########################################################## -Section "$(str_section_console)" id_section_console - SectionIn 1 3 - - SetOutPath $0 - File /oname=vim.exe ${VIMSRC}\vimw32.exe - StrCpy $2 "$2 vim view vimdiff" -SectionEnd - -########################################################## -Section "$(str_section_batch)" id_section_batch - SectionIn 3 - - StrCpy $1 "$1 -create-batfiles $2" -SectionEnd - -########################################################## -SectionGroup $(str_group_icons) id_group_icons - Section "$(str_section_desktop)" id_section_desktop - SectionIn 1 3 - - StrCpy $1 "$1 -install-icons" - SectionEnd - - Section "$(str_section_start_menu)" id_section_startmenu - SectionIn 1 3 - - StrCpy $1 "$1 -add-start-menu" - SectionEnd -SectionGroupEnd - -########################################################## -Section "$(str_section_edit_with)" id_section_editwith - SectionIn 1 3 - - SetOutPath $0 - - ${If} ${RunningX64} - # Install 64-bit gvimext.dll into the GvimExt64 directory. - SetOutPath $0\GvimExt64 - ClearErrors - !define LIBRARY_SHELL_EXTENSION - !define LIBRARY_X64 - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${VIMSRC}\GvimExt\gvimext64.dll" "$0\GvimExt64\gvimext.dll" "$0" - !undef LIBRARY_X64 - !undef LIBRARY_SHELL_EXTENSION - ${EndIf} - - # Install 32-bit gvimext.dll into the GvimExt32 directory. - SetOutPath $0\GvimExt32 - ClearErrors - !define LIBRARY_SHELL_EXTENSION - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${VIMSRC}\GvimExt\gvimext.dll" "$0\GvimExt32\gvimext.dll" "$0" - !undef LIBRARY_SHELL_EXTENSION - - # We don't have a separate entry for the "Open With..." menu, assume - # the user wants either both or none. - StrCpy $1 "$1 -install-popup -install-openwith" -SectionEnd - -########################################################## -Section "$(str_section_vim_rc)" id_section_vimrc - SectionIn 1 3 - - StrCpy $1 "$1 -create-vimrc" - - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_compat" "$vim_compat_stat" - WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_keyremap" "$vim_keymap_stat" - WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_mouse" "$vim_mouse_stat" - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - - ${If} $vim_compat_stat == "vi" - StrCpy $1 "$1 -vimrc-compat vi" - ${ElseIf} $vim_compat_stat == "vim" - StrCpy $1 "$1 -vimrc-compat vim" - ${ElseIf} $vim_compat_stat == "defaults" - StrCpy $1 "$1 -vimrc-compat defaults" - ${Else} - StrCpy $1 "$1 -vimrc-compat all" - ${EndIf} - - ${If} $vim_keymap_stat == "default" - StrCpy $1 "$1 -vimrc-remap no" - ${Else} - StrCpy $1 "$1 -vimrc-remap win" - ${EndIf} - - ${If} $vim_mouse_stat == "default" - StrCpy $1 "$1 -vimrc-behave default" - ${ElseIf} $vim_mouse_stat == "windows" - StrCpy $1 "$1 -vimrc-behave mswin" - ${Else} - StrCpy $1 "$1 -vimrc-behave unix" - ${EndIf} -SectionEnd - -########################################################## -SectionGroup $(str_group_plugin) id_group_plugin - Section "$(str_section_plugin_home)" id_section_pluginhome - SectionIn 1 3 - # use ShellExecAsUser below instead - # StrCpy $1 "$1 -create-directories home" - SectionEnd - - Section "$(str_section_plugin_vim)" id_section_pluginvim - SectionIn 3 - StrCpy $1 "$1 -create-directories vim" - SectionEnd -SectionGroupEnd - -########################################################## -!if ${HAVE_NLS} - Section "$(str_section_nls)" id_section_nls - SectionIn 1 3 - - SetOutPath $INSTDIR - !if /FileExists "..\lang\README.*.txt" - File ..\lang\README.*.txt - CopyFiles /SILENT /FILESONLY $INSTDIR\README.$lng_usr.txt \ - $INSTDIR\vim${VER_MAJOR}${VER_MINOR}\README.$lng_usr.txt - Delete $INSTDIR\README.*.txt - !endif - StrCpy $R7 0 - !if /FileExists "..\lang\LICENSE.??.txt" - File ..\lang\LICENSE.??.txt - IntOp $R7 $R7 + 1 - !endif - !if /FileExists "..\lang\LICENSE.??_??.txt" - File ..\lang\LICENSE.??_??.txt - IntOp $R7 $R7 + 1 - !endif - IntCmp $R7 0 notcpy notcpy cpy - cpy: - CopyFiles /SILENT /FILESONLY $INSTDIR\LICENSE.$lng_usr.txt \ - $INSTDIR\vim${VER_MAJOR}${VER_MINOR}\LICENSE.$lng_usr.txt - Delete $INSTDIR\LICENSE.*.txt - notcpy: - - SetOutPath $0\lang - File /r /x Makefile ${VIMRT}\lang\*.* - SetOutPath $0 - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${GETTEXT}\gettext${BIT}\libintl-8.dll" "$0\libintl-8.dll" "$0" - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${GETTEXT}\gettext${BIT}\libiconv-2.dll" "$0\libiconv-2.dll" "$0" - # Install libgcc_s_sjlj-1.dll only if it is needed. - !if ${INCLUDE_LIBGCC} - !if /FileExists "${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll" - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll" \ - "$0\libgcc_s_sjlj-1.dll" "$0" - !endif - !endif - - ${If} ${SectionIsSelected} ${id_section_editwith} - ${If} ${RunningX64} - # Install DLLs for 64-bit gvimext.dll into the GvimExt64 directory. - SetOutPath $0\GvimExt64 - ClearErrors - !define LIBRARY_X64 - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${GETTEXT}\gettext64\libintl-8.dll" \ - "$0\GvimExt64\libintl-8.dll" "$0\GvimExt64" - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${GETTEXT}\gettext64\libiconv-2.dll" \ - "$0\GvimExt64\libiconv-2.dll" "$0\GvimExt64" - !undef LIBRARY_X64 - ${EndIf} - - # Install DLLs for 32-bit gvimext.dll into the GvimExt32 directory. - SetOutPath $0\GvimExt32 - ClearErrors - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${GETTEXT}\gettext32\libintl-8.dll" \ - "$0\GvimExt32\libintl-8.dll" "$0\GvimExt32" - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${GETTEXT}\gettext32\libiconv-2.dll" \ - "$0\GvimExt32\libiconv-2.dll" "$0\GvimExt32" - # Install libgcc_s_sjlj-1.dll only if it is needed. - !if ${INCLUDE_LIBGCC} - !if /FileExists "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" - !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" \ - "$0\GvimExt32\libgcc_s_sjlj-1.dll" "$0\GvimExt32" - !endif - !endif - ${EndIf} - SectionEnd -!endif - -########################################################## -Section -call_install_exe - SetOutPath $0 - DetailPrint "$(str_msg_registering)" - nsExec::Exec "$0\install.exe $1" - Pop $3 - - ${If} ${SectionIsSelected} ${id_section_pluginhome} - ReadEnvStr $3 "COMSPEC" - Call GetHomeDir - Pop $4 - ShellExecAsUser::ShellExecAsUser "" "$3" '/c "cd /d "$4" & mkdir vimfiles \ - & cd vimfiles & mkdir colors compiler doc ftdetect ftplugin indent \ - keymap plugin syntax"' SW_HIDE - ${EndIf} -SectionEnd - -########################################################## -Section -post - # Get estimated install size - SectionGetSize ${id_section_exe} $3 - ${If} ${SectionIsSelected} ${id_section_console} - SectionGetSize ${id_section_console} $4 - IntOp $3 $3 + $4 - ${EndIf} - ${If} ${SectionIsSelected} ${id_section_editwith} - SectionGetSize ${id_section_editwith} $4 - IntOp $3 $3 + $4 - ${EndIf} - !if ${HAVE_NLS} - ${If} ${SectionIsSelected} ${id_section_nls} - SectionGetSize ${id_section_nls} $4 - IntOp $3 $3 + $4 - ${EndIf} - !endif - - # Register EstimatedSize and AllowSilent. - # Other information will be set by the install.exe (dosinst.c). - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" "EstimatedSize" $3 - WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" "AllowSilent" 1 - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - - # Store the selections to the registry. - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - !insertmacro SaveSectionSelection ${id_section_console} "select_console" - !insertmacro SaveSectionSelection ${id_section_batch} "select_batch" - !insertmacro SaveSectionSelection ${id_section_desktop} "select_desktop" - !insertmacro SaveSectionSelection ${id_section_startmenu} "select_startmenu" - !insertmacro SaveSectionSelection ${id_section_editwith} "select_editwith" - !insertmacro SaveSectionSelection ${id_section_vimrc} "select_vimrc" - !insertmacro SaveSectionSelection ${id_section_pluginhome} \ - "select_pluginhome" - !insertmacro SaveSectionSelection ${id_section_pluginvim} "select_pluginvim" - !if ${HAVE_NLS} - !insertmacro SaveSectionSelection ${id_section_nls} "select_nls" - !endif - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - - BringToFront -SectionEnd - -########################################################## -Function .onInit - !if ${HAVE_MULTI_LANG} - # Select a language (or read from the registry). - !insertmacro MUI_LANGDLL_DISPLAY - !endif - - !if ${HAVE_NLS} - call GetUserLocale - !endif - - ${If} $INSTDIR == ${DEFAULT_INSTDIR} - # Check $VIM - ReadEnvStr $3 "VIM" - ${If} $3 != "" - StrCpy $INSTDIR $3 - ${EndIf} - ${EndIf} - - call CheckOldVim - Pop $3 - ${If} $3 == "" - # No old versions of Vim found. Unselect and hide the section. - !insertmacro UnselectSection ${id_section_old_ver} - SectionSetInstTypes ${id_section_old_ver} 0 - SectionSetText ${id_section_old_ver} "" - ${Else} - ${If} $INSTDIR == ${DEFAULT_INSTDIR} - StrCpy $INSTDIR $3 - ${EndIf} - ${EndIf} - - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - # Load the selections from the registry (if any). - !insertmacro LoadSectionSelection ${id_section_console} "select_console" - !insertmacro LoadSectionSelection ${id_section_batch} "select_batch" - !insertmacro LoadSectionSelection ${id_section_desktop} "select_desktop" - !insertmacro LoadSectionSelection ${id_section_startmenu} "select_startmenu" - !insertmacro LoadSectionSelection ${id_section_editwith} "select_editwith" - !insertmacro LoadSectionSelection ${id_section_vimrc} "select_vimrc" - !insertmacro LoadSectionSelection ${id_section_pluginhome} \ - "select_pluginhome" - !insertmacro LoadSectionSelection ${id_section_pluginvim} "select_pluginvim" - !if ${HAVE_NLS} - !insertmacro LoadSectionSelection ${id_section_nls} "select_nls" - !endif - # Load the default _vimrc settings from the registry (if any). - !insertmacro LoadDefaultVimrc $vim_compat_stat "vim_compat" "all" - !insertmacro LoadDefaultVimrc $vim_keymap_stat "vim_keyremap" "default" - !insertmacro LoadDefaultVimrc $vim_mouse_stat "vim_mouse" "default" - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - - # User variables: - # $0 - holds the directory the executables are installed to - # $1 - holds the parameters to be passed to install.exe. Starts with OLE - # registration (since a non-OLE gvim will not complain, and we want to - # always register an OLE gvim). - # $2 - holds the names to create batch files for - StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}" - StrCpy $1 "-register-OLE" - StrCpy $2 "gvim evim gview gvimdiff vimtutor" -FunctionEnd - -Function .onInstSuccess - WriteUninstaller vim${VER_MAJOR}${VER_MINOR}\uninstall-gui.exe -FunctionEnd - -Function .onInstFailed - MessageBox MB_OK|MB_ICONEXCLAMATION "$(str_msg_install_fail)" /SD IDOK -FunctionEnd - -########################################################## -Function SetCustom - # Display the _vimrc setting dialog using nsDialogs. - - # Check if a _vimrc should be created - ${IfNot} ${SectionIsSelected} ${id_section_vimrc} - Abort - ${EndIf} - - !insertmacro MUI_HEADER_TEXT \ - $(str_vimrc_page_title) $(str_vimrc_page_subtitle) - - nsDialogs::Create 1018 - Pop $vim_dialog - - ${If} $vim_dialog == error - Abort - ${EndIf} - - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - - GetFunctionAddress $3 ValidateCustom - nsDialogs::OnBack $3 - - # 1st group - Compatibility - ${NSD_CreateGroupBox} 0u 0u 296u 44u $(str_msg_compat_title) - Pop $3 - - ${NSD_CreateLabel} 16u 14u 269u 10u $(str_msg_compat_desc) - Pop $3 - ${NSD_CreateDropList} 42u 26u 237u 13u "" - Pop $vim_nsd_compat - ${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_vi) - ${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_vim) - ${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_defaults) - ${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_all) - - ${If} $vim_compat_stat == "defaults" - StrCpy $4 2 - ${ElseIf} $vim_compat_stat == "vim" - StrCpy $4 1 - ${ElseIf} $vim_compat_stat == "vi" - StrCpy $4 0 - ${Else} ; default - StrCpy $4 3 - ${EndIf} - ${NSD_CB_SetSelectionIndex} $vim_nsd_compat $4 - - # 2nd group - Key remapping - ${NSD_CreateGroupBox} 0u 48u 296u 44u $(str_msg_keymap_title) - Pop $3 - - ${NSD_CreateLabel} 16u 62u 269u 10u $(str_msg_keymap_desc) - Pop $3 - ${NSD_CreateDropList} 42u 74u 236u 13u "" - Pop $vim_nsd_keymap - ${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_default) - ${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_windows) - - ${If} $vim_keymap_stat == "windows" - StrCpy $4 1 - ${Else} ; default - StrCpy $4 0 - ${EndIf} - ${NSD_CB_SetSelectionIndex} $vim_nsd_keymap $4 - - # 3rd group - Mouse behavior - ${NSD_CreateGroupBox} 0u 95u 296u 44u $(str_msg_mouse_title) - Pop $3 - - ${NSD_CreateLabel} 16u 108u 269u 10u $(str_msg_mouse_desc) - Pop $3 - ${NSD_CreateDropList} 42u 121u 237u 13u "" - Pop $vim_nsd_mouse - ${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_default) - ${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_windows) - ${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_unix) - - ${If} $vim_mouse_stat == "xterm" - StrCpy $4 2 - ${ElseIf} $vim_mouse_stat == "windows" - StrCpy $4 1 - ${Else} ; default - StrCpy $4 0 - ${EndIf} - ${NSD_CB_SetSelectionIndex} $vim_nsd_mouse $4 - - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - - nsDialogs::Show -FunctionEnd - -Function ValidateCustom - ${NSD_CB_GetSelectionIndex} $vim_nsd_compat $3 - ${If} $3 = 0 - StrCpy $vim_compat_stat "vi" - ${ElseIf} $3 = 1 - StrCpy $vim_compat_stat "vim" - ${ElseIf} $3 = 2 - StrCpy $vim_compat_stat "defaults" - ${Else} - StrCpy $vim_compat_stat "all" - ${EndIf} - - ${NSD_CB_GetSelectionIndex} $vim_nsd_keymap $3 - ${If} $3 = 0 - StrCpy $vim_keymap_stat "default" - ${Else} - StrCpy $vim_keymap_stat "windows" - ${EndIf} - - ${NSD_CB_GetSelectionIndex} $vim_nsd_mouse $3 - ${If} $3 = 0 - StrCpy $vim_mouse_stat "default" - ${ElseIf} $3 = 1 - StrCpy $vim_mouse_stat "windows" - ${Else} - StrCpy $vim_mouse_stat "xterm" - ${EndIf} -FunctionEnd - -########################################################## -# Description for Installer Sections - -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_old_ver} $(str_desc_old_ver) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_exe} $(str_desc_exe) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_console} $(str_desc_console) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_batch} $(str_desc_batch) - !insertmacro MUI_DESCRIPTION_TEXT ${id_group_icons} $(str_desc_icons) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_desktop} $(str_desc_desktop) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_startmenu} \ - $(str_desc_start_menu) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_editwith} \ - $(str_desc_edit_with) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_vimrc} $(str_desc_vim_rc) - !insertmacro MUI_DESCRIPTION_TEXT ${id_group_plugin} $(str_desc_plugin) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginhome} \ - $(str_desc_plugin_home) - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginvim} \ - $(str_desc_plugin_vim) - !if ${HAVE_NLS} - !insertmacro MUI_DESCRIPTION_TEXT ${id_section_nls} $(str_desc_nls) - !endif -!insertmacro MUI_FUNCTION_DESCRIPTION_END - - -########################################################## -# Uninstaller Functions and Sections - -Function un.onInit - !if ${HAVE_MULTI_LANG} - # Get the language from the registry. - !insertmacro MUI_UNGETLANGUAGE - !endif -FunctionEnd - -Section "un.$(str_unsection_register)" id_unsection_register - SectionIn RO - - # Apparently $INSTDIR is set to the directory where the uninstaller is - # created. Thus the "vim91" directory is included in it. - StrCpy $0 "$INSTDIR" - - # delete the context menu entry and batch files - DetailPrint "$(str_msg_unregistering)" - nsExec::Exec "$0\uninstall.exe -nsis" - Pop $3 - - # We may have been put to the background when uninstall did something. - BringToFront - - # Delete the installer language setting. - DeleteRegKey ${MUI_LANGDLL_REGISTRY_ROOT} ${MUI_LANGDLL_REGISTRY_KEY} -SectionEnd - -Section "un.$(str_unsection_exe)" id_unsection_exe - StrCpy $0 "$INSTDIR" - - # Delete gettext and iconv DLLs - ${If} ${FileExists} "$0\libiconv-2.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\libiconv-2.dll" - ${EndIf} - ${If} ${FileExists} "$0\libintl-8.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\libintl-8.dll" - ${EndIf} - ${If} ${FileExists} "$0\libgcc_s_sjlj-1.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\libgcc_s_sjlj-1.dll" - ${EndIf} - - # Delete other DLLs - Delete /REBOOTOK $0\*.dll - - # Delete 64-bit GvimExt - ${If} ${RunningX64} - !define LIBRARY_X64 - ${If} ${FileExists} "$0\GvimExt64\gvimext.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\GvimExt64\gvimext.dll" - ${EndIf} - ${If} ${FileExists} "$0\GvimExt64\libiconv-2.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\GvimExt64\libiconv-2.dll" - ${EndIf} - ${If} ${FileExists} "$0\GvimExt64\libintl-8.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\GvimExt64\libintl-8.dll" - ${EndIf} - ${If} ${FileExists} "$0\GvimExt64\libwinpthread-1.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\GvimExt64\libwinpthread-1.dll" - ${EndIf} - !undef LIBRARY_X64 - RMDir /r $0\GvimExt64 - ${EndIf} - - # Delete 32-bit GvimExt - ${If} ${FileExists} "$0\GvimExt32\gvimext.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\GvimExt32\gvimext.dll" - ${EndIf} - ${If} ${FileExists} "$0\GvimExt32\libiconv-2.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\GvimExt32\libiconv-2.dll" - ${EndIf} - ${If} ${FileExists} "$0\GvimExt32\libintl-8.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\GvimExt32\libintl-8.dll" - ${EndIf} - ${If} ${FileExists} "$0\GvimExt32\libgcc_s_sjlj-1.dll" - !insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ - "$0\GvimExt32\libgcc_s_sjlj-1.dll" - ${EndIf} - RMDir /r $0\GvimExt32 - - ClearErrors - # Remove everything but *.dll files. Avoids that - # a lot remains when gvimext.dll cannot be deleted. - RMDir /r $0\autoload - RMDir /r $0\colors - RMDir /r $0\compiler - RMDir /r $0\doc - RMDir /r $0\ftplugin - RMDir /r $0\import - RMDir /r $0\indent - RMDir /r $0\macros - RMDir /r $0\pack - RMDir /r $0\plugin - RMDir /r $0\spell - RMDir /r $0\syntax - RMDir /r $0\tools - RMDir /r $0\tutor - RMDir /r $0\lang - RMDir /r $0\keymap - RMDir /r $0\bitmaps - Delete $0\*.exe - Delete $0\*.bat - Delete $0\*.vim - Delete $0\*.txt - - ${If} ${Errors} - MessageBox MB_OK|MB_ICONEXCLAMATION $(str_msg_rm_exe_fail) /SD IDOK - ${EndIf} - - # No error message if the "vim91" directory can't be removed, the - # gvimext.dll may still be there. - RMDir $0 -SectionEnd - -# Remove "vimfiles" directory under the specified directory. -!macro RemoveVimfiles dir - ${If} ${FileExists} ${dir}\_viminfo - Delete ${dir}\_viminfo - ${EndIf} - ${If} ${DirExists} ${dir}\vimfiles - RMDir ${dir}\vimfiles\colors - RMDir ${dir}\vimfiles\compiler - RMDir ${dir}\vimfiles\doc - RMDir ${dir}\vimfiles\ftdetect - RMDir ${dir}\vimfiles\ftplugin - RMDir ${dir}\vimfiles\indent - RMDir ${dir}\vimfiles\keymap - RMDir ${dir}\vimfiles\plugin - RMDir ${dir}\vimfiles\syntax - ${If} ${FileExists} ${dir}\vimfiles\.netrwhist* - Delete ${dir}\vimfiles\.netrwhist* - ${EndIf} - RMDir ${dir}\vimfiles - ${EndIf} -!macroend - -SectionGroup "un.$(str_ungroup_plugin)" id_ungroup_plugin - Section /o "un.$(str_unsection_plugin_home)" id_unsection_plugin_home - # get the home dir - Call un.GetHomeDir - Pop $0 - - ${If} $0 != "" - !insertmacro RemoveVimfiles $0 - ${EndIf} - SectionEnd - - Section "un.$(str_unsection_plugin_vim)" id_unsection_plugin_vim - # get the parent dir of the installation - Push $INSTDIR - Call un.GetParent - Pop $0 - - # if a plugin dir was created at installation remove it - !insertmacro RemoveVimfiles $0 - SectionEnd -SectionGroupEnd - -Section "un.$(str_unsection_rootdir)" id_unsection_rootdir -# get the parent dir of the installation - Push $INSTDIR - Call un.GetParent - Pop $0 - - ${IfNot} ${Silent} - Delete $0\_vimrc - ${Endif} - RMDir $0 -SectionEnd - -########################################################## -# Description for Uninstaller Sections - -!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_register} \ - $(str_desc_unregister) - !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_exe} $(str_desc_rm_exe) - !insertmacro MUI_DESCRIPTION_TEXT ${id_ungroup_plugin} $(str_desc_rm_plugin) - !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_plugin_home} \ - $(str_desc_rm_plugin_home) - !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_plugin_vim} \ - $(str_desc_rm_plugin_vim) - !insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_rootdir} \ - $(str_desc_rm_rootdir) -!insertmacro MUI_UNFUNCTION_DESCRIPTION_END - -# vi:set ts=8 sw=2 sts=2 tw=79 wm=0 ft=nsis: diff --git a/nsis/icons.zip b/nsis/icons.zip deleted file mode 100644 index c480bcc89e..0000000000 Binary files a/nsis/icons.zip and /dev/null differ diff --git a/nsis/lang/README.txt b/nsis/lang/README.txt deleted file mode 100644 index 0340c308b1..0000000000 --- a/nsis/lang/README.txt +++ /dev/null @@ -1,63 +0,0 @@ -This directory contains a file with text strings for gVim installer. -It also contains files with translations of the text strings for gVim installer -into different languages. - -For translators. - -If you want to prepare a translation for the gVim installer, use the file -"english.nsi" as a master file. See the other translation files in this -directory. -Note that in the definition of the MUI_LANGUAGE macro, the name of the language -to be translated must be the English name of the language. -The name of the file with the translation must match the name of the target -language. -Also, when translating strings, pay attention to some restrictions on the -allowable length of strings. For example: - component description field - 117 characters; - description above the drop-down lists on the .vimrc page - 53 characters; - drop-down lists on the .vimrc page - 55 characters. -Characters in this case mean characters of the English alphabet. - -Once the message translation file is ready, it must be included in the -"gvim.nsi" file. -Find the line "# Include support for other languages:" in the file "gvim.nsi" -and specify the name of the file with your translation below the line -!if ${HAVE_MULTI_LANG}, similar to the entries already there. File names are -specified in alphabetical order. - -If you do not yet have a translated "LICENSE" file and/or a main "README.txt" -file, set the following values: - -for the license file -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" - -for the readme.txt file -LangString vim_readme_file 0 "README.txt" - -Once you have the translations of these files, then set the values for these -variables similarly to what is done in the other translation files. -Translation files should be located in the "lang" subdirectory of the root -directory. The name of the files is as follows: "README.xx.txt", where xx is the -language code according to ISO639. - - -There are two ways to test the installer in different languages: - -1. Find and uncomment the "!define MUI_LANGDLL_ALWAYSSHOW" line in the - "gvim.nsi" file and rebuild the installer. - Now every time you run it, you will see a dialog box with the possibility to - select the language of the installer. - -2. If the Vim editor is already installed in your system, delete the - "Installer Language" parameter in the Windows registry under - "HKEY_CURRENT_USER\Software\Vim". - Or you can create a file "NoLangInstallerVim.reg" with the following content: - - Windows Registry Editor Version 5.00 - - [HKEY_CURRENT_USER\Software\Vim] - "Installer Language"=- - - and apply it by double-clicking on it. - After these steps, when you start the installer, a window with the installer - language selection will also be displayed. diff --git a/nsis/lang/danish.nsi b/nsis/lang/danish.nsi deleted file mode 100644 index c4000312f2..0000000000 --- a/nsis/lang/danish.nsi +++ /dev/null @@ -1,187 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# danish.nsi: Danish language strings for gvim NSIS installer. -# -# Locale ID : 1030 -# Locale Name : da -# fileencoding : UTF-8 -# Author : scootergrisen - -!insertmacro MUI_LANGUAGE "Danish" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_DANISH} "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_DANISH} "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_DANISH} "..\lang\LICENSE.da.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_DANISH} "README.da.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_DANISH} "Destinationsmappe (skal slutte med $\"vim$\")" - -LangString str_show_readme ${LANG_DANISH} "Vis README efter installationen er gennemført" - -# Install types: -LangString str_type_typical ${LANG_DANISH} "Typisk" - -LangString str_type_minimal ${LANG_DANISH} "Minimal" - -LangString str_type_full ${LANG_DANISH} "Fuld" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_DANISH} "Afinstaller eksisterende version(er)" -LangString str_desc_old_ver ${LANG_DANISH} "Afinstaller eksisterende Vim-version(er) fra dit system." - -LangString str_section_exe ${LANG_DANISH} "Vim GUI og afviklingsfiler" -LangString str_desc_exe ${LANG_DANISH} "Vim GUI-eksekverbare- og afviklingsfiler. Komponenten kræves." - -LangString str_section_console ${LANG_DANISH} "Vim-konsolprogram" -LangString str_desc_console ${LANG_DANISH} "Konsolversion af Vim (vim.exe)." - -LangString str_section_batch ${LANG_DANISH} "Opret .bat-filer" -LangString str_desc_batch ${LANG_DANISH} "Opret .bat-filer til Vim-varianter i Windows-mappen til brug fra kommandolinjen." - -LangString str_group_icons ${LANG_DANISH} "Opret ikoner til Vim" -LangString str_desc_icons ${LANG_DANISH} "Opret ikoner til Vim diverse steder for at hjælpe med at gøre adgangen let." - -LangString str_section_desktop ${LANG_DANISH} "PÃ¥ skrivebordet" -LangString str_desc_desktop ${LANG_DANISH} "Opret ikoner til gVim-eksekverbare pÃ¥ skrivebordet." - -LangString str_section_start_menu ${LANG_DANISH} "I Programmer-mappen i menuen Start" -LangString str_desc_start_menu ${LANG_DANISH} "Tilføj Vim i Programmer-mappen i menuen Start." - -#LangString str_section_quick_launch ${LANG_DANISH} "I værktøjslinjen Hurtig start" -#LangString str_desc_quick_launch ${LANG_DANISH} "Tilføj Vim-genvej i værktøjslinjen Hurtig start." - -LangString str_section_edit_with ${LANG_DANISH} "Tilføj Vim-genvejsmenu" -LangString str_desc_edit_with ${LANG_DANISH} "Tilføj Vim til listen i $\"Ã…bn med...$\"-genvejsmenuen." - -#LangString str_section_edit_with32 ${LANG_DANISH} "32-bit-version" -#LangString str_desc_edit_with32 ${LANG_DANISH} "Tilføj Vim til listen i $\"Ã…bn med...$\"-genvejsmenuen for 32-bit-programmer." - -#LangString str_section_edit_with64 ${LANG_DANISH} "64-bit-version" -#LangString str_desc_edit_with64 ${LANG_DANISH} "Tilføj Vim til listen i $\"Ã…bn med...$\"-genvejsmenuen for 64-bit-programmer." - -LangString str_section_vim_rc ${LANG_DANISH} "Opret standardkonfiguration" -LangString str_desc_vim_rc ${LANG_DANISH} "Opret en standardkonfigurationsfil (_vimrc) hvis der ikke allerede findes en." - -LangString str_group_plugin ${LANG_DANISH} "Opret plugin-mapper" -LangString str_desc_plugin ${LANG_DANISH} "Opret plugin-mapper. Plugin-mapper giver mulighed for at udvide Vim ved at slippe en fil i en mappen." - -LangString str_section_plugin_home ${LANG_DANISH} "Private" -LangString str_desc_plugin_home ${LANG_DANISH} "Opret plugin-mapper i HOME (hvis du har defineret et) eller Vim-installationsmappe." - -LangString str_section_plugin_vim ${LANG_DANISH} "Delte" -LangString str_desc_plugin_vim ${LANG_DANISH} "Opret plugin-mapper i Vim-installationsmappe, det bruges af alle pÃ¥ systemet." - -LangString str_section_nls ${LANG_DANISH} "Understøttelse af modersmÃ¥l" -LangString str_desc_nls ${LANG_DANISH} "Installer filer til understøttelse af modersmÃ¥l." - -LangString str_unsection_register ${LANG_DANISH} "Afregistrer Vim" -LangString str_desc_unregister ${LANG_DANISH} "Afregistrer Vim fra systemet." - -LangString str_unsection_exe ${LANG_DANISH} "Fjern Vim-eksekverbare-/afviklingsfiler" -LangString str_desc_rm_exe ${LANG_DANISH} "Fjern alle Vim-eksekverbare- og afviklingsfiler." - -LangString str_ungroup_plugin ${LANG_DANISH} "Fjern plugin-mapper" -LangString str_desc_rm_plugin ${LANG_DANISH} "Fjern plugin-mapperne, hvis de er tomme." - -LangString str_unsection_plugin_home ${LANG_DANISH} "Private" -LangString str_desc_rm_plugin_home ${LANG_DANISH} "Fjern plugin-mapperne fra HOME-mappen." - -LangString str_unsection_plugin_vim ${LANG_DANISH} "Delte" -LangString str_desc_rm_plugin_vim ${LANG_DANISH} "Fjern plugin-mapperne fra Vim-installationsmappen." - -LangString str_unsection_rootdir ${LANG_DANISH} "Fjern Vim-rodmappen" -LangString str_desc_rm_rootdir ${LANG_DANISH} "Fjern Vim-rodmappen. Den indeholder dine Vim-konfigurationsfiler!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_DANISH} "Fandt $vim_old_ver_count Vim-versioner pÃ¥ dit system.$\r$\nInstallationsguiden kan højst hÃ¥ndtere ${VIM_MAX_OLD_VER}-versioner.$\r$\nFjern venligst nogle versioner og start igen." - -#LangString str_msg_invalid_root ${LANG_DANISH} "Ugyldig installationssti: $vim_install_root!$\r$\nDen skal slutte med $\"vim$\"." - -#LangString str_msg_bin_mismatch ${LANG_DANISH} "Uoverensstemmelse i binære sti!$\r$\n$\r$\nForventede at den binære sti var $\"$vim_bin_path$\",$\r$\nmen systemet indikerer at den binære sti er $\"$INSTDIR$\"." - -#LangString str_msg_vim_running ${LANG_DANISH} "Vim kører stadig pÃ¥ dit system.$\r$\nLuk venligst alle instanser af Vim inden du fortsætter." - -#LangString str_msg_register_ole ${LANG_DANISH} "Forsøger at registrere Vim med OLE. Der er ingen meddelelse til at indikere om det virker eller ej." - -#LangString str_msg_unreg_ole ${LANG_DANISH} "Forsøger at afregistrere Vim med OLE. Der er ingen meddelelse til at indikere om det virker eller ej." - -#LangString str_msg_rm_start ${LANG_DANISH} "Afinstallerer følgende version:" - -#LangString str_msg_rm_fail ${LANG_DANISH} "Kunne ikke afinstallere følgende version:" - -#LangString str_msg_no_rm_key ${LANG_DANISH} "Kan ikke finde registreringsdatabasenøgle for afinstallationsguiden." - -#LangString str_msg_no_rm_reg ${LANG_DANISH} "Kan ikke finde afinstallationsguiden fra registreringsdatabasen." - -#LangString str_msg_no_rm_exe ${LANG_DANISH} "Kan ikke tilgÃ¥ afinstallationsguide." - -#LangString str_msg_rm_copy_fail ${LANG_DANISH} "Kunne ikke kopiere afinstallationsguide til midlertidig mappe." - -#LangString str_msg_rm_run_fail ${LANG_DANISH} "Kunne ikke køre afinstallationsguide." - -#LangString str_msg_abort_install ${LANG_DANISH} "Installationsguiden vil afbryde." - -LangString str_msg_install_fail ${LANG_DANISH} "Installationen mislykkedes. Bedre held næste gang." - -LangString str_msg_rm_exe_fail ${LANG_DANISH} "Nogle filer i $0 er ikke blevet slettet!$\r$\nDu skal gøre det manuelt." - -#LangString str_msg_rm_root_fail ${LANG_DANISH} "ADVARSEL: Kan ikke fjerne $\"$vim_install_root$\", den er ikke tom!" - -LangString str_msg_uninstalling ${LANG_DANISH} "Afinstallerer den gamle version..." - -LangString str_msg_registering ${LANG_DANISH} "Registrerer..." - -LangString str_msg_unregistering ${LANG_DANISH} "Afregistrerer..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_DANISH} "Vælg _vimrc-indstillinger" -LangString str_vimrc_page_subtitle ${LANG_DANISH} "Vælg indstillingerne til forbedring, tastatur og mus." - -LangString str_msg_compat_title ${LANG_DANISH} " Vi- / Vim-opførsel " -LangString str_msg_compat_desc ${LANG_DANISH} "&Kompatibilitet og forbedringer" -LangString str_msg_compat_vi ${LANG_DANISH} "Vi-kompatibel" -LangString str_msg_compat_vim ${LANG_DANISH} "Vim original" -LangString str_msg_compat_defaults ${LANG_DANISH} "Vim med nogle forbedringer (indlæs defaults.vim)" -LangString str_msg_compat_all ${LANG_DANISH} "Vim med alle forbedringer (indlæs vimrc_example.vim) (standard)" - -LangString str_msg_keymap_title ${LANG_DANISH} " Tilknytninger " -LangString str_msg_keymap_desc ${LANG_DANISH} "&Gentilknyt nogle fÃ¥ taster for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F osv.)" -LangString str_msg_keymap_default ${LANG_DANISH} "Gentilknyt ikke taster (standard)" -LangString str_msg_keymap_windows ${LANG_DANISH} "Gentilknyt nogle fÃ¥ taster" - -LangString str_msg_mouse_title ${LANG_DANISH} " Mus " -LangString str_msg_mouse_desc ${LANG_DANISH} "&Opførsel af højre og venstre knapper" -LangString str_msg_mouse_default ${LANG_DANISH} "Højre: genvejsmenu, venstre: visuel tilstand (standard)" -LangString str_msg_mouse_windows ${LANG_DANISH} "Højre: genvejsmenu, venstre: vælg-tilstand (Windows)" -LangString str_msg_mouse_unix ${LANG_DANISH} "Højre: udvider markering, venstre: visuel tilstand (Unix)" diff --git a/nsis/lang/dutch.nsi b/nsis/lang/dutch.nsi deleted file mode 100644 index 5a2ba14ce5..0000000000 --- a/nsis/lang/dutch.nsi +++ /dev/null @@ -1,290 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# dutch.nsi : Dutch language strings for gvim NSIS installer. -# -# Locale ID : 1043 -# Locale Name : nl -# fileencoding : UTF-8 -# Author : Peter Odding - -!insertmacro MUI_LANGUAGE "Dutch" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_DUTCH} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_DUTCH} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_DUTCH} "..\lang\LICENSE.nl.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_DUTCH} "README.nl.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_DUTCH} \ -# "Doelmap (moet eindigen op $\"vim$\")" - -LangString str_show_readme ${LANG_DUTCH} \ - "README weergeven na installatie" - -# Install types: -LangString str_type_typical ${LANG_DUTCH} \ - "Gebruikelijk" - -LangString str_type_minimal ${LANG_DUTCH} \ - "Minimaal" - -LangString str_type_full ${LANG_DUTCH} \ - "Volledig" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_DUTCH} \ - "Bestaande versie(s) de-installeren" -LangString str_desc_old_ver ${LANG_DUTCH} \ - "Bestaande Vim versie(s) van je systeem verwijderen." - -LangString str_section_exe ${LANG_DUTCH} \ - "Vim GUI" -LangString str_desc_exe ${LANG_DUTCH} \ - "Vim GUI uitvoerbare bestanden en runtime bestanden. Dit component is vereist." - -LangString str_section_console ${LANG_DUTCH} \ - "Vim console programma" -LangString str_desc_console ${LANG_DUTCH} \ - "Console versie van Vim (vim.exe)." - -LangString str_section_batch ${LANG_DUTCH} \ - "Creëer .bat bestanden" -LangString str_desc_batch ${LANG_DUTCH} \ - "Creëer .bat bestanden voor Vim varianten in de Windows map voor \ - commando regel gebruik." - -LangString str_group_icons ${LANG_DUTCH} \ - "Creëer pictogrammen for Vim" -LangString str_desc_icons ${LANG_DUTCH} \ - "Creëer pictogrammen voor Vim op verschillende locaties voor gemakkelijke toegang." - -LangString str_section_desktop ${LANG_DUTCH} \ - "Op het bureaublad" -LangString str_desc_desktop ${LANG_DUTCH} \ - "Creëer pictogrammen voor Vim uitvoerbare bestanden op het bureaublad." - -LangString str_section_start_menu ${LANG_DUTCH} \ - "In de Programma's map in het start menu" -LangString str_desc_start_menu ${LANG_DUTCH} \ - "Voeg Vim toe aan de programma's map in het start menu. \ - Van toepassing op Windows 95 en later." - -#LangString str_section_quick_launch ${LANG_DUTCH} \ -# "In de snel starten balk" -#LangString str_desc_quick_launch ${LANG_DUTCH} \ -# "Voeg Vim snelkoppeling toe aan de snel starten balk." - -LangString str_section_edit_with ${LANG_DUTCH} \ - "Voeg Vim contextmenu toe" -LangString str_desc_edit_with ${LANG_DUTCH} \ - "Voeg Vim toe aan de $\"Openen met...$\" contextmenu lijst." - -#LangString str_section_edit_with32 ${LANG_DUTCH} \ -# "32-bit versie" -#LangString str_desc_edit_with32 ${LANG_DUTCH} \ -# "Voeg Vim toe aan de $\"Openen met...$\" contextmenu lijst \ -# voor 32-bit toepassingen." - -#LangString str_section_edit_with64 ${LANG_DUTCH} \ -# "64-bit versie" -#LangString str_desc_edit_with64 ${LANG_DUTCH} \ -# "Voeg Vim toe aan de $\"Openen met...$\" contextmenu lijst \ -# voor 64-bit toepassingen." - -LangString str_section_vim_rc ${LANG_DUTCH} \ - "Creëer standaard configuratie" -LangString str_desc_vim_rc ${LANG_DUTCH} \ - "Creëer een standaard configuratie bestand (_vimrc) als er nog geen bestaat." - -LangString str_group_plugin ${LANG_DUTCH} \ - "Creëer Plugin mappen" -LangString str_desc_plugin ${LANG_DUTCH} \ - "Creëer plugin mappen. Plugin mappen maken het mogelijk om \ - Vim uit te breiden door een bestand in een map te plaatsen." - -LangString str_section_plugin_home ${LANG_DUTCH} \ - "Privé" -LangString str_desc_plugin_home ${LANG_DUTCH} \ - "Create plugin directories in HOME directory." - -LangString str_section_plugin_vim ${LANG_DUTCH} \ - "Gedeeld" -LangString str_desc_plugin_vim ${LANG_DUTCH} \ - "Creëer plugin mappen in Vim installatie map, deze worden gebruikt \ - voor iedereen op het systeem." - -LangString str_section_nls ${LANG_DUTCH} \ - "Ondersteuning voor andere talen" -LangString str_desc_nls ${LANG_DUTCH} \ - "Bestanden voor ondersteuning van andere talen dan Engels installeren." - -LangString str_unsection_register ${LANG_DUTCH} \ - "Vim afmelden" -LangString str_desc_unregister ${LANG_DUTCH} \ - "Registratie van Vim in het systeem ongedaan maken." - -LangString str_unsection_exe ${LANG_DUTCH} \ - "Vim uitvoerbare/runtime bestanden verwijderen" -LangString str_desc_rm_exe ${LANG_DUTCH} \ - "Verwijder alle Vim uitvoerbare bestanden en runtime bestanden." - -LangString str_ungroup_plugin ${LANG_DUTCH} \ - "Remove plugin directories" -LangString str_desc_rm_plugin ${LANG_DUTCH} \ - "Remove the plugin directories if they are empty." - -LangString str_unsection_plugin_home ${LANG_DUTCH} \ - "Privé" -LangString str_desc_rm_plugin_home ${LANG_DUTCH} \ - "Remove the plugin directories from HOME directory." - -LangString str_unsection_plugin_vim ${LANG_DUTCH} \ - "Gedeeld" -LangString str_desc_rm_plugin_vim ${LANG_DUTCH} \ - "Remove the plugin directories from Vim install directory." - -LangString str_unsection_rootdir ${LANG_DUTCH} \ - "Remove the Vim root directory" -LangString str_desc_rm_rootdir ${LANG_DUTCH} \ - "Remove the Vim root directory. It contains your Vim configuration files!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_DUTCH} \ -# "Er zijn $vim_old_ver_count Vim versies op je systeem gevonden.$\r$\n\ -# Deze installatie kan omgaan met maximaal ${VIM_MAX_OLD_VER} versies.$\r$\n\ -# Verwijder a.u.b. wat versies en probeer het dan opnieuw." - -#LangString str_msg_invalid_root ${LANG_DUTCH} \ -# "Ongeldig installatiepad: $vim_install_root!$\r$\n\ -# Het moet eindelijk op $\"vim$\"." - -#LangString str_msg_bin_mismatch ${LANG_DUTCH} \ -# "Binair pad onjuist!$\r$\n$\r$\n\ -# Het binaire pad zou $\"$vim_bin_path$\" moeten zijn,$\r$\n\ -# maar het systeem geeft aan dat het binaire pad $\"$INSTDIR$\" is." - -#LangString str_msg_vim_running ${LANG_DUTCH} \ -# "Vim is nog actief op je systeem.$\r$\n\ -# Sluit a.u.b. alle instanties van Vim voordat je verder gaat." - -#LangString str_msg_register_ole ${LANG_DUTCH} \ -# "Bezig met proberen om Vim te registreren met OLE. \ -# Er is geen bericht dat aangeeft of deze operatie slaagt." - -#LangString str_msg_unreg_ole ${LANG_DUTCH} \ -# "Bezig met proberen om Vim te de-registreren met OLE. \ -# Er is geen bericht dat aangeeft of deze operatie slaagt." - -#LangString str_msg_rm_start ${LANG_DUTCH} \ -# "De volgende versies worden verwijderd:" - -#LangString str_msg_rm_fail ${LANG_DUTCH} \ -# "De volgende versies konden niet worden verwijderd:" - -#LangString str_msg_no_rm_key ${LANG_DUTCH} \ -# "Kan de uninstaller register sleutel niet vinden." - -#LangString str_msg_no_rm_reg ${LANG_DUTCH} \ -# "Kan de uninstaller niet vinden via het register." - -#LangString str_msg_no_rm_exe ${LANG_DUTCH} \ -# "Kan geen toegang krijgen tot de uninstaller." - -#LangString str_msg_rm_copy_fail ${LANG_DUTCH} \ -# "Kon de uninstaller niet naar een tijdelijke map kopiëren." - -#LangString str_msg_rm_run_fail ${LANG_DUTCH} \ -# "Kon de uninstaller niet uitvoeren." - -#LangString str_msg_abort_install ${LANG_DUTCH} \ -# "Installatie wordt gestopt." - -LangString str_msg_install_fail ${LANG_DUTCH} \ - "Installatie is mislukt." - -LangString str_msg_rm_exe_fail ${LANG_DUTCH} \ - "Sommige bestanden in $0 zijn niet verwijderd!$\r$\n\ - Dit moet je handmatig doen." - -#LangString str_msg_rm_root_fail ${LANG_DUTCH} \ -# "WAARSCHUWING: Kan $\"$vim_install_root$\" niet verwijderen omdat het niet leeg is!" - -LangString str_msg_uninstalling ${LANG_DUTCH} \ - "Uninstalling the old version..." - -LangString str_msg_registering ${LANG_DUTCH} \ - "Registering..." - -LangString str_msg_unregistering ${LANG_DUTCH} \ - "Unregistering..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_DUTCH} \ - "Choose _vimrc settings" -LangString str_vimrc_page_subtitle ${LANG_DUTCH} \ - "Choose the settings for enhancement, keyboard and mouse." - -LangString str_msg_compat_title ${LANG_DUTCH} \ - " Vi / Vim behavior " -LangString str_msg_compat_desc ${LANG_DUTCH} \ - "&Compatibility and enhancements" -LangString str_msg_compat_vi ${LANG_DUTCH} \ - "Vi compatible" -LangString str_msg_compat_vim ${LANG_DUTCH} \ - "Vim original" -LangString str_msg_compat_defaults ${LANG_DUTCH} \ - "Vim with some enhancements (load defaults.vim)" -LangString str_msg_compat_all ${LANG_DUTCH} \ - "Vim with all enhancements (load vimrc_example.vim) (Default)" - -LangString str_msg_keymap_title ${LANG_DUTCH} \ - " Mappings " -LangString str_msg_keymap_desc ${LANG_DUTCH} \ - "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" -LangString str_msg_keymap_default ${LANG_DUTCH} \ - "Do not remap keys (Default)" -LangString str_msg_keymap_windows ${LANG_DUTCH} \ - "Remap a few keys" - -LangString str_msg_mouse_title ${LANG_DUTCH} \ - " Mouse " -LangString str_msg_mouse_desc ${LANG_DUTCH} \ - "&Behavior of right and left buttons" -LangString str_msg_mouse_default ${LANG_DUTCH} \ - "Right: popup menu, Left: visual mode (Default)" -LangString str_msg_mouse_windows ${LANG_DUTCH} \ - "Right: popup menu, Left: select mode (Windows)" -LangString str_msg_mouse_unix ${LANG_DUTCH} \ - "Right: extends selection, Left: visual mode (Unix)" diff --git a/nsis/lang/english.nsi b/nsis/lang/english.nsi deleted file mode 100644 index d80f6f3686..0000000000 --- a/nsis/lang/english.nsi +++ /dev/null @@ -1,288 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# english.nsi: English language strings for gvim NSIS installer. -# -# Locale ID : 1033 -# Locale Name : en -# fileencoding : UTF-8 -# Author : Guopeng Wen, Ken Takata - -!insertmacro MUI_LANGUAGE "English" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_ENGLISH} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_ENGLISH} \ - "$(^Name) Uninstall" - -############################################################################## -# License file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file ${LANG_ENGLISH} "..\lang\LICENSE.nsis.txt" - -############################################################################## -# README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file ${LANG_ENGLISH} "README.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_ENGLISH} \ -# "Destination Folder (Must end with $\"vim$\")" - -LangString str_show_readme ${LANG_ENGLISH} \ - "Show README after installation finished" - -# Install types: -LangString str_type_typical ${LANG_ENGLISH} \ - "Typical" - -LangString str_type_minimal ${LANG_ENGLISH} \ - "Minimal" - -LangString str_type_full ${LANG_ENGLISH} \ - "Full" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_ENGLISH} \ - "Uninstall Existing Version(s)" -LangString str_desc_old_ver ${LANG_ENGLISH} \ - "Uninstall existing Vim version(s) from your system." - -LangString str_section_exe ${LANG_ENGLISH} \ - "Vim GUI and runtime files" -LangString str_desc_exe ${LANG_ENGLISH} \ - "Vim GUI executables and runtime files. This component is required." - -LangString str_section_console ${LANG_ENGLISH} \ - "Vim console program" -LangString str_desc_console ${LANG_ENGLISH} \ - "Console version of Vim (vim.exe)." - -LangString str_section_batch ${LANG_ENGLISH} \ - "Create .bat files" -LangString str_desc_batch ${LANG_ENGLISH} \ - "Create .bat files for Vim variants in the Windows directory for \ - command line use." - -LangString str_group_icons ${LANG_ENGLISH} \ - "Create icons for Vim" -LangString str_desc_icons ${LANG_ENGLISH} \ - "Create icons for Vim at various locations to facilitate easy access." - -LangString str_section_desktop ${LANG_ENGLISH} \ - "On the Desktop" -LangString str_desc_desktop ${LANG_ENGLISH} \ - "Create icons for gVim executables on the desktop." - -LangString str_section_start_menu ${LANG_ENGLISH} \ - "In the Start Menu Programs Folder" -LangString str_desc_start_menu ${LANG_ENGLISH} \ - "Add Vim in the programs folder of the start menu." - -#LangString str_section_quick_launch ${LANG_ENGLISH} \ -# "In the Quick Launch Bar" -#LangString str_desc_quick_launch ${LANG_ENGLISH} \ -# "Add Vim shortcut in the quick launch bar." - -LangString str_section_edit_with ${LANG_ENGLISH} \ - "Add Vim Context Menu" -LangString str_desc_edit_with ${LANG_ENGLISH} \ - "Add Vim to the $\"Open With...$\" context menu list." - -#LangString str_section_edit_with32 ${LANG_ENGLISH} \ -# "32-bit Version" -#LangString str_desc_edit_with32 ${LANG_ENGLISH} \ -# "Add Vim to the $\"Open With...$\" context menu list \ -# for 32-bit applications." - -#LangString str_section_edit_with64 ${LANG_ENGLISH} \ -# "64-bit Version" -#LangString str_desc_edit_with64 ${LANG_ENGLISH} \ -# "Add Vim to the $\"Open With...$\" context menu list \ -# for 64-bit applications." - -LangString str_section_vim_rc ${LANG_ENGLISH} \ - "Create Default Config" -LangString str_desc_vim_rc ${LANG_ENGLISH} \ - "Create a default config file (_vimrc) if one does not already exist." - -LangString str_group_plugin ${LANG_ENGLISH} \ - "Create Plugin Directories" -LangString str_desc_plugin ${LANG_ENGLISH} \ - "Create plugin directories. Plugin directories allow extending Vim \ - by dropping a file into a directory." - -LangString str_section_plugin_home ${LANG_ENGLISH} \ - "Private" -LangString str_desc_plugin_home ${LANG_ENGLISH} \ - "Create plugin directories in HOME directory." - -LangString str_section_plugin_vim ${LANG_ENGLISH} \ - "Shared" -LangString str_desc_plugin_vim ${LANG_ENGLISH} \ - "Create plugin directories in Vim install directory, it is used for \ - everybody on the system." - -LangString str_section_nls ${LANG_ENGLISH} \ - "Native Language Support" -LangString str_desc_nls ${LANG_ENGLISH} \ - "Install files for native language support." - -LangString str_unsection_register ${LANG_ENGLISH} \ - "Unregister Vim" -LangString str_desc_unregister ${LANG_ENGLISH} \ - "Unregister Vim from the system." - -LangString str_unsection_exe ${LANG_ENGLISH} \ - "Remove Vim Executables/Runtime Files" -LangString str_desc_rm_exe ${LANG_ENGLISH} \ - "Remove all Vim executables and runtime files." - -LangString str_ungroup_plugin ${LANG_ENGLISH} \ - "Remove plugin directories" -LangString str_desc_rm_plugin ${LANG_ENGLISH} \ - "Remove the plugin directories if they are empty." - -LangString str_unsection_plugin_home ${LANG_ENGLISH} \ - "Private" -LangString str_desc_rm_plugin_home ${LANG_ENGLISH} \ - "Remove the plugin directories from HOME directory." - -LangString str_unsection_plugin_vim ${LANG_ENGLISH} \ - "Shared" -LangString str_desc_rm_plugin_vim ${LANG_ENGLISH} \ - "Remove the plugin directories from Vim install directory." - -LangString str_unsection_rootdir ${LANG_ENGLISH} \ - "Remove the Vim root directory" -LangString str_desc_rm_rootdir ${LANG_ENGLISH} \ - "Remove the Vim root directory. It contains your Vim configuration files!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_ENGLISH} \ -# "Found $vim_old_ver_count Vim versions on your system.$\r$\n\ -# This installer can only handle ${VIM_MAX_OLD_VER} versions \ -# at most.$\r$\n\ -# Please remove some versions and start again." - -#LangString str_msg_invalid_root ${LANG_ENGLISH} \ -# "Invalid install path: $vim_install_root!$\r$\n\ -# It should end with $\"vim$\"." - -#LangString str_msg_bin_mismatch ${LANG_ENGLISH} \ -# "Binary path mismatch!$\r$\n$\r$\n\ -# Expect the binary path to be $\"$vim_bin_path$\",$\r$\n\ -# but system indicates the binary path is $\"$INSTDIR$\"." - -#LangString str_msg_vim_running ${LANG_ENGLISH} \ -# "Vim is still running on your system.$\r$\n\ -# Please close all instances of Vim before you continue." - -#LangString str_msg_register_ole ${LANG_ENGLISH} \ -# "Attempting to register Vim with OLE. \ -# There is no message indicates whether this works or not." - -#LangString str_msg_unreg_ole ${LANG_ENGLISH} \ -# "Attempting to unregister Vim with OLE. \ -# There is no message indicates whether this works or not." - -#LangString str_msg_rm_start ${LANG_ENGLISH} \ -# "Uninstalling the following version:" - -#LangString str_msg_rm_fail ${LANG_ENGLISH} \ -# "Fail to uninstall the following version:" - -#LangString str_msg_no_rm_key ${LANG_ENGLISH} \ -# "Cannot find uninstaller registry key." - -#LangString str_msg_no_rm_reg ${LANG_ENGLISH} \ -# "Cannot find uninstaller from registry." - -#LangString str_msg_no_rm_exe ${LANG_ENGLISH} \ -# "Cannot access uninstaller." - -#LangString str_msg_rm_copy_fail ${LANG_ENGLISH} \ -# "Fail to copy uninstaller to temporary directory." - -#LangString str_msg_rm_run_fail ${LANG_ENGLISH} \ -# "Fail to run uninstaller." - -#LangString str_msg_abort_install ${LANG_ENGLISH} \ -# "Installer will abort." - -LangString str_msg_install_fail ${LANG_ENGLISH} \ - "Installation failed. Better luck next time." - -LangString str_msg_rm_exe_fail ${LANG_ENGLISH} \ - "Some files in $0 have not been deleted!$\r$\n\ - You must do it manually." - -#LangString str_msg_rm_root_fail ${LANG_ENGLISH} \ -# "WARNING: Cannot remove $\"$vim_install_root$\", it is not empty!" - -LangString str_msg_uninstalling ${LANG_ENGLISH} \ - "Uninstalling the old version..." - -LangString str_msg_registering ${LANG_ENGLISH} \ - "Registering..." - -LangString str_msg_unregistering ${LANG_ENGLISH} \ - "Unregistering..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_ENGLISH} \ - "Choose _vimrc settings" -LangString str_vimrc_page_subtitle ${LANG_ENGLISH} \ - "Choose the settings for enhancement, keyboard and mouse." - -LangString str_msg_compat_title ${LANG_ENGLISH} \ - " Vi / Vim behavior " -LangString str_msg_compat_desc ${LANG_ENGLISH} \ - "&Compatibility and enhancements" -LangString str_msg_compat_vi ${LANG_ENGLISH} \ - "Vi compatible" -LangString str_msg_compat_vim ${LANG_ENGLISH} \ - "Vim original" -LangString str_msg_compat_defaults ${LANG_ENGLISH} \ - "Vim with some enhancements (load defaults.vim)" -LangString str_msg_compat_all ${LANG_ENGLISH} \ - "Vim with all enhancements (load vimrc_example.vim) (Default)" - -LangString str_msg_keymap_title ${LANG_ENGLISH} \ - " Mappings " -LangString str_msg_keymap_desc ${LANG_ENGLISH} \ - "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" -LangString str_msg_keymap_default ${LANG_ENGLISH} \ - "Do not remap keys (Default)" -LangString str_msg_keymap_windows ${LANG_ENGLISH} \ - "Remap a few keys" - -LangString str_msg_mouse_title ${LANG_ENGLISH} \ - " Mouse " -LangString str_msg_mouse_desc ${LANG_ENGLISH} \ - "&Behavior of right and left buttons" -LangString str_msg_mouse_default ${LANG_ENGLISH} \ - "Right: popup menu, Left: visual mode (Default)" -LangString str_msg_mouse_windows ${LANG_ENGLISH} \ - "Right: popup menu, Left: select mode (Windows)" -LangString str_msg_mouse_unix ${LANG_ENGLISH} \ - "Right: extends selection, Left: visual mode (Unix)" diff --git a/nsis/lang/german.nsi b/nsis/lang/german.nsi deleted file mode 100644 index 59d65a3425..0000000000 --- a/nsis/lang/german.nsi +++ /dev/null @@ -1,290 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# german.nsi : German language strings for gvim NSIS installer. -# -# Locale ID : 1031 -# Locale Name : de -# fileencoding : UTF-8 -# Author : Christian Brabandt, tux - -!insertmacro MUI_LANGUAGE "German" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_GERMAN} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_GERMAN} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_GERMAN} "..\lang\LICENSE.de.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_GERMAN} "README.de.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_GERMAN} \ -# "Zielverzeichnis auswählen (muss auf $\"vim$\" enden)" - -LangString str_show_readme ${LANG_GERMAN} \ - "README-Datei nach der Installation anzeigen" - -# Install types: -LangString str_type_typical ${LANG_GERMAN} \ - "Typisch" - -LangString str_type_minimal ${LANG_GERMAN} \ - "Minimal" - -LangString str_type_full ${LANG_GERMAN} \ - "Vollständig" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_GERMAN} \ - "Vorherige Version deinstallieren" -LangString str_desc_old_ver ${LANG_GERMAN} \ - "Vorherige installierte Versionen auf diesem System deinstallieren." - -LangString str_section_exe ${LANG_GERMAN} \ - "Vim GUI" -LangString str_desc_exe ${LANG_GERMAN} \ - "Vim (Anwendung) und Laufzeitdateien (Dieser Teil ist zwingend \ - erforderlich)." - -LangString str_section_console ${LANG_GERMAN} \ - "Vim Konsolenanwendung" -LangString str_desc_console ${LANG_GERMAN} \ - "Konsolenversion von Vim." - -LangString str_section_batch ${LANG_GERMAN} \ - ".bat-Dateien erstellen" -LangString str_desc_batch ${LANG_GERMAN} \ - ".bat-Dateien erstellen, um Vim in der Konsole auszuführen." - -LangString str_group_icons ${LANG_GERMAN} \ - "Vim-Verknüpfungen erstellen" -LangString str_desc_icons ${LANG_GERMAN} \ - "Verknüpfungen mit Vim für einfachen Aufruf erstellen." - -LangString str_section_desktop ${LANG_GERMAN} \ - "Auf dem Desktop" -LangString str_desc_desktop ${LANG_GERMAN} \ - "Icons für GVim auf dem Desktop erstellen." - -LangString str_section_start_menu ${LANG_GERMAN} \ - "Im Startmenü" -LangString str_desc_start_menu ${LANG_GERMAN} \ - "Vim im Programmverzeichnis des Startmenüs hinzufügen." - -#LangString str_section_quick_launch ${LANG_GERMAN} \ -# "In der Schnellstartleiste" -#LangString str_desc_quick_launch ${LANG_GERMAN} \ -# "Verknüpfung zu Vim in der Schnellstartleiste ablegen." - -LangString str_section_edit_with ${LANG_GERMAN} \ - "Vim zum Kontextmenü hinzufügen" -LangString str_desc_edit_with ${LANG_GERMAN} \ - "Vim in das $\"Öffnen mit...$\"-Kontextmenü einfügen." - -#LangString str_section_edit_with32 ${LANG_GERMAN} \ -# "32-Bit-Version" -#LangString str_desc_edit_with32 ${LANG_GERMAN} \ -# "Vim in das $\"Öffnen mit...$\"-Kontextmenü \ -# für 32-Bit-Anwendungen integrieren." - -#LangString str_section_edit_with64 ${LANG_GERMAN} \ -# "64-Bit-Version" -#LangString str_desc_edit_with64 ${LANG_GERMAN} \ -# "Vim in das $\"Öffnen mit...$\"-Kontextmenü \ -# für 64-Bit-Anwendungen integrieren." - -LangString str_section_vim_rc ${LANG_GERMAN} \ - "Standard-Konfigurationsdatei erstellen" -LangString str_desc_vim_rc ${LANG_GERMAN} \ - "Eine Standard-Konfigurationsdatei (_vimrc) erstellen, \ - falls noch keine existiert." - -LangString str_group_plugin ${LANG_GERMAN} \ - "Plugin-Verzeichnisse anlegen" -LangString str_desc_plugin ${LANG_GERMAN} \ - "Plugin-Verzeichnisse anlegen. Plugins erlauben es, Vim \ - um zusätzliche Funktionen zu erweitern." - -LangString str_section_plugin_home ${LANG_GERMAN} \ - "Privat" -LangString str_desc_plugin_home ${LANG_GERMAN} \ - "Erstelle Plugin-Verzeichnis im HOME Benutzerverzeichnis." - -LangString str_section_plugin_vim ${LANG_GERMAN} \ - "Freigegeben" -LangString str_desc_plugin_vim ${LANG_GERMAN} \ - "Plugin-Verzeichnisse im Vim-Installationsverzeichnis erstellen. Diese werden \ - für alle Benutzer dieses Systems genutzt." - -LangString str_section_nls ${LANG_GERMAN} \ - "Unterstützung für andere Sprachen" -LangString str_desc_nls ${LANG_GERMAN} \ - "Dateien zur Unterstützung anderer Sprachen als Englisch installieren." - -LangString str_unsection_register ${LANG_GERMAN} \ - "Vim deinstallieren" -LangString str_desc_unregister ${LANG_GERMAN} \ - "Vim vom System entfernen." - -LangString str_unsection_exe ${LANG_GERMAN} \ - "Vim-Anwendung und Laufzeitdateien entfernen" -LangString str_desc_rm_exe ${LANG_GERMAN} \ - "Alle Vim-Anwendungen und Laufzeitdateien von diesem System entfernen." - -LangString str_ungroup_plugin ${LANG_GERMAN} \ - "Entferne Plugin-Verzeichnisse" -LangString str_desc_rm_plugin ${LANG_GERMAN} \ - "Entferne Plugin-Verzeichnisse, falls sie leer sind." - -LangString str_unsection_plugin_home ${LANG_GERMAN} \ - "Privat" -LangString str_desc_rm_plugin_home ${LANG_GERMAN} \ - "Entfernt die Plugin-Verzeichnisse aus dem HOME Benutzerverzeichnis." - -LangString str_unsection_plugin_vim ${LANG_GERMAN} \ - "Freigegeben" -LangString str_desc_rm_plugin_vim ${LANG_GERMAN} \ - "Entfernt das Plugin-Verzeichnis aus dem Vim-Installationsverzeichnis." - -LangString str_unsection_rootdir ${LANG_GERMAN} \ - "Entferne Vim Installationsverzeichnis" -LangString str_desc_rm_rootdir ${LANG_GERMAN} \ - "Entfernt das Vim Installationsverzeichnis. Es enthält die Vim Konfigurationsdateien!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_GERMAN} \ -# "$vim_old_ver_count Vim-Versionen auf diesem System gefunden..$\r$\n\ -# Dieser Installer kann maximal ${VIM_MAX_OLD_VER} Versionen \ -# handhaben.$\r$\n\ -# Bitte alte Versionen entfernen und noch einmal probieren." - -#LangString str_msg_invalid_root ${LANG_GERMAN} \ -# "Nicht gültiges Installationsverzeichnis: $vim_install_root!$\r$\n\ -# Der Pfad muss auf $\"vim$\" enden." - -#LangString str_msg_bin_mismatch ${LANG_GERMAN} \ -# "Pfaddiskrepanz!$\r$\n$\r$\n\ -# Erwarte Anwendungsverzeichnis $\"$vim_bin_path$\",$\r$\n\ -# aber fand Anwendungspfad $\"$INSTDIR$\" vor." - -#LangString str_msg_vim_running ${LANG_GERMAN} \ -# "Laufender Vim-Prozess erkannt.$\r$\n\ -# Bitte alle laufenden Vim-Prozesse vor dem Fortfahren beenden." - -#LangString str_msg_register_ole ${LANG_GERMAN} \ -# "Versuche OLE-Registrierung durchzuführen." - -#LangString str_msg_unreg_ole ${LANG_GERMAN} \ -# "Versuche OLE-Registrierung zu löschen." - -#LangString str_msg_rm_start ${LANG_GERMAN} \ -# "Deinstalliere die folgende Version:" - -#LangString str_msg_rm_fail ${LANG_GERMAN} \ -# "Deinstallation der Version fehlgeschlagen:" - -#LangString str_msg_no_rm_key ${LANG_GERMAN} \ -# "Deinstallationsschlüssel in der Registrierungsdatenbank nicht gefunden." - -#LangString str_msg_no_rm_reg ${LANG_GERMAN} \ -# "Kein Uninstaller in der Registrierungsdatenbank gefunden." - -#LangString str_msg_no_rm_exe ${LANG_GERMAN} \ -# "Kein Zugriff auf den Uninstaller." - -#LangString str_msg_rm_copy_fail ${LANG_GERMAN} \ -# "Fehler beim Kopieren des Uninstallers in ein temporäres Verzeichnis." - -#LangString str_msg_rm_run_fail ${LANG_GERMAN} \ -# "Fehler beim Aufruf des Uninstallers." - -#LangString str_msg_abort_install ${LANG_GERMAN} \ -# "Installation wird abgebrochen." - -LangString str_msg_install_fail ${LANG_GERMAN} \ - "Installation fehlerhaft beendet." - -LangString str_msg_rm_exe_fail ${LANG_GERMAN} \ - "Einige Dateien im Pfad $0 konnten nicht gelöscht werden!$\r$\n\ - Diese Dateien müssen manuell gelöscht werden." - -#LangString str_msg_rm_root_fail ${LANG_GERMAN} \ -# "Achtung: Kann Verzeichnis $\"$vim_install_root$\" nicht entfernen, \ -# weil es nicht leer ist!" - -LangString str_msg_uninstalling ${LANG_GERMAN} \ - "Deinstalliere alte Version..." - -LangString str_msg_registering ${LANG_GERMAN} \ - "Registriere..." - -LangString str_msg_unregistering ${LANG_GERMAN} \ - "Entferne Registrierung..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_GERMAN} \ - "Wähle _vimrc Konfigurationsoptionen" -LangString str_vimrc_page_subtitle ${LANG_GERMAN} \ - "Wähle Einstellungen zur Kompatibilität, Tastatur und Maus." - -LangString str_msg_compat_title ${LANG_GERMAN} \ - " Vi / Vim Verhalten " -LangString str_msg_compat_desc ${LANG_GERMAN} \ - "&Kompatibilität und Erweiterungen" -LangString str_msg_compat_vi ${LANG_GERMAN} \ - "Vi-kompatibel" -LangString str_msg_compat_vim ${LANG_GERMAN} \ - "Vim Original" -LangString str_msg_compat_defaults ${LANG_GERMAN} \ - "Vim mit einigen Erweiterungen (Lädt defaults.vim)" -LangString str_msg_compat_all ${LANG_GERMAN} \ - "Vim mit allen Erweiterungen (Lädt vimrc_example.vim) (Standard)" - -LangString str_msg_keymap_title ${LANG_GERMAN} \ - " Mappings für Windows Standard Tastenkombinationen " -LangString str_msg_keymap_desc ${LANG_GERMAN} \ - "&Einige Tasten umkonfigurieren (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" -LangString str_msg_keymap_default ${LANG_GERMAN} \ - "Keine Tasten umkonfigurieren (Standard)" -LangString str_msg_keymap_windows ${LANG_GERMAN} \ - "Einige Tasten umkonfigurieren" - -LangString str_msg_mouse_title ${LANG_GERMAN} \ - " Maus " -LangString str_msg_mouse_desc ${LANG_GERMAN} \ - "&Verhalten der linken und rechten Buttons" -LangString str_msg_mouse_default ${LANG_GERMAN} \ - "Rechts: Popup Menü, Links: Visueller Modus (Standard)" -LangString str_msg_mouse_windows ${LANG_GERMAN} \ - "Rechts: Popup Menü, Links: Auswahl Modus (Windows)" -LangString str_msg_mouse_unix ${LANG_GERMAN} \ - "Rechts: Auswahl erweitern, Links: Visueller Modus (Unix)" diff --git a/nsis/lang/greek.nsi b/nsis/lang/greek.nsi deleted file mode 100644 index d746cb3a2c..0000000000 --- a/nsis/lang/greek.nsi +++ /dev/null @@ -1,291 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# greek.nsi: Greek language strings for gvim NSIS installer. -# -# Locale ID : 1032 -# Locale Name : el -# fileencoding : UTF-8 -# Author : Christos Longros - -!insertmacro MUI_LANGUAGE "Greek" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_GREEK} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_GREEK} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_GREEK} "..\lang\LICENSE.el.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_GREEK} "README.el.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_GREEK} \ -# "Φάκελος Ï€ÏοοÏισμός (ΠÏέπει να τελειώνει σε $\"vim$\")" - -LangString str_show_readme ${LANG_GREEK} \ - "Εμφάνιση README μετά την ολοκλήÏωση της εγκατάστασης" - -# Install types: -LangString str_type_typical ${LANG_GREEK} \ - "Typical" - -LangString str_type_minimal ${LANG_GREEK} \ - "Minimal" - -LangString str_type_full ${LANG_GREEK} \ - "Full" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_GREEK} \ - "Απεγκατάσταση υπάÏχουσων εκδόσεων" -LangString str_desc_old_ver ${LANG_GREEK} \ - "Απεγκατάσταση υπάÏχουσων εκδόσεων Vim από το σÏστημά σας." - -LangString str_section_exe ${LANG_GREEK} \ - "Vim GUI and runtime files" -LangString str_desc_exe ${LANG_GREEK} \ - "Vim GUI executables and runtime files. This component is required." - -LangString str_section_console ${LANG_GREEK} \ - "Vim console program" -LangString str_desc_console ${LANG_GREEK} \ - "Console version of Vim (vim.exe)." - -LangString str_section_batch ${LANG_GREEK} \ - "ΔημιουÏγία αÏχείων .bat" -LangString str_desc_batch ${LANG_GREEK} \ - "ΔημιουÏγία αÏχείων .bat από παÏάγωγα Vim στον κατάλογο των Windows για \ - χÏήση γÏαμμής εντολών." - -LangString str_group_icons ${LANG_GREEK} \ - "ΔημιουÏγία εικονιδίων Vim" -LangString str_desc_icons ${LANG_GREEK} \ - "ΔημιουÏγία εικονιδίων για τον Vim σε διάφοÏες τοποθεσίες για την διευκόλυνση της Ï€Ïοσβασιμότητας." - -LangString str_section_desktop ${LANG_GREEK} \ - "Στην επιφάνεια εÏγασίας" -LangString str_desc_desktop ${LANG_GREEK} \ - "ΔημιουÏγία εικονιδίων για gVim εκτελέσιμα στην επιφάνεια εÏγασίας." - -LangString str_section_start_menu ${LANG_GREEK} \ - "In the Start Menu Programs Folder" -LangString str_desc_start_menu ${LANG_GREEK} \ - "ΠÏοσθήκη του Vim στον φάκελο Ï€ÏογÏαμμάτων του Î¼ÎµÎ½Î¿Ï ÎµÎºÎºÎ¯Î½Î·ÏƒÎ·Ï‚." - -#LangString str_section_quick_launch ${LANG_GREEK} \ -# "In the Quick Launch Bar" -#LangString str_desc_quick_launch ${LANG_GREEK} \ -# "Add Vim shortcut in the quick launch bar." - -LangString str_section_edit_with ${LANG_GREEK} \ - "Add Vim Context Menu" -LangString str_desc_edit_with ${LANG_GREEK} \ - "Add Vim to the $\"Open With...$\" context menu list." - -#LangString str_section_edit_with32 ${LANG_GREEK} \ -# "32-bit Version" -#LangString str_desc_edit_with32 ${LANG_GREEK} \ -# "Add Vim to the $\"Open With...$\" context menu list \ -# for 32-bit applications." - -#LangString str_section_edit_with64 ${LANG_GREEK} \ -# "64-bit Version" -#LangString str_desc_edit_with64 ${LANG_GREEK} \ -# "Add Vim to the $\"Open With...$\" context menu list \ -# for 64-bit applications." - -LangString str_section_vim_rc ${LANG_GREEK} \ - "ΔημιουÏγία Ï€Ïοεπιλεγμένων Ïυθμίσεων" -LangString str_desc_vim_rc ${LANG_GREEK} \ - "ΔημιουÏγία Ï€Ïοεπιλεγμένου αÏχείου Ïυθμίσεων (_vimrc) αν δεν υπάÏχει ήδη." - -LangString str_group_plugin ${LANG_GREEK} \ - "ΔημιουÏγία καταλόγων Plugin" -LangString str_desc_plugin ${LANG_GREEK} \ - "ΔημιουÏγία καταλόγων plugin. Οι κατάλογοι Plugin επιτÏέπουν την επέκταση του Vim \ - με την μεταφοÏά ενός αÏχείου σε έναν κατάλογο." - -LangString str_section_plugin_home ${LANG_GREEK} \ - "Private" -LangString str_desc_plugin_home ${LANG_GREEK} \ - "ΔημιουÏγία καταλόγων plugin στον κατάλογο HOME." - -LangString str_section_plugin_vim ${LANG_GREEK} \ - "Shared" -LangString str_desc_plugin_vim ${LANG_GREEK} \ - "ΔημιουÏγία καταλόγων plugin στον κατάλογο εγκατάστασης του Vim, χÏησιμοποιείται από \ - όλους στο σÏστημα." - -LangString str_section_nls ${LANG_GREEK} \ - "Native Language Support" -LangString str_desc_nls ${LANG_GREEK} \ - "Install files for native language support." - -LangString str_unsection_register ${LANG_GREEK} \ - "Unregister Vim" -LangString str_desc_unregister ${LANG_GREEK} \ - "Unregister Vim from the system." - -LangString str_unsection_exe ${LANG_GREEK} \ - "Remove Vim Executables/Runtime Files" -LangString str_desc_rm_exe ${LANG_GREEK} \ - "Remove all Vim executables and runtime files." - -LangString str_ungroup_plugin ${LANG_GREEK} \ - "Remove plugin directories" -LangString str_desc_rm_plugin ${LANG_GREEK} \ - "Remove the plugin directories if they are empty." - -LangString str_unsection_plugin_home ${LANG_GREEK} \ - "Private" -LangString str_desc_rm_plugin_home ${LANG_GREEK} \ - "Remove the plugin directories from HOME directory." - -LangString str_unsection_plugin_vim ${LANG_GREEK} \ - "Shared" -LangString str_desc_rm_plugin_vim ${LANG_GREEK} \ - "Remove the plugin directories from Vim install directory." - -LangString str_unsection_rootdir ${LANG_GREEK} \ - "Remove the Vim root directory" -LangString str_desc_rm_rootdir ${LANG_GREEK} \ - "Remove the Vim root directory. It contains your Vim configuration files!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_GREEK} \ -# "Found $vim_old_ver_count Vim versions on your system.$\r$\n\ -# This installer can only handle ${VIM_MAX_OLD_VER} versions \ -# at most.$\r$\n\ -# Please remove some versions and start again." - -#LangString str_msg_invalid_root ${LANG_GREEK} \ -# "Invalid install path: $vim_install_root!$\r$\n\ -# It should end with $\"vim$\"." - -#LangString str_msg_bin_mismatch ${LANG_GREEK} \ -# "Binary path mismatch!$\r$\n$\r$\n\ -# Expect the binary path to be $\"$vim_bin_path$\",$\r$\n\ -# but system indicates the binary path is $\"$INSTDIR$\"." - -#LangString str_msg_vim_running ${LANG_GREEK} \ -# "Vim is still running on your system.$\r$\n\ -# Please close all instances of Vim before you continue." - -#LangString str_msg_register_ole ${LANG_GREEK} \ -# "Attempting to register Vim with OLE. \ -# There is no message indicates whether this works or not." - -#LangString str_msg_unreg_ole ${LANG_GREEK} \ -# "Attempting to unregister Vim with OLE. \ -# There is no message indicates whether this works or not." - -#LangString str_msg_rm_start ${LANG_GREEK} \ -# "Uninstalling the following version:" - -#LangString str_msg_rm_fail ${LANG_GREEK} \ -# "Fail to uninstall the following version:" - -#LangString str_msg_no_rm_key ${LANG_GREEK} \ -# "Cannot find uninstaller registry key." - -#LangString str_msg_no_rm_reg ${LANG_GREEK} \ -# "Cannot find uninstaller from registry." - -#LangString str_msg_no_rm_exe ${LANG_GREEK} \ -# "Cannot access uninstaller." - -#LangString str_msg_rm_copy_fail ${LANG_GREEK} \ -# "Fail to copy uninstaller to temporary directory." - -#LangString str_msg_rm_run_fail ${LANG_GREEK} \ -# "Αποτυχία εκτέλεσης της λειτουÏγίας απεγκατάστασης." - -#LangString str_msg_abort_install ${LANG_GREEK} \ -# "Installer will abort." - -LangString str_msg_install_fail ${LANG_GREEK} \ - "Η εγκατάσταση απέτυχε. Better luck next time." - -LangString str_msg_rm_exe_fail ${LANG_GREEK} \ - "ΜεÏικά αÏχεία στο $0 δεν έχουν διαγÏαφεί!$\r$\n\ - ΠÏέπει να το κάνετε χειÏοκίνητα." - -#LangString str_msg_rm_root_fail ${LANG_GREEK} \ -# "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ΑδÏνατη η αφαίÏεση $\"$vim_install_root$\", δεν είναι κενό!" - -LangString str_msg_uninstalling ${LANG_GREEK} \ - "Απεγκατάσταση παλιάς έκδοσης the old version..." - -LangString str_msg_registering ${LANG_GREEK} \ - "ΚαταχώÏηση..." - -LangString str_msg_unregistering ${LANG_GREEK} \ - "Unregistering..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_GREEK} \ - "Επιλογή Ïυθμίσεων _vimrc" -LangString str_vimrc_page_subtitle ${LANG_GREEK} \ - "Choose the settings for enhancement, keyboard and mouse." - -LangString str_msg_compat_title ${LANG_GREEK} \ - " ΣυμπεÏιφοÏά Vi / Vim " -LangString str_msg_compat_desc ${LANG_GREEK} \ - "&Compatibility and enhancements" -LangString str_msg_compat_vi ${LANG_GREEK} \ - "Vi compatible" -LangString str_msg_compat_vim ${LANG_GREEK} \ - "Vim original" -LangString str_msg_compat_defaults ${LANG_GREEK} \ - "Vim with some enhancements (load defaults.vim)" -LangString str_msg_compat_all ${LANG_GREEK} \ - "Vim with all enhancements (load vimrc_example.vim) (Default)" - -LangString str_msg_keymap_title ${LANG_GREEK} \ - " Mappings " -LangString str_msg_keymap_desc ${LANG_GREEK} \ - "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" -LangString str_msg_keymap_default ${LANG_GREEK} \ - "Do not remap keys (Default)" -LangString str_msg_keymap_windows ${LANG_GREEK} \ - "Remap a few keys" - -LangString str_msg_mouse_title ${LANG_GREEK} \ - " Ποντίκι " -LangString str_msg_mouse_desc ${LANG_GREEK} \ - "&Behavior of right and left buttons" -LangString str_msg_mouse_default ${LANG_GREEK} \ - "Right: popup menu, Left: visual mode (Default)" -LangString str_msg_mouse_windows ${LANG_GREEK} \ - "Right: popup menu, Left: select mode (Windows)" -LangString str_msg_mouse_unix ${LANG_GREEK} \ - "Right: extends selection, Left: visual mode (Unix)" - diff --git a/nsis/lang/italian.nsi b/nsis/lang/italian.nsi deleted file mode 100644 index 629d476589..0000000000 --- a/nsis/lang/italian.nsi +++ /dev/null @@ -1,288 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# italian.nsi : Italian language strings for gvim NSIS installer. -# -# Locale ID : 1040 -# Locale Name : it -# fileencoding : UTF-8 -# Author : Antonio Colombo, bovirus - revision: 12.05.2023 - -!insertmacro MUI_LANGUAGE "Italian" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_ITALIAN} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_ITALIAN} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file ${LANG_ITALIAN} "..\lang\LICENSE.it.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file ${LANG_ITALIAN} "README.it.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_ITALIAN} \ -# "Cartella installazione (il percorso deve finire con $\"vim$\")" - -LangString str_show_readme ${LANG_ITALIAN} \ - "Visualizza file README a fine installazione" - -# Install types: -LangString str_type_typical ${LANG_ITALIAN} \ - "Tipica" - -LangString str_type_minimal ${LANG_ITALIAN} \ - "Minima" - -LangString str_type_full ${LANG_ITALIAN} \ - "Completa" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_ITALIAN} \ - "Disinstalla versioni esistenti" -LangString str_desc_old_ver ${LANG_ITALIAN} \ - "Disinstalla versioni esistenti di Vim." - -LangString str_section_exe ${LANG_ITALIAN} \ - "GUI e file supporto Vim" -LangString str_desc_exe ${LANG_ITALIAN} \ - "GUI programmi e file di supporto Vim. Questa componente è indispensabile." - -LangString str_section_console ${LANG_ITALIAN} \ - "Console Vim (vim.exe per MS-DOS)" -LangString str_desc_console ${LANG_ITALIAN} \ - "Versione console di Vim (vim.exe)." - -LangString str_section_batch ${LANG_ITALIAN} \ - "Crea file .bat" -LangString str_desc_batch ${LANG_ITALIAN} \ - "Crea file .bat per varianti di Vim nella cartella \ - di Windows, per utilizzo da riga di comando." - -LangString str_group_icons ${LANG_ITALIAN} \ - "Crea icone Vim" -LangString str_desc_icons ${LANG_ITALIAN} \ - "Crea icone Vim per rendere facile l'accesso." - -LangString str_section_desktop ${LANG_ITALIAN} \ - "Icone sul Desktop" -LangString str_desc_desktop ${LANG_ITALIAN} \ - "Crea icone programma gVim sul desktop." - -LangString str_section_start_menu ${LANG_ITALIAN} \ - "Gruppo programmi menù START" -LangString str_desc_start_menu ${LANG_ITALIAN} \ - "Aggiunge gruppo programmi al menù START." - -#LangString str_section_quick_launch ${LANG_ITALIAN} \ -# "Barra avvio veloce" -#LangString str_desc_quick_launch ${LANG_ITALIAN} \ -# "Aggiunge un collegamento a Vim nella barra di avvio veloce." - -LangString str_section_edit_with ${LANG_ITALIAN} \ - "Aggiungi Vim al menù contestuale" -LangString str_desc_edit_with ${LANG_ITALIAN} \ - "Aggiunge Vim al menu contestuale $\"Apri con...$\"." - -#LangString str_section_edit_with32 ${LANG_ITALIAN} \ -# "Versione a 32 bit" -#LangString str_desc_edit_with32 ${LANG_ITALIAN} \ -# "Aggiungi Vim al menu contestuale $\"Apri con...$\" \ -# per applicazioni a 32 bit." - -#LangString str_section_edit_with64 ${LANG_ITALIAN} \ -# "Versione a 64 bit" -#LangString str_desc_edit_with64 ${LANG_ITALIAN} \ -# "Aggiunge Vim al menu contestuale $\"Apri con...$\" \ -# per applicazioni a 64 bit." - -LangString str_section_vim_rc ${LANG_ITALIAN} \ - "Crea configurazione predefinita" -LangString str_desc_vim_rc ${LANG_ITALIAN} \ - "Crea, se non ne esiste già uno, un file configurazione predefinito (_vimrc) ." - -LangString str_group_plugin ${LANG_ITALIAN} \ - "Crea cartella plugin" -LangString str_desc_plugin ${LANG_ITALIAN} \ - "Crea cartella plugin. I plugin consentono di aggiungere funzionalità \ - a Vim copiando i relativi file in una di queste cartelle." - -LangString str_section_plugin_home ${LANG_ITALIAN} \ - "Privata" -LangString str_desc_plugin_home ${LANG_ITALIAN} \ - "Crea cartella plugin nella cartella HOME." - -LangString str_section_plugin_vim ${LANG_ITALIAN} \ - "Condivisa" -LangString str_desc_plugin_vim ${LANG_ITALIAN} \ - "Crea cartella plugin nella cartella di installazione di Vim \ - per uso da parte di tutti gli utenti di questo sistema." - -LangString str_section_nls ${LANG_ITALIAN} \ - "Supporto nativo lingua (NLS)" -LangString str_desc_nls ${LANG_ITALIAN} \ - "Installa i file per il supporto nativo multilingua." - -LangString str_unsection_register ${LANG_ITALIAN} \ - "Rimuovi Vim dal registro" -LangString str_desc_unregister ${LANG_ITALIAN} \ - "Rimuove Vim dal registro di configurazione sistema." - -LangString str_unsection_exe ${LANG_ITALIAN} \ - "Elimina programmi/file di supporto Vim" -LangString str_desc_rm_exe ${LANG_ITALIAN} \ - "Elimina tutti i programmi/file di supporto di Vim." - -LangString str_ungroup_plugin ${LANG_ITALIAN} \ - "Elimina cartelle plugin" -LangString str_desc_rm_plugin ${LANG_ITALIAN} \ - "Elimina le cartelle plugin se sono vuote." - -LangString str_unsection_plugin_home ${LANG_ITALIAN} \ - "Private" -LangString str_desc_rm_plugin_home ${LANG_ITALIAN} \ - "Elimina cartelle plugin nella cartella HOME." - -LangString str_unsection_plugin_vim ${LANG_ITALIAN} \ - "Condivise" -LangString str_desc_rm_plugin_vim ${LANG_ITALIAN} \ - "Elimina cartelle plugin nella cartella di installazione di Vim." - -LangString str_unsection_rootdir ${LANG_ITALIAN} \ - "Elimina la cartella di installazione di Vim" -LangString str_desc_rm_rootdir ${LANG_ITALIAN} \ - "Elimina la cartella di installazione di Vim. Contiene i file di configurazione!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_ITALIAN} \ -# "Rilevate nel sistema $vim_old_ver_count versioni di Vim.$\r$\n\ -# Questo programma di installazione può gestire solo \ -# ${VIM_MAX_OLD_VER} versioni.$\r$\n\ -# Disinstalla qualche versione precedente e ricomincia." - -#LangString str_msg_invalid_root ${LANG_ITALIAN} \ -# "Nome cartella di installazione non valida: $vim_install_root!$\r$\n\ -# Dovrebbe terminare con $\"vim$\"." - -#LangString str_msg_bin_mismatch ${LANG_ITALIAN} \ -# "Conflitto nella cartella di installazione!$\r$\n$\r$\n\ -# La cartella di installazione dev'essere $\"$vim_bin_path$\",$\r$\n\ -# ma il sistema indica che il percorso è $\"$INSTDIR$\"." - -#LangString str_msg_vim_running ${LANG_ITALIAN} \ -# "Vim è ancora in esecuzione nel sistema.$\r$\n\ -# Per continuare chiudi tutte le sessioni attive di Vim." - -#LangString str_msg_register_ole ${LANG_ITALIAN} \ -# "Tentativo di registrazione di Vim con OLE. \ -# Non ci sono messaggi che indicano se l'operazione è riuscita." - -#LangString str_msg_unreg_ole ${LANG_ITALIAN} \ -# "Tentativo di rimozione di VIM dal registro via OLE. \ -# Non ci sono messaggi che indicano se l'operazione è riuscita." - -#LangString str_msg_rm_start ${LANG_ITALIAN} \ -# "Disinstallazione della versione:" - -#LangString str_msg_rm_fail ${LANG_ITALIAN} \ -# "Disinstallazione non riuscita per la versione:" - -#LangString str_msg_no_rm_key ${LANG_ITALIAN} \ -# "Impossibile trovare chiave disinstallazione nel registro." - -#LangString str_msg_no_rm_reg ${LANG_ITALIAN} \ -# "Impossibile trovare programma disinstallazione nel registro." - -#LangString str_msg_no_rm_exe ${LANG_ITALIAN} \ -# "Impossibile trovare programma disinstallazione." - -#LangString str_msg_rm_copy_fail ${LANG_ITALIAN} \ -# "Impossibile copiare il programma disinstallazione in una cartella temporanea." - -#LangString str_msg_rm_run_fail ${LANG_ITALIAN} \ -# "Impossibile eseguire programma disinstallazione." - -#LangString str_msg_abort_install ${LANG_ITALIAN} \ -# "Il programma di disinstallazione verrà chiuso senza aver eseguito nessuna modifica." - -LangString str_msg_install_fail ${LANG_ITALIAN} \ - "Installazione non riuscita." - -LangString str_msg_rm_exe_fail ${LANG_ITALIAN} \ - "Alcuni file in $0 non sono stati eliminati!$\r$\n\ - I file vanno rimossi manualmente." - -#LangString str_msg_rm_root_fail ${LANG_ITALIAN} \ -# "AVVISO: impossibile eliminare $\"$vim_install_root$\", non è vuota!" - -LangString str_msg_uninstalling ${LANG_ITALIAN} \ - "Disinstallazione vecchia versione Vim..." - -LangString str_msg_registering ${LANG_ITALIAN} \ - "Aggiunta di Vim al registro..." - -LangString str_msg_unregistering ${LANG_ITALIAN} \ - "Rimozione di Vim dal registro..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_ITALIAN} \ - "Scelta impostazioni _vimrc" -LangString str_vimrc_page_subtitle ${LANG_ITALIAN} \ - "Scelta impostazioni funzionalità aggiuntive, tastiera e mouse." - -LangString str_msg_compat_title ${LANG_ITALIAN} \ - " Comportamento come Vi / Vim " -LangString str_msg_compat_desc ${LANG_ITALIAN} \ - "&Compatibilità e funzionalità" -LangString str_msg_compat_vi ${LANG_ITALIAN} \ - "Compatibile Vi" -LangString str_msg_compat_vim ${LANG_ITALIAN} \ - "Vim originale" -LangString str_msg_compat_defaults ${LANG_ITALIAN} \ - "Vim con alcune funzionalità aggiuntive (defaults.vim)" -LangString str_msg_compat_all ${LANG_ITALIAN} \ - "Vim con tutte le funzionalità aggiuntive (vimrc_example.vim) (predefinito)" - -LangString str_msg_keymap_title ${LANG_ITALIAN} \ - " Mappature tastiera " -LangString str_msg_keymap_desc ${LANG_ITALIAN} \ - "&Rimappa alcuni tasti Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc.)" -LangString str_msg_keymap_default ${LANG_ITALIAN} \ - "Non rimappare i tasti (predefinito)" -LangString str_msg_keymap_windows ${LANG_ITALIAN} \ - "Rimappa solo alcuni tasti" - -LangString str_msg_mouse_title ${LANG_ITALIAN} \ - " Mouse " -LangString str_msg_mouse_desc ${LANG_ITALIAN} \ - "&Comportamento pulsanti destro/sinistro" -LangString str_msg_mouse_default ${LANG_ITALIAN} \ - "Destro: menu popup, Sinistro: modalità visuale (predefinito)" -LangString str_msg_mouse_windows ${LANG_ITALIAN} \ - "Destro: menu popup, Sinistro: selezione modalità (Windows)" -LangString str_msg_mouse_unix ${LANG_ITALIAN} \ - "Destro: estensione selezione, Sinistro: modalità visuale (Unix)" diff --git a/nsis/lang/japanese.nsi b/nsis/lang/japanese.nsi deleted file mode 100644 index c28529cb46..0000000000 --- a/nsis/lang/japanese.nsi +++ /dev/null @@ -1,297 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# japanese.nsi: Japanese language strings for gvim NSIS installer. -# -# Locale ID : 1041 -# Locale Name : ja -# fileencoding : UTF-8 -# Author : Ken Takata - -!insertmacro MUI_LANGUAGE "Japanese" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_JAPANESE} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_JAPANESE} \ - "$(^Name) Uninstall" - -# Workarounds for NSIS Japanese translation. The messages are too long. -# These should be better to be fixed by the NSIS upstream. -LangString ^SpaceAvailable ${LANG_JAPANESE} \ - "利用å¯èƒ½ãªãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ï¼š" -LangString ^SpaceRequired ${LANG_JAPANESE} \ - "å¿…è¦ãªãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ï¼š" -# Fix another NSIS Japanese translation. The access key was missing. -LangString ^InstallBtn ${LANG_JAPANESE} \ - "インストール(&I)" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_JAPANESE} "..\lang\LICENSE.ja.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_JAPANESE} "README.ja.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_JAPANESE} \ -# "Destination Folder (Must end with $\"vim$\")" - -LangString str_show_readme ${LANG_JAPANESE} \ - "インストール完了後㫠README を表示ã™ã‚‹" - -# Install types: -LangString str_type_typical ${LANG_JAPANESE} \ - "通常" - -LangString str_type_minimal ${LANG_JAPANESE} \ - "最å°" - -LangString str_type_full ${LANG_JAPANESE} \ - "å…¨ã¦" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_JAPANESE} \ - "既存ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アンインストール" -LangString str_desc_old_ver ${LANG_JAPANESE} \ - "ã™ã§ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ Vim をシステムã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚" - -LangString str_section_exe ${LANG_JAPANESE} \ - "Vim GUI ã¨ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ãƒ•ァイル" -LangString str_desc_exe ${LANG_JAPANESE} \ - "Vim GUI 実行ファイルã¨ãƒ©ã‚¤ãƒ³ã‚¿ã‚¤ãƒ ãƒ•ァイル。ã“ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¯å¿…é ˆã§ã™ã€‚" - -LangString str_section_console ${LANG_JAPANESE} \ - "Vim コンソールプログラム" -LangString str_desc_console ${LANG_JAPANESE} \ - "コンソール版㮠Vim (vim.exe)。" - -LangString str_section_batch ${LANG_JAPANESE} \ - ".bat ファイルを作æˆ" -LangString str_desc_batch ${LANG_JAPANESE} \ - "コマンドラインã‹ã‚‰ Vim ã¨é–¢é€£ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãるよã†ã«ã€.bat ファイルを Windows ディレクトリã«ä½œæˆã—ã¾ã™ã€‚" - -LangString str_group_icons ${LANG_JAPANESE} \ - "Vim ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’作æˆ" -LangString str_desc_icons ${LANG_JAPANESE} \ - "Vim ã‚’ç°¡å˜ã«å®Ÿè¡Œã§ãるよã†ã«ã€ã„ãã¤ã‹ã®å ´æ‰€ã«ã‚¢ã‚¤ã‚³ãƒ³ã‚’作æˆã—ã¾ã™ã€‚" - -LangString str_section_desktop ${LANG_JAPANESE} \ - "デスクトップ上" -LangString str_desc_desktop ${LANG_JAPANESE} \ - "gVim 実行ファイルã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’デスクトップ上ã«ä½œæˆã—ã¾ã™ã€‚" - -LangString str_section_start_menu ${LANG_JAPANESE} \ - "スタートメニューã®ãƒ—ログラムフォルダー上" -LangString str_desc_start_menu ${LANG_JAPANESE} \ - "Vim ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’スタートメニューã®ãƒ—ログラムフォルダー上ã«ä½œæˆã—ã¾ã™ã€‚" - -#LangString str_section_quick_launch ${LANG_JAPANESE} \ -# "In the Quick Launch Bar" -#LangString str_desc_quick_launch ${LANG_JAPANESE} \ -# "Add Vim shortcut in the quick launch bar." - -LangString str_section_edit_with ${LANG_JAPANESE} \ - "Vim ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’追加" -LangString str_desc_edit_with ${LANG_JAPANESE} \ - "$\"Vimã§ç·¨é›†ã™ã‚‹$\" をコンテキストメニューã«è¿½åŠ ã—ã¾ã™ã€‚" - -#LangString str_section_edit_with32 ${LANG_JAPANESE} \ -# "32-bit Version" -#LangString str_desc_edit_with32 ${LANG_JAPANESE} \ -# "Add Vim to the $\"Open With...$\" context menu list \ -# for 32-bit applications." - -#LangString str_section_edit_with64 ${LANG_JAPANESE} \ -# "64-bit Version" -#LangString str_desc_edit_with64 ${LANG_JAPANESE} \ -# "Add Vim to the $\"Open With...$\" context menu list \ -# for 64-bit applications." - -LangString str_section_vim_rc ${LANG_JAPANESE} \ - "既定ã®ã‚³ãƒ³ãƒ•ィグを作æˆ" -LangString str_desc_vim_rc ${LANG_JAPANESE} \ - "ã‚‚ã—ç„¡ã‘れã°ã€æ—¢å®šã®ã‚³ãƒ³ãƒ•ィグファイル (_vimrc) を作æˆã—ã¾ã™ã€‚" - -LangString str_group_plugin ${LANG_JAPANESE} \ - "プラグインディレクトリを作æˆ" -LangString str_desc_plugin ${LANG_JAPANESE} \ - "プラグインディレクトリを作æˆã—ã¾ã™ã€‚ãã“ã«ãƒ—ラグインファイルを置ãã“ã¨ã§ Vim ã‚’æ‹¡å¼µã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - -LangString str_section_plugin_home ${LANG_JAPANESE} \ - "個人用" -LangString str_desc_plugin_home ${LANG_JAPANESE} \ - "プラグインディレクトリをホームディレクトリã«ä½œæˆã—ã¾ã™ã€‚" - -LangString str_section_plugin_vim ${LANG_JAPANESE} \ - "共用" -LangString str_desc_plugin_vim ${LANG_JAPANESE} \ - "プラグインディレクトリを Vim ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ä½œæˆã—ã¾ã™ã€‚システムã®å…¨å“¡ã§å…±æœ‰ã•れã¾ã™ã€‚" - -LangString str_section_nls ${LANG_JAPANESE} \ - "多言語サãƒãƒ¼ãƒˆ" -LangString str_desc_nls ${LANG_JAPANESE} \ - "多言語サãƒãƒ¼ãƒˆç”¨ã®ãƒ•ァイルをインストールã—ã¾ã™ã€‚" - -LangString str_unsection_register ${LANG_JAPANESE} \ - "Vim を登録解除" -LangString str_desc_unregister ${LANG_JAPANESE} \ - "Vim をシステムã‹ã‚‰ç™»éŒ²è§£é™¤ã—ã¾ã™ã€‚" - -LangString str_unsection_exe ${LANG_JAPANESE} \ - "Vim ã®å®Ÿè¡Œãƒ•ァイル/ランタイムファイルを削除" -LangString str_desc_rm_exe ${LANG_JAPANESE} \ - "å…¨ã¦ã® Vim ã®å®Ÿè¡Œãƒ•ァイルã¨ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ãƒ•ァイルを削除ã—ã¾ã™ã€‚" - -LangString str_ungroup_plugin ${LANG_JAPANESE} \ - "プラグインディレクトリを削除" -LangString str_desc_rm_plugin ${LANG_JAPANESE} \ - "プラグインディレクトリãŒç©ºã§ã‚れã°ãれを削除ã—ã¾ã™ã€‚" - -LangString str_unsection_plugin_home ${LANG_JAPANESE} \ - "個人用" -LangString str_desc_rm_plugin_home ${LANG_JAPANESE} \ - "プラグインディレクトリをホームディレクトリã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚" - -LangString str_unsection_plugin_vim ${LANG_JAPANESE} \ - "共用" -LangString str_desc_rm_plugin_vim ${LANG_JAPANESE} \ - "プラグインディレクトリを Vim ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚" - -LangString str_unsection_rootdir ${LANG_JAPANESE} \ - "Vim ã®ãƒˆãƒƒãƒ—ディレクトリを削除" -LangString str_desc_rm_rootdir ${LANG_JAPANESE} \ - "Vim ã®ãƒˆãƒƒãƒ—ディレクトリを削除ã—ã¾ã™ã€‚ã‚ãªãŸã® Vim ã®è¨­å®šãƒ•ァイルもå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„ï¼" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_JAPANESE} \ -# "Found $vim_old_ver_count Vim versions on your system.$\r$\n\ -# This installer can only handle ${VIM_MAX_OLD_VER} versions \ -# at most.$\r$\n\ -# Please remove some versions and start again." - -#LangString str_msg_invalid_root ${LANG_JAPANESE} \ -# "Invalid install path: $vim_install_root!$\r$\n\ -# It should end with $\"vim$\"." - -#LangString str_msg_bin_mismatch ${LANG_JAPANESE} \ -# "Binary path mismatch!$\r$\n$\r$\n\ -# Expect the binary path to be $\"$vim_bin_path$\",$\r$\n\ -# but system indicates the binary path is $\"$INSTDIR$\"." - -#LangString str_msg_vim_running ${LANG_JAPANESE} \ -# "Vim is still running on your system.$\r$\n\ -# Please close all instances of Vim before you continue." - -#LangString str_msg_register_ole ${LANG_JAPANESE} \ -# "Attempting to register Vim with OLE. \ -# There is no message indicates whether this works or not." - -#LangString str_msg_unreg_ole ${LANG_JAPANESE} \ -# "Attempting to unregister Vim with OLE. \ -# There is no message indicates whether this works or not." - -#LangString str_msg_rm_start ${LANG_JAPANESE} \ -# "Uninstalling the following version:" - -#LangString str_msg_rm_fail ${LANG_JAPANESE} \ -# "Fail to uninstall the following version:" - -#LangString str_msg_no_rm_key ${LANG_JAPANESE} \ -# "Cannot find uninstaller registry key." - -#LangString str_msg_no_rm_reg ${LANG_JAPANESE} \ -# "Cannot find uninstaller from registry." - -#LangString str_msg_no_rm_exe ${LANG_JAPANESE} \ -# "Cannot access uninstaller." - -#LangString str_msg_rm_copy_fail ${LANG_JAPANESE} \ -# "Fail to copy uninstaller to temporary directory." - -#LangString str_msg_rm_run_fail ${LANG_JAPANESE} \ -# "Fail to run uninstaller." - -#LangString str_msg_abort_install ${LANG_JAPANESE} \ -# "Installer will abort." - -LangString str_msg_install_fail ${LANG_JAPANESE} \ - "インストールã«å¤±æ•—ã—ã¾ã—ãŸã€‚次ã¯ã†ã¾ãã„ãã“ã¨ã‚’祈りã¾ã™ã€‚" - -LangString str_msg_rm_exe_fail ${LANG_JAPANESE} \ - "$0 内ã®ä¸€éƒ¨ã®ãƒ•ァイルã¯å‰Šé™¤ã§ãã¾ã›ã‚“ã§ã—ãŸ!$\r$\n\ - 手動ã§å‰Šé™¤ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" - -#LangString str_msg_rm_root_fail ${LANG_JAPANESE} \ -# "WARNING: Cannot remove $\"$vim_install_root$\", it is not empty!" - -LangString str_msg_uninstalling ${LANG_JAPANESE} \ - "å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アンインストールã—ã¦ã„ã¾ã™..." - -LangString str_msg_registering ${LANG_JAPANESE} \ - "登録中..." - -LangString str_msg_unregistering ${LANG_JAPANESE} \ - "登録解除中..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_JAPANESE} \ - "_vimrc ã®è¨­å®šã‚’é¸ã‚“ã§ãã ã•ã„" -LangString str_vimrc_page_subtitle ${LANG_JAPANESE} \ - "拡張やキーボードã€ãƒžã‚¦ã‚¹ã®è¨­å®šã‚’é¸ã‚“ã§ãã ã•ã„。" - -LangString str_msg_compat_title ${LANG_JAPANESE} \ - " Vi / Vim ã®å‹•作 " -LangString str_msg_compat_desc ${LANG_JAPANESE} \ - "äº’æ›æ€§ã¨æ‹¡å¼µ(&C)" -LangString str_msg_compat_vi ${LANG_JAPANESE} \ - "Vi 互æ›" -LangString str_msg_compat_vim ${LANG_JAPANESE} \ - "Vim 独自" -LangString str_msg_compat_defaults ${LANG_JAPANESE} \ - "Vim 独自ã¨å¤šå°‘ã®æ‹¡å¼µ (defaults.vim を読ã¿è¾¼ã¿)" -LangString str_msg_compat_all ${LANG_JAPANESE} \ - "Vim 独自ã¨å…¨ã¦ã®æ‹¡å¼µ (vimrc_example.vim を読ã¿è¾¼ã¿) (既定)" - -LangString str_msg_keymap_title ${LANG_JAPANESE} \ - " マッピング " -LangString str_msg_keymap_desc ${LANG_JAPANESE} \ - "Windows用ã«ä¸€éƒ¨ã®ã‚­ãƒ¼ã‚’リマップã™ã‚‹(&R) (例: Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F ãªã©)" -LangString str_msg_keymap_default ${LANG_JAPANESE} \ - "リマップã—ãªã„ (既定)" -LangString str_msg_keymap_windows ${LANG_JAPANESE} \ - "リマップã™ã‚‹" - -LangString str_msg_mouse_title ${LANG_JAPANESE} \ - " マウス " -LangString str_msg_mouse_desc ${LANG_JAPANESE} \ - "å³ãƒœã‚¿ãƒ³ã¨å·¦ãƒœã‚¿ãƒ³ã®å‹•作(&B)" -LangString str_msg_mouse_default ${LANG_JAPANESE} \ - "å³ï¼šãƒãƒƒãƒ—アップメニューã€å·¦ï¼šãƒ“ジュアルモード (既定)" -LangString str_msg_mouse_windows ${LANG_JAPANESE} \ - "å³ï¼šãƒãƒƒãƒ—アップメニューã€å·¦ï¼šé¸æŠžãƒ¢ãƒ¼ãƒ‰ (Windows)" -LangString str_msg_mouse_unix ${LANG_JAPANESE} \ - "å³ï¼šé¸æŠžã‚’æ‹¡å¼µã€å·¦ï¼šãƒ“ジュアルモード (Unix)" diff --git a/nsis/lang/portuguesebr.nsi b/nsis/lang/portuguesebr.nsi deleted file mode 100644 index ea92f54e80..0000000000 --- a/nsis/lang/portuguesebr.nsi +++ /dev/null @@ -1,291 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# portuguesebr.nsi: Brazilian Portuguese strings for gvim NSIS installer. -# -# Locale ID : 1046 -# Locale Name : pt-BR -# fileencoding : UTF-8 -# Author : Rafael Fontenelle - -!insertmacro MUI_LANGUAGE "PortugueseBR" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_PORTUGUESEBR} \ - "Configuração do $(^Name)" -LangString ^UninstallCaption ${LANG_PORTUGUESEBR} \ - "Desinstalação do $(^Name)" - -############################################################################## -# License file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file ${LANG_PORTUGUESEBR} "..\lang\LICENSE.pt_br.nsis.txt" - -############################################################################## -# README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file ${LANG_PORTUGUESEBR} "README.pt_br.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_PORTUGUESEBR} \ -# "Pasta de destino (Deve terminar com $\"vim$\")" - -LangString str_show_readme ${LANG_PORTUGUESEBR} \ - "Mostrar o README ao concluir a instalação" - -# Install types: -LangString str_type_typical ${LANG_PORTUGUESEBR} \ - "Típica" - -LangString str_type_minimal ${LANG_PORTUGUESEBR} \ - "Mínima" - -LangString str_type_full ${LANG_PORTUGUESEBR} \ - "Completa" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_PORTUGUESEBR} \ - "Desinstalar versões existentes" -LangString str_desc_old_ver ${LANG_PORTUGUESEBR} \ - "Desinstala versões do Vim existentes no seu sistema." - -LangString str_section_exe ${LANG_PORTUGUESEBR} \ - "Vim GUI e arquivos de runtime" -LangString str_desc_exe ${LANG_PORTUGUESEBR} \ - "Executáveis ​​e arquivos de runtime do Vim GUI. Este componente \ - é obrigatório." - -LangString str_section_console ${LANG_PORTUGUESEBR} \ - "Programa de console do Vim" -LangString str_desc_console ${LANG_PORTUGUESEBR} \ - "Versão de console do Vim (vim.exe)." - -LangString str_section_batch ${LANG_PORTUGUESEBR} \ - "Criar arquivos .bat" -LangString str_desc_batch ${LANG_PORTUGUESEBR} \ - "Cria arquivos .bat para variantes do Vim no diretório Windows para \ - usar na linha de comando." - -LangString str_group_icons ${LANG_PORTUGUESEBR} \ - "Criar ícones para o Vim" -LangString str_desc_icons ${LANG_PORTUGUESEBR} \ - "Cria ícones para Vim em vários locais para facilitar o acesso rápido." - -LangString str_section_desktop ${LANG_PORTUGUESEBR} \ - "Na área de trabalho" -LangString str_desc_desktop ${LANG_PORTUGUESEBR} \ - "Cria ícones para executáveis do gVim na área de trabalho." - -LangString str_section_start_menu ${LANG_PORTUGUESEBR} \ - "Na pasta Programas do Menu Iniciar" -LangString str_desc_start_menu ${LANG_PORTUGUESEBR} \ - "Adiciona Vim na pasta de programas do menu iniciar." - -#LangString str_section_quick_launch ${LANG_PORTUGUESEBR} \ -# "Na barra de Inicialização Rápida" -#LangString str_desc_quick_launch ${LANG_PORTUGUESEBR} \ -# "Adiciona um atalho para o Vim na barra de inicialização rápida." - -LangString str_section_edit_with ${LANG_PORTUGUESEBR} \ - "Adicionar menu de contexto do Vim" -LangString str_desc_edit_with ${LANG_PORTUGUESEBR} \ - "Adiciona o Vim à lista $\"Abrir com...$\" do menu de contexto." - -#LangString str_section_edit_with32 ${LANG_PORTUGUESEBR} \ -# "Versão 32 bits" -#LangString str_desc_edit_with32 ${LANG_PORTUGUESEBR} \ -# "Adiciona o Vim à lista $\"Abrir com...$\" do menu de contexto \ -# para aplicativos 32 bits." - -#LangString str_section_edit_with64 ${LANG_PORTUGUESEBR} \ -# "Versão 64 bits" -#LangString str_desc_edit_with64 ${LANG_PORTUGUESEBR} \ -# "Adiciona o Vim à lista $\"Abrir com...$\" do menu de contexto \ -# para aplicativos 64 bits." - -LangString str_section_vim_rc ${LANG_PORTUGUESEBR} \ - "Criar configuração padrão" -LangString str_desc_vim_rc ${LANG_PORTUGUESEBR} \ - "Cria um arquivo de configuração padrão (_vimrc) se não já existir." - -LangString str_group_plugin ${LANG_PORTUGUESEBR} \ - "Criar diretórios de plugins" -LangString str_desc_plugin ${LANG_PORTUGUESEBR} \ - "Cria diretórios de plugins. Diretórios de plugins permitem estender \ - o Vim adicionando um arquivo a um direótrio." - -LangString str_section_plugin_home ${LANG_PORTUGUESEBR} \ - "Privados" -LangString str_desc_plugin_home ${LANG_PORTUGUESEBR} \ - "Cria diretórios de plugins no diretório HOME." - -LangString str_section_plugin_vim ${LANG_PORTUGUESEBR} \ - "Compartilhados" -LangString str_desc_plugin_vim ${LANG_PORTUGUESEBR} \ - "Cria diretórios de plugins no diretório de instalação do Vim, \ - o qual é usado por todos os usuários do sistema." - -LangString str_section_nls ${LANG_PORTUGUESEBR} \ - "Suporte ao idioma nativo" -LangString str_desc_nls ${LANG_PORTUGUESEBR} \ - "Instala arquivos para suporte ao idioma nativo." - -LangString str_unsection_register ${LANG_PORTUGUESEBR} \ - "Desregistrar Vim" -LangString str_desc_unregister ${LANG_PORTUGUESEBR} \ - "Remove os registras do Vim do sistema." - -LangString str_unsection_exe ${LANG_PORTUGUESEBR} \ - "Remover arquivos executáveis/runtime do Vim" -LangString str_desc_rm_exe ${LANG_PORTUGUESEBR} \ - "Remove todos os arquivos executáveis e de runtime do Vim." - -LangString str_ungroup_plugin ${LANG_PORTUGUESEBR} \ - "Remover diretórios de plugins" -LangString str_desc_rm_plugin ${LANG_PORTUGUESEBR} \ - "Remove os diretórios de plugins se eles estiverem vazios." - -LangString str_unsection_plugin_home ${LANG_PORTUGUESEBR} \ - "Privados" -LangString str_desc_rm_plugin_home ${LANG_PORTUGUESEBR} \ - "Remove os diretórios de plugins do diretório HOME." - -LangString str_unsection_plugin_vim ${LANG_PORTUGUESEBR} \ - "Compartilhados" -LangString str_desc_rm_plugin_vim ${LANG_PORTUGUESEBR} \ - "Remove os diretórios de plugins do diretório de instalação do Vim." - -LangString str_unsection_rootdir ${LANG_PORTUGUESEBR} \ - "Remover diretório raiz do Vim" -LangString str_desc_rm_rootdir ${LANG_PORTUGUESEBR} \ - "Remove o diretório raiz do Vim. Ele contém seus \ - arquivos de configuração do Vim!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_PORTUGUESEBR} \ -# "Encontradas $vim_old_ver_count versões do Vim em seu sistema.$\r$\n\ -# Este instalador só consegue lidar com ${VIM_MAX_OLD_VER} versões\ -# no máximo.$\r$\n\ -# Por favor, remova algumas versões e comece novamente." - -#LangString str_msg_invalid_root ${LANG_PORTUGUESEBR} \ -# "Caminho de instalação inválido: $vim_install_root!$\r$\n\ -# Ele deve terminar com $\"vim$\"." - -#LangString str_msg_bin_mismatch ${LANG_PORTUGUESEBR} \ -# "Incompatibilidade de caminho de binários!$\r$\n$\r$\n\ -# Esperava que o caminho de binários fosse $\"$vim_bin_path$\",$\r$\n\ -# mas o sistema indica que o caminho de binários é $\"$INSTDIR$\"." - -#LangString str_msg_vim_running ${LANG_PORTUGUESEBR} \ -# "Vim ainda está em execução em seu sistema.$\r$\n\ -# Por favor, feche todas as instâncias do Vim para poder continuar." - -#LangString str_msg_register_ole ${LANG_PORTUGUESEBR} \ -# "Tentativa de registrar o Vim com OLE. \ -# Não há mensagem que indique se isso funciona ou não." - -#LangString str_msg_unreg_ole ${LANG_PORTUGUESEBR} \ -# "Tentando desregistrar o Vim com OLE. \ -# Não há mensagem que indique se isso funciona ou não." - -#LangString str_msg_rm_start ${LANG_PORTUGUESEBR} \ -# "Desinstalando a seguinte versão:" - -#LangString str_msg_rm_fail ${LANG_PORTUGUESEBR} \ -# "Falha ao desinstalar a seguinte versão:" - -#LangString str_msg_no_rm_key ${LANG_PORTUGUESEBR} \ -# "Não foi possível encontrar a chave de registro do desinstalador." - -#LangString str_msg_no_rm_reg ${LANG_PORTUGUESEBR} \ -# "Não foi possível encontrar o desinstalador a partir do registro." - -#LangString str_msg_no_rm_exe ${LANG_PORTUGUESEBR} \ -# "Não foi possível acessar o desinstalador." - -#LangString str_msg_rm_copy_fail ${LANG_PORTUGUESEBR} \ -# "Falha ao copiar o desinstalador para um diretório temporário." - -#LangString str_msg_rm_run_fail ${LANG_PORTUGUESEBR} \ -# "Falha ao executar o desinstalador." - -#LangString str_msg_abort_install ${LANG_PORTUGUESEBR} \ -# "Instalador será interrompido." - -LangString str_msg_install_fail ${LANG_PORTUGUESEBR} \ - "A instalação falhou. Mais sorte na próxima vez." - -LangString str_msg_rm_exe_fail ${LANG_PORTUGUESEBR} \ - "Alguns arquivos em $0 não foram excluídos!$\r$\n\ - Você deve fazê-lo manualmente." - -#LangString str_msg_rm_root_fail ${LANG_PORTUGUESEBR} \ -# "AVISO: Não foi possível remover $\"$vim_install_root$\", \ -# pois não está vazio!" - -LangString str_msg_uninstalling ${LANG_PORTUGUESEBR} \ - "Desinstalando a versão antiga..." - -LangString str_msg_registering ${LANG_PORTUGUESEBR} \ - "Registrando..." - -LangString str_msg_unregistering ${LANG_PORTUGUESEBR} \ - "Desregistrando..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_PORTUGUESEBR} \ - "Escolher configurações do _vimrc" -LangString str_vimrc_page_subtitle ${LANG_PORTUGUESEBR} \ - "Escolha as configurações para melhorias, teclado e mouse." - -LangString str_msg_compat_title ${LANG_PORTUGUESEBR} \ - " Comportamento Vi / Vim " -LangString str_msg_compat_desc ${LANG_PORTUGUESEBR} \ - "&Compatibilidade e melhorias" -LangString str_msg_compat_vi ${LANG_PORTUGUESEBR} \ - "Compatível com Vi" -LangString str_msg_compat_vim ${LANG_PORTUGUESEBR} \ - "Vim original" -LangString str_msg_compat_defaults ${LANG_PORTUGUESEBR} \ - "Vim com algumas melhorias (carrega defaults.vim)" -LangString str_msg_compat_all ${LANG_PORTUGUESEBR} \ - "Vim com todas as melhorias (carrega vimrc_example.vim) (Padrão)" - -LangString str_msg_keymap_title ${LANG_PORTUGUESEBR} \ - " Mapeamentos " -LangString str_msg_keymap_desc ${LANG_PORTUGUESEBR} \ - "&Remapear algumas teclas para o Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" -LangString str_msg_keymap_default ${LANG_PORTUGUESEBR} \ - "Não remapear teclas (Padrão)" -LangString str_msg_keymap_windows ${LANG_PORTUGUESEBR} \ - "Remapear algumas teclas" - -LangString str_msg_mouse_title ${LANG_PORTUGUESEBR} \ - " Mouse " -LangString str_msg_mouse_desc ${LANG_PORTUGUESEBR} \ - "&Comportamento de botões direito e esquerdo" -LangString str_msg_mouse_default ${LANG_PORTUGUESEBR} \ - "Direito: menu popup, Esquerdo: modo visual (Padrão)" -LangString str_msg_mouse_windows ${LANG_PORTUGUESEBR} \ - "Direito: menu popup, Esquerdo: modo de seleção (Windows)" -LangString str_msg_mouse_unix ${LANG_PORTUGUESEBR} \ - "Direito: estende seleção, Esquerdo: modo visual (Unix)" diff --git a/nsis/lang/russian.nsi b/nsis/lang/russian.nsi deleted file mode 100644 index bcb54672fd..0000000000 --- a/nsis/lang/russian.nsi +++ /dev/null @@ -1,304 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# russian.nsi: Russian language strings for gvim NSIS installer. -# -# Locale ID : 1049 -# Locale name : ru -# fileencoding : UTF-8 -# Author : Restorer - -!insertmacro MUI_LANGUAGE "Russian" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_RUSSIAN} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_RUSSIAN} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file ${LANG_RUSSIAN} "..\lang\LICENSE.ru.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file ${LANG_RUSSIAN} "README.ru.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_RUSSIAN} \ -# "Маршрут уÑтановки программы (должен завершатьÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼ $\"vim$\")" - -LangString str_show_readme ${LANG_RUSSIAN} \ - " ОзнакомитьÑÑ Ñ ÐºÑ€Ð°Ñ‚ÐºÐ¸Ð¼ опиÑанием программы" - -# Install types: -LangString str_type_typical ${LANG_RUSSIAN} \ - "Стандартный" - -LangString str_type_minimal ${LANG_RUSSIAN} \ - "Минимальный" - -LangString str_type_full ${LANG_RUSSIAN} \ - "Полный" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_RUSSIAN} \ - "Удаление предыдущих верÑий" -LangString str_desc_old_ver ${LANG_RUSSIAN} \ - "Будут удалены предыдущие уÑтановленные верÑии программы" - -LangString str_section_exe ${LANG_RUSSIAN} \ - "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¸ вÑпомогательные файлы" -LangString str_desc_exe ${LANG_RUSSIAN} \ - "ИÑполнÑемые файлы и вÑе необходимые Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ программы файлы. \ - Это обÑзательный компонент" - -LangString str_section_console ${LANG_RUSSIAN} \ - "КонÑÐ¾Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° Vim" -LangString str_desc_console ${LANG_RUSSIAN} \ - "Вариант редактора Vim (vim.exe), иÑпользуемый Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ в командной \ - оболочке" - -LangString str_section_batch ${LANG_RUSSIAN} \ - "Создать командные файлы" -LangString str_desc_batch ${LANG_RUSSIAN} \ - "Создание командных bat-файлов в каталоге Windows Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ \ - Vim из командной Ñтроки" - -LangString str_group_icons ${LANG_RUSSIAN} \ - "Создать Ñрлыки Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° Vim" -LangString str_desc_icons ${LANG_RUSSIAN} \ - "Создание Ñрлыков программы Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ð½Ð¾Ð³Ð¾ и быÑтрого запуÑка редактора Vim" - -LangString str_section_desktop ${LANG_RUSSIAN} \ - "Ðа Рабочем Ñтоле" -LangString str_desc_desktop ${LANG_RUSSIAN} \ - "Создание Ñрлыков редактора Vim на Рабочем Ñтоле" - -LangString str_section_start_menu ${LANG_RUSSIAN} \ - "Ð’ меню кнопки ПуÑк" -LangString str_desc_start_menu ${LANG_RUSSIAN} \ - "Создание Ñрлыков редактора Vim в меню кнопки ПуÑк" - -#LangString str_section_quick_launch ${LANG_RUSSIAN} \ -# "Ðа панели быÑтрого запуÑка" -#LangString str_desc_quick_launch ${LANG_RUSSIAN} \ -# "Создание Ñрлыков редактора Vim на панели быÑтрого запуÑка" - -LangString str_section_edit_with ${LANG_RUSSIAN} \ - "ЗапуÑк редактора Vim из контекÑтного меню" -LangString str_desc_edit_with ${LANG_RUSSIAN} \ - "Добавление необходимой Ñтроки в пункт контекÑтного меню \ - «Открыть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ...»" - -#LangString str_section_edit_with32 ${LANG_RUSSIAN} \ -# "Ð”Ð»Ñ 32-разрÑдной верÑии программы" -#LangString str_desc_edit_with32 ${LANG_RUSSIAN} \ -# "Добавление в пункт контекÑтного меню \ -# «Открыть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ...» 32-разрÑдных приложений" - -#LangString str_section_edit_with64 ${LANG_RUSSIAN} \ -# "Ð”Ð»Ñ 64-разрÑдной верÑии программы" -#LangString str_desc_edit_with64 ${LANG_RUSSIAN} \ -# "Добавление в пункт контекÑтного меню \ -# «Открыть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ...» 64-разрÑдных приложений" - -LangString str_section_vim_rc ${LANG_RUSSIAN} \ - "ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð½Ð°Ñтройка программы" -LangString str_desc_vim_rc ${LANG_RUSSIAN} \ - "Создание файла _vimrc Ñ Ð¿Ñ€ÐµÐ´ÑƒÑтановленными наÑтройками, еÑли нет других \ - файлов наÑтроек" - -LangString str_group_plugin ${LANG_RUSSIAN} \ - "Создать каталог Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð°ÐµÐ¼Ñ‹Ñ… модулей" -LangString str_desc_plugin ${LANG_RUSSIAN} \ - "Создание каталога Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð°ÐµÐ¼Ñ‹Ñ… модулей, которые раÑширÑÑŽÑ‚ возможноÑти \ - редактора Vim" - -LangString str_section_plugin_home ${LANG_RUSSIAN} \ - "Личный каталог" -LangString str_desc_plugin_home ${LANG_RUSSIAN} \ - "Ð’ домашнем каталоге пользователÑ. Модули в Ñтом каталоге доÑтупны только \ - Ñтому пользователю" - -LangString str_section_plugin_vim ${LANG_RUSSIAN} \ - "Общий каталог" -LangString str_desc_plugin_vim ${LANG_RUSSIAN} \ - "Ð’ каталоге уÑтановки редактора Vim. Модули в Ñтом каталоге доÑтупны Ð´Ð»Ñ \ - вÑех пользователей" - -#LangString str_section_vis_vim ${LANG_RUSSIAN} \ -# "Подключаемый модуль VisVim" -#LangString str_desc_vis_vim ${LANG_RUSSIAN} \ -# "Подключаемый модуль VisVim иÑпользуетÑÑ Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ð¸ Ñ \ -# Microsoft Visual Studio" - -LangString str_section_nls ${LANG_RUSSIAN} \ - "Поддержка региональных Ñзыков" -LangString str_desc_nls ${LANG_RUSSIAN} \ - "УÑтановка файлов Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ программе на различных региональных Ñзыках" - -LangString str_unsection_register ${LANG_RUSSIAN} \ - "Отменить региÑтрацию компонентов программы Vim" -LangString str_desc_unregister ${LANG_RUSSIAN} \ - "Отмена региÑтрации компонентов программы Vim в операционной ÑиÑтеме" - -LangString str_unsection_exe ${LANG_RUSSIAN} \ - "Удалить файлы редактора Vim" -LangString str_desc_rm_exe ${LANG_RUSSIAN} \ - "Удаление вÑех иÑполнÑемых и вÑпомогательных файлов редактора Vim" - -LangString str_ungroup_plugin ${LANG_RUSSIAN} \ - "Удалить каталог подключаемых модулей" -LangString str_desc_rm_plugin ${LANG_RUSSIAN} \ - "Удаление каталога подключаемых модулей, еÑли в нём нет файлов" - -LangString str_unsection_plugin_home ${LANG_RUSSIAN} \ - "Личный каталог" -LangString str_desc_rm_plugin_home ${LANG_RUSSIAN} \ - "Удаление каталога подключаемых модулей из домашнего каталога пользователÑ" - -LangString str_unsection_plugin_vim ${LANG_RUSSIAN} \ - "Общий каталог" -LangString str_desc_rm_plugin_vim ${LANG_RUSSIAN} \ - "Удаление каталога подключаемых модулей из каталога уÑтановки редактора Vim" - -LangString str_unsection_rootdir ${LANG_RUSSIAN} \ - "Удалить оÑновной каталог программы Vim" -LangString str_desc_rm_rootdir ${LANG_RUSSIAN} \ - "Удаление оÑновного каталога программы Vim. Ð’ Ñтом каталоге находÑÑ‚ÑÑ \ - файлы наÑтроек!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_RUSSIAN} \ -# "Обнаружено предыдущих верÑий программы Vim: $vim_old_ver_count.$\r$\n\ -# Ð”Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° уÑтановки может удалить не более ${VIM_MAX_OLD_VER}.$\r$\n\ -# Удалить лишние верÑии программы Vim и повторите уÑтановку" - -#LangString str_msg_invalid_root ${LANG_RUSSIAN} \ -# "ÐедопуÑтимый каталог уÑтановки программы Vim $vim_install_root!$\r$\n\ -# Маршрут уÑтановки должен оканчиватьÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼ $\"vim$\"" - -#LangString str_msg_bin_mismatch ${LANG_RUSSIAN} \ -# "ÐедопуÑтимый маршрут к каталогу Ñ Ð¸ÑполнÑемыми файлами!$\r$\n$\r$\n\ -# Маршрут к каталогу Ñ Ð¸ÑполнÑемыми файлами должен быть $\"$vim_bin_path$\",$\r$\n\ -# но от операционной ÑиÑтемы получен как $\"$INSTDIR$\"." - -#LangString str_msg_vim_running ${LANG_RUSSIAN} \ -# "Программа Vim ÑÐµÐ¹Ñ‡Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚.$\r$\n\ -# Прежде чем продолжить, закройте вÑе работающие редакторы Vim" - -#LangString str_msg_register_ole ${LANG_RUSSIAN} \ -# "Попытка зарегиÑтрировать компоненты программы Vim в проÑтранÑтве OLE. \ -# Ðо не получено уведомление об уÑпешноÑти данной операции" - -#LangString str_msg_unreg_ole ${LANG_RUSSIAN} \ -# "Попытка отменить региÑтрацию компонентов программы Vim в проÑтранÑтве OLE. \ -# Ðо не получено уведомление об уÑпешноÑти данной операции" - -#LangString str_msg_rm_start ${LANG_RUSSIAN} \ -# "ВыполнÑетÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ðµ Ñледующих верÑий программы:" - -#LangString str_msg_rm_fail ${LANG_RUSSIAN} \ -# "Произошёл Ñбой при выполнении ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñледующих верÑий программы:" - -#LangString str_msg_no_rm_key ${LANG_RUSSIAN} \ -# "Ðе удалоÑÑŒ найти раздел рееÑтра, Ñодержащий информацию об удалении \ -# программы" - -#LangString str_msg_no_rm_reg ${LANG_RUSSIAN} \ -# "Ðе удалоÑÑŒ найти указанную в рееÑтре программу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñет удаление" - -#LangString str_msg_no_rm_exe ${LANG_RUSSIAN} \ -# "ОтÑутÑтвуют права на доÑтуп к программе, выполнÑющей удаление" - -#LangString str_msg_rm_copy_fail ${LANG_RUSSIAN} \ -# "Произошла ошибка при копировании программы ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾ временный каталог" - -#LangString str_msg_rm_run_fail ${LANG_RUSSIAN} \ -# "Произошёл Ñбой при запуÑке программы, выполнÑющей удаление" - -#LangString str_msg_abort_install ${LANG_RUSSIAN} \ -# "УÑтановка программы была отменена" - -LangString str_msg_install_fail ${LANG_RUSSIAN} \ - "Произошла ошибка при уÑтановке программы. Попробуйте повторить уÑтановку \ - немного попозже" -# когда Луна будет в другой фазе и ветер должен дуть Ñ ÑŽÐ³Ð¾â€Ð·Ð°Ð¿Ð°Ð´Ð° - -LangString str_msg_rm_exe_fail ${LANG_RUSSIAN} \ - "Ðекоторые файлы не были удалены из каталога $0 $\r$\n\ - Ðеобходимо выполнить их удаление ÑамоÑтоÑтельно" - -#LangString str_msg_rm_root_fail ${LANG_RUSSIAN} \ -# "Внимание! Ð’ каталоге $\"$vim_install_root$\" ÑодержатÑÑ Ñ„Ð°Ð¹Ð»Ñ‹. Удаление \ -# каталога не выполнено" - -LangString str_msg_uninstalling ${LANG_RUSSIAN} \ - "Удаление предыдущих верÑий программ..." - -LangString str_msg_registering ${LANG_RUSSIAN} \ - "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð¾Ð² программы в ÑиÑтеме..." - -LangString str_msg_unregistering ${LANG_RUSSIAN} \ - "Отмена региÑтрации компонентов программы в ÑиÑтеме..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_RUSSIAN} \ - "УÑтановка параметров программы" -LangString str_vimrc_page_subtitle ${LANG_RUSSIAN} \ - "Параметры, иÑпользуемые Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹, манипулÑтора «мышь» и \ - функциональноÑти программы" - -LangString str_msg_compat_title ${LANG_RUSSIAN} \ - " Варианты иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ " -LangString str_msg_compat_desc ${LANG_RUSSIAN} \ - "СовмеÑтимоÑть и функциональноÑть программы" -LangString str_msg_compat_vi ${LANG_RUSSIAN} \ - "Работа в варианте ÑовмеÑтимоÑти Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi" -LangString str_msg_compat_vim ${LANG_RUSSIAN} \ - "Работа в варианте функциональноÑти редактора Vim" -LangString str_msg_compat_defaults ${LANG_RUSSIAN} \ - "Включить некоторые ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ (из файла defaults.vim)" -LangString str_msg_compat_all ${LANG_RUSSIAN} \ - "Включить вÑе ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ (из файла vimrc_example.vim). Стандартно" - -LangString str_msg_keymap_title ${LANG_RUSSIAN} \ - " Клавиатурные команды " -LangString str_msg_keymap_desc ${LANG_RUSSIAN} \ - "Изменение клавиатурных команд CTRL+V, CTRL+C, CTRL+S, CTRL+F и Ñ‚. п." -LangString str_msg_keymap_default ${LANG_RUSSIAN} \ - "Без изменениÑ, иÑпользовать как принÑто в редакторе Vim" -LangString str_msg_keymap_windows ${LANG_RUSSIAN} \ - "Изменить и иÑпользовать как принÑто в ОС Windows" - -LangString str_msg_mouse_title ${LANG_RUSSIAN} \ - " МанипулÑтор «мышь» " -LangString str_msg_mouse_desc ${LANG_RUSSIAN} \ - "ДейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¹ и левой кнопки манипулÑтора «мышь»" -LangString str_msg_mouse_default ${LANG_RUSSIAN} \ - "ÐŸÑ€Ð°Ð²Ð°Ñ â€” вÑплывающее меню, Ð»ÐµÐ²Ð°Ñ â€” режим визуальный (Vim)" -LangString str_msg_mouse_windows ${LANG_RUSSIAN} \ - "ÐŸÑ€Ð°Ð²Ð°Ñ â€” вÑплывающее меню, Ð»ÐµÐ²Ð°Ñ â€” режим выборки (Windows)" -LangString str_msg_mouse_unix ${LANG_RUSSIAN} \ - "ÐŸÑ€Ð°Ð²Ð°Ñ â€” раÑширение выборки, Ð»ÐµÐ²Ð°Ñ â€” режим визуальный (UNIX)" diff --git a/nsis/lang/serbian.nsi b/nsis/lang/serbian.nsi deleted file mode 100644 index 9b829ef961..0000000000 --- a/nsis/lang/serbian.nsi +++ /dev/null @@ -1,290 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# serbian.nsi: Serbian language strings for gvim NSIS installer. -# -# Locale ID : 3098 -# Locale Name : sr -# fileencoding : UTF-8 -# Author : Ivan PeÅ¡ić - -!insertmacro MUI_LANGUAGE "Serbian" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_SERBIAN} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_SERBIAN} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_SERBIAN} "..\lang\LICENSE.sr.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_SERBIAN} "README.sr.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_SERBIAN} \ -# "Destination Folder (Must end with $\"vim$\")" - -LangString str_show_readme ${LANG_SERBIAN} \ - "Прикажи ПРОЧИТÐЈМЕ када Ñе заврши инÑталација" - -# Install types: -LangString str_type_typical ${LANG_SERBIAN} \ - "Типична" - -LangString str_type_minimal ${LANG_SERBIAN} \ - "Минимална" - -LangString str_type_full ${LANG_SERBIAN} \ - "Пуна" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_SERBIAN} \ - "Уклањање поÑтојећ(е/их) верзиј(е/а)" -LangString str_desc_old_ver ${LANG_SERBIAN} \ - "Уклања поÑтојећ(у/е) Vim верзииј(у/е) из вашег ÑиÑтема." - -LangString str_section_exe ${LANG_SERBIAN} \ - "Vim ГКИ и фајлови потребни за извршавање" -LangString str_desc_exe ${LANG_SERBIAN} \ - "Vim ГКИ извршни фајлови и фајлови потребни током извршавања. Ова компонента је неопходна." - -LangString str_section_console ${LANG_SERBIAN} \ - "Vim конзолни програм" -LangString str_desc_console ${LANG_SERBIAN} \ - "Конзолна верзија програма Vim (vim.exe)." - -LangString str_section_batch ${LANG_SERBIAN} \ - "Креирај .bat фајлове" -LangString str_desc_batch ${LANG_SERBIAN} \ - "Креира у Windows директоријуму .bat фајлове за Vim варијанте \ - у циљу коришћења из командне линије." - -LangString str_group_icons ${LANG_SERBIAN} \ - "Креирај иконе за Vim" -LangString str_desc_icons ${LANG_SERBIAN} \ - "Креира иконе за Vim на различитим меÑтима, како би Ñе олакшао приÑтуп." - -LangString str_section_desktop ${LANG_SERBIAN} \ - "Ðа радној површини" -LangString str_desc_desktop ${LANG_SERBIAN} \ - "Креира иконе за gVim извршне фајлове на радној површини." - -LangString str_section_start_menu ${LANG_SERBIAN} \ - "У фаÑцикли Програми унутар Старт менија" -LangString str_desc_start_menu ${LANG_SERBIAN} \ - "Додаје Vim у фолдер Програми Старт менија." - -#LangString str_section_quick_launch ${LANG_SERBIAN} \ -# "In the Quick Launch Bar" -#LangString str_desc_quick_launch ${LANG_SERBIAN} \ -# "Add Vim shortcut in the quick launch bar." - -LangString str_section_edit_with ${LANG_SERBIAN} \ - "Додај Vim контекÑтни мени" -LangString str_desc_edit_with ${LANG_SERBIAN} \ - "Додаје Vim у $\"Отвори помоћу...$\" лиÑту контекÑтног менија." - -#LangString str_section_edit_with32 ${LANG_SERBIAN} \ -# "32-bit Version" -#LangString str_desc_edit_with32 ${LANG_SERBIAN} \ -# "Add Vim to the $\"Open With...$\" context menu list \ -# for 32-bit applications." - -#LangString str_section_edit_with64 ${LANG_SERBIAN} \ -# "64-bit Version" -#LangString str_desc_edit_with64 ${LANG_SERBIAN} \ -# "Add Vim to the $\"Open With...$\" context menu list \ -# for 64-bit applications." - -LangString str_section_vim_rc ${LANG_SERBIAN} \ - "Креирај Подразумевану конфигурацију" -LangString str_desc_vim_rc ${LANG_SERBIAN} \ - "Креира подразумевани конфиг фајл (_vimrc) ако неки већ не поÑтоји." - -LangString str_group_plugin ${LANG_SERBIAN} \ - "Креира директоријуме додатака" -LangString str_desc_plugin ${LANG_SERBIAN} \ - "Креира директоријуме додатака. Ови директоријуми омогућавају проширење програма Vim \ - убацивањем фајла у директоријум." - -LangString str_section_plugin_home ${LANG_SERBIAN} \ - "Приватне" -LangString str_desc_plugin_home ${LANG_SERBIAN} \ - "Креира директоријуме додатака у HOME директоријуму." - -LangString str_section_plugin_vim ${LANG_SERBIAN} \ - "Дељене" -LangString str_desc_plugin_vim ${LANG_SERBIAN} \ - "Креира директоријуме додатака у Vim инÑталационом директоријуму, кориÑте их Ñви \ - на ÑиÑтему." - -LangString str_section_nls ${LANG_SERBIAN} \ - "Подршка за домаћи језик" -LangString str_desc_nls ${LANG_SERBIAN} \ - "ИнÑталира фајлове за домаћу језичку подршку." - -LangString str_unsection_register ${LANG_SERBIAN} \ - "Поништи региÑтрацију Vim" -LangString str_desc_unregister ${LANG_SERBIAN} \ - "Поништава региÑтрацију програма Vim на ÑиÑтему." - -LangString str_unsection_exe ${LANG_SERBIAN} \ - "Уклони Vim извршне фајлове/фајлове потребне у време извршавања" -LangString str_desc_rm_exe ${LANG_SERBIAN} \ - "Уклања Ñве Vim извршне фајлове и оне потребне у време извршавања." - -LangString str_ungroup_plugin ${LANG_SERBIAN} \ - "Укони директоријуме додатака" -LangString str_desc_rm_plugin ${LANG_SERBIAN} \ - "Уклања директоријуме додатака ако Ñу празни." - -LangString str_unsection_plugin_home ${LANG_SERBIAN} \ - "Приватне" -LangString str_desc_rm_plugin_home ${LANG_SERBIAN} \ - "Уклања директоријуме додатака из HOME директоријума." - -LangString str_unsection_plugin_vim ${LANG_SERBIAN} \ - "Дељене" -LangString str_desc_rm_plugin_vim ${LANG_SERBIAN} \ - "Уклања директоријуме додатака из Vim инÑталациониг директоријума." - -LangString str_unsection_rootdir ${LANG_SERBIAN} \ - "Уклони Vim корени директоријум" -LangString str_desc_rm_rootdir ${LANG_SERBIAN} \ - "Уклања Vim корени директоријум. Он Ñадржи ваше Vim конфигурационе фајлове!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_SERBIAN} \ -# "Found $vim_old_ver_count Vim versions on your system.$\r$\n\ -# This installer can only handle ${VIM_MAX_OLD_VER} versions \ -# at most.$\r$\n\ -# Please remove some versions and start again." - -#LangString str_msg_invalid_root ${LANG_SERBIAN} \ -# "Invalid install path: $vim_install_root!$\r$\n\ -# It should end with $\"vim$\"." - -#LangString str_msg_bin_mismatch ${LANG_SERBIAN} \ -# "Binary path mismatch!$\r$\n$\r$\n\ -# Expect the binary path to be $\"$vim_bin_path$\",$\r$\n\ -# but system indicates the binary path is $\"$INSTDIR$\"." - -#LangString str_msg_vim_running ${LANG_SERBIAN} \ -# "Vim is still running on your system.$\r$\n\ -# Please close all instances of Vim before you continue." - -#LangString str_msg_register_ole ${LANG_SERBIAN} \ -# "Attempting to register Vim with OLE. \ -# There is no message indicates whether this works or not." - -#LangString str_msg_unreg_ole ${LANG_SERBIAN} \ -# "Attempting to unregister Vim with OLE. \ -# There is no message indicates whether this works or not." - -#LangString str_msg_rm_start ${LANG_SERBIAN} \ -# "Uninstalling the following version:" - -#LangString str_msg_rm_fail ${LANG_SERBIAN} \ -# "Fail to uninstall the following version:" - -#LangString str_msg_no_rm_key ${LANG_SERBIAN} \ -# "Cannot find uninstaller registry key." - -#LangString str_msg_no_rm_reg ${LANG_SERBIAN} \ -# "Cannot find uninstaller from registry." - -#LangString str_msg_no_rm_exe ${LANG_SERBIAN} \ -# "Cannot access uninstaller." - -#LangString str_msg_rm_copy_fail ${LANG_SERBIAN} \ -# "Fail to copy uninstaller to temporary directory." - -#LangString str_msg_rm_run_fail ${LANG_SERBIAN} \ -# "Fail to run uninstaller." - -#LangString str_msg_abort_install ${LANG_SERBIAN} \ -# "Installer will abort." - -LangString str_msg_install_fail ${LANG_SERBIAN} \ - "ИнÑталација није уÑпела. Више Ñреће идући пут." - -LangString str_msg_rm_exe_fail ${LANG_SERBIAN} \ - "Ðеки фајлови у $0 ниÑу обриÑани!$\r$\n\ - Морате то ручно да обавите." - -#LangString str_msg_rm_root_fail ${LANG_SERBIAN} \ -# "WARNING: Cannot remove $\"$vim_install_root$\", it is not empty!" - -LangString str_msg_uninstalling ${LANG_SERBIAN} \ - "Уклањање Ñтаре верзије..." - -LangString str_msg_registering ${LANG_SERBIAN} \ - "РегиÑтровање..." - -LangString str_msg_unregistering ${LANG_SERBIAN} \ - "Поништавање региÑтрације..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_SERBIAN} \ - "Изаберите _vimrc подешавања" -LangString str_vimrc_page_subtitle ${LANG_SERBIAN} \ - "Изаберите подешавања за побољшања, таÑтатуру и миша." - -LangString str_msg_compat_title ${LANG_SERBIAN} \ - " Vi / Vim понашање " -LangString str_msg_compat_desc ${LANG_SERBIAN} \ - "&КомпатибилноÑÑ‚ и побољшања" -LangString str_msg_compat_vi ${LANG_SERBIAN} \ - "Vi компатибилно" -LangString str_msg_compat_vim ${LANG_SERBIAN} \ - "Vim оригинално" -LangString str_msg_compat_defaults ${LANG_SERBIAN} \ - "Vim Ñа неким побољшањима (учитава defaults.vim)" -LangString str_msg_compat_all ${LANG_SERBIAN} \ - "Vim Ñа Ñвим побољшањима (учитава vimrc_example.vim) (Подразумевано)" - -LangString str_msg_keymap_title ${LANG_SERBIAN} \ - " Мапирања " -LangString str_msg_keymap_desc ${LANG_SERBIAN} \ - "&Ремапира неколико таÑтера за Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, итд.)" -LangString str_msg_keymap_default ${LANG_SERBIAN} \ - "Ðемој да ремапираш таÑтере (Подразумевано)" -LangString str_msg_keymap_windows ${LANG_SERBIAN} \ - "Ремапира неколико таÑтера" - -LangString str_msg_mouse_title ${LANG_SERBIAN} \ - " Миш " -LangString str_msg_mouse_desc ${LANG_SERBIAN} \ - "&Понашање левог и деÑног таÑтера" -LangString str_msg_mouse_default ${LANG_SERBIAN} \ - "ДеÑни: иÑкачући мени, Леви: визуелни режим (Подразумевано)" -LangString str_msg_mouse_windows ${LANG_SERBIAN} \ - "ДеÑни: иÑкачући мени, Леви: режим избора (Windows)" -LangString str_msg_mouse_unix ${LANG_SERBIAN} \ - "ДеÑни: проширује избор, Леви: визуелни режим (Unix)" diff --git a/nsis/lang/simpchinese.nsi b/nsis/lang/simpchinese.nsi deleted file mode 100644 index 0c9290eab4..0000000000 --- a/nsis/lang/simpchinese.nsi +++ /dev/null @@ -1,288 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# simpchinese.nsi: Simplified Chinese language strings for gvim NSIS -# installer. -# -# Locale ID : 2052 -# Locale Name : cn -# fileencoding : UTF-8 -# Author : Guopeng Wen, David Liu - -!insertmacro MUI_LANGUAGE "SimpChinese" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_SIMPCHINESE} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_SIMPCHINESE} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_SIMPCHINESE} \ -# "..\lang\LICENSE.zh_cn.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_SIMPCHINESE} "README.zh_cn.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_SIMPCHINESE} \ -# "安装路径 (必须以 vim 结尾)" - -LangString str_show_readme ${LANG_SIMPCHINESE} \ - "安装完æˆåŽæ˜¾ç¤º README 文件" - -# Install types: -LangString str_type_typical ${LANG_SIMPCHINESE} \ - "典型安装" - -LangString str_type_minimal ${LANG_SIMPCHINESE} \ - "最å°å®‰è£…" - -LangString str_type_full ${LANG_SIMPCHINESE} \ - "完全安装" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_SIMPCHINESE} \ - "å¸è½½æ—§ç‰ˆæœ¬" -LangString str_desc_old_ver ${LANG_SIMPCHINESE} \ - "å¸è½½ç³»ç»Ÿä¸Šå·²å­˜åœ¨çš„ Vim 版本" - -LangString str_section_exe ${LANG_SIMPCHINESE} \ - "安装 Vim 图形界é¢" -LangString str_desc_exe ${LANG_SIMPCHINESE} \ - "安装 Vim 图形界é¢åŠè¿è¡Œæ—¶æ–‡ä»¶ã€‚此项为必选。" - -LangString str_section_console ${LANG_SIMPCHINESE} \ - "安装 Vim 控制å°ç‰ˆæœ¬" -LangString str_desc_console ${LANG_SIMPCHINESE} \ - "安装 Vim 的控制å°ç‰ˆæœ¬ï¼ˆvim.exe)。" - -LangString str_section_batch ${LANG_SIMPCHINESE} \ - "å®‰è£…æ‰¹å¤„ç†æ–‡ä»¶" -LangString str_desc_batch ${LANG_SIMPCHINESE} \ - "为 Vim çš„å„ç§å˜ä½“åˆ›å»ºæ‰¹å¤„ç†æ–‡ä»¶ï¼Œä»¥ä¾¿åœ¨å‘½ä»¤è¡Œä¸‹è¿è¡Œ Vim。" - -LangString str_group_icons ${LANG_SIMPCHINESE} \ - "创建图标" -LangString str_desc_icons ${LANG_SIMPCHINESE} \ - "为 Vim 创建若干图标,以方便使用 Vim。" - -LangString str_section_desktop ${LANG_SIMPCHINESE} \ - "桌é¢å›¾æ ‡" -LangString str_desc_desktop ${LANG_SIMPCHINESE} \ - "创建 Vim 的桌é¢å¿«æ·æ–¹å¼å›¾æ ‡ã€‚" - -LangString str_section_start_menu ${LANG_SIMPCHINESE} \ - "「开始ã€èœå•程åºç»„" -LangString str_desc_start_menu ${LANG_SIMPCHINESE} \ - "在开始èœå•中添加 Vim 程åºç»„(适用于 Windows 95 åŠä»¥ä¸Šç‰ˆæœ¬ï¼‰" - -#LangString str_section_quick_launch ${LANG_SIMPCHINESE} \ -# "在快速å¯åЍå¯åЍæ ä¸­" -#LangString str_desc_quick_launch ${LANG_SIMPCHINESE} \ -# "在快速å¯åЍæ ä¸­æ·»åŠ  Vim 图标。" - -LangString str_section_edit_with ${LANG_SIMPCHINESE} \ - "添加到快æ·èœå•" -LangString str_desc_edit_with ${LANG_SIMPCHINESE} \ - "将“用 Vim ç¼–è¾‘â€æ·»åŠ åˆ°å¿«æ·èœå•中。" - -#LangString str_section_edit_with32 ${LANG_SIMPCHINESE} \ -# "32 ä½ç‰ˆæœ¬" -#LangString str_desc_edit_with32 ${LANG_SIMPCHINESE} \ -# "å°† Vim 添加到 32 ä½ç¨‹åºçš„“打开方å¼â€å¿«æ·èœå•中。" - -#LangString str_section_edit_with64 ${LANG_SIMPCHINESE} \ -# "64 ä½ç‰ˆæœ¬" -#LangString str_desc_edit_with64 ${LANG_SIMPCHINESE} \ -# "å°† Vim 添加到 64 ä½ç¨‹åºçš„“打开方å¼â€å¿«æ·èœå•中。" - -LangString str_section_vim_rc ${LANG_SIMPCHINESE} \ - "创建默认é…置文件" -LangString str_desc_vim_rc ${LANG_SIMPCHINESE} \ - "在安装目录下生æˆé»˜è®¤çš„ Vim é…置文件(_vimrc)。\ - 如果该文件已ç»å­˜åœ¨ï¼Œåˆ™è·³è¿‡è¯¥é¡¹ã€‚" - -LangString str_group_plugin ${LANG_SIMPCHINESE} \ - "创建æ’件目录" -LangString str_desc_plugin ${LANG_SIMPCHINESE} \ - "创建(空的)æ’件目录结构。æ’件目录用于安装 Vim 扩展æ’件,\ - åªè¦å°†æ–‡ä»¶å¤åˆ¶åˆ°ç›¸å…³çš„å­ç›®å½•中å³å¯ã€‚" - -LangString str_section_plugin_home ${LANG_SIMPCHINESE} \ - "ç§æœ‰æ’件目录" -LangString str_desc_plugin_home ${LANG_SIMPCHINESE} \ - "åœ¨ä¸»ç›®å½•åˆ›å»ºç§æœ‰æ’件目录。" - -LangString str_section_plugin_vim ${LANG_SIMPCHINESE} \ - "公共æ’件目录" -LangString str_desc_plugin_vim ${LANG_SIMPCHINESE} \ - "在 Vim 安装目录下创建(空的)æ’件目录结构,系统上所有用户都能使用安装在\ - 该目录下的扩展æ’件。" - -LangString str_section_nls ${LANG_SIMPCHINESE} \ - "安装多语言支æŒ" -LangString str_desc_nls ${LANG_SIMPCHINESE} \ - "安装用于多语言支æŒçš„æ–‡ä»¶ã€‚" - -LangString str_unsection_register ${LANG_SIMPCHINESE} \ - "删除 Vim 系统é…ç½®" -LangString str_desc_unregister ${LANG_SIMPCHINESE} \ - "删除和 Vim 相关的系统é…置。" - -LangString str_unsection_exe ${LANG_SIMPCHINESE} \ - "删除 Vim 执行文件以åŠè„šæœ¬" -LangString str_desc_rm_exe ${LANG_SIMPCHINESE} \ - "删除 Vim 的所有执行文件åŠè„šæœ¬ã€‚" - -LangString str_ungroup_plugin ${LANG_SIMPCHINESE} \ - "移除æ’件目录" -LangString str_desc_rm_plugin ${LANG_SIMPCHINESE} \ - "移除æ’件目录(如果目录为空)。" - -LangString str_unsection_plugin_home ${LANG_SIMPCHINESE} \ - "ç§æœ‰æ’件目录" -LangString str_desc_rm_plugin_home ${LANG_SIMPCHINESE} \ - "ä»Žä¸»ç›®å½•ä¸­ç§»é™¤ç§æœ‰æ’件目录。" - -LangString str_unsection_plugin_vim ${LANG_SIMPCHINESE} \ - "公共æ’件目录" -LangString str_desc_rm_plugin_vim ${LANG_SIMPCHINESE} \ - "从 Vim 安装目录下移除æ’件目录。" - -LangString str_unsection_rootdir ${LANG_SIMPCHINESE} \ - "移除 Vim 主目录" -LangString str_desc_rm_rootdir ${LANG_SIMPCHINESE} \ - "移除 Vim çš„ä¸»ç›®å½•ï¼Œè¯¥ç›®å½•åŒ…å«æ‚¨çš„é…置文件ï¼" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_SIMPCHINESE} \ -# "您的系统上安装了 $vim_old_ver_count 个ä¸åŒç‰ˆæœ¬çš„ Vim,$\r$\n\ -# ä½†æœ¬å®‰è£…ç¨‹åºæœ€å¤šåªèƒ½å¤„ç† ${VIM_MAX_OLD_VER} 个版本。$\r$\n\ -# 请您手工删除一些旧版本以åŽå†è¿è¡Œæœ¬å®‰è£…程åºã€‚" - -#LangString str_msg_invalid_root ${LANG_SIMPCHINESE} \ -# "安装路径“$vim_install_rootâ€æ— æ•ˆï¼$\r$\n\ -# 该路径必须以 vim 结尾。" - -#LangString str_msg_bin_mismatch ${LANG_SIMPCHINESE} \ -# "Vim 执行程åºå®‰è£…路径异常ï¼$\r$\n$\r$\n\ -# 该版本 Vim 的执行程åºå®‰è£…路径应该是“$vim_bin_pathâ€,$\r$\n\ -# è€Œç³»ç»Ÿå´æŒ‡ç¤ºè¯¥è·¯å¾„为“$INSTDIRâ€ã€‚" - -#LangString str_msg_vim_running ${LANG_SIMPCHINESE} \ -# "æ‚¨çš„ç³»ç»Ÿä¸Šä»æœ‰ Vim 在è¿è¡Œï¼Œ$\r$\n\ -# 请您在执行åŽç»­æ­¥éª¤å‰é€€å‡ºè¿™äº› Vim。" - -#LangString str_msg_register_ole ${LANG_SIMPCHINESE} \ -# "试图注册 Vim OLE æœåŠ¡å™¨ã€‚è¯·æ³¨æ„æ— è®ºæˆåŠŸä¸Žå¦éƒ½ä¸å†æ˜¾ç¤ºè¿›ä¸€æ­¥çš„ä¿¡æ¯ã€‚" - -#LangString str_msg_unreg_ole ${LANG_SIMPCHINESE} \ -# "试图注销 Vim OLE æœåŠ¡å™¨ã€‚è¯·æ³¨æ„æ— è®ºæˆåŠŸä¸Žå¦éƒ½ä¸å†æ˜¾ç¤ºè¿›ä¸€æ­¥çš„ä¿¡æ¯ã€‚" - -#LangString str_msg_rm_start ${LANG_SIMPCHINESE} \ -# "开始å¸è½½ä»¥ä¸‹ç‰ˆæœ¬ï¼š" - -#LangString str_msg_rm_fail ${LANG_SIMPCHINESE} \ -# "以下版本å¸è½½å¤±è´¥ï¼š" - -#LangString str_msg_no_rm_key ${LANG_SIMPCHINESE} \ -# "找ä¸åˆ°å¸è½½ç¨‹åºçš„æ³¨å†Œè¡¨é”®ã€‚" - -#LangString str_msg_no_rm_reg ${LANG_SIMPCHINESE} \ -# "在注册表中未找到å¸è½½ç¨‹åºè·¯å¾„。" - -#LangString str_msg_no_rm_exe ${LANG_SIMPCHINESE} \ -# "找ä¸åˆ°å¸è½½ç¨‹åºã€‚" - -#LangString str_msg_rm_copy_fail ${LANG_SIMPCHINESE} \ -# "无法将å¸è½½ç¨‹åºå¤åˆ¶åˆ°ä¸´æ—¶ç›®å½•。" - -#LangString str_msg_rm_run_fail ${LANG_SIMPCHINESE} \ -# "执行å¸è½½ç¨‹åºå¤±è´¥ã€‚" - -#LangString str_msg_abort_install ${LANG_SIMPCHINESE} \ -# "安装程åºå°†é€€å‡ºã€‚" - -LangString str_msg_install_fail ${LANG_SIMPCHINESE} \ - "å®‰è£…å¤±è´¥ã€‚ç¥æ‚¨ä¸‹æ¬¡å¥½è¿ã€‚" - -LangString str_msg_rm_exe_fail ${LANG_SIMPCHINESE} \ - "目录“$0â€ä¸‹æœ‰éƒ¨åˆ†æ–‡ä»¶åˆ é™¤å¤±è´¥ï¼$\r$\n\ - 您åªèƒ½æ‰‹å·¥åˆ é™¤è¯¥ç›®å½•。" - -#LangString str_msg_rm_root_fail ${LANG_SIMPCHINESE} \ -# "警告:无法删除 Vim 安装目录“$vim_install_rootâ€ï¼Œ\ -# è¯¥ç›®å½•ä¸‹ä»æœ‰å…¶ä»–文件。" - -LangString str_msg_uninstalling ${LANG_SIMPCHINESE} \ - "正在å¸è½½æ—§ç‰ˆæœ¬..." - -LangString str_msg_registering ${LANG_SIMPCHINESE} \ - "正在注册..." - -LangString str_msg_unregistering ${LANG_SIMPCHINESE} \ - "æ­£åœ¨å–æ¶ˆæ³¨å†Œ..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_SIMPCHINESE} \ - "设置 _vimrc" -LangString str_vimrc_page_subtitle ${LANG_SIMPCHINESE} \ - "选择键盘ã€é¼ æ ‡å’Œæ‰©å±•设置。" - -LangString str_msg_compat_title ${LANG_SIMPCHINESE} \ - "Vi / Vim 行为" -LangString str_msg_compat_desc ${LANG_SIMPCHINESE} \ - "兼容性与扩展(&B)" -LangString str_msg_compat_vi ${LANG_SIMPCHINESE} \ - "原始 Vi" -LangString str_msg_compat_vim ${LANG_SIMPCHINESE} \ - "原始 Vim" -LangString str_msg_compat_defaults ${LANG_SIMPCHINESE} \ - "Vim 原始版本和部分扩展 (加载 defaults.vim)" -LangString str_msg_compat_all ${LANG_SIMPCHINESE} \ - "Vim 原始版本和所有扩展 (加载 vimrc_example.vim) (缺çœ)" - -LangString str_msg_keymap_title ${LANG_SIMPCHINESE} \ - "键盘映射" -LangString str_msg_keymap_desc ${LANG_SIMPCHINESE} \ - "为 Windows 映射按键(&R) (例如:Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F ç­‰)" -LangString str_msg_keymap_default ${LANG_SIMPCHINESE} \ - "䏿˜ å°„按键 (缺çœ)" -LangString str_msg_keymap_windows ${LANG_SIMPCHINESE} \ - "映射一些按键" - -LangString str_msg_mouse_title ${LANG_SIMPCHINESE} \ - "é¼ æ ‡" -LangString str_msg_mouse_desc ${LANG_SIMPCHINESE} \ - "左键和å³é”®è¡Œä¸º(&B)" -LangString str_msg_mouse_default ${LANG_SIMPCHINESE} \ - "å³é”®ï¼šå¼¹å‡ºèœå•, 左键:å¯è§†åŒ–æ¨¡å¼ (缺çœ)" -LangString str_msg_mouse_windows ${LANG_SIMPCHINESE} \ - "å³é”®ï¼šå¼¹å‡ºèœå•, 左键:é€‰æ‹©æ¨¡å¼ (Windows)" -LangString str_msg_mouse_unix ${LANG_SIMPCHINESE} \ - "å³é”®ï¼š 扩展选择, 左键:å¯è§†åŒ–æ¨¡å¼ (Unix)" diff --git a/nsis/lang/tradchinese.nsi b/nsis/lang/tradchinese.nsi deleted file mode 100644 index 5d9a5d3a56..0000000000 --- a/nsis/lang/tradchinese.nsi +++ /dev/null @@ -1,289 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# tradchinese.nsi: Traditional Chinese language strings for gvim NSIS -# installer. -# -# Locale ID : 1028 -# Locale Name : tw -# fileencoding : UTF-8 -# Author : Guopeng Wen - -!insertmacro MUI_LANGUAGE "TradChinese" - - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_TRADCHINESE} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_TRADCHINESE} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_TRADCHINESE} \ -# "..\lang\LICENSE.zh_tw.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_TRADCHINESE} "README.zh_tw.txt" - -############################################################################## -# MUI Configuration Strings {{{1 -############################################################################## - -#LangString str_dest_folder ${LANG_TRADCHINESE} \ -# "安è£è³‡æ–™å¤¾ (必須以 vim çµå°¾)" - -LangString str_show_readme ${LANG_TRADCHINESE} \ - "安è£å®Œæˆå¾Œé¡¯ç¤º README 檔案" - -# Install types: -LangString str_type_typical ${LANG_TRADCHINESE} \ - "典型安è£" - -LangString str_type_minimal ${LANG_TRADCHINESE} \ - "最å°å®‰è£" - -LangString str_type_full ${LANG_TRADCHINESE} \ - "完全安è£" - - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_TRADCHINESE} \ - "移除舊版本" -LangString str_desc_old_ver ${LANG_TRADCHINESE} \ - "移除閣下電腦上舊版本的 Vim。" - -LangString str_section_exe ${LANG_TRADCHINESE} \ - "å®‰è£ Vim 圖形界é¢ç¨‹å¼" -LangString str_desc_exe ${LANG_TRADCHINESE} \ - "å®‰è£ Vim 圖形界é¢ç¨‹å¼åŠè…³æœ¬ã€‚此為必é¸å®‰è£ã€‚" - -LangString str_section_console ${LANG_TRADCHINESE} \ - "å®‰è£ Vim 命令行程å¼" -LangString str_desc_console ${LANG_TRADCHINESE} \ - "å®‰è£ Vim å‘½ä»¤è¡Œç¨‹å¼ (vim.exe)。該程å¼åœ¨æŽ§åˆ¶è‡ºçª—å£ä¸­é‹è¡Œã€‚" - -LangString str_section_batch ${LANG_TRADCHINESE} \ - "å®‰è£æ‰¹æ¬¡æª”案" -LangString str_desc_batch ${LANG_TRADCHINESE} \ - "為 Vim çš„å„種變體創建批次檔,以便在命令行下啟動 Vim。" - -LangString str_group_icons ${LANG_TRADCHINESE} \ - "建立 Vim 圖示" -LangString str_desc_icons ${LANG_TRADCHINESE} \ - "建立若干 Vim 圖示,以便于使用 Vim。" - -LangString str_section_desktop ${LANG_TRADCHINESE} \ - "於桌é¢" -LangString str_desc_desktop ${LANG_TRADCHINESE} \ - "建立若干 Vim 圖示於桌é¢ä¸Šï¼Œä»¥æ–¹ä¾¿å•Ÿå‹• Vim。" - -LangString str_section_start_menu ${LANG_TRADCHINESE} \ - "於「開始ã€åŠŸèƒ½è¡¨çš„ã€Œç¨‹å¼ã€é›†" -LangString str_desc_start_menu ${LANG_TRADCHINESE} \ - "在「開始ã€åŠŸèƒ½è¡¨çš„ã€Œç¨‹å¼ã€é›†ä¸­å»ºç«‹ Vim 啟動組。\ - é©ç”¨äºŽ Windows 95 åŠä»¥ä¸Šç‰ˆæœ¬ã€‚" - -#LangString str_section_quick_launch ${LANG_TRADCHINESE} \ -# "於快速啟動列" -#LangString str_desc_quick_launch ${LANG_TRADCHINESE} \ -# "在快速啟動列中建立 Vim 圖示。" - -LangString str_section_edit_with ${LANG_TRADCHINESE} \ - "安è£å¿«æ·é¸å–®" -LangString str_desc_edit_with ${LANG_TRADCHINESE} \ - "在「打開方å¼ã€å¿«æ·é¸å–®ä¸­æ·»åŠ  Vim 項。" - -#LangString str_section_edit_with32 ${LANG_TRADCHINESE} \ -# "32 ä½å…ƒç‰ˆæœ¬" -#LangString str_desc_edit_with32 ${LANG_TRADCHINESE} \ -# "在 32 ä½å…ƒç¨‹å¼çš„「打開方å¼ã€å¿«æ·é¸å–®ä¸­æ·»åŠ  Vim 項。" - -#LangString str_section_edit_with64 ${LANG_TRADCHINESE} \ -# "64 ä½å…ƒç‰ˆæœ¬" -#LangString str_desc_edit_with64 ${LANG_TRADCHINESE} \ -# "在 64 ä½å…ƒç¨‹å¼çš„「打開方å¼ã€å¿«æ·é¸å–®ä¸­æ·»åŠ  Vim 項。" - -LangString str_section_vim_rc ${LANG_TRADCHINESE} \ - "建立默èªè¨­å®šæª”" -LangString str_desc_vim_rc ${LANG_TRADCHINESE} \ - "在安è£è³‡æ–™å¤¾ä¸‹å»ºç«‹é»˜èªçš„ Vim 設定檔(_vimrc)。\ - è‹¥è©²è¨­å®šæª”å·²ç¶“å­˜åœ¨ï¼Œå‰‡ç•¥éŽæ­¤é …。" - -LangString str_group_plugin ${LANG_TRADCHINESE} \ - "建立æ’件資料夾" -LangString str_desc_plugin ${LANG_TRADCHINESE} \ - "建立(空的)æ’ä»¶è³‡æ–™å¤¾çµæ§‹ã€‚æ’ä»¶è³‡æ–™å¤¾ç”¨äºŽå®‰è£ Vim 的擴展æ’件,\ - åªè¦å°‡æª”案復制到相關的å­è³‡æ–™å¤¾ä¸­å³å¯ã€‚" - -LangString str_section_plugin_home ${LANG_TRADCHINESE} \ - "建立æ’件資料夾" -LangString str_desc_plugin_home ${LANG_TRADCHINESE} \ - "Create plugin directories in HOME directory." - -LangString str_section_plugin_vim ${LANG_TRADCHINESE} \ - "建立共享æ’件資料夾" -LangString str_desc_plugin_vim ${LANG_TRADCHINESE} \ - "在 Vim 安è£è³‡æ–™å¤¾ä¸‹å»ºç«‹(空的)æ’ä»¶è³‡æ–™å¤¾çµæ§‹ï¼Œé›»è…¦ä¸Šæ‰€æœ‰ç”¨æˆ¶éƒ½èƒ½ä½¿ç”¨å®‰è£\ - 在該資料夾里的擴展æ’件。" - -LangString str_section_nls ${LANG_TRADCHINESE} \ - "å®‰è£æœ¬åœ°èªžè¨€æ”¯æŒ" -LangString str_desc_nls ${LANG_TRADCHINESE} \ - "安è£ç”¨äºŽæ”¯æŒæœ¬åœ°èªžè¨€çš„æª”案。" - -LangString str_unsection_register ${LANG_TRADCHINESE} \ - "移除 Vim 系統設定" -LangString str_desc_unregister ${LANG_TRADCHINESE} \ - "移除與 Vim 相關的系統設定。" - -LangString str_unsection_exe ${LANG_TRADCHINESE} \ - "移除 Vim 程å¼åŠè…³æœ¬" -LangString str_desc_rm_exe ${LANG_TRADCHINESE} \ - "移除所有的 Vim 程å¼åŠè…³æœ¬ã€‚" - -LangString str_ungroup_plugin ${LANG_TRADCHINESE} \ - "Remove plugin directories" -LangString str_desc_rm_plugin ${LANG_TRADCHINESE} \ - "Remove the plugin directories if they are empty." - -LangString str_unsection_plugin_home ${LANG_TRADCHINESE} \ - "Private" -LangString str_desc_rm_plugin_home ${LANG_TRADCHINESE} \ - "Remove the vimfiles directory in HOME directory." - -LangString str_unsection_plugin_vim ${LANG_TRADCHINESE} \ - "Shared" -LangString str_desc_rm_plugin_vim ${LANG_TRADCHINESE} \ - "Remove the vimfiles directory in Vim install directory." - -LangString str_unsection_rootdir ${LANG_TRADCHINESE} \ - "Remove the Vim root directory" -LangString str_desc_rm_rootdir ${LANG_TRADCHINESE} \ - "Remove the Vim root directory. It contains your Vim configuration files!" - - -############################################################################## -# Messages {{{1 -############################################################################## - -#LangString str_msg_too_many_ver ${LANG_TRADCHINESE} \ -# "閣下的電腦上安è£äº† $vim_old_ver_count 個ä¸åŒç‰ˆæœ¬çš„ Vim,$\r$\n\ -# 但是本安è£ç¨‹å¼æœ€å¤šåªèƒ½è™•ç† ${VIM_MAX_OLD_VER} 個版本。$\r$\n\ -# 煩請閣下手工移除一些版本以åŽå†é‹è¡Œæœ¬å®‰è£ç¨‹å¼ã€‚" - -#LangString str_msg_invalid_root ${LANG_TRADCHINESE} \ -# "安è£è³‡æ–™å¤¾ã€Œ$vim_install_rootã€ç„¡æ•ˆï¼$\r$\n\ -# 該資料夾必須以「vimã€çµå°¾ã€‚" - -#LangString str_msg_bin_mismatch ${LANG_TRADCHINESE} \ -# "Vim 執行程å¼å®‰è£è·¯å¾‘異常ï¼$\r$\n$\r$\n\ -# 該版本 Vim 的執行程å¼å®‰è£è·¯å¾‘應該是「$vim_bin_pathã€,$\r$\n\ -# è€Œç³»çµ±å»æŒ‡ç¤ºè©²è·¯å¾‘為「$INSTDIRã€ã€‚" - -#LangString str_msg_vim_running ${LANG_TRADCHINESE} \ -# "閣下的電腦上尚有正在é‹è¡Œä¹‹ Vim,$\r$\n\ -# 煩請閣下在執行åŽçºŒæ­¥é©Ÿå‰å°‡å…¶å…¨éƒ¨é€€å‡ºã€‚" - -#LangString str_msg_register_ole ${LANG_TRADCHINESE} \ -# "試圖注冊 Vim OLE 伺æœç¨‹å¼ã€‚請注æ„ä¸è«–æˆåŠŸèˆ‡å¦éƒ½ä¸å†é¡¯ç¤ºé€²ä¸€æ­¥çš„ä¿¡æ¯ã€‚" - -#LangString str_msg_unreg_ole ${LANG_TRADCHINESE} \ -# "試圖注銷 Vim OLE 伺æœç¨‹å¼ã€‚請注æ„ä¸è«–æˆåŠŸèˆ‡å¦éƒ½ä¸å†é¡¯ç¤ºé€²ä¸€æ­¥çš„ä¿¡æ¯ã€‚" - -#LangString str_msg_rm_start ${LANG_TRADCHINESE} \ -# "正移除如下版本:" - -#LangString str_msg_rm_fail ${LANG_TRADCHINESE} \ -# "以下版本移除失敗:" - -#LangString str_msg_no_rm_key ${LANG_TRADCHINESE} \ -# "找ä¸åˆ°å安è£ç¨‹å¼çš„登錄檔入å£ã€‚" - -#LangString str_msg_no_rm_reg ${LANG_TRADCHINESE} \ -# "在登錄檔中未找到å安è£ç¨‹å¼è·¯å¾‘。" - -#LangString str_msg_no_rm_exe ${LANG_TRADCHINESE} \ -# "找ä¸åˆ°å安è£ç¨‹å¼ã€‚" - -#LangString str_msg_rm_copy_fail ${LANG_TRADCHINESE} \ -# "無法將法將å安è£ç¨‹å¼å¤åˆ¶åˆ°è‡¨æ™‚目錄。" - -#LangString str_msg_rm_run_fail ${LANG_TRADCHINESE} \ -# "執行å安è£ç¨‹å¼å¤±æ•—。" - -#LangString str_msg_abort_install ${LANG_TRADCHINESE} \ -# "安è£ç¨‹å¼å°‡é€€å‡ºã€‚" - -LangString str_msg_install_fail ${LANG_TRADCHINESE} \ - "安è£å¤±æ•—。é ç¥ä¸‹æ¬¡å¥½é‹ã€‚" - -LangString str_msg_rm_exe_fail ${LANG_TRADCHINESE} \ - "資料夾「$0ã€ä¸‹æœ‰éƒ¨åˆ†æª”案未能移除ï¼$\r$\n\ - 閣下åªèƒ½æ‰‹å·¥ç§»é™¤è©²è³‡æ–™å¤¾ã€‚" - -#LangString str_msg_rm_root_fail ${LANG_TRADCHINESE} \ -# "警告:無法刪除 Vim 安è£è³‡æ–™å¤¾ã€Œ$vim_install_rootã€ï¼Œ\ -# è©²è³‡æ–™å¤¾ä¸‹ä»æœ‰å…¶ä»–檔案。" - -LangString str_msg_uninstalling ${LANG_TRADCHINESE} \ - "Uninstalling the old version..." - -LangString str_msg_registering ${LANG_TRADCHINESE} \ - "Registering..." - -LangString str_msg_unregistering ${LANG_TRADCHINESE} \ - "Unregistering..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_TRADCHINESE} \ - "Choose _vimrc settings" -LangString str_vimrc_page_subtitle ${LANG_TRADCHINESE} \ - "Choose the settings for enhancement, keyboard and mouse." - -LangString str_msg_compat_title ${LANG_TRADCHINESE} \ - " Vi / Vim behavior " -LangString str_msg_compat_desc ${LANG_TRADCHINESE} \ - "&Compatibility and enhancements" -LangString str_msg_compat_vi ${LANG_TRADCHINESE} \ - "Vi compatible" -LangString str_msg_compat_vim ${LANG_TRADCHINESE} \ - "Vim original" -LangString str_msg_compat_defaults ${LANG_TRADCHINESE} \ - "Vim with some enhancements (load defaults.vim)" -LangString str_msg_compat_all ${LANG_TRADCHINESE} \ - "Vim with all enhancements (load vimrc_example.vim) (Default)" - -LangString str_msg_keymap_title ${LANG_TRADCHINESE} \ - " Mappings " -LangString str_msg_keymap_desc ${LANG_TRADCHINESE} \ - "&Remap a few keys for Windows (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" -LangString str_msg_keymap_default ${LANG_TRADCHINESE} \ - "Do not remap keys (Default)" -LangString str_msg_keymap_windows ${LANG_TRADCHINESE} \ - "Remap a few keys" - -LangString str_msg_mouse_title ${LANG_TRADCHINESE} \ - " Mouse " -LangString str_msg_mouse_desc ${LANG_TRADCHINESE} \ - "&Behavior of right and left buttons" -LangString str_msg_mouse_default ${LANG_TRADCHINESE} \ - "Right: popup menu, Left: visual mode (Default)" -LangString str_msg_mouse_windows ${LANG_TRADCHINESE} \ - "Right: popup menu, Left: select mode (Windows)" -LangString str_msg_mouse_unix ${LANG_TRADCHINESE} \ - "Right: extends selection, Left: visual mode (Unix)" diff --git a/nsis/lang/turkish.nsi b/nsis/lang/turkish.nsi deleted file mode 100644 index 3522faa7f4..0000000000 --- a/nsis/lang/turkish.nsi +++ /dev/null @@ -1,206 +0,0 @@ -# vi:set ts=8 sts=4 sw=4 et fdm=marker: -# -# turkish.nsi: Turkish language strings for gvim NSIS installer. -# -# Locale ID : 1055 -# Locale Name : tr -# fileencoding : UTF-8 -# Author : Emir SARI - -!insertmacro MUI_LANGUAGE "Turkish" - -# Overwrite the default translation. -# These strings should be always English. Otherwise dosinst.c fails. -LangString ^SetupCaption ${LANG_TURKISH} \ - "$(^Name) Setup" -LangString ^UninstallCaption ${LANG_TURKISH} \ - "$(^Name) Uninstall" - -############################################################################## -# Translated license file for the license page {{{1 -############################################################################## - -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_TURKISH} "..\lang\LICENSE.tr.nsis.txt" - -############################################################################## -# Translated README.txt file, which is opened after installation {{{1 -############################################################################## - -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_TURKISH} "README.tr.txt" - -############################################################################## - -LangString str_show_readme ${LANG_TURKISH} \ - "Kurulum bittikten sonra README dosyasını aç" - -# Install types: -LangString str_type_typical ${LANG_TURKISH} \ - "Normal" - -LangString str_type_minimal ${LANG_TURKISH} \ - "Küçük" - -LangString str_type_full ${LANG_TURKISH} \ - "Tam" - -############################################################################## -# Section Titles & Description {{{1 -############################################################################## - -LangString str_section_old_ver ${LANG_TURKISH} \ - "Eski sürümü kaldır" -LangString str_desc_old_ver ${LANG_TURKISH} \ - "Vim'in eski sürümünü sisteminizden kaldırır." - -LangString str_section_exe ${LANG_TURKISH} \ - "Vim grafik arabirimi ve çalışma dosyaları" -LangString str_desc_exe ${LANG_TURKISH} \ - "Vim program baÅŸlatıcı ve çalışma dosyaları. Bu bileÅŸen zorunludur." - -LangString str_section_console ${LANG_TURKISH} \ - "Vim konsol sürümü" -LangString str_desc_console ${LANG_TURKISH} \ - "Vim'in konsol sürümü (vim.exe)." - -LangString str_section_batch ${LANG_TURKISH} \ - ".bat dosyaları oluÅŸtur" -LangString str_desc_batch ${LANG_TURKISH} \ - "Vim için komut satırında kullanmak üzere .bat dosyaları oluÅŸturur" - -LangString str_group_icons ${LANG_TURKISH} \ - "Vim için kısayollar oluÅŸtur" -LangString str_desc_icons ${LANG_TURKISH} \ - "Kolay eriÅŸim için Vim kısayolları oluÅŸturur." - -LangString str_section_desktop ${LANG_TURKISH} \ - "Masaüstünde" -LangString str_desc_desktop ${LANG_TURKISH} \ - "gVim programı için Masaüstünde kısayol oluÅŸturur." - -LangString str_section_start_menu ${LANG_TURKISH} \ - "BaÅŸlat Menüsü - Programlar klasöründe" -LangString str_desc_start_menu ${LANG_TURKISH} \ - "Vim kısayolunu BaÅŸlat Menüsüne ekler." - -LangString str_section_edit_with ${LANG_TURKISH} \ - "Vim ile Aç" -LangString str_desc_edit_with ${LANG_TURKISH} \ - "Vim'i $\"Birlikte aç$\" saÄŸ tık menüsüne ekler." - - LangString str_section_vim_rc ${LANG_TURKISH} \ - "Bir yapılandırma dosyası oluÅŸtur" -LangString str_desc_vim_rc ${LANG_TURKISH} \ - "EÄŸer yoksa bir yapılandırma dosyası (_vimrc) oluÅŸturur." - -LangString str_group_plugin ${LANG_TURKISH} \ - "Eklenti dizinleri oluÅŸtur" -LangString str_desc_plugin ${LANG_TURKISH} \ - "Bu dizinlere Vim eklentilerini yerleÅŸtirerek Vim'e yeni \ - özellikler kazandırabilirsiniz." - -LangString str_section_plugin_home ${LANG_TURKISH} \ - "Gizli" -LangString str_desc_plugin_home ${LANG_TURKISH} \ - "Eklenti dizinlerini EV dizininde oluÅŸturur." - -LangString str_section_plugin_vim ${LANG_TURKISH} \ - "Paylaşılan" -LangString str_desc_plugin_vim ${LANG_TURKISH} \ - "Eklenti dizinlerini Vim yükleme dizininde oluÅŸturur. Bu eklentilerden \ - bilgisayarın tüm kullanıcıları yararlanabilir." - -LangString str_section_nls ${LANG_TURKISH} \ - "Ek dil desteÄŸi" -LangString str_desc_nls ${LANG_TURKISH} \ - "Mevcut olan Vim yerelleÅŸtirmelerini yükler." - -LangString str_unsection_register ${LANG_TURKISH} \ - "Vim kaydını kaldır" -LangString str_desc_unregister ${LANG_TURKISH} \ - "Vim'in bu bilgisayardaki kaydını kaldırır." - -LangString str_unsection_exe ${LANG_TURKISH} \ - "Vim programını ve çalıştırma dosyalarını kaldır" -LangString str_desc_rm_exe ${LANG_TURKISH} \ - "Vim çalıştırılabilir dosyalarını ve diÄŸer dosyaları kaldırır." - -LangString str_ungroup_plugin ${LANG_TURKISH} \ - "Eklenti dizinlerini kaldır" -LangString str_desc_rm_plugin ${LANG_TURKISH} \ - "Eklenti dizinlerini eÄŸer boÅŸ ise kaldırır." - -LangString str_unsection_plugin_home ${LANG_TURKISH} \ - "Gizli" -LangString str_desc_rm_plugin_home ${LANG_TURKISH} \ - "Eklenti dizinlerini EV dizininden kaldırır." - -LangString str_unsection_plugin_vim ${LANG_TURKISH} \ - "Paylaşılan" -LangString str_desc_rm_plugin_vim ${LANG_TURKISH} \ - "Eklenti dizinlerini Vim yükleme dizininden kaldırır." - -LangString str_unsection_rootdir ${LANG_TURKISH} \ - "Vim kök dizinini kaldır" -LangString str_desc_rm_rootdir ${LANG_TURKISH} \ - "Vim kök dizinini kaldırır. Bu dizin Vim yapılandırma dosyalarını içerir!" - - LangString str_msg_install_fail ${LANG_TURKISH} \ - "Yükleme baÅŸarısız oldu. Yeniden deneyin." - -LangString str_msg_rm_exe_fail ${LANG_TURKISH} \ - "$0 içindeki bazı dosyalar silinemedi!$\r$\n\ - Bu dosyaları el ile kaldırmalısınız." - - LangString str_msg_uninstalling ${LANG_TURKISH} \ - "Eski sürüm kaldırılıyor..." - -LangString str_msg_registering ${LANG_TURKISH} \ - "Kaydediliyor..." - -LangString str_msg_unregistering ${LANG_TURKISH} \ - "Kayıt siliniyor..." - - -############################################################################## -# Dialog Box {{{1 -############################################################################## - -LangString str_vimrc_page_title ${LANG_TURKISH} \ - "_vimrc ayarlarını seçin" -LangString str_vimrc_page_subtitle ${LANG_TURKISH} \ - "Yüklenecek ek özellikler, klavye ve fare için ayarları seçin." - -LangString str_msg_compat_title ${LANG_TURKISH} \ - " Vi / Vim davranışı " -LangString str_msg_compat_desc ${LANG_TURKISH} \ - "&Uyumluluk ve ek özellikler" -LangString str_msg_compat_vi ${LANG_TURKISH} \ - "Vi uyumlu" -LangString str_msg_compat_vim ${LANG_TURKISH} \ - "Vim orijinal" -LangString str_msg_compat_defaults ${LANG_TURKISH} \ - "Vim ve ek olarak bazı ek özellikler (load defaults.vim)" -LangString str_msg_compat_all ${LANG_TURKISH} \ - "Vim ve ek olarak tüm ek özellikler (load vimrc_example.vim) (Default)" - -LangString str_msg_keymap_title ${LANG_TURKISH} \ - " Klavye İşlevleri " -LangString str_msg_keymap_desc ${LANG_TURKISH} \ - "&Windows için bazı düğmeleri yeniden ayarla (Ctrl-V, Ctrl-C, Ctrl-A, Ctrl-S, Ctrl-F, etc)" -LangString str_msg_keymap_default ${LANG_TURKISH} \ - "Düğme iÅŸlevlerini deÄŸiÅŸtirme (varsayılan)" -LangString str_msg_keymap_windows ${LANG_TURKISH} \ - "Bazı düğmeleri yeniden ayarla" - -LangString str_msg_mouse_title ${LANG_TURKISH} \ - " Fare İşlevleri " -LangString str_msg_mouse_desc ${LANG_TURKISH} \ - "&SaÄŸ ve sol düğme davranışı" -LangString str_msg_mouse_default ${LANG_TURKISH} \ - "SaÄŸ: açılır menü, Sol: Görsel Kip (varsayılan)" -LangString str_msg_mouse_windows ${LANG_TURKISH} \ - "SaÄŸ: açılır menü, Sol: seçim kipi (Windows)" -LangString str_msg_mouse_unix ${LANG_TURKISH} \ - "SaÄŸ: seçimi geniÅŸlet, Sol: Görsel Kip (Unix)" diff --git a/runtime/autoload/README.txt b/runtime/autoload/README.txt index 3b18d3dde5..acc1bbf370 100644 --- a/runtime/autoload/README.txt +++ b/runtime/autoload/README.txt @@ -11,12 +11,15 @@ paste.vim common code for mswin.vim, menu.vim and macmap.vim spellfile.vim downloading of a missing spell file Omni completion files: +adacomplete.vim Ada +beancount.vim Beancount ccomplete.vim C csscomplete.vim HTML / CSS htmlcomplete.vim HTML -javascriptcomplete.vim Javascript +javascriptcomplete.vim Javascript phpcomplete.vim PHP pythoncomplete.vim Python +python3complete.vim Python rubycomplete.vim Ruby syntaxcomplete.vim from syntax highlighting xmlcomplete.vim XML (uses files in the xml directory) diff --git a/runtime/autoload/beancount.vim b/runtime/autoload/beancount.vim new file mode 100644 index 0000000000..ca1aaf09d1 --- /dev/null +++ b/runtime/autoload/beancount.vim @@ -0,0 +1,59 @@ +" Beancount specific formatting +" Language: beancount +" Maintainer: Nathan Grigg +" Latest Revision: 2021-03-06 + +" Align currency on decimal point. +function! beancount#align_commodity(line1, line2) abort + " Save cursor position to adjust it if necessary. + let l:cursor_col = col('.') + let l:cursor_line = line('.') + + " Increment at start of loop, because of continue statements. + let l:current_line = a:line1 - 1 + while l:current_line < a:line2 + let l:current_line += 1 + let l:line = getline(l:current_line) + " This matches an account name followed by a space in one of the two + " following cases: + " - A posting line, i.e., the line starts with indentation followed + " by an optional flag and the account. + " - A balance directive, i.e., the line starts with a date followed + " by the 'balance' keyword and the account. + " - A price directive, i.e., the line starts with a date followed by + " the 'price' keyword and a currency. + let l:end_account = matchend(l:line, '\v' . + \ '^[\-/[:digit:]]+\s+balance\s+([A-Z][A-Za-z0-9\-]+)(:[A-Z0-9][A-Za-z0-9\-]*)+ ' . + \ '|^[\-/[:digit:]]+\s+price\s+\S+ ' . + \ '|^\s+([!&#?%PSTCURM]\s+)?([A-Z][A-Za-z0-9\-]+)(:[A-Z0-9][A-Za-z0-9\-]*)+ ' + \ ) + if l:end_account < 0 + continue + endif + + " Where does the number begin? + let l:begin_number = matchend(l:line, '^ *', l:end_account) + + " Look for a minus sign and a number (possibly containing commas) and + " align on the next column. + let l:separator = matchend(l:line, '^\v([-+])?[,[:digit:]]+', l:begin_number) + 1 + if l:separator < 0 | continue | endif + let l:has_spaces = l:begin_number - l:end_account + let l:need_spaces = g:beancount_separator_col - l:separator + l:has_spaces + if l:need_spaces < 0 | continue | endif + call setline(l:current_line, l:line[0 : l:end_account - 1] . repeat(' ', l:need_spaces) . l:line[ l:begin_number : -1]) + if l:current_line == l:cursor_line && l:cursor_col >= l:end_account + " Adjust cursor position for continuity. + call cursor(0, l:cursor_col + l:need_spaces - l:has_spaces) + endif + endwhile +endfunction + +" Call bean-doctor on the current line and dump output into a scratch buffer +function! beancount#get_context() abort + let l:context = system('bean-doctor context ' . shellescape(expand('%')) . ' ' . line('.')) + botright new + setlocal buftype=nofile bufhidden=hide noswapfile + call append(0, split(l:context, '\v\n')) + normal! gg +endfunction diff --git a/runtime/autoload/beancountcomplete.vim b/runtime/autoload/beancountcomplete.vim new file mode 100644 index 0000000000..4b778d30e0 --- /dev/null +++ b/runtime/autoload/beancountcomplete.vim @@ -0,0 +1,215 @@ +" Vim completion script +" Language: beancount +" Maintainer: Nathan Grigg +" Latest Revision: 2021-03-06 + +let s:using_python3 = has('python3') || has('python3/dyn') + +" Equivalent to python's startswith +" Matches based on user's ignorecase preference +function! s:startswith(string, prefix) abort + return strpart(a:string, 0, strlen(a:prefix)) == a:prefix +endfunction + +function! s:count_expression(text, expression) abort + return len(split(a:text, a:expression, 1)) - 1 +endfunction + +function! s:sort_accounts_by_depth(name1, name2) abort + let l:depth1 = s:count_expression(a:name1, ':') + let l:depth2 = s:count_expression(a:name2, ':') + return l:depth1 == l:depth2 ? 0 : l:depth1 > l:depth2 ? 1 : -1 +endfunction + +let s:directives = ['open', 'close', 'commodity', 'txn', 'balance', 'pad', 'note', 'document', 'price', 'event', 'query', 'custom'] + +" ------------------------------ +" Completion functions +" ------------------------------ +function! beancountcomplete#complete(findstart, base) abort + if a:findstart + let l:col = searchpos('\s', 'bn', line('.'))[1] + if l:col == 0 + return -1 + else + return l:col + endif + endif + + let l:partial_line = strpart(getline('.'), 0, getpos('.')[2]-1) + " Match directive types + if l:partial_line =~# '^\d\d\d\d\(-\|/\)\d\d\1\d\d $' + return beancountcomplete#complete_basic(s:directives, a:base, '') + endif + + " If we are using python3, now is a good time to load everything + call beancountcomplete#load_everything() + + " Split out the first character (for cases where we don't want to match the + " leading character: ", #, etc) + let l:first = strpart(a:base, 0, 1) + let l:rest = strpart(a:base, 1) + + if l:partial_line =~# '^\d\d\d\d\(-\|/\)\d\d\1\d\d event $' && l:first ==# '"' + return beancountcomplete#complete_basic(b:beancount_events, l:rest, '"') + endif + + let l:two_tokens = searchpos('\S\+\s', 'bn', line('.'))[1] + let l:prev_token = strpart(getline('.'), l:two_tokens, getpos('.')[2] - l:two_tokens) + " Match curriences if previous token is number + if l:prev_token =~# '^\d\+\([\.,]\d\+\)*' + call beancountcomplete#load_currencies() + return beancountcomplete#complete_basic(b:beancount_currencies, a:base, '') + endif + + if l:first ==# '#' + call beancountcomplete#load_tags() + return beancountcomplete#complete_basic(b:beancount_tags, l:rest, '#') + elseif l:first ==# '^' + call beancountcomplete#load_links() + return beancountcomplete#complete_basic(b:beancount_links, l:rest, '^') + elseif l:first ==# '"' + call beancountcomplete#load_payees() + return beancountcomplete#complete_basic(b:beancount_payees, l:rest, '"') + else + call beancountcomplete#load_accounts() + return beancountcomplete#complete_account(a:base) + endif +endfunction + +function! beancountcomplete#get_root() abort + if exists('b:beancount_root') + return b:beancount_root + endif + return expand('%') +endfunction + +function! beancountcomplete#load_everything() abort + if s:using_python3 && !exists('b:beancount_loaded') + let l:root = beancountcomplete#get_root() +python3 << EOF +import vim +from beancount import loader +from beancount.core import data + +accounts = set() +currencies = set() +events = set() +links = set() +payees = set() +tags = set() + +entries, errors, options_map = loader.load_file(vim.eval('l:root')) +for index, entry in enumerate(entries): + if isinstance(entry, data.Open): + accounts.add(entry.account) + if entry.currencies: + currencies.update(entry.currencies) + elif isinstance(entry, data.Commodity): + currencies.add(entry.currency) + elif isinstance(entry, data.Event): + events.add(entry.type) + elif isinstance(entry, data.Transaction): + if entry.tags: + tags.update(entry.tags) + if entry.links: + links.update(entry.links) + if entry.payee: + payees.add(entry.payee) + +vim.bindeval('b:')['beancount_accounts'] = sorted(accounts) +vim.bindeval('b:')['beancount_currencies'] = sorted(currencies) +vim.bindeval('b:')['beancount_events'] = sorted(events) +vim.bindeval('b:')['beancount_links'] = sorted(links) +vim.bindeval('b:')['beancount_payees'] = sorted(payees) +vim.bindeval('b:')['beancount_tags'] = sorted(tags) +vim.bindeval('b:')['beancount_loaded'] = 1 +EOF + endif +endfunction + +function! beancountcomplete#load_accounts() abort + if !s:using_python3 && !exists('b:beancount_accounts') + let l:root = beancountcomplete#get_root() + let b:beancount_accounts = beancountcomplete#query_single(l:root, 'select distinct account;') + endif +endfunction + +function! beancountcomplete#load_tags() abort + if !s:using_python3 && !exists('b:beancount_tags') + let l:root = beancountcomplete#get_root() + let b:beancount_tags = beancountcomplete#query_single(l:root, 'select distinct tags;') + endif +endfunction + +function! beancountcomplete#load_links() abort + if !s:using_python3 && !exists('b:beancount_links') + let l:root = beancountcomplete#get_root() + let b:beancount_links = beancountcomplete#query_single(l:root, 'select distinct links;') + endif +endfunction + +function! beancountcomplete#load_currencies() abort + if !s:using_python3 && !exists('b:beancount_currencies') + let l:root = beancountcomplete#get_root() + let b:beancount_currencies = beancountcomplete#query_single(l:root, 'select distinct currency;') + endif +endfunction + +function! beancountcomplete#load_payees() abort + if !s:using_python3 && !exists('b:beancount_payees') + let l:root = beancountcomplete#get_root() + let b:beancount_payees = beancountcomplete#query_single(l:root, 'select distinct payee;') + endif +endfunction + +" General completion function +function! beancountcomplete#complete_basic(input, base, prefix) abort + let l:matches = filter(copy(a:input), 's:startswith(v:val, a:base)') + + return map(l:matches, 'a:prefix . v:val') +endfunction + +" Complete account name. +function! beancountcomplete#complete_account(base) abort + if g:beancount_account_completion ==? 'chunks' + let l:pattern = '^\V' . substitute(a:base, ':', '\\[^:]\\*:', 'g') . '\[^:]\*' + else + let l:pattern = '^\V\.\*' . substitute(a:base, ':', '\\.\\*:\\.\\*', 'g') . '\.\*' + endif + + let l:matches = [] + let l:index = -1 + while 1 + let l:index = match(b:beancount_accounts, l:pattern, l:index + 1) + if l:index == -1 | break | endif + call add(l:matches, matchstr(b:beancount_accounts[l:index], l:pattern)) + endwhile + + if g:beancount_detailed_first + let l:matches = reverse(sort(l:matches, 's:sort_accounts_by_depth')) + endif + + return l:matches +endfunction + +function! beancountcomplete#query_single(root_file, query) abort + if s:using_python3 +python3 << EOF +import vim +import subprocess + +# We intentionally want to ignore stderr so it doesn't mess up our query processing +output = subprocess.check_output( + ['bean-query', vim.eval('a:root_file'), vim.eval('a:query')], + stderr=subprocess.DEVNULL, + text=True, +).splitlines() +output = output[2:] +result_list = sorted(y for y in (x.strip() for x in output) if y) +EOF + return py3eval('result_list') + else + return [] + endif +endfunction diff --git a/runtime/autoload/ccomplete.vim b/runtime/autoload/ccomplete.vim index cb4bb2c167..51237be98b 100644 --- a/runtime/autoload/ccomplete.vim +++ b/runtime/autoload/ccomplete.vim @@ -3,7 +3,7 @@ vim9script noclear # Vim completion script # Language: C # Maintainer: The Vim Project -# Last Change: 2025 Jul 24 +# Last Change: 2026 Feb 18 # Rewritten in Vim9 script by github user lacygoill # Former Maintainer: Bram Moolenaar @@ -489,7 +489,7 @@ def Nextitem( # {{{1 continue endif - # Use the tags file to find out if this is a typedef. + # Use the tags file to find out if this is a typedef or struct var diclist: list> = taglist('^' .. tokens[tidx] .. '$') for tagidx: number in len(diclist)->range() @@ -509,6 +509,13 @@ def Nextitem( # {{{1 continue endif + # handle struct + if item['kind'] == 's' + res = StructMembers('struct:' .. tokens[tidx], items, all) + break + endif + + # Only handle typedefs here. if item['kind'] != 't' continue @@ -733,4 +740,4 @@ def SearchMembers( # {{{1 enddef #}}}1 -# vim: noet sw=2 sts=2 +# vim: et sw=2 sts=2 diff --git a/runtime/autoload/context.vim b/runtime/autoload/context.vim index 07edd9ae4e..8b65bb9a62 100644 --- a/runtime/autoload/context.vim +++ b/runtime/autoload/context.vim @@ -3,13 +3,13 @@ vim9script # Language: ConTeXt typesetting engine # Maintainer: Nicola Vitacolonna # Former Maintainers: Nikolai Weibull -# Latest Revision: 2023 Dec 26 +# Latest Revision: 2026 May 20 # Typesetting {{{ import autoload './typeset.vim' export def ConTeXtCmd(path: string): list - var cmd = ['mtxrun', '--script', 'context', '--nonstopmode', '--autogenerate'] + var cmd = ['mtxrun', '--script', 'context', '--paranoid', '--autogenerate'] if !empty(get(g:, 'context_extra_options', '')) cmd += g:context_extra_options endif @@ -30,14 +30,21 @@ export def StopJobs() enddef export def Log(bufname: string) - execute 'edit' typeset.LogPath(bufname) + var logpath = typeset.LogPath(bufname) + + if filereadable(logpath) + execute 'edit' fnameescape(typeset.LogPath(bufname)) + return + endif + + echomsg $'[ConTeXt] No log file found ({logpath})' enddef # }}} # Completion {{{ def BinarySearch(base: string, keywords: list): list - const pat = '^' .. base - const len = len(keywords) + var pat = '^' .. base + var len = len(keywords) var res = [] var lft = 0 var rgt = len diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index 791dccf67c..8de0176216 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -3,7 +3,7 @@ vim9script # Vim functions for file type detection # # Maintainer: The Vim Project -# Last Change: 2025 Oct 28 +# Last Change: 2026 Jun 14 # Former Maintainer: Bram Moolenaar # These functions are moved here from runtime/filetype.vim to make startup @@ -11,6 +11,18 @@ vim9script var prolog_pattern = '^\s*\(:-\|%\+\(\s\|$\)\|\/\*\)\|\.\s*$' +def IsObjectScriptRoutine(): bool + var line1 = getline(1) + line1 = substitute(line1, '^\ufeff', '', '') + if line1 =~? '^\s*routine\>' + return true + endif + if line1 =~? '\' + return true + endif + return join(getline(1, 3), '') =~# '%RO' +enddef + export def Check_inp() if getline(1) =~ '%%' setf tex @@ -29,6 +41,43 @@ export def Check_inp() endif enddef +# Erlang Application Resource Files (*.app.src is matched by extension) +# See: https://erlang.org/doc/system/applications +export def FTapp() + if exists("g:filetype_app") + exe "setf " .. g:filetype_app + return + endif + const pat = '^\s*{\s*application\s*,\s*\(''\=\)' .. expand("%:t:r:r") .. '\1\s*,' + var line: string + for lnum in range(1, min([line("$"), 100])) + line = getline(lnum) + # skip Erlang comments, might be something else + if line =~ '^\s*%' || line =~ '^\s*$' + continue + elseif line =~ '^\s*{' && + getline(lnum, lnum + 9)->filter((_, v) => v !~ '^\s*%')->join(' ') =~# pat + setf erlang + endif + return + endfor +enddef + +# This function checks for Kawasaki robots AS file or atlas file type. +export def FTas() + if exists("g:filetype_as") + exe "setf " .. g:filetype_as + return + endif + for lnum in range(1, min([line("$"), 30])) + if getline(lnum) =~ '^\.NETCONF' + setf kawasaki_as + return + endif + endfor + setf atlas +enddef + # This function checks for the kind of assembly that is wanted by the user, or # can be detected from the beginning of the file. export def FTasm() @@ -53,6 +102,18 @@ export def FTasm() exe "setf " .. fnameescape(b:asmsyntax) enddef +export def FTmac() + if exists("g:filetype_mac") + exe "setf " .. g:filetype_mac + else + if IsObjectScriptRoutine() + setf objectscript_routine + else + FTasm() + endif + endif +enddef + export def FTasmsyntax() # see if the file contains any asmsyntax=foo overrides. If so, change # b:asmsyntax appropriately @@ -76,7 +137,7 @@ export def FTasmsyntax() b:asmsyntax = "masm" return elseif line =~ 'Texas Instruments Incorporated' || (line =~ '^\*' && !is_slash_star_encountered) - # tiasm uses `* commment`, but detection is unreliable if '/*' is seen + # tiasm uses `* comment`, but detection is unreliable if '/*' is seen b:asmsyntax = "tiasm" return elseif ((line =~? '\.title\>\|\.ident\>\|\.macro\>\|\.subtitle\>\|\.library\>')) @@ -173,6 +234,7 @@ export def FTcl() endif enddef +# Determines whether a *.cls file is ObjectScript, TeX, Rexx, Visual Basic, or Smalltalk. export def FTcls() if exists("g:filetype_cls") exe "setf " .. g:filetype_cls @@ -189,7 +251,20 @@ export def FTcls() endif var nonblank1 = getline(nextnonblank(1)) - if nonblank1 =~ '^\v%(\%|\\)' + var lnum = nextnonblank(1) + while lnum > 0 && lnum <= line("$") + var line = getline(lnum) + if line =~? '^\s*\%(import\|include\|includegenerator\)\>' + lnum = nextnonblank(lnum + 1) + else + nonblank1 = line + break + endif + endwhile + + if nonblank1 =~? '^\s*class\>\s\+[%A-Za-z][%A-Za-z0-9_.]*\%(\s\+extends\>\|\s*\[\|\s*{\|$\)' + setf objectscript + elseif nonblank1 =~ '^\v%(\%|\\)' setf tex elseif nonblank1 =~ '^\s*\%(/\*\|::\w\)' setf rexx @@ -451,12 +526,19 @@ def IsHareModule(dir: string, depth: number): bool endif # Check all files in the directory before recursing into subdirectories. - return glob(dir .. '/*', true, true) + const items = glob(dir .. '/*', true, true) ->sort((a, b) => isdirectory(a) - isdirectory(b)) - ->reduce((acc, n) => acc - || n =~ '\.ha$' - || isdirectory(n) && IsHareModule(n, depth - 1), - false) + for n in items + if isdirectory(n) + if IsHareModule(n, depth - 1) + return true + endif + elseif n =~ '\.ha$' + return true + endif + endfor + + return false enddef # Determines whether a README file is inside a Hare module and should receive @@ -480,7 +562,7 @@ export def FThtml() while n < 40 && n <= line("$") # Check for Angular - if getline(n) =~ '@\(if\|for\|defer\|switch\)\|\*\(ngIf\|ngFor\|ngSwitch\|ngTemplateOutlet\)\|ng-template\|ng-content' + if getline(n) =~ '@\(if\|for\|defer\|switch\)\|\*\(ngIf\|ngFor\|ngSwitch\|ngTemplateOutlet\)\|\\|@import\>\|/\*\)' + if getline(n) =~ '^\s*\(//\|#\s*\(include\|import\)\>\|@import\>\|/\*\)' setf objcpp return endif @@ -828,6 +915,10 @@ export def FTinc() if exists("g:filetype_inc") exe "setf " .. g:filetype_inc else + if IsObjectScriptRoutine() + setf objectscript_routine + return + endif for lnum in range(1, min([line("$"), 20])) var line = getline(lnum) if line =~? "perlscript" @@ -844,7 +935,7 @@ export def FTinc() elseif line =~ '^\s*\%({\|(\*\)' || line =~? ft_pascal_keywords setf pascal return - elseif line =~# '\<\%(require\|inherit\)\>' || line =~# '[A-Z][A-Za-z0-9_:${}/]*\s\+\%(??\|[?:+.]\)\?=.\? ' + elseif line =~# '^\s*\<\%(require\|inherit\)\>' || line =~# '^\s*[A-Z][A-Za-z0-9_:${}/]*\%(\[[A-Za-z0-9_:/]\+\]\)*\s\+\%(??=\|[?:+.]=\|=[+.]\?\)\s\+' setf bitbake return endif @@ -897,6 +988,16 @@ export def FTi() setf progress enddef +export def FTint() + if exists("g:filetype_int") + exe "setf " .. g:filetype_int + elseif IsObjectScriptRoutine() + setf objectscript_routine + else + setf hex + endif +enddef + var ft_pascal_comments = '^\s*\%({\|(\*\|//\)' var ft_pascal_keywords = '^\s*\%(program\|unit\|library\|uses\|begin\|procedure\|function\|const\|type\|var\)\>' @@ -1397,14 +1498,25 @@ enddef # Determine if a *.tf file is TF mud client or terraform export def FTtf() - var numberOfLines = line('$') - for i in range(1, numberOfLines) - var currentLine = trim(getline(i)) - var firstCharacter = currentLine[0] - if firstCharacter !=? ";" && firstCharacter !=? "/" && firstCharacter !=? "" - setf terraform - return + if exists("g:filetype_tf") + exe "setf " .. g:filetype_tf + return + endif + + var continuation: bool = false + for lnum in range(1, min([line("$"), 100])) + var line = getline(lnum) + # TF supports backslash line continuation, so a continued line may begin + # with any character. Only test the first character of a line that does + # not continue a previous one. + if !continuation + var firstchar = trim(line)[0] + if firstchar !=? ";" && firstchar !=? "/" && firstchar !=? "" + setf terraform + return + endif endif + continuation = line =~ '\\$' endfor setf tf enddef @@ -1484,7 +1596,7 @@ export def FTdsp() # Test the file contents for line in getline(1, 200) - # Chech for comment style + # Check for comment style if line =~ '^#.*' setf make return @@ -1645,6 +1757,8 @@ const ft_from_ext = { "tdf": "ahdl", # AIDL "aidl": "aidl", + # Algol 68 + "a68": "algol68", # AMPL "run": "ampl", # ANTLR / PCCTS @@ -1659,6 +1773,7 @@ const ft_from_ext = { # XA65 MOS6510 cross assembler "a65": "a65", # Applescript + "applescript": "applescript", "scpt": "applescript", # Applix ELF "am": "elf", @@ -1682,7 +1797,6 @@ const ft_from_ext = { "astro": "astro", # Atlas "atl": "atlas", - "as": "atlas", # Atom is based on XML "atom": "xml", # Authzed @@ -1716,6 +1830,7 @@ const ft_from_ext = { # BDF font "bdf": "bdf", # Beancount + "bean": "beancount", "beancount": "beancount", # BibTeX bibliography database file "bib": "bib", @@ -1723,7 +1838,7 @@ const ft_from_ext = { "bst": "bst", # Bicep "bicep": "bicep", - "bicepparam": "bicep", + "bicepparam": "bicep-params", # BIND zone "zone": "bindzone", # Blank @@ -1735,6 +1850,8 @@ const ft_from_ext = { # BSDL "bsd": "bsdl", "bsdl": "bsdl", + # Bpftrace + "bt": "bpftrace", # C3 "c3": "c3", "c3i": "c3", @@ -1743,6 +1860,8 @@ const ft_from_ext = { "cairo": "cairo", # Cap'n Proto "capnp": "capnp", + # Common Package Specification + "cps": "json", # C# "cs": "cs", "csx": "cs", @@ -1800,6 +1919,8 @@ const ft_from_ext = { "tlh": "cpp", # Cascading Style Sheets "css": "css", + # Common Expression Language (CEL) - https://cel.dev + "cel": "cel", # Century Term Command Scripts (*.cmd too) "con": "cterm", # ChordPro @@ -1838,6 +1959,8 @@ const ft_from_ext = { "cr": "crystal", # CSV Files "csv": "csv", + # Concertor + "cto": "concerto", # CUDA Compute Unified Device Architecture "cu": "cuda", "cuh": "cuda", @@ -1851,6 +1974,9 @@ const ft_from_ext = { "elv": "elvish", # Faust "lib": "faust", + # Fennel + "fnl": "fennel", + "fnlm": "fennel", # Libreoffice config files "xcu": "xml", "xlb": "xml", @@ -1889,6 +2015,9 @@ const ft_from_ext = { # Diff files "diff": "diff", "rej": "diff", + # Djot + "dj": "djot", + "djot": "djot", # DOT "dot": "dot", "gv": "dot", @@ -1951,6 +2080,8 @@ const ft_from_ext = { "fish": "fish", # Flix "flix": "flix", + # Fluent + "ftl": "fluent", # Focus Executable "fex": "focexec", "focexec": "focexec", @@ -2093,6 +2224,8 @@ const ft_from_ext = { "tmpl": "template", # Hurl "hurl": "hurl", + # Hylo + "hylo": "hylo", # Hyper Builder "hb": "hb", # Httest @@ -2192,6 +2325,8 @@ const ft_from_ext = { # KAREL "kl": "karel", "KL": "karel", + # Kawasaki AS + "pg": "kawasaki_as", # KDL "kdl": "kdl", # KerML @@ -2202,12 +2337,18 @@ const ft_from_ext = { "k": "kwt", # Kivy "kv": "kivy", + # Koka + "kk": "koka", + # Kos + "kos": "kos", # Kotlin "kt": "kotlin", "ktm": "kotlin", "kts": "kotlin", # KDE script "ks": "kscript", + # Kaitai struct + "ksy": "yaml", # Kyaml "kyaml": "yaml", "kyml": "yaml", @@ -2225,6 +2366,8 @@ const ft_from_ext = { "ldg": "ledger", "ledger": "ledger", "journal": "ledger", + # Leex + "xrl": "leex", # Leo "leo": "leo", # Less @@ -2332,6 +2475,13 @@ const ft_from_ext = { # N1QL "n1ql": "n1ql", "nql": "n1ql", + # Neon + "neon": "neon", + # NetLinx + "axs": "netlinx", + "axi": "netlinx", + # Nickel + "ncl": "nickel", # Nim file "nim": "nim", "nims": "nim", @@ -2344,6 +2494,8 @@ const ft_from_ext = { "norg": "norg", # Novell netware batch files "ncf": "ncf", + # N-Quads + "nq": "nq", # Not Quite C "nqc": "nqc", # NSE - Nmap Script Engine - uses Lua syntax @@ -2498,6 +2650,8 @@ const ft_from_ext = { "qmd": "quarto", # QuickBms "bms": "quickbms", + # Popcap Reanimation files + "reanim": "xml", # Racket (formerly detected as "scheme") "rkt": "racket", "rktd": "racket", @@ -2514,6 +2668,9 @@ const ft_from_ext = { "rakumod": "raku", "rakudoc": "raku", "rakutest": "raku", + # Razor + "cshtml": "razor", + "razor": "razor", # Renderman Interface Bytestream "rib": "rib", # Rego Policy Language @@ -2557,6 +2714,8 @@ const ft_from_ext = { "rst": "rst", # RTF "rtf": "rtf", + # ObjectScript Routine + "rtn": "objectscript_routine", # Ruby "rb": "ruby", "rbw": "ruby", @@ -2570,6 +2729,8 @@ const ft_from_ext = { "builder": "ruby", "rxml": "ruby", "rjs": "ruby", + # Sorbet (Ruby typechecker) + "rbi": "ruby", # Rust "rs": "rust", # S-lang @@ -2585,6 +2746,8 @@ const ft_from_ext = { "mill": "scala", # SBT - Scala Build Tool "sbt": "sbt", + # SGF, Smart Game Format + "sgf": "sgf", # Slang Shading Language "slang": "shaderslang", # Slint @@ -2613,6 +2776,8 @@ const ft_from_ext = { "sieve": "sieve", # TriG "trig": "trig", + # Tolk + "tolk": "tolk", # Zig and Zig Object Notation (ZON) "zig": "zig", "zon": "zig", @@ -2702,6 +2867,7 @@ const ft_from_ext = { "nut": "squirrel", # Starlark "ipd": "starlark", + "sky": "starlark", "star": "starlark", "starlark": "starlark", # OpenVPN configuration @@ -2779,6 +2945,8 @@ const ft_from_ext = { "txi": "texinfo", # Thrift (Apache) "thrift": "thrift", + # Tiger + "tig": "tiger", # TLA+ "tla": "tla", # TPP - Text Presentation Program @@ -2952,6 +3120,9 @@ const ft_from_ext = { "raml": "raml", # YANG "yang": "yang", + # YARA, YARA-X + "yara": "yara", + "yar": "yara", # Yuck "yuck": "yuck", # Zimbu @@ -2968,6 +3139,7 @@ const ft_from_ext = { "usd": "usd", # Rofi stylesheet "rasi": "rasi", + "rasinc": "rasi", # Zsh module # mdd: https://github.com/zsh-users/zsh/blob/57248b88830ce56adc243a40c7773fb3825cab34/Etc/zsh-development-guide#L285-L288 # mdh, pro: https://github.com/zsh-users/zsh/blob/57248b88830ce56adc243a40c7773fb3825cab34/Etc/zsh-development-guide#L268-L271 @@ -2982,6 +3154,11 @@ const ft_from_ext = { "blp": "blueprint", # Blueprint build system file "bp": "bp", + # Tiltfile + "Tiltfile": "tiltfile", + "tiltfile": "tiltfile", + # Ghostty + "ghostty": "ghostty", } # Key: file name (the final path component, excluding the drive and root) # Value: filetype @@ -2998,6 +3175,8 @@ const ft_from_name = { "apt.conf": "aptconf", # BIND zone "named.root": "bindzone", + # Brewfile (uses Ruby syntax) + "Brewfile": "ruby", # Busted (Lua unit testing framework - configuration files) ".busted": "lua", # Bun history @@ -3066,6 +3245,8 @@ const ft_from_name = { ".editorconfig": "editorconfig", # Elinks configuration "elinks.conf": "elinks", + # Erlang + "rebar.config": "erlang", # Exim "exim.conf": "exim", # Exports @@ -3244,6 +3425,9 @@ const ft_from_name = { # Screen RC ".screenrc": "screen", "screenrc": "screen", + # skhd (simple hotkey daemon for macOS) + ".skhdrc": "skhd", + "skhdrc": "skhd", # SLRN ".slrnrc": "slrnrc", # Squid @@ -3264,6 +3448,9 @@ const ft_from_name = { # TF (TinyFugue) mud client ".tfrc": "tf", "tfrc": "tf", + # Tilefile + "Tiltfile": "tiltfile", + "tiltfile": "tiltfile", # Trustees "trustees.conf": "trustees", # Vagrant (uses Ruby syntax) diff --git a/runtime/autoload/dist/script.vim b/runtime/autoload/dist/script.vim index 5fb45ccc51..3f9a5acfd0 100644 --- a/runtime/autoload/dist/script.vim +++ b/runtime/autoload/dist/script.vim @@ -4,7 +4,7 @@ vim9script # Invoked from "scripts.vim" in 'runtimepath' # # Maintainer: The Vim Project -# Last Change: 2025 Aug 09 +# Last Change: 2026 Apr 09 # Former Maintainer: Bram Moolenaar export def DetectFiletype() @@ -45,6 +45,8 @@ def DetectFromHashBang(firstline: string) name = substitute(line1, '^#!.*\\s\+\(\i\+\).*', '\1', '') elseif line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)' name = substitute(line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '') + elseif line1 =~ '^#!.*\' + name = substitute(line1, '^#!.*\\s\+\(\i\+\).*', '\1', '') else name = substitute(line1, '^#!\s*\S*[/\\]\(\f\+\).*', '\1', '') endif @@ -67,7 +69,7 @@ enddef # Returns an empty string when not recognized. export def Exe2filetype(name: string, line1: string): string # Bourne-like shell scripts: bash bash2 dash ksh ksh93 sh - if name =~ '^\(bash\d*\|dash\|ksh\d*\|sh\)\>' + if name =~ '^\(bash\d*\|d\?ash\|ksh\d*\|sh\)\>' return dist#ft#SetFileTypeSH(line1, false) # csh scripts @@ -115,7 +117,7 @@ export def Exe2filetype(name: string, line1: string): string return 'php' # Python - elseif name =~ 'python' + elseif name =~ 'python' || (name == 'uv' && line1 =~ '\') return 'python' # Groovy @@ -233,6 +235,10 @@ export def Exe2filetype(name: string, line1: string): string elseif name =~ '^execlineb\>' return 'execline' + # Bpftrace + elseif name =~ '^bpftrace\>' + return 'bpftrace' + # Vim elseif name =~ '^vim\>' return 'vim' diff --git a/runtime/autoload/dist/vim.vim b/runtime/autoload/dist/vim.vim index 1632aed2b6..5a0f350537 100644 --- a/runtime/autoload/dist/vim.vim +++ b/runtime/autoload/dist/vim.vim @@ -1,9 +1,9 @@ " Vim runtime support library, " runs the Vim9 script version or legacy script version -" on demand (mostly for Neovim compatability) +" on demand (mostly for Neovim compatibility) " " Maintainer: The Vim Project -" Last Change: 2025 Apr 27 +" Last Change: 2026 Jan 11 " enable the zip and gzip plugin by default, if not set diff --git a/runtime/autoload/dist/vim9.vim b/runtime/autoload/dist/vim9.vim index fa14bdaf04..a8bb4f95d0 100644 --- a/runtime/autoload/dist/vim9.vim +++ b/runtime/autoload/dist/vim9.vim @@ -3,7 +3,7 @@ vim9script # Vim runtime support library # # Maintainer: The Vim Project -# Last Change: 2025 Aug 15 +# Last Change: 2026 May 30 export def IsSafeExecutable(filetype: string, executable: string): bool if empty(exepath(executable)) @@ -51,7 +51,7 @@ if has('unix') execute $'silent !cmd /c start "" /b {args} {Redir()}' | redraw! enddef endif - elseif exists('$WSL_DISTRO_NAME') # use cmd.exe to start GUI apps in WSL + elseif exists('$WSL_DISTRO_NAME') && executable('cmd.exe') # use cmd.exe to start GUI apps in WSL export def Launch(args: string) const command = (args =~? '\v<\f+\.(exe|com|bat|cmd)>') ? $'cmd.exe /c start /b {args} {Redir()}' @@ -60,15 +60,20 @@ if has('unix') enddef else export def Launch(args: string) - const fork = has('gui_running') ? '' : '&' - execute $':silent ! nohup {args} {Redir()} {fork}' | redraw! + # Use job_start, because using !xdg-open is known not to work with zsh + # ignore signals on exit + job_start(['sh', '-c', args], {'stoponexit': '', 'in_io': 'null', 'out_io': 'null', 'err_io': 'null'}) enddef endif elseif has('win32') export def Launch(args: string) - const shell = (&shell =~? '\') ? '' : 'cmd.exe /c' - const quotes = empty(shell) ? '' : '""' - execute $'silent ! {shell} start {quotes} /b {args} {Redir()}' | redraw! + try + execute ':silent !start' args | redraw! + catch /^Vim(!):E371:/ + echohl ErrorMsg + echom "dist#vim9#Launch(): can not start" args + echohl None + endtry enddef else export def Launch(dummy: string) @@ -81,7 +86,10 @@ var os_viewer = null_string if has('win32unix') # (cyg)start suffices os_viewer = '' -# Windows / WSL +# Windows +elseif has('win32') + os_viewer = '' # Use :!start +# WSL elseif executable('explorer.exe') os_viewer = 'explorer.exe' # Linux / BSD @@ -123,10 +131,18 @@ enddef export def Open(file: string) # disable shellslash for shellescape, required on Windows #17995 if exists('+shellslash') && &shellslash - &shellslash = false defer setbufvar('%', '&shellslash', true) + &shellslash = false + endif + if &shell == 'pwsh' || &shell == 'powershell' + defer setbufvar('%', '&shell', &shell) + setlocal shell& + endif + if has('unix') && !has('win32unix') && !exists('$WSL_DISTRO_NAME') + Launch($"{Viewer()} {shellescape(file)}") + else + Launch($"{Viewer()} {shellescape(file, 1)}") endif - Launch($"{Viewer()} {shellescape(file, 1)}") enddef # Uncomment this line to check for compilation errors early diff --git a/runtime/autoload/getscript.vim b/runtime/autoload/getscript.vim index 1e3b5b39d6..04dd19a4c5 100644 --- a/runtime/autoload/getscript.vim +++ b/runtime/autoload/getscript.vim @@ -14,6 +14,8 @@ " 2024 Nov 12 by Vim Project: fix problems on Windows (#16036) " 2025 Feb 28 by Vim Project: add support for bzip3 (#16755) " 2025 May 11 by Vim Project: check network connectivity (#17249) +" 2025 Dec 21 by Vim Project: make the wget check more robust (#18987) +" 2026 May 20 by Vim Project: use correct shellescape() with ! command " }}} " " GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim @@ -58,7 +60,10 @@ endif " wget vs curl {{{2 if !exists("g:GetLatestVimScripts_wget") - if executable("wget") + if executable("wget.exe") + " enforce extension: windows powershell desktop version has a wget alias that hides wget.exe + let g:GetLatestVimScripts_wget= "wget.exe" + elseif executable("wget") let g:GetLatestVimScripts_wget= "wget" elseif executable("curl.exe") " enforce extension: windows powershell desktop version has a curl alias that hides curl.exe @@ -73,7 +78,7 @@ endif " options that wget and curl require: if !exists("g:GetLatestVimScripts_options") - if g:GetLatestVimScripts_wget == "wget" + if g:GetLatestVimScripts_wget =~ "wget" let g:GetLatestVimScripts_options= "-q -O" elseif g:GetLatestVimScripts_wget =~ "curl" let g:GetLatestVimScripts_options= "-s -o" @@ -429,9 +434,9 @@ fun! s:GetOneScript(...) let itry= 1 while itry <= 3 if has("win32") || has("win16") || has("win95") - new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)|bw! + new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile,1).' '.shellescape(scriptaddr,1)|bw! else - exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr) + exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile,1)." ".shellescape(scriptaddr,1) endif if itry == 1 exe "silent vsplit ".fnameescape(tmpfile) @@ -499,9 +504,9 @@ fun! s:GetOneScript(...) " ----------------------------------------------------------------------------- echomsg ".downloading new <".sname.">" if has("win32") || has("win16") || has("win95") - new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)|bw! + new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname,1)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid,1)|bw! else - exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid) + exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname,1)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid,1) endif " -------------------------------------------------------------------------- @@ -509,7 +514,7 @@ fun! s:GetOneScript(...) " -------------------------------------------------------------------------- if doautoinstall if filereadable(sname) - exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall) + exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname,1)." ".shellescape(s:autoinstall,1) let curdir = fnameescape(substitute(getcwd(),'\','/','ge')) let installdir= curdir."/Installed" if !isdirectory(installdir) @@ -528,33 +533,33 @@ fun! s:GetOneScript(...) " decompress if sname =~ '\.bz2$' - exe "sil !".g:GetLatestVimScripts_bunzip2." ".shellescape(sname) + exe "sil !".g:GetLatestVimScripts_bunzip2." ".shellescape(sname,1) let sname= substitute(sname,'\.bz2$','','') elseif sname =~ '\.bz3$' - exe "sil !".g:GetLatestVimScripts_bunzip3." ".shellescape(sname) + exe "sil !".g:GetLatestVimScripts_bunzip3." ".shellescape(sname,1) let sname= substitute(sname,'\.bz3$','','') elseif sname =~ '\.gz$' - exe "sil !".g:GetLatestVimScripts_gunzip." ".shellescape(sname) + exe "sil !".g:GetLatestVimScripts_gunzip." ".shellescape(sname,1) let sname= substitute(sname,'\.gz$','','') elseif sname =~ '\.xz$' - exe "sil !".g:GetLatestVimScripts_unxz." ".shellescape(sname) + exe "sil !".g:GetLatestVimScripts_unxz." ".shellescape(sname,1) let sname= substitute(sname,'\.xz$','','') else endif " distribute archive(.zip, .tar, .vba, .vmb, ...) contents if sname =~ '\.zip$' - exe "silent !".g:GetLatestVimScripts_unzip." -o ".shellescape(sname) + exe "silent !".g:GetLatestVimScripts_unzip." -o ".shellescape(sname,1) elseif sname =~ '\.tar$' - exe "silent !tar -xvf ".shellescape(sname) + exe "silent !tar -xvf ".shellescape(sname,1) elseif sname =~ '\.tgz$' - exe "silent !tar -zxvf ".shellescape(sname) + exe "silent !tar -zxvf ".shellescape(sname,1) elseif sname =~ '\.taz$' - exe "silent !tar -Zxvf ".shellescape(sname) + exe "silent !tar -Zxvf ".shellescape(sname,1) elseif sname =~ '\.tbz$' - exe "silent !tar -jxvf ".shellescape(sname) + exe "silent !tar -jxvf ".shellescape(sname,1) elseif sname =~ '\.txz$' - exe "silent !tar -Jxvf ".shellescape(sname) + exe "silent !tar -Jxvf ".shellescape(sname,1) elseif sname =~ '\.vba$\|\.vmb$' silent 1split if exists("g:vimball_home") @@ -575,12 +580,12 @@ fun! s:GetOneScript(...) " move plugin to plugin/ or AsNeeded/ directory " --------------------------------------------- if sname =~ '.vim$' - exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".tgtdir + exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname,1)." ".tgtdir else - exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".installdir + exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname,1)." ".installdir endif if tgtdir != "plugin" - exe "silent !".g:GetLatestVimScripts_mv." ".shellescape("plugin/".pname)." ".tgtdir + exe "silent !".g:GetLatestVimScripts_mv." ".shellescape("plugin/".pname,1)." ".tgtdir endif " helptags step diff --git a/runtime/autoload/gnat.vim b/runtime/autoload/gnat.vim index 0def6723b2..585be2e1e0 100644 --- a/runtime/autoload/gnat.vim +++ b/runtime/autoload/gnat.vim @@ -3,7 +3,7 @@ " Language: Ada (GNAT) " $Id: gnat.vim 887 2008-07-08 14:29:01Z krischik $ " Copyright: Copyright (C) 2006 Martin Krischik -" Maintainer: Martin Krischi k +" Maintainer: Martin Krischi " Ned Okie " $Author: krischik $ " $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $ diff --git a/runtime/autoload/gzip.vim b/runtime/autoload/gzip.vim index a6fbe2c336..09f35c95ba 100644 --- a/runtime/autoload/gzip.vim +++ b/runtime/autoload/gzip.vim @@ -1,6 +1,6 @@ " Vim autoload file for editing compressed files. " Maintainer: The Vim Project -" Last Change: 2024 Nov 25 +" Last Change: 2026 Apr 26 " Former Maintainer: Bram Moolenaar " These functions are used by the gzip plugin. @@ -82,13 +82,8 @@ fun gzip#read(cmd) let empty = line("'[") == 1 && line("']") == line("$") let tmp = tempname() let tmpe = tmp . "." . expand(":e") - if exists('*fnameescape') - let tmp_esc = fnameescape(tmp) - let tmpe_esc = fnameescape(tmpe) - else - let tmp_esc = escape(tmp, ' ') - let tmpe_esc = escape(tmpe, ' ') - endif + let tmp_esc = fnameescape(tmp) + let tmpe_esc = fnameescape(tmpe) " write the just read lines to a temp file "'[,']w tmp.gz" execute "silent '[,']w " . tmpe_esc " uncompress the temp file: call system("gzip -dn tmp.gz") @@ -101,22 +96,14 @@ fun gzip#read(cmd) let ok = 1 " delete the compressed lines; remember the line number let l = line("'[") - 1 - if exists(":lockmarks") - lockmarks '[,']d _ - else - '[,']d _ - endif + lockmarks '[,']d _ " read in the uncompressed lines "'[-1r tmp" " Use ++edit if the buffer was empty, keep the 'ff' and 'fenc' options. setlocal nobin - if exists(":lockmarks") - if empty - execute "silent lockmarks " . l . "r ++edit " . tmp_esc - else - execute "silent lockmarks " . l . "r " . tmp_esc - endif + if empty + execute "silent lockmarks " . l . "r ++edit " . tmp_esc else - execute "silent " . l . "r " . tmp_esc + execute "silent lockmarks " . l . "r " . tmp_esc endif " if buffer became empty, delete trailing blank line @@ -143,11 +130,7 @@ fun gzip#read(cmd) " When uncompressed the whole buffer, do autocommands if ok && empty - if exists('*fnameescape') - let fname = fnameescape(expand("%:r")) - else - let fname = escape(expand("%:r"), " \t\n*?[{`$\\%#'\"|!<") - endif + let fname = fnameescape(expand("%:r")) if filereadable(undofile(expand("%"))) exe "sil rundo " . fnameescape(undofile(expand("%"))) endif @@ -191,8 +174,9 @@ fun gzip#appre(cmd) call s:set_compression(readfile(nm, "b", 1)[0]) endif - " Rename to a weird name to avoid the risk of overwriting another file - let nmt = expand(":p:h") . "/X~=@l9q5" + " Rename to a unique name to avoid the risk of overwriting another file + " or being targeted by a symlink in a shared directory. + let nmt = s:samedir_tempname(nm) let nmte = nmt . "." . expand(":e") if rename(nm, nmte) == 0 if &patchmode != "" && getfsize(nm . &patchmode) == -1 @@ -208,22 +192,27 @@ fun gzip#appre(cmd) endfun " find a file name for the file to be compressed. Use "name" without an -" extension if possible. Otherwise use a weird name to avoid overwriting an -" existing file. +" extension if possible. Otherwise use a unique name to avoid overwriting an +" existing file or following a symlink set up by another user. fun s:tempname(name) let fn = fnamemodify(a:name, ":r") if !filereadable(fn) && !isdirectory(fn) return fn endif - return fnamemodify(a:name, ":p:h") . "/X~=@l9q5" + return s:samedir_tempname(a:name) +endfun + +" Generate an unpredictable file name in the same directory as "name", using +" the random component of tempname() to avoid symlink attacks in shared +" directories (e.g. /tmp). +fun s:samedir_tempname(name) + let tmp = tempname() + return fnamemodify(a:name, ":p:h") . "/" . fnamemodify(tmp, ":h:t") . fnamemodify(tmp, ":t") endfun fun s:escape(name) " shellescape() was added by patch 7.0.111 - if exists("*shellescape") - return shellescape(a:name) - endif - return "'" . a:name . "'" + return shellescape(a:name) endfun " vim: set sw=2 : diff --git a/runtime/autoload/hare.vim b/runtime/autoload/hare.vim index 479b0f6812..d85a05b38c 100644 --- a/runtime/autoload/hare.vim +++ b/runtime/autoload/hare.vim @@ -1,13 +1,13 @@ vim9script # Helper functions for Hare. -# Language: Hare -# Maintainer: Amelia Clarke -# Last Updated: 2025 Sep 06 -# Upstream: https://git.sr.ht/~sircmpwn/hare.vim +# Language: Hare +# Maintainer: Amelia Clarke +# Last Change: 2026 Jan 24 +# Upstream: https://git.sr.ht/~sircmpwn/hare.vim -# Returns the value of HAREPATH, if it exists. Otherwise, returns a safe -# default. +# Returns the value of $HAREPATH, if it exists. Otherwise, returns a safe +# default value. export def GetPath(): string var path: list if !empty($HAREPATH) @@ -18,24 +18,7 @@ export def GetPath(): string return '/usr/src/hare/stdlib,/usr/src/hare/third-party' endif endif - return mapnew(path, (_, n) => escape(n, ' ,;'))->join(',') -enddef - -# Converts a module identifier into a path. -export def IncludeExpr(): string - var path = trim(v:fname, ':', 2)->substitute('::', '/', 'g') - - # If the module cannot be found, it might be a member instead. Try removing - # the final component until a directory is found. - while !finddir(path) - const head = fnamemodify(path, ':h') - if head == '.' - break - endif - path = head - endwhile - - return path + return map(path, (_, n) => escape(n, ' ,;'))->join(',') enddef # Modifies quickfix or location list entries to refer to the correct paths after @@ -61,14 +44,14 @@ export def QuickFixPaths() SetList([], 'r', list) enddef -# Attempts to parse the directories in $HAREPATH from the output of `hare -# version -v`. Otherwise, returns an empty list. +# Attempts to parse a list of directories from the output of `hare version -v`. +# Otherwise, returns an empty list. def ParsePath(): list if !executable('hare') return [] endif - silent const lines = systemlist('hare version -v') + silent final lines = systemlist('hare version -v') const min = match(lines, '^HAREPATH') + 1 if min == 0 return [] @@ -76,7 +59,7 @@ def ParsePath(): list const max = match(lines, '^\S', min) return (max < 0 ? slice(lines, min) : slice(lines, min, max)) - ->mapnew((_, n) => matchstr(n, '^\s*\zs.*')) + ->map((_, n) => matchstr(n, '^\s*\zs.*')) enddef # vim: et sts=2 sw=2 ts=8 tw=80 diff --git a/runtime/autoload/haskellcomplete.vim b/runtime/autoload/haskellcomplete.vim index 759ff8741a..2b28209079 100644 --- a/runtime/autoload/haskellcomplete.vim +++ b/runtime/autoload/haskellcomplete.vim @@ -3,10 +3,9 @@ " Maintainer: Daniel Campoverde " URL: https://github.com/alx741/haskellcomplete.vim " Last Change: 2019 May 14 - +" 2026 Feb 04 by Vim project: fix undefined buffer variable: #19259 " Usage: setlocal omnifunc=haskellcomplete#Complete - " Language extensions from: " https://hackage.haskell.org/package/Cabal-2.2.0.1/docs/Language-Haskell-Extension.html " @@ -15,12 +14,6 @@ " https://downloads.haskell.org/~ghc/8.4.3/docs/html/users_guide/flags.html - -" Available completions -let b:completingLangExtension = 0 -let b:completingOptionsGHC = 0 -let b:completingModule = 0 - function! haskellcomplete#Complete(findstart, base) if a:findstart let l:line = getline('.') @@ -52,7 +45,7 @@ function! haskellcomplete#Complete(findstart, base) return start endif - if b:completingLangExtension + if get(b:, 'completingLangExtension', 0) if a:base ==? "" " Return all possible Lang extensions return s:langExtensions @@ -68,7 +61,7 @@ function! haskellcomplete#Complete(findstart, base) endif - elseif b:completingOptionsGHC + elseif get(b:, 'completingOptionsGHC', 0) if a:base ==? "" " Return all possible GHC options return s:optionsGHC @@ -84,7 +77,7 @@ function! haskellcomplete#Complete(findstart, base) endif - elseif b:completingModule + elseif get(b:, 'completingModule', 0) if a:base ==? "" " Return all possible modules return s:commonModules diff --git a/runtime/autoload/python3complete.vim b/runtime/autoload/python3complete.vim index ea0a331369..88e3466515 100644 --- a/runtime/autoload/python3complete.vim +++ b/runtime/autoload/python3complete.vim @@ -1,8 +1,8 @@ "python3complete.vim - Omni Completion for python " Maintainer: " Previous Maintainer: Aaron Griffin -" Version: 0.9 -" Last Updated: 2022 Mar 30 +" Version: 0.10 +" Last Updated: 2026 Jun 21 " " Roland Puntaier: this file contains adaptations for python3 and is parallel to pythoncomplete.vim " @@ -14,6 +14,16 @@ " i.e. "import url" " Continue parsing on invalid line?? " +" v 0.10 by Vim project +" * disables importing local modules, unless the global Vim variable +" g:pythoncomplete_allow_import is set to non-zero +" * strip default values and annotations from function parameter lists +" before exec(), and whitelist class base lists to dotted names: the +" previous code passed buffer-supplied expressions to exec() which +" Python evaluates at definition time, allowing arbitrary code +" execution via crafted def/class headers +" * use repr() on doc strings to prevent code execution +" " v 0.9 " * Fixed docstring parsing for classes and functions " * Fixed parsing of *args and **kwargs type arguments @@ -96,6 +106,24 @@ warnings.simplefilter(action='ignore', category=FutureWarning) import sys, tokenize, io, types from token import NAME, DEDENT, NEWLINE, STRING +import re + +# Used by Class.get_code(): a base class expression is only included in the +# code passed to exec() if it is a pure dotted name (e.g. "Base", "mod.Base", +# "pkg.sub.Cls"). Anything containing calls, subscripts, "=", ":" or other +# operators is dropped, since exec()-ing it would evaluate buffer-supplied +# expressions. See the security note in the file header. +_DOTTED_NAME_RE = re.compile(r'^[A-Za-z_]\w*(\s*\.\s*[A-Za-z_]\w*)*$') + +def _strip_param(p): + # Return the bare parameter name from a parameter spec harvested by + # _parenparse(), discarding any default value or annotation. Default + # values and annotations would otherwise be evaluated by exec() at + # function-definition time. Star prefixes ("*args", "**kw") and bare + # "*" / "/" are preserved as written. + p = p.split('=', 1)[0] + p = p.split(':', 1)[0] + return p.strip() debugstmts=[] def dbg(s): debugstmts.append(s) @@ -131,12 +159,24 @@ class Completer(object): self.parser = PyParser() def evalsource(self,text,line=0): + # vim is imported locally in vimpy3complete(); re-import here so the + # vim.eval() below works (otherwise NameError, silently caught). + import vim sc = self.parser.parse(text,line) + try: allow_imports = int( + vim.eval("get(g:, 'pythoncomplete_allow_import', 0)")) + except Exception: + allow_imports = 0 src = sc.get_code() dbg("source: %s" % src) try: exec(src,self.compldict) except: dbg("parser: %s, %s" % (sys.exc_info()[0],sys.exc_info()[1])) for l in sc.locals: + # Executing import/from statements harvested from the buffer runs + # arbitrary package code; only do so when the user opted in. + if not allow_imports and (l.startswith('import') + or l.startswith('from ')): + continue try: exec(l,self.compldict) except: dbg("locals: %s, %s [%s]" % (sys.exc_info()[0],sys.exc_info()[1],l)) @@ -299,14 +339,12 @@ class Scope(object): def get_code(self): str = "" - if len(self.docstr) > 0: str += '"""'+self.docstr+'"""\n' - for l in self.locals: - if l.startswith('import'): str += l+'\n' + if len(self.docstr) > 0: str += repr(self.docstr)+'\n' str += 'class _PyCmplNoType:\n def __getattr__(self,name):\n return None\n' for sub in self.subscopes: str += sub.get_code() for l in self.locals: - if not l.startswith('import'): str += l+'\n' + if not l.startswith('import') and not l.startswith('from '): str += l+'\n' return str @@ -336,9 +374,15 @@ class Class(Scope): return c def get_code(self): str = '%sclass %s' % (self.currentindent(),self.name) - if len(self.supers) > 0: str += '(%s)' % ','.join(self.supers) + # Only include base class expressions that are pure dotted names. + # Anything else (calls, subscripts, conditionals, ...) is dropped + # because exec() would evaluate it at class-definition time. See + # the security note in the file header. + safe_supers = [s.strip() for s in self.supers + if _DOTTED_NAME_RE.match(s.strip())] + if len(safe_supers) > 0: str += '(%s)' % ','.join(safe_supers) str += ':\n' - if len(self.docstr) > 0: str += self.childindent()+'"""'+self.docstr+'"""\n' + if len(self.docstr) > 0: str += self.childindent()+repr(self.docstr)+'\n' if len(self.subscopes) > 0: for s in self.subscopes: str += s.get_code() else: @@ -353,9 +397,15 @@ class Function(Scope): def copy_decl(self,indent=0): return Function(self.name,self.params,indent, self.docstr) def get_code(self): + # Strip default values and annotations from each parameter before + # joining: exec() evaluates these at definition time and a hostile + # buffer could otherwise execute arbitrary code via crafted def + # headers. See file header for details. + safe_params = [_strip_param(p) for p in self.params] + safe_params = [p for p in safe_params if p] str = "%sdef %s(%s):\n" % \ - (self.currentindent(),self.name,','.join(self.params)) - if len(self.docstr) > 0: str += self.childindent()+'"""'+self.docstr+'"""\n' + (self.currentindent(),self.name,','.join(safe_params)) + if len(self.docstr) > 0: str += self.childindent()+repr(self.docstr)+'\n' str += "%spass\n" % self.childindent() return str @@ -448,7 +498,7 @@ class PyParser: def _parseassignment(self): assign='' tokentype, token, indent = self.donext() - if tokentype == tokenize.STRING or token == 'str': + if tokentype == tokenize.STRING or token == 'str': return '""' elif token == '(' or token == 'tuple': return '()' @@ -556,7 +606,7 @@ class PyParser: freshscope = True dbg("new scope: class") self.scope = self.scope.add(cls) - + elif token == 'import': imports = self._parseimportlist() for mod, alias in imports: @@ -578,7 +628,7 @@ class PyParser: elif tokentype == STRING: if freshscope: self.scope.doc(token) elif tokentype == NAME: - name,token = self._parsedotname(token) + name,token = self._parsedotname(token) if token == '=': stmt = self._parseassignment() dbg("parseassignment: %s = %s" % (name, stmt)) diff --git a/runtime/autoload/pythoncomplete.vim b/runtime/autoload/pythoncomplete.vim index aa28bb721f..5dd6c9462d 100644 --- a/runtime/autoload/pythoncomplete.vim +++ b/runtime/autoload/pythoncomplete.vim @@ -1,8 +1,8 @@ "pythoncomplete.vim - Omni Completion for python " Maintainer: " Previous Maintainer: Aaron Griffin -" Version: 0.9 -" Last Updated: 2020 Oct 9 +" Version: 0.10 +" Last Updated: 2026 Jun 21 " " Changes " TODO: @@ -12,6 +12,16 @@ " i.e. "import url" " Continue parsing on invalid line?? " +" v 0.10 by Vim project +" * disables importing local modules, unless the global Vim variable +" g:pythoncomplete_allow_import is set to non-zero +" * strip default values and annotations from function parameter lists +" before exec(), and whitelist class base lists to dotted names: the +" previous code passed buffer-supplied expressions to exec() which +" Python evaluates at definition time, allowing arbitrary code +" execution via crafted def/class headers +" * use repr() on doc strings to prevent code execution +" " v 0.9 " * Fixed docstring parsing for classes and functions " * Fixed parsing of *args and **kwargs type arguments @@ -91,6 +101,24 @@ function! s:DefPython() python << PYTHONEOF import sys, tokenize, cStringIO, types from token import NAME, DEDENT, NEWLINE, STRING +import re + +# Used by Class.get_code(): a base class expression is only included in the +# code passed to exec() if it is a pure dotted name (e.g. "Base", "mod.Base", +# "pkg.sub.Cls"). Anything containing calls, subscripts, "=", ":" or other +# operators is dropped, since exec()-ing it would evaluate buffer-supplied +# expressions. See the security note in the file header. +_DOTTED_NAME_RE = re.compile(r'^[A-Za-z_]\w*(\s*\.\s*[A-Za-z_]\w*)*$') + +def _strip_param(p): + # Return the bare parameter name from a parameter spec harvested by + # _parenparse(), discarding any default value or annotation. Default + # values and annotations would otherwise be evaluated by exec() at + # function-definition time. Star prefixes ("*args", "**kw") and bare + # "*" / "/" are preserved as written. + p = p.split('=', 1)[0] + p = p.split(':', 1)[0] + return p.strip() debugstmts=[] def dbg(s): debugstmts.append(s) @@ -145,12 +173,24 @@ class Completer(object): self.parser = PyParser() def evalsource(self,text,line=0): + # vim is imported locally in vimcomplete(); re-import here so the + # vim.eval() below works (otherwise NameError, silently caught). + import vim sc = self.parser.parse(text,line) + try: allow_imports = int( + vim.eval("get(g:, 'pythoncomplete_allow_import', 0)")) + except Exception: + allow_imports = 0 src = sc.get_code() dbg("source: %s" % src) try: exec(src) in self.compldict except: dbg("parser: %s, %s" % (sys.exc_info()[0],sys.exc_info()[1])) for l in sc.locals: + # Executing import/from statements harvested from the buffer runs + # arbitrary package code; only do so when the user opted in. + if not allow_imports and (l.startswith('import') + or l.startswith('from ')): + continue try: exec(l) in self.compldict except: dbg("locals: %s, %s [%s]" % (sys.exc_info()[0],sys.exc_info()[1],l)) @@ -314,14 +354,12 @@ class Scope(object): def get_code(self): str = "" - if len(self.docstr) > 0: str += '"""'+self.docstr+'"""\n' - for l in self.locals: - if l.startswith('import'): str += l+'\n' + if len(self.docstr) > 0: str += repr(self.docstr)+'\n' str += 'class _PyCmplNoType:\n def __getattr__(self,name):\n return None\n' for sub in self.subscopes: str += sub.get_code() for l in self.locals: - if not l.startswith('import'): str += l+'\n' + if not l.startswith('import') and not l.startswith('from '): str += l+'\n' return str @@ -351,9 +389,15 @@ class Class(Scope): return c def get_code(self): str = '%sclass %s' % (self.currentindent(),self.name) - if len(self.supers) > 0: str += '(%s)' % ','.join(self.supers) + # Only include base class expressions that are pure dotted names. + # Anything else (calls, subscripts, conditionals, ...) is dropped + # because exec() would evaluate it at class-definition time. See + # the security note in the file header. + safe_supers = [s.strip() for s in self.supers + if _DOTTED_NAME_RE.match(s.strip())] + if len(safe_supers) > 0: str += '(%s)' % ','.join(safe_supers) str += ':\n' - if len(self.docstr) > 0: str += self.childindent()+'"""'+self.docstr+'"""\n' + if len(self.docstr) > 0: str += self.childindent()+repr(self.docstr)+'\n' if len(self.subscopes) > 0: for s in self.subscopes: str += s.get_code() else: @@ -368,9 +412,15 @@ class Function(Scope): def copy_decl(self,indent=0): return Function(self.name,self.params,indent, self.docstr) def get_code(self): + # Strip default values and annotations from each parameter before + # joining: exec() evaluates these at definition time and a hostile + # buffer could otherwise execute arbitrary code via crafted def + # headers. See file header for details. + safe_params = [_strip_param(p) for p in self.params] + safe_params = [p for p in safe_params if p] str = "%sdef %s(%s):\n" % \ - (self.currentindent(),self.name,','.join(self.params)) - if len(self.docstr) > 0: str += self.childindent()+'"""'+self.docstr+'"""\n' + (self.currentindent(),self.name,','.join(safe_params)) + if len(self.docstr) > 0: str += self.childindent()+repr(self.docstr)+'\n' str += "%spass\n" % self.childindent() return str diff --git a/runtime/autoload/rust.vim b/runtime/autoload/rust.vim index 5ccbf4b382..6510f23be7 100644 --- a/runtime/autoload/rust.vim +++ b/runtime/autoload/rust.vim @@ -1,5 +1,6 @@ " Description: Helper functions for Rust commands/mappings " Last Modified: 2023-09-11 +" 2026 May 20 by Vim project: use correct shellescape() with ! command " For bugs, patches and license go to https://github.com/rust-lang/rust.vim function! rust#Load() @@ -125,7 +126,7 @@ function! s:Run(dict, rustc_args, args) echohl None endif if !v:shell_error - exe '!' . shellescape(exepath) . " " . join(map(a:args, 'shellescape(v:val)')) + exe '!' . shellescape(exepath,1) . " " . join(map(a:args, 'shellescape(v:val,1)')) endif endfunction diff --git a/runtime/autoload/rustfmt.vim b/runtime/autoload/rustfmt.vim index 268a1c02cc..771c95a877 100644 --- a/runtime/autoload/rustfmt.vim +++ b/runtime/autoload/rustfmt.vim @@ -1,8 +1,9 @@ " Author: Stephen Sugden " Last Modified: 2023-09-11 " Last Change: -" 2025 Oct 27 by Vim project don't use rustfmt as 'formatprg' by default -" +" 2025 Oct 27 by Vim project: don't use rustfmt as 'formatprg' by default +" 2026 Jan 25 by Vim project: don't hide rustfmt errors, restore default var +" 2026 Mar 30 by Vim project: use fnameescape for :chdir commands " " Adapted from https://github.com/fatih/vim-go " For bugs, patches and license go to https://github.com/rust-lang/rust.vim @@ -69,6 +70,12 @@ function! s:RustfmtWriteMode() endfunction function! s:RustfmtConfigOptions() + let default = '--edition 2018' + + if !get(g:, 'rustfmt_find_toml', 0) + return default + endif + let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';') if l:rustfmt_toml !=# '' return '--config-path '.shellescape(fnamemodify(l:rustfmt_toml, ":p")) @@ -128,7 +135,7 @@ function! s:RunRustfmt(command, tmpname, from_writepre) " chdir to the directory of the file let l:has_lcd = haslocaldir() let l:prev_cd = getcwd() - execute 'lchdir! '.expand('%:h') + execute 'lchdir! ' . fnameescape(expand('%:h')) let l:buffer = getline(1, '$') if exists("*systemlist") @@ -199,7 +206,7 @@ function! s:RunRustfmt(command, tmpname, from_writepre) echo "rust.vim: was not able to parse rustfmt messages. Here is the raw output:" echo "\n" for l:line in l:stderr - echo l:line + echomsg l:line endfor endif @@ -208,6 +215,7 @@ function! s:RunRustfmt(command, tmpname, from_writepre) endif " Restore the current directory if needed + let l:prev_cd = fnameescape(l:prev_cd) if a:tmpname ==# '' if l:has_lcd execute 'lchdir! '.l:prev_cd @@ -218,7 +226,10 @@ function! s:RunRustfmt(command, tmpname, from_writepre) " Open lwindow after we have changed back to the previous directory if l:open_lwindow == 1 + try lwindow + catch /^Vim\%((\S\+)\)\=:E776:/ + endtry endif call winrestview(l:view) diff --git a/runtime/autoload/sqlcomplete.vim b/runtime/autoload/sqlcomplete.vim index adbdbab894..4017ae9b05 100644 --- a/runtime/autoload/sqlcomplete.vim +++ b/runtime/autoload/sqlcomplete.vim @@ -3,6 +3,7 @@ " Maintainer: David Fishburn " Version: 16.0 " Last Change: 2017 Oct 15 +" 2025 Nov 11 by Vim project: only set 'omnifunc' if dbext script was loaded #18716 " Homepage: http://www.vim.org/scripts/script.php?script_id=1572 " Usage: For detailed help " ":help sql.txt" @@ -98,12 +99,11 @@ " Set completion with CTRL-X CTRL-O to autoloaded function. " This check is in place in case this script is " sourced directly instead of using the autoload feature. -if exists('&omnifunc') - " Do not set the option if already set since this - " results in an E117 warning. - if &omnifunc == "" - setlocal omnifunc=sqlcomplete#Complete - endif +" +" Do not set the option if already set since this +" results in an E117 warning. +if exists('&omnifunc') && &omnifunc == "" && exists('g:loaded_dbext') + setlocal omnifunc=sqlcomplete#Complete endif if exists('g:loaded_sql_completion') diff --git a/runtime/autoload/tar.vim b/runtime/autoload/tar.vim index 74a5b38f78..7f8e24ac0f 100644 --- a/runtime/autoload/tar.vim +++ b/runtime/autoload/tar.vim @@ -18,6 +18,15 @@ " 2025 May 19 by Vim Project: restore working directory after read/write " 2025 Jul 13 by Vim Project: warn with path traversal attacks " 2025 Jul 16 by Vim Project: update minimum vim version +" 2026 Feb 06 by Vim Project: consider 'nowrapscan' (#19333) +" 2026 Feb 07 by Vim Project: make the path traversal detection more robust (#19341) +" 2026 Apr 06 by Vim Project: fix bugs with lz4 support (#19925) +" 2026 Apr 09 by Vim Project: fix bugs with zstd support (#19930) +" 2026 Apr 09 by Vim Project: fix bug with dotted filename (#19930) +" 2026 Apr 15 by Vim Project: fix more path traversal issues (#19981) +" 2026 Apr 16 by Vim Project: use g:tar_secure in tar#Extract() +" 2026 May 14 by Vim Project: use correct shellescape() call in Vimuntar() +" 2026 Jun 16 by Vim Project: fix lz4 extraction on non-linux systemd (#20555) " " Contains many ideas from Michael Toren's " @@ -110,7 +119,7 @@ if !exists("g:tar_shq") endif let g:tar_secure=' -- ' -let g:tar_leading_pat='^\%([.]\{,2\}/\)\+' +let g:tar_leading_pat='\m^\%([.]\{,2\}/\)\+' " ---------------- " Functions: {{{1 @@ -121,7 +130,7 @@ let g:tar_leading_pat='^\%([.]\{,2\}/\)\+' fun! s:Msg(func, severity, msg) redraw! if a:severity =~? 'error' - echohl Error + echohl Error else echohl WarningMsg endif @@ -226,7 +235,7 @@ fun! tar#Browse(tarfile) " remove tar: Removing leading '/' from member names " Note: the message could be localized - if search('^tar: ') > 0 || search(g:tar_leading_pat) > 0 + if search('\m^g\?tar: ', 'w') > 0 || search(g:tar_leading_pat, 'w') > 0 call append(3,'" Note: Path Traversal Attack detected!') let b:leading_slash = 1 " remove the message output @@ -607,114 +616,143 @@ fun! tar#Extract() let &report= repkeep return endif + if fname =~ '^[.]\?[.]/' || simplify(fname) =~ '\.\.[/\\]' + call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!") + let &report= repkeep + return + endif + if has("unix") + if fname =~ '^/' + call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!") + let &report= repkeep + return + endif + else + if fname =~ '^\%(\a:[\\/]\|[\\/]\)' + call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!") + let &report= repkeep + return + endif + endif + let extractcmd= s:WinPath(g:tar_extractcmd) let tarball = expand("%") - let tarbase = substitute(tarball,'\..*$','','') + if !filereadable(tarball) + let &report= repkeep + return + endif - let extractcmd= s:WinPath(g:tar_extractcmd) - if filereadable(tarbase.".tar") - call system(extractcmd." ".shellescape(tarbase).".tar ".shellescape(fname)) + if tarball =~# "\.tar$" + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ". fname endif - elseif filereadable(tarbase.".tgz") + elseif tarball =~# "\.tgz$" let extractcmd= substitute(extractcmd,"-","-z","") - call system(extractcmd." ".shellescape(tarbase).".tgz ".shellescape(fname)) + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tgz {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tar.gz") + elseif tarball =~# "\.tar\.gz$" let extractcmd= substitute(extractcmd,"-","-z","") - call system(extractcmd." ".shellescape(tarbase).".tar.gz ".shellescape(fname)) + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.gz {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tbz") + elseif tarball =~# "\.tbz$" let extractcmd= substitute(extractcmd,"-","-j","") - call system(extractcmd." ".shellescape(tarbase).".tbz ".shellescape(fname)) + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tbz {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tar.bz2") + elseif tarball =~# "\.tar\.bz2$" let extractcmd= substitute(extractcmd,"-","-j","") - call system(extractcmd." ".shellescape(tarbase).".tar.bz2 ".shellescape(fname)) + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.bz2 {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tar.bz3") + elseif tarball =~# "\.tar\.bz3$" let extractcmd= substitute(extractcmd,"-","-j","") - call system(extractcmd." ".shellescape(tarbase).".tar.bz3 ".shellescape(fname)) + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.bz3 {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".txz") + elseif tarball =~# "\.txz$" let extractcmd= substitute(extractcmd,"-","-J","") - call system(extractcmd." ".shellescape(tarbase).".txz ".shellescape(fname)) + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.txz {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tar.xz") + elseif tarball =~# "\.tar\.xz$" let extractcmd= substitute(extractcmd,"-","-J","") - call system(extractcmd." ".shellescape(tarbase).".tar.xz ".shellescape(fname)) + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.xz {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tzst") - let extractcmd= substitute(extractcmd,"-","--zstd","") - call system(extractcmd." ".shellescape(tarbase).".tzst ".shellescape(fname)) + elseif tarball =~# "\.tzst$" + let extractcmd= substitute(extractcmd,"-","--zstd -","") + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tzst {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tar.zst") - let extractcmd= substitute(extractcmd,"-","--zstd","") - call system(extractcmd." ".shellescape(tarbase).".tar.zst ".shellescape(fname)) + elseif tarball =~# "\.tar\.zst$" + let extractcmd= substitute(extractcmd,"-","--zstd -","") + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.zst {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tlz4") - let extractcmd= substitute(extractcmd,"-","-I lz4","") - call system(extractcmd." ".shellescape(tarbase).".tlz4 ".shellescape(fname)) + elseif tarball =~# "\.tlz4$" + if has("linux") + let extractcmd= substitute(extractcmd,"-","-I lz4 -","") + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) + else + call system("lz4 --decompress --stdout -- ".shellescape(tarball)." | ".extractcmd." - ".g:tar_secure.shellescape(fname)) + endif if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tlz4 {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif - elseif filereadable(tarbase.".tar.lz4") - let extractcmd= substitute(extractcmd,"-","-I lz4","") - call system(extractcmd." ".shellescape(tarbase).".tar.lz4".shellescape(fname)) + elseif tarball =~# "\.tar\.lz4$" + if has("linux") + let extractcmd= substitute(extractcmd,"-","-I lz4 -","") + call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname)) + else + call system("lz4 --decompress --stdout -- ".shellescape(tarball)." | ".extractcmd." - ".g:tar_secure.shellescape(fname)) + endif if v:shell_error != 0 - call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.lz4 {fname}: failed!") + call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!") else echo "***note*** successfully extracted ".fname endif @@ -800,9 +838,9 @@ fun! tar#Vimuntar(...) " if necessary, decompress the tarball; then, extract it if tartail =~ '\.tgz' if executable("gunzip") - silent exe "!gunzip ".shellescape(tartail) + silent exe "!gunzip ".shellescape(tartail, 1) elseif executable("gzip") - silent exe "!gzip -d ".shellescape(tartail) + silent exe "!gzip -d ".shellescape(tartail, 1) else echoerr "unable to decompress<".tartail."> on this system" if simplify(curdir) != simplify(tarhome) diff --git a/runtime/autoload/tohtml.vim b/runtime/autoload/tohtml.vim index d2722a4021..054deabcba 100644 --- a/runtime/autoload/tohtml.vim +++ b/runtime/autoload/tohtml.vim @@ -1,882 +1,886 @@ -" Vim autoload file for the tohtml plugin. -" Maintainer: Ben Fritz -" Last Change: 2023 Sep 03 -" -" Additional contributors: -" -" Original by Bram Moolenaar -" Diff2HTML() added by Christian Brabandt -" -" See Mercurial change logs for more! - -" this file uses line continuations -let s:cpo_sav = &cpo -set cpo&vim - -" Automatically find charsets from all encodings supported natively by Vim. With -" the 8bit- and 2byte- prefixes, Vim can actually support more encodings than -" this. Let the user specify these however since they won't be supported on -" every system. -" -" Note, not all of Vim's supported encodings have a charset to use. -" -" Names in this list are from: -" http://www.iana.org/assignments/character-sets -" g:tohtml#encoding_to_charset: {{{ -let g:tohtml#encoding_to_charset = { - \ 'latin1' : 'ISO-8859-1', - \ 'iso-8859-2' : 'ISO-8859-2', - \ 'iso-8859-3' : 'ISO-8859-3', - \ 'iso-8859-4' : 'ISO-8859-4', - \ 'iso-8859-5' : 'ISO-8859-5', - \ 'iso-8859-6' : 'ISO-8859-6', - \ 'iso-8859-7' : 'ISO-8859-7', - \ 'iso-8859-8' : 'ISO-8859-8', - \ 'iso-8859-9' : 'ISO-8859-9', - \ 'iso-8859-10' : '', - \ 'iso-8859-13' : 'ISO-8859-13', - \ 'iso-8859-14' : '', - \ 'iso-8859-15' : 'ISO-8859-15', - \ 'koi8-r' : 'KOI8-R', - \ 'koi8-u' : 'KOI8-U', - \ 'macroman' : 'macintosh', - \ 'cp437' : '', - \ 'cp775' : '', - \ 'cp850' : '', - \ 'cp852' : '', - \ 'cp855' : '', - \ 'cp857' : '', - \ 'cp860' : '', - \ 'cp861' : '', - \ 'cp862' : '', - \ 'cp863' : '', - \ 'cp865' : '', - \ 'cp866' : 'IBM866', - \ 'cp869' : '', - \ 'cp874' : '', - \ 'cp1250' : 'windows-1250', - \ 'cp1251' : 'windows-1251', - \ 'cp1253' : 'windows-1253', - \ 'cp1254' : 'windows-1254', - \ 'cp1255' : 'windows-1255', - \ 'cp1256' : 'windows-1256', - \ 'cp1257' : 'windows-1257', - \ 'cp1258' : 'windows-1258', - \ 'euc-jp' : 'EUC-JP', - \ 'sjis' : 'Shift_JIS', - \ 'cp932' : 'Shift_JIS', - \ 'cp949' : '', - \ 'euc-kr' : 'EUC-KR', - \ 'cp936' : 'GBK', - \ 'euc-cn' : 'GB2312', - \ 'big5' : 'Big5', - \ 'cp950' : 'Big5', - \ 'utf-8' : 'UTF-8', - \ 'ucs-2' : 'UTF-8', - \ 'ucs-2le' : 'UTF-8', - \ 'utf-16' : 'UTF-8', - \ 'utf-16le' : 'UTF-8', - \ 'ucs-4' : 'UTF-8', - \ 'ucs-4le' : 'UTF-8', - \ } -lockvar g:tohtml#encoding_to_charset -" Notes: -" 1. All UCS/UTF are converted to UTF-8 because it is much better supported -" 2. Any blank spaces are there because Vim supports it but at least one major -" web browser does not according to http://wiki.whatwg.org/wiki/Web_Encodings. -" }}} - -" Only automatically find encodings supported natively by Vim, let the user -" specify the encoding if it's not natively supported. This function is only -" used when the user specifies the charset, they better know what they are -" doing! -" -" Names in this list are from: -" http://www.iana.org/assignments/character-sets -" g:tohtml#charset_to_encoding: {{{ -let g:tohtml#charset_to_encoding = { - \ 'iso_8859-1:1987' : 'latin1', - \ 'iso-ir-100' : 'latin1', - \ 'iso_8859-1' : 'latin1', - \ 'iso-8859-1' : 'latin1', - \ 'latin1' : 'latin1', - \ 'l1' : 'latin1', - \ 'ibm819' : 'latin1', - \ 'cp819' : 'latin1', - \ 'csisolatin1' : 'latin1', - \ 'iso_8859-2:1987' : 'iso-8859-2', - \ 'iso-ir-101' : 'iso-8859-2', - \ 'iso_8859-2' : 'iso-8859-2', - \ 'iso-8859-2' : 'iso-8859-2', - \ 'latin2' : 'iso-8859-2', - \ 'l2' : 'iso-8859-2', - \ 'csisolatin2' : 'iso-8859-2', - \ 'iso_8859-3:1988' : 'iso-8859-3', - \ 'iso-ir-109' : 'iso-8859-3', - \ 'iso_8859-3' : 'iso-8859-3', - \ 'iso-8859-3' : 'iso-8859-3', - \ 'latin3' : 'iso-8859-3', - \ 'l3' : 'iso-8859-3', - \ 'csisolatin3' : 'iso-8859-3', - \ 'iso_8859-4:1988' : 'iso-8859-4', - \ 'iso-ir-110' : 'iso-8859-4', - \ 'iso_8859-4' : 'iso-8859-4', - \ 'iso-8859-4' : 'iso-8859-4', - \ 'latin4' : 'iso-8859-4', - \ 'l4' : 'iso-8859-4', - \ 'csisolatin4' : 'iso-8859-4', - \ 'iso_8859-5:1988' : 'iso-8859-5', - \ 'iso-ir-144' : 'iso-8859-5', - \ 'iso_8859-5' : 'iso-8859-5', - \ 'iso-8859-5' : 'iso-8859-5', - \ 'cyrillic' : 'iso-8859-5', - \ 'csisolatincyrillic' : 'iso-8859-5', - \ 'iso_8859-6:1987' : 'iso-8859-6', - \ 'iso-ir-127' : 'iso-8859-6', - \ 'iso_8859-6' : 'iso-8859-6', - \ 'iso-8859-6' : 'iso-8859-6', - \ 'ecma-114' : 'iso-8859-6', - \ 'asmo-708' : 'iso-8859-6', - \ 'arabic' : 'iso-8859-6', - \ 'csisolatinarabic' : 'iso-8859-6', - \ 'iso_8859-7:1987' : 'iso-8859-7', - \ 'iso-ir-126' : 'iso-8859-7', - \ 'iso_8859-7' : 'iso-8859-7', - \ 'iso-8859-7' : 'iso-8859-7', - \ 'elot_928' : 'iso-8859-7', - \ 'ecma-118' : 'iso-8859-7', - \ 'greek' : 'iso-8859-7', - \ 'greek8' : 'iso-8859-7', - \ 'csisolatingreek' : 'iso-8859-7', - \ 'iso_8859-8:1988' : 'iso-8859-8', - \ 'iso-ir-138' : 'iso-8859-8', - \ 'iso_8859-8' : 'iso-8859-8', - \ 'iso-8859-8' : 'iso-8859-8', - \ 'hebrew' : 'iso-8859-8', - \ 'csisolatinhebrew' : 'iso-8859-8', - \ 'iso_8859-9:1989' : 'iso-8859-9', - \ 'iso-ir-148' : 'iso-8859-9', - \ 'iso_8859-9' : 'iso-8859-9', - \ 'iso-8859-9' : 'iso-8859-9', - \ 'latin5' : 'iso-8859-9', - \ 'l5' : 'iso-8859-9', - \ 'csisolatin5' : 'iso-8859-9', - \ 'iso-8859-10' : 'iso-8859-10', - \ 'iso-ir-157' : 'iso-8859-10', - \ 'l6' : 'iso-8859-10', - \ 'iso_8859-10:1992' : 'iso-8859-10', - \ 'csisolatin6' : 'iso-8859-10', - \ 'latin6' : 'iso-8859-10', - \ 'iso-8859-13' : 'iso-8859-13', - \ 'iso-8859-14' : 'iso-8859-14', - \ 'iso-ir-199' : 'iso-8859-14', - \ 'iso_8859-14:1998' : 'iso-8859-14', - \ 'iso_8859-14' : 'iso-8859-14', - \ 'latin8' : 'iso-8859-14', - \ 'iso-celtic' : 'iso-8859-14', - \ 'l8' : 'iso-8859-14', - \ 'iso-8859-15' : 'iso-8859-15', - \ 'iso_8859-15' : 'iso-8859-15', - \ 'latin-9' : 'iso-8859-15', - \ 'koi8-r' : 'koi8-r', - \ 'cskoi8r' : 'koi8-r', - \ 'koi8-u' : 'koi8-u', - \ 'macintosh' : 'macroman', - \ 'mac' : 'macroman', - \ 'csmacintosh' : 'macroman', - \ 'ibm437' : 'cp437', - \ 'cp437' : 'cp437', - \ '437' : 'cp437', - \ 'cspc8codepage437' : 'cp437', - \ 'ibm775' : 'cp775', - \ 'cp775' : 'cp775', - \ 'cspc775baltic' : 'cp775', - \ 'ibm850' : 'cp850', - \ 'cp850' : 'cp850', - \ '850' : 'cp850', - \ 'cspc850multilingual' : 'cp850', - \ 'ibm852' : 'cp852', - \ 'cp852' : 'cp852', - \ '852' : 'cp852', - \ 'cspcp852' : 'cp852', - \ 'ibm855' : 'cp855', - \ 'cp855' : 'cp855', - \ '855' : 'cp855', - \ 'csibm855' : 'cp855', - \ 'ibm857' : 'cp857', - \ 'cp857' : 'cp857', - \ '857' : 'cp857', - \ 'csibm857' : 'cp857', - \ 'ibm860' : 'cp860', - \ 'cp860' : 'cp860', - \ '860' : 'cp860', - \ 'csibm860' : 'cp860', - \ 'ibm861' : 'cp861', - \ 'cp861' : 'cp861', - \ '861' : 'cp861', - \ 'cp-is' : 'cp861', - \ 'csibm861' : 'cp861', - \ 'ibm862' : 'cp862', - \ 'cp862' : 'cp862', - \ '862' : 'cp862', - \ 'cspc862latinhebrew' : 'cp862', - \ 'ibm863' : 'cp863', - \ 'cp863' : 'cp863', - \ '863' : 'cp863', - \ 'csibm863' : 'cp863', - \ 'ibm865' : 'cp865', - \ 'cp865' : 'cp865', - \ '865' : 'cp865', - \ 'csibm865' : 'cp865', - \ 'ibm866' : 'cp866', - \ 'cp866' : 'cp866', - \ '866' : 'cp866', - \ 'csibm866' : 'cp866', - \ 'ibm869' : 'cp869', - \ 'cp869' : 'cp869', - \ '869' : 'cp869', - \ 'cp-gr' : 'cp869', - \ 'csibm869' : 'cp869', - \ 'windows-1250' : 'cp1250', - \ 'windows-1251' : 'cp1251', - \ 'windows-1253' : 'cp1253', - \ 'windows-1254' : 'cp1254', - \ 'windows-1255' : 'cp1255', - \ 'windows-1256' : 'cp1256', - \ 'windows-1257' : 'cp1257', - \ 'windows-1258' : 'cp1258', - \ 'extended_unix_code_packed_format_for_japanese' : 'euc-jp', - \ 'cseucpkdfmtjapanese' : 'euc-jp', - \ 'euc-jp' : 'euc-jp', - \ 'shift_jis' : 'sjis', - \ 'ms_kanji' : 'sjis', - \ 'sjis' : 'sjis', - \ 'csshiftjis' : 'sjis', - \ 'ibm-thai' : 'cp874', - \ 'csibmthai' : 'cp874', - \ 'ks_c_5601-1987' : 'cp949', - \ 'iso-ir-149' : 'cp949', - \ 'ks_c_5601-1989' : 'cp949', - \ 'ksc_5601' : 'cp949', - \ 'korean' : 'cp949', - \ 'csksc56011987' : 'cp949', - \ 'euc-kr' : 'euc-kr', - \ 'cseuckr' : 'euc-kr', - \ 'gbk' : 'cp936', - \ 'cp936' : 'cp936', - \ 'ms936' : 'cp936', - \ 'windows-936' : 'cp936', - \ 'gb_2312-80' : 'euc-cn', - \ 'iso-ir-58' : 'euc-cn', - \ 'chinese' : 'euc-cn', - \ 'csiso58gb231280' : 'euc-cn', - \ 'big5' : 'big5', - \ 'csbig5' : 'big5', - \ 'utf-8' : 'utf-8', - \ 'iso-10646-ucs-2' : 'ucs-2', - \ 'csunicode' : 'ucs-2', - \ 'utf-16' : 'utf-16', - \ 'utf-16be' : 'utf-16', - \ 'utf-16le' : 'utf-16le', - \ 'utf-32' : 'ucs-4', - \ 'utf-32be' : 'ucs-4', - \ 'utf-32le' : 'ucs-4le', - \ 'iso-10646-ucs-4' : 'ucs-4', - \ 'csucs4' : 'ucs-4' - \ } -lockvar g:tohtml#charset_to_encoding -"}}} - -func! tohtml#Convert2HTML(line1, line2) "{{{ - let s:settings = tohtml#GetUserSettings() - - if !&diff || s:settings.diff_one_file "{{{ - if a:line2 >= a:line1 - let g:html_start_line = a:line1 - let g:html_end_line = a:line2 +vim9script +# Vim autoload file for the tohtml plugin. +# Maintainer: Ben Fritz +# Last Change: 2026-05-22 +# +# Additional contributors: +# +# Original by Bram Moolenaar +# Diff2HTML() added by Christian Brabandt +# Converted to Vim9 by Mao-Yining Vim PR #19915 +# +# See git change logs for more! + +# Automatically find charsets from all encodings supported natively by Vim. With +# the 8bit- and 2byte- prefixes, Vim can actually support more encodings than +# this. Let the user specify these however since they won't be supported on +# every system. +# +# Note, not all of Vim's supported encodings have a charset to use. +# +# Names in this list are from: +# http://www.iana.org/assignments/character-sets +# export const encoding_to_charset: {{{ +export const encoding_to_charset = { + 'latin1': 'ISO-8859-1', + 'iso-8859-2': 'ISO-8859-2', + 'iso-8859-3': 'ISO-8859-3', + 'iso-8859-4': 'ISO-8859-4', + 'iso-8859-5': 'ISO-8859-5', + 'iso-8859-6': 'ISO-8859-6', + 'iso-8859-7': 'ISO-8859-7', + 'iso-8859-8': 'ISO-8859-8', + 'iso-8859-9': 'ISO-8859-9', + 'iso-8859-10': '', + 'iso-8859-13': 'ISO-8859-13', + 'iso-8859-14': '', + 'iso-8859-15': 'ISO-8859-15', + 'koi8-r': 'KOI8-R', + 'koi8-u': 'KOI8-U', + 'macroman': 'macintosh', + 'cp437': '', + 'cp775': '', + 'cp850': '', + 'cp852': '', + 'cp855': '', + 'cp857': '', + 'cp860': '', + 'cp861': '', + 'cp862': '', + 'cp863': '', + 'cp865': '', + 'cp866': 'IBM866', + 'cp869': '', + 'cp874': '', + 'cp1250': 'windows-1250', + 'cp1251': 'windows-1251', + 'cp1253': 'windows-1253', + 'cp1254': 'windows-1254', + 'cp1255': 'windows-1255', + 'cp1256': 'windows-1256', + 'cp1257': 'windows-1257', + 'cp1258': 'windows-1258', + 'euc-jp': 'EUC-JP', + 'sjis': 'Shift_JIS', + 'cp932': 'Shift_JIS', + 'cp949': '', + 'euc-kr': 'EUC-KR', + 'cp936': 'GBK', + 'euc-cn': 'GB2312', + 'big5': 'Big5', + 'cp950': 'Big5', + 'utf-8': 'UTF-8', + 'ucs-2': 'UTF-8', + 'ucs-2le': 'UTF-8', + 'utf-16': 'UTF-8', + 'utf-16le': 'UTF-8', + 'ucs-4': 'UTF-8', + 'ucs-4le': 'UTF-8', +} + +# Notes: +# 1. All UCS/UTF are converted to UTF-8 because it is much better supported +# 2. Any blank spaces are there because Vim supports it but at least one major +# web browser does not according to http://wiki.whatwg.org/wiki/Web_Encodings. +# }}} + +# Only automatically find encodings supported natively by Vim, let the user +# specify the encoding if it's not natively supported. This function is only +# used when the user specifies the charset, they better know what they are +# doing! +# +# Names in this list are from: +# http://www.iana.org/assignments/character-sets +# export const charset_to_encoding: {{{ +export const charset_to_encoding = { + 'iso_8859-1:1987': 'latin1', + 'iso-ir-100': 'latin1', + 'iso_8859-1': 'latin1', + 'iso-8859-1': 'latin1', + 'latin1': 'latin1', + 'l1': 'latin1', + 'ibm819': 'latin1', + 'cp819': 'latin1', + 'csisolatin1': 'latin1', + 'iso_8859-2:1987': 'iso-8859-2', + 'iso-ir-101': 'iso-8859-2', + 'iso_8859-2': 'iso-8859-2', + 'iso-8859-2': 'iso-8859-2', + 'latin2': 'iso-8859-2', + 'l2': 'iso-8859-2', + 'csisolatin2': 'iso-8859-2', + 'iso_8859-3:1988': 'iso-8859-3', + 'iso-ir-109': 'iso-8859-3', + 'iso_8859-3': 'iso-8859-3', + 'iso-8859-3': 'iso-8859-3', + 'latin3': 'iso-8859-3', + 'l3': 'iso-8859-3', + 'csisolatin3': 'iso-8859-3', + 'iso_8859-4:1988': 'iso-8859-4', + 'iso-ir-110': 'iso-8859-4', + 'iso_8859-4': 'iso-8859-4', + 'iso-8859-4': 'iso-8859-4', + 'latin4': 'iso-8859-4', + 'l4': 'iso-8859-4', + 'csisolatin4': 'iso-8859-4', + 'iso_8859-5:1988': 'iso-8859-5', + 'iso-ir-144': 'iso-8859-5', + 'iso_8859-5': 'iso-8859-5', + 'iso-8859-5': 'iso-8859-5', + 'cyrillic': 'iso-8859-5', + 'csisolatincyrillic': 'iso-8859-5', + 'iso_8859-6:1987': 'iso-8859-6', + 'iso-ir-127': 'iso-8859-6', + 'iso_8859-6': 'iso-8859-6', + 'iso-8859-6': 'iso-8859-6', + 'ecma-114': 'iso-8859-6', + 'asmo-708': 'iso-8859-6', + 'arabic': 'iso-8859-6', + 'csisolatinarabic': 'iso-8859-6', + 'iso_8859-7:1987': 'iso-8859-7', + 'iso-ir-126': 'iso-8859-7', + 'iso_8859-7': 'iso-8859-7', + 'iso-8859-7': 'iso-8859-7', + 'elot_928': 'iso-8859-7', + 'ecma-118': 'iso-8859-7', + 'greek': 'iso-8859-7', + 'greek8': 'iso-8859-7', + 'csisolatingreek': 'iso-8859-7', + 'iso_8859-8:1988': 'iso-8859-8', + 'iso-ir-138': 'iso-8859-8', + 'iso_8859-8': 'iso-8859-8', + 'iso-8859-8': 'iso-8859-8', + 'hebrew': 'iso-8859-8', + 'csisolatinhebrew': 'iso-8859-8', + 'iso_8859-9:1989': 'iso-8859-9', + 'iso-ir-148': 'iso-8859-9', + 'iso_8859-9': 'iso-8859-9', + 'iso-8859-9': 'iso-8859-9', + 'latin5': 'iso-8859-9', + 'l5': 'iso-8859-9', + 'csisolatin5': 'iso-8859-9', + 'iso-8859-10': 'iso-8859-10', + 'iso-ir-157': 'iso-8859-10', + 'l6': 'iso-8859-10', + 'iso_8859-10:1992': 'iso-8859-10', + 'csisolatin6': 'iso-8859-10', + 'latin6': 'iso-8859-10', + 'iso-8859-13': 'iso-8859-13', + 'iso-8859-14': 'iso-8859-14', + 'iso-ir-199': 'iso-8859-14', + 'iso_8859-14:1998': 'iso-8859-14', + 'iso_8859-14': 'iso-8859-14', + 'latin8': 'iso-8859-14', + 'iso-celtic': 'iso-8859-14', + 'l8': 'iso-8859-14', + 'iso-8859-15': 'iso-8859-15', + 'iso_8859-15': 'iso-8859-15', + 'latin-9': 'iso-8859-15', + 'koi8-r': 'koi8-r', + 'cskoi8r': 'koi8-r', + 'koi8-u': 'koi8-u', + 'macintosh': 'macroman', + 'mac': 'macroman', + 'csmacintosh': 'macroman', + 'ibm437': 'cp437', + 'cp437': 'cp437', + '437': 'cp437', + 'cspc8codepage437': 'cp437', + 'ibm775': 'cp775', + 'cp775': 'cp775', + 'cspc775baltic': 'cp775', + 'ibm850': 'cp850', + 'cp850': 'cp850', + '850': 'cp850', + 'cspc850multilingual': 'cp850', + 'ibm852': 'cp852', + 'cp852': 'cp852', + '852': 'cp852', + 'cspcp852': 'cp852', + 'ibm855': 'cp855', + 'cp855': 'cp855', + '855': 'cp855', + 'csibm855': 'cp855', + 'ibm857': 'cp857', + 'cp857': 'cp857', + '857': 'cp857', + 'csibm857': 'cp857', + 'ibm860': 'cp860', + 'cp860': 'cp860', + '860': 'cp860', + 'csibm860': 'cp860', + 'ibm861': 'cp861', + 'cp861': 'cp861', + '861': 'cp861', + 'cp-is': 'cp861', + 'csibm861': 'cp861', + 'ibm862': 'cp862', + 'cp862': 'cp862', + '862': 'cp862', + 'cspc862latinhebrew': 'cp862', + 'ibm863': 'cp863', + 'cp863': 'cp863', + '863': 'cp863', + 'csibm863': 'cp863', + 'ibm865': 'cp865', + 'cp865': 'cp865', + '865': 'cp865', + 'csibm865': 'cp865', + 'ibm866': 'cp866', + 'cp866': 'cp866', + '866': 'cp866', + 'csibm866': 'cp866', + 'ibm869': 'cp869', + 'cp869': 'cp869', + '869': 'cp869', + 'cp-gr': 'cp869', + 'csibm869': 'cp869', + 'windows-1250': 'cp1250', + 'windows-1251': 'cp1251', + 'windows-1253': 'cp1253', + 'windows-1254': 'cp1254', + 'windows-1255': 'cp1255', + 'windows-1256': 'cp1256', + 'windows-1257': 'cp1257', + 'windows-1258': 'cp1258', + 'extended_unix_code_packed_format_for_japanese': 'euc-jp', + 'cseucpkdfmtjapanese': 'euc-jp', + 'euc-jp': 'euc-jp', + 'shift_jis': 'sjis', + 'ms_kanji': 'sjis', + 'sjis': 'sjis', + 'csshiftjis': 'sjis', + 'ibm-thai': 'cp874', + 'csibmthai': 'cp874', + 'ks_c_5601-1987': 'cp949', + 'iso-ir-149': 'cp949', + 'ks_c_5601-1989': 'cp949', + 'ksc_5601': 'cp949', + 'korean': 'cp949', + 'csksc56011987': 'cp949', + 'euc-kr': 'euc-kr', + 'cseuckr': 'euc-kr', + 'gbk': 'cp936', + 'cp936': 'cp936', + 'ms936': 'cp936', + 'windows-936': 'cp936', + 'gb_2312-80': 'euc-cn', + 'iso-ir-58': 'euc-cn', + 'chinese': 'euc-cn', + 'csiso58gb231280': 'euc-cn', + 'big5': 'big5', + 'csbig5': 'big5', + 'utf-8': 'utf-8', + 'iso-10646-ucs-2': 'ucs-2', + 'csunicode': 'ucs-2', + 'utf-16': 'utf-16', + 'utf-16be': 'utf-16', + 'utf-16le': 'utf-16le', + 'utf-32': 'ucs-4', + 'utf-32be': 'ucs-4', + 'utf-32le': 'ucs-4le', + 'iso-10646-ucs-4': 'ucs-4', + 'csucs4': 'ucs-4' +} +#}}} + +var settings: dict + +export def Convert2HTML(line1: number, line2: number) #{{{ + settings = GetUserSettings() + + if !&diff || settings.diff_one_file #{{{ + if line2 >= line1 + g:html_start_line = line1 + g:html_end_line = line2 else - let g:html_start_line = a:line2 - let g:html_end_line = a:line1 + g:html_start_line = line2 + g:html_end_line = line1 endif - runtime syntax/2html.vim "}}} - else "{{{ - let win_list = [] - let buf_list = [] - windo if &diff | call add(win_list, winbufnr(0)) | endif - let s:settings.whole_filler = 1 - let g:html_diff_win_num = 0 + runtime syntax/2html.vim #}}} + else #{{{ + var win_list = range(1, winnr('$')) + ->filter((_, w) => getwinvar(w, '&diff')) + ->mapnew((_, w) => winbufnr(w)) + var buf_list: list + settings.whole_filler = 1 + g:html_diff_win_num = 0 for window in win_list - " switch to the next buffer to convert - exe ":" .. bufwinnr(window) .. "wincmd w" + # switch to the next buffer to convert + win_gotoid(bufwinid(window)) - " figure out whether current charset and encoding will work, if not - " default to UTF-8 + # figure out whether current charset and encoding will work, if not + # default to UTF-8 if !exists('g:html_use_encoding') && - \ (((&l:fileencoding=='' || (&l:buftype!='' && &l:buftype!=?'help')) - \ && &encoding!=?s:settings.vim_encoding) - \ || &l:fileencoding!='' && &l:fileencoding!=?s:settings.vim_encoding) + (((&l:fileencoding == '' || (&l:buftype != '' && &l:buftype !=? 'help')) + && &encoding !=? settings.vim_encoding) + || &l:fileencoding != '' && &l:fileencoding !=? settings.vim_encoding) echohl WarningMsg echomsg "TOhtml: mismatched file encodings in Diff buffers, using UTF-8" echohl None - let s:settings.vim_encoding = 'utf-8' - let s:settings.encoding = 'UTF-8' + settings.vim_encoding = 'utf-8' + settings.encoding = 'UTF-8' endif - " set up for diff-mode conversion - let g:html_start_line = 1 - let g:html_end_line = line('$') - let g:html_diff_win_num += 1 + # set up for diff-mode conversion + g:html_start_line = 1 + g:html_end_line = line('$') + g:html_diff_win_num += 1 - " convert this file + # convert this file runtime syntax/2html.vim - " remember the HTML buffer for later combination - call add(buf_list, bufnr('%')) + # remember the HTML buffer for later combination + add(buf_list, bufnr('%')) endfor unlet g:html_diff_win_num - call tohtml#Diff2HTML(win_list, buf_list) - endif "}}} - + Diff2HTML(win_list, buf_list) + endif #}}} unlet g:html_start_line unlet g:html_end_line - unlet s:settings -endfunc "}}} + settings = null_dict +enddef #}}} -func! tohtml#Diff2HTML(win_list, buf_list) "{{{ - let xml_line = "" - let tag_close = '>' +export def Diff2HTML(win_list: list, buf_list: list) #{{{ + var xml_line = '' + var tag_close = '>' - let s:old_paste = &paste + var old_paste = &paste set paste - let s:old_magic = &magic + var old_magic = &magic set magic - let html = [] - if !s:settings.no_doc - if s:settings.use_xhtml - if s:settings.encoding != "" - let xml_line = "" + var html = [] + var style: list + var body_line: string + var body_end_line: string + var body_line_num: number + var html5 = 0 + if !settings.no_doc + if settings.use_xhtml + if settings.encoding != '' + xml_line = "" else - let xml_line = "" + xml_line = "" endif - let tag_close = ' />' + tag_close = ' />' endif - let style = [s:settings.use_xhtml ? "" : '-->'] - let body_line = '' + style = [settings.use_xhtml ? '' : '-->'] - let s:html5 = 0 - if s:settings.use_xhtml - call add(html, xml_line) + if settings.use_xhtml + add(html, xml_line) endif - if s:settings.use_xhtml - call add(html, "") - call add(html, '') - elseif s:settings.use_css && !s:settings.no_pre - call add(html, "") - call add(html, '') - let s:html5 = 1 + if settings.use_xhtml + add(html, "") + add(html, '') + elseif settings.use_css && !settings.no_pre + add(html, "") + add(html, '') + html5 = 1 else - call add(html, '') - call add(html, '') + add(html, '') + add(html, '') endif - call add(html, '') + add(html, '') - " include encoding as close to the top as possible, but only if not already - " contained in XML information - if s:settings.encoding != "" && !s:settings.use_xhtml - if s:html5 - call add(html, 'diff') - call add(html, '') - let body_line_num = len(html) - call add(html, '') + add(html, 'diff') + add(html, $'') + body_line_num = len(html) + add(html, '') endif - call add(html, "") + add(html, "
") - call add(html, '') - for buf in a:win_list - call add(html, '') + add(html, '') + for buf in win_list + add(html, '') endfor - call add(html, '') + add(html, '') - let diff_style_start = 0 - let insert_index = 0 + var diff_style_start = 0 + var insert_index = 0 - for buf in a:buf_list - let temp = [] - exe bufwinnr(buf) .. 'wincmd w' + for buf in buf_list + var temp = [] + win_gotoid(bufwinid(buf)) - " If text is folded because of user foldmethod settings, etc. we don't want - " to act on everything in a fold by mistake. + # If text is folded because of user foldmethod settings, etc. we don't want + # to act on everything in a fold by mistake. setlocal nofoldenable - " When not using CSS or when using xhtml, the line can be important. - " Assume it will be the same for all buffers and grab it from the first - " buffer. Similarly, need to grab the body end line as well. - if !s:settings.no_doc + # When not using CSS or when using xhtml, the line can be important. + # Assume it will be the same for all buffers and grab it from the first + # buffer. Similarly, need to grab the body end line as well. + if !settings.no_doc if body_line == '' - 1 - call search('', 'b') - let s:body_end_line = getline('.') + :1 + search('', 'b') + body_end_line = getline('.') endif - " Grab the style information. Some of this will be duplicated so only insert - " it if it's not already there. {{{ - 1 - let style_start = search('^') - 1 - let style_end = search('^') + # Grab the style information. Some of this will be duplicated so only insert + # it if it's not already there. {{{ + :1 + var style_start = search('^') + :1 + var style_end = search('^') if style_start > 0 && style_end > 0 - let buf_styles = getline(style_start + 1, style_end - 1) + var buf_styles = getline(style_start + 1, style_end - 1) for a_style in buf_styles if index(style, a_style) == -1 if diff_style_start == 0 if a_style =~ '\\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_ - $ - ??,$d_ - elseif !s:settings.no_modeline - " remove modeline from source files if it is included and we haven't deleted - " due to removing html footer already - $d + # Delete those parts that are not needed so we can include the rest into the + # resulting table. + :1,/^\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d _ + :$ + :??,$d _ + elseif !settings.no_modeline + # remove modeline from source files if it is included and we haven't deleted + # due to removing html footer already + :$d endif - let temp = getline(1,'$') - " clean out id on the main content container because we already set it on - " the table - let temp[0] = substitute(temp[0], " id='vimCodeElement[^']*'", "", "") - " undo deletion of start and end part - " so we can later save the file as valid html - " TODO: restore using grabbed lines if undolevel is 1? - if !s:settings.no_doc + temp = getline(1, '$') + # clean out id on the main content container because we already set it on + # the table + temp[0] = substitute(temp[0], " id='vimCodeElement[^']*'", "", "") + # undo deletion of start and end part + # so we can later save the file as valid html + # TODO: restore using grabbed lines if undolevel is 1? + if !settings.no_doc normal! 2u - elseif !s:settings.no_modeline + elseif !settings.no_modeline normal! u endif - if s:settings.use_css - call add(html, '') + html += temp + add(html, '') - " Close this buffer - " TODO: the comment above says we're going to allow saving the file - " later...but here we discard it? + # Close this buffer + # TODO: the comment above says we're going to allow saving the file + # later...but here we discard it? quit! endfor - if !s:settings.no_doc - let html[body_line_num] = body_line + if !settings.no_doc + html[body_line_num] = body_line endif - call add(html, '') - call add(html, '
'..bufname(buf)..'
' .. bufname(buf) .. '
') - elseif s:settings.use_xhtml - call add(html, '
') + if settings.use_css + add(html, '
') + elseif settings.use_xhtml + add(html, '
') else - call add(html, '
') + add(html, '
') endif - let html += temp - call add(html, '
') - if !s:settings.no_doc - call add(html, s:body_end_line) - call add(html, '') + add(html, '') + add(html, '') + if !settings.no_doc + add(html, body_end_line) + add(html, '') endif - " The generated HTML is admittedly ugly and takes a LONG time to fold. - " Make sure the user doesn't do syntax folding when loading a generated file, - " using a modeline. - if !s:settings.no_modeline - call add(html, '') + # The generated HTML is admittedly ugly and takes a LONG time to fold. + # Make sure the user doesn't do syntax folding when loading a generated file, + # using a modeline. + if !settings.no_modeline + add(html, '') endif - let i = 1 - let name = "Diff" .. (s:settings.use_xhtml ? ".xhtml" : ".html") - " Find an unused file name if current file name is already in use + var i = 1 + var name = "Diff" .. (settings.use_xhtml ? ".xhtml" : ".html") + # Find an unused file name if current file name is already in use while filereadable(name) - let name = substitute(name, '\d*\.x\?html$', '', '') .. i .. '.' .. fnamemodify(copy(name), ":t:e") - let i += 1 + name = substitute(name, '\d*\.x\?html$', '', '') .. i .. '.' .. fnamemodify(copy(name), ":t:e") + i += 1 endwhile - let s:ei_sav = &eventignore + var ei_sav = &eventignore set eventignore+=FileType - exe "topleft new " .. name - let &eventignore=s:ei_sav - unlet s:ei_sav + execute "topleft new" name + &eventignore = ei_sav setlocal modifiable - " just in case some user autocmd creates content in the new buffer, make sure - " it is empty before proceeding - %d + # just in case some user autocmd creates content in the new buffer, make sure + # it is empty before proceeding + deletebufline(bufnr(), 1, '$') - " set the fileencoding to match the charset we'll be using - let &l:fileencoding=s:settings.vim_encoding + # set the fileencoding to match the charset we'll be using + &l:fileencoding = settings.vim_encoding - " According to http://www.w3.org/TR/html4/charset.html#doc-char-set, the byte - " order mark is highly recommend on the web when using multibyte encodings. But, - " it is not a good idea to include it on UTF-8 files. Otherwise, let Vim - " determine when it is actually inserted. - if s:settings.vim_encoding == 'utf-8' + # According to http://www.w3.org/TR/html4/charset.html#doc-char-set, the byte + # order mark is highly recommend on the web when using multibyte encodings. But, + # it is not a good idea to include it on UTF-8 files. Otherwise, let Vim + # determine when it is actually inserted. + if settings.vim_encoding == 'utf-8' setlocal nobomb else setlocal bomb endif - call append(0, html) + append(0, html) - if !s:settings.no_doc + if !settings.no_doc if len(style) > 0 - 1 - let style_start = search('^')-1 + :1 + var style_start = search('^') - 1 - " add required javascript in reverse order so we can just call append again - " and again without adjusting {{{ + # add required javascript in reverse order so we can just call append again + # and again without adjusting {{{ - let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids + var uses_script = settings.dynamic_folds || settings.line_ids - " insert script closing tag if needed - if s:uses_script - call append(style_start, [ - \ '', - \ s:settings.use_xhtml ? '//]]>' : '-->', - \ "" - \ ]) + # insert script closing tag if needed + if uses_script + append(style_start, [ + '', + settings.use_xhtml ? '//]]>' : '-->', + "" + ]) endif - " insert javascript to get IDs from line numbers, and to open a fold before - " jumping to any lines contained therein - if s:settings.line_ids - call append(style_start, [ - \ " /* Always jump to new location even if the line was hidden inside a fold, or", - \ " * we corrected the raw number to a line ID.", - \ " */", - \ " if (lineElem) {", - \ " lineElem.scrollIntoView(true);", - \ " }", - \ " return true;", - \ "}", - \ "if ('onhashchange' in window) {", - \ " window.onhashchange = JumpToLine;", - \ "}" - \ ]) - - if s:settings.dynamic_folds - call append(style_start, [ - \ "", - \ " /* navigate upwards in the DOM tree to open all folds containing the line */", - \ " var node = lineElem;", - \ " while (node && node.id != 'vimCodeElement"..s:settings.id_suffix.."')", - \ " {", - \ " if (node.className == 'closed-fold')", - \ " {", - \ " /* toggle open the fold ID (remove window ID) */", - \ " toggleFold(node.id.substr(4));", - \ " }", - \ " node = node.parentNode;", - \ " }", - \ ]) + # insert javascript to get IDs from line numbers, and to open a fold before + # jumping to any lines contained therein + if settings.line_ids + append(style_start, [ + " /* Always jump to new location even if the line was hidden inside a fold, or", + " * we corrected the raw number to a line ID.", + " */", + " if (lineElem) {", + " lineElem.scrollIntoView(true);", + " }", + " return true;", + "}", + "if ('onhashchange' in window) {", + " window.onhashchange = JumpToLine;", + "}" + ]) + + if settings.dynamic_folds + append(style_start, [ + "", + " /* navigate upwards in the DOM tree to open all folds containing the line */", + " var node = lineElem;", + " while (node && node.id != 'vimCodeElement" .. settings.id_suffix .. "')", + " {", + " if (node.className == 'closed-fold')", + " {", + " /* toggle open the fold ID (remove window ID) */", + " toggleFold(node.id.substr(4));", + " }", + " node = node.parentNode;", + " }", + ]) endif endif - if s:settings.line_ids - call append(style_start, [ - \ "", - \ "/* function to open any folds containing a jumped-to line before jumping to it */", - \ "function JumpToLine()", - \ "{", - \ " var lineNum;", - \ " lineNum = window.location.hash;", - \ " lineNum = lineNum.substr(1); /* strip off '#' */", - \ "", - \ " if (lineNum.indexOf('L') == -1) {", - \ " lineNum = 'L'+lineNum;", - \ " }", - \ " if (lineNum.indexOf('W') == -1) {", - \ " lineNum = 'W1'+lineNum;", - \ " }", - \ " var lineElem = document.getElementById(lineNum);" - \ ]) + if settings.line_ids + append(style_start, [ + "", + "/* function to open any folds containing a jumped-to line before jumping to it */", + "function JumpToLine()", + "{", + " var lineNum;", + " lineNum = window.location.hash;", + " lineNum = lineNum.substr(1); /* strip off '#' */", + "", + " if (lineNum.indexOf('L') == -1) {", + " lineNum = 'L'+lineNum;", + " }", + " if (lineNum.indexOf('W') == -1) {", + " lineNum = 'W1'+lineNum;", + " }", + " var lineElem = document.getElementById(lineNum);" + ]) endif - " Insert javascript to toggle matching folds open and closed in all windows, - " if dynamic folding is active. - if s:settings.dynamic_folds - call append(style_start, [ - \ " function toggleFold(objID)", - \ " {", - \ " for (win_num = 1; win_num <= "..len(a:buf_list).."; win_num++)", - \ " {", - \ " var fold;", - \ ' fold = document.getElementById("win"+win_num+objID);', - \ " if(fold.className == 'closed-fold')", - \ " {", - \ " fold.className = 'open-fold';", - \ " }", - \ " else if (fold.className == 'open-fold')", - \ " {", - \ " fold.className = 'closed-fold';", - \ " }", - \ " }", - \ " }", - \ ]) + # Insert javascript to toggle matching folds open and closed in all windows, + # if dynamic folding is active. + if settings.dynamic_folds + append(style_start, [ + " function toggleFold(objID)", + " {", + " for (win_num = 1; win_num <= " .. len(buf_list) .. "; win_num++)", + " {", + " var fold;", + ' fold = document.getElementById("win"+win_num+objID);', + " if(fold.className == 'closed-fold')", + " {", + " fold.className = 'open-fold';", + " }", + " else if (fold.className == 'open-fold')", + " {", + " fold.className = 'closed-fold';", + " }", + " }", + " }", + ]) endif - if s:uses_script - " insert script tag if needed - call append(style_start, [ - \ "", - \ s:settings.use_xhtml ? '//", + settings.use_xhtml ? '//']+ - \ style+ - \ [ s:settings.use_xhtml ? '' : '', - \ '' - \]) - endif "}}} + # Insert styles from all the generated html documents and additional styles + # for the table-based layout of the side-by-side diff. The diff should take + # up the full browser window (but not more), and be static in size, + # horizontally scrollable when the lines are too long. Otherwise, the diff + # is pretty useless for really long lines. {{{ + if settings.use_css + append(style_start, + [''] + + style + + [ settings.use_xhtml ? '' : '', + '' + ]) + endif #}}} endif endif - let &paste = s:old_paste - let &magic = s:old_magic -endfunc "}}} - -" Gets a single user option and sets it in the passed-in Dict, or gives it the -" default value if the option doesn't actually exist. -func! tohtml#GetOption(settings, option, default) "{{{ - if exists('g:html_'..a:option) - let a:settings[a:option] = g:html_{a:option} + &paste = old_paste + &magic = old_magic +enddef #}}} + +# Gets a single user option and sets it in the passed-in Dict, or gives it the +# default value if the option doesn't actually exist. +export def GetOption(_settings: dict, option: string, default: any) #{{{ + _settings[option] = get(g:, $'html_{option}', default) +enddef #}}} + +# returns a Dict containing the values of all user options for 2html, including +# default values for those not given an explicit value by the user. Discards the +# html_ prefix of the option for nicer looking code. +export def GetUserSettings(): dict #{{{ + if !empty(settings) + # just restore the known options if we've already retrieved them + return settings else - let a:settings[a:option] = a:default - endif -endfunc "}}} - -" returns a Dict containing the values of all user options for 2html, including -" default values for those not given an explicit value by the user. Discards the -" html_ prefix of the option for nicer looking code. -func! tohtml#GetUserSettings() "{{{ - if exists('s:settings') - " just restore the known options if we've already retrieved them - return s:settings - else - " otherwise figure out which options are set - let user_settings = {} + # otherwise figure out which options are set + var user_settings = {} - " Define the correct option if the old option name exists and we haven't - " already defined the correct one. + # Define the correct option if the old option name exists and we haven't + # already defined the correct one. if exists('g:use_xhtml') && !exists("g:html_use_xhtml") echohl WarningMsg echomsg "Warning: g:use_xhtml is deprecated, use g:html_use_xhtml" echohl None - let g:html_use_xhtml = g:use_xhtml + g:html_use_xhtml = g:use_xhtml endif - " get current option settings with appropriate defaults {{{ - call tohtml#GetOption(user_settings, 'no_progress', !has("statusline") ) - call tohtml#GetOption(user_settings, 'diff_one_file', 0 ) - call tohtml#GetOption(user_settings, 'number_lines', &number ) - call tohtml#GetOption(user_settings, 'pre_wrap', &wrap ) - call tohtml#GetOption(user_settings, 'use_css', 1 ) - call tohtml#GetOption(user_settings, 'ignore_conceal', 0 ) - call tohtml#GetOption(user_settings, 'ignore_folding', 0 ) - call tohtml#GetOption(user_settings, 'dynamic_folds', 0 ) - call tohtml#GetOption(user_settings, 'no_foldcolumn', user_settings.ignore_folding) - call tohtml#GetOption(user_settings, 'hover_unfold', 0 ) - call tohtml#GetOption(user_settings, 'no_pre', 0 ) - call tohtml#GetOption(user_settings, 'no_doc', 0 ) - call tohtml#GetOption(user_settings, 'no_links', 0 ) - call tohtml#GetOption(user_settings, 'no_modeline', 0 ) - call tohtml#GetOption(user_settings, 'no_invalid', 0 ) - call tohtml#GetOption(user_settings, 'whole_filler', 0 ) - call tohtml#GetOption(user_settings, 'use_xhtml', 0 ) - call tohtml#GetOption(user_settings, 'line_ids', user_settings.number_lines ) - call tohtml#GetOption(user_settings, 'use_input_for_pc', 'none') - " }}} - - " override those settings that need it {{{ - - " hover opening implies dynamic folding + # get current option settings with appropriate defaults {{{ + GetOption(user_settings, 'no_progress', !has("statusline") ) + GetOption(user_settings, 'diff_one_file', 0 ) + GetOption(user_settings, 'number_lines', &number ) + GetOption(user_settings, 'pre_wrap', &wrap ) + GetOption(user_settings, 'use_css', 1 ) + GetOption(user_settings, 'ignore_conceal', 0 ) + GetOption(user_settings, 'ignore_folding', 0 ) + GetOption(user_settings, 'dynamic_folds', 0 ) + GetOption(user_settings, 'no_foldcolumn', user_settings.ignore_folding) + GetOption(user_settings, 'hover_unfold', 0 ) + GetOption(user_settings, 'no_pre', 0 ) + GetOption(user_settings, 'no_doc', 0 ) + GetOption(user_settings, 'no_links', 0 ) + GetOption(user_settings, 'no_modeline', 0 ) + GetOption(user_settings, 'no_invalid', 0 ) + GetOption(user_settings, 'whole_filler', 0 ) + GetOption(user_settings, 'use_xhtml', 0 ) + GetOption(user_settings, 'line_ids', user_settings.number_lines ) + GetOption(user_settings, 'use_input_for_pc', 'none') + # }}} + + # override those settings that need it {{{ + + # hover opening implies dynamic folding if user_settings.hover_unfold - let user_settings.dynamic_folds = 1 + user_settings.dynamic_folds = 1 endif - " ignore folding overrides dynamic folding + # ignore folding overrides dynamic folding if user_settings.ignore_folding && user_settings.dynamic_folds - let user_settings.dynamic_folds = 0 - let user_settings.hover_unfold = 0 + user_settings.dynamic_folds = 0 + user_settings.hover_unfold = 0 endif - " dynamic folding with no foldcolumn implies hover opens + # dynamic folding with no foldcolumn implies hover opens if user_settings.dynamic_folds && user_settings.no_foldcolumn - let user_settings.hover_unfold = 1 + user_settings.hover_unfold = 1 endif - " dynamic folding implies css + # dynamic folding implies css if user_settings.dynamic_folds - let user_settings.use_css = 1 + user_settings.use_css = 1 else - let user_settings.no_foldcolumn = 1 " won't do anything but for consistency and for the test suite + user_settings.no_foldcolumn = 1 # won't do anything but for consistency and for the test suite endif - " if we're not using CSS we cannot use a pre section because tags - " aren't allowed inside a
 block
+    # if we're not using CSS we cannot use a pre section because  tags
+    # aren't allowed inside a 
 block
     if !user_settings.use_css
-      let user_settings.no_pre = 1
+      user_settings.no_pre = 1
     endif
 
-    " pre_wrap doesn't do anything if not using pre or not using CSS
+    # pre_wrap doesn't do anything if not using pre or not using CSS
     if user_settings.no_pre || !user_settings.use_css
-      let user_settings.pre_wrap = 0
+      user_settings.pre_wrap = 0
     endif
-    "}}}
+    #}}}
 
-    " set up expand_tabs option after all the overrides so we know the
-    " appropriate defaults {{{
+    # set up expand_tabs option after all the overrides so we know the
+    # appropriate defaults #{{{
     if user_settings.no_pre == 0
-      call tohtml#GetOption(user_settings,
-	    \ 'expand_tabs',
-	    \ &expandtab || &ts != 8 || &vts != '' || user_settings.number_lines ||
-	    \   (user_settings.dynamic_folds && !user_settings.no_foldcolumn))
+      GetOption(user_settings,
+	'expand_tabs',
+	&expandtab || &ts != 8 || &vts != '' || user_settings.number_lines ||
+	(user_settings.dynamic_folds && !user_settings.no_foldcolumn))
     else
-      let user_settings.expand_tabs = 1
+      user_settings.expand_tabs = 1
     endif
-    " }}}
-
-    " textual options
-    if exists("g:html_use_encoding") "{{{
-      " user specified the desired MIME charset, figure out proper
-      " 'fileencoding' from it or warn the user if we cannot
-      let user_settings.encoding = g:html_use_encoding
-      let user_settings.vim_encoding = tohtml#EncodingFromCharset(g:html_use_encoding)
+    # }}}
+
+    # textual options
+    if exists("g:html_use_encoding") #{{{
+      # user specified the desired MIME charset, figure out proper
+      # 'fileencoding' from it or warn the user if we cannot
+      user_settings.encoding = g:html_use_encoding
+      user_settings.vim_encoding = EncodingFromCharset(g:html_use_encoding)
       if user_settings.vim_encoding == ''
 	echohl WarningMsg
-	echomsg "TOhtml: file encoding for"
-	      \ g:html_use_encoding
-	      \ "unknown, please set 'fileencoding'"
+	echomsg "TOhtml: file encoding for" g:html_use_encoding "unknown, please set 'fileencoding'"
 	echohl None
       endif
     else
-      " Figure out proper MIME charset from 'fileencoding' if possible
-      if &l:fileencoding != '' 
-	" If the buffer is not a "normal" type, the 'fileencoding' value may not
-	" be trusted; since the buffer should not be written the fileencoding is
-	" not intended to be used.
-	if &l:buftype=='' || &l:buftype==?'help'
-	  let user_settings.vim_encoding = &l:fileencoding
-	  call tohtml#CharsetFromEncoding(user_settings)
+      # Figure out proper MIME charset from 'fileencoding' if possible
+      if &l:fileencoding != ''
+	# If the buffer is not a "normal" type, the 'fileencoding' value may not
+	# be trusted; since the buffer should not be written the fileencoding is
+	# not intended to be used.
+	if &l:buftype == '' || &l:buftype ==? 'help'
+	  user_settings.vim_encoding = &l:fileencoding
+	  CharsetFromEncoding(user_settings)
 	else
-	  let user_settings.encoding = '' " trigger detection using &encoding
+	  user_settings.encoding = '' # trigger detection using &encoding
 	endif
       endif
 
-      " else from 'encoding' if possible
+      # else from 'encoding' if possible
       if &l:fileencoding == '' || user_settings.encoding == ''
-	let user_settings.vim_encoding = &encoding
-	call tohtml#CharsetFromEncoding(user_settings)
+	user_settings.vim_encoding = &encoding
+	CharsetFromEncoding(user_settings)
       endif
 
-      " else default to UTF-8 and warn user
+      # else default to UTF-8 and warn user
       if user_settings.encoding == ''
-	let user_settings.vim_encoding = 'utf-8'
-	let user_settings.encoding = 'UTF-8'
+	user_settings.vim_encoding = 'utf-8'
+	user_settings.encoding = 'UTF-8'
 	echohl WarningMsg
 	echomsg "TOhtml: couldn't determine MIME charset, using UTF-8"
 	echohl None
       endif
-    endif "}}}
-
-    " Default to making nothing uncopyable, because we default to
-    " not-standards way of doing things, and also because Microsoft Word and
-    " others paste the  elements anyway.
-    "
-    " html_prevent_copy only has an effect when using CSS.
-    "
-    " All options:
-    "	  f - fold column
-    "	  n - line numbers (also within fold text)
-    "	  t - fold text
-    "	  d - diff filler
-    "	  c - concealed text (reserved future)
-    "	  l - listchars (reserved possible future)
-    "	  s - signs (reserved possible future)
-    "
-    " Normal text is always selectable.
-    let user_settings.prevent_copy = ""
+    endif #}}}
+
+    # Default to making nothing uncopyable, because we default to
+    # not-standards way of doing things, and also because Microsoft Word and
+    # others paste the  elements anyway.
+    #
+    # html_prevent_copy only has an effect when using CSS.
+    #
+    # All options:
+    #	  f - fold column
+    #	  n - line numbers (also within fold text)
+    #	  t - fold text
+    #	  d - diff filler
+    #	  c - concealed text (reserved future)
+    #	  l - listchars (reserved possible future)
+    #	  s - signs (reserved possible future)
+    #
+    # Normal text is always selectable.
+    user_settings.prevent_copy = ""
     if user_settings.use_css
       if exists("g:html_prevent_copy")
 	if user_settings.dynamic_folds && !user_settings.no_foldcolumn && g:html_prevent_copy =~# 'f'
-	  let user_settings.prevent_copy ..= 'f'
+	  user_settings.prevent_copy ..= 'f'
 	endif
 	if user_settings.number_lines && g:html_prevent_copy =~# 'n'
-	  let user_settings.prevent_copy ..= 'n'
+	  user_settings.prevent_copy ..= 'n'
 	endif
 	if &diff && g:html_prevent_copy =~# 'd'
-	  let user_settings.prevent_copy ..= 'd'
+	  user_settings.prevent_copy ..= 'd'
 	endif
 	if !user_settings.ignore_folding && g:html_prevent_copy =~# 't'
-	  let user_settings.prevent_copy ..= 't'
+	  user_settings.prevent_copy ..= 't'
 	endif
       else
-	let user_settings.prevent_copy = ""
+	user_settings.prevent_copy = ""
       endif
     endif
     if empty(user_settings.prevent_copy)
-      let user_settings.no_invalid = 0
+      user_settings.no_invalid = 0
     endif
 
-    " enforce valid values for use_input_for_pc
+    # enforce valid values for use_input_for_pc
     if user_settings.use_input_for_pc !~# 'fallback\|none\|all'
-      let user_settings.use_input_for_pc = 'none'
+      user_settings.use_input_for_pc = 'none'
       echohl WarningMsg
       echomsg '2html: "' .. g:html_use_input_for_pc .. '" is not valid for g:html_use_input_for_pc'
       echomsg '2html: defaulting to "' .. user_settings.use_input_for_pc .. '"'
@@ -885,67 +889,64 @@ func! tohtml#GetUserSettings() "{{{
     endif
 
     if exists('g:html_id_expr')
-      let user_settings.id_suffix = eval(g:html_id_expr)
+      user_settings.id_suffix = eval(g:html_id_expr)
       if user_settings.id_suffix !~ '^[-_:.A-Za-z0-9]*$'
 	echohl WarningMsg
 	echomsg '2html: g:html_id_expr evaluated to invalid string for HTML id attributes'
 	echomsg '2html: Omitting user-specified suffix'
 	echohl None
 	sleep 3
-	let user_settings.id_suffix=""
+	user_settings.id_suffix = ""
       endif
     else
-      let user_settings.id_suffix=""
+      user_settings.id_suffix = ""
     endif
 
-    " TODO: font
+    # TODO: font
 
     return user_settings
   endif
-endfunc "}}}
+enddef #}}}
 
-" get the proper HTML charset name from a Vim encoding option.
-function! tohtml#CharsetFromEncoding(settings) "{{{
-  let l:vim_encoding = a:settings.vim_encoding
-  if exists('g:html_charset_override') && has_key(g:html_charset_override, l:vim_encoding)
-    let a:settings.encoding = g:html_charset_override[l:vim_encoding]
+# get the proper HTML charset name from a Vim encoding option.
+export def CharsetFromEncoding(_settings: dict) #{{{
+  var vim_encoding = _settings.vim_encoding
+  if exists('g:html_charset_override') && has_key(g:html_charset_override, vim_encoding)
+    _settings.encoding = g:html_charset_override[vim_encoding]
   else
-    if l:vim_encoding =~ '^8bit\|^2byte'
-      " 8bit- and 2byte- prefixes are to indicate encodings available on the
-      " system that Vim will convert with iconv(), look up just the encoding name,
-      " not Vim's prefix.
-      let l:vim_encoding = substitute(l:vim_encoding, '^8bit-\|^2byte-', '', '')
+    if vim_encoding =~ '^8bit\|^2byte'
+      # 8bit- and 2byte- prefixes are to indicate encodings available on the
+      # system that Vim will convert with iconv(), look up just the encoding name,
+      # not Vim's prefix.
+      vim_encoding = substitute(vim_encoding, '^8bit-\|^2byte-', '', '')
     endif
-    if has_key(g:tohtml#encoding_to_charset, l:vim_encoding)
-      let a:settings.encoding = g:tohtml#encoding_to_charset[l:vim_encoding]
+    if has_key(encoding_to_charset, vim_encoding)
+      _settings.encoding = encoding_to_charset[vim_encoding]
     else
-      let a:settings.encoding = ""
+      _settings.encoding = ""
     endif
   endif
-  if a:settings.encoding != ""
-    let l:vim_encoding = tohtml#EncodingFromCharset(a:settings.encoding)
-    if l:vim_encoding != ""
-      " if the Vim encoding to HTML encoding conversion is set up (by default or
-      " by the user) to convert to a different encoding, we need to also change
-      " the Vim encoding of the new buffer
-      let a:settings.vim_encoding = l:vim_encoding
+  if _settings.encoding != ""
+    var vim_encoding2 = EncodingFromCharset(_settings.encoding)
+    if vim_encoding2 != ""
+      # if the Vim encoding to HTML encoding conversion is set up (by default or
+      # by the user) to convert to a different encoding, we need to also change
+      # the Vim encoding of the new buffer
+      _settings.vim_encoding = vim_encoding2
     endif
   endif
-endfun "}}}
-
-" Get the proper Vim encoding option setting from an HTML charset name.
-function! tohtml#EncodingFromCharset(encoding) "{{{
-  if exists('g:html_encoding_override') && has_key(g:html_encoding_override, a:encoding)
-    return g:html_encoding_override[a:encoding]
-  elseif has_key(g:tohtml#charset_to_encoding, tolower(a:encoding))
-    return g:tohtml#charset_to_encoding[tolower(a:encoding)]
+enddef #}}}
+
+# Get the proper Vim encoding option setting from an HTML charset name.
+export def EncodingFromCharset(encoding: string): string #{{{
+  if exists('g:html_encoding_override') && has_key(g:html_encoding_override, encoding)
+    return g:html_encoding_override[encoding]
+  elseif has_key(charset_to_encoding, tolower(encoding))
+    return charset_to_encoding[tolower(encoding)]
   else
     return ""
   endif
-endfun "}}}
-
-let &cpo = s:cpo_sav
-unlet s:cpo_sav
+enddef #}}}
 
-" Make sure any patches will probably use consistent indent
-"   vim: ts=8 sw=2 sts=2 noet fdm=marker
+# Make sure any patches will probably use consistent indent
+#   vim: ts=8 sw=2 sts=2 noet fdm=marker
diff --git a/runtime/autoload/tutor.vim b/runtime/autoload/tutor.vim
index c3b5df37d9..a31f74680a 100644
--- a/runtime/autoload/tutor.vim
+++ b/runtime/autoload/tutor.vim
@@ -211,7 +211,7 @@ function! tutor#TutorCmd(tutor_name)
     endif
 
     call tutor#SetupVim()
-    exe "drop ".l:to_open
+    exe "drop ".fnameescape(l:to_open)
     call tutor#EnableInteractive(v:true)
 endfunction
 
diff --git a/runtime/autoload/typeset.vim b/runtime/autoload/typeset.vim
index a1a809221c..0cb6149f5b 100644
--- a/runtime/autoload/typeset.vim
+++ b/runtime/autoload/typeset.vim
@@ -2,7 +2,7 @@ vim9script
 
 # Language:           Generic TeX typesetting engine
 # Maintainer:         Nicola Vitacolonna 
-# Latest Revision:    2022 Aug 12
+# Latest Revision:    2026 May 20
 
 # Constants and helpers {{{
 const SLASH = !exists("+shellslash") || &shellslash ? '/' : '\'
@@ -11,25 +11,25 @@ def Echo(msg: string, mode: string, label: string)
   redraw
   echo "\r"
   execute 'echohl' mode
-  echomsg printf('[%s] %s', label, msg)
+  echomsg $'[{label}] {msg}'
   echohl None
 enddef
 
-def EchoMsg(msg: string, label = 'Notice')
+def EchoMsg(msg: string, label = gettext('Notice'))
   Echo(msg, 'ModeMsg', label)
 enddef
 
-def EchoWarn(msg: string, label = 'Warning')
+def EchoWarn(msg: string, label = gettext('Warning'))
   Echo(msg, 'WarningMsg', label)
 enddef
 
-def EchoErr(msg: string, label = 'Error')
+def EchoErr(msg: string, label = gettext('Error'))
   Echo(msg, 'ErrorMsg', label)
 enddef
 # }}}
 
 # Track jobs {{{
-var running_jobs = {} # Dictionary of job IDs of jobs currently executing
+var running_jobs: dict> = {}
 
 def AddJob(label: string, j: job)
   if !has_key(running_jobs, label)
@@ -54,13 +54,13 @@ enddef
 def ProcessOutput(qfid: number, wd: string, efm: string, ch: channel, msg: string)
   # Make sure the quickfix list still exists
   if getqflist({'id': qfid}).id != qfid
-    EchoErr("Quickfix list not found, stopping the job")
-    call job_stop(ch_getjob(ch))
+    EchoErr(gettext("Quickfix list not found, stopping the job"))
+    job_stop(ch_getjob(ch))
     return
   endif
 
   # Make sure the working directory is correct
-  silent execute "lcd" wd
+  silent execute "lcd" fnameescape(wd)
   setqflist([], 'a', {'id': qfid, 'lines': [msg], 'efm': efm})
   silent lcd -
 enddef
@@ -74,13 +74,13 @@ def ExitCb(label: string, jobid: job, exitStatus: number)
 
   if exitStatus == 0
     botright cwindow
-    EchoMsg('Success!', label)
+    EchoMsg(gettext('Success!'), label)
   elseif exitStatus < 0
-    EchoWarn('Job terminated', label)
+    EchoWarn(gettext('Job terminated'), label)
   else
     botright copen
     wincmd p
-    EchoWarn('There are errors.', label)
+    EchoWarn(gettext('There are errors.'), label)
   endif
 enddef
 # }}}
@@ -106,31 +106,81 @@ enddef
 #
 # This function searches for the magic line in the first ten lines of the
 # given buffer, and returns the full path of the root document.
-#
-# NOTE: the value of "% !TEX root" *must* be a relative path.
 export def FindRootDocument(bufname: string = bufname("%")): string
-  const bufnr = bufnr(bufname)
+  var docpath = fnamemodify(bufname, ":p")
+  var bufnr = bufnr(bufname)
+  var header: list
+  var rootpath = docpath
+
+  if bufexists(bufnr)
+    header = getbufline(bufnr, 1, 10)
+  elseif filereadable(bufname)
+    header = readfile(bufname, "", 10)
+  else
+    return simplify(rootpath)
+  endif
+
+  # Search for magic line `% !TEX root = ...` in the first ten lines
+  var idx = match(header, '^\s*%\s\+!TEX\s\+root\s*=\s*\S')
 
-  if !bufexists(bufnr)
-    return bufname
+  if idx > -1
+    rootpath = matchstr(header[idx], '!TEX\s\+root\s*=\s*\zs.*$')
+
+    if !isabsolutepath(rootpath) # Path is relative to the buffer's path
+      rootpath = fnamemodify(docpath, ":h") .. SLASH .. rootpath
+    endif
   endif
 
-  var rootpath = fnamemodify(bufname(bufnr), ':p')
+  return simplify(rootpath)
+enddef
+
+# ConTeXt documents may specify an output directory in a comment using the
+# following syntax:
+#
+# runpath=texruns:
+#
+# This function looks for such a comment in the first ten lines of the given
+# buffer, and returns the full path of the output directory. If the comment is
+# not found then the output directory coincides with the directory of the
+# buffer.
+export def GetOutputDirectory(bufname: string = bufname("%")): string
+  var basedir = fnamemodify(bufname, ':p:h')
+  var bufnr = bufnr(bufname)
+  var header: list
+  var outdir = basedir
+
+  if bufexists(bufnr)
+    header = getbufline(bufnr, 1, 10)
+  elseif filereadable(bufname)
+    header = readfile(bufname, "", 10)
+  else
+    return simplify(outdir)
+  endif
+
+  # Search for output path in the first ten lines
+  var idx = match(header, '^\s*%.*\ -1
-    const main = matchstr(header[idx], '!TEX\s\+root\s*=\s*\zs.*$')
-    rootpath = simplify(fnamemodify(rootpath, ":h") .. SLASH .. main)
+    outdir = matchstr(header[idx], '\,
-  path:  string,
-  efm:   string,
-  env:   dict = {}
-): bool
-  var fp   = fnamemodify(path, ":p")
-  var wd   = fnamemodify(fp, ":h")
+    label: string,
+    Cmd:   func(string): list,
+    path:  string,
+    efm:   string,
+    env:   dict = {}
+    ): bool
+  var fp   = fnamemodify(path, ':p')
+  var name = fnamemodify(fp, ':t')
+  var wd   = fnamemodify(fp, ':h')
   var qfid = NewQuickfixList(fp)
 
   if qfid == -1
-    EchoErr('Could not create quickfix list', label)
+    EchoErr(gettext('Could not create quickfix list'), label)
     return false
   endif
 
   if !filereadable(fp)
-    EchoErr(printf('File not readable: %s', fp), label)
+    var msg = gettext('File not readable:')
+    EchoErr($'{msg} {fp}', label)
     return false
   endif
 
-  var jobid = job_start(Cmd(path), {
+  # Make sure to pass only the base name of the path to Cmd as this usually
+  # works better with TeX commands (note that the command is executed inside
+  # the file's directory). For instance, ConTeXt writes the path in .synctex
+  # files, and full paths break syncing from the editor to the viewer.
+  var jobid = job_start(Cmd(name), {
     env: env,
     cwd: wd,
     in_io: "null",
     callback: (c, m) => ProcessOutput(qfid, wd, efm, c, m),
     close_cb: CloseCb,
     exit_cb: (j, e) => ExitCb(label, j, e),
-    })
+  })
 
   if job_status(jobid) ==# "fail"
-    EchoErr("Failed to start job", label)
+    EchoErr(gettext("Failed to start job"), label)
     return false
   endif
 
   AddJob(label, jobid)
 
-  EchoMsg('Typesetting...', label)
+  EchoMsg(gettext('Typesetting...'), label)
 
   return true
 enddef
 
 export def JobStatus(label: string)
-  EchoMsg('Jobs still running: ' .. string(len(GetRunningJobs(label))), label)
+  var msg = gettext('Jobs still running:')
+  EchoMsg($'{msg} {len(GetRunningJobs(label))}', label)
 enddef
 
 export def StopJobs(label: string)
@@ -196,7 +253,7 @@ export def StopJobs(label: string)
     job_stop(job)
   endfor
 
-  EchoMsg('Done.', label)
+  EchoMsg(gettext('Done.'), label)
 enddef
 
 # Typeset the specified buffer
@@ -211,20 +268,20 @@ enddef
 #   true if the job is started successfully;
 #   false otherwise.
 export def TypesetBuffer(
-  name: string,
-  Cmd: func(string): list,
-  env = {},
-  label = 'Typeset'
-): bool
-  const bufname = bufname(name)
+    name: string,
+    Cmd: func(string): list,
+    env = {},
+    label = gettext('Typeset')
+    ): bool
+  var bufname = bufname(name)
 
   if empty(bufname)
-    EchoErr('Please save the buffer first.', label)
+    EchoErr(gettext('Please save the buffer first.'), label)
     return false
   endif
 
-  const efm = getbufvar(bufnr(bufname), "&efm")
-  const rootpath = FindRootDocument(bufname)
+  var efm = getbufvar(bufnr(bufname), "&efm")
+  var rootpath = FindRootDocument(bufname)
 
   return Typeset('ConTeXt', Cmd, rootpath, efm, env)
 enddef
diff --git a/runtime/autoload/vimball.vim b/runtime/autoload/vimball.vim
index 6456984411..352e94d02d 100644
--- a/runtime/autoload/vimball.vim
+++ b/runtime/autoload/vimball.vim
@@ -1,11 +1,9 @@
 " vimball.vim : construct a file containing both paths and files
 " Maintainer: This runtime file is looking for a new maintainer.
 " Original Author:	Charles E. Campbell
-" Date:			Apr 11, 2016
+" Date:			May 20, 2026
 " Version:	37 (with modifications from the Vim Project)
 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
-"  Last Change:
-"   2025 Feb 28 by Vim Project: add support for bzip3 (#16755)
 " Copyright: (c) 2004-2011 by Charles E. Campbell
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 "            (see |copyright|) except use "Vimball" instead of "Vim".
@@ -18,15 +16,14 @@ if &cp || exists("g:loaded_vimball")
  finish
 endif
 let g:loaded_vimball = "v37"
-if v:version < 702
+if v:version < 704
  echohl WarningMsg
- echo "***warning*** this version of vimball needs vim 7.2"
+ echo "***warning*** this version of vimball needs vim 7.4"
  echohl Normal
  finish
 endif
 let s:keepcpo= &cpo
 set cpo&vim
-"DechoTabOn
 
 " =====================================================================
 " Constants: {{{1
@@ -47,20 +44,6 @@ if !exists("s:USAGE")
    let g:netrw_cygwin= 0
   endif
  endif
-
- " set up g:vimball_mkdir if the mkdir() call isn't defined
- if !exists("*mkdir")
-  if exists("g:netrw_local_mkdir")
-   let g:vimball_mkdir= g:netrw_local_mkdir
-  elseif executable("mkdir")
-   let g:vimball_mkdir= "mkdir"
-  elseif executable("makedir")
-   let g:vimball_mkdir= "makedir"
-  endif
-  if !exists(g:vimball_mkdir)
-   call vimball#ShowMesg(s:WARNING,"(vimball) g:vimball_mkdir undefined")
-  endif
- endif
 endif
 
 " =====================================================================
@@ -81,7 +64,6 @@ endif
 "     filesize
 "     [file]
 fun! vimball#MkVimball(line1,line2,writelevel,...) range
-"  call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:1.">) a:0=".a:0)
   if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
    let vbname= substitute(a:1,'\.\a\{3}$','.vmb','')
   else
@@ -90,15 +72,12 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
   if vbname !~ '\.vmb$'
    let vbname= vbname.'.vmb'
   endif
-"  call Decho("vbname<".vbname.">")
   if !a:writelevel && a:1 =~ '[\/]'
    call vimball#ShowMesg(s:ERROR,"(MkVimball) vimball name<".a:1."> should not include slashes; use ! to insist")
-"   call Dret("MkVimball : vimball name<".a:1."> should not include slashes")
    return
   endif
   if !a:writelevel && filereadable(vbname)
    call vimball#ShowMesg(s:ERROR,"(MkVimball) file<".vbname."> exists; use ! to insist")
-"   call Dret("MkVimball : file<".vbname."> already exists; use ! to insist")
    return
   endif
 
@@ -120,20 +99,17 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
   " record current tab, initialize while loop index
   let curtabnr = tabpagenr()
   let linenr   = a:line1
-"  call Decho("curtabnr=".curtabnr)
 
   while linenr <= a:line2
    let svfile  = getline(linenr)
-"   call Decho("svfile<".svfile.">")
- 
+
    if !filereadable(svfile)
     call vimball#ShowMesg(s:ERROR,"unable to read file<".svfile.">")
-	call s:ChgDir(curdir)
-	call vimball#RestoreSettings()
-"    call Dret("MkVimball")
+    call s:ChgDir(curdir)
+    call vimball#RestoreSettings()
     return
    endif
- 
+
    " create/switch to mkvimball tab
    if !exists("vbtabnr")
     tabnew
@@ -142,23 +118,21 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
    else
     exe "tabn ".vbtabnr
    endif
- 
+
    let lastline= line("$") + 1
    if lastline == 2 && getline("$") == ""
-	call setline(1,'" Vimball Archiver by Charles E. Campbell')
-	call setline(2,'UseVimball')
-	call setline(3,'finish')
-	let lastline= line("$") + 1
+    call setline(1,'" Vimball Archiver by Charles E. Campbell')
+    call setline(2,'UseVimball')
+    call setline(3,'finish')
+    let lastline= line("$") + 1
    endif
    call setline(lastline  ,substitute(svfile,'$','	[[[1',''))
    call setline(lastline+1,0)
 
    " write the file from the tab
-"   call Decho("exe $r ".fnameescape(svfile))
    exe "$r ".fnameescape(svfile)
 
    call setline(lastline+1,line("$") - lastline - 1)
-"   call Decho("lastline=".lastline." line$=".line("$"))
 
   " restore to normal tab
    exe "tabn ".curtabnr
@@ -170,13 +144,10 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
   call s:ChgDir(curdir)
   setlocal ff=unix
   if a:writelevel
-"   call Decho("exe w! ".fnameescape(vbname))
    exe "w! ".fnameescape(vbname)
   else
-"   call Decho("exe w ".fnameescape(vbname))
    exe "w ".fnameescape(vbname)
   endif
-"  call Decho("Vimball<".vbname."> created")
   echo "Vimball<".vbname."> created"
 
   " remove the evidence
@@ -187,25 +158,16 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
   " restore options
   call vimball#RestoreSettings()
 
-"  call Dret("MkVimball")
 endfun
 
 " ---------------------------------------------------------------------
 " vimball#Vimball: extract and distribute contents from a vimball {{{2
-"                  (invoked the the UseVimball command embedded in 
+"                  (invoked the the UseVimball command embedded in
 "                  vimballs' prologue)
 fun! vimball#Vimball(really,...)
-"  call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0)
-
-  if v:version < 701 || (v:version == 701 && !exists('*fnameescape'))
-   echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)"
-"   call Dret("vimball#Vimball : needs 7.1 with patch 299 or later")
-   return
-  endif
 
   if getline(1) !~ '^" Vimball Archiver'
    echoerr "(Vimball) The current file does not appear to be a Vimball!"
-"   call Dret("vimball#Vimball")
    return
   endif
 
@@ -215,7 +177,6 @@ fun! vimball#Vimball(really,...)
   let vimballfile = expand("%:tr")
 
   " set up vimball tab
-"  call Decho("setting up vimball tab")
   tabnew
   sil! file Vimball
   let vbtabnr= tabpagenr()
@@ -227,21 +188,18 @@ fun! vimball#Vimball(really,...)
    " If, however, the user did not specify a full path, set the home to be below the current directory
    let home= expand(a:1)
    if has("win32") || has("win95") || has("win64") || has("win16")
-	if home !~ '^\a:[/\\]'
-	 let home= getcwd().'/'.a:1
-	endif
+    if home !~ '^\a:[/\\]'
+      let home= getcwd().'/'.a:1
+    endif
    elseif home !~ '^/'
-	let home= getcwd().'/'.a:1
+    let home= getcwd().'/'.a:1
    endif
   else
    let home= vimball#VimballHome()
   endif
-"  call Decho("home<".home.">")
 
   " save current directory and remove older same-named vimball, if any
   let curdir = getcwd()
-"  call Decho("home<".home.">")
-"  call Decho("curdir<".curdir.">")
 
   call s:ChgDir(home)
   let s:ok_unablefind= 1
@@ -254,62 +212,67 @@ fun! vimball#Vimball(really,...)
   " give title to listing of (extracted) files from Vimball Archive
   if a:really
    echohl Title     | echomsg "Vimball Archive"         | echohl None
-  else             
+  else
    echohl Title     | echomsg "Vimball Archive Listing" | echohl None
    echohl Statement | echomsg "files would be placed under: ".home | echohl None
   endif
 
   " apportion vimball contents to various files
-"  call Decho("exe tabn ".curtabnr)
   exe "tabn ".curtabnr
-"  call Decho("linenr=".linenr." line$=".line("$"))
   while 1 < linenr && linenr < line("$")
    let fname   = substitute(getline(linenr),'\t\[\[\[1$','','')
    let fname   = substitute(fname,'\\','/','g')
+   let fname   = resolve(simplify(fname))
    let fsize   = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
    let fenc    = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
    let filecnt = filecnt + 1
-"   call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
+   " Do not allow a leading /, .. anywhere, or a Windows drive letter
+   " (e.g. C:/foo) in the file name.  Backslashes were already converted
+   " to forward slashes above, so this also catches \\server\share UNC
+   " paths via the leading-slash check.
+   if fname =~ '\.\.' || fname =~ '^/' || fname =~ '^\a:'
+     echomsg "(Vimball) Path Traversal Attack detected, aborting..."
+     exe "tabn ".curtabnr
+     bw! Vimball
+     call s:ChgDir(curdir)
+     return
+   " Also, disallow strange paths, that could lead to code execution from
+   " .VimballRecord
+   " Disallow: pipe, quotes and closing paren
+   elseif fname =~ '[|'')"]'
+     echomsg printf("(Vimball) Forbidding strange filename: '%s', aborting...", fname)
+     exe "tabn ".curtabnr
+     bw! Vimball
+     call s:ChgDir(curdir)
+     return
+   endif
 
    if a:really
     echomsg "extracted <".fname.">: ".fsize." lines"
    else
     echomsg "would extract <".fname.">: ".fsize." lines"
    endif
-"   call Decho("using L#".linenr.": will extract file<".fname.">")
-"   call Decho("using L#".(linenr+1).": fsize=".fsize)
 
    " Allow AsNeeded/ directory to take place of plugin/ directory
    " when AsNeeded/filename is filereadable or was present in VimballRecord
    if fname =~ '\ instead of <".fname.">")
-	 let fname= anfname
-	endif
+     let anfname= substitute(fname,'\)")
     let fnamebuf= substitute(fname,'\\','/','g')
-	let dirpath = substitute(home,'\\','/','g')
-"	call Decho("init: fnamebuf<".fnamebuf.">")
-"	call Decho("init: dirpath <".dirpath.">")
+    let dirpath = substitute(home,'\\','/','g')
     while fnamebuf =~ '/'
      let dirname  = dirpath."/".substitute(fnamebuf,'/.*$','','')
-	 let dirpath  = dirname
+     let dirpath  = dirname
      let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
-"	 call Decho("dirname<".dirname.">")
-"	 call Decho("dirpath<".dirpath.">")
      if !isdirectory(dirname)
-"      call Decho("making <".dirname.">")
-      if exists("g:vimball_mkdir")
-	   call system(g:vimball_mkdir." ".shellescape(dirname))
-      else
-       call mkdir(dirname)
-      endif
-	  call s:RecordInVar(home,"rmdir('".dirname."')")
+      call mkdir(dirname)
+      call s:RecordInVar(home,"rmdir('".dirname."')")
      endif
     endwhile
    endif
@@ -319,13 +282,11 @@ fun! vimball#Vimball(really,...)
    " (skip over path/filename and qty-lines)
    let linenr   = linenr + 2
    let lastline = linenr + fsize - 1
-"   call Decho("exe ".linenr.",".lastline."yank a")
    " no point in handling a zero-length file
    if lastline >= linenr
     exe "silent ".linenr.",".lastline."yank a"
 
     " copy "a" buffer into tab
-"   call Decho('copy "a buffer into tab#'.vbtabnr)
     exe "tabn ".vbtabnr
     setlocal ma
     sil! %d
@@ -336,38 +297,31 @@ fun! vimball#Vimball(really,...)
     " write tab to file
     if a:really
      let fnamepath= home."/".fname
-"    call Decho("exe w! ".fnameescape(fnamepath))
-	if fenc != ""
-	 exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
-	else
-	 exe "silent w! ".fnameescape(fnamepath)
-	endif
-	echo "wrote ".fnameescape(fnamepath)
-	call s:RecordInVar(home,"call delete('".fnamepath."')")
+    if fenc != ""
+      exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
+    else
+      exe "silent w! ".fnameescape(fnamepath)
+    endif
+    echo "wrote ".fnameescape(fnamepath)
+    call s:RecordInVar(home,"call delete('".escape(fnamepath, '"''|')."')")
     endif
 
     " return to tab with vimball
-"   call Decho("exe tabn ".curtabnr)
     exe "tabn ".curtabnr
 
     " set up help if it's a doc/*.txt file
-"   call Decho("didhelp<".didhelp."> fname<".fname.">")
     if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
-    	let didhelp= substitute(fname,'^\(.*\")
+      let didhelp= substitute(fname,'^\(.*\")
   if didhelp != ""
    let htpath= home."/".didhelp
-"   call Decho("exe helptags ".htpath)
    exe "helptags ".fnameescape(htpath)
    echo "did helptags"
   endif
@@ -388,8 +342,6 @@ fun! vimball#Vimball(really,...)
   exe "sil! tabc! ".vbtabnr
   call vimball#RestoreSettings()
   call s:ChgDir(curdir)
-
-"  call Dret("vimball#Vimball")
 endfun
 
 " ---------------------------------------------------------------------
@@ -399,23 +351,18 @@ endfun
 "  Usage:  RmVimball  (assume current file is a vimball; remove)
 "          RmVimball vimballname
 fun! vimball#RmVimball(...)
-"  call Dfunc("vimball#RmVimball() a:0=".a:0)
   if exists("g:vimball_norecord")
-"   call Dret("vimball#RmVimball : (g:vimball_norecord)")
    return
   endif
 
   if a:0 == 0
    let curfile= expand("%:tr")
-"   call Decho("case a:0=0: curfile<".curfile."> (used expand(%:tr))")
   else
    if a:1 =~ '[\/]'
     call vimball#ShowMesg(s:USAGE,"RmVimball vimballname [path]")
-"    call Dret("vimball#RmVimball : suspect a:1<".a:1.">")
     return
    endif
    let curfile= a:1
-"   call Decho("case a:0=".a:0.": curfile<".curfile.">")
   endif
   if curfile =~ '\.vmb$'
    let curfile= substitute(curfile,'\.vmb','','')
@@ -428,75 +375,60 @@ fun! vimball#RmVimball(...)
    let home= vimball#VimballHome()
   endif
   let curdir = getcwd()
-"  call Decho("home   <".home.">")
-"  call Decho("curfile<".curfile.">")
-"  call Decho("curdir <".curdir.">")
 
   call s:ChgDir(home)
   if filereadable(".VimballRecord")
-"   call Decho(".VimballRecord is readable")
-"   call Decho("curfile<".curfile.">")
-   keepalt keepjumps 1split 
+   keepalt keepjumps 1split
    sil! keepalt keepjumps e .VimballRecord
    let keepsrch= @/
-"   call Decho('search for ^\M'.curfile.'.\m: ')
-"   call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
-"   call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
    if search('^\M'.curfile."\m: ".'cw')
-	let foundit= 1
+    let foundit= 1
    elseif search('^\M'.curfile.".\mvmb: ",'cw')
-	let foundit= 2
+    let foundit= 2
    elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
-	let foundit= 2
+    let foundit= 2
    elseif search('^\M'.curfile.".\mvba: ",'cw')
-	let foundit= 1
+    let foundit= 1
    elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
-	let foundit= 1
+    let foundit= 1
    else
     let foundit = 0
    endif
    if foundit
-	if foundit == 1
-	 let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
-	else
-	 let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
-	endif
+    if foundit == 1
+     let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
+    else
+     let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
+    endif
     let s:VBRstring= substitute(exestring,'call delete(','','g')
     let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
-"	call Decho("exe ".exestring)
-	sil! keepalt keepjumps exe exestring
-	sil! keepalt keepjumps d
-	let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
-"	call Decho("exestring<".exestring.">")
-	echomsg "removed ".exestring." files"
+    sil! keepalt keepjumps exe exestring
+    sil! keepalt keepjumps d
+    let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
+    echomsg "removed ".exestring." files"
    else
     let s:VBRstring= ''
-	let curfile    = substitute(curfile,'\.vmb','','')
-"    call Decho("unable to find <".curfile."> in .VimballRecord")
-	if !exists("s:ok_unablefind")
+    let curfile    = substitute(curfile,'\.vmb','','')
+    if !exists("s:ok_unablefind")
      call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
-	endif
+    endif
    endif
    sil! keepalt keepjumps g/^\s*$/d
    sil! keepalt keepjumps wq!
    let @/= keepsrch
   endif
   call s:ChgDir(curdir)
-
-"  call Dret("vimball#RmVimball")
 endfun
 
 " ---------------------------------------------------------------------
 " vimball#Decompress: attempts to automatically decompress vimballs {{{2
 fun! vimball#Decompress(fname,...)
-"  call Dfunc("Decompress(fname<".a:fname.">) a:0=".a:0)
-
   " decompression:
   if     expand("%") =~ '.*\.gz'  && executable("gunzip")
    " handle *.gz with gunzip
-   silent exe "!gunzip ".shellescape(a:fname)
+   silent exe "!gunzip ".shellescape(a:fname,1)
    if v:shell_error != 0
-	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
+    call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
    endif
    let fname= substitute(a:fname,'\.gz$','','')
    exe "e ".escape(fname,' \')
@@ -504,9 +436,9 @@ fun! vimball#Decompress(fname,...)
 
   elseif expand("%") =~ '.*\.gz' && executable("gzip")
    " handle *.gz with gzip -d
-   silent exe "!gzip -d ".shellescape(a:fname)
+   silent exe "!gzip -d ".shellescape(a:fname,1)
    if v:shell_error != 0
-	call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
+    call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
    endif
    let fname= substitute(a:fname,'\.gz$','','')
    exe "e ".escape(fname,' \')
@@ -514,9 +446,9 @@ fun! vimball#Decompress(fname,...)
 
   elseif expand("%") =~ '.*\.bz2' && executable("bunzip2")
    " handle *.bz2 with bunzip2
-   silent exe "!bunzip2 ".shellescape(a:fname)
+   silent exe "!bunzip2 ".shellescape(a:fname,1)
    if v:shell_error != 0
-	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
+    call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
    endif
    let fname= substitute(a:fname,'\.bz2$','','')
    exe "e ".escape(fname,' \')
@@ -524,9 +456,9 @@ fun! vimball#Decompress(fname,...)
 
   elseif expand("%") =~ '.*\.bz2' && executable("bzip2")
    " handle *.bz2 with bzip2 -d
-   silent exe "!bzip2 -d ".shellescape(a:fname)
+   silent exe "!bzip2 -d ".shellescape(a:fname,1)
    if v:shell_error != 0
-	call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
+    call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
    endif
    let fname= substitute(a:fname,'\.bz2$','','')
    exe "e ".escape(fname,' \')
@@ -534,9 +466,9 @@ fun! vimball#Decompress(fname,...)
 
   elseif expand("%") =~ '.*\.bz3' && executable("bunzip3")
    " handle *.bz3 with bunzip3
-   silent exe "!bunzip3 ".shellescape(a:fname)
+   silent exe "!bunzip3 ".shellescape(a:fname,1)
    if v:shell_error != 0
-	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip3 may have failed with <".a:fname.">")
+    call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip3 may have failed with <".a:fname.">")
    endif
    let fname= substitute(a:fname,'\.bz3$','','')
    exe "e ".escape(fname,' \')
@@ -544,9 +476,9 @@ fun! vimball#Decompress(fname,...)
 
   elseif expand("%") =~ '.*\.bz3' && executable("bzip3")
    " handle *.bz3 with bzip3 -d
-   silent exe "!bzip3 -d ".shellescape(a:fname)
+   silent exe "!bzip3 -d ".shellescape(a:fname,1)
    if v:shell_error != 0
-	call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip3 -d" may have failed with <'.a:fname.">")
+    call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip3 -d" may have failed with <'.a:fname.">")
    endif
    let fname= substitute(a:fname,'\.bz3$','','')
    exe "e ".escape(fname,' \')
@@ -554,9 +486,9 @@ fun! vimball#Decompress(fname,...)
 
   elseif expand("%") =~ '.*\.zip' && executable("unzip")
    " handle *.zip with unzip
-   silent exe "!unzip ".shellescape(a:fname)
+   silent exe "!unzip ".shellescape(a:fname,1)
    if v:shell_error != 0
-	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
+    call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
    endif
    let fname= substitute(a:fname,'\.zip$','','')
    exe "e ".escape(fname,' \')
@@ -564,14 +496,11 @@ fun! vimball#Decompress(fname,...)
   endif
 
   if a:0 == 0| setlocal noma bt=nofile fmr=[[[,]]] fdm=marker | endif
-
-"  call Dret("Decompress")
 endfun
 
 " ---------------------------------------------------------------------
 " vimball#ShowMesg: {{{2
 fun! vimball#ShowMesg(level,msg)
-"  call Dfunc("vimball#ShowMesg(level=".a:level." msg<".a:msg.">)")
 
   let rulerkeep   = &ruler
   let showcmdkeep = &showcmd
@@ -596,13 +525,10 @@ fun! vimball#ShowMesg(level,msg)
 
   let &ruler   = rulerkeep
   let &showcmd = showcmdkeep
-
-"  call Dret("vimball#ShowMesg")
 endfun
 " =====================================================================
 " s:ChgDir: change directory (in spite of Windoze) {{{2
 fun! s:ChgDir(newdir)
-"  call Dfunc("ChgDir(newdir<".a:newdir.">)")
   if (has("win32") || has("win95") || has("win64") || has("win16"))
    try
     exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
@@ -618,58 +544,44 @@ fun! s:ChgDir(newdir)
     exe 'silent cd '.fnameescape(a:newdir)
    endtry
   endif
-"  call Dret("ChgDir : curdir<".getcwd().">")
 endfun
 
 " ---------------------------------------------------------------------
 " s:RecordInVar: record a un-vimball command in the .VimballRecord file {{{2
 fun! s:RecordInVar(home,cmd)
-"  call Dfunc("RecordInVar(home<".a:home."> cmd<".a:cmd.">)")
-  if a:cmd =~ '^rmdir'
-"   if !exists("s:recorddir")
-"    let s:recorddir= substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
-"   else
-"    let s:recorddir= s:recorddir."|".substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
-"   endif
-  elseif !exists("s:recordfile")
+  if !exists("s:recordfile")
    let s:recordfile= a:cmd
   else
    let s:recordfile= s:recordfile."|".a:cmd
   endif
-"  call Dret("RecordInVar : s:recordfile<".(exists("s:recordfile")? s:recordfile : "")."> s:recorddir<".(exists("s:recorddir")? s:recorddir : "").">")
 endfun
 
 " ---------------------------------------------------------------------
 " s:RecordInFile: {{{2
 fun! s:RecordInFile(home)
-"  call Dfunc("s:RecordInFile()")
   if exists("g:vimball_norecord")
-"   call Dret("s:RecordInFile : g:vimball_norecord")
    return
   endif
 
   if exists("s:recordfile") || exists("s:recorddir")
    let curdir= getcwd()
    call s:ChgDir(a:home)
-   keepalt keepjumps 1split 
+   keepalt keepjumps 1split
 
    let cmd= expand("%:tr").": "
-"   call Decho("cmd<".cmd.">")
 
    sil! keepalt keepjumps e .VimballRecord
    setlocal ma
    $
    if exists("s:recordfile") && exists("s:recorddir")
-   	let cmd= cmd.s:recordfile."|".s:recorddir
+    let cmd= cmd.s:recordfile."|".s:recorddir
    elseif exists("s:recorddir")
-   	let cmd= cmd.s:recorddir
+    let cmd= cmd.s:recorddir
    elseif exists("s:recordfile")
-   	let cmd= cmd.s:recordfile
+    let cmd= cmd.s:recordfile
    else
-"    call Dret("s:RecordInFile : neither recordfile nor recorddir exist")
-	return
+    return
    endif
-"   call Decho("cmd<".cmd.">")
 
    " put command into buffer, write .VimballRecord `file
    keepalt keepjumps put=cmd
@@ -678,35 +590,28 @@ fun! s:RecordInFile(home)
    call s:ChgDir(curdir)
 
    if exists("s:recorddir")
-"	call Decho("unlet s:recorddir<".s:recorddir.">")
-   	unlet s:recorddir
+    unlet s:recorddir
    endif
    if exists("s:recordfile")
-"	call Decho("unlet s:recordfile<".s:recordfile.">")
-   	unlet s:recordfile
+    unlet s:recordfile
    endif
-  else
-"   call Decho("s:record[file|dir] doesn't exist")
   endif
-
-"  call Dret("s:RecordInFile")
 endfun
 
 " ---------------------------------------------------------------------
 " vimball#VimballHome: determine/get home directory path (usually from rtp) {{{2
 fun! vimball#VimballHome()
-"  call Dfunc("vimball#VimballHome()")
   if exists("g:vimball_home")
    let home= g:vimball_home
   else
    " go to vim plugin home
    for home in split(&rtp,',') + ['']
     if isdirectory(home) && filewritable(home) | break | endif
-	let basehome= substitute(home,'[/\\]\.vim$','','')
+    let basehome= substitute(home,'[/\\]\.vim$','','')
     if isdirectory(basehome) && filewritable(basehome)
-	 let home= basehome."/.vim"
-	 break
-	endif
+     let home= basehome."/.vim"
+     break
+    endif
    endfor
    if home == ""
     " just pick the first directory
@@ -717,18 +622,9 @@ fun! vimball#VimballHome()
    endif
   endif
   " insure that the home directory exists
-"  call Decho("picked home<".home.">")
   if !isdirectory(home)
-   if exists("g:vimball_mkdir")
-"	call Decho("home<".home."> isn't a directory -- making it now with g:vimball_mkdir<".g:vimball_mkdir.">")
-"    call Decho("system(".g:vimball_mkdir." ".shellescape(home).")")
-    call system(g:vimball_mkdir." ".shellescape(home))
-   else
-"	call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
-    call mkdir(home)
-   endif
+   call mkdir(home)
   endif
-"  call Dret("vimball#VimballHome <".home.">")
   return home
 endfun
 
@@ -758,13 +654,11 @@ fun! vimball#SaveSettings()
   endif
   " vimballs should be in unix format
   setlocal ff=unix
-"  call Dret("SaveSettings")
 endfun
 
 " ---------------------------------------------------------------------
 " vimball#RestoreSettings: {{{2
 fun! vimball#RestoreSettings()
-"  call Dfunc("RestoreSettings()")
   let @a      = s:regakeep
   if exists("+acd")
    let &acd   = s:acdkeep
@@ -780,14 +674,12 @@ fun! vimball#RestoreSettings()
   let &l:ff   = s:ffkeep
   if s:makeep[0] != 0
    " restore mark a
-"   call Decho("restore mark-a: makeep=".string(makeep))
    call setpos("'a",s:makeep)
   endif
   if exists("+acd")
    unlet s:acdkeep
   endif
   unlet s:regakeep s:eikeep s:fenkeep s:hidkeep s:ickeep s:repkeep s:vekeep s:makeep s:lzkeep s:pmkeep s:ffkeep
-"  call Dret("RestoreSettings")
 endfun
 
 let &cpo = s:keepcpo
@@ -795,4 +687,4 @@ unlet s:keepcpo
 
 " ---------------------------------------------------------------------
 " Modelines: {{{1
-" vim: fdm=marker
+" vim: fdm=marker et
diff --git a/runtime/autoload/vimgoto.vim b/runtime/autoload/vimgoto.vim
index cb41cc7de2..634457dff5 100644
--- a/runtime/autoload/vimgoto.vim
+++ b/runtime/autoload/vimgoto.vim
@@ -4,7 +4,8 @@ vim9script
 # Contributers: @lacygoill
 #               Shane-XB-Qian
 #               Andrew Radev
-# Last Change:  2025 Oct 17
+#               thinca
+# Last Change:  2026 Mar 30
 #
 # Vim script to handle jumping to the targets of several types of Vim commands
 # (:import, :packadd, :runtime, :colorscheme), and to autoloaded functions of
@@ -41,9 +42,9 @@ export def Find(editcmd: string) #{{{2
     if stridx(curfunc, '#') >= 0
         var parts = split(curfunc, '#')
         var path = $"autoload/{join(parts[0 : -2], '/')}.vim"
-        var resolved_path = globpath(&runtimepath, path)
+        var resolved_path = globpath(&runtimepath, path, 1, 1)
 
-        if resolved_path != ''
+        if !resolved_path->empty()
             var function_pattern: string = $'^\s*\%(:\s*\)\=fun\%[ction]!\=\s\+\zs{curfunc}('
             resolved_path->Open(editcmd, function_pattern)
         endif
@@ -167,7 +168,7 @@ def HandleImportLine(editcmd: string, curline: string) #{{{2
         "\F": 'split',
         "\gF": 'tab split',
     }[editcmd]
-    execute how_to_split .. ' ' .. filepath
+    execute how_to_split .. ' ' .. fnameescape(filepath)
 enddef
 
 def Open(target: any, editcmd: string, search_pattern: string = '') #{{{2
@@ -192,7 +193,7 @@ def Open(target: any, editcmd: string, search_pattern: string = '') #{{{2
         cmd = $'+silent\ call\ search(''{escaped_pattern}'')'
     endif
 
-    execute $'{split} {cmd} {fname}'
+    execute $'{split} {cmd} {fnameescape(fname)}'
 
     # If there are several files to open, put them into an arglist.
     if target->typename() == 'list'
diff --git a/runtime/autoload/xmlformat.vim b/runtime/autoload/xmlformat.vim
index c89c8784b9..c541e65755 100644
--- a/runtime/autoload/xmlformat.vim
+++ b/runtime/autoload/xmlformat.vim
@@ -1,5 +1,5 @@
 " Vim plugin for formatting XML
-" Last Change: 2020 Jan 06
+" Last Change: 2023 March 15th
 "     Version: 0.3
 "      Author: Christian Brabandt 
 "  Repository: https://github.com/chrisbra/vim-xml-ftplugin
@@ -37,13 +37,17 @@ func! xmlformat#Format() abort
     " Keep empty input lines?
     if empty(line)
       call add(result, '')
+      let current += 1
       continue
     elseif line !~# '<[/]\?[^>]*>'
-      let nextmatch = match(list, '<[/]\?[^>]*>', current)
-      if nextmatch > -1 
-        let line .= ' '. join(list[(current + 1):(nextmatch-1)], " ")
-        call remove(list, current+1, nextmatch-1)
+      let nextmatch = match(list, '^\s*$\|<[/]\?[^>]*>', current)
+      if nextmatch > -1
+        let lineEnd = nextmatch
+      else
+        let lineEnd = len(list)
       endif
+      let line .= ' '. join(list[(current + 1):(lineEnd-1)], " ")
+      call remove(list, current+1, lineEnd-1)
     endif
     " split on `>`, but don't split on very first opening <
     " this means, items can be like ['', 'tag content']
@@ -79,9 +83,13 @@ func! xmlformat#Format() abort
           if s:EndTag(t[1])
             call s:DecreaseIndent()
           endif
-          "for y in t[1:]
-            let result+=s:FormatContent(t[1:])
-          "endfor
+          let result+=s:FormatContent(t[1:])
+          if s:IsTag(t[1])
+            let lastitem = t[1]
+            continue
+          endif
+        elseif s:IsComment(item)
+          let result+=s:FormatContent([item])
         else
           call add(result, s:Indent(item))
         endif
@@ -94,7 +102,7 @@ func! xmlformat#Format() abort
   if !empty(result)
     let lastprevline = getline(v:lnum + count_orig)
     let delete_lastline = v:lnum + count_orig - 1 == line('$')
-    exe v:lnum. ",". (v:lnum + count_orig - 1). 'd'
+    exe 'silent ' .. v:lnum. ",". (v:lnum + count_orig - 1). 'd'
     call append(v:lnum - 1, result)
     " Might need to remove the last line, if it became empty because of the
     " append() call
diff --git a/runtime/autoload/zip.vim b/runtime/autoload/zip.vim
index 49e4e81981..44bdfc6820 100644
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,4 +1,4 @@
-  " zip.vim: Handles browsing zipfiles
+" zip.vim: Handles browsing zipfiles
 " AUTOLOAD PORTION
 " Date:		2024 Aug 21
 " Version:	34
@@ -17,6 +17,14 @@
 " 2025 Mar 11 by Vim Project: handle filenames with leading '-' correctly
 " 2025 Jul 12 by Vim Project: drop ../ on write to prevent path traversal attacks
 " 2025 Sep 22 by Vim Project: support PowerShell Core
+" 2025 Dec 20 by Vim Project: use :lcd instead of :cd
+" 2026 Feb 08 by Vim Project: use system() instead of :!
+" 2026 Mar 08 by Vim Project: Make ZipUpdatePS() check for powershell
+" 2026 Apr 01 by Vim Project: Detect more path traversal attacks
+" 2026 Apr 05 by Vim Project: Detect more path traversal attacks
+" 2026 Apr 14 by Vim Project: Detect more path traversal attacks on Windows
+" 2026 Apr 15 by Vim Project: Detect more path traversal attacks on Windows
+" 2026 Jun 20 by Vim Project: Fix wrong escaping for the powershell calls
 " License:	Vim License  (see vim's :help license)
 " Copyright:	Copyright (C) 2005-2019 Charles E. Campbell {{{1
 "		Permission is hereby granted to use and distribute this code,
@@ -44,15 +52,6 @@ let s:NOTE           = 0
 
 " ---------------------------------------------------------------------
 "  Global Values: {{{1
-if !exists("g:zip_shq")
- if &shq != ""
-  let g:zip_shq= &shq
- elseif has("unix")
-  let g:zip_shq= "'"
- else
-  let g:zip_shq= '"'
- endif
-endif
 if !exists("g:zip_zipcmd")
  let g:zip_zipcmd= "zip"
 endif
@@ -128,7 +127,7 @@ function! s:ZipBrowsePS(zipfile)
   " Browse the contents of a zip file using PowerShell's
   " Equivalent `unzip -Z1 -- zipfile`
   let cmds = [
-        \ '$zip = [System.IO.Compression.ZipFile]::OpenRead(' . s:Escape(a:zipfile, 1) . ');',
+        \ '$zip = [System.IO.Compression.ZipFile]::OpenRead(' . s:PSEscape(a:zipfile) . ');',
         \ '$zip.Entries | ForEach-Object { $_.FullName };',
         \ '$zip.Dispose()'
         \ ]
@@ -138,30 +137,30 @@ endfunction
 function! s:ZipReadPS(zipfile, fname, tempfile)
   " Read a filename within a zipped file to a temporary file.
   " Equivalent to `unzip -p -- zipfile fname > tempfile`
-  if a:fname =~ '/'
+  if &shell =~ 'pwsh'
     call s:Mess('WarningMsg', "***warning*** PowerShell can display, but cannot update, files in archive subfolders")
   endif
   let cmds = [
-        \ '$zip = [System.IO.Compression.ZipFile]::OpenRead(' . s:Escape(a:zipfile, 1) . ');',
-        \ '$fileEntry = $zip.Entries | Where-Object { $_.FullName -eq ' . s:Escape(a:fname, 1) . ' };',
+        \ '$zip = [System.IO.Compression.ZipFile]::OpenRead(' . s:PSEscape(a:zipfile) . ');',
+        \ '$fileEntry = $zip.Entries | Where-Object { $_.FullName -eq ' . s:PSEscape(a:fname) . ' };',
         \ '$stream = $fileEntry.Open();',
-        \ '$fileStream = [System.IO.File]::Create(' . s:Escape(a:tempfile, 1) . ');',
+        \ '$fileStream = [System.IO.File]::Create(' . s:PSEscape(a:tempfile) . ');',
         \ '$stream.CopyTo($fileStream);',
         \ '$fileStream.Close();',
         \ '$stream.Close();',
         \ '$zip.Dispose()'
         \ ]
-  return 'pwsh -NoProfile -Command ' . s:Escape(join(cmds, ' '), 1)
+  return 'pwsh -NoProfile -Command ' . s:Escape(join(cmds, ' '))
 endfunction
 
 function! s:ZipUpdatePS(zipfile, fname)
   " Update a filename within a zipped file
   " Equivalent to `zip -u zipfile fname`
-  if a:fname =~ '/'
+  if &shell =~ 'pwsh' && a:fname =~ '/'
     call s:Mess('Error', "***error*** PowerShell cannot update files in archive subfolders")
     return ':'
   endif
-  return 'Compress-Archive -Path ' . a:fname . ' -Update -DestinationPath ' . a:zipfile
+  return 'Compress-Archive -Path ' . s:PSEscape(a:fname) . ' -Update -DestinationPath ' . s:PSEscape(a:zipfile)
 endfunction
 
 function! s:ZipExtractFilePS(zipfile, fname)
@@ -172,16 +171,16 @@ function! s:ZipExtractFilePS(zipfile, fname)
     return ':'
   endif
   let cmds = [
-        \ '$zip = [System.IO.Compression.ZipFile]::OpenRead(' . s:Escape(a:zipfile, 1) . ');',
-        \ '$fileEntry = $zip.Entries | Where-Object { $_.FullName -eq ' . a:fname . ' };',
+        \ '$zip = [System.IO.Compression.ZipFile]::OpenRead(' . s:PSEscape(a:zipfile) . ');',
+        \ '$fileEntry = $zip.Entries | Where-Object { $_.FullName -eq ' . s:PSEscape(a:fname) . ' };',
         \ '$stream = $fileEntry.Open();',
-        \ '$fileStream = [System.IO.File]::Create(' . a:fname . ');',
+        \ '$fileStream = [System.IO.File]::Create(' . s:PSEscape(a:fname) . ');',
         \ '$stream.CopyTo($fileStream);',
         \ '$fileStream.Close();',
         \ '$stream.Close();',
         \ '$zip.Dispose()'
         \ ]
-  return 'pwsh -NoProfile -Command ' . s:Escape(join(cmds, ' '), 1)
+  return 'pwsh -NoProfile -Command ' . s:Escape(join(cmds, ' '))
 endfunction
 
 function! s:ZipDeleteFilePS(zipfile, fname)
@@ -189,12 +188,12 @@ function! s:ZipDeleteFilePS(zipfile, fname)
   " Equivalent to `zip -d zipfile fname`
   let cmds = [
         \ 'Add-Type -AssemblyName System.IO.Compression.FileSystem;',
-        \ '$zip = [System.IO.Compression.ZipFile]::Open(' . s:Escape(a:zipfile, 1) . ', ''Update'');',
-        \ '$entry = $zip.Entries | Where-Object { $_.Name -eq ' . s:Escape(a:fname, 1) . ' };',
+        \ '$zip = [System.IO.Compression.ZipFile]::Open(' . s:PSEscape(a:zipfile) . ', ''Update'');',
+        \ '$entry = $zip.Entries | Where-Object { $_.Name -eq ' . s:PSEscape(a:fname) . ' };',
         \ 'if ($entry) { $entry.Delete(); $zip.Dispose() }',
         \ 'else { $zip.Dispose() }'
         \ ]
-  return 'pwsh -NoProfile -Command ' . s:Escape(join(cmds, ' '), 1)
+  return 'pwsh -NoProfile -Command ' . s:Escape(join(cmds, ' '))
 endfunction
 
 " ----------------
@@ -334,8 +333,9 @@ fun! zip#Read(fname,mode)
   let temp = tempname()
   let fn   = expand('%:p')
 
-  let gnu_cmd = 'sil !' . g:zip_unzipcmd . ' -p -- ' . s:Escape(zipfile, 1) . ' ' . s:Escape(fname, 1) . ' > ' . s:Escape(temp, 1)
-  let ps_cmd = 'sil !' . s:ZipReadPS(zipfile, fname, temp)
+  let gnu_cmd = g:zip_unzipcmd . ' -p -- ' . s:Escape(zipfile) . ' ' . s:Escape(fname) . ' > ' . s:Escape(temp)
+  let gnu_cmd = 'call system(' . string(gnu_cmd) . ')'
+  let ps_cmd = 'call system(' . string(s:ZipReadPS(zipfile, fname, temp)) . ')'
   call s:TryExecGnuFallBackToPs(g:zip_unzipcmd, gnu_cmd, ps_cmd)
 
   sil exe 'keepalt file '.temp
@@ -363,6 +363,11 @@ fun! zip#Write(fname)
     return
   endif
 
+  if simplify(a:fname) =~ '\.\.[/\\]'
+    call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!")
+    return
+  endif
+
   let curdir= getcwd()
   let tmpdir= tempname()
   if tmpdir =~ '\.'
@@ -371,7 +376,7 @@ fun! zip#Write(fname)
   call mkdir(tmpdir,"p")
 
   " attempt to change to the indicated directory
-  if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot cd to temporary directory")
+  if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot lcd to temporary directory")
     return
   endif
 
@@ -380,19 +385,31 @@ fun! zip#Write(fname)
     call delete("_ZIPVIM_", "rf")
   endif
   call mkdir("_ZIPVIM_")
-  cd _ZIPVIM_
+  lcd _ZIPVIM_
 
   if has("unix")
     let zipfile = substitute(a:fname,'zipfile://\(.\{-}\)::[^\\].*$','\1','')
     let fname   = substitute(a:fname,'zipfile://.\{-}::\([^\\].*\)$','\1','')
+    " fname should not start with a leading slash to avoid writing anywhere into the system
+    if fname =~ '^/'
+      call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!")
+      call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
+      return
+    endif
   else
     let zipfile = substitute(a:fname,'^.\{-}zipfile://\(.\{-}\)::[^\\].*$','\1','')
     let fname   = substitute(a:fname,'^.\{-}zipfile://.\{-}::\([^\\].*\)$','\1','')
+    " fname should not start with drive letter, UNC path, or leading slash
+    if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
+      call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!")
+      call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
+      return
+    endif
   endif
   if fname =~ '^[.]\{1,2}/'
-    let gnu_cmd = g:zip_zipcmd . ' -d ' . s:Escape(fnamemodify(zipfile,":p"),0) . ' ' . s:Escape(fname,0) 
-    let gnu_cmd = 'call system(''' . substitute(gnu_cmd, "'", "''", 'g') . ''')'
-    let ps_cmd = $"call system({s:Escape(s:ZipDeleteFilePS(zipfile, fname), 1)})"
+    let gnu_cmd = g:zip_zipcmd . ' -d ' . s:Escape(fnamemodify(zipfile,":p")) . ' ' . s:Escape(fname)
+    let gnu_cmd = 'call system(' . string(gnu_cmd) . ')'
+    let ps_cmd = $"call system({string(s:ZipDeleteFilePS(zipfile, fname))})"
     call s:TryExecGnuFallBackToPs(g:zip_zipcmd, gnu_cmd, ps_cmd)
     let fname = fname->substitute('^\([.]\{1,2}/\)\+', '', 'g')
     let need_rename = 1
@@ -401,7 +418,7 @@ fun! zip#Write(fname)
   if fname =~ '/'
     let dirpath = substitute(fname,'/[^/]\+$','','e')
     if has("win32unix") && executable("cygpath")
-    let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e')
+    let dirpath = substitute(system("cygpath ".s:Escape(dirpath)),'\n','','e')
     endif
     call mkdir(dirpath,"p")
   endif
@@ -412,16 +429,17 @@ fun! zip#Write(fname)
   " don't overwrite files forcefully
   exe "w ".fnameescape(fname)
   if has("win32unix") && executable("cygpath")
-    let zipfile = substitute(system("cygpath ".s:Escape(zipfile,0)),'\n','','e')
+    let zipfile = substitute(system("cygpath ".s:Escape(zipfile)),'\n','','e')
   endif
 
   if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
     let fname = substitute(fname, '[', '[[]', 'g')
   endif
 
-  let gnu_cmd = g:zip_zipcmd . ' -u '. s:Escape(fnamemodify(zipfile,":p"),0) . ' ' . s:Escape(fname,0) 
+  let gnu_cmd = g:zip_zipcmd . ' -u '. s:Escape(fnamemodify(zipfile,":p")) . ' ' . s:Escape(fname)
   let gnu_cmd = 'call system(''' . substitute(gnu_cmd, "'", "''", 'g') . ''')'
-  let ps_cmd = s:ZipUpdatePS(s:Escape(fnamemodify(zipfile, ':p'), 0), s:Escape(fname, 0))
+  let zip = fnamemodify(zipfile, ':p')
+  let ps_cmd = s:ZipUpdatePS(zip, fname)
   let ps_cmd = 'call system(''' . substitute(ps_cmd, "'", "''", 'g') . ''')'
   call s:TryExecGnuFallBackToPs(g:zip_zipcmd, gnu_cmd, ps_cmd)
   if &shell =~ 'pwsh'
@@ -455,7 +473,7 @@ fun! zip#Write(fname)
   endif
 
   " cleanup and restore current directory
-  cd ..
+  lcd ..
   call delete("_ZIPVIM_", "rf")
   call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
   call delete(tmpdir, "rf")
@@ -477,10 +495,22 @@ fun! zip#Extract()
   if fname =~ '/$'
     call s:Mess('Error', "***error*** (zip#Extract) Please specify a file, not a directory")
     return
-  elseif fname =~ '^[.]\?[.]/'
+  elseif fname =~ '^[.]\?[.]/' || simplify(fname) =~ '\.\.[/\\]'
     call s:Mess('Error', "***error*** (zip#Browse) Path Traversal Attack detected, not extracting!")
     return
   endif
+  " block absolute paths
+  if has("unix")
+    if fname =~ '^/'
+      call s:Mess('Error', "***error*** (zip#Extract) Path Traversal Attack detected, not extracting!")
+      return
+    endif
+  else
+    if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
+      call s:Mess('Error', "***error*** (zip#Extract) Path Traversal Attack detected, not extracting!")
+      return
+    endif
+  endif
   if filereadable(fname)
     call s:Mess('Error', "***error*** (zip#Extract) <" .. fname .."> already exists in directory, not overwriting!")
     return
@@ -504,8 +534,8 @@ fun! zip#Extract()
 
   " extract the file mentioned under the cursor
   let gnu_cmd = g:zip_extractcmd . ' -o '. shellescape(b:zipfile) . ' ' . target
-  let gnu_cmd = 'call system(''' . substitute(gnu_cmd, "'", "''", 'g') . ''')'
-  let ps_cmd = $"call system({s:Escape(s:ZipExtractFilePS(b:zipfile, target), 1)})"
+  let gnu_cmd = 'call system(' . string(gnu_cmd) . ')'
+  let ps_cmd = 'call system(' . string(s:ZipExtractFilePS(b:zipfile, fname)) . ')'
   call s:TryExecGnuFallBackToPs(g:zip_extractcmd, gnu_cmd, ps_cmd)
 
   if v:shell_error != 0
@@ -519,24 +549,25 @@ endfun
 
 " ---------------------------------------------------------------------
 " s:Escape: {{{2
-fun! s:Escape(fname,isfilt)
-  if exists("*shellescape")
-   if a:isfilt
-    let qnameq= shellescape(a:fname,1)
-   else
-    let qnameq= shellescape(a:fname)
-   endif
+fun! s:Escape(fname, isfilt = 0)
+  if a:isfilt
+   let qnameq = shellescape(a:fname, 1)
   else
-   let qnameq= g:zip_shq.escape(a:fname,g:zip_shq).g:zip_shq
+   let qnameq = shellescape(a:fname)
   endif
   return qnameq
 endfun
 
+" s:PSEscape: Escape a string for Powershell, shellescape() does not work here {{{2
+fun! s:PSEscape(str)
+  return "'" .. substitute(a:str, "'", "''", 'g') .. "'"
+endfun
+
 " ---------------------------------------------------------------------
 " s:ChgDir: {{{2
 fun! s:ChgDir(newdir,errlvl,errmsg)
   try
-   exe "cd ".fnameescape(a:newdir)
+   exe "lcd ".fnameescape(a:newdir)
   catch /^Vim\%((\a\+)\)\=:E344/
    redraw!
    if a:errlvl == s:NOTE
diff --git a/runtime/colors/blue.vim b/runtime/colors/blue.vim
index 5179667f5a..07b4785ced 100644
--- a/runtime/colors/blue.vim
+++ b/runtime/colors/blue.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Steven Vertigan 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 14
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -124,7 +124,8 @@ hi ToolbarButton guifg=#ffffff guibg=#005faf guisp=NONE gui=NONE ctermfg=231 cte
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#ffa500 guibg=NONE guisp=NONE gui=bold ctermfg=214 ctermbg=NONE cterm=NONE term=NONE
 hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#008787 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE term=NONE
+hi VertSplit guifg=#5fffff guibg=NONE guisp=NONE gui=NONE ctermfg=87 ctermbg=NONE cterm=NONE term=NONE
+hi VertSplitNC guifg=#008787 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE term=NONE
 hi Visual guifg=#ffffff guibg=#008787 guisp=NONE gui=NONE ctermfg=231 ctermbg=30 cterm=NONE term=reverse
 hi VisualNOS guifg=#008787 guibg=#ffffff guisp=NONE gui=NONE ctermfg=30 ctermbg=231 cterm=NONE term=NONE
 hi WarningMsg guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=standout
@@ -197,7 +198,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=darkcyan ctermbg=NONE cterm=NONE
+  hi VertSplit ctermfg=cyan ctermbg=NONE cterm=NONE
+  hi VertSplitNC ctermfg=darkcyan ctermbg=NONE cterm=NONE
   hi Visual ctermfg=white ctermbg=darkcyan cterm=NONE
   hi VisualNOS ctermfg=darkcyan ctermbg=white cterm=NONE
   hi WarningMsg ctermfg=magenta ctermbg=NONE cterm=NONE
@@ -268,6 +270,7 @@ if s:t_Co >= 8
   hi Type ctermfg=red ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=cyan ctermbg=NONE cterm=NONE
+  hi VertSplitNC ctermfg=darkcyan ctermbg=NONE cterm=NONE
   hi Visual ctermfg=black ctermbg=cyan cterm=NONE
   hi VisualNOS ctermfg=cyan ctermbg=gray cterm=NONE
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/catppuccin.vim b/runtime/colors/catppuccin.vim
new file mode 100644
index 0000000000..b144332276
--- /dev/null
+++ b/runtime/colors/catppuccin.vim
@@ -0,0 +1,808 @@
+" Name:         Catppuccin Latte (for light) and Mocha (for dark)
+" Description:  Soothing pastel theme for the high-spirited!
+" Author:       The Catppuccin Community 
+" Maintainer:   Mao-Yining 
+" URL:          https://github.com/vim/colorschemes
+" Last Change:  2026 May 04
+
+" Generated by Colortemplate v3.0.0-rc1
+
+hi clear
+let g:colors_name = 'catppuccin'
+
+let s:t_Co = has('gui_running') ? 16777216 : str2nr(&t_Co)
+let s:tgc = has('termguicolors') && &termguicolors
+
+hi! link Boolean Constant
+hi! link CursorLineFold FoldColumn
+hi! link CursorLineSign SignColumn
+hi! link Debug Special
+hi! link Define PreProc
+hi! link Float Constant
+hi! link Ignore Comment
+hi! link IncSearch CurSearch
+hi! link LineNrAbove LineNr
+hi! link LineNrBelow LineNr
+hi! link Number Constant
+hi! link PopupNotification WarningMsg
+hi! link PreCondit PreProc
+hi! link SpecialChar Special
+hi! link SpecialComment Special
+hi! link SpecialKey NonText
+hi! link StatusLineTerm StatusLine
+hi! link StatusLineTermNC StatusLineNC
+hi! link Terminal Normal
+hi! link Typedef Type
+
+if &background == 'dark'
+  hi Normal guifg=#cdd6f4 guibg=#1e1e2e guisp=NONE gui=NONE ctermfg=189 ctermbg=233 cterm=NONE term=NONE
+  hi Added guifg=#a6e3a1 guibg=NONE guisp=NONE gui=NONE ctermfg=114 ctermbg=NONE cterm=NONE term=NONE
+  hi Bold guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold term=bold
+  hi Changed guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi Character guifg=#94e2d5 guibg=NONE guisp=NONE gui=NONE ctermfg=158 ctermbg=NONE cterm=NONE term=NONE
+  hi ColorColumn guifg=NONE guibg=#181825 guisp=NONE gui=NONE ctermfg=NONE ctermbg=232 cterm=NONE term=reverse
+  hi Comment guifg=#9399b2 guibg=NONE guisp=NONE gui=NONE ctermfg=103 ctermbg=NONE cterm=NONE term=bold
+  hi Conceal guifg=#7f849c guibg=NONE guisp=NONE gui=NONE ctermfg=102 ctermbg=NONE cterm=NONE term=NONE
+  hi Conditional guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
+  hi Constant guifg=#fab387 guibg=NONE guisp=NONE gui=NONE ctermfg=216 ctermbg=NONE cterm=NONE term=NONE
+  hi CurSearch guifg=#cdd6f4 guibg=#89556b guisp=NONE gui=NONE ctermfg=189 ctermbg=126 cterm=NONE term=reverse
+  hi Cursor guifg=#1e1e2e guibg=#f5e0dc guisp=NONE gui=NONE ctermfg=233 ctermbg=224 cterm=NONE term=reverse
+  hi CursorColumn guifg=NONE guibg=#181825 guisp=NONE gui=NONE ctermfg=NONE ctermbg=232 cterm=NONE term=NONE
+  hi CursorIM guifg=#1e1e2e guibg=#cba6f7 guisp=NONE gui=NONE ctermfg=233 ctermbg=183 cterm=NONE term=NONE
+  hi CursorLine guifg=NONE guibg=#2a2b3c guisp=NONE gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE term=underline
+  hi CursorLineNr guifg=#b4befe guibg=NONE guisp=NONE gui=NONE ctermfg=147 ctermbg=NONE cterm=NONE term=bold
+  hi Delimiter guifg=#9399b2 guibg=NONE guisp=NONE gui=NONE ctermfg=103 ctermbg=NONE cterm=NONE term=NONE
+  hi DiffAdd guifg=NONE guibg=#364143 guisp=NONE gui=NONE ctermfg=NONE ctermbg=22 cterm=NONE term=reverse
+  hi DiffChange guifg=NONE guibg=#25293c guisp=NONE gui=NONE ctermfg=NONE ctermbg=235 cterm=NONE term=NONE
+  hi DiffDelete guifg=NONE guibg=#443244 guisp=NONE gui=NONE ctermfg=NONE ctermbg=52 cterm=NONE term=reverse
+  hi DiffText guifg=NONE guibg=#3e4b6b guisp=NONE gui=NONE ctermfg=NONE ctermbg=23 cterm=NONE term=reverse
+  hi Directory guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi EndOfBuffer guifg=#45475a guibg=NONE guisp=NONE gui=NONE ctermfg=240 ctermbg=NONE cterm=NONE term=NONE
+  hi Error guifg=#f38ba8 guibg=NONE guisp=NONE gui=NONE ctermfg=211 ctermbg=NONE cterm=NONE term=bold,reverse
+  hi ErrorMsg guifg=#f38ba8 guibg=NONE guisp=NONE gui=bold ctermfg=211 ctermbg=NONE cterm=bold term=bold,reverse
+  hi Exception guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
+  hi FoldColumn guifg=#6c7086 guibg=NONE guisp=NONE gui=NONE ctermfg=59 ctermbg=NONE cterm=NONE term=NONE
+  hi Folded guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi Function guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi Identifier guifg=#f2cdcd guibg=NONE guisp=NONE gui=NONE ctermfg=181 ctermbg=NONE cterm=NONE term=NONE
+  hi Include guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
+  hi Italic guifg=NONE guibg=NONE guisp=NONE gui=italic ctermfg=NONE ctermbg=NONE cterm=italic term=italic
+  hi Keyword guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
+  hi Label guifg=#74c7ec guibg=NONE guisp=NONE gui=NONE ctermfg=117 ctermbg=NONE cterm=NONE term=NONE
+  hi LineNr guifg=#45475a guibg=NONE guisp=NONE gui=NONE ctermfg=240 ctermbg=NONE cterm=NONE term=NONE
+  hi Macro guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
+  hi MatchParen guifg=#fab387 guibg=NONE guisp=NONE gui=bold ctermfg=216 ctermbg=NONE cterm=bold term=bold,underline
+  hi ModeMsg guifg=#cdd6f4 guibg=NONE guisp=NONE gui=bold ctermfg=189 ctermbg=NONE cterm=bold term=bold
+  hi MoreMsg guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi NonText guifg=#6c7086 guibg=NONE guisp=NONE gui=NONE ctermfg=59 ctermbg=NONE cterm=NONE term=NONE
+  hi Operator guifg=#89dceb guibg=NONE guisp=NONE gui=NONE ctermfg=116 ctermbg=NONE cterm=NONE term=NONE
+  hi Pmenu guifg=#9399b2 guibg=#181825 guisp=NONE gui=NONE ctermfg=103 ctermbg=232 cterm=NONE term=reverse
+  hi PmenuExtra guifg=#6c7086 guibg=#181825 guisp=NONE gui=NONE ctermfg=59 ctermbg=232 cterm=NONE term=NONE
+  hi PmenuExtraSel guifg=#6c7086 guibg=#313244 guisp=NONE gui=bold ctermfg=59 ctermbg=236 cterm=bold term=bold
+  hi PmenuMatch guifg=#cdd6f4 guibg=NONE guisp=NONE gui=bold ctermfg=189 ctermbg=NONE cterm=bold term=bold
+  hi PmenuMatchSel guifg=#cdd6f4 guibg=NONE guisp=NONE gui=bold ctermfg=189 ctermbg=NONE cterm=bold term=bold
+  hi PmenuSbar guifg=NONE guibg=#313244 guisp=NONE gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE term=reverse
+  hi PmenuSel guifg=NONE guibg=#313244 guisp=NONE gui=bold ctermfg=NONE ctermbg=236 cterm=bold term=bold
+  hi PmenuThumb guifg=NONE guibg=#6c7086 guisp=NONE gui=NONE ctermfg=NONE ctermbg=59 cterm=NONE term=NONE
+  hi PreInsert guifg=#9399b2 guibg=NONE guisp=NONE gui=NONE ctermfg=103 ctermbg=NONE cterm=NONE term=NONE
+  hi PreProc guifg=#f5c2e7 guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE term=NONE
+  hi Question guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=standout
+  hi QuickFixLine guifg=NONE guibg=#52476a guisp=NONE gui=bold ctermfg=189 ctermbg=60 cterm=bold term=NONE
+  hi Removed guifg=#f38ba8 guibg=NONE guisp=NONE gui=NONE ctermfg=211 ctermbg=NONE cterm=NONE term=NONE
+  hi Repeat guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
+  hi Search guifg=#cdd6f4 guibg=#3e5767 guisp=NONE gui=NONE ctermfg=189 ctermbg=24 cterm=NONE term=reverse
+  hi SignColumn guifg=#45475a guibg=NONE guisp=NONE gui=NONE ctermfg=240 ctermbg=NONE cterm=NONE term=reverse
+  hi Special guifg=#f5c2e7 guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE term=NONE
+  hi SpellBad guifg=NONE guibg=NONE guisp=#f38ba8 gui=undercurl ctermfg=211 ctermbg=NONE cterm=underline term=underline
+  hi SpellCap guifg=NONE guibg=NONE guisp=#f9e2af gui=undercurl ctermfg=222 ctermbg=NONE cterm=underline term=underline
+  hi SpellLocal guifg=NONE guibg=NONE guisp=#89b4fa gui=undercurl ctermfg=111 ctermbg=NONE cterm=underline term=underline
+  hi SpellRare guifg=NONE guibg=NONE guisp=#a6e3a1 gui=undercurl ctermfg=114 ctermbg=NONE cterm=underline term=underline
+  hi Statement guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
+  hi StatusLine guifg=#cdd6f4 guibg=#11111b guisp=NONE gui=bold ctermfg=189 ctermbg=16 cterm=bold term=bold,reverse
+  hi StatusLineNC guifg=#6c7086 guibg=#181825 guisp=NONE gui=NONE ctermfg=59 ctermbg=232 cterm=NONE term=bold,underline
+  hi StorageClass guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
+  hi String guifg=#a6e3a1 guibg=NONE guisp=NONE gui=NONE ctermfg=114 ctermbg=NONE cterm=NONE term=NONE
+  hi Structure guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
+  hi TabLine guifg=#6c7086 guibg=#11111b guisp=NONE gui=NONE ctermfg=59 ctermbg=16 cterm=NONE term=bold,underline
+  hi TabLineFill guifg=NONE guibg=#181825 guisp=NONE gui=NONE ctermfg=NONE ctermbg=232 cterm=NONE term=NONE
+  hi TabLineSel guifg=#cdd6f4 guibg=#1e1e2e guisp=NONE gui=NONE ctermfg=189 ctermbg=233 cterm=NONE term=bold,reverse
+  hi Tag guifg=#b4befe guibg=NONE guisp=NONE gui=bold ctermfg=147 ctermbg=NONE cterm=bold term=bold
+  hi Title guifg=#89b4fa guibg=NONE guisp=NONE gui=bold ctermfg=111 ctermbg=NONE cterm=bold term=NONE
+  hi TitleBar guifg=#cdd6f4 guibg=#181825 guisp=NONE gui=NONE ctermfg=189 ctermbg=232 cterm=NONE term=NONE
+  hi TitleBarNC guifg=#6c7086 guibg=#11111b guisp=NONE gui=NONE ctermfg=59 ctermbg=16 cterm=NONE term=NONE
+  hi Todo guifg=#f2cdcd guibg=NONE guisp=NONE gui=bold ctermfg=181 ctermbg=NONE cterm=bold term=bold,reverse
+  hi ToolbarButton guifg=#f5e0dc guibg=NONE guisp=NONE gui=NONE ctermfg=224 ctermbg=NONE cterm=NONE term=bold,reverse
+  hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
+  hi Type guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
+  hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
+  hi VertSplit guifg=#11111b guibg=NONE guisp=NONE gui=NONE ctermfg=16 ctermbg=NONE cterm=NONE term=NONE
+  hi Visual guifg=NONE guibg=#45475a guisp=NONE gui=NONE ctermfg=240 ctermbg=189 cterm=reverse term=reverse
+  hi VisualNOS guifg=NONE guibg=#45475a guisp=NONE gui=bold ctermfg=NONE ctermbg=240 cterm=bold term=NONE
+  hi WarningMsg guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=standout
+  hi WildMenu guifg=NONE guibg=#6c7086 guisp=NONE gui=NONE ctermfg=NONE ctermbg=59 cterm=NONE term=bold
+  hi csvCol0 guifg=#f38ba8 guibg=NONE guisp=NONE gui=NONE ctermfg=211 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol1 guifg=#fab387 guibg=NONE guisp=NONE gui=NONE ctermfg=216 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol2 guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol3 guifg=#a6e3a1 guibg=NONE guisp=NONE gui=NONE ctermfg=114 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol4 guifg=#89dceb guibg=NONE guisp=NONE gui=NONE ctermfg=116 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol5 guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol6 guifg=#b4befe guibg=NONE guisp=NONE gui=NONE ctermfg=147 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol7 guifg=#cba6f7 guibg=NONE guisp=NONE gui=NONE ctermfg=183 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol8 guifg=#f5c2e7 guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE term=NONE
+  hi debugBreakpoint guifg=#6c7086 guibg=#1e1e2e guisp=NONE gui=NONE ctermfg=59 ctermbg=233 cterm=NONE term=NONE
+  hi debugPC guifg=NONE guibg=#11111b guisp=NONE gui=NONE ctermfg=NONE ctermbg=16 cterm=NONE term=NONE
+  hi diffAdded guifg=#a6e3a1 guibg=NONE guisp=NONE gui=NONE ctermfg=114 ctermbg=NONE cterm=NONE term=NONE
+  hi diffChanged guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi diffFile guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi diffIndexLine guifg=#94e2d5 guibg=NONE guisp=NONE gui=NONE ctermfg=158 ctermbg=NONE cterm=NONE term=NONE
+  hi diffLine guifg=#6c7086 guibg=NONE guisp=NONE gui=NONE ctermfg=59 ctermbg=NONE cterm=NONE term=NONE
+  hi diffNewFile guifg=#fab387 guibg=NONE guisp=NONE gui=NONE ctermfg=216 ctermbg=NONE cterm=NONE term=NONE
+  hi diffOldFile guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
+  hi diffRemoved guifg=#f38ba8 guibg=NONE guisp=NONE gui=NONE ctermfg=211 ctermbg=NONE cterm=NONE term=NONE
+  hi lCursor guifg=#1e1e2e guibg=#f38ba8 guisp=NONE gui=NONE ctermfg=233 ctermbg=211 cterm=NONE term=NONE
+  hi markdownCode guifg=#f2cdcd guibg=NONE guisp=NONE gui=NONE ctermfg=181 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownCodeBlock guifg=#f2cdcd guibg=NONE guisp=NONE gui=NONE ctermfg=181 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH1 guifg=#f38ba8 guibg=NONE guisp=NONE gui=NONE ctermfg=211 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH2 guifg=#fab387 guibg=NONE guisp=NONE gui=NONE ctermfg=216 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH3 guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH4 guifg=#a6e3a1 guibg=NONE guisp=NONE gui=NONE ctermfg=114 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH5 guifg=#74c7ec guibg=NONE guisp=NONE gui=NONE ctermfg=117 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH6 guifg=#b4befe guibg=NONE guisp=NONE gui=NONE ctermfg=147 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownHeadingDelimiter guifg=#fab387 guibg=NONE guisp=NONE gui=bold ctermfg=216 ctermbg=NONE cterm=bold term=bold
+  hi markdownLinkText guifg=#89b4fa guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
+  hi qfFileName guifg=#89b4fa guibg=NONE guisp=NONE gui=NONE ctermfg=111 ctermbg=NONE cterm=NONE term=NONE
+  hi qfLineNr guifg=#f9e2af guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE term=NONE
+
+  if s:tgc || s:t_Co >= 256
+    if s:tgc
+      hi QuickFixLine cterm=NONE
+      hi Visual cterm=NONE
+    endif
+    finish
+  endif
+
+  if s:t_Co >= 16
+    hi Normal ctermfg=White ctermbg=Black cterm=NONE
+    hi Added ctermfg=Green ctermbg=NONE cterm=NONE
+    hi Bold ctermfg=NONE ctermbg=NONE cterm=bold
+    hi Changed ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Character ctermfg=DarkGreen ctermbg=NONE cterm=NONE
+    hi ColorColumn ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi Comment ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Conceal ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Conditional ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Constant ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi CurSearch ctermfg=White ctermbg=Red cterm=NONE
+    hi Cursor ctermfg=Black ctermbg=Yellow cterm=NONE
+    hi CursorColumn ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi CursorIM ctermfg=Black ctermbg=DarkMagenta cterm=NONE
+    hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
+    hi CursorLineNr ctermfg=White ctermbg=NONE cterm=NONE
+    hi Delimiter ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi DiffAdd ctermfg=Black ctermbg=DarkGreen cterm=NONE
+    hi DiffChange ctermfg=Black ctermbg=DarkYellow cterm=NONE
+    hi DiffDelete ctermfg=Black ctermbg=DarkRed cterm=NONE
+    hi DiffText ctermfg=Black ctermbg=DarkCyan cterm=NONE
+    hi Directory ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi EndOfBuffer ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Error ctermfg=Red ctermbg=NONE cterm=NONE
+    hi ErrorMsg ctermfg=Red ctermbg=NONE cterm=bold
+    hi Exception ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi FoldColumn ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Folded ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Function ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Identifier ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi Include ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Italic ctermfg=NONE ctermbg=NONE cterm=italic
+    hi Keyword ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Label ctermfg=DarkCyan ctermbg=NONE cterm=NONE
+    hi LineNr ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Macro ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi MatchParen ctermfg=DarkYellow ctermbg=NONE cterm=bold
+    hi ModeMsg ctermfg=White ctermbg=NONE cterm=bold
+    hi MoreMsg ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi NonText ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Operator ctermfg=Cyan ctermbg=NONE cterm=NONE
+    hi Pmenu ctermfg=Grey ctermbg=DarkGrey cterm=NONE
+    hi PmenuExtra ctermfg=Grey ctermbg=DarkGrey cterm=NONE
+    hi PmenuExtraSel ctermfg=Grey ctermbg=DarkYellow cterm=bold
+    hi PmenuMatch ctermfg=White ctermbg=NONE cterm=bold
+    hi PmenuMatchSel ctermfg=White ctermbg=NONE cterm=bold
+    hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
+    hi PmenuSel ctermfg=NONE ctermbg=DarkYellow cterm=bold
+    hi PmenuThumb ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi PreInsert ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi PreProc ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi Question ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi QuickFixLine ctermfg=Black ctermbg=Magenta cterm=bold
+    hi Removed ctermfg=Red ctermbg=NONE cterm=NONE
+    hi Repeat ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Search ctermfg=White ctermbg=DarkBlue cterm=NONE
+    hi SignColumn ctermfg=Black ctermbg=NONE cterm=NONE
+    hi Special ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi SpellBad ctermfg=Red ctermbg=NONE cterm=underline
+    hi SpellCap ctermfg=Yellow ctermbg=NONE cterm=underline
+    hi SpellLocal ctermfg=Blue ctermbg=NONE cterm=underline
+    hi SpellRare ctermfg=Green ctermbg=NONE cterm=underline
+    hi Statement ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi StatusLine ctermfg=White ctermbg=DarkGrey cterm=bold,reverse
+    hi StatusLineNC ctermfg=Grey ctermbg=DarkGrey cterm=NONE
+    hi StorageClass ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi String ctermfg=Green ctermbg=NONE cterm=NONE
+    hi Structure ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi TabLine ctermfg=Grey ctermbg=Black cterm=NONE
+    hi TabLineFill ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi TabLineSel ctermfg=White ctermbg=Black cterm=NONE
+    hi Tag ctermfg=LightGrey ctermbg=NONE cterm=bold
+    hi Title ctermfg=Blue ctermbg=NONE cterm=bold
+    hi TitleBar ctermfg=White ctermbg=DarkGrey cterm=NONE
+    hi TitleBarNC ctermfg=Grey ctermbg=Black cterm=NONE
+    hi Todo ctermfg=Yellow ctermbg=NONE cterm=bold
+    hi ToolbarButton ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
+    hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
+    hi VertSplit ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Visual ctermfg=Blue ctermbg=Black cterm=bold,reverse
+    hi VisualNOS ctermfg=NONE ctermbg=Black cterm=bold
+    hi WarningMsg ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi WildMenu ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi csvCol0 ctermfg=Red ctermbg=NONE cterm=NONE
+    hi csvCol1 ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi csvCol2 ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi csvCol3 ctermfg=Green ctermbg=NONE cterm=NONE
+    hi csvCol4 ctermfg=Cyan ctermbg=NONE cterm=NONE
+    hi csvCol5 ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi csvCol6 ctermfg=LightGrey ctermbg=NONE cterm=NONE
+    hi csvCol7 ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi csvCol8 ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi debugBreakpoint ctermfg=Grey ctermbg=Black cterm=NONE
+    hi debugPC ctermfg=NONE ctermbg=Black cterm=NONE
+    hi diffAdded ctermfg=Green ctermbg=NONE cterm=NONE
+    hi diffChanged ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi diffFile ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi diffIndexLine ctermfg=DarkGreen ctermbg=NONE cterm=NONE
+    hi diffLine ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi diffNewFile ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi diffOldFile ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi diffRemoved ctermfg=Red ctermbg=NONE cterm=NONE
+    hi lCursor ctermfg=Black ctermbg=Red cterm=NONE
+    hi markdownCode ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi markdownCodeBlock ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi markdownH1 ctermfg=Red ctermbg=NONE cterm=NONE
+    hi markdownH2 ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi markdownH3 ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi markdownH4 ctermfg=Green ctermbg=NONE cterm=NONE
+    hi markdownH5 ctermfg=DarkCyan ctermbg=NONE cterm=NONE
+    hi markdownH6 ctermfg=LightGrey ctermbg=NONE cterm=NONE
+    hi markdownHeadingDelimiter ctermfg=DarkYellow ctermbg=NONE cterm=bold
+    hi markdownLinkText ctermfg=Blue ctermbg=NONE cterm=underline
+    hi qfFileName ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi qfLineNr ctermfg=Yellow ctermbg=NONE cterm=NONE
+    finish
+  endif
+
+  if s:t_Co >= 8
+    hi Normal ctermfg=White ctermbg=Black cterm=NONE
+    hi Added ctermfg=Green ctermbg=NONE cterm=NONE
+    hi Bold ctermfg=NONE ctermbg=NONE cterm=bold
+    hi Changed ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Character ctermfg=DarkGreen ctermbg=NONE cterm=NONE
+    hi ColorColumn ctermfg=Black ctermbg=Grey cterm=NONE
+    hi Comment ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Conceal ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Conditional ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Constant ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi CurSearch ctermfg=White ctermbg=Red cterm=NONE
+    hi Cursor ctermfg=Black ctermbg=Yellow cterm=NONE
+    hi CursorColumn ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi CursorIM ctermfg=Black ctermbg=DarkMagenta cterm=NONE
+    hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
+    hi CursorLineNr ctermfg=White ctermbg=NONE cterm=NONE
+    hi Delimiter ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi DiffAdd ctermfg=Black ctermbg=DarkGreen cterm=NONE
+    hi DiffChange ctermfg=Black ctermbg=DarkYellow cterm=NONE
+    hi DiffDelete ctermfg=Black ctermbg=DarkRed cterm=NONE
+    hi DiffText ctermfg=Black ctermbg=DarkCyan cterm=NONE
+    hi Directory ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi EndOfBuffer ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Error ctermfg=Red ctermbg=NONE cterm=NONE
+    hi ErrorMsg ctermfg=Red ctermbg=NONE cterm=bold
+    hi Exception ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi FoldColumn ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Folded ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Function ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Identifier ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi Include ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Italic ctermfg=NONE ctermbg=NONE cterm=italic
+    hi Keyword ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Label ctermfg=DarkCyan ctermbg=NONE cterm=NONE
+    hi LineNr ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Macro ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi MatchParen ctermfg=DarkYellow ctermbg=NONE cterm=bold
+    hi ModeMsg ctermfg=White ctermbg=NONE cterm=bold
+    hi MoreMsg ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi NonText ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Operator ctermfg=Cyan ctermbg=NONE cterm=NONE
+    hi Pmenu ctermfg=Grey ctermbg=DarkGrey cterm=NONE
+    hi PmenuExtra ctermfg=Grey ctermbg=DarkGrey cterm=NONE
+    hi PmenuExtraSel ctermfg=Grey ctermbg=DarkYellow cterm=bold
+    hi PmenuMatch ctermfg=White ctermbg=NONE cterm=bold
+    hi PmenuMatchSel ctermfg=White ctermbg=NONE cterm=bold
+    hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
+    hi PmenuSel ctermfg=NONE ctermbg=DarkYellow cterm=bold
+    hi PmenuThumb ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi PreInsert ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi PreProc ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi Question ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi QuickFixLine ctermfg=White ctermbg=Magenta cterm=bold
+    hi Removed ctermfg=Red ctermbg=NONE cterm=NONE
+    hi Repeat ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Search ctermfg=White ctermbg=DarkBlue cterm=NONE
+    hi SignColumn ctermfg=Black ctermbg=NONE cterm=NONE
+    hi Special ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi SpellBad ctermfg=Red ctermbg=NONE cterm=underline
+    hi SpellCap ctermfg=Yellow ctermbg=NONE cterm=underline
+    hi SpellLocal ctermfg=Blue ctermbg=NONE cterm=underline
+    hi SpellRare ctermfg=Green ctermbg=NONE cterm=underline
+    hi Statement ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi StatusLine ctermfg=White ctermbg=DarkGrey cterm=bold,reverse
+    hi StatusLineNC ctermfg=Grey ctermbg=DarkGrey cterm=reverse
+    hi StorageClass ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi String ctermfg=Green ctermbg=NONE cterm=NONE
+    hi Structure ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi TabLine ctermfg=Grey ctermbg=Black cterm=NONE
+    hi TabLineFill ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi TabLineSel ctermfg=White ctermbg=DarkGrey cterm=bold
+    hi Tag ctermfg=LightGrey ctermbg=NONE cterm=bold
+    hi Title ctermfg=Blue ctermbg=NONE cterm=bold
+    hi TitleBar ctermfg=White ctermbg=DarkGrey cterm=NONE
+    hi TitleBarNC ctermfg=Grey ctermbg=Black cterm=NONE
+    hi Todo ctermfg=Yellow ctermbg=NONE cterm=bold
+    hi ToolbarButton ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
+    hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
+    hi VertSplit ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Visual ctermfg=Blue ctermbg=Black cterm=bold,reverse
+    hi VisualNOS ctermfg=NONE ctermbg=Black cterm=bold
+    hi WarningMsg ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi WildMenu ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi csvCol0 ctermfg=Red ctermbg=NONE cterm=NONE
+    hi csvCol1 ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi csvCol2 ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi csvCol3 ctermfg=Green ctermbg=NONE cterm=NONE
+    hi csvCol4 ctermfg=Cyan ctermbg=NONE cterm=NONE
+    hi csvCol5 ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi csvCol6 ctermfg=LightGrey ctermbg=NONE cterm=NONE
+    hi csvCol7 ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi csvCol8 ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi debugBreakpoint ctermfg=Grey ctermbg=Black cterm=NONE
+    hi debugPC ctermfg=NONE ctermbg=Black cterm=NONE
+    hi diffAdded ctermfg=Green ctermbg=NONE cterm=NONE
+    hi diffChanged ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi diffFile ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi diffIndexLine ctermfg=DarkGreen ctermbg=NONE cterm=NONE
+    hi diffLine ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi diffNewFile ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi diffOldFile ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi diffRemoved ctermfg=Red ctermbg=NONE cterm=NONE
+    hi lCursor ctermfg=Black ctermbg=Red cterm=NONE
+    hi markdownCode ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi markdownCodeBlock ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi markdownH1 ctermfg=Red ctermbg=NONE cterm=NONE
+    hi markdownH2 ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi markdownH3 ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi markdownH4 ctermfg=Green ctermbg=NONE cterm=NONE
+    hi markdownH5 ctermfg=DarkCyan ctermbg=NONE cterm=NONE
+    hi markdownH6 ctermfg=LightGrey ctermbg=NONE cterm=NONE
+    hi markdownHeadingDelimiter ctermfg=DarkYellow ctermbg=NONE cterm=bold
+    hi markdownLinkText ctermfg=Blue ctermbg=NONE cterm=underline
+    hi qfFileName ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi qfLineNr ctermfg=Yellow ctermbg=NONE cterm=NONE
+    finish
+  endif
+
+  if s:t_Co >= 0
+    hi CursorLineFold term=underline
+    hi CursorLineSign term=underline
+    hi Float term=NONE
+    hi Ignore term=NONE
+    hi IncSearch term=bold,reverse,underline
+    hi Number term=NONE
+    hi SpecialKey term=bold
+    hi StatusLineTerm term=bold,reverse
+    hi StatusLineTermNC term=bold,underline
+    hi Terminal term=NONE
+    finish
+  endif
+
+  finish
+endif
+
+if &background == 'light'
+  hi Normal guifg=#4c4f69 guibg=#eff1f5 guisp=NONE gui=NONE ctermfg=236 ctermbg=231 cterm=NONE term=NONE
+  hi Added guifg=#40a02b guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE term=NONE
+  hi Bold guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold term=bold
+  hi Changed guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi Character guifg=#179299 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE term=NONE
+  hi ColorColumn guifg=NONE guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=NONE ctermbg=255 cterm=NONE term=reverse
+  hi Comment guifg=#7c7f93 guibg=NONE guisp=NONE gui=NONE ctermfg=103 ctermbg=NONE cterm=NONE term=bold
+  hi Conceal guifg=#8c8fa1 guibg=NONE guisp=NONE gui=NONE ctermfg=246 ctermbg=NONE cterm=NONE term=NONE
+  hi Conditional guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
+  hi Constant guifg=#fe640b guibg=NONE guisp=NONE gui=NONE ctermfg=202 ctermbg=NONE cterm=NONE term=NONE
+  hi CurSearch guifg=#4c4f69 guibg=#fc8fc3 guisp=NONE gui=NONE ctermfg=236 ctermbg=211 cterm=NONE term=reverse
+  hi Cursor guifg=#eff1f5 guibg=#dc8a78 guisp=NONE gui=NONE ctermfg=231 ctermbg=174 cterm=NONE term=reverse
+  hi CursorColumn guifg=NONE guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=NONE ctermbg=255 cterm=NONE term=NONE
+  hi CursorIM guifg=#eff1f5 guibg=#8839ef guisp=NONE gui=NONE ctermfg=231 ctermbg=93 cterm=NONE term=NONE
+  hi CursorLine guifg=NONE guibg=#e9ebf1 guisp=NONE gui=NONE ctermfg=NONE ctermbg=253 cterm=NONE term=underline
+  hi CursorLineNr guifg=#7287fd guibg=NONE guisp=NONE gui=NONE ctermfg=69 ctermbg=NONE cterm=NONE term=bold
+  hi Delimiter guifg=#7c7f93 guibg=NONE guisp=NONE gui=NONE ctermfg=103 ctermbg=NONE cterm=NONE term=NONE
+  hi DiffAdd guifg=NONE guibg=#d0e2d1 guisp=NONE gui=NONE ctermfg=NONE ctermbg=152 cterm=NONE term=reverse
+  hi DiffChange guifg=NONE guibg=#e0e7f5 guisp=NONE gui=NONE ctermfg=NONE ctermbg=254 cterm=NONE term=NONE
+  hi DiffDelete guifg=NONE guibg=#eac8d3 guisp=NONE gui=NONE ctermfg=NONE ctermbg=224 cterm=NONE term=reverse
+  hi DiffText guifg=NONE guibg=#b0c7f5 guisp=NONE gui=NONE ctermfg=NONE ctermbg=153 cterm=NONE term=reverse
+  hi Directory guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi EndOfBuffer guifg=#bcc0cc guibg=NONE guisp=NONE gui=NONE ctermfg=250 ctermbg=NONE cterm=NONE term=NONE
+  hi Error guifg=#d20f39 guibg=NONE guisp=NONE gui=NONE ctermfg=161 ctermbg=NONE cterm=NONE term=bold,reverse
+  hi ErrorMsg guifg=#d20f39 guibg=NONE guisp=NONE gui=bold ctermfg=161 ctermbg=NONE cterm=bold term=bold,reverse
+  hi Exception guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
+  hi FoldColumn guifg=#9ca0b0 guibg=NONE guisp=NONE gui=NONE ctermfg=247 ctermbg=NONE cterm=NONE term=NONE
+  hi Folded guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi Function guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi Identifier guifg=#dd7878 guibg=NONE guisp=NONE gui=NONE ctermfg=167 ctermbg=NONE cterm=NONE term=NONE
+  hi Include guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
+  hi Italic guifg=NONE guibg=NONE guisp=NONE gui=italic ctermfg=NONE ctermbg=NONE cterm=italic term=italic
+  hi Keyword guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
+  hi Label guifg=#209fb5 guibg=NONE guisp=NONE gui=NONE ctermfg=38 ctermbg=NONE cterm=NONE term=NONE
+  hi LineNr guifg=#bcc0cc guibg=NONE guisp=NONE gui=NONE ctermfg=250 ctermbg=NONE cterm=NONE term=NONE
+  hi Macro guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
+  hi MatchParen guifg=#fe640b guibg=NONE guisp=NONE gui=bold ctermfg=202 ctermbg=NONE cterm=bold term=bold,underline
+  hi ModeMsg guifg=#4c4f69 guibg=NONE guisp=NONE gui=bold ctermfg=236 ctermbg=NONE cterm=bold term=bold
+  hi MoreMsg guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi NonText guifg=#9ca0b0 guibg=NONE guisp=NONE gui=NONE ctermfg=247 ctermbg=NONE cterm=NONE term=NONE
+  hi Operator guifg=#04a5e5 guibg=NONE guisp=NONE gui=NONE ctermfg=39 ctermbg=NONE cterm=NONE term=NONE
+  hi Pmenu guifg=#7c7f93 guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=103 ctermbg=255 cterm=NONE term=reverse
+  hi PmenuExtra guifg=#9ca0b0 guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=247 ctermbg=255 cterm=NONE term=NONE
+  hi PmenuExtraSel guifg=#9ca0b0 guibg=#ccd0da guisp=NONE gui=bold ctermfg=247 ctermbg=253 cterm=bold term=bold
+  hi PmenuMatch guifg=#4c4f69 guibg=NONE guisp=NONE gui=bold ctermfg=236 ctermbg=NONE cterm=bold term=bold
+  hi PmenuMatchSel guifg=#4c4f69 guibg=NONE guisp=NONE gui=bold ctermfg=236 ctermbg=NONE cterm=bold term=bold
+  hi PmenuSbar guifg=NONE guibg=#ccd0da guisp=NONE gui=NONE ctermfg=NONE ctermbg=253 cterm=NONE term=reverse
+  hi PmenuSel guifg=NONE guibg=#ccd0da guisp=NONE gui=bold ctermfg=NONE ctermbg=253 cterm=bold term=bold
+  hi PmenuThumb guifg=NONE guibg=#9ca0b0 guisp=NONE gui=NONE ctermfg=NONE ctermbg=247 cterm=NONE term=NONE
+  hi PreInsert guifg=#7c7f93 guibg=NONE guisp=NONE gui=NONE ctermfg=103 ctermbg=NONE cterm=NONE term=NONE
+  hi PreProc guifg=#ea76cb guibg=NONE guisp=NONE gui=NONE ctermfg=206 ctermbg=NONE cterm=NONE term=NONE
+  hi Question guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=standout
+  hi QuickFixLine guifg=NONE guibg=#d0baf3 guisp=NONE gui=bold ctermfg=236 ctermbg=183 cterm=bold term=NONE
+  hi Removed guifg=#d20f39 guibg=NONE guisp=NONE gui=NONE ctermfg=161 ctermbg=NONE cterm=NONE term=NONE
+  hi Repeat guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
+  hi Search guifg=#4c4f69 guibg=#a8daf0 guisp=NONE gui=NONE ctermfg=236 ctermbg=117 cterm=NONE term=reverse
+  hi SignColumn guifg=#bcc0cc guibg=NONE guisp=NONE gui=NONE ctermfg=250 ctermbg=NONE cterm=NONE term=reverse
+  hi Special guifg=#ea76cb guibg=NONE guisp=NONE gui=NONE ctermfg=206 ctermbg=NONE cterm=NONE term=NONE
+  hi SpellBad guifg=NONE guibg=NONE guisp=#d20f39 gui=undercurl ctermfg=161 ctermbg=NONE cterm=underline term=underline
+  hi SpellCap guifg=NONE guibg=NONE guisp=#df8e1d gui=undercurl ctermfg=172 ctermbg=NONE cterm=underline term=underline
+  hi SpellLocal guifg=NONE guibg=NONE guisp=#1e66f5 gui=undercurl ctermfg=27 ctermbg=NONE cterm=underline term=underline
+  hi SpellRare guifg=NONE guibg=NONE guisp=#40a02b gui=undercurl ctermfg=34 ctermbg=NONE cterm=underline term=underline
+  hi Statement guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
+  hi StatusLine guifg=#4c4f69 guibg=#dce0e8 guisp=NONE gui=bold ctermfg=236 ctermbg=254 cterm=bold term=bold,reverse
+  hi StatusLineNC guifg=#9ca0b0 guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=247 ctermbg=255 cterm=NONE term=bold,underline
+  hi StorageClass guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
+  hi String guifg=#40a02b guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE term=NONE
+  hi Structure guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
+  hi TabLine guifg=#9ca0b0 guibg=#dce0e8 guisp=NONE gui=NONE ctermfg=247 ctermbg=254 cterm=NONE term=bold,underline
+  hi TabLineFill guifg=NONE guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=NONE ctermbg=255 cterm=NONE term=NONE
+  hi TabLineSel guifg=#4c4f69 guibg=#eff1f5 guisp=NONE gui=NONE ctermfg=236 ctermbg=231 cterm=NONE term=bold,reverse
+  hi Tag guifg=#7287fd guibg=NONE guisp=NONE gui=bold ctermfg=69 ctermbg=NONE cterm=bold term=bold
+  hi Title guifg=#1e66f5 guibg=NONE guisp=NONE gui=bold ctermfg=27 ctermbg=NONE cterm=bold term=NONE
+  hi TitleBar guifg=#4c4f69 guibg=#e6e9ef guisp=NONE gui=NONE ctermfg=236 ctermbg=255 cterm=NONE term=NONE
+  hi TitleBarNC guifg=#9ca0b0 guibg=#dce0e8 guisp=NONE gui=NONE ctermfg=247 ctermbg=254 cterm=NONE term=NONE
+  hi Todo guifg=#dd7878 guibg=NONE guisp=NONE gui=bold ctermfg=167 ctermbg=NONE cterm=bold term=bold,reverse
+  hi ToolbarButton guifg=#dc8a78 guibg=NONE guisp=NONE gui=NONE ctermfg=174 ctermbg=NONE cterm=NONE term=bold,reverse
+  hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
+  hi Type guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
+  hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
+  hi VertSplit guifg=#dce0e8 guibg=NONE guisp=NONE gui=NONE ctermfg=254 ctermbg=NONE cterm=NONE term=NONE
+  hi Visual guifg=NONE guibg=#bcc0cc guisp=NONE gui=NONE ctermfg=250 ctermbg=236 cterm=reverse term=reverse
+  hi VisualNOS guifg=NONE guibg=#bcc0cc guisp=NONE gui=bold ctermfg=NONE ctermbg=250 cterm=bold term=NONE
+  hi WarningMsg guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=standout
+  hi WildMenu guifg=NONE guibg=#9ca0b0 guisp=NONE gui=NONE ctermfg=NONE ctermbg=247 cterm=NONE term=bold
+  hi csvCol0 guifg=#d20f39 guibg=NONE guisp=NONE gui=NONE ctermfg=161 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol1 guifg=#fe640b guibg=NONE guisp=NONE gui=NONE ctermfg=202 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol2 guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol3 guifg=#40a02b guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol4 guifg=#04a5e5 guibg=NONE guisp=NONE gui=NONE ctermfg=39 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol5 guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol6 guifg=#7287fd guibg=NONE guisp=NONE gui=NONE ctermfg=69 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol7 guifg=#8839ef guibg=NONE guisp=NONE gui=NONE ctermfg=93 ctermbg=NONE cterm=NONE term=NONE
+  hi csvCol8 guifg=#ea76cb guibg=NONE guisp=NONE gui=NONE ctermfg=206 ctermbg=NONE cterm=NONE term=NONE
+  hi debugBreakpoint guifg=#9ca0b0 guibg=#eff1f5 guisp=NONE gui=NONE ctermfg=247 ctermbg=231 cterm=NONE term=NONE
+  hi debugPC guifg=NONE guibg=#dce0e8 guisp=NONE gui=NONE ctermfg=NONE ctermbg=254 cterm=NONE term=NONE
+  hi diffAdded guifg=#40a02b guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE term=NONE
+  hi diffChanged guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi diffFile guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi diffIndexLine guifg=#179299 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE term=NONE
+  hi diffLine guifg=#9ca0b0 guibg=NONE guisp=NONE gui=NONE ctermfg=247 ctermbg=NONE cterm=NONE term=NONE
+  hi diffNewFile guifg=#fe640b guibg=NONE guisp=NONE gui=NONE ctermfg=202 ctermbg=NONE cterm=NONE term=NONE
+  hi diffOldFile guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
+  hi diffRemoved guifg=#d20f39 guibg=NONE guisp=NONE gui=NONE ctermfg=161 ctermbg=NONE cterm=NONE term=NONE
+  hi lCursor guifg=#eff1f5 guibg=#d20f39 guisp=NONE gui=NONE ctermfg=231 ctermbg=161 cterm=NONE term=NONE
+  hi markdownCode guifg=#dd7878 guibg=NONE guisp=NONE gui=NONE ctermfg=167 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownCodeBlock guifg=#dd7878 guibg=NONE guisp=NONE gui=NONE ctermfg=167 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH1 guifg=#d20f39 guibg=NONE guisp=NONE gui=NONE ctermfg=161 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH2 guifg=#fe640b guibg=NONE guisp=NONE gui=NONE ctermfg=202 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH3 guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH4 guifg=#40a02b guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH5 guifg=#209fb5 guibg=NONE guisp=NONE gui=NONE ctermfg=38 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownH6 guifg=#7287fd guibg=NONE guisp=NONE gui=NONE ctermfg=69 ctermbg=NONE cterm=NONE term=NONE
+  hi markdownHeadingDelimiter guifg=#fe640b guibg=NONE guisp=NONE gui=bold ctermfg=202 ctermbg=NONE cterm=bold term=bold
+  hi markdownLinkText guifg=#1e66f5 guibg=NONE guisp=NONE gui=underline ctermfg=27 ctermbg=NONE cterm=underline term=underline
+  hi qfFileName guifg=#1e66f5 guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE term=NONE
+  hi qfLineNr guifg=#df8e1d guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
+
+  if s:tgc || s:t_Co >= 256
+    if s:tgc
+      hi QuickFixLine cterm=NONE
+      hi Visual cterm=NONE
+    endif
+    finish
+  endif
+
+  if s:t_Co >= 16
+    hi Normal ctermfg=Black ctermbg=White cterm=NONE
+    hi Added ctermfg=Green ctermbg=NONE cterm=NONE
+    hi Bold ctermfg=NONE ctermbg=NONE cterm=bold
+    hi Changed ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Character ctermfg=DarkGreen ctermbg=NONE cterm=NONE
+    hi ColorColumn ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi Comment ctermfg=Black ctermbg=NONE cterm=NONE
+    hi Conceal ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Conditional ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Constant ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi CurSearch ctermfg=Black ctermbg=Red cterm=NONE
+    hi Cursor ctermfg=White ctermbg=Red cterm=NONE
+    hi CursorColumn ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi CursorIM ctermfg=White ctermbg=DarkMagenta cterm=NONE
+    hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
+    hi CursorLineNr ctermfg=Black ctermbg=NONE cterm=NONE
+    hi Delimiter ctermfg=Black ctermbg=NONE cterm=NONE
+    hi DiffAdd ctermfg=White ctermbg=Green cterm=NONE
+    hi DiffChange ctermfg=White ctermbg=Yellow cterm=NONE
+    hi DiffDelete ctermfg=White ctermbg=Red cterm=NONE
+    hi DiffText ctermfg=White ctermbg=Cyan cterm=NONE
+    hi Directory ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi EndOfBuffer ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Error ctermfg=Red ctermbg=NONE cterm=NONE
+    hi ErrorMsg ctermfg=Red ctermbg=NONE cterm=bold
+    hi Exception ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi FoldColumn ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Folded ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Function ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Identifier ctermfg=DarkRed ctermbg=NONE cterm=NONE
+    hi Include ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Italic ctermfg=NONE ctermbg=NONE cterm=italic
+    hi Keyword ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Label ctermfg=DarkCyan ctermbg=NONE cterm=NONE
+    hi LineNr ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Macro ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi MatchParen ctermfg=DarkYellow ctermbg=NONE cterm=bold
+    hi ModeMsg ctermfg=Black ctermbg=NONE cterm=bold
+    hi MoreMsg ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi NonText ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Operator ctermfg=Cyan ctermbg=NONE cterm=NONE
+    hi Pmenu ctermfg=Black ctermbg=Grey cterm=NONE
+    hi PmenuExtra ctermfg=DarkGrey ctermbg=Grey cterm=NONE
+    hi PmenuExtraSel ctermfg=DarkGrey ctermbg=Grey cterm=bold
+    hi PmenuMatch ctermfg=Black ctermbg=NONE cterm=bold
+    hi PmenuMatchSel ctermfg=Black ctermbg=NONE cterm=bold
+    hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
+    hi PmenuSel ctermfg=NONE ctermbg=Grey cterm=bold
+    hi PmenuThumb ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi PreInsert ctermfg=Black ctermbg=NONE cterm=NONE
+    hi PreProc ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi Question ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi QuickFixLine ctermfg=White ctermbg=Magenta cterm=bold
+    hi Removed ctermfg=Red ctermbg=NONE cterm=NONE
+    hi Repeat ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Search ctermfg=Black ctermbg=Cyan cterm=NONE
+    hi SignColumn ctermfg=White ctermbg=NONE cterm=NONE
+    hi Special ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi SpellBad ctermfg=Red ctermbg=NONE cterm=underline
+    hi SpellCap ctermfg=Yellow ctermbg=NONE cterm=underline
+    hi SpellLocal ctermfg=Blue ctermbg=NONE cterm=underline
+    hi SpellRare ctermfg=Green ctermbg=NONE cterm=underline
+    hi Statement ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi StatusLine ctermfg=Black ctermbg=Grey cterm=bold,reverse
+    hi StatusLineNC ctermfg=DarkGrey ctermbg=Grey cterm=NONE
+    hi StorageClass ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi String ctermfg=Green ctermbg=NONE cterm=NONE
+    hi Structure ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi TabLine ctermfg=DarkGrey ctermbg=Grey cterm=NONE
+    hi TabLineFill ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi TabLineSel ctermfg=Black ctermbg=White cterm=NONE
+    hi Tag ctermfg=DarkBlue ctermbg=NONE cterm=bold
+    hi Title ctermfg=Blue ctermbg=NONE cterm=bold
+    hi TitleBar ctermfg=Black ctermbg=Grey cterm=NONE
+    hi TitleBarNC ctermfg=DarkGrey ctermbg=Grey cterm=NONE
+    hi Todo ctermfg=DarkRed ctermbg=NONE cterm=bold
+    hi ToolbarButton ctermfg=Red ctermbg=NONE cterm=NONE
+    hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
+    hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
+    hi VertSplit ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Visual ctermfg=Blue ctermbg=White cterm=bold,reverse
+    hi VisualNOS ctermfg=NONE ctermbg=White cterm=bold
+    hi WarningMsg ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi WildMenu ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi csvCol0 ctermfg=Red ctermbg=NONE cterm=NONE
+    hi csvCol1 ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi csvCol2 ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi csvCol3 ctermfg=Green ctermbg=NONE cterm=NONE
+    hi csvCol4 ctermfg=Cyan ctermbg=NONE cterm=NONE
+    hi csvCol5 ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi csvCol6 ctermfg=DarkBlue ctermbg=NONE cterm=NONE
+    hi csvCol7 ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi csvCol8 ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi debugBreakpoint ctermfg=DarkGrey ctermbg=White cterm=NONE
+    hi debugPC ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi diffAdded ctermfg=Green ctermbg=NONE cterm=NONE
+    hi diffChanged ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi diffFile ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi diffIndexLine ctermfg=DarkGreen ctermbg=NONE cterm=NONE
+    hi diffLine ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi diffNewFile ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi diffOldFile ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi diffRemoved ctermfg=Red ctermbg=NONE cterm=NONE
+    hi lCursor ctermfg=White ctermbg=Red cterm=NONE
+    hi markdownCode ctermfg=DarkRed ctermbg=NONE cterm=NONE
+    hi markdownCodeBlock ctermfg=DarkRed ctermbg=NONE cterm=NONE
+    hi markdownH1 ctermfg=Red ctermbg=NONE cterm=NONE
+    hi markdownH2 ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi markdownH3 ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi markdownH4 ctermfg=Green ctermbg=NONE cterm=NONE
+    hi markdownH5 ctermfg=DarkCyan ctermbg=NONE cterm=NONE
+    hi markdownH6 ctermfg=DarkBlue ctermbg=NONE cterm=NONE
+    hi markdownHeadingDelimiter ctermfg=DarkYellow ctermbg=NONE cterm=bold
+    hi markdownLinkText ctermfg=Blue ctermbg=NONE cterm=underline
+    hi qfFileName ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi qfLineNr ctermfg=Yellow ctermbg=NONE cterm=NONE
+    finish
+  endif
+
+  if s:t_Co >= 8
+    hi Normal ctermfg=Black ctermbg=White cterm=NONE
+    hi Added ctermfg=Green ctermbg=NONE cterm=NONE
+    hi Bold ctermfg=NONE ctermbg=NONE cterm=bold
+    hi Changed ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Character ctermfg=DarkGreen ctermbg=NONE cterm=NONE
+    hi ColorColumn ctermfg=White ctermbg=DarkGrey cterm=NONE
+    hi Comment ctermfg=Black ctermbg=NONE cterm=NONE
+    hi Conceal ctermfg=Grey ctermbg=NONE cterm=NONE
+    hi Conditional ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Constant ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi CurSearch ctermfg=Black ctermbg=Red cterm=NONE
+    hi Cursor ctermfg=White ctermbg=Red cterm=NONE
+    hi CursorColumn ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi CursorIM ctermfg=White ctermbg=DarkMagenta cterm=NONE
+    hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
+    hi CursorLineNr ctermfg=Black ctermbg=NONE cterm=NONE
+    hi Delimiter ctermfg=Black ctermbg=NONE cterm=NONE
+    hi DiffAdd ctermfg=White ctermbg=Green cterm=NONE
+    hi DiffChange ctermfg=White ctermbg=Yellow cterm=NONE
+    hi DiffDelete ctermfg=White ctermbg=Red cterm=NONE
+    hi DiffText ctermfg=White ctermbg=Cyan cterm=NONE
+    hi Directory ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi EndOfBuffer ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Error ctermfg=Red ctermbg=NONE cterm=NONE
+    hi ErrorMsg ctermfg=Red ctermbg=NONE cterm=bold
+    hi Exception ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi FoldColumn ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Folded ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Function ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi Identifier ctermfg=DarkRed ctermbg=NONE cterm=NONE
+    hi Include ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Italic ctermfg=NONE ctermbg=NONE cterm=italic
+    hi Keyword ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Label ctermfg=DarkCyan ctermbg=NONE cterm=NONE
+    hi LineNr ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Macro ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi MatchParen ctermfg=DarkYellow ctermbg=NONE cterm=bold
+    hi ModeMsg ctermfg=Black ctermbg=NONE cterm=bold
+    hi MoreMsg ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi NonText ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Operator ctermfg=Cyan ctermbg=NONE cterm=NONE
+    hi Pmenu ctermfg=Black ctermbg=Grey cterm=NONE
+    hi PmenuExtra ctermfg=DarkGrey ctermbg=Grey cterm=NONE
+    hi PmenuExtraSel ctermfg=DarkGrey ctermbg=Grey cterm=bold
+    hi PmenuMatch ctermfg=Black ctermbg=NONE cterm=bold
+    hi PmenuMatchSel ctermfg=Black ctermbg=NONE cterm=bold
+    hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
+    hi PmenuSel ctermfg=NONE ctermbg=Grey cterm=bold
+    hi PmenuThumb ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi PreInsert ctermfg=Black ctermbg=NONE cterm=NONE
+    hi PreProc ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi Question ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi QuickFixLine ctermfg=Black ctermbg=Magenta cterm=bold
+    hi Removed ctermfg=Red ctermbg=NONE cterm=NONE
+    hi Repeat ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi Search ctermfg=Black ctermbg=Cyan cterm=NONE
+    hi SignColumn ctermfg=White ctermbg=NONE cterm=NONE
+    hi Special ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi SpellBad ctermfg=Red ctermbg=NONE cterm=underline
+    hi SpellCap ctermfg=Yellow ctermbg=NONE cterm=underline
+    hi SpellLocal ctermfg=Blue ctermbg=NONE cterm=underline
+    hi SpellRare ctermfg=Green ctermbg=NONE cterm=underline
+    hi Statement ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi StatusLine ctermfg=Black ctermbg=Grey cterm=bold,reverse
+    hi StatusLineNC ctermfg=DarkGrey ctermbg=Grey cterm=reverse
+    hi StorageClass ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi String ctermfg=Green ctermbg=NONE cterm=NONE
+    hi Structure ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi TabLine ctermfg=DarkGrey ctermbg=Grey cterm=NONE
+    hi TabLineFill ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi TabLineSel ctermfg=Black ctermbg=Grey cterm=bold
+    hi Tag ctermfg=DarkBlue ctermbg=NONE cterm=bold
+    hi Title ctermfg=Blue ctermbg=NONE cterm=bold
+    hi TitleBar ctermfg=Black ctermbg=Grey cterm=NONE
+    hi TitleBarNC ctermfg=DarkGrey ctermbg=Grey cterm=NONE
+    hi Todo ctermfg=DarkRed ctermbg=NONE cterm=bold
+    hi ToolbarButton ctermfg=Red ctermbg=NONE cterm=NONE
+    hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
+    hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
+    hi VertSplit ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi Visual ctermfg=Blue ctermbg=White cterm=bold,reverse
+    hi VisualNOS ctermfg=NONE ctermbg=White cterm=bold
+    hi WarningMsg ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi WildMenu ctermfg=NONE ctermbg=DarkGrey cterm=NONE
+    hi csvCol0 ctermfg=Red ctermbg=NONE cterm=NONE
+    hi csvCol1 ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi csvCol2 ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi csvCol3 ctermfg=Green ctermbg=NONE cterm=NONE
+    hi csvCol4 ctermfg=Cyan ctermbg=NONE cterm=NONE
+    hi csvCol5 ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi csvCol6 ctermfg=DarkBlue ctermbg=NONE cterm=NONE
+    hi csvCol7 ctermfg=DarkMagenta ctermbg=NONE cterm=NONE
+    hi csvCol8 ctermfg=Magenta ctermbg=NONE cterm=NONE
+    hi debugBreakpoint ctermfg=DarkGrey ctermbg=White cterm=NONE
+    hi debugPC ctermfg=NONE ctermbg=Grey cterm=NONE
+    hi diffAdded ctermfg=Green ctermbg=NONE cterm=NONE
+    hi diffChanged ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi diffFile ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi diffIndexLine ctermfg=DarkGreen ctermbg=NONE cterm=NONE
+    hi diffLine ctermfg=DarkGrey ctermbg=NONE cterm=NONE
+    hi diffNewFile ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi diffOldFile ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi diffRemoved ctermfg=Red ctermbg=NONE cterm=NONE
+    hi lCursor ctermfg=White ctermbg=Red cterm=NONE
+    hi markdownCode ctermfg=DarkRed ctermbg=NONE cterm=NONE
+    hi markdownCodeBlock ctermfg=DarkRed ctermbg=NONE cterm=NONE
+    hi markdownH1 ctermfg=Red ctermbg=NONE cterm=NONE
+    hi markdownH2 ctermfg=DarkYellow ctermbg=NONE cterm=NONE
+    hi markdownH3 ctermfg=Yellow ctermbg=NONE cterm=NONE
+    hi markdownH4 ctermfg=Green ctermbg=NONE cterm=NONE
+    hi markdownH5 ctermfg=DarkCyan ctermbg=NONE cterm=NONE
+    hi markdownH6 ctermfg=DarkBlue ctermbg=NONE cterm=NONE
+    hi markdownHeadingDelimiter ctermfg=DarkYellow ctermbg=NONE cterm=bold
+    hi markdownLinkText ctermfg=Blue ctermbg=NONE cterm=underline
+    hi qfFileName ctermfg=Blue ctermbg=NONE cterm=NONE
+    hi qfLineNr ctermfg=Yellow ctermbg=NONE cterm=NONE
+    finish
+  endif
+
+  if s:t_Co >= 0
+    hi CursorLineFold term=underline
+    hi CursorLineSign term=underline
+    hi Float term=NONE
+    hi Ignore term=NONE
+    hi IncSearch term=bold,reverse,underline
+    hi Number term=NONE
+    hi SpecialKey term=bold
+    hi StatusLineTerm term=bold,reverse
+    hi StatusLineTermNC term=bold,underline
+    hi Terminal term=NONE
+    finish
+  endif
+
+endif
+
+" vim: et ts=8 sw=2 sts=2
diff --git a/runtime/colors/darkblue.vim b/runtime/colors/darkblue.vim
index b490b0599a..b00a05a45a 100644
--- a/runtime/colors/darkblue.vim
+++ b/runtime/colors/darkblue.vim
@@ -3,9 +3,9 @@
 " Author:       Original author Bohdan Vlasyuk 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 14
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -126,7 +126,8 @@ hi ToolbarButton guifg=#ffffff guibg=#0030ff guisp=NONE gui=NONE ctermfg=231 cte
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#90f020 guibg=NONE guisp=NONE gui=NONE ctermfg=118 ctermbg=NONE cterm=NONE term=NONE
 hi Underlined guifg=#80a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#000000 guibg=#808080 guisp=NONE gui=NONE ctermfg=16 ctermbg=102 cterm=NONE term=NONE
+hi VertSplit guifg=#000040 guibg=#c0c0c0 guisp=NONE gui=NONE ctermfg=17 ctermbg=252 cterm=NONE term=NONE
+hi VertSplitNC guifg=#000000 guibg=#808080 guisp=NONE gui=NONE ctermfg=16 ctermbg=102 cterm=NONE term=NONE
 hi Visual guifg=#8080ff guibg=#ffffff guisp=NONE gui=reverse ctermfg=105 ctermbg=231 cterm=reverse term=reverse
 hi VisualNOS guifg=#8080ff guibg=#c0c0c0 guisp=NONE gui=reverse,underline ctermfg=105 ctermbg=252 cterm=reverse,underline term=NONE
 hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -196,7 +197,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=green ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=black ctermbg=darkgrey cterm=NONE
+  hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
+  hi VertSplitNC ctermfg=black ctermbg=darkgrey cterm=NONE
   hi Visual ctermfg=blue ctermbg=white cterm=reverse
   hi VisualNOS ctermfg=blue ctermbg=grey cterm=reverse,underline
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -264,7 +266,8 @@ if s:t_Co >= 8
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
+  hi VertSplit ctermfg=darkblue ctermbg=grey cterm=reverse
+  hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
   hi Visual ctermfg=blue ctermbg=grey cterm=reverse
   hi VisualNOS ctermfg=blue ctermbg=grey cterm=reverse,underline
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/delek.vim b/runtime/colors/delek.vim
index 541b63ec0e..5a19cd26f5 100644
--- a/runtime/colors/delek.vim
+++ b/runtime/colors/delek.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer David Schweikert 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=light
 
@@ -91,7 +91,8 @@ hi ToolbarButton guifg=#ffffff guibg=#bcbcbc guisp=NONE gui=bold ctermfg=231 cte
 hi ToolbarLine guifg=NONE guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=NONE ctermbg=254 cterm=NONE term=reverse
 hi Type guifg=#0000ff guibg=NONE guisp=NONE gui=bold ctermfg=21 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#6a5acd guibg=NONE guisp=NONE gui=underline ctermfg=62 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#e4e4e4 guibg=#00008b guisp=NONE gui=NONE ctermfg=254 ctermbg=18 cterm=NONE term=NONE
+hi VertSplit guifg=#ffff00 guibg=#00008b guisp=NONE gui=NONE ctermfg=226 ctermbg=18 cterm=NONE term=NONE
+hi VertSplitNC guifg=#e4e4e4 guibg=#00008b guisp=NONE gui=NONE ctermfg=254 ctermbg=18 cterm=NONE term=NONE
 hi Visual guifg=#000000 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=16 ctermbg=252 cterm=NONE term=reverse
 hi VisualNOS guifg=NONE guibg=#ee0000 guisp=NONE gui=NONE ctermfg=NONE ctermbg=196 cterm=NONE term=NONE
 hi WarningMsg guifg=#cd00cd guibg=#ffffff guisp=NONE gui=NONE ctermfg=164 ctermbg=231 cterm=NONE term=standout
@@ -164,7 +165,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=grey cterm=NONE
   hi Type ctermfg=blue ctermbg=NONE cterm=bold
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=grey ctermbg=darkblue cterm=NONE
+  hi VertSplit ctermfg=yellow ctermbg=darkblue cterm=NONE
+  hi VertSplitNC ctermfg=grey ctermbg=darkblue cterm=NONE
   hi Visual ctermfg=white ctermbg=darkgrey cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=darkred cterm=NONE
   hi WarningMsg ctermfg=darkmagenta ctermbg=white cterm=NONE
@@ -236,6 +238,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=darkblue ctermbg=darkyellow cterm=reverse
+  hi VertSplitNC ctermfg=darkblue ctermbg=darkyellow cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/desert.vim b/runtime/colors/desert.vim
index 8ce22ea80a..02c6371b69 100644
--- a/runtime/colors/desert.vim
+++ b/runtime/colors/desert.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Hans Fugal 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -91,7 +91,8 @@ hi ToolbarButton guifg=#333333 guibg=#ffde9b guisp=NONE gui=bold ctermfg=236 cte
 hi ToolbarLine guifg=NONE guibg=#666666 guisp=NONE gui=NONE ctermfg=NONE ctermbg=241 cterm=NONE term=reverse
 hi Type guifg=#bdb76b guibg=NONE guisp=NONE gui=bold ctermfg=143 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#75a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#7f7f8c guibg=#c2bfa5 guisp=NONE gui=NONE ctermfg=242 ctermbg=144 cterm=NONE term=NONE
+hi VertSplit guifg=#333333 guibg=#c2bfa5 guisp=NONE gui=NONE ctermfg=236 ctermbg=144 cterm=NONE term=NONE
+hi VertSplitNC guifg=#7f7f8c guibg=#c2bfa5 guisp=NONE gui=NONE ctermfg=242 ctermbg=144 cterm=NONE term=NONE
 hi Visual guifg=#f0e68c guibg=#6b8e24 guisp=NONE gui=NONE ctermfg=186 ctermbg=64 cterm=NONE term=reverse
 hi VisualNOS guifg=#f0e68c guibg=#6dceeb guisp=NONE gui=NONE ctermfg=186 ctermbg=81 cterm=NONE term=NONE
 hi WarningMsg guifg=#cd5c5c guibg=NONE guisp=NONE gui=bold ctermfg=167 ctermbg=NONE cterm=bold term=standout
@@ -167,7 +168,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkyellow ctermbg=NONE cterm=bold
   hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=darkgrey ctermbg=grey cterm=NONE
+  hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
+  hi VertSplitNC ctermfg=darkgrey ctermbg=grey cterm=NONE
   hi Visual ctermfg=white ctermbg=darkgreen cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=bold
@@ -237,6 +239,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkyellow ctermbg=NONE cterm=bold
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
+  hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=bold
diff --git a/runtime/colors/elflord.vim b/runtime/colors/elflord.vim
index 1a8e224658..d9852a2316 100644
--- a/runtime/colors/elflord.vim
+++ b/runtime/colors/elflord.vim
@@ -3,9 +3,9 @@
 " Maintainer:   original maintainer Ron Aaron 
 " URL:          https://www.github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -114,7 +114,8 @@ hi ToolbarButton guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=bold ctermfg=16 cter
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#60ff60 guibg=NONE guisp=NONE gui=bold ctermfg=83 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#80a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#000000 guibg=#00cdcd guisp=NONE gui=NONE ctermfg=16 ctermbg=44 cterm=NONE term=NONE
+hi VertSplit guifg=#000000 guibg=#00ffff guisp=NONE gui=NONE ctermfg=16 ctermbg=51 cterm=NONE term=NONE
+hi VertSplitNC guifg=#000000 guibg=#00cdcd guisp=NONE gui=NONE ctermfg=16 ctermbg=44 cterm=NONE term=NONE
 hi Visual guifg=#000000 guibg=#a9a9a9 guisp=NONE gui=NONE ctermfg=16 ctermbg=145 cterm=NONE term=reverse
 hi VisualNOS guifg=NONE guibg=#000000 guisp=NONE gui=bold,underline ctermfg=NONE ctermbg=16 cterm=underline term=NONE
 hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -188,7 +189,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=green ctermbg=NONE cterm=bold
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=black ctermbg=darkcyan cterm=NONE
+  hi VertSplit ctermfg=black ctermbg=cyan cterm=NONE
+  hi VertSplitNC ctermfg=black ctermbg=darkcyan cterm=NONE
   hi Visual ctermfg=black ctermbg=darkgrey cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -263,6 +265,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=black ctermbg=darkcyan cterm=NONE
+  hi VertSplitNC ctermfg=black ctermbg=darkcyan cterm=NONE
   hi Visual ctermfg=black ctermbg=grey cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/evening.vim b/runtime/colors/evening.vim
index 62a0a8620a..ddfb1f2854 100644
--- a/runtime/colors/evening.vim
+++ b/runtime/colors/evening.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Steven Vertigan 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -59,7 +59,8 @@ hi! link TabPanelFill EndOfBuffer
 hi! link Tag Special
 hi! link Terminal Normal
 hi! link Typedef Type
-hi! link VertSplit StatusLineNC
+hi! link VertSplit StatusLine
+hi! link VertSplitNC StatusLineNC
 hi! link diffBDiffer WarningMsg
 hi! link diffCommon WarningMsg
 hi! link diffDiffer WarningMsg
diff --git a/runtime/colors/habamax.vim b/runtime/colors/habamax.vim
index ed9fba0651..4958ccdb7d 100644
--- a/runtime/colors/habamax.vim
+++ b/runtime/colors/habamax.vim
@@ -3,9 +3,9 @@
 " Author:       Maxim Kim 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 22
+" Last Change:  2026 May 28
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -37,17 +37,17 @@ hi! link TabPanelFill Normal
 hi! link Terminal Normal
 hi! link asciidoctorBlock Special
 hi! link asciidoctorCode String
-hi! link asciidoctorH1Delimiter Statement
-hi! link asciidoctorH2Delimiter Statement
-hi! link asciidoctorH3Delimiter Statement
-hi! link asciidoctorH4Delimiter Statement
-hi! link asciidoctorH5Delimiter Statement
-hi! link asciidoctorH6Delimiter Statement
+hi! link asciidoctorH1 htmlH1
+hi! link asciidoctorH2 htmlH1
+hi! link asciidoctorH3 htmlH1
+hi! link asciidoctorH4 htmlH1
+hi! link asciidoctorH5 htmlH1
+hi! link asciidoctorH6 htmlH1
 hi! link asciidoctorListMarker Constant
 hi! link asciidoctorMacro Special
 hi! link asciidoctorOption Special
 hi! link asciidoctorSetextHeaderDelimiter Statement
-hi! link asciidoctorTitleDelimiter Statement
+hi! link asciidoctorTitle htmlH1
 hi! link javaScriptFunction Statement
 hi! link javaScriptIdentifier Statement
 hi! link lspDiagSignErrorText Removed
@@ -58,11 +58,14 @@ hi! link lspDiagVirtualTextError Removed
 hi! link lspDiagVirtualTextHint Added
 hi! link lspDiagVirtualTextInfo Question
 hi! link lspDiagVirtualTextWarning Changed
+hi! link markdownHeadingRule Special
 hi! link markdownUrl String
+hi! link rstSection htmlH1
 hi! link rubyDefine Statement
 hi! link rubyMacro Statement
 hi! link sqlKeyword Statement
 hi! link sqlSpecial Constant
+hi! link typstMarkupHeading htmlH1
 hi! link vimCommentString Comment
 hi! link vimOper Normal
 hi! link vimParenSep Normal
@@ -107,12 +110,15 @@ hi PmenuExtra guifg=#767676 guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=243 ctermb
 hi PmenuExtraSel guifg=#9e9e9e guibg=#585858 guisp=NONE gui=NONE ctermfg=247 ctermbg=240 cterm=NONE term=NONE
 hi PmenuKind guifg=#5f8787 guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=66 ctermbg=237 cterm=NONE term=NONE
 hi PmenuKindSel guifg=#5f8787 guibg=#585858 guisp=NONE gui=NONE ctermfg=66 ctermbg=240 cterm=NONE term=NONE
-hi PmenuMatch guifg=#ffaf5f guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=215 ctermbg=237 cterm=NONE term=NONE
-hi PmenuMatchSel guifg=#ffaf5f guibg=#585858 guisp=NONE gui=NONE ctermfg=215 ctermbg=240 cterm=NONE term=NONE
-hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
+hi PmenuMatch guifg=#ffaf5f guibg=NONE guisp=NONE gui=NONE ctermfg=215 ctermbg=NONE cterm=NONE term=NONE
+hi PmenuMatchSel guifg=#ffaf5f guibg=NONE guisp=NONE gui=NONE ctermfg=215 ctermbg=NONE cterm=NONE term=NONE
+hi PmenuSbar guifg=NONE guibg=#585858 guisp=NONE gui=NONE ctermfg=NONE ctermbg=240 cterm=NONE term=reverse
 hi PmenuSel guifg=NONE guibg=#585858 guisp=NONE gui=NONE ctermfg=NONE ctermbg=240 cterm=NONE term=bold
 hi PmenuShadow guifg=#767676 guibg=#121212 guisp=NONE gui=NONE ctermfg=243 ctermbg=233 cterm=NONE term=NONE
 hi PmenuThumb guifg=NONE guibg=#767676 guisp=NONE gui=NONE ctermfg=NONE ctermbg=243 cterm=NONE term=NONE
+hi Popup guifg=NONE guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=NONE ctermbg=237 cterm=NONE term=NONE
+hi PopupBorder guifg=#767676 guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=243 ctermbg=237 cterm=NONE term=NONE
+hi PopupTitle guifg=#9e9e9e guibg=#3a3a3a guisp=NONE gui=bold ctermfg=247 ctermbg=237 cterm=bold term=bold
 hi PreProc guifg=#af875f guibg=NONE guisp=NONE gui=NONE ctermfg=137 ctermbg=NONE cterm=NONE term=NONE
 hi Question guifg=#d7af87 guibg=NONE guisp=NONE gui=NONE ctermfg=180 ctermbg=NONE cterm=NONE term=standout
 hi QuickFixLine guifg=NONE guibg=#4f2f4f guisp=NONE gui=NONE ctermfg=251 ctermbg=53 cterm=NONE term=NONE
@@ -136,17 +142,19 @@ hi Title guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cte
 hi TitleBar guifg=#dadada guibg=#3c3c3c guisp=NONE gui=NONE ctermfg=253 ctermbg=237 cterm=NONE term=NONE
 hi TitleBarNC guifg=#767676 guibg=#2c2c2c guisp=NONE gui=NONE ctermfg=243 ctermbg=236 cterm=NONE term=NONE
 hi Todo guifg=#dadada guibg=NONE guisp=NONE gui=bold ctermfg=253 ctermbg=NONE cterm=bold term=bold,reverse
-hi ToolbarButton guifg=#767676 guibg=#1c1c1c guisp=NONE gui=bold,reverse ctermfg=243 ctermbg=234 cterm=bold,reverse term=bold,reverse
+hi ToolbarButton guifg=#5f8787 guibg=#1c1c1c guisp=NONE gui=bold,reverse ctermfg=66 ctermbg=234 cterm=bold,reverse term=bold,reverse
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#5f87af guibg=NONE guisp=NONE gui=NONE ctermfg=67 ctermbg=NONE cterm=NONE term=NONE
 hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
+hi VertSplit guifg=#9e9e9e guibg=#9e9e9e guisp=NONE gui=NONE ctermfg=247 ctermbg=247 cterm=NONE term=NONE
+hi VertSplitNC guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
 hi Visual guifg=NONE guibg=#1a3456 guisp=NONE gui=NONE ctermfg=109 ctermbg=234 cterm=reverse term=reverse
 hi VisualNOS guifg=#1c1c1c guibg=#5f8787 guisp=NONE gui=NONE ctermfg=234 ctermbg=66 cterm=NONE term=NONE
 hi WarningMsg guifg=#d75f87 guibg=NONE guisp=NONE gui=NONE ctermfg=168 ctermbg=NONE cterm=NONE term=standout
 hi WildMenu guifg=#1c1c1c guibg=#d7af87 guisp=NONE gui=bold ctermfg=234 ctermbg=180 cterm=bold term=bold
 hi debugBreakpoint guifg=#1c1c1c guibg=#d75f87 guisp=NONE gui=NONE ctermfg=234 ctermbg=168 cterm=NONE term=NONE
 hi debugPC guifg=#1c1c1c guibg=#5f87af guisp=NONE gui=NONE ctermfg=234 ctermbg=67 cterm=NONE term=NONE
+hi htmlH1 guifg=#dadada guibg=NONE guisp=NONE gui=bold ctermfg=253 ctermbg=NONE cterm=bold term=bold
 hi lCursor guifg=#1c1c1c guibg=#5fff00 guisp=NONE gui=NONE ctermfg=234 ctermbg=82 cterm=NONE term=NONE
 
 if s:tgc || s:t_Co >= 256
@@ -202,12 +210,15 @@ if s:t_Co >= 16
   hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
   hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
   hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
-  hi PmenuMatch ctermfg=NONE ctermbg=NONE cterm=bold
-  hi PmenuMatchSel ctermfg=darkyellow ctermbg=NONE cterm=bold
-  hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
-  hi PmenuSel ctermfg=darkyellow ctermbg=NONE cterm=reverse
+  hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
+  hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
+  hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=reverse
+  hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
   hi PmenuShadow ctermfg=NONE ctermbg=NONE cterm=NONE
-  hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=reverse
+  hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
+  hi Popup ctermfg=NONE ctermbg=NONE cterm=reverse
+  hi PopupBorder ctermfg=NONE ctermbg=NONE cterm=reverse
+  hi PopupTitle ctermfg=NONE ctermbg=NONE cterm=bold,reverse
   hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
   hi Question ctermfg=yellow ctermbg=NONE cterm=NONE
   hi QuickFixLine ctermfg=black ctermbg=magenta cterm=NONE
@@ -231,17 +242,19 @@ if s:t_Co >= 16
   hi TitleBar ctermfg=white ctermbg=black cterm=NONE
   hi TitleBarNC ctermfg=darkgray ctermbg=black cterm=NONE
   hi Todo ctermfg=white ctermbg=NONE cterm=bold
-  hi ToolbarButton ctermfg=darkgray ctermbg=black cterm=bold,reverse
+  hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=reverse
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=darkgray ctermbg=darkgray cterm=NONE
+  hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
+  hi VertSplitNC ctermfg=darkgray ctermbg=darkgray cterm=NONE
   hi Visual ctermfg=cyan ctermbg=black cterm=reverse
   hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
   hi WildMenu ctermfg=black ctermbg=yellow cterm=bold
   hi debugBreakpoint ctermfg=black ctermbg=red cterm=NONE
   hi debugPC ctermfg=black ctermbg=darkblue cterm=NONE
+  hi htmlH1 ctermfg=white ctermbg=NONE cterm=bold
   hi lCursor ctermfg=black ctermbg=green cterm=NONE
   finish
 endif
@@ -284,12 +297,15 @@ if s:t_Co >= 8
   hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
   hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
   hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
-  hi PmenuMatch ctermfg=NONE ctermbg=NONE cterm=bold
-  hi PmenuMatchSel ctermfg=darkyellow ctermbg=NONE cterm=bold
-  hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
-  hi PmenuSel ctermfg=darkyellow ctermbg=NONE cterm=reverse
+  hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
+  hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
+  hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=reverse
+  hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
   hi PmenuShadow ctermfg=NONE ctermbg=NONE cterm=NONE
-  hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=reverse
+  hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
+  hi Popup ctermfg=NONE ctermbg=NONE cterm=reverse
+  hi PopupBorder ctermfg=NONE ctermbg=NONE cterm=reverse
+  hi PopupTitle ctermfg=NONE ctermbg=NONE cterm=bold,reverse
   hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
   hi Question ctermfg=darkyellow ctermbg=NONE cterm=NONE
   hi QuickFixLine ctermfg=black ctermbg=magenta cterm=NONE
@@ -313,17 +329,19 @@ if s:t_Co >= 8
   hi TitleBar ctermfg=white ctermbg=black cterm=NONE
   hi TitleBarNC ctermfg=darkgray ctermbg=black cterm=NONE
   hi Todo ctermfg=white ctermbg=NONE cterm=bold
-  hi ToolbarButton ctermfg=gray ctermbg=black cterm=reverse
+  hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=reverse
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
+  hi VertSplitNC ctermfg=gray ctermbg=gray cterm=NONE
   hi Visual ctermfg=darkcyan ctermbg=black cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=reverse
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
   hi WildMenu ctermfg=black ctermbg=darkyellow cterm=NONE
   hi debugBreakpoint ctermfg=darkcyan ctermbg=NONE cterm=reverse
   hi debugPC ctermfg=darkblue ctermbg=NONE cterm=reverse
+  hi htmlH1 ctermfg=white ctermbg=NONE cterm=bold
   hi lCursor ctermfg=black ctermbg=green cterm=NONE
   finish
 endif
diff --git a/runtime/colors/industry.vim b/runtime/colors/industry.vim
index 5093293ae6..0bd318a620 100644
--- a/runtime/colors/industry.vim
+++ b/runtime/colors/industry.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Shian Lee.
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -92,7 +92,8 @@ hi Todo guifg=#005fff guibg=#ffff00 guisp=NONE gui=NONE ctermfg=27 ctermbg=226 c
 hi ToolbarLine guifg=NONE guibg=#303030 guisp=NONE gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE term=reverse
 hi Type guifg=#00ff00 guibg=NONE guisp=NONE gui=bold ctermfg=46 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#87afff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#000000 guibg=#6c6c6c guisp=NONE gui=NONE ctermfg=16 ctermbg=242 cterm=NONE term=NONE
+hi VertSplit guifg=#000000 guibg=#dadada guisp=NONE gui=NONE ctermfg=16 ctermbg=253 cterm=NONE term=NONE
+hi VertSplitNC guifg=#000000 guibg=#6c6c6c guisp=NONE gui=NONE ctermfg=16 ctermbg=242 cterm=NONE term=NONE
 hi Visual guifg=#dadada guibg=#6c6c6c guisp=NONE gui=NONE ctermfg=253 ctermbg=242 cterm=NONE term=reverse
 hi VisualNOS guifg=#dadada guibg=#6c6c6c guisp=NONE gui=NONE ctermfg=253 ctermbg=242 cterm=NONE term=NONE
 hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=bold ctermfg=196 ctermbg=NONE cterm=bold term=standout
@@ -165,7 +166,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=white ctermbg=darkgrey cterm=NONE
   hi Type ctermfg=green ctermbg=NONE cterm=bold
   hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
+  hi VertSplit ctermfg=black ctermbg=white cterm=NONE
+  hi VertSplitNC ctermfg=black ctermbg=grey cterm=NONE
   hi Visual ctermfg=black ctermbg=grey cterm=NONE
   hi VisualNOS ctermfg=white ctermbg=grey cterm=NONE
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=bold
@@ -238,6 +240,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
+  hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=black ctermbg=grey cterm=NONE
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/koehler.vim b/runtime/colors/koehler.vim
index 8268f4e54c..8247692cea 100644
--- a/runtime/colors/koehler.vim
+++ b/runtime/colors/koehler.vim
@@ -3,9 +3,9 @@
 " Maintainer:   original maintainer Ron Aaron 
 " URL:          https://www.github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 27
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -114,7 +114,8 @@ hi ToolbarButton guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=bold ctermfg=16 cter
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#60ff60 guibg=NONE guisp=NONE gui=bold ctermfg=83 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#add8e6 guibg=NONE guisp=NONE gui=bold,underline ctermfg=153 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#0000ff guibg=#e5e5e5 guisp=NONE gui=NONE ctermfg=21 ctermbg=254 cterm=NONE term=NONE
+hi VertSplit guifg=#0000ff guibg=#ffffff guisp=NONE gui=NONE ctermfg=21 ctermbg=231 cterm=NONE term=NONE
+hi VertSplitNC guifg=#0000ff guibg=#e5e5e5 guisp=NONE gui=NONE ctermfg=21 ctermbg=254 cterm=NONE term=NONE
 hi Visual guifg=NONE guibg=#666666 guisp=NONE gui=reverse ctermfg=NONE ctermbg=59 cterm=reverse term=reverse
 hi VisualNOS guifg=NONE guibg=#000000 guisp=NONE gui=bold,underline ctermfg=NONE ctermbg=16 cterm=underline term=NONE
 hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -183,7 +184,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=green ctermbg=NONE cterm=bold
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=darkblue ctermbg=grey cterm=NONE
+  hi VertSplit ctermfg=darkblue ctermbg=white cterm=NONE
+  hi VertSplitNC ctermfg=darkblue ctermbg=grey cterm=NONE
   hi Visual ctermfg=NONE ctermbg=darkgrey cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -251,6 +253,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=darkblue ctermbg=grey cterm=NONE
+  hi VertSplitNC ctermfg=darkblue ctermbg=grey cterm=NONE
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/lunaperche.vim b/runtime/colors/lunaperche.vim
index af745e2cf2..15cd28c3ec 100644
--- a/runtime/colors/lunaperche.vim
+++ b/runtime/colors/lunaperche.vim
@@ -2,9 +2,9 @@
 " Description:  White(perchè il sole)/Black(la luna perchè?) background colorscheme.
 " Author:       Maxim Kim 
 " URL:          https://www.github.com/vim/colorschemes
-" Last Change:  2025 Oct 22
+" Last Change:  2026 Apr 30
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 hi clear
 let g:colors_name = 'lunaperche'
@@ -138,8 +138,8 @@ if &background == 'dark'
   hi PmenuExtraSel guifg=#767676 guibg=#4e4e4e guisp=NONE gui=NONE ctermfg=243 ctermbg=239 cterm=NONE term=NONE
   hi PmenuKind guifg=#ff5f5f guibg=#303030 guisp=NONE gui=NONE ctermfg=203 ctermbg=236 cterm=NONE term=NONE
   hi PmenuKindSel guifg=#ff5f5f guibg=#4e4e4e guisp=NONE gui=NONE ctermfg=203 ctermbg=239 cterm=NONE term=NONE
-  hi PmenuMatch guifg=#d787d7 guibg=#303030 guisp=NONE gui=NONE ctermfg=176 ctermbg=236 cterm=NONE term=NONE
-  hi PmenuMatchSel guifg=#d787d7 guibg=#4e4e4e guisp=NONE gui=NONE ctermfg=176 ctermbg=239 cterm=NONE term=NONE
+  hi PmenuMatch guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=NONE
+  hi PmenuMatchSel guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=NONE
   hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
   hi PmenuSel guifg=NONE guibg=#4e4e4e guisp=NONE gui=NONE ctermfg=NONE ctermbg=239 cterm=NONE term=bold
   hi PmenuShadow guifg=#767676 guibg=#121212 guisp=NONE gui=NONE ctermfg=243 ctermbg=233 cterm=NONE term=NONE
@@ -171,7 +171,8 @@ if &background == 'dark'
   hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
   hi Type guifg=#5fd75f guibg=NONE guisp=NONE gui=NONE ctermfg=77 ctermbg=NONE cterm=NONE term=NONE
   hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
-  hi VertSplit guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
+  hi VertSplit guifg=#c6c6c6 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=251 ctermbg=251 cterm=NONE term=NONE
+  hi VertSplitNC guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
   hi Visual guifg=NONE guibg=#104070 guisp=NONE gui=NONE ctermfg=32 ctermbg=16 cterm=reverse term=reverse
   hi VisualNOS guifg=#000000 guibg=#5fafaf guisp=NONE gui=NONE ctermfg=16 ctermbg=73 cterm=NONE term=NONE
   hi WarningMsg guifg=#ff5f5f guibg=NONE guisp=NONE gui=NONE ctermfg=203 ctermbg=NONE cterm=NONE term=standout
@@ -266,7 +267,8 @@ if &background == 'dark'
     hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
     hi Type ctermfg=green ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-    hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
+    hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
+    hi VertSplitNC ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
     hi Visual ctermfg=darkblue ctermbg=black cterm=reverse
     hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
     hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -354,6 +356,7 @@ if &background == 'dark'
     hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
     hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
+    hi VertSplitNC ctermfg=grey ctermbg=grey cterm=NONE
     hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
     hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
     hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
@@ -426,8 +429,8 @@ if &background == 'light'
   hi PmenuExtraSel guifg=#767676 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=243 ctermbg=251 cterm=NONE term=NONE
   hi PmenuKind guifg=#af0000 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=124 ctermbg=254 cterm=NONE term=NONE
   hi PmenuKindSel guifg=#af0000 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=124 ctermbg=251 cterm=NONE term=NONE
-  hi PmenuMatch guifg=#af00af guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=127 ctermbg=254 cterm=NONE term=NONE
-  hi PmenuMatchSel guifg=#af00af guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=127 ctermbg=251 cterm=NONE term=NONE
+  hi PmenuMatch guifg=#af00af guibg=NONE guisp=NONE gui=NONE ctermfg=127 ctermbg=NONE cterm=NONE term=NONE
+  hi PmenuMatchSel guifg=#af00af guibg=NONE guisp=NONE gui=NONE ctermfg=127 ctermbg=NONE cterm=NONE term=NONE
   hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
   hi PmenuSel guifg=NONE guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=NONE ctermbg=251 cterm=NONE term=bold
   hi PmenuShadow guifg=#767676 guibg=#303030 guisp=NONE gui=NONE ctermfg=243 ctermbg=236 cterm=NONE term=NONE
@@ -459,7 +462,8 @@ if &background == 'light'
   hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
   hi Type guifg=#008700 guibg=NONE guisp=NONE gui=NONE ctermfg=28 ctermbg=NONE cterm=NONE term=NONE
   hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
-  hi VertSplit guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
+  hi VertSplit guifg=#000000 guibg=#000000 guisp=NONE gui=NONE ctermfg=16 ctermbg=16 cterm=NONE term=NONE
+  hi VertSplitNC guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
   hi Visual guifg=NONE guibg=#bfdfff guisp=NONE gui=NONE ctermfg=67 ctermbg=231 cterm=reverse term=reverse
   hi VisualNOS guifg=#ffffff guibg=#008787 guisp=NONE gui=NONE ctermfg=231 ctermbg=30 cterm=NONE term=NONE
   hi WarningMsg guifg=#d70000 guibg=NONE guisp=NONE gui=bold ctermfg=160 ctermbg=NONE cterm=bold term=standout
@@ -524,8 +528,8 @@ if &background == 'light'
     hi PmenuExtraSel ctermfg=black ctermbg=darkcyan cterm=NONE
     hi PmenuKind ctermfg=darkred ctermbg=grey cterm=NONE
     hi PmenuKindSel ctermfg=darkred ctermbg=darkcyan cterm=NONE
-    hi PmenuMatch ctermfg=darkmagenta ctermbg=grey cterm=NONE
-    hi PmenuMatchSel ctermfg=darkmagenta ctermbg=darkcyan cterm=NONE
+    hi PmenuMatch ctermfg=darkmagenta ctermbg=NONE cterm=NONE
+    hi PmenuMatchSel ctermfg=darkmagenta ctermbg=NONE cterm=NONE
     hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
     hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
     hi PmenuShadow ctermfg=NONE ctermbg=NONE cterm=NONE
@@ -557,7 +561,8 @@ if &background == 'light'
     hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
     hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-    hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
+    hi VertSplit ctermfg=black ctermbg=black cterm=NONE
+    hi VertSplitNC ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
     hi Visual ctermfg=white ctermbg=darkblue cterm=NONE
     hi VisualNOS ctermfg=black ctermbg=cyan cterm=NONE
     hi WarningMsg ctermfg=red ctermbg=NONE cterm=bold
@@ -648,6 +653,7 @@ if &background == 'light'
     hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
     hi VertSplit ctermfg=black ctermbg=black cterm=NONE
+    hi VertSplitNC ctermfg=black ctermbg=black cterm=NONE
     hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
     hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
     hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/morning.vim b/runtime/colors/morning.vim
index aee04b0326..07b849ecbe 100644
--- a/runtime/colors/morning.vim
+++ b/runtime/colors/morning.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Bram Moolenaar 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=light
 
@@ -92,7 +92,8 @@ hi ToolbarButton guifg=NONE guibg=#bcbcbc guisp=NONE gui=bold ctermfg=NONE cterm
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#2e8b57 guibg=NONE guisp=NONE gui=bold ctermfg=29 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#6a5acd guibg=NONE guisp=NONE gui=underline ctermfg=62 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#bcbcbc guibg=#000000 guisp=NONE gui=NONE ctermfg=250 ctermbg=16 cterm=NONE term=NONE
+hi VertSplit guifg=#eeeeee guibg=#000000 guisp=NONE gui=NONE ctermfg=255 ctermbg=16 cterm=NONE term=NONE
+hi VertSplitNC guifg=#bcbcbc guibg=#000000 guisp=NONE gui=NONE ctermfg=250 ctermbg=16 cterm=NONE term=NONE
 hi Visual guifg=NONE guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=NONE ctermbg=252 cterm=NONE term=reverse
 hi VisualNOS guifg=NONE guibg=#0000ff guisp=NONE gui=NONE ctermfg=NONE ctermbg=21 cterm=NONE term=NONE
 hi WarningMsg guifg=#6a0dad guibg=NONE guisp=NONE gui=bold ctermfg=55 ctermbg=NONE cterm=bold term=standout
@@ -162,7 +163,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
   hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=darkgrey ctermbg=black cterm=NONE
+  hi VertSplit ctermfg=white ctermbg=black cterm=NONE
+  hi VertSplitNC ctermfg=darkgrey ctermbg=black cterm=NONE
   hi Visual ctermfg=NONE ctermbg=white cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=blue cterm=NONE
   hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=bold
@@ -231,6 +233,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=black ctermbg=gray cterm=reverse
+  hi VertSplitNC ctermfg=black ctermbg=gray cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/murphy.vim b/runtime/colors/murphy.vim
index a5610fc584..21c48e3032 100644
--- a/runtime/colors/murphy.vim
+++ b/runtime/colors/murphy.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Ron Aaron .
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -93,7 +93,8 @@ hi ToolbarButton guifg=#ffffff guibg=#444444 guisp=NONE gui=bold ctermfg=231 cte
 hi ToolbarLine guifg=NONE guibg=#303030 guisp=NONE gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE term=reverse
 hi Type guifg=#bcbcbc guibg=NONE guisp=NONE gui=NONE ctermfg=250 ctermbg=NONE cterm=NONE term=NONE
 hi Underlined guifg=#00afaf guibg=NONE guisp=NONE gui=underline ctermfg=37 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#ffffff guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=231 ctermbg=237 cterm=NONE term=NONE
+hi VertSplit guifg=#ffffff guibg=#00008b guisp=NONE gui=NONE ctermfg=231 ctermbg=18 cterm=NONE term=NONE
+hi VertSplitNC guifg=#ffffff guibg=#3a3a3a guisp=NONE gui=NONE ctermfg=231 ctermbg=237 cterm=NONE term=NONE
 hi Visual guifg=#ffffff guibg=#005f00 guisp=NONE gui=NONE ctermfg=231 ctermbg=22 cterm=NONE term=reverse
 hi VisualNOS guifg=#ffffff guibg=#005f00 guisp=NONE gui=NONE ctermfg=231 ctermbg=22 cterm=NONE term=NONE
 hi WarningMsg guifg=#ffa700 guibg=NONE guisp=NONE gui=bold ctermfg=214 ctermbg=NONE cterm=bold term=standout
@@ -163,7 +164,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
   hi Type ctermfg=grey ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=darkcyan ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=white ctermbg=darkgrey cterm=NONE
+  hi VertSplit ctermfg=white ctermbg=darkblue cterm=NONE
+  hi VertSplitNC ctermfg=white ctermbg=darkgrey cterm=NONE
   hi Visual ctermfg=white ctermbg=darkgreen cterm=NONE
   hi VisualNOS ctermfg=white ctermbg=darkgreen cterm=NONE
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=bold
@@ -231,7 +233,8 @@ if s:t_Co >= 8
   hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
   hi Type ctermfg=grey ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
+  hi VertSplit ctermfg=darkblue ctermbg=grey cterm=reverse
+  hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=reverse,underline
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=bold
diff --git a/runtime/colors/pablo.vim b/runtime/colors/pablo.vim
index 8829c0700d..4b85040417 100644
--- a/runtime/colors/pablo.vim
+++ b/runtime/colors/pablo.vim
@@ -3,9 +3,9 @@
 " Maintainer:   Original maintainerRon Aaron 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -92,7 +92,8 @@ hi ToolbarButton guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=bold ctermfg=16 cter
 hi ToolbarLine guifg=NONE guibg=#000000 guisp=NONE gui=NONE ctermfg=NONE ctermbg=16 cterm=NONE term=reverse
 hi Type guifg=#00c000 guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE term=NONE
 hi Underlined guifg=#80a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#000000 guibg=#ffffff guisp=NONE gui=NONE ctermfg=16 ctermbg=231 cterm=NONE term=NONE
+hi VertSplit guifg=#ffff00 guibg=#0000ee guisp=NONE gui=NONE ctermfg=226 ctermbg=20 cterm=NONE term=NONE
+hi VertSplitNC guifg=#000000 guibg=#ffffff guisp=NONE gui=NONE ctermfg=16 ctermbg=231 cterm=NONE term=NONE
 hi Visual guifg=#00008b guibg=#a9a9a9 guisp=NONE gui=NONE ctermfg=20 ctermbg=248 cterm=NONE term=reverse
 hi VisualNOS guifg=NONE guibg=#000000 guisp=NONE gui=bold,underline ctermfg=NONE ctermbg=16 cterm=underline term=NONE
 hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -163,7 +164,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=darkgreen ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=black ctermbg=white cterm=NONE
+  hi VertSplit ctermfg=yellow ctermbg=darkblue cterm=NONE
+  hi VertSplitNC ctermfg=black ctermbg=white cterm=NONE
   hi Visual ctermfg=darkblue ctermbg=grey cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -234,7 +236,8 @@ if s:t_Co >= 8
   hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
+  hi VertSplit ctermfg=darkblue ctermbg=grey cterm=reverse
+  hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=black ctermbg=grey cterm=NONE
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/peachpuff.vim b/runtime/colors/peachpuff.vim
index cff502b496..a433eee7ad 100644
--- a/runtime/colors/peachpuff.vim
+++ b/runtime/colors/peachpuff.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer David Ne\v{c}as (Yeti) 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 14
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=light
 
@@ -94,7 +94,8 @@ hi ToolbarButton guifg=#ffdab9 guibg=#737373 guisp=NONE gui=bold ctermfg=223 cte
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#2e8b57 guibg=NONE guisp=NONE gui=bold ctermfg=29 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#6a5acd guibg=NONE guisp=NONE gui=underline ctermfg=62 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#ffdab9 guibg=#737373 guisp=NONE gui=NONE ctermfg=223 ctermbg=243 cterm=NONE term=NONE
+hi VertSplit guifg=#ffdab9 guibg=#000000 guisp=NONE gui=NONE ctermfg=223 ctermbg=16 cterm=NONE term=NONE
+hi VertSplitNC guifg=#ffdab9 guibg=#737373 guisp=NONE gui=NONE ctermfg=223 ctermbg=243 cterm=NONE term=NONE
 hi Visual guifg=#000000 guibg=#cccccc guisp=NONE gui=NONE ctermfg=16 ctermbg=252 cterm=NONE term=reverse
 hi VisualNOS guifg=NONE guibg=#406090 guisp=NONE gui=NONE ctermfg=NONE ctermbg=25 cterm=NONE term=NONE
 hi WarningMsg guifg=#cd00cd guibg=#ffdab9 guisp=NONE gui=bold ctermfg=164 ctermbg=223 cterm=bold term=standout
@@ -168,7 +169,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
   hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=white ctermbg=darkgrey cterm=NONE
+  hi VertSplit ctermfg=white ctermbg=black cterm=NONE
+  hi VertSplitNC ctermfg=white ctermbg=darkgrey cterm=NONE
   hi Visual ctermfg=black ctermbg=grey cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=darkgrey cterm=NONE
   hi WarningMsg ctermfg=darkmagenta ctermbg=white cterm=bold
@@ -241,6 +243,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=black ctermbg=gray cterm=reverse
+  hi VertSplitNC ctermfg=black ctermbg=gray cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=bold
diff --git a/runtime/colors/retrobox.vim b/runtime/colors/retrobox.vim
index afe53ee5a5..59c06855a6 100644
--- a/runtime/colors/retrobox.vim
+++ b/runtime/colors/retrobox.vim
@@ -2,9 +2,9 @@
 " Description:  Retro groove color scheme similar to gruvbox originally designed by morhetz 
 " Author:       Maxim Kim , ported from gruvbox8 of Lifepillar 
 " URL:          https://www.github.com/vim/colorschemes
-" Last Change:  2025 Oct 22
+" Last Change:  2026 Apr 30
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 hi clear
 let g:colors_name = 'retrobox'
@@ -79,8 +79,8 @@ if &background == 'dark'
   hi PmenuExtraSel guifg=#a89984 guibg=#504945 guisp=NONE gui=NONE ctermfg=102 ctermbg=239 cterm=NONE term=NONE
   hi PmenuKind guifg=#fb5944 guibg=#3c3836 guisp=NONE gui=NONE ctermfg=203 ctermbg=237 cterm=NONE term=NONE
   hi PmenuKindSel guifg=#fb5944 guibg=#504945 guisp=NONE gui=NONE ctermfg=203 ctermbg=239 cterm=NONE term=NONE
-  hi PmenuMatch guifg=#d3869b guibg=#3c3836 guisp=NONE gui=NONE ctermfg=175 ctermbg=237 cterm=NONE term=NONE
-  hi PmenuMatchSel guifg=#d3869b guibg=#504945 guisp=NONE gui=NONE ctermfg=175 ctermbg=239 cterm=NONE term=NONE
+  hi PmenuMatch guifg=#d3869b guibg=NONE guisp=NONE gui=NONE ctermfg=175 ctermbg=NONE cterm=NONE term=NONE
+  hi PmenuMatchSel guifg=#d3869b guibg=NONE guisp=NONE gui=NONE ctermfg=175 ctermbg=NONE cterm=NONE term=NONE
   hi PmenuSbar guifg=NONE guibg=#3c3836 guisp=NONE gui=NONE ctermfg=NONE ctermbg=237 cterm=NONE term=reverse
   hi PmenuSel guifg=NONE guibg=#504945 guisp=NONE gui=NONE ctermfg=NONE ctermbg=239 cterm=NONE term=bold
   hi PmenuShadow guifg=#a89984 guibg=#121212 guisp=NONE gui=NONE ctermfg=102 ctermbg=233 cterm=NONE term=NONE
@@ -118,7 +118,8 @@ if &background == 'dark'
   hi Type guifg=#fabd2f guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE term=NONE
   hi Typedef guifg=#fabd2f guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE term=NONE
   hi Underlined guifg=#83a598 guibg=NONE guisp=NONE gui=underline ctermfg=109 ctermbg=NONE cterm=underline term=underline
-  hi VertSplit guifg=#303030 guibg=#1c1c1c guisp=NONE gui=NONE ctermfg=236 ctermbg=234 cterm=NONE term=NONE
+  hi VertSplit guifg=#504945 guibg=#1c1c1c guisp=NONE gui=NONE ctermfg=239 ctermbg=234 cterm=NONE term=NONE
+  hi VertSplitNC guifg=#303030 guibg=#1c1c1c guisp=NONE gui=NONE ctermfg=236 ctermbg=234 cterm=NONE term=NONE
   hi Visual guifg=NONE guibg=#2a405a guisp=NONE gui=NONE ctermfg=109 ctermbg=234 cterm=reverse term=reverse
   hi WarningMsg guifg=#fb5944 guibg=NONE guisp=NONE gui=bold ctermfg=203 ctermbg=NONE cterm=bold term=standout
   hi WildMenu guifg=#83a598 guibg=#504945 guisp=NONE gui=bold ctermfg=109 ctermbg=239 cterm=bold term=bold
@@ -221,7 +222,8 @@ if &background == 'dark'
     hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
     hi Typedef ctermfg=Yellow ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=Blue ctermbg=NONE cterm=underline
-    hi VertSplit ctermfg=Black ctermbg=gray cterm=NONE
+    hi VertSplit ctermfg=gray ctermbg=Black cterm=NONE
+    hi VertSplitNC ctermfg=gray ctermbg=Black cterm=NONE
     hi Visual ctermfg=Blue ctermbg=Black cterm=reverse
     hi WarningMsg ctermfg=Red ctermbg=NONE cterm=bold
     hi WildMenu ctermfg=White ctermbg=Black cterm=bold
@@ -316,7 +318,8 @@ if &background == 'dark'
     hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
     hi Typedef ctermfg=Yellow ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=Blue ctermbg=NONE cterm=underline
-    hi VertSplit ctermfg=Black ctermbg=gray cterm=NONE
+    hi VertSplit ctermfg=gray ctermbg=Black cterm=NONE
+    hi VertSplitNC ctermfg=gray ctermbg=Black cterm=NONE
     hi Visual ctermfg=Black ctermbg=Blue cterm=NONE
     hi WarningMsg ctermfg=Red ctermbg=NONE cterm=bold
     hi WildMenu ctermfg=Blue ctermbg=DarkGray cterm=bold
@@ -389,8 +392,8 @@ if &background == 'light'
   hi PmenuExtraSel guifg=#3c3836 guibg=#bdae93 guisp=NONE gui=NONE ctermfg=237 ctermbg=144 cterm=NONE term=NONE
   hi PmenuKind guifg=#9d0006 guibg=#e5d4b1 guisp=NONE gui=NONE ctermfg=124 ctermbg=187 cterm=NONE term=NONE
   hi PmenuKindSel guifg=#9d0006 guibg=#bdae93 guisp=NONE gui=NONE ctermfg=124 ctermbg=144 cterm=NONE term=NONE
-  hi PmenuMatch guifg=#8f3f71 guibg=#e5d4b1 guisp=NONE gui=NONE ctermfg=126 ctermbg=187 cterm=NONE term=NONE
-  hi PmenuMatchSel guifg=#8f3f71 guibg=#bdae93 guisp=NONE gui=NONE ctermfg=126 ctermbg=144 cterm=NONE term=NONE
+  hi PmenuMatch guifg=#8f3f71 guibg=NONE guisp=NONE gui=NONE ctermfg=126 ctermbg=NONE cterm=NONE term=NONE
+  hi PmenuMatchSel guifg=#8f3f71 guibg=NONE guisp=NONE gui=NONE ctermfg=126 ctermbg=NONE cterm=NONE term=NONE
   hi PmenuSbar guifg=NONE guibg=#e5d4b1 guisp=NONE gui=NONE ctermfg=NONE ctermbg=187 cterm=NONE term=reverse
   hi PmenuSel guifg=NONE guibg=#bdae93 guisp=NONE gui=NONE ctermfg=NONE ctermbg=144 cterm=NONE term=bold
   hi PmenuShadow guifg=#7c6f64 guibg=#303030 guisp=NONE gui=NONE ctermfg=243 ctermbg=236 cterm=NONE term=NONE
@@ -428,7 +431,8 @@ if &background == 'light'
   hi Type guifg=#b57614 guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
   hi Typedef guifg=#b57614 guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE term=NONE
   hi Underlined guifg=#076678 guibg=NONE guisp=NONE gui=underline ctermfg=23 ctermbg=NONE cterm=underline term=underline
-  hi VertSplit guifg=#bdae93 guibg=#fbf1c7 guisp=NONE gui=NONE ctermfg=144 ctermbg=230 cterm=NONE term=NONE
+  hi VertSplit guifg=#7c6f64 guibg=#fbf1c7 guisp=NONE gui=NONE ctermfg=243 ctermbg=230 cterm=NONE term=NONE
+  hi VertSplitNC guifg=#bdae93 guibg=#fbf1c7 guisp=NONE gui=NONE ctermfg=144 ctermbg=230 cterm=NONE term=NONE
   hi Visual guifg=NONE guibg=#b0d0d0 guisp=NONE gui=NONE ctermfg=23 ctermbg=230 cterm=reverse term=reverse
   hi WarningMsg guifg=#9d0006 guibg=NONE guisp=NONE gui=bold ctermfg=124 ctermbg=NONE cterm=bold term=standout
   hi WildMenu guifg=#076678 guibg=#e5d4b1 guisp=NONE gui=bold ctermfg=23 ctermbg=187 cterm=bold term=bold
@@ -531,7 +535,8 @@ if &background == 'light'
     hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
     hi Typedef ctermfg=Yellow ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=Blue ctermbg=NONE cterm=underline
-    hi VertSplit ctermfg=DarkGray ctermbg=Grey cterm=NONE
+    hi VertSplit ctermfg=DarkGray ctermbg=White cterm=NONE
+    hi VertSplitNC ctermfg=DarkGray ctermbg=White cterm=NONE
     hi Visual ctermfg=Blue ctermbg=White cterm=reverse
     hi WarningMsg ctermfg=Red ctermbg=NONE cterm=bold
     hi WildMenu ctermfg=Black ctermbg=White cterm=bold
@@ -626,7 +631,8 @@ if &background == 'light'
     hi Type ctermfg=Yellow ctermbg=NONE cterm=NONE
     hi Typedef ctermfg=Yellow ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=Blue ctermbg=NONE cterm=underline
-    hi VertSplit ctermfg=White ctermbg=Black cterm=NONE
+    hi VertSplit ctermfg=Black ctermbg=White cterm=NONE
+    hi VertSplitNC ctermfg=Black ctermbg=White cterm=NONE
     hi Visual ctermfg=White ctermbg=Blue cterm=NONE
     hi WarningMsg ctermfg=Red ctermbg=NONE cterm=bold
     hi WildMenu ctermfg=Blue ctermbg=Grey cterm=bold
diff --git a/runtime/colors/shine.vim b/runtime/colors/shine.vim
index 4493bd4b2f..bbd3c9c27a 100644
--- a/runtime/colors/shine.vim
+++ b/runtime/colors/shine.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer is Yasuhiro Matsumoto 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 27
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=light
 
@@ -96,7 +96,8 @@ hi ToolbarButton guifg=NONE guibg=#a8a8a8 guisp=NONE gui=bold ctermfg=NONE cterm
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#2e8b57 guibg=NONE guisp=NONE gui=bold ctermfg=29 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#6a0dad guibg=NONE guisp=NONE gui=underline ctermfg=55 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#a8a8a8 guibg=#a8a8a8 guisp=NONE gui=NONE ctermfg=248 ctermbg=248 cterm=NONE term=NONE
+hi VertSplit guifg=#000000 guibg=#000000 guisp=NONE gui=NONE ctermfg=16 ctermbg=16 cterm=NONE term=NONE
+hi VertSplitNC guifg=#a8a8a8 guibg=#a8a8a8 guisp=NONE gui=NONE ctermfg=248 ctermbg=248 cterm=NONE term=NONE
 hi Visual guifg=#000000 guibg=#a8a8a8 guisp=NONE gui=NONE ctermfg=16 ctermbg=248 cterm=NONE term=reverse
 hi VisualNOS guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=underline term=NONE
 hi WarningMsg guifg=#6a0dad guibg=#ffffff guisp=NONE gui=NONE ctermfg=55 ctermbg=231 cterm=NONE term=standout
@@ -170,7 +171,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
   hi Underlined ctermfg=darkmagenta ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
+  hi VertSplit ctermfg=black ctermbg=black cterm=NONE
+  hi VertSplitNC ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
   hi Visual ctermfg=black ctermbg=darkgrey cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkmagenta ctermbg=white cterm=NONE
@@ -243,6 +245,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=black ctermbg=grey cterm=reverse
+  hi VertSplitNC ctermfg=black ctermbg=grey cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkmagenta ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/slate.vim b/runtime/colors/slate.vim
index 9795408bb6..ce9d26900c 100644
--- a/runtime/colors/slate.vim
+++ b/runtime/colors/slate.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Ralph Amissah 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 27
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -93,7 +93,8 @@ hi ToolbarButton guifg=#262626 guibg=#d7d787 guisp=NONE gui=NONE ctermfg=235 cte
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#5f87d7 guibg=NONE guisp=NONE gui=bold ctermfg=68 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#5f87d7 guibg=NONE guisp=NONE gui=underline ctermfg=68 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#666666 guibg=#afaf87 guisp=NONE gui=NONE ctermfg=241 ctermbg=144 cterm=NONE term=NONE
+hi VertSplit guifg=#000000 guibg=#afaf87 guisp=NONE gui=NONE ctermfg=16 ctermbg=144 cterm=NONE term=NONE
+hi VertSplitNC guifg=#666666 guibg=#afaf87 guisp=NONE gui=NONE ctermfg=241 ctermbg=144 cterm=NONE term=NONE
 hi Visual guifg=#d7d787 guibg=#5f8700 guisp=NONE gui=NONE ctermfg=186 ctermbg=64 cterm=NONE term=reverse
 hi VisualNOS guifg=#d7d787 guibg=#5f8700 guisp=NONE gui=NONE ctermfg=186 ctermbg=64 cterm=NONE term=NONE
 hi WarningMsg guifg=#ff8787 guibg=NONE guisp=NONE gui=NONE ctermfg=210 ctermbg=NONE cterm=NONE term=standout
@@ -173,7 +174,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=blue ctermbg=NONE cterm=bold
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=darkgrey ctermbg=grey cterm=NONE
+  hi VertSplit ctermfg=white ctermbg=black cterm=reverse
+  hi VertSplitNC ctermfg=darkgrey ctermbg=grey cterm=NONE
   hi Visual ctermfg=yellow ctermbg=darkgreen cterm=NONE
   hi VisualNOS ctermfg=darkmagenta ctermbg=darkgreen cterm=NONE
   hi WarningMsg ctermfg=cyan ctermbg=NONE cterm=NONE
@@ -247,6 +249,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkblue ctermbg=NONE cterm=bold
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
+  hi VertSplitNC ctermfg=grey ctermbg=black cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=darkmagenta ctermbg=darkgreen cterm=underline
   hi WarningMsg ctermfg=darkcyan ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/torte.vim b/runtime/colors/torte.vim
index 6f53c7d958..e23324fb48 100644
--- a/runtime/colors/torte.vim
+++ b/runtime/colors/torte.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Thorsten Maerz 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 24
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -93,7 +93,8 @@ hi ToolbarButton guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=bold ctermfg=16 cter
 hi ToolbarLine guifg=NONE guibg=#000000 guisp=NONE gui=NONE ctermfg=NONE ctermbg=16 cterm=NONE term=reverse
 hi Type guifg=#60ff60 guibg=NONE guisp=NONE gui=NONE ctermfg=83 ctermbg=NONE cterm=NONE term=NONE
 hi Underlined guifg=#80a0ff guibg=NONE guisp=NONE gui=underline ctermfg=111 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=NONE ctermfg=16 ctermbg=254 cterm=NONE term=NONE
+hi VertSplit guifg=#000000 guibg=#0000ee guisp=NONE gui=NONE ctermfg=16 ctermbg=20 cterm=NONE term=NONE
+hi VertSplitNC guifg=#000000 guibg=#e5e5e5 guisp=NONE gui=NONE ctermfg=16 ctermbg=254 cterm=NONE term=NONE
 hi Visual guifg=#000000 guibg=#a9a9a9 guisp=NONE gui=bold ctermfg=16 ctermbg=248 cterm=NONE term=reverse
 hi VisualNOS guifg=NONE guibg=#000000 guisp=NONE gui=bold,underline ctermfg=NONE ctermbg=16 cterm=underline term=NONE
 hi WarningMsg guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE term=standout
@@ -164,7 +165,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
   hi Type ctermfg=green ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
+  hi VertSplit ctermfg=black ctermbg=darkblue cterm=NONE
+  hi VertSplitNC ctermfg=black ctermbg=grey cterm=NONE
   hi Visual ctermfg=black ctermbg=grey cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -233,7 +235,8 @@ if s:t_Co >= 8
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkgreen ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=black ctermbg=grey cterm=NONE
+  hi VertSplit ctermfg=grey ctermbg=darkblue cterm=NONE
+  hi VertSplitNC ctermfg=black ctermbg=grey cterm=NONE
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=black cterm=underline
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/unokai.vim b/runtime/colors/unokai.vim
index 60cacf0b56..7c85cba568 100644
--- a/runtime/colors/unokai.vim
+++ b/runtime/colors/unokai.vim
@@ -2,9 +2,9 @@
 " Description:  Color scheme similar to Monokai originally created by Wimer Hazenberg for TextMate
 " Author:       k-37 <60838818+k-37@users.noreply.github.com>
 " URL:          https://github.com/vim/colorschemes
-" Last Change:  2025 Oct 08
+" Last Change:  2026 May 07
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=dark
 
@@ -108,7 +108,8 @@ hi ToolbarButton guifg=#74705d guibg=#f8f8f2 guisp=NONE gui=bold,reverse ctermfg
 hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
 hi Type guifg=#fd971f guibg=NONE guisp=NONE gui=bold ctermfg=208 ctermbg=NONE cterm=bold term=NONE
 hi Underlined guifg=#66d9ef guibg=NONE guisp=NONE gui=underline ctermfg=81 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#74705d guibg=#74705d guisp=NONE gui=NONE ctermfg=244 ctermbg=244 cterm=NONE term=NONE
+hi VertSplit guifg=#bababa guibg=#bababa guisp=NONE gui=NONE ctermfg=250 ctermbg=250 cterm=NONE term=NONE
+hi VertSplitNC guifg=#74705d guibg=#74705d guisp=NONE gui=NONE ctermfg=244 ctermbg=244 cterm=NONE term=NONE
 hi Visual guifg=#a1efe4 guibg=#282923 guisp=NONE gui=reverse ctermfg=116 ctermbg=235 cterm=reverse term=reverse
 hi VisualNOS guifg=#282923 guibg=#80beb5 guisp=NONE gui=NONE ctermfg=235 ctermbg=73 cterm=NONE term=NONE
 hi WarningMsg guifg=#f92672 guibg=NONE guisp=NONE gui=NONE ctermfg=197 ctermbg=NONE cterm=NONE term=standout
@@ -206,7 +207,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
   hi Type ctermfg=darkyellow ctermbg=NONE cterm=bold
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=darkgray ctermbg=darkgray cterm=NONE
+  hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
+  hi VertSplitNC ctermfg=darkgray ctermbg=darkgray cterm=NONE
   hi Visual ctermfg=cyan ctermbg=black cterm=reverse
   hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
   hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
@@ -298,6 +300,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkyellow ctermbg=NONE cterm=bold
   hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
+  hi VertSplitNC ctermfg=gray ctermbg=gray cterm=NONE
   hi Visual ctermfg=black ctermbg=darkcyan cterm=NONE
   hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
   hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/wildcharm.vim b/runtime/colors/wildcharm.vim
index fd52078dc4..4009437288 100644
--- a/runtime/colors/wildcharm.vim
+++ b/runtime/colors/wildcharm.vim
@@ -3,9 +3,9 @@
 " Author:       Maxim Kim 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 22
+" Last Change:  2026 Apr 30
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 hi clear
 let g:colors_name = 'wildcharm'
@@ -67,8 +67,8 @@ if &background == 'dark'
   hi PmenuExtraSel guifg=#767676 guibg=#585858 guisp=NONE gui=NONE ctermfg=243 ctermbg=240 cterm=NONE term=NONE
   hi PmenuKind guifg=#ff5f87 guibg=#303030 guisp=NONE gui=NONE ctermfg=204 ctermbg=236 cterm=NONE term=NONE
   hi PmenuKindSel guifg=#ff5f87 guibg=#585858 guisp=NONE gui=NONE ctermfg=204 ctermbg=240 cterm=NONE term=NONE
-  hi PmenuMatch guifg=#d787d7 guibg=#303030 guisp=NONE gui=NONE ctermfg=176 ctermbg=236 cterm=NONE term=NONE
-  hi PmenuMatchSel guifg=#d787d7 guibg=#585858 guisp=NONE gui=NONE ctermfg=176 ctermbg=240 cterm=NONE term=NONE
+  hi PmenuMatch guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=NONE
+  hi PmenuMatchSel guifg=#d787d7 guibg=NONE guisp=NONE gui=NONE ctermfg=176 ctermbg=NONE cterm=NONE term=NONE
   hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
   hi PmenuSel guifg=NONE guibg=#585858 guisp=NONE gui=NONE ctermfg=NONE ctermbg=240 cterm=NONE term=bold
   hi PmenuShadow guifg=#767676 guibg=#121212 guisp=NONE gui=NONE ctermfg=243 ctermbg=233 cterm=NONE term=NONE
@@ -100,7 +100,8 @@ if &background == 'dark'
   hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
   hi Type guifg=#ffaf00 guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE term=NONE
   hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
-  hi VertSplit guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
+  hi VertSplit guifg=#9e9e9e guibg=#9e9e9e guisp=NONE gui=NONE ctermfg=247 ctermbg=247 cterm=NONE term=NONE
+  hi VertSplitNC guifg=#767676 guibg=#767676 guisp=NONE gui=NONE ctermfg=243 ctermbg=243 cterm=NONE term=NONE
   hi Visual guifg=NONE guibg=#204060 guisp=NONE gui=NONE ctermfg=81 ctermbg=16 cterm=reverse term=reverse
   hi VisualNOS guifg=#000000 guibg=#00afff guisp=NONE gui=NONE ctermfg=16 ctermbg=39 cterm=NONE term=NONE
   hi WarningMsg guifg=#ffaf00 guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE term=standout
@@ -191,7 +192,8 @@ if &background == 'dark'
     hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
     hi Type ctermfg=yellow ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-    hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
+    hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
+    hi VertSplitNC ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
     hi Visual ctermfg=cyan ctermbg=black cterm=reverse
     hi VisualNOS ctermfg=black ctermbg=blue cterm=NONE
     hi WarningMsg ctermfg=yellow ctermbg=NONE cterm=NONE
@@ -270,6 +272,7 @@ if &background == 'dark'
     hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
     hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
+    hi VertSplitNC ctermfg=grey ctermbg=grey cterm=NONE
     hi Visual ctermfg=darkblue ctermbg=black cterm=reverse
     hi VisualNOS ctermfg=black ctermbg=darkblue cterm=NONE
     hi WarningMsg ctermfg=darkyellow ctermbg=NONE cterm=NONE
@@ -331,13 +334,13 @@ if &background == 'light'
   hi Pmenu guifg=NONE guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=NONE ctermbg=254 cterm=NONE term=reverse
   hi PmenuBorder guifg=#808080 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=240 ctermbg=254 cterm=NONE term=NONE
   hi PmenuExtra guifg=#808080 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=240 ctermbg=254 cterm=NONE term=NONE
-  hi PmenuExtraSel guifg=#808080 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=240 ctermbg=252 cterm=NONE term=NONE
+  hi PmenuExtraSel guifg=#808080 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=240 ctermbg=251 cterm=NONE term=NONE
   hi PmenuKind guifg=#d70000 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=160 ctermbg=254 cterm=NONE term=NONE
-  hi PmenuKindSel guifg=#d70000 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=160 ctermbg=252 cterm=NONE term=NONE
-  hi PmenuMatch guifg=#870087 guibg=#e4e4e4 guisp=NONE gui=NONE ctermfg=90 ctermbg=254 cterm=NONE term=NONE
-  hi PmenuMatchSel guifg=#870087 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=90 ctermbg=252 cterm=NONE term=NONE
+  hi PmenuKindSel guifg=#d70000 guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=160 ctermbg=251 cterm=NONE term=NONE
+  hi PmenuMatch guifg=#870087 guibg=NONE guisp=NONE gui=NONE ctermfg=90 ctermbg=NONE cterm=NONE term=NONE
+  hi PmenuMatchSel guifg=#870087 guibg=NONE guisp=NONE gui=NONE ctermfg=90 ctermbg=NONE cterm=NONE term=NONE
   hi PmenuSbar guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
-  hi PmenuSel guifg=NONE guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=NONE ctermbg=252 cterm=NONE term=bold
+  hi PmenuSel guifg=NONE guibg=#c6c6c6 guisp=NONE gui=NONE ctermfg=NONE ctermbg=251 cterm=NONE term=bold
   hi PmenuShadow guifg=#808080 guibg=#303030 guisp=NONE gui=NONE ctermfg=240 ctermbg=236 cterm=NONE term=NONE
   hi PmenuThumb guifg=NONE guibg=#808080 guisp=NONE gui=NONE ctermfg=NONE ctermbg=240 cterm=NONE term=NONE
   hi PreProc guifg=#008787 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE term=NONE
@@ -367,7 +370,8 @@ if &background == 'light'
   hi ToolbarLine guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE term=reverse
   hi Type guifg=#af5f00 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE term=NONE
   hi Underlined guifg=NONE guibg=NONE guisp=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline term=underline
-  hi VertSplit guifg=#d0d0d0 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=252 ctermbg=252 cterm=NONE term=NONE
+  hi VertSplit guifg=#5f5f5f guibg=#5f5f5f guisp=NONE gui=NONE ctermfg=59 ctermbg=59 cterm=NONE term=NONE
+  hi VertSplitNC guifg=#d0d0d0 guibg=#d0d0d0 guisp=NONE gui=NONE ctermfg=252 ctermbg=252 cterm=NONE term=NONE
   hi Visual guifg=NONE guibg=#bfdfff guisp=NONE gui=NONE ctermfg=32 ctermbg=231 cterm=reverse term=reverse
   hi VisualNOS guifg=#ffffff guibg=#005faf guisp=NONE gui=NONE ctermfg=231 ctermbg=25 cterm=NONE term=NONE
   hi WarningMsg guifg=#af5f00 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE term=standout
@@ -458,7 +462,8 @@ if &background == 'light'
     hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
     hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
-    hi VertSplit ctermfg=lightgrey ctermbg=lightgrey cterm=NONE
+    hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
+    hi VertSplitNC ctermfg=lightgrey ctermbg=lightgrey cterm=NONE
     hi Visual ctermfg=blue ctermbg=white cterm=reverse
     hi VisualNOS ctermfg=white ctermbg=darkblue cterm=NONE
     hi WarningMsg ctermfg=darkyellow ctermbg=NONE cterm=NONE
@@ -537,6 +542,7 @@ if &background == 'light'
     hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
     hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
     hi VertSplit ctermfg=black ctermbg=black cterm=NONE
+    hi VertSplitNC ctermfg=black ctermbg=black cterm=NONE
     hi Visual ctermfg=darkblue ctermbg=grey cterm=reverse
     hi VisualNOS ctermfg=black ctermbg=darkblue cterm=NONE
     hi WarningMsg ctermfg=darkyellow ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/zellner.vim b/runtime/colors/zellner.vim
index dc24f9b3a6..1ef6333055 100644
--- a/runtime/colors/zellner.vim
+++ b/runtime/colors/zellner.vim
@@ -4,9 +4,9 @@
 " Maintainer:   Original maintainer Ron Aaron 
 " URL:          https://github.com/vim/colorschemes
 " License:      Same as Vim
-" Last Change:  2025 Oct 08
+" Last Change:  2026 Apr 27
 
-" Generated by Colortemplate v3.0.0-beta10
+" Generated by Colortemplate v3.0.0-rc1
 
 set background=light
 
@@ -93,7 +93,8 @@ hi ToolbarButton guifg=NONE guibg=#a9a9a9 guisp=NONE gui=bold ctermfg=NONE cterm
 hi ToolbarLine guifg=NONE guibg=#d3d3d3 guisp=NONE gui=NONE ctermfg=NONE ctermbg=252 cterm=NONE term=reverse
 hi Type guifg=#0000ff guibg=NONE guisp=NONE gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE term=NONE
 hi Underlined guifg=#6a5acd guibg=NONE guisp=NONE gui=underline ctermfg=62 ctermbg=NONE cterm=underline term=underline
-hi VertSplit guifg=#ffffff guibg=#000000 guisp=NONE gui=NONE ctermfg=231 ctermbg=16 cterm=NONE term=NONE
+hi VertSplit guifg=#ffff00 guibg=#a9a9a9 guisp=NONE gui=NONE ctermfg=226 ctermbg=248 cterm=NONE term=NONE
+hi VertSplitNC guifg=#ffffff guibg=#000000 guisp=NONE gui=NONE ctermfg=231 ctermbg=16 cterm=NONE term=NONE
 hi Visual guifg=#000000 guibg=#ffff00 guisp=NONE gui=NONE ctermfg=16 ctermbg=226 cterm=NONE term=reverse
 hi VisualNOS guifg=NONE guibg=#ff0000 guisp=NONE gui=NONE ctermfg=NONE ctermbg=196 cterm=NONE term=NONE
 hi WarningMsg guifg=#a020f0 guibg=#ffffff guisp=NONE gui=NONE ctermfg=129 ctermbg=231 cterm=NONE term=standout
@@ -166,7 +167,8 @@ if s:t_Co >= 16
   hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
   hi Type ctermfg=blue ctermbg=NONE cterm=NONE
   hi Underlined ctermfg=blue ctermbg=NONE cterm=underline
-  hi VertSplit ctermfg=white ctermbg=black cterm=NONE
+  hi VertSplit ctermfg=yellow ctermbg=darkgrey cterm=NONE
+  hi VertSplitNC ctermfg=white ctermbg=black cterm=NONE
   hi Visual ctermfg=black ctermbg=yellow cterm=NONE
   hi VisualNOS ctermfg=NONE ctermbg=red cterm=NONE
   hi WarningMsg ctermfg=darkmagenta ctermbg=white cterm=NONE
@@ -238,6 +240,7 @@ if s:t_Co >= 8
   hi Type ctermfg=darkblue ctermbg=NONE cterm=bold
   hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
   hi VertSplit ctermfg=black ctermbg=gray cterm=reverse
+  hi VertSplitNC ctermfg=black ctermbg=gray cterm=reverse
   hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
   hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
   hi WarningMsg ctermfg=darkmagenta ctermbg=black cterm=NONE
diff --git a/runtime/compiler/bean_check.vim b/runtime/compiler/bean_check.vim
new file mode 100644
index 0000000000..45f6b0b4d2
--- /dev/null
+++ b/runtime/compiler/bean_check.vim
@@ -0,0 +1,22 @@
+" Vim compiler file
+" Compiler: bean-check
+" Maintainer: Nathan Grigg
+" Latest Revision: 2017-03-20
+
+if exists('g:current_compiler')
+    finish
+endif
+let g:current_compiler = 'bean_check'
+
+let s:cpo_save = &cpoptions
+set cpoptions-=C
+
+CompilerSet makeprg=bean-check\ %
+" File:line: message
+" Skip blank lines and indented lines.
+CompilerSet errorformat=%-G
+CompilerSet errorformat+=%f:%l:\ %m
+CompilerSet errorformat+=%-G\ %.%#
+
+let &cpoptions = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/biome.vim b/runtime/compiler/biome.vim
new file mode 100644
index 0000000000..57a80d4b1b
--- /dev/null
+++ b/runtime/compiler/biome.vim
@@ -0,0 +1,23 @@
+" Vim compiler file
+" Compiler:     Biome (= linter for JavaScript, TypeScript, JSX, TSX, JSON,
+"               JSONC, HTML, Vue, Svelte, Astro, CSS, GraphQL and GritQL files)
+" Maintainer:   @Konfekt
+" Last Change:  2025 Nov 12
+if exists("current_compiler") | finish | endif
+let current_compiler = "biome"
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+exe 'CompilerSet makeprg=' .. escape('biome check --linter-enabled=true --formatter-enabled=false --assist-enabled=false --reporter=github '
+      \ .. get(b:, 'biome_makeprg_params', get(g:, 'biome_makeprg_params', '')), ' \|"')
+
+CompilerSet errorformat=::%trror%.%#file=%f\\,line=%l\\,%.%#col=%c\\,%.%#::%m
+CompilerSet errorformat+=::%tarning%.%#file=%f\\,line=%l\\,%.%#col=%c\\,%.%#::%m
+CompilerSet errorformat+=::%totice%.%#file=%f\\,line=%l\\,%.%#col=%c\\,%.%#::%m
+CompilerSet errorformat+=%-G\\s%#
+CompilerSet errorformat+=%-Gcheck\ %.%#
+CompilerSet errorformat+=%-G%.%#Some\ errors\ were\ emitted\ while\ running\ checks%.
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/cabal.vim b/runtime/compiler/cabal.vim
new file mode 100644
index 0000000000..02d4d9b8e1
--- /dev/null
+++ b/runtime/compiler/cabal.vim
@@ -0,0 +1,39 @@
+" Vim compiler file
+" Compiler: Haskell Cabal Build file
+" Maintainer: Mateo Gjika <@mateoxh>
+
+if exists('current_compiler')
+  finish
+endif
+
+let current_compiler = 'cabal'
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+CompilerSet makeprg=cabal\ build
+
+CompilerSet errorformat=
+      \%W%f:(%l\\,%c)-(%e\\,%k):\ %tarning:\ [%.%#],
+      \%W%f:(%l\\,%c)-(%e\\,%k):\ %tarning:%m,
+      \%W%f:(%l\\,%c)-(%e\\,%k):\ %tarning:,
+      \%W%f:%l:%c-%k:\ %tarning:\ [%.%#],
+      \%W%f:%l:%c-%k:\ %tarning:%m,
+      \%W%f:%l:%c-%k:\ %tarning:,
+      \%W%f:%l:%c:\ %tarning:\ [%.%#],
+      \%W%f:%l:%c:\ %tarning:%m,
+      \%W%f:%l:%c:\ %tarning:,
+      \%E%f:(%l\\,%c)-(%e\\,%k):\ %trror:\ [%.%#],
+      \%E%f:(%l\\,%c)-(%e\\,%k):\ %trror:%m,
+      \%E%f:(%l\\,%c)-(%e\\,%k):\ %trror:,
+      \%E%f:%l:%c-%k:\ %trror:\ [%.%#],
+      \%E%f:%l:%c-%k:\ %trror:%m,
+      \%E%f:%l:%c-%k:\ %trror:,
+      \%E%f:%l:%c:\ %trror:\ [%.%#],
+      \%E%f:%l:%c:\ %trror:%m,
+      \%E%f:%l:%c:\ %trror:,
+      \%Z\ %\\+\|%.%#,
+      \%C%m
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/compiler/context.vim b/runtime/compiler/context.vim
index c3780d461b..82106ad75f 100644
--- a/runtime/compiler/context.vim
+++ b/runtime/compiler/context.vim
@@ -4,9 +4,7 @@ vim9script
 # Maintainer:         Nicola Vitacolonna 
 # Former Maintainers: Nikolai Weibull 
 # Contributors:       Enno Nagel
-# Last Change:        2024 Mar 29
-#                     2024 Apr 03 by The Vim Project (removed :CompilerSet definition)
-#                     2025 Mar 11 by The Vim Project (add comment for Dispatch)
+# Last Change:        2026 Jan 10
 
 if exists("g:current_compiler")
   finish
@@ -16,7 +14,6 @@ import autoload '../autoload/context.vim'
 
 g:current_compiler = 'context'
 
-# CompilerSet makeprg=context
 if get(b:, 'context_ignore_makefile', get(g:, 'context_ignore_makefile', 0)) ||
   (!filereadable('Makefile') && !filereadable('makefile'))
   var makeprg =  join(context.ConTeXtCmd(shellescape(expand('%:p:t'))), ' ')
@@ -30,14 +27,14 @@ const context_errorformat = join([
   "%-Qclose source%.%#> %f",
   "%-Popen source%.%#name '%f'",
   "%-Qclose source%.%#name '%f'",
-  "tex %trror%.%#error on line %l in file %f: %m",
+  "%E! %m",
+  "%Ztex %trror%.%#error on line %l in file %f",
   "%Elua %trror%.%#error on line %l in file %f:",
   "%+Emetapost %#> error: %#",
   "%Emetafun%.%#error: %m",
-  "! error: %#%m",
   "%-C %#",
   "%C! %m",
-  "%Z[ctxlua]%m",
+  "%Z%.%#[ctxlua]:%l:%m",
   "%+C<*> %.%#",
   "%-C%.%#",
   "%Z...%m",
diff --git a/runtime/compiler/cppcheck.vim b/runtime/compiler/cppcheck.vim
index 033613c091..17f79f4fa0 100644
--- a/runtime/compiler/cppcheck.vim
+++ b/runtime/compiler/cppcheck.vim
@@ -1,7 +1,7 @@
 " vim compiler file
 " Compiler:	cppcheck (C++ static checker)
 " Maintainer:   Vincent B. (twinside@free.fr)
-" Last Change:  2024 Nov 19 by @Konfekt
+" Last Change:  2025 Nov 06 by @Konfekt
 
 if exists("current_compiler") | finish | endif
 let current_compiler = "cppcheck"
@@ -18,14 +18,14 @@ if !exists('g:c_cppcheck_params')
   let s:undo_compiler = 'unlet! g:c_cppcheck_params'
 endif
 
-let &l:makeprg = 'cppcheck --quiet'
+exe 'CompilerSet makeprg=' .. escape('cppcheck --quiet'
       \ ..' --template="{file}:{line}:{column}: {severity}: [{id}] {message} {callstack}"'
       \ ..' '..get(b:, 'c_cppcheck_params', get(g:, 'c_cppcheck_params', (&filetype ==# 'cpp' ? ' --language=c++' : '')))
       \ ..' '..get(b:, 'c_cppcheck_includes', get(g:, 'c_cppcheck_includes',
       \	          (filereadable('compile_commands.json') ? '--project=compile_commands.json' :
       \           (!empty(glob('*'..s:slash..'compile_commands.json', 1, 1)) ? '--project='..glob('*'..s:slash..'compile_commands.json', 1, 1)[0] :
-      \	          (empty(&path) ? '' : '-I')..join(map(filter(split(&path, ','), 'isdirectory(v:val)'),'shellescape(v:val)'), ' -I')))))
-exe 'CompilerSet makeprg='..escape(&l:makeprg, ' \|"')
+      \	          (empty(&path) ? '' : '-I')..join(map(filter(split(&path, ','), 'isdirectory(v:val)'),'shellescape(v:val)'), ' -I'))))),
+      \ ' \|"')
 
 CompilerSet errorformat=
   \%f:%l:%c:\ %tarning:\ %m,
diff --git a/runtime/compiler/eruby.vim b/runtime/compiler/eruby.vim
index 815d082f86..2f9f9aa716 100644
--- a/runtime/compiler/eruby.vim
+++ b/runtime/compiler/eruby.vim
@@ -2,7 +2,6 @@
 " Language:		eRuby
 " Maintainer:		Doug Kearns 
 " URL:			https://github.com/vim-ruby/vim-ruby
-" Release Coordinator:	Doug Kearns 
 " Last Change:		2024 Apr 03
 
 if exists("current_compiler")
diff --git a/runtime/compiler/gcc.vim b/runtime/compiler/gcc.vim
index 7b6ebb98f4..6fe751c50a 100644
--- a/runtime/compiler/gcc.vim
+++ b/runtime/compiler/gcc.vim
@@ -6,6 +6,8 @@
 "			by Daniel Hahler, 2019 Jul 12
 "			added line suggested by Anton Lindqvist 2016 Mar 31
 "			2024 Apr 03 by The Vim Project (removed :CompilerSet definition)
+"			2025 Dec 17 by The Vim Project (correctly parse: 'make: *** [Makefile:2: all] Error 1')
+"			2026 May 28 by The Vim Project (Use %v to parse column number)
 
 if exists("current_compiler")
   finish
@@ -16,15 +18,16 @@ let s:cpo_save = &cpo
 set cpo&vim
 
 CompilerSet errorformat=
+      \make:\ ***\ [%f:%l:\ %m,
       \%*[^\"]\"%f\"%*\\D%l:%c:\ %m,
       \%*[^\"]\"%f\"%*\\D%l:\ %m,
       \\"%f\"%*\\D%l:%c:\ %m,
       \\"%f\"%*\\D%l:\ %m,
       \%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
       \%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
-      \%f:%l:%c:\ %trror:\ %m,
-      \%f:%l:%c:\ %tarning:\ %m,
-      \%f:%l:%c:\ %m,
+      \%f:%l:%v:\ %trror:\ %m,
+      \%f:%l:%v:\ %tarning:\ %m,
+      \%f:%l:%v:\ %m,
       \%f:%l:\ %trror:\ %m,
       \%f:%l:\ %tarning:\ %m,
       \%f:%l:\ %m,
diff --git a/runtime/compiler/gnat.vim b/runtime/compiler/gnat.vim
index 086edbede3..696d1c6eb4 100644
--- a/runtime/compiler/gnat.vim
+++ b/runtime/compiler/gnat.vim
@@ -3,7 +3,7 @@
 "     Language: Ada (GNAT)
 "          $Id: gnat.vim 887 2008-07-08 14:29:01Z krischik $
 "    Copyright: Copyright (C) 2006 Martin Krischik
-"   Maintainer:	Martin Krischi k
+"   Maintainer:	Martin Krischi 
 "		Ned Okie 
 "      $Author: krischik $
 "        $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
diff --git a/runtime/compiler/hare.vim b/runtime/compiler/hare.vim
index 88f36a9e20..2b7d9345b4 100644
--- a/runtime/compiler/hare.vim
+++ b/runtime/compiler/hare.vim
@@ -3,25 +3,30 @@ vim9script
 # Vim compiler file.
 # Compiler:    Hare
 # Maintainer:  Amelia Clarke 
-# Last Change: 2025 Sep 06
+# Last Change: 2026 Jan 24
 # Upstream:    https://git.sr.ht/~sircmpwn/hare.vim
 
 if exists('g:current_compiler')
   finish
 endif
+g:current_compiler = 'hare'
 
 if filereadable('Makefile') || filereadable('makefile')
   CompilerSet makeprg=make
 else
-  const makeprg = 'hare build '
-    .. get(b:, 'hare_makeprg_params', get(g:, 'hare_makeprg_params', '-q'))
+  const makeprg = 'hare build ' .. get(g:, 'hare_makeprg_params', '-q')
   execute 'CompilerSet makeprg=' .. escape(makeprg, ' "\|')
 endif
 
 CompilerSet errorformat=
-  \%o:%l:%v:\ syntax\ error:\ %m,
-  \%o:%l:%v:\ error:\ %m,
-  \Error:\ %m,
+  \%E%o:%l:%v:\ error:\ %m,
+  \%E%o:%l:%v:\ syntax\ error:\ %m,
+  \%E%o:%l:%v:\ %\\%%(unexpected\ name\ %\\)%\\@=%m,
+  \%C,%C\ %.%#,%C%l\ %.%#,
+  \%trror:\ %o:\ %\\%%(%\\h%\\w%\\+%\\%%(::%\\h%\\w%\\+%\\)%#:\ %\\)%\\@=%m,
+  \%trror:\ %m,
+  \%+EAbort:\ %m%>,
+  \%C%.%#,
   \%-G%.%#
 
 augroup HareQuickFix
@@ -30,6 +35,4 @@ augroup HareQuickFix
   autocmd QuickFixCmdPost lmake hare#QuickFixPaths()
 augroup END
 
-g:current_compiler = 'hare'
-
 # vim: et sts=2 sw=2 ts=8 tw=80
diff --git a/runtime/compiler/just.vim b/runtime/compiler/just.vim
new file mode 100644
index 0000000000..9dd7dfda36
--- /dev/null
+++ b/runtime/compiler/just.vim
@@ -0,0 +1,23 @@
+" Vim compiler file
+" Compiler:	Just
+" Maintainer:	Alarcritty
+" Last Change:	2026 Mar 20
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "just"
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=just
+
+CompilerSet errorformat=
+      \%Eerror:\ %m,
+      \%C%\\s%#——▶\ %f:%l:%c,
+      \%-C%.%#,
+      \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/maven.vim b/runtime/compiler/maven.vim
index 72e74e301d..1657da75a4 100644
--- a/runtime/compiler/maven.vim
+++ b/runtime/compiler/maven.vim
@@ -7,24 +7,54 @@
 " Original Source:	https://github.com/mikelue/vim-maven-plugin/blob/master/compiler/maven.vim
 "                   (distributed under same terms as LICENSE per
 "                   https://github.com/mikelue/vim-maven-plugin/issues/13)
-" Last Change:	2024 Nov 12
+" Last Change:	2025 Nov 18
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "maven"
 
+" CompilerSet makeprg=mvn
 execute $'CompilerSet makeprg=mvn\ --batch-mode\ {escape(get(b:, 'maven_makeprg_params', get(g:, 'maven_makeprg_params', '')), ' \|"')}'
 
 " Error message for POM
 CompilerSet errorformat=[FATAL]\ Non-parseable\ POM\ %f:\ %m%\\s%\\+@%.%#line\ %l\\,\ column\ %c%.%#,
 CompilerSet errorformat+=[%tRROR]\ Malformed\ POM\ %f:\ %m%\\s%\\+@%.%#line\ %l\\,\ column\ %c%.%#
+" Handle Non-parseable POM with '@:' embedded in the 'position:' clause.
+CompilerSet errorformat+=[FATAL]\ Non-parseable\ POM\ %f:\ %m%\\s%\\+%.%#@%l:%c%.%#,
+CompilerSet errorformat+=[%tRROR]\ Malformed\ POM\ %f:\ %m%\\s%\\+%.%#@%l:%c%.%#,
 
-" Java related build messages
+" JavaC messages with paths relative to module root:
+" With column:
 CompilerSet errorformat+=[%tARNING]\ %f:[%l\\,%c]\ %m
 CompilerSet errorformat+=[%tRROR]\ %f:[%l\\,%c]\ %m
 CompilerSet errorformat+=%A[%t%[A-Z]%#]\ %f:[%l\\,%c]\ %m,%Z
 CompilerSet errorformat+=%A%f:[%l\\,%c]\ %m,%Z
+" Without column:
+CompilerSet errorformat+=[%tARNING]\ %f:[%l]\ %m
+CompilerSet errorformat+=[%tRROR]\ %f:[%l]\ %m
+CompilerSet errorformat+=%A[%t%[A-Z]%#]\ %f:[%l]\ %m,%Z
+CompilerSet errorformat+=%A%f:[%l]\ %m,%Z
+
+" Plug-in messages with absolute paths:
+" with column:
+CompilerSet errorformat+=[%tARNING]\ %f:%l:%c:\ %m
+CompilerSet errorformat+=[%tRROR]\ %f:%l:%c:\ %m
+CompilerSet errorformat+=%A[%t%[A-Z]%#]\ %f:%l:%c:\ %m,%Z
+CompilerSet errorformat+=%A%f:%l:%c:\ %m,%Z
+" without column:
+CompilerSet errorformat+=[%tARNING]\ %f:%l:\ %m
+CompilerSet errorformat+=[%tRROR]\ %f:%l:\ %m
+CompilerSet errorformat+=%A[%t%[A-Z]%#]\ %f:%l:\ %m,%Z
+CompilerSet errorformat+=%A%f:%l:\ %m,%Z
+
+" SpotBugs
+CompilerSet errorformat+=[%tRROR]\ %m%\\s%\\+\[%*[^]]]%\\s%\\+In\ %f\ %.%#,
+CompilerSet errorformat+=[%tARNING]\ %m%\\s%\\+\[%*[^]]]%\\s%\\+In\ %f\ %.%#,
+CompilerSet errorformat+=[%tRROR]\ %.%#\ [aA]t\ %f:\[lines\ %l-%\\d\\+]\ %.%#,
+CompilerSet errorformat+=[%tARNING]\ %.%#\ [aA]t\ %f:\[lines\ %l-%\\d\\+]\ %.%#,
+CompilerSet errorformat+=[%tRROR]\ %.%#\ [aA]t\ %f:\[line\ %l]\ %.%#,
+CompilerSet errorformat+=[%tARNING]\ %.%#\ [aA]t\ %f:\[line\ %l]\ %.%#,
 
 " jUnit related build messages
 CompilerSet errorformat+=%+E\ \ %#test%m,%Z
@@ -36,5 +66,7 @@ CompilerSet errorformat+=%+Z%\\s%#at\ %f(%\\f%\\+:%l),
 CompilerSet errorformat+=%+C%.%#
 
 " Misc message removal
+" CompilerSet errorformat+=%-GPicked\ up\ _JAVA_OPTIONS\ %.%#,
+CompilerSet errorformat+=%-GAudit\ done.,
 CompilerSet errorformat+=%-G[INFO]\ %.%#,
 CompilerSet errorformat+=%-G[debug]\ %.%#
diff --git a/runtime/compiler/mypy.vim b/runtime/compiler/mypy.vim
index 907b98b777..c7a575ce2d 100644
--- a/runtime/compiler/mypy.vim
+++ b/runtime/compiler/mypy.vim
@@ -1,7 +1,7 @@
 " Vim compiler file
 " Compiler:	Mypy (Python static checker)
 " Maintainer:   @Konfekt
-" Last Change:	2024 Nov 19
+" Last Change:	2025 Nov 06
 
 if exists("current_compiler") | finish | endif
 let current_compiler = "mypy"
@@ -10,9 +10,9 @@ let s:cpo_save = &cpo
 set cpo&vim
 
 " CompilerSet makeprg=mypy
-let &l:makeprg = 'mypy --show-column-numbers '
-	    \ ..get(b:, 'mypy_makeprg_params', get(g:, 'mypy_makeprg_params', '--strict --ignore-missing-imports'))
-exe 'CompilerSet makeprg='..escape(&l:makeprg, ' \|"')
+exe 'CompilerSet makeprg=' .. escape('mypy --show-column-numbers '
+      \ ..get(b:, 'mypy_makeprg_params', get(g:, 'mypy_makeprg_params', '--strict --ignore-missing-imports')),
+      \ ' \|"')
 CompilerSet errorformat=%f:%l:%c:\ %t%*[^:]:\ %m
 
 let &cpo = s:cpo_save
diff --git a/runtime/compiler/pandoc.vim b/runtime/compiler/pandoc.vim
index 40d2d02633..d120419207 100644
--- a/runtime/compiler/pandoc.vim
+++ b/runtime/compiler/pandoc.vim
@@ -2,7 +2,8 @@
 " Compiler:     Pandoc
 " Maintainer:   Konfekt
 " Last Change:	2024 Nov 19
-" 2025 May 15 Update the title regex for CompilerSet #17321
+" 2025 May 15 by Vim Project: Update the title regex for CompilerSet #17321
+" 2026 Jan 10 by Vim Project: Do not set the title #19048
 "
 " Expects output file extension, say `:make html` or `:make pdf`.
 " Passes additional arguments to pandoc, say `:make html --self-contained`.
@@ -52,8 +53,6 @@ endfunction
 
 execute 'CompilerSet makeprg=pandoc'..escape(
     \ ' --standalone'..
-    \ (s:PandocFiletype(&filetype) ==# 'markdown' && (getline(1) =~# '^%\s\+\S\+' || (search('^title:\s\+\S\+', 'cnw') > 0)) ?
-    \ '' : ' --metadata title=%:t:r:S')..
     \ ' '..s:PandocLang()..
     \ ' --from='..s:PandocFiletype(&filetype)..
     \ ' '..get(b:, 'pandoc_compiler_args', get(g:, 'pandoc_compiler_args', ''))..
diff --git a/runtime/compiler/perl.vim b/runtime/compiler/perl.vim
index 6aeaac3fa1..04643af26c 100644
--- a/runtime/compiler/perl.vim
+++ b/runtime/compiler/perl.vim
@@ -1,6 +1,6 @@
 " Vim compiler file
 " Compiler:      Perl syntax checks (perl -Wc)
-" Maintainer:    vim-perl 
+" Maintainer:    vim-perl  (need to be subscribed to post)
 " Author:        Christian J. Robinson 
 " Homepage:      https://github.com/vim-perl/vim-perl
 " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
diff --git a/runtime/compiler/perlcritic.vim b/runtime/compiler/perlcritic.vim
index 4b5f34dd2e..d50bc31129 100644
--- a/runtime/compiler/perlcritic.vim
+++ b/runtime/compiler/perlcritic.vim
@@ -1,6 +1,6 @@
 " Vim compiler file
 " Compiler:      perlcritic
-" Maintainer:    vim-perl 
+" Maintainer:    vim-perl  (need to be subscribed to post)
 " Author:        Doug Kearns 
 " Homepage:      https://github.com/vim-perl/vim-perl
 " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
diff --git a/runtime/compiler/podchecker.vim b/runtime/compiler/podchecker.vim
index 20faaa4bcc..744c1034d6 100644
--- a/runtime/compiler/podchecker.vim
+++ b/runtime/compiler/podchecker.vim
@@ -1,6 +1,6 @@
 " Vim compiler file
 " Compiler:      podchecker
-" Maintainer:    vim-perl 
+" Maintainer:    vim-perl  (need to be subscribed to post)
 " Author:        Doug Kearns 
 " Homepage:      https://github.com/vim-perl/vim-perl
 " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
diff --git a/runtime/compiler/pylint.vim b/runtime/compiler/pylint.vim
index 96abf315ab..749fe7d134 100644
--- a/runtime/compiler/pylint.vim
+++ b/runtime/compiler/pylint.vim
@@ -3,6 +3,7 @@
 " Maintainer:   Daniel Moch 
 " Last Change:  2024 Nov 07 by The Vim Project (added params variable)
 "		2024 Nov 19 by the Vim Project (properly escape makeprg setting)
+"		2025 Nov 06 by the Vim Project (do not set buffer-local makeprg)
 
 if exists("current_compiler") | finish | endif
 let current_compiler = "pylint"
@@ -11,10 +12,10 @@ let s:cpo_save = &cpo
 set cpo&vim
 
 " CompilerSet makeprg=ruff
-let &l:makeprg = 'pylint ' .
+exe 'CompilerSet makeprg=' .. escape('pylint ' .
       \ '--output-format=text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" --reports=no ' .
-      \ get(b:, "pylint_makeprg_params", get(g:, "pylint_makeprg_params", '--jobs=0'))
-exe 'CompilerSet makeprg='..escape(&l:makeprg, ' \|"')
+      \ get(b:, "pylint_makeprg_params", get(g:, "pylint_makeprg_params", '--jobs=0')),
+      \ ' \|"')
 CompilerSet errorformat=%A%f:%l:%c:%t:\ %m,%A%f:%l:\ %m,%A%f:(%l):\ %m,%-Z%p^%.%#,%-G%.%#
 
 let &cpo = s:cpo_save
diff --git a/runtime/compiler/pyright.vim b/runtime/compiler/pyright.vim
new file mode 100644
index 0000000000..eef6a9eb67
--- /dev/null
+++ b/runtime/compiler/pyright.vim
@@ -0,0 +1,25 @@
+" Vim compiler file
+" Compiler:     Pyright (Python Type Checker)
+" Maintainer:   @konfekt
+" Last Change:  2025 Feb 7
+
+if exists("current_compiler") | finish | endif
+let current_compiler = "pyright"
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" CompilerSet makeprg=pyright
+" CompilerSet makeprg=basedpyright
+exe 'CompilerSet makeprg=' ..  escape(
+        \ get(b:, 'pyright_makeprg', get(g:, 'pyright_makeprg', 'pyright')),
+        \ ' \|"')
+CompilerSet errorformat=
+      \%E%f:%l:%c\ -\ error:\ %m,
+      \%W%f:%l:%c\ -\ warning:\ %m,
+      \%N%f:%l:%c\ -\ note:\ %m,
+      \%C[\ \t]\ %.%#,
+      \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/rake.vim b/runtime/compiler/rake.vim
index 5b3c7f4092..55f7373af8 100644
--- a/runtime/compiler/rake.vim
+++ b/runtime/compiler/rake.vim
@@ -2,7 +2,6 @@
 " Language:		Rake
 " Maintainer:		Tim Pope 
 " URL:			https://github.com/vim-ruby/vim-ruby
-" Release Coordinator:	Doug Kearns 
 " Last Change:		2018 Mar 02
 "			2024 Apr 03 by The Vim Project (removed :CompilerSet definition)
 
diff --git a/runtime/compiler/rime_deployer.vim b/runtime/compiler/rime_deployer.vim
index e0c8daef6e..5331412dc3 100644
--- a/runtime/compiler/rime_deployer.vim
+++ b/runtime/compiler/rime_deployer.vim
@@ -3,6 +3,7 @@
 " Maintainer:           Wu, Zhenyu 
 " URL:                  https://rime.im
 " Latest Revision:      2024-04-09
+" Last Change:          2025 Nov 16 by The Vim Project (set errorformat)
 
 if exists('b:current_compiler')
   finish
@@ -25,6 +26,8 @@ for s:shared_data_dir in ['/sdcard/rime-data', '/run/current-system/sw/share/rim
 endfor
 execute 'CompilerSet makeprg=rime_deployer\ --build\ %:p:h:S\' s:shared_data_dir
 unlet s:prefix s:shared_data_dir
+" CompilerSet errorformat=%f:%l:%c:\ %m,%f:%l:\ %m
+CompilerSet errorformat&
 
 let &cpoptions = s:save_cpoptions
 unlet s:save_cpoptions
diff --git a/runtime/compiler/rspec.vim b/runtime/compiler/rspec.vim
index ee848f703a..ab83acc8ad 100644
--- a/runtime/compiler/rspec.vim
+++ b/runtime/compiler/rspec.vim
@@ -2,7 +2,6 @@
 " Language:		RSpec
 " Maintainer:		Tim Pope 
 " URL:			https://github.com/vim-ruby/vim-ruby
-" Release Coordinator:	Doug Kearns 
 " Last Change:		2018 Aug 07
 "			2024 Apr 03 by The Vim Project (removed :CompilerSet definition)
 
diff --git a/runtime/compiler/ruby.vim b/runtime/compiler/ruby.vim
index 70dff5bf24..2c34142f2e 100644
--- a/runtime/compiler/ruby.vim
+++ b/runtime/compiler/ruby.vim
@@ -3,7 +3,6 @@
 " Function:		Syntax check and/or error reporting
 " Maintainer:		Tim Pope 
 " URL:			https://github.com/vim-ruby/vim-ruby
-" Release Coordinator:	Doug Kearns 
 " Last Change:		2019 Jan 06
 "			2024 Apr 03 by The Vim Project (removed :CompilerSet definition)
 
diff --git a/runtime/compiler/rubyunit.vim b/runtime/compiler/rubyunit.vim
index e59873fa21..2c6f53929c 100644
--- a/runtime/compiler/rubyunit.vim
+++ b/runtime/compiler/rubyunit.vim
@@ -2,7 +2,6 @@
 " Language:		Test::Unit - Ruby Unit Testing Framework
 " Maintainer:		Doug Kearns 
 " URL:			https://github.com/vim-ruby/vim-ruby
-" Release Coordinator:	Doug Kearns 
 " Last Change:		2014 Mar 23
 "			2024 Apr 03 by The Vim Project (removed :CompilerSet definition)
 
diff --git a/runtime/compiler/ruff.vim b/runtime/compiler/ruff.vim
index 318f4fe5cb..d4f564b06a 100644
--- a/runtime/compiler/ruff.vim
+++ b/runtime/compiler/ruff.vim
@@ -3,6 +3,8 @@
 " Maintainer:   @pbnj-dragon
 " Last Change:  2024 Nov 07
 "		2024 Nov 19 by the Vim Project (properly escape makeprg setting)
+"		2025 Nov 06 by the Vim Project (do not set buffer-local makeprg)
+"		2024 Dec 24 by the Vim Project (mute Found messages)
 
 if exists("current_compiler") | finish | endif
 let current_compiler = "ruff"
@@ -11,10 +13,11 @@ let s:cpo_save = &cpo
 set cpo&vim
 
 " CompilerSet makeprg=ruff
-let &l:makeprg= 'ruff check --output-format=concise '
-        \ ..get(b:, 'ruff_makeprg_params', get(g:, 'ruff_makeprg_params', '--preview'))
-exe 'CompilerSet makeprg='..escape(&l:makeprg, ' \|"')
+exe 'CompilerSet makeprg=' .. escape('ruff check --output-format=concise '
+        \ ..get(b:, 'ruff_makeprg_params', get(g:, 'ruff_makeprg_params', '--preview')),
+        \ ' \|"')
 CompilerSet errorformat=%f:%l:%c:\ %m,%f:%l:\ %m,%f:%l:%c\ -\ %m,%f:
+CompilerSet errorformat+=%-GFound\ %.%#
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff --git a/runtime/compiler/rustc.vim b/runtime/compiler/rustc.vim
index b3c8091987..0b48891852 100644
--- a/runtime/compiler/rustc.vim
+++ b/runtime/compiler/rustc.vim
@@ -2,6 +2,8 @@
 " Compiler:         Rust Compiler
 " Maintainer:       Chris Morgan 
 " Latest Revision:  2023-09-11
+" 2025 Nov 15 by Vim project: remove test for Vim patch 7.4.191
+" 2025 Dec 18 by Vim project: detect more errors #18957
 " For bugs, patches and license go to https://github.com/rust-lang/rust.vim
 
 if exists("current_compiler")
@@ -17,11 +19,7 @@ set cpo&vim
 if get(g:, 'rustc_makeprg_no_percent', 0)
     CompilerSet makeprg=rustc
 else
-    if has('patch-7.4.191')
-      CompilerSet makeprg=rustc\ \%:S
-    else
-      CompilerSet makeprg=rustc\ \"%\"
-    endif
+    CompilerSet makeprg=rustc\ \%:S
 endif
 
 " New errorformat (after nightly 2016/08/10)
@@ -32,8 +30,10 @@ CompilerSet errorformat=
             \%Eerror:\ %m,
             \%Eerror[E%n]:\ %m,
             \%Wwarning:\ %m,
+            \%Wwarning[E%n]:\ %m,
             \%Inote:\ %m,
             \%C\ %#-->\ %f:%l:%c,
+            \%C\ %#â•­â–¸\ %f:%l:%c,
             \%E\ \ left:%m,%C\ right:%m\ %f:%l:%c,%Z
 
 " Old errorformat (before nightly 2016/08/10)
diff --git a/runtime/compiler/tombi.vim b/runtime/compiler/tombi.vim
index bab95ba24c..7a286723cd 100644
--- a/runtime/compiler/tombi.vim
+++ b/runtime/compiler/tombi.vim
@@ -1,7 +1,7 @@
 " Vim compiler file
 " Language:    TOML
 " Maintainer:  Konfekt
-" Last Change: 2025 Oct 28
+" Last Change: 2025 Oct 29
 
 if exists("current_compiler") | finish | endif
 let current_compiler = "tombi"
@@ -44,7 +44,7 @@ if s:tombi_nocolor
     if &shell =~# '\v<%(cmd|cmd)>'
       CompilerSet makeprg=set\ NO_COLOR=1\ &&\ tombi\ lint
     elseif &shell =~# '\v<%(powershell|pwsh)>'
-      CompilerSet makeprg=$env:NO_COLOR="1";\ tombi\ lint
+      CompilerSet makeprg=$env:NO_COLOR=\"1\";\ tombi\ lint
     else
       echoerr "tombi compiler: Unsupported shell for Windows"
     endif
diff --git a/runtime/compiler/ty.vim b/runtime/compiler/ty.vim
new file mode 100644
index 0000000000..d9ee5aae8a
--- /dev/null
+++ b/runtime/compiler/ty.vim
@@ -0,0 +1,20 @@
+" Vim compiler file
+" Compiler:     Ty (Python Type Checker)
+" Maintainer:   @konfekt
+" Last Change:  2024 Dec 24
+
+if exists("current_compiler") | finish | endif
+let current_compiler = "ty"
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" CompilerSet makeprg=ty
+exe 'CompilerSet makeprg=' ..  escape(
+        \ get(b:, 'ty_makeprg', get(g:, 'ty_makeprg', 'ty check --no-progress --color=never'))
+        \ ..' --output-format=concise', ' \|"')
+CompilerSet errorformat=%f:%l:%c:\ %m,%f:%l:\ %m,%f:%l:%c\ -\ %m,%f:
+CompilerSet errorformat+=%-GFound\ %.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/vimdoc.vim b/runtime/compiler/vimdoc.vim
index a30355f855..ca34f105e4 100644
--- a/runtime/compiler/vimdoc.vim
+++ b/runtime/compiler/vimdoc.vim
@@ -2,6 +2,7 @@
 " Language:             vimdoc
 " Maintainer:           Wu, Zhenyu 
 " Latest Revision:      2024-04-13
+" Last Change: 2025 Nov 16 by The Vim Project (set errorformat)
 "
 " If you can not find 'vimdoc' in the package manager of your distribution e.g
 " 'pip', then you may need to build it from its source.
@@ -15,6 +16,8 @@ let s:save_cpoptions = &cpoptions
 set cpoptions&vim
 
 CompilerSet makeprg=vimdoc
+" CompilerSet errorformat=%f:%l:%c:\ %m,%f:%l:\ %m
+CompilerSet errorformat&
 
 let &cpoptions = s:save_cpoptions
 unlet s:save_cpoptions
diff --git a/runtime/compiler/yamllint.vim b/runtime/compiler/yamllint.vim
index 88e2efb27a..adb1dbdee7 100644
--- a/runtime/compiler/yamllint.vim
+++ b/runtime/compiler/yamllint.vim
@@ -3,6 +3,7 @@
 " Maintainer:  Romain Lafourcade 
 " Last Change: 2021 July 21
 "		2024 Apr 03 by The Vim Project (removed :CompilerSet definition)
+"              2025 Nov 16 by The Vim Project (set errorformat)
 
 if exists("current_compiler")
     finish
@@ -10,4 +11,6 @@ endif
 let current_compiler = "yamllint"
 
 CompilerSet makeprg=yamllint\ -f\ parsable
+" CompilerSet errorformat=%f:%l:%c:\ [%t%*[^]]]\ %m,%f:%l:%c:\ [%*[^]]]\ %m
+CompilerSet errorformat&
 
diff --git a/runtime/compiler/zig.vim b/runtime/compiler/zig.vim
index 44014a3775..0993874f58 100644
--- a/runtime/compiler/zig.vim
+++ b/runtime/compiler/zig.vim
@@ -1,6 +1,9 @@
 " Vim compiler file
 " Compiler: Zig Compiler
-" Upstream: https://github.com/ziglang/zig.vim
+" Upstream: https://codeberg.org/ziglang/zig.vim
+" Last Change:
+" 2026 May 12 by the Vim project (set errormformat)
+" 2026 May 24 by the Vim project (do not escape vars for makeprg)
 
 if exists("current_compiler")
     finish
@@ -11,13 +14,29 @@ let s:save_cpo = &cpo
 set cpo&vim
 
 " a subcommand must be provided for the this compiler (test, build-exe, etc)
-if has('patch-7.4.191')
-    CompilerSet makeprg=zig\ \$*\ \%:S
-else
-    CompilerSet makeprg=zig\ \$*\ \"%\"
-endif
+CompilerSet makeprg=zig\ $*\ %:S
+
+CompilerSet errorformat=
+            \%-G,
+            \%-G\ %#+-\ %.%#,
+            \%-Ginstall,
+            \%-Ginstall\ transitive\ failure,
+            \%-Grun,
+            \%-Grun\ transitive\ failure,
+            \%-Gtest,
+            \%-Gtest\ transitive\ failure,
+            \%-Gfailed\ command:\ %.%#,
+            \%-Gerror:\ %*\\d\ compilation\ errors,
+            \%-GBuild\ Summary:\ %.%#,
+            \%-Gerror:\ the\ following\ build\ command\ failed\ with\ exit\ code\ %*\\d:,
+            \%-G.zig-cache%.%#,
+            \%E%f:%l:%c:\ error:\ %m,
+            \%I%f:%l:%c:\ note:\ %m
 
-" TODO: improve errorformat as needed.
+" zig has no warnings, but zig cc and zig c++ do
+CompilerSet errorformat+=
+            \%W%f:%l:%c:\ warning:\ %m,
+            \%-G%*\\d\ warnings\ generated.
 
 let &cpo = s:save_cpo
 unlet s:save_cpo
diff --git a/runtime/compiler/zig_build.vim b/runtime/compiler/zig_build.vim
index 5a61c9f423..27788836f0 100644
--- a/runtime/compiler/zig_build.vim
+++ b/runtime/compiler/zig_build.vim
@@ -1,7 +1,8 @@
 " Vim compiler file
 " Compiler: Zig Compiler (zig build)
-" Upstream: https://github.com/ziglang/zig.vim
-" Last Change: 2024 Apr 05 by The Vim Project (removed :CompilerSet definition)
+" Upstream: https://codeberg.org/ziglang/zig.vim
+" Last Change: 2024 Apr 05 by the Vim Project (removed :CompilerSet definition)
+" 2026 May 12 by the Vim Project (removed comment)
 
 if exists('current_compiler')
   finish
@@ -13,13 +14,11 @@ let s:save_cpo = &cpo
 set cpo&vim
 
 if exists('g:zig_build_makeprg_params')
-	execute 'CompilerSet makeprg=zig\ build\ '.escape(g:zig_build_makeprg_params, ' \|"').'\ $*'
+  execute 'CompilerSet makeprg=zig\ build\ '.escape(g:zig_build_makeprg_params, ' \|"').'\ $*'
 else
-	CompilerSet makeprg=zig\ build\ $*
+  CompilerSet makeprg=zig\ build\ $*
 endif
 
-" TODO: anything to add to errorformat for zig build specifically?
-
 let &cpo = s:save_cpo
 unlet s:save_cpo
-" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab
+" vim: tabstop=8 shiftwidth=2 softtabstop=2 expandtab
diff --git a/runtime/compiler/zig_build_exe.vim b/runtime/compiler/zig_build_exe.vim
index 259d0e267b..f49304feb1 100644
--- a/runtime/compiler/zig_build_exe.vim
+++ b/runtime/compiler/zig_build_exe.vim
@@ -1,7 +1,9 @@
 " Vim compiler file
 " Compiler: Zig Compiler (zig build-exe)
-" Upstream: https://github.com/ziglang/zig.vim
-" Last Change: 2024 Apr 05 by The Vim Project (removed :CompilerSet definition)
+" Upstream: https://codeberg.org/ziglang/zig.vim
+" Last Change: 2025 Nov 16 by the Vim Project (set errorformat)
+" 2026 May 12 by the Vim project (remove errorformat)
+" 2026 May 24 by the Vim project (do not escape vars for makeprg)
 
 if exists('current_compiler')
   finish
@@ -12,12 +14,8 @@ let current_compiler = 'zig_build_exe'
 let s:save_cpo = &cpo
 set cpo&vim
 
-if has('patch-7.4.191')
-  CompilerSet makeprg=zig\ build-exe\ \%:S\ \$* 
-else
-  CompilerSet makeprg=zig\ build-exe\ \"%\"\ \$* 
-endif
+CompilerSet makeprg=zig\ build-exe\ %:S\ $*
 
 let &cpo = s:save_cpo
 unlet s:save_cpo
-" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab
+" vim: tabstop=8 shiftwidth=2 softtabstop=2 expandtab
diff --git a/runtime/compiler/zig_cc.vim b/runtime/compiler/zig_cc.vim
new file mode 100644
index 0000000000..d86bb48efc
--- /dev/null
+++ b/runtime/compiler/zig_cc.vim
@@ -0,0 +1,19 @@
+" Vim compiler file
+" Compiler: Zig Compiler (zig cc)
+" Last Change: 2026 May 12
+" 2026 May 24 by the Vim project (do not escape vars for makeprg)
+
+if exists('current_compiler')
+  finish
+endif
+runtime compiler/zig.vim
+let current_compiler = 'zig_cc'
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+CompilerSet makeprg=zig\ cc\ %:S\ $*
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+" vim: tabstop=8 shiftwidth=2 softtabstop=2 expandtab
diff --git a/runtime/compiler/zig_test.vim b/runtime/compiler/zig_test.vim
index dafeb6f1e3..f1992cbffd 100644
--- a/runtime/compiler/zig_test.vim
+++ b/runtime/compiler/zig_test.vim
@@ -1,7 +1,9 @@
 " Vim compiler file
 " Compiler: Zig Compiler (zig test)
-" Upstream: https://github.com/ziglang/zig.vim
-" Last Change: 2024 Apr 05 by The Vim Project (removed :CompilerSet definition)
+" Upstream: https://codeberg.org/ziglang/zig.vim
+" Last Change: 2025 Nov 16 by the Vim Project (set errorformat)
+" 2026 May 12 by the Vim Project (remove error format)
+" 2026 May 24 by the Vim project (do not escape vars for makeprg)
 
 if exists('current_compiler')
   finish
@@ -12,12 +14,8 @@ let current_compiler = 'zig_test'
 let s:save_cpo = &cpo
 set cpo&vim
 
-if has('patch-7.4.191')
-  CompilerSet makeprg=zig\ test\ \%:S\ \$* 
-else
-  CompilerSet makeprg=zig\ test\ \"%\"\ \$* 
-endif
+CompilerSet makeprg=zig\ test\ %:S\ $*
 
 let &cpo = s:save_cpo
 unlet s:save_cpo
-" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab
+" vim: tabstop=8 shiftwidth=2 softtabstop=2 expandtab
diff --git a/runtime/defaults.vim b/runtime/defaults.vim
index 5c7100edc2..9306af3fbb 100644
--- a/runtime/defaults.vim
+++ b/runtime/defaults.vim
@@ -1,7 +1,7 @@
 " The default vimrc file.
 "
 " Maintainer:	The Vim Project 
-" Last Change:	2025 Sep 10
+" Last Change:	2025 Nov 28
 " Former Maintainer:	Bram Moolenaar 
 "
 " This is loaded if no vimrc file was found.
@@ -136,7 +136,7 @@ if &t_Co > 2 || has("gui_running")
   syntax on
 
   " I like highlighting strings inside C comments.
-  " Revert with ":unlet c_comment_strings".
+  " Revert with ":unlet g:c_comment_strings".
   let c_comment_strings=1
 endif
 
diff --git a/runtime/doc/Make_all.mak b/runtime/doc/Make_all.mak
index b146ead5e9..065ff7be6e 100644
--- a/runtime/doc/Make_all.mak
+++ b/runtime/doc/Make_all.mak
@@ -341,6 +341,11 @@ CONVERTED = \
 	vimdiff-ru.UTF-8.1 \
 	vimtutor-ru.UTF-8.1 \
 	xxd-ru.UTF-8.1 \
+	vim-sv.UTF-8.1 \
+	evim-sv.UTF-8.1 \
+	vimdiff-sv.UTF-8.1 \
+	vimtutor-sv.UTF-8.1 \
+	xxd-sv.UTF-8.1 \
 	vim-tr.UTF-8.1 \
 	evim-tr.UTF-8.1 \
 	vimdiff-tr.UTF-8.1 \
diff --git a/runtime/doc/Make_mvc.mak b/runtime/doc/Make_mvc.mak
index 8dc09a35fa..a9fb3c5820 100644
--- a/runtime/doc/Make_mvc.mak
+++ b/runtime/doc/Make_mvc.mak
@@ -449,6 +449,61 @@ xxd-ru.UTF-8.1 : xxd-ru.1
 		1>nul New-Item -Path . -Name $@ -ItemType file -Force
 !ENDIF
 
+evim-sv.UTF-8.1 : evim-sv.1
+!IF DEFINED (ICONV)
+	$(ICONV) -f ISO-8859-1 -t UTF-8 $? >$@
+!ELSE
+# Conversion to UTF-8 encoding without BOM and with UNIX-like line ending
+	$(PS) $(PSFLAGS) \
+		[IO.File]::ReadAllText(\"$?\", \
+		[Text.Encoding]::GetEncoding(28599)) ^| \
+		1>nul New-Item -Path . -Name $@ -ItemType file -Force
+!ENDIF
+
+vim-sv.UTF-8.1 : vim-sv.1
+!IF DEFINED (ICONV)
+	$(ICONV) -f ISO-8859-1 -t UTF-8 $? >$@
+!ELSE
+# Conversion to UTF-8 encoding without BOM and with UNIX-like line ending
+	$(PS) $(PSFLAGS) \
+		[IO.File]::ReadAllText(\"$?\", \
+		[Text.Encoding]::GetEncoding(28599)) ^| \
+		1>nul New-Item -Path . -Name $@ -ItemType file -Force
+!ENDIF
+
+vimdiff-sv.UTF-8.1 : vimdiff-sv.1
+!IF DEFINED (ICONV)
+	$(ICONV) -f ISO-8859-1 -t UTF-8 $? >$@
+!ELSE
+# Conversion to UTF-8 encoding without BOM and with UNIX-like line ending
+	$(PS) $(PSFLAGS) \
+		[IO.File]::ReadAllText(\"$?\", \
+		[Text.Encoding]::GetEncoding(28599)) ^| \
+		1>nul New-Item -Path . -Name $@ -ItemType file -Force
+!ENDIF
+
+vimtutor-sv.UTF-8.1 : vimtutor-sv.1
+!IF DEFINED (ICONV)
+	$(ICONV) -f ISO-8859-1 -t UTF-8 $? >$@
+!ELSE
+# Conversion to UTF-8 encoding without BOM and with UNIX-like line ending
+	$(PS) $(PSFLAGS) \
+		[IO.File]::ReadAllText(\"$?\", \
+		[Text.Encoding]::GetEncoding(28599)) ^| \
+		1>nul New-Item -Path . -Name $@ -ItemType file -Force
+!ENDIF
+
+xxd-sv.UTF-8.1 : xxd-sv.1
+!IF DEFINED (ICONV)
+	$(ICONV) -f ISO-8859-1 -t UTF-8 $? >$@
+!ELSE
+# Conversion to UTF-8 encoding without BOM and with UNIX-like line ending
+	$(PS) $(PSFLAGS) \
+		[IO.File]::ReadAllText(\"$?\", \
+		[Text.Encoding]::GetEncoding(28599)) ^| \
+		1>nul New-Item -Path . -Name $@ -ItemType file -Force
+!ENDIF
+
 evim-tr.UTF-8.1 : evim-tr.1
 !IF DEFINED (ICONV)
 	$(ICONV) -f ISO-8859-9 -t UTF-8 $? >$@
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index 01b2c3e83f..47bf385ca9 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -35,19 +35,19 @@ doctags: doctags.c
 	$(CC) doctags.c -o doctags
 
 vim.man: vim.1
-	nroff -man $? | sed -e s/.//g > $@
+	nroff -c -man $? | sed -e s/.//g > $@
 
 evim.man: evim.1
-	nroff -man $? | sed -e s/.//g > $@
+	nroff -c -man $? | sed -e s/.//g > $@
 
 vimdiff.man: vimdiff.1
-	nroff -man $? | sed -e s/.//g > $@
+	nroff -c -man $? | sed -e s/.//g > $@
 
 vimtutor.man: vimtutor.1
-	nroff -man $? | sed -e s/.//g > $@
+	nroff -c -man $? | sed -e s/.//g > $@
 
 xxd.man: xxd.1
-	nroff -man $? | sed -e s/.//g > $@
+	nroff -c -man $? | sed -e s/.//g > $@
 
 # Awk version of .txt to .html conversion.
 html: noerrors tags $(HTMLS)
@@ -237,3 +237,18 @@ vimdiff-tr.UTF-8.1: vimdiff-tr.1
 
 vimtutor-tr.UTF-8.1: vimtutor-tr.1
 	iconv -f latin5 -t UTF-8 $? >$@
+
+vim-sv.UTF-8.1: vim-sv.1
+	iconv -f latin1 -t UTF-8 $? >$@
+
+evim-sv.UTF-8.1: evim-sv.1
+	iconv -f latin1 -t UTF-8 $? >$@
+
+vimdiff-sv.UTF-8.1: vimdiff-sv.1
+	iconv -f latin1 -t UTF-8 $? >$@
+
+vimtutor-sv.UTF-8.1: vimtutor-sv.1
+	iconv -f latin1 -t UTF-8 $? >$@
+
+xxd-sv.UTF-8.1: xxd-sv.1
+	iconv -f latin1 -t UTF-8 $? >$@
diff --git a/runtime/doc/arabic.txt b/runtime/doc/arabic.txt
index 72c9ed8e12..d6caf6c5cc 100644
--- a/runtime/doc/arabic.txt
+++ b/runtime/doc/arabic.txt
@@ -1,7 +1,7 @@
-*arabic.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*arabic.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Nadim Shaikli
+		  VIM REFERENCE MANUAL	  by Nadim Shaikli
 
 
 Arabic Language support (options & mappings) for Vim		*Arabic*
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 318b57b548..5f59b03b61 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,7 +1,7 @@
-*autocmd.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*autocmd.txt*	For Vim version 9.2.  Last change: 2026 May 23
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Automatic commands				*autocommand* *autocommands*
@@ -423,6 +423,8 @@ Name			triggered by ~
 |TextChangedP|		after a change was made to the text in Insert mode
 			when popup menu visible
 |TextChangedT|		after a change was made to the text in Terminal mode
+|TextPutPost|		after text has been put
+|TextPutPre|		before text is put
 |TextYankPost|		after text has been yanked or deleted
 
 |SafeState|		nothing pending, going to wait for the user to type a
@@ -437,6 +439,7 @@ Name			triggered by ~
 |QuickFixCmdPre|	before a quickfix command is run
 |QuickFixCmdPost|	after a quickfix command is run
 
+|SessionLoadPre|	before loading a session file
 |SessionLoadPost|	after loading a session file
 
 |SessionWritePost|	after writing the session file using
@@ -876,7 +879,8 @@ FileChangedShell		When Vim notices that the modification time of
 				to tell Vim what to do next.
 				NOTE: When this autocommand is executed, the
 				current buffer "%" may be different from the
-				buffer that was changed, which is in "".
+				buffer that was changed, which is in
+				"".
 				NOTE: The commands must not change the current
 				buffer, jump to another buffer or delete a
 				buffer.  *E246* *E811*
@@ -1189,6 +1193,9 @@ SafeStateAgain			Like SafeState but after processing any
 				triggered often, don't do something that takes
 				time.
 
+							*SessionLoadPre*
+SessionLoadPre			Before loading the session file created using
+				the |:mksession| command.
 							*SessionLoadPost*
 SessionLoadPost			After loading the session file created using
 				the |:mksession| command.
@@ -1332,9 +1339,9 @@ TermResponseAll			After the response to |t_RV|, |t_RC|, |t_RS|,
 				    "osc",
 				    "version" (|t_RV|)
 				Note that this event may be triggered halfway
-				executing another event, especially if file I/O,
-				a shell command or anything else that takes time
-				is involved.
+				executing another event, especially if file
+				I/O, a shell command or anything else that
+				takes time is involved.
 							*TextChanged*
 TextChanged			After a change was made to the text in the
 				current buffer in Normal mode.  That is after
@@ -1362,6 +1369,46 @@ TextChangedP			After a change was made to the text in the
 TextChangedT			After a change was made to the text in the
 				current buffer in Terminal mode.
 				Otherwise the same as TextChanged.
+							*TextPutPost*
+TextPutPost			After text has been put in the current buffer.
+				The following values in |v:event| are mostly
+				the same as |TextYankPost|:
+				   operator	The operation performed,
+						either 'p' or 'P'.
+				   regcontents	Text that was put. For
+						|quote_=|, this is the result
+						of the expression.
+				   regname	Name of the register or empty
+						string for the unnamed
+						register.
+				   regtype	Type of the register, see
+						|getregtype()|.
+				   visual	True if the operation is
+						performed in |Visual| mode.
+				Not triggered when |quote_| is used nor when
+				called recursively.
+				It is not allowed to change the buffer text,
+				see |textlock|.
+				Note that for the |quote_.| register, since
+				the last inserted text is buffered into the
+				input buffer (buffer isn't modified directly),
+				this autocommand is called directly after
+				|TextPutPre|.
+				{only when compiled with the +eval feature}
+							*TextPutPre*
+TextPutPre			Before text has been put in the current buffer.
+				Same values as |TextPutPost| in |v:event|.  It
+				is valid to call |setreg()| in this
+				autocommand, allowing you to process and
+				modify the text in "regcontents" before it is
+				put.  However this does not apply to
+				|quote_#|, |quote_=|, |quote_%|, |quote_:|,
+				|quote_/| or |quote_.|.
+				Not triggered when |quote_| is used nor when
+				called recursively.
+				It is not allowed to change the buffer text,
+				see |textlock|.
+				{only when compiled with the +eval feature}
 							*TextYankPost*
 TextYankPost			After text has been yanked or deleted in the
 				current buffer.  The following values of
@@ -1463,8 +1510,9 @@ VimResume			When the Vim instance is resumed after being
 	:autocmd VimResume * checktime
 <							*VimSuspend*
 VimSuspend			When the Vim instance is suspended.  Only when
-				CTRL-Z was typed inside Vim, or when the SIGTSTP
-				signal was sent to Vim, but not for SIGSTOP.
+				CTRL-Z was typed inside Vim, or when the
+				SIGTSTP signal was sent to Vim, but not for
+				SIGSTOP.
 							*WinClosed*
 WinClosed			When closing a window, just before it is
 				removed from the window layout.  The pattern
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index e0ef87ea61..af88740762 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,7 +1,7 @@
-*builtin.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*builtin.txt*	For Vim version 9.2.  Last change: 2026 Jun 17
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Builtin functions				*builtin-functions*
@@ -23,9 +23,11 @@ Use CTRL-] on the function name to jump to the full explanation.
 
 USAGE				RESULT	DESCRIPTION	~
 
-abs({expr})			Float or Number  absolute value of {expr}
+abs({expr})			Float/Number
+					absolute value of {expr}
 acos({expr})			Float	arc cosine of {expr}
-add({object}, {item})		List/Blob   append {item} to {object}
+add({object}, {item})		List/Blob
+					append {item} to {object}
 and({expr}, {expr})		Number	bitwise AND
 append({lnum}, {text})		Number	append {text} below line {lnum}
 appendbufline({buf}, {lnum}, {text})
@@ -33,7 +35,8 @@ appendbufline({buf}, {lnum}, {text})
 					in buffer {buf}
 argc([{winid}])			Number	number of files in the argument list
 argidx()			Number	current index in the argument list
-arglistid([{winnr} [, {tabnr}]]) Number	argument list id
+arglistid([{winnr} [, {tabnr}]])
+				Number	argument list id
 argv({nr} [, {winid}])		String	{nr} entry of the argument list
 argv([-1, {winid}])		List	the argument list
 asin({expr})			Float	arc sine of {expr}
@@ -43,7 +46,7 @@ assert_equal({exp}, {act} [, {msg}])
 assert_equalfile({fname-one}, {fname-two} [, {msg}])
 				Number	assert file contents are equal
 assert_exception({error} [, {msg}])
-				Number	assert {error} is in v:exception
+				Number	assert {error} is in |v:exception|
 assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
 				Number	assert {cmd} fails
 assert_false({actual} [, {msg}])
@@ -79,10 +82,10 @@ browsedir({title}, {initdir})	String	put up a directory requester
 bufadd({name})			Number	add a buffer to the buffer list
 bufexists({buf})		Number	|TRUE| if buffer {buf} exists
 buflisted({buf})		Number	|TRUE| if buffer {buf} is listed
-bufload({buf})			Number	load buffer {buf} if not loaded yet
+bufload({buf})			none	load buffer {buf} if not loaded yet
 bufloaded({buf})		Number	|TRUE| if buffer {buf} is loaded
-bufname([{buf}])		String	Name of the buffer {buf}
-bufnr([{buf} [, {create}]])	Number	Number of the buffer {buf}
+bufname([{buf}])		String	name of the buffer {buf}
+bufnr([{buf} [, {create}]])	Number	number of the buffer {buf}
 bufwinid({buf})			Number	window ID of buffer {buf}
 bufwinnr({buf})			Number	window number of buffer {buf}
 byte2line({byte})		Number	line number at byte count {byte}
@@ -102,7 +105,10 @@ ch_evalraw({handle}, {string} [, {options}])
 				any	evaluate {string} on raw {handle}
 ch_getbufnr({handle}, {what})	Number	get buffer number for {handle}/{what}
 ch_getjob({channel})		Job	get the Job of {channel}
-ch_info({handle})		String	info about channel {handle}
+ch_info({handle})		Dict	info about channel {handle}
+ch_listen({address} [, {options}])
+				Channel	listen on {address} - port on loopback
+					or UNIX domain socket
 ch_log({msg} [, {handle}])	none	write {msg} in the channel log file
 ch_logfile({fname} [, {mode}])	none	start logging channel activity
 ch_open({address} [, {options}])
@@ -115,13 +121,14 @@ ch_readraw({handle} [, {options}])
 ch_sendexpr({handle}, {expr} [, {options}])
 				any	send {expr} over JSON {handle}
 ch_sendraw({handle}, {expr} [, {options}])
-				any	send {expr} over raw {handle}
+				none	send {expr} over raw {handle}
 ch_setoptions({handle}, {options})
 				none	set options for {handle}
 ch_status({handle} [, {options}])
 				String	status of channel {handle}
 changenr()			Number	current change number
-char2nr({expr} [, {utf8}])	Number	ASCII/UTF-8 value of first char in {expr}
+char2nr({expr} [, {utf8}])	Number	ASCII/UTF-8 value of first char in
+					{expr}
 charclass({string})		Number	character class of {string}
 charcol({expr} [, {winid}])	Number	column number of cursor or mark
 charidx({string}, {idx} [, {countcc} [, {utf16}]])
@@ -136,7 +143,6 @@ complete({startcol}, {matches}) none	set Insert mode completion
 complete_add({expr})		Number	add completion match
 complete_check()		Number	check for key typed during completion
 complete_info([{what}])		Dict	get current completion information
-complete_match([{lnum}, {col}])	List	get completion column and trigger text
 confirm({msg} [, {choices} [, {default} [, {type}]]])
 				Number	number of choice picked by user
 copy({expr})			any	make a shallow copy of {expr}
@@ -181,11 +187,13 @@ expand({expr} [, {nosuf} [, {list}]])
 expandcmd({string} [, {options}])
 				String	expand {string} like with `:edit`
 extend({expr1}, {expr2} [, {expr3}])
-				List/Dict insert items of {expr2} into {expr1}
+				List/Dict
+					insert items of {expr2} into {expr1}
 extendnew({expr1}, {expr2} [, {expr3}])
-				List/Dict like |extend()| but creates a new
-					List or Dictionary
-feedkeys({string} [, {mode}])	Number	add key sequence to typeahead buffer
+				List/Dict
+					like |extend()| but creates a new List
+					or Dictionary
+feedkeys({string} [, {mode}])	none	add key sequence to typeahead buffer
 filecopy({from}, {to})		Number	|TRUE| if copying file {from} to {to}
 					worked
 filereadable({file})		Number	|TRUE| if {file} is a readable file
@@ -195,7 +203,8 @@ filter({expr1}, {expr2})	List/Dict/Blob/String
 					{expr2} is 0
 finddir({name} [, {path} [, {count}]])
 findfile({name} [, {path} [, {count}]])
-				String/List find dir/file {name} in {path}
+				String/List
+					find dir/file {name} in {path}
 flatten({list} [, {maxdepth}])	List	flatten {list} up to {maxdepth} levels
 flattennew({list} [, {maxdepth}])
 				List	flatten a copy of {list}
@@ -211,16 +220,18 @@ foldtext()			String	line displayed for closed fold
 foldtextresult({lnum})		String	text for closed fold at {lnum}
 foreach({expr1}, {expr2})	List/Tuple/Dict/Blob/String
 					for each item in {expr1} call {expr2}
-foreground()			Number	bring the Vim window to the foreground
+foreground()			none	bring the Vim window to the foreground
 fullcommand({name} [, {vim9}])	String	get full command from {name}
 funcref({name} [, {arglist}] [, {dict}])
 				Funcref	reference to function {name}
 function({name} [, {arglist}] [, {dict}])
 				Funcref	named reference to function {name}
-garbagecollect([{atexit}])	none	free memory, breaking cyclic references
+garbagecollect([{atexit}])	none	free memory, breaking cyclic
+					references
 get({list}, {idx} [, {def}])	any	get item {idx} from {list} or {def}
 get({dict}, {key} [, {def}])	any	get item {key} from {dict} or {def}
 get({func}, {what})		any	get property of funcref/partial {func}
+getbgcolor()			List	get background colour as [r, g, b]
 getbufinfo([{buf}])		List	information about buffers
 getbufline({buf}, {lnum} [, {end}])
 				List	lines {lnum} to {end} of buffer {buf}
@@ -230,7 +241,7 @@ getbufvar({buf}, {varname} [, {def}])
 getcellpixels()			List	get character cell pixel size
 getcellwidths()			List	get character cell width overrides
 getchangelist([{buf}])		List	list of change list items
-getchar([{expr} [, {opts}]])	Number or String
+getchar([{expr} [, {opts}]])	Number/String
 					get one character from the user
 getcharmod()			Number	modifiers for the last typed character
 getcharpos({expr})		List	position of cursor, mark, etc.
@@ -246,7 +257,8 @@ getcmdprompt()			String	return the current command-line prompt
 getcmdscreenpos()		Number	return cursor screen position in
 					command-line
 getcmdtype()			String	return current command-line type
-getcmdwintype()			String	return current command-line window type
+getcmdwintype()			String	return current command-line window
+					type
 getcompletion({pat}, {type} [, {filtered}])
 				List	list of cmdline completion matches
 getcompletiontype({pat})	String	return the type of the command-line
@@ -264,7 +276,8 @@ getimstatus()			Number	|TRUE| if the IME status is active
 getjumplist([{winnr} [, {tabnr}]])
 				List	list of jump list items
 getline({lnum})			String	line {lnum} of current buffer
-getline({lnum}, {end})		List	lines {lnum} to {end} of current buffer
+getline({lnum}, {end})		List	lines {lnum} to {end} of current
+					buffer
 getloclist({nr})		List	list of location list items
 getloclist({nr}, {what})	Dict	get specific location list properties
 getmarklist([{buf}])		List	list of global/local marks
@@ -276,7 +289,8 @@ getpos({expr})			List	position of cursor, mark, etc.
 getqflist()			List	list of quickfix items
 getqflist({what})		Dict	get specific quickfix list properties
 getreg([{regname} [, 1 [, {list}]]])
-				String or List   contents of a register
+				String/List
+					contents of a register
 getreginfo([{regname}])		Dict	information about a register
 getregion({pos1}, {pos2} [, {opts}])
 				List	get the text from {pos1} to {pos2}
@@ -287,7 +301,8 @@ getscriptinfo([{opts}])		List	list of sourced scripts
 getstacktrace()			List	get current stack trace of Vim scripts
 gettabinfo([{expr}])		List	list of tab pages
 gettabvar({nr}, {varname} [, {def}])
-				any	variable {varname} in tab {nr} or {def}
+				any	variable {varname} in tab {nr} or
+					{def}
 gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
 				any	{name} in {winnr} in tab page {tabnr}
 gettagstack([{nr}])		Dict	get the tag stack of window {nr}
@@ -306,8 +321,8 @@ globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
 has({feature} [, {check}])	Number	|TRUE| if feature {feature} supported
 has_key({dict}, {key})		Number	|TRUE| if {dict} has entry {key}
 haslocaldir([{winnr} [, {tabnr}]])
-				Number	|TRUE| if the window executed |:lcd|
-					or |:tcd|
+				Number	|TRUE| if the window executed `:lcd` or
+					`:tcd`
 hasmapto({what} [, {mode} [, {abbr}]])
 				Number	|TRUE| if mapping to {what} exists
 histadd({history}, {item})	Number	add an item to a history
@@ -333,9 +348,13 @@ inputdialog({prompt} [, {text} [, {cancelreturn}]])
 inputlist({textlist})		Number	let the user pick from a choice list
 inputrestore()			Number	restore typeahead
 inputsave()			Number	save and clear typeahead
-inputsecret({prompt} [, {text}]) String	like input() but hiding the text
-insert({object}, {item} [, {idx}]) List	insert {item} in {object} [before {idx}]
-instanceof({object}, {class})	Number	|TRUE| if {object} is an instance of {class}
+inputsecret({prompt} [, {text}])
+				String	like input() but hiding the text
+insert({object}, {item} [, {idx}])
+				List	insert {item} in {object}
+					[before {idx}]
+instanceof({object}, {class})	Bool	|TRUE| if {object} is an instance of
+					{class}
 interrupt()			none	interrupt script execution
 invert({expr})			Number	bitwise invert
 isabsolutepath({path})		Number	|TRUE| if {path} is an absolute path
@@ -347,7 +366,8 @@ isnan({expr})			Number	|TRUE| if {expr} is NaN
 items({expr})			List	key/index-value pairs in {expr}
 job_getchannel({job})		Channel	get the channel handle for {job}
 job_info([{job}])		Dict	get information about {job}
-job_setoptions({job}, {options}) none	set options for {job}
+job_setoptions({job}, {options})
+				none	set options for {job}
 job_start({command} [, {options}])
 				Job	start a job
 job_status({job})		String	get the status of {job}
@@ -359,9 +379,10 @@ json_decode({string})		any	decode JSON
 json_encode({expr})		String	encode JSON
 keys({dict})			List	keys in {dict}
 keytrans({string})		String	translate internal keycodes to a form
-					that can be used by |:map|
+					that can be used by `:map`
 len({expr})			Number	the length of {expr}
-libcall({lib}, {func}, {arg})	String	call {func} in library {lib} with {arg}
+libcall({lib}, {func}, {arg})	String	call {func} in library {lib} with
+					{arg}
 libcallnr({lib}, {func}, {arg})	Number	idem, but return a Number
 line({expr} [, {winid}])	Number	line nr of cursor, last line or mark
 line2byte({lnum})		Number	byte count of line {lnum}
@@ -372,7 +393,7 @@ list2tuple({list})		Tuple	turn {list} of items into a tuple
 listener_add({callback} [, {buf} [, {unbuffered}]])
 				Number	add a callback to listen to changes
 listener_flush([{buf}])		none	invoke listener callbacks
-listener_remove({id})		none	remove a listener callback
+listener_remove({id})		Number	remove a listener callback
 localtime()			Number	current time
 log({expr})			Float	natural logarithm (base e) of {expr}
 log10({expr})			Float	logarithm of Float {expr} to base 10
@@ -380,7 +401,7 @@ luaeval({expr} [, {expr}])	any	evaluate |Lua| expression
 map({expr1}, {expr2})		List/Dict/Blob/String
 					change each item in {expr1} to {expr2}
 maparg({name} [, {mode} [, {abbr} [, {dict}]]])
-				String or Dict
+				String/Dict
 					rhs of mapping {name} in mode {mode}
 mapcheck({name} [, {mode} [, {abbr}]])
 				String	check for mappings matching {name}
@@ -395,7 +416,7 @@ matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
 				Number	highlight {pattern} with {group}
 matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
 				Number	highlight positions with {group}
-matcharg({nr})			List	arguments of |:match|
+matcharg({nr})			List	arguments of `:match`
 matchbufline({buf}, {pat}, {lnum}, {end}, [, {dict})
 				List	all the {pat} matches in buffer {buf}
 matchdelete({id} [, {win}])	Number	delete match identified by {id}
@@ -406,7 +427,8 @@ matchfuzzy({list}, {str} [, {dict}])
 matchfuzzypos({list}, {str} [, {dict}])
 				List	fuzzy match {str} in {list}
 matchlist({expr}, {pat} [, {start} [, {count}]])
-				List	match and submatches of {pat} in {expr}
+				List	match and submatches of {pat} in
+					{expr}
 matchstr({expr}, {pat} [, {start} [, {count}]])
 				String	{count}'th match of {pat} in {expr}
 matchstrlist({list}, {pat} [, {dict})
@@ -423,18 +445,20 @@ mzeval({expr})			any	evaluate |MzScheme| expression
 nextnonblank({lnum})		Number	line nr of non-blank line >= {lnum}
 ngettext({single}, {plural}, {number}[, {domain}])
 				String	translate text based on {number}
-nr2char({expr} [, {utf8}])	String	single char with ASCII/UTF-8 value {expr}
+nr2char({expr} [, {utf8}])	String	single char with ASCII/UTF-8 value
+					{expr}
 or({expr}, {expr})		Number	bitwise OR
 pathshorten({expr} [, {len}])	String	shorten directory names in a path
 perleval({expr})		any	evaluate |Perl| expression
-popup_atcursor({what}, {options}) Number create popup window near the cursor
+popup_atcursor({what}, {options})
+				Number	create popup window near the cursor
 popup_beval({what}, {options})	Number	create popup window for 'ballooneval'
 popup_clear()			none	close all popup windows
 popup_close({id} [, {result}])	none	close popup window {id}
 popup_create({what}, {options}) Number	create a popup window
 popup_dialog({what}, {options}) Number	create a popup window used as a dialog
-popup_filter_menu({id}, {key})  Number	filter for a menu popup window
-popup_filter_yesno({id}, {key}) Number	filter for a dialog popup window
+popup_filter_menu({id}, {key})  Bool	filter for a menu popup window
+popup_filter_yesno({id}, {key}) Bool	filter for a dialog popup window
 popup_findecho()		Number	get window ID of popup for `:echowin`
 popup_findinfo()		Number	get window ID of info popup window
 popup_findpreview()		Number	get window ID of preview popup window
@@ -447,7 +471,8 @@ popup_menu({what}, {options})	Number	create a popup window used as a menu
 popup_move({id}, {options})	none	set position of popup window {id}
 popup_notification({what}, {options})
 				Number	create a notification popup window
-popup_setbuf({id}, {buf})	Bool	set the buffer for the popup window {id}
+popup_setbuf({id}, {buf})	Bool	set the buffer for the popup window
+					{id}
 popup_setoptions({id}, {options})
 				none	set options for popup window {id}
 popup_settext({id}, {text})	none	set the text of popup window {id}
@@ -457,10 +482,13 @@ preinserted()			Number	whether text is inserted after cursor
 prevnonblank({lnum})		Number	line nr of non-blank line <= {lnum}
 printf({fmt}, {expr1}...)	String	format text
 prompt_getprompt({buf})		String	get prompt text
-prompt_setcallback({buf}, {expr}) none	set prompt callback function
-prompt_setinterrupt({buf}, {text}) none	set prompt interrupt function
+prompt_setcallback({buf}, {expr})
+				none	set prompt callback function
+prompt_setinterrupt({buf}, {text})
+				none	set prompt interrupt function
 prompt_setprompt({buf}, {text}) none	set prompt text
-prop_add({lnum}, {col}, {props})  none	add one text property
+prop_add({lnum}, {col}, {props})
+				Number	add one text property
 prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...])
 				none	add multiple text properties
 prop_clear({lnum} [, {lnum-end} [, {props}]])
@@ -494,6 +522,8 @@ readdirex({dir} [, {expr} [, {dict}]])
 				List	file info in {dir} selected by {expr}
 readfile({fname} [, {type} [, {max}]])
 				List	get list of lines from file {fname}
+redraw_listener_add({opts})	Number	add callbacks to listen for redraws
+redraw_listener_remove({id})	none	remove a redraw listener
 reduce({object}, {func} [, {initial}])
 				any	reduce {object} using {func}
 reg_executing()			String	get the executing register name
@@ -503,7 +533,7 @@ reltimefloat({time})		Float	turn the time value into a Float
 reltimestr({time})		String	turn time value into a String
 remote_expr({server}, {string} [, {idvar} [, {timeout}]])
 				String	send expression
-remote_foreground({server})	Number	bring Vim server to the foreground
+remote_foreground({server})	none	bring Vim server to the foreground
 remote_peek({serverid} [, {retvar}])
 				Number	check for reply string
 remote_read({serverid} [, {timeout}])
@@ -526,9 +556,10 @@ round({expr})			Float	round off {expr}
 rubyeval({expr})		any	evaluate |Ruby| expression
 screenattr({row}, {col})	Number	attribute at screen position
 screenchar({row}, {col})	Number	character at screen position
-screenchars({row}, {col})	List	List of characters at screen position
+screenchars({row}, {col})	List	list of characters at screen position
 screencol()			Number	current cursor column
-screenpos({winid}, {lnum}, {col}) Dict	screen row and col of a text character
+screenpos({winid}, {lnum}, {col})
+				Dict	screen row and col of a text character
 screenrow()			Number	current cursor row
 screenstring({row}, {col})	String	characters at screen position
 search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
@@ -552,7 +583,7 @@ setbufvar({buf}, {varname}, {val})
 				none	set {varname} in buffer {buf} to {val}
 setcellwidths({list})		none	set character cell width overrides
 setcharpos({expr}, {list})	Number	set the {expr} position to {list}
-setcharsearch({dict})		Dict	set character search from {dict}
+setcharsearch({dict})		none	set character search from {dict}
 setcmdline({str} [, {pos}])	Number	set command-line
 setcmdpos({pos})		Number	set cursor position in command-line
 setcursorcharpos({list})	Number	move cursor to position in {list}
@@ -569,7 +600,9 @@ setqflist({list} [, {action}])	Number	modify quickfix list using {list}
 setqflist({list}, {action}, {what})
 				Number	modify specific quickfix list props
 setreg({n}, {v} [, {opt}])	Number	set register to value and type
-settabvar({nr}, {varname}, {val}) none	set {varname} in tab page {nr} to {val}
+settabvar({nr}, {varname}, {val})
+				none	set {varname} in tab page {nr} to
+					{val}
 settabwinvar({tabnr}, {winnr}, {varname}, {val})
 				none	set {varname} in window {winnr} in tab
 					page {tabnr} to {val}
@@ -601,7 +634,8 @@ sign_unplacelist({list})	List	unplace a list of signs
 simplify({filename})		String	simplify filename as much as possible
 sin({expr})			Float	sine of {expr}
 sinh({expr})			Float	hyperbolic sine of {expr}
-slice({expr}, {start} [, {end}])  String, List or Blob
+slice({expr}, {start} [, {end}])
+				String/List/Blob
 					slice of a String, List or Blob
 sort({list} [, {how} [, {dict}]])
 				List	sort {list}, compare with {how}
@@ -612,7 +646,7 @@ sound_playfile({path} [, {callback}])
 				Number	play sound file {path}
 sound_stop({id})		none	stop playing sound {id}
 soundfold({word})		String	sound-fold {word}
-spellbadword()			String	badly spelled word at cursor
+spellbadword()			List	badly spelled word at cursor
 spellsuggest({word} [, {max} [, {capital}]])
 				List	spelling suggestions
 split({expr} [, {pat} [, {keepempty}]])
@@ -631,7 +665,8 @@ strcharpart({str}, {start} [, {len} [, {skipcc}]])
 				String	{len} characters of {str} at
 					character {start}
 strchars({expr} [, {skipcc}])	Number	character count of the String {expr}
-strdisplaywidth({expr} [, {col}]) Number display length of the String {expr}
+strdisplaywidth({expr} [, {col}])
+				Number	display length of the String {expr}
 strftime({format} [, {time}])	String	format time with a specified format
 strgetchar({str}, {index})	Number	get char {index} from {str}
 stridx({haystack}, {needle} [, {start}])
@@ -639,20 +674,24 @@ stridx({haystack}, {needle} [, {start}])
 string({expr})			String	String representation of {expr} value
 strlen({expr})			Number	length of the String {expr}
 strpart({str}, {start} [, {len} [, {chars}]])
-				String	{len} bytes/chars of {str} at
-					byte {start}
+				String	{len} bytes/chars of {str} at byte
+					{start}
 strptime({format}, {timestring})
-				Number	Convert {timestring} to unix timestamp
+				Number	convert {timestring} to unix timestamp
 strridx({haystack}, {needle} [, {start}])
 				Number	last index of {needle} in {haystack}
 strtrans({expr})		String	translate string to make it printable
 strutf16len({string} [, {countcc}])
-				Number	number of UTF-16 code units in {string}
-strwidth({expr})		Number	display cell length of the String {expr}
-submatch({nr} [, {list}])	String or List
-					specific match in ":s" or substitute()
+				Number	number of UTF-16 code units in
+					{string}
+strwidth({expr})		Number	display cell length of the String
+					{expr}
+submatch({nr} [, {list}])	String/List
+					specific match in `:substitute` or
+					substitute()
 substitute({expr}, {pat}, {sub}, {flags})
-				String	all {pat} in {expr} replaced with {sub}
+				String	all {pat} in {expr} replaced with
+					{sub}
 swapfilelist()			List	swap files found in 'directory'
 swapinfo({fname})		Dict	information about swap file {fname}
 swapname({buf})			String	swap file of buffer {buf}
@@ -661,12 +700,16 @@ synIDattr({synID}, {what} [, {mode}])
 				String	attribute {what} of syntax ID {synID}
 synIDtrans({synID})		Number	translated syntax ID of {synID}
 synconcealed({lnum}, {col})	List	info about concealing
-synstack({lnum}, {col})		List	stack of syntax IDs at {lnum} and {col}
+synstack({lnum}, {col})		List	stack of syntax IDs at {lnum} and
+					{col}
 system({expr} [, {input}])	String	output of shell command/filter {expr}
 systemlist({expr} [, {input}])	List	output of shell command/filter {expr}
 tabpagebuflist([{arg}])		List	list of buffer numbers in tab page
 tabpagenr([{arg}])		Number	number of current or last tab page
-tabpagewinnr({tabarg} [, {arg}]) Number	number of current window in tab page
+tabpagewinnr({tabarg} [, {arg}])
+				Number	number of current window in tab page
+tabpanel_getinfo()		Dict	get current state of the tabpanel
+tabpanel_scroll({n} [, {opts}])	Bool	scroll the tabpanel
 tagfiles()			List	tags files used
 taglist({expr} [, {filename}])	List	list of tags matching {expr}
 tan({expr})			Float	tangent of {expr}
@@ -696,11 +739,12 @@ term_setansicolors({buf}, {colors})
 				none	set ANSI palette in GUI color mode
 term_setapi({buf}, {expr})	none	set |terminal-api| function name prefix
 term_setkill({buf}, {how})	none	set signal to stop job in terminal
-term_setrestore({buf}, {command}) none	set command to restore terminal
+term_setrestore({buf}, {command})
+				none	set command to restore terminal
 term_setsize({buf}, {rows}, {cols})
 				none	set the size of a terminal
 term_start({cmd} [, {options}])	Number	open a terminal window and run a job
-term_wait({buf} [, {time}])	Number  wait for screen to be updated
+term_wait({buf} [, {time}])	none    wait for screen to be updated
 terminalprops()			Dict	properties of the terminal
 test_alloc_fail({id}, {countdown}, {repeat})
 				none	make memory allocation fail
@@ -708,11 +752,11 @@ test_autochdir()		none	enable 'autochdir' during startup
 test_feedinput({string})	none	add key sequence to input buffer
 test_garbagecollect_now()	none	free memory right now for testing
 test_garbagecollect_soon()	none	free memory soon for testing
-test_getvalue({string})		any	get value of an internal variable
+test_getvalue({string})		Number	get value of an internal variable
 test_gui_event({event}, {args})	bool	generate a GUI event for testing
 test_ignore_error({expr})	none	ignore a specific error
 test_mswin_event({event}, {args})
-				bool	generate MS-Windows event for testing
+				Bool	generate MS-Windows event for testing
 test_null_blob()		Blob	null value for testing
 test_null_channel()		Channel	null value for testing
 test_null_dict()		Dict	null value for testing
@@ -729,15 +773,17 @@ test_setmouse({row}, {col})	none	set the mouse position for testing
 test_settime({expr})		none	set current time for testing
 test_srand_seed([{seed}])	none	set seed for testing srand()
 test_unknown()			any	unknown value for testing
-test_void()			any	void value for testing
+test_void()			none	void value for testing
 timer_info([{id}])		List	information about timers
 timer_pause({id}, {pause})	none	pause or unpause a timer
 timer_start({time}, {callback} [, {options}])
 				Number	create a timer
 timer_stop({timer})		none	stop a timer
 timer_stopall()			none	stop all timers
-tolower({expr})			String	the String {expr} switched to lowercase
-toupper({expr})			String	the String {expr} switched to uppercase
+tolower({expr})			String	the String {expr} switched to
+					lowercase
+toupper({expr})			String	the String {expr} switched to
+					uppercase
 tr({src}, {fromstr}, {tostr})	String	translate chars of {src} in {fromstr}
 					to chars in {tostr}
 trim({text} [, {mask} [, {dir}]])
@@ -747,7 +793,7 @@ tuple2list({tuple})		List	turn {tuple} of items into a list
 type({expr})			Number	type of value {expr}
 typename({expr})		String	representation of the type of {expr}
 undofile({name})		String	undo file name for {name}
-undotree([{buf}])		List	undo file tree for buffer {buf}
+undotree([{buf}])		Dict	undo file tree for buffer {buf}
 uniq({list} [, {func} [, {dict}]])
 				List	remove adjacent duplicates from a list
 uri_decode({string})		String	URI-decode a string
@@ -756,13 +802,13 @@ utf16idx({string}, {idx} [, {countcc} [, {charidx}]])
 				Number	UTF-16 index of byte {idx} in {string}
 values({dict})			List	values in {dict}
 virtcol({expr} [, {list} [, {winid}])
-				Number or List
+				Number/List
 					screen column of cursor or mark
 virtcol2col({winid}, {lnum}, {col})
 				Number  byte index of a character on screen
 visualmode([{expr}])		String	last visual mode used
 wildmenumode()			Number	whether 'wildmenu' mode is active
-wildtrigger()			Number	start wildcard expansion
+wildtrigger()			none	start wildcard expansion
 win_execute({id}, {command} [, {silent}])
 				String	execute {command} in window {id}
 win_findbuf({bufnr})		List	find windows containing {bufnr}
@@ -783,7 +829,8 @@ winheight({nr})			Number	height of window {nr}
 winlayout([{tabnr}])		List	layout of windows in tab {tabnr}
 winline()			Number	window line of the cursor
 winnr([{expr}])			Number	number of current window
-winrestcmd()			String	returns command to restore window sizes
+winrestcmd()			String	returns command to restore window
+					sizes
 winrestview({dict})		none	restore view of current window
 winsaveview()			Dict	save view of current window
 winwidth({nr})			Number	width of window {nr}
@@ -911,7 +958,7 @@ appendbufline({buf}, {lnum}, {text})			*appendbufline()*
 		for an invalid {lnum}, since {lnum} isn't actually used.
 
 		Can also be used as a |method| after a List, the base is
-		passed as the second argument: >
+		passed as the third argument: >
 			mylist->appendbufline(buf, lnum)
 <
 		Return type: |Number|
@@ -1231,7 +1278,7 @@ balloon_show({expr})					*balloon_show()*
 		{only available when compiled with the |+balloon_eval| or
 		|+balloon_eval_term| feature}
 
-		Return type: |Number|
+		Return type: void
 
 
 balloon_split({msg})					*balloon_split()*
@@ -1350,6 +1397,9 @@ blob2str({blob} [, {options}])				*blob2str()*
 		Can also be used as a |method|: >
 			GetBlob()->blob2str()
 <
+		If `iconv` is not available and the encoding cannot be converted
+		using built-in conversion rules, an error will be reported.
+
 		Return type: list
 
 
@@ -1455,7 +1505,7 @@ bufload({buf})						*bufload()*
 		Can also be used as a |method|: >
 			eval 'somename'->bufload()
 <
-		Return type: |Number|
+		Return type: void
 
 
 bufloaded({buf})					*bufloaded()*
@@ -1850,7 +1900,7 @@ clearmatches([{win}])					*clearmatches()*
 		Can also be used as a |method|: >
 			GetWin()->clearmatches()
 <
-		Return type: |Number|
+		Return type: void
 
 
 cmdcomplete_info()					*cmdcomplete_info()*
@@ -1938,6 +1988,14 @@ complete({startcol}, {matches})				*complete()* *E785*
 		The match can be selected with CTRL-N and CTRL-P as usual with
 		Insert mode completion.  The popup menu will appear if
 		specified, see |ins-completion-menu|.
+		Unlike with other |ins-completion| modes, the CTRL-N and
+		CTRL-P keys can be mapped while this completion is active.
+		For example, to make CTRL-N move the selection without
+		inserting the match: >
+
+		inoremap   complete_info().mode ==# 'eval'
+			\ ? '' : ''
+<
 
 		Example (using legacy Vim script): >
 
@@ -1970,7 +2028,7 @@ complete({startcol}, {matches})				*complete()* *E785*
 		second argument: >
 			GetMatches()->complete(col('.'))
 <
-		Return type: |Number|
+		Return type: void
 
 
 complete_add({expr})					*complete_add()*
@@ -2074,51 +2132,6 @@ complete_info([{what}])					*complete_info()*
 		Return type: dict
 
 
-complete_match([{lnum}, {col}])				*complete_match()*
-		Searches backward from the given position and returns a List
-		of matches according to the 'isexpand' option.  When no
-		arguments are provided, uses the current cursor position.
-
-		Each match is represented as a List containing
-		[startcol, trigger_text] where:
-		- startcol: column position where completion should start,
-		  or -1 if no trigger position is found.  For multi-character
-		  triggers, returns the column of the first character.
-		- trigger_text: the matching trigger string from 'isexpand',
-		  or empty string if no match was found or when using the
-		  default 'iskeyword' pattern.
-
-		When 'isexpand' is empty, uses the 'iskeyword' pattern "\k\+$"
-		to find the start of the current keyword.
-
-		Examples: >
-	set isexpand=.,->,/,/*,abc
-	func CustomComplete()
-	  let res = complete_match()
-	  if res->len() == 0 | return | endif
-	  let [col, trigger] = res[0]
-	  let items = []
-	  if trigger == '/*'
-	    let items = ['/** */']
-	  elseif trigger == '/'
-	    let items = ['/*! */', '// TODO:', '// fixme:']
-	  elseif trigger == '.'
-	    let items = ['length()']
-	  elseif trigger =~ '^\->'
-	    let items = ['map()', 'reduce()']
-	  elseif trigger =~ '^\abc'
-	    let items = ['def', 'ghk']
-	  endif
-	  if items->len() > 0
-	    let startcol = trigger =~ '^/' ? col : col + len(trigger)
-	    call complete(startcol, items)
-	  endif
-	endfunc
-	inoremap  call CustomComplete()
-<
-		Return type: list>
-
-
 confirm({msg} [, {choices} [, {default} [, {type}]]])	*confirm()*
 		confirm() offers the user a dialog, from which a choice can be
 		made.  It returns the number of the choice.  For the first
@@ -2659,7 +2672,7 @@ echoraw({string})					*echoraw()*
 			call echoraw(&t_TI)
 <		Use with care, you can mess up the terminal this way.
 
-		Return type: |Number|
+		Return type: void
 
 
 empty({expr})						*empty()*
@@ -2702,7 +2715,7 @@ err_teapot([{expr}])					*err_teapot()*
 		indicating that coffee is temporarily not available.
 		If {expr} is present it must be a String.
 
-		Return type: |Number|
+		Return type: void
 
 
 escape({string}, {chars})				*escape()*
@@ -2759,13 +2772,18 @@ executable({expr})					*executable()*
 		then the name is also tried without adding an extension.
 		On MS-Windows it only checks if the file exists and is not a
 		directory, not if it's really executable.
+
 		On MS-Windows an executable in the same directory as the Vim
 		executable is always found.  Since this directory is added to
 		$PATH it should also work to execute it |win32-PATH|.
-					*NoDefaultCurrentDirectoryInExePath*
-		On MS-Windows an executable in Vim's current working directory
-		is also normally found, but this can be disabled by setting
-		the $NoDefaultCurrentDirectoryInExePath environment variable.
+					*$NoDefaultCurrentDirectoryInExePath*
+		On MS-Windows when using cmd.exe as 'shell' an executable in
+		Vim's current working directory is also normally found, which
+		can be disabled by setting the
+		`$NoDefaultCurrentDirectoryInExePath` environment variable.
+		This variable is always set by Vim when executing external
+		commands (e.g., via |:!|, |:make|, or |system()|) for security
+		reasons.
 
 		The result is a Number:
 			1	exists
@@ -2935,7 +2953,7 @@ exists({expr})						*exists()*
 		Can also be used as a |method|: >
 			Varname()->exists()
 <
-		Return type: |String|
+		Return type: |Number|
 
 
 exists_compiled({expr})					*exists_compiled()*
@@ -2952,7 +2970,7 @@ exists_compiled({expr})					*exists_compiled()*
 		Can only be used in a |:def| function. *E1233*
 		This does not work to check for arguments or local variables.
 
-		Return type: |String|
+		Return type: |Number|
 
 
 exp({expr})						*exp()*
@@ -3214,7 +3232,7 @@ feedkeys({string} [, {mode}])				*feedkeys()*
 		Can also be used as a |method|: >
 			GetInput()->feedkeys()
 <
-		Return type: |Number|
+		Return type: void
 
 
 filecopy({from}, {to})					*filecopy()*
@@ -3651,7 +3669,7 @@ foreground()						*foreground()*
 		allow a window to bring itself to the foreground.  Use
 		|remote_foreground()| instead.
 
-		Return type: |Number|
+		Return type: void
 		{only in the Win32, Motif and GTK GUI versions and the
 		Win32 console version}
 
@@ -3665,14 +3683,22 @@ fullcommand({name} [, {vim9}])				*fullcommand()*
 		ambiguous (for user-defined commands) or cannot be shortened
 		this way. |vim9-no-shorten|
 
-		Without the {vim9} argument uses the current script version.
-		If {vim9} is present and FALSE then legacy script rules are
-		used.  When {vim9} is present and TRUE then Vim9 rules are
-		used, e.g. "en" is not a short form of "endif".
-
-		For example `fullcommand('s')`, `fullcommand('sub')`,
-		`fullcommand(':%substitute')` all return "substitute".
+		Without the {vim9} argument, the current script version is
+		used.  When {vim9} is present and FALSE, legacy script rules
+		are used.  When {vim9} is present and TRUE, Vim9 rules are
+		used (e.g., "en" is not a short form of "endif").
 
+		Note: Command validation is not performed.  Results depend on
+		Vim's internal command-specific identification rules.
+		Examples:
+>vim
+		  echo [fullcommand('s')]		|" ['substitute']
+		  echo [fullcommand('sub')]		|" ['substitute']
+		  echo [fullcommand(': mark word')]	|" ['mark']
+		  echo [fullcommand(': markword')]	|" ['']
+		  echo [fullcommand('en')]		|" ['endif']
+		  echo [fullcommand('en', v:true)]	|" ['']
+<
 		Can also be used as a |method|: >
 			GetName()->fullcommand()
 <
@@ -3803,7 +3829,7 @@ garbagecollect([{atexit}])				*garbagecollect()*
 		type a character.  To force garbage collection immediately use
 		|test_garbagecollect_now()|.
 
-		Return type: |String|
+		Return type: void
 
 
 get({list}, {idx} [, {default}])			*get()* *get()-list*
@@ -4019,6 +4045,25 @@ getbufvar({buf}, {varname} [, {def}])			*getbufvar()*
 		Return type: any, depending on {varname}
 
 
+getbgcolor()						*getbgcolor()*
+		Returns a |List| describing the current background colour as
+		[red, green, blue], each component in the range 0..255.
+
+		In the GUI (or with 'termguicolors' set) the value comes from
+		the |hl-Normal| highlight group's background.  In a terminal
+		it comes from the OSC 11 response (also available as
+		|v:termrbgresp|).
+		Returns [] when no value is available, e.g. before the
+		terminal has answered the OSC 11 query, or when |hl-Normal|
+		has no background colour set.
+
+		Useful when manually crafting RGB image data and you want to
+		flatten alpha onto the same colour the terminal will actually
+		display behind the image.
+
+		Return type: list
+
+
 getcellpixels()						*getcellpixels()*
 		Returns a |List| of terminal cell pixel size.
 		List format is [xpixel, ypixel].
@@ -4730,7 +4775,7 @@ getloclist({nr} [, {what}])				*getloclist()*
 			:echo getloclist(3, {'all': 0})
 			:echo getloclist(5, {'filewinid': 0})
 <
-		Return type: list> or list
+		Return type: list> or dict
 
 
 getmarklist([{buf}])					*getmarklist()*
@@ -4882,6 +4927,11 @@ getpos({expr})						*getpos()*
 		within the line.  To get the character position in the line,
 		use |getcharpos()|.
 
+		The visual marks |'<| and |'>| refer to the beginning and end
+		of the visual selection relative to the buffer.  Note that
+		this differs from |setpos()|, where they are relative to the
+		cursor position.
+
 		Note that for '< and '> Visual mode matters: when it is "V"
 		(visual line mode) the column of '< is zero and the column of
 		'> is a large number equal to |v:maxcol|.
@@ -5006,7 +5056,7 @@ getqflist([{what}])					*getqflist()*
 			:echo getqflist({'nr': 2, 'title': 1})
 			:echo getqflist({'lines' : ["F1:10:L10"]})
 <
-		Return type: list> or list
+		Return type: list> or dict
 
 
 getreg([{regname} [, 1 [, {list}]]])			*getreg()*
@@ -5393,9 +5443,13 @@ getwininfo([{winid}])					*getwininfo()*
 					{only with the +quickfix feature}
 			quickfix	1 if quickfix or location list window
 					{only with the +quickfix feature}
+			status_height	status lines height (0 or 1)
+			tabnr		tab page number
 			terminal	1 if a terminal window
 					{only with the +terminal feature}
-			tabnr		tab page number
+			textoff		number of columns occupied by any
+					'foldcolumn', 'signcolumn' and line
+					number in front of the text
 			topline		first displayed buffer line
 			variables	a reference to the dictionary with
 					window-local variables
@@ -5404,9 +5458,6 @@ getwininfo([{winid}])					*getwininfo()*
 					otherwise
 			wincol		leftmost screen column of the window;
 					"col" from |win_screenpos()|
-			textoff		number of columns occupied by any
-					'foldcolumn', 'signcolumn' and line
-					number in front of the text
 			winid		|window-ID|
 			winnr		window number
 			winrow		topmost screen line of the window;
@@ -6248,7 +6299,7 @@ insert({object}, {item} [, {idx}])			*insert()*
 		Return type: |Number|
 
 
-instanceof({object}, {class})			*instanceof()* *E614* *E616* *E693*
+instanceof({object}, {class})			*instanceof()* *E616* *E693*
 		The result is a Number, which is |TRUE| when the {object}
 		argument is a direct or indirect instance of a |Class|,
 		|Interface|, or class |:type| alias specified by {class}.
@@ -6260,7 +6311,7 @@ instanceof({object}, {class})			*instanceof()* *E614* *E616* *E693*
 <		Can also be used as a |method|: >
 			myobj->instanceof(mytype)
 <
-		Return type: |Number|
+		Return type: |vim9-boolean|
 
 
 interrupt()						*interrupt()*
@@ -6424,6 +6475,8 @@ js_decode({string})					*js_decode()*
 		- Strings can be in single quotes.
 		- Empty items in an array (between two commas) are allowed and
 		  result in v:none items.
+		- Capitalization is ignored in keywords: true, false, null,
+		  NaN, Infinity and -Infinity.
 
 		Can also be used as a |method|: >
 			ReadObject()->js_decode()
@@ -6462,12 +6515,9 @@ json_decode({string})					*json_decode()* *E491*
 		  same as {"1":2}.
 		- More floating point numbers are recognized, e.g. "1." for
 		  "1.0", or "001.2" for "1.2".  Special floating point values
-		  "Infinity", "-Infinity" and "NaN" (capitalization ignored)
-		  are accepted.
+		  "Infinity", "-Infinity" and "NaN" are accepted.
 		- Leading zeroes in integer numbers are ignored, e.g. "012"
 		  for "12" or "-012" for "-12".
-		- Capitalization is ignored in literal names null, true or
-		  false, e.g. "NULL" for "null", "True" for "true".
 		- Control characters U+0000 through U+001F which are not
 		  escaped in strings are accepted, e.g. "	" (tab
 		  character in string) for "\t".
@@ -6475,10 +6525,10 @@ json_decode({string})					*json_decode()* *E491*
 		  and results in v:none.
 		- Backslash in an invalid 2-character sequence escape is
 		  ignored, e.g. "\a" is decoded as "a".
-		- A correct surrogate pair in JSON strings should normally be
-		  a 12 character sequence such as "\uD834\uDD1E", but
-		  json_decode() silently accepts truncated surrogate pairs
-		  such as "\uD834" or "\uD834\u"
+		- A surrogate pair in JSON strings is a 12 character sequence
+		  such as "\uD834\uDD1E".  A lone surrogate or an invalid
+		  surrogate pair (e.g. "\uD800" or "\uD800\uD800") results
+		  in an error.
 							*E938*
 		A duplicate key in an object, valid in rfc7159, is not
 		accepted by json_decode() as the result must be a valid Vim
@@ -6823,9 +6873,10 @@ listener_add({callback} [, {buf} [, {unbuffered}]])	*listener_add()*
 		The entries are in the order the changes were made, thus the
 		most recent change is at the end.
 
-		Because of the third trigger reason for triggering a callback
-		listed above, the line numbers passed to the callback are not
-		guaranteed to be valid.  If this is a problem then make
+		Because of the third reason for triggering a callback listed
+		above, the line numbers passed to the callback are not
+		guaranteed to be valid. In particular, the end value can be
+		greater than line('$') + 1. If this is a problem then make
 		{unbuffered} |TRUE|.
 
 		When {unbuffered} is |TRUE| the {callback} is invoked for every
@@ -6854,6 +6905,8 @@ listener_add({callback} [, {buf} [, {unbuffered}]])	*listener_add()*
 		second argument: >
 			GetBuffer()->listener_add(callback)
 <
+		This function is not available in the |sandbox|.
+
 		Return type: |Number|
 
 
@@ -6868,7 +6921,9 @@ listener_flush([{buf}])					*listener_flush()*
 		Can also be used as a |method|: >
 			GetBuffer()->listener_flush()
 <
-		Return type: |Number|
+		This function is not available in the |sandbox|.
+
+		Return type: void
 
 
 listener_remove({id})					*listener_remove()*
@@ -6879,6 +6934,8 @@ listener_remove({id})					*listener_remove()*
 		Can also be used as a |method|: >
 			GetListenerId()->listener_remove()
 <
+		This function is not available in the |sandbox|.
+
 		Return type: |Number|
 
 
@@ -7212,7 +7269,7 @@ mapset({dict})
 			    mapset(d)
 			endfor
 <
-		Return type: |Number|
+		Return type: void
 
 
 match({expr}, {pat} [, {start} [, {count}]])		*match()*
@@ -7524,15 +7581,15 @@ matchfuzzy({list}, {str} [, {dict}])			*matchfuzzy()*
 				use for fuzzy matching.
 
 		{str} is treated as a literal string and regular expression
-		matching is NOT supported.  The maximum supported {str} length
-		is 256.
+		matching is NOT supported.  Only the first 1024 characters of
+		{str} and of each item in {list} are used for matching;
+		characters beyond that are ignored.
 
 		When {str} has multiple words each separated by white space,
 		then the list of strings that have all the words is returned.
 
 		If there are no matching strings or there is an error, then an
-		empty list is returned.  If length of {str} is greater than
-		256, then returns an empty list.
+		empty list is returned.
 
 		When {limit} is given, matchfuzzy() will find up to this
 		number of matches in {list} and return them in sorted order.
@@ -7975,8 +8032,8 @@ nr2char({expr} [, {utf8}])				*nr2char()*
 		value {expr}.  Examples: >
 			nr2char(64)		returns "@"
 			nr2char(32)		returns " "
-<		When {utf8} is omitted or zero, the current 'encoding' is used.
-		Example for "utf-8": >
+<		When {utf8} is omitted or zero, the current 'encoding' is
+		used.  Example for "utf-8": >
 			nr2char(300)		returns I with bow character
 <		When {utf8} is TRUE, always return UTF-8 characters.
 		Note that a NUL character in the file is specified with
@@ -8379,24 +8436,24 @@ printf({fmt}, {expr1} ...)				*printf()*
 
 							*E1502*
 		You can re-use a [field-width] (or [precision]) argument: >
-		    echo printf("%1$d at width %2$d is: %01$*2$d", 1, 2)
+		    echo printf("%1$d at width %2$d is: %1$0*2$d", 1, 2)
 <		    1 at width 2 is: 01
 
 		However, you can't use it as a different type: >
-		    echo printf("%1$d at width %2$ld is: %01$*2$d", 1, 2)
+		    echo printf("%1$d at width %2$ld is: %1$0*2$d", 1, 2)
 <		    E1502: Positional argument 2 used as field width reused as
 		    different type: long int/int
 
 							*E1503*
 		When a positional argument is used, but not the correct number
 		or arguments is given, an error is raised: >
-		    echo printf("%1$d at width %2$d is: %01$*2$.*3$d", 1, 2)
+		    echo printf("%1$d at width %2$d is: %1$0*2$.*3$d", 1, 2)
 <		    E1503: Positional argument 3 out of bounds: %1$d at width
-		    %2$d is: %01$*2$.*3$d
+		    %2$d is: %1$0*2$.*3$d
 
 		Only the first error is reported: >
-		    echo printf("%01$*2$.*3$d %4$d", 1, 2)
-<		    E1503: Positional argument 3 out of bounds: %01$*2$.*3$d
+		    echo printf("%1$0*2$.*3$d %4$d", 1, 2)
+<		    E1503: Positional argument 3 out of bounds: %1$0*2$.*3$d
 		    %4$d
 
 							*E1504*
@@ -8475,8 +8532,10 @@ prompt_setcallback({buf}, {expr})			*prompt_setcallback()*
 
 <		Can also be used as a |method|: >
 			GetBuffer()->prompt_setcallback(callback)
+<
+		Return type: void
 
-<		{only available when compiled with the |+channel| feature}
+		{only available when compiled with the |+channel| feature}
 
 prompt_setinterrupt({buf}, {expr})			*prompt_setinterrupt()*
 		Set a callback for buffer {buf} to {expr}.  When {expr} is an
@@ -8490,7 +8549,7 @@ prompt_setinterrupt({buf}, {expr})			*prompt_setinterrupt()*
 		Can also be used as a |method|: >
 			GetBuffer()->prompt_setinterrupt(callback)
 <
-		Return type: |Number|
+		Return type: void
 
 		{only available when compiled with the |+channel| feature}
 
@@ -8504,7 +8563,7 @@ prompt_setprompt({buf}, {text})				*prompt_setprompt()*
 		Can also be used as a |method|: >
 			GetBuffer()->prompt_setprompt('command: ')
 <
-		Return type: |Number|
+		Return type: void
 
 		{only available when compiled with the |+channel| feature}
 
@@ -8828,6 +8887,50 @@ readfile({fname} [, {type} [, {max}]])			*readfile()*
 		Return type: list or list
 
 
+redraw_listener_add({opts})				*redraw_listener_add()*
+		Add a listener that holds callback functions that will be
+		called at specific times in the redraw cycle.  {opts} is a
+		dictionary that contain the callback functions to be defined.
+		At least one callback must be specified. *E1571*
+		Returns a unique ID that can be passed to
+		|redraw_listener_remove()|.
+
+		{opts} may have the following entries:
+
+		    on_start	Called first on each screen redraw.  Takes no
+				arguments and returns nothing.
+		    on_end	Called at the end of each screen redraw.
+				Takes no arguments and returns nothing.
+
+		A good use case for this function is with the |listener_add()|
+		callback with unbuffered set to TRUE.  This allows you to
+		modify the state on buffer changes, and finally render that
+		state just before the next redraw, only if it has changed.
+		Attempting to render or redraw for every single buffer change
+		would be very inefficient.
+
+		You may not call redraw_listener_add() during any of the
+		callbacks defined in {opts}. *E1570*
+
+		Can also be used as a |method|: >
+			GetOpts()->redraw_listener_add()
+<
+		This function is not available in the |sandbox|.
+
+		Return type: |Number|
+
+
+redraw_listener_remove({id})			*redraw_listener_remove()*
+		Remove a redraw listener previously added with
+		|redraw_listener_add()|.  Returns FALSE when {id} could not be
+		found, TRUE when {id} was removed.
+
+		Can also be used as a |method|: >
+			GetRedrawListenerId()->redraw_listener_remove()
+<
+		Return type: void
+
+
 reduce({object}, {func} [, {initial}])			*reduce()* *E998*
 		{func} is called for every item in {object}, which can be a
 		|String|, |List|, |Tuple| or a |Blob|.  {func} is called with
@@ -8997,7 +9100,7 @@ remote_foreground({server})				*remote_foreground()*
 		Can also be used as a |method|: >
 			ServerName()->remote_foreground()
 <
-		Return type: |Number|
+		Return type: void
 
 		{only in the Win32, Motif and GTK GUI versions and the
 		Win32 console version}
@@ -9081,7 +9184,7 @@ remote_startserver({name})		*remote_startserver()* *E941* *E942*
 		Can also be used as a |method|: >
 			ServerName()->remote_startserver()
 <
-		Return type: |Number|
+		Return type: void
 
 		{only available when compiled with the |+clientserver| feature}
 
@@ -9829,7 +9932,7 @@ setbufvar({buf}, {varname}, {val})			*setbufvar()*
 		third argument: >
 			GetValue()->setbufvar(buf, varname)
 <
-		Return type: |Number|
+		Return type: void
 
 
 setcellwidths({list})					*setcellwidths()*
@@ -9866,7 +9969,7 @@ setcellwidths({list})					*setcellwidths()*
 		match with what Vim knows about each emoji.  If it doesn't
 		look right you need to adjust the {list} argument.
 
-		Return type: |Number|
+		Return type: void
 
 
 setcharpos({expr}, {list})				*setcharpos()*
@@ -9909,7 +10012,7 @@ setcharsearch({dict})					*setcharsearch()*
 		Can also be used as a |method|: >
 			SavedSearch()->setcharsearch()
 <
-		Return type: dict
+		Return type: void
 
 
 setcmdline({str} [, {pos}])				*setcmdline()*
@@ -9976,7 +10079,7 @@ setenv({name}, {val})					*setenv()*
 		second argument: >
 			GetPath()->setenv('PATH')
 <
-		Return type: |Number|
+		Return type: void
 
 
 setfperm({fname}, {mode})				*setfperm()* *chmod*
@@ -10111,9 +10214,14 @@ setpos({expr}, {list})					*setpos()*
 		preferred column is not set.  When it is present and setting a
 		mark position it is not used.
 
-		Note that for '< and '> changing the line number may result in
-		the marks to be effectively be swapped, so that '< is always
-		before '>.
+		Note that for |'<| and |'>| changing the line number may
+		result in the marks to be effectively swapped, so that |'<| is
+		always before |'>|.
+
+		The visual marks |'<| and |'>| refer to the beginning and end
+		of the visual selection relative to the cursor position.
+		Note that this differs from |getpos()|, where they are
+		relative to the buffer.
 
 		Returns 0 when the position could be set, -1 otherwise.
 		An error message is given if {expr} is invalid.
@@ -10330,7 +10438,7 @@ settabvar({tabnr}, {varname}, {val})			*settabvar()*
 		third argument: >
 			GetValue()->settabvar(tab, name)
 <
-		Return type: |Number|
+		Return type: void
 
 
 settabwinvar({tabnr}, {winnr}, {varname}, {val})	*settabwinvar()*
@@ -10355,7 +10463,7 @@ settabwinvar({tabnr}, {winnr}, {varname}, {val})	*settabwinvar()*
 		fourth argument: >
 			GetValue()->settabwinvar(tab, winnr, name)
 <
-		Return type: |Number|
+		Return type: void
 
 
 settagstack({nr}, {dict} [, {action}])			*settagstack()*
@@ -10408,7 +10516,7 @@ setwinvar({winnr}, {varname}, {val})			*setwinvar()*
 		third argument: >
 			GetValue()->setwinvar(winnr, name)
 <
-		Return type: |Number|
+		Return type: void
 
 
 sha256({expr})						*sha256()*
@@ -10670,7 +10778,7 @@ sound_clear()						*sound_clear()*
 		On some Linux systems you may need the libcanberra-pulse
 		package, otherwise sound may not stop.
 
-		Return type: |Number|
+		Return type: void
 
 		{only available when compiled with the |+sound| feature}
 
@@ -10740,7 +10848,7 @@ sound_stop({id})					*sound_stop()*
 		Can also be used as a |method|: >
 			soundid->sound_stop()
 <
-		Return type: |Number|
+		Return type: void
 
 		{only available when compiled with the |+sound| feature}
 
@@ -11281,7 +11389,12 @@ strptime({format}, {timestring})			*strptime()*
 		can try different {format} values until you get a non-zero
 		result.
 
+		Note: On MS-Windows, where the C runtime does not provide
+		strptime(), Vim uses a built-in fallback that always uses
+		English locale names regardless of the active locale.
+
 		See also |strftime()|.
+
 		Examples: >
 		  :echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
 <		  862156163 >
@@ -11604,7 +11717,7 @@ synIDtrans({synID})					*synIDtrans()*
 
 
 synconcealed({lnum}, {col})				*synconcealed()*
-		The result is a |List| with currently three items:
+		The result is a |List| with three items:
 		1. The first item in the list is 0 if the character at the
 		   position {lnum} and {col} is not part of a concealable
 		   region, 1 if it is.  {lnum} is used like with |getline()|.
@@ -11661,6 +11774,30 @@ system({expr} [, {input}])				*system()* *E677*
 		Get the output of the shell command {expr} as a |String|.  See
 		|systemlist()| to get the output as a |List|.
 
+		{expr} can be a |String| or a |List|.
+		When {expr} is a |String|, the command is executed through the
+		shell (see below for how the command is constructed).
+
+								*E1575*
+		When {expr} is a |List|, the first item is the executable and
+		the remaining items are passed as arguments directly.  The
+		command is executed without using a shell, similar to
+		|job_start()|.  Since no shell is involved, shell features
+		such as redirection, piping, globbing, environment variable
+		expansion and backtick expansion will not work.  Characters
+		like ">" are passed as literal arguments to the command, not
+		interpreted as redirection.  Use this form when arguments may
+		contain special characters that should not be interpreted by
+		the shell.  Example: >
+		    :let out = system(['grep', '-r', 'pattern', '.'])
+<		With the String form ">" would be shell redirection, but
+		with a List it is passed as a literal argument: >
+		    :let out = system(['echo', 'hello', '>', 'world'])
+<		This outputs "hello > world", not redirect to a file.
+
+		To use the shell explicitly with a List: >
+		    :let out = system(['/bin/sh', '-c', 'echo $HOME'])
+<
 		When {input} is given and is a |String| this string is written
 		to a file and passed as stdin to the command.  The string is
 		written as-is, you need to take care of using the correct line
@@ -11679,14 +11816,18 @@ system({expr} [, {input}])				*system()* *E677*
 		When prepended by |:silent| the terminal will not be set to
 		cooked mode.  This is meant to be used for commands that do
 		not need the user to type.  It avoids stray characters showing
-		up on the screen which require |CTRL-L| to remove. >
+		up on the screen which require |CTRL-L| to remove.
+		When calling system() from a 'statusline' expression, an
+		|autocommand| or a |timer| callback, you should use |:silent|
+		to avoid terminal responses (e.g. from cursor style queries)
+		being echoed on the screen. >
 			:silent let f = system('ls *.vim')
 <
-		Note: Use |shellescape()| or |::S| with |expand()| or
-		|fnamemodify()| to escape special characters in a command
-		argument.  Newlines in {expr} may cause the command to fail.
-		The characters in 'shellquote' and 'shellxquote' may also
-		cause trouble.
+		Note: When {expr} is a String, use |shellescape()| or |::S|
+		with |expand()| or |fnamemodify()| to escape special
+		characters in a command argument.  Newlines in {expr} may
+		cause the command to fail.  The characters in 'shellquote'
+		and 'shellxquote' may also cause trouble.
 		This is not to be used for interactive commands.
 
 		The result is a String.  Example: >
@@ -11699,7 +11840,8 @@ system({expr} [, {input}])				*system()* *E677*
 		To avoid the string being truncated at a NUL, all NUL
 		characters are replaced with SOH (0x01).
 
-		The command executed is constructed using several options:
+		When {expr} is a String, the command executed is constructed
+		using several options:
 	'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
 		({tmp} is an automatically generated file name).
 		For Unix, braces are put around {expr} to allow for
@@ -11726,6 +11868,9 @@ system({expr} [, {input}])				*system()* *E677*
 systemlist({expr} [, {input}])				*systemlist()*
 		Same as |system()|, but returns a |List| with lines (parts of
 		output separated by NL) with NULs transformed into NLs.
+		Like |system()|, {expr} can be a |String| (executed through
+		the shell) or a |List| (executed directly without a shell).
+		See |system()| for details.
 		Output is the same as |readfile()| will output with {binary}
 		argument set to "b", except that there is no extra empty item
 		when the result ends in a NL.
@@ -11737,6 +11882,11 @@ systemlist({expr} [, {input}])				*systemlist()*
 <
 		Returns an empty string on error.
 
+		Like |system()|, prepend |:silent| when the command does not
+		need user interaction and is called from a 'statusline'
+		expression, an |autocommand| or a |timer| callback.  See
+		|system()| for details.
+
 		Can also be used as a |method|: >
 			:echo GetCmd()->systemlist()
 <
@@ -11798,6 +11948,38 @@ tabpagewinnr({tabarg} [, {arg}])			*tabpagewinnr()*
 		Return type: |Number|
 
 
+tabpanel_getinfo()					*tabpanel_getinfo()*
+		Return a |Dictionary| describing the current state of the
+		tabpanel (see |tabpanel|).  The dictionary has these keys:
+			align		"left" or "right"
+			columns		width in screen columns
+			scrollbar	|TRUE| if a scrollbar is shown
+			offset		current scroll offset in rows
+			total		total number of rows rendered
+			max_offset	largest valid value for "offset"
+
+		The "total" and "max_offset" values are only accurate after
+		the tabpanel has been drawn at least once.
+
+		Return type: dict
+
+
+tabpanel_scroll({n} [, {opts}])				*tabpanel_scroll()*
+		Scroll the tabpanel by {n} rows.  Positive values scroll down
+		(later tab pages become visible), negative values scroll up.
+		The new offset is clamped to the valid range.
+
+		When {opts} is a |Dictionary| and its "absolute" entry is
+		|TRUE|, {n} is used as the new absolute scroll offset instead
+		of a delta.
+
+		Returns |TRUE| if the scroll offset changed, |FALSE| otherwise
+		(for example when the tabpanel is not shown, or the offset is
+		already at the requested value).
+
+		Return type: |vim9-boolean|
+
+
 tagfiles()						*tagfiles()*
 		Returns a |List| with the file names used to search for tags
 		for the current buffer.  This is the 'tags' option expanded.
@@ -11917,6 +12099,7 @@ terminalprops()						*terminalprops()*
 		   underline_rgb	whether |t_8u| works **
 		   mouse		mouse type supported
 		   kitty		whether Kitty terminal was detected
+		   decrqm		whether sending DECRQM sequences work
 
 		** value 'u' for unknown, 'y' for yes, 'n' for no
 
@@ -11936,6 +12119,9 @@ terminalprops()						*terminalprops()*
 
 		For "mouse" the value 'u' is unknown
 
+		If "decrqm" is 'y', then Vim will query support for the
+		'termsync' and 'termresize' ("inband") options.
+
 		Also see:
 		- 'ambiwidth' - detected by using |t_u7|.
 		- |v:termstyleresp| and |v:termblinkresp| for the response to
@@ -11988,7 +12174,7 @@ timer_pause({timer}, {paused})				*timer_pause()*
 		Can also be used as a |method|: >
 			GetTimer()->timer_pause(1)
 <
-		Return type: |Number|
+		Return type: void
 
 		{only available when compiled with the |+timers| feature}
 
@@ -12048,7 +12234,7 @@ timer_stop({timer})					*timer_stop()*
 		Can also be used as a |method|: >
 			GetTimer()->timer_stop()
 <
-		Return type: |Number|
+		Return type: void
 
 		{only available when compiled with the |+timers| feature}
 
@@ -12058,7 +12244,7 @@ timer_stopall()						*timer_stopall()*
 		invoked.  Useful if a timer is misbehaving.  If there are no
 		timers there is no error.
 
-		Return type: |Number|
+		Return type: void
 
 		{only available when compiled with the |+timers| feature}
 
@@ -12548,7 +12734,7 @@ wildtrigger()						*wildtrigger()*
 
 		Return value is always 0.
 
-		Return type: |Number|
+		Return type: void
 
 
 win_execute({id}, {command} [, {silent}])		*win_execute()*
@@ -12580,8 +12766,7 @@ win_findbuf({bufnr})					*win_findbuf()*
 		Can also be used as a |method|: >
 			GetBufnr()->win_findbuf()
 <
-		Return type: list or list
-
+		Return type: list
 
 win_getid([{win} [, {tab}]])				*win_getid()*
 		Get the |window-ID| for the specified window.
@@ -12627,7 +12812,8 @@ win_gettype([{nr}])					*win_gettype()*
 win_gotoid({expr})					*win_gotoid()*
 		Go to window with ID {expr}.  This may also change the current
 		tabpage.
-		Return TRUE if successful, FALSE if the window cannot be found.
+		Return TRUE if successful, FALSE if the window cannot be
+		found.
 
 		Can also be used as a |method|: >
 			GetWinid()->win_gotoid()
@@ -12900,7 +13086,7 @@ winrestview({dict})					*winrestview()*
 		Can also be used as a |method|: >
 			GetView()->winrestview()
 <
-		Return type: |Number|
+		Return type: void
 
 
 winsaveview()						*winsaveview()*
@@ -13072,6 +13258,7 @@ acl			Compiled with |ACL| support.
 all_builtin_terms	Compiled with all builtin terminals enabled. (always
 			true)
 amiga			Amiga version of Vim.
+android			Android version of Vim. *android*
 arabic			Compiled with Arabic support |Arabic|.
 arp			Compiled with ARP support (Amiga).
 autocmd			Compiled with autocommand support. (always true)
@@ -13147,6 +13334,14 @@ hangul_input		Compiled with Hangul input support. |hangul|
 hpux			HP-UX version of Vim.
 hurd			GNU/Hurd version of Vim
 iconv			Can use iconv() for conversion.
+image			Compiled with the popup window "image" attribute.
+			See |popup-image|.
+image_cairo		Compiled with the Cairo image backend (GTK2 and GTK3 GUI).
+image_gdi		Compiled with the GDI image backend (Windows GUI).
+image_gdk		Compiled with the GDK image backend (GTK4 GUI).
+image_kitty		Compiled with the kitty graphics protocol image backend
+			(terminal).
+image_sixel		Compiled with the DEC sixel image backend (terminal).
 insert_expand		Compiled with support for CTRL-X expansion commands in
 			Insert mode. (always true)
 job			Compiled with support for |channel| and |job|
@@ -13227,6 +13422,7 @@ spell			Compiled with spell checking support |spell|.
 startuptime		Compiled with |--startuptime| support.
 statusline		Compiled with support for 'statusline', 'rulerformat'
 			and special formats of 'titlestring' and 'iconstring'.
+statusline_click	Click handlers in 'statusline' |stl-%[FuncName]|
 sun			SunOS version of Vim.
 sun_workshop		Support for Sun |workshop| has been removed.
 syntax			Compiled with syntax highlighting support |syntax|.
@@ -13242,6 +13438,7 @@ termguicolors		Compiled with true color in terminal support.
 terminal		Compiled with |terminal| support.
 terminfo		Compiled with terminfo instead of termcap.
 termresponse		Compiled with support for |t_RV| and |v:termresponse|.
+termux			Termux version of Vim. *termux*
 textobjects		Compiled with support for |text-objects|.
 textprop		Compiled with support for |text-properties|.
 tgetent			Compiled with tgetent support, able to use a termcap
@@ -13278,8 +13475,6 @@ vtp			Compiled for vcon support |+vtp| (check vcon to find
 			out if it works in the current console).
 wayland			Compiled with Wayland protocol support.
 wayland_clipboard	Compiled with support for Wayland clipboard.
-wayland_focus_steal	Compiled with support for Wayland clipboard focus
-			stealing.
 wildignore		Compiled with 'wildignore' option.
 wildmenu		Compiled with 'wildmenu' option.
 win16			old version for MS-Windows 3.1 (always false)
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index 86b2d18772..32cbc06248 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,7 +1,7 @@
-*change.txt*    For Vim version 9.1.  Last change: 2025 Oct 26
+*change.txt*	For Vim version 9.2.  Last change: 2026 Jun 18
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 This file describes commands that delete or change text.  In this context,
@@ -75,18 +75,21 @@ For inserting text see |insert.txt|.
 					*:d* *:de* *:del* *:delete* *:dl* *:dp*
 :[range]d[elete] [x]	Delete [range] lines (default: current line) [into
 			register x].
-			Note these weird abbreviations:
-			   :dl		delete and list
-			   :dell	idem
-			   :delel	idem
-			   :deletl	idem
-			   :deletel	idem
-			   :dp		delete and print
-			   :dep		idem
-			   :delp	idem
-			   :delep	idem
-			   :deletp	idem
-			   :deletep	idem
+			Note these weird abbreviations applicable only to
+			legacy Vim script:
+			  :dl		delete and list
+			  :dell		idem
+			  :delel	idem
+			  :deletl	idem
+			  :deletel	idem
+			  :dp		delete and print
+			  :dep		idem
+			  :delp		idem
+			  :delep	idem
+			  :deletp	idem
+			  :deletep	idem
+			Warning: These give |E492| in |Vim9| script and `:dl`
+			executes as `:dlist`.
 
 :[range]d[elete] [x] {count}
 			Delete {count} lines, starting with [range]
@@ -798,7 +801,8 @@ out then.  Example: >
 	:%s/TESTING
 This deletes "TESTING" from all lines, but only one per line.
 								*E1270*
-For compatibility with Vi these two exceptions are allowed in legacy script:
+For compatibility with Vi these two exceptions are allowed in legacy Vim
+script:
 "\/{string}/" and "\?{string}?" do the same as "//{string}/r".
 "\&{string}&" does the same as "//{string}/".
 				*pattern-delimiter* *E146* *E1241* *E1242*
@@ -1094,7 +1098,8 @@ inside of strings can change!  Also see 'softtabstop' option. >
 							*:y* *:yank* *E850*
 :[range]y[ank] [x]	Yank [range] lines [into register x].  Yanking to the
 			"* or "+ registers is possible only when the
-			|+clipboard| feature is included.
+			|+clipboard| or |+clipboard_provider| features are
+			included.
 
 :[range]y[ank] [x] {count}
 			Yank {count} lines, starting with last line number
@@ -1156,9 +1161,9 @@ inside of strings can change!  Also see 'softtabstop' option. >
 			current line).
 
 							*:ip* *:iput*
-:[line]ip[ut] [x]	like |:put|, but adjust indent to the current line
+:[line]ip[ut] [x]	Like |:put|, but adjust indent to the current line.
 
-:[line]ip[ut]! [x]	like |:put|!, but adjust indent to the current line
+:[line]ip[ut]! [x]	Like |:put|!, but adjust indent to the current line.
 
 ["x]]p		    or					*]p* *]*
 ["x]]	Like "p", but adjust the indent to the current line.
@@ -1329,19 +1334,19 @@ and ":put" commands and with CTRL-R.
 		feature}
 							*quote_#* *quote#*
 6. Alternate file register "#
-Contains the name of the alternate file for the current window.  It will
-change how the |CTRL-^| command works.
-This register is writable, mainly to allow for restoring it after a plugin has
-changed it.  It accepts buffer number: >
-    let altbuf = bufnr(@#)
-    ...
-    let @# = altbuf
-It will give error |E86| if you pass buffer number and this buffer does not
-exist.
-It can also accept a match with an existing buffer name: >
+Contains the |alternate-file| name for current window
+This register is writeable and changes which buffer CTRL-^ enters.
+A String is matched against existing buffer names, like |:buffer|: >
     let @# = 'buffer_name'
-Error |E93| if there is more than one buffer matching the given name or |E94|
-if none of buffers matches the given name.
+Also supports using buffer number and |file-pattern|.
+
+Throws
+  |E86| when the buffer number does not exist
+  |E93| when more than one buffer matches
+  |E94| when none match
+
+Clear the register with empty String: >
+    let @# = ''
 
 7. Expression register "=			*quote_=* *quote=* *@=*
 This is not really a register that stores text, but is a way to use an
@@ -1776,7 +1781,9 @@ l	Long lines are not broken in insert mode: When a line was longer than
 	automatically format it.
 							*fo-m*
 m	Also break at a multibyte character above 255.  This is useful for
-	Asian text where every character is a word on its own.
+	Asian text where every character is a word on its own.  Note that
+	line breaks may also be added after punctuation characters such as
+	colons to match the CJK linebreaking rules.
 							*fo-M*
 M	When joining lines, don't insert a space before or after a multibyte
 	character.  Overrules the 'B' flag.
diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt
index 2965483465..839dcc296e 100644
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -1,7 +1,7 @@
-*channel.txt*      For Vim version 9.1.  Last change: 2025 Oct 26
+*channel.txt*	For Vim version 9.2.  Last change: 2026 Apr 29
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 		      Inter-process communication		*channel*
@@ -26,6 +26,7 @@ The Netbeans interface also uses a channel. |netbeans|
 13. Controlling a job			|job-control|
 14. Using a prompt buffer		|prompt-buffer|
 15. Language Server Protocol		|language-server-protocol|
+16. Debug Adapter Protocol		|debug-adapter-protocol|
 
 							*E1277*
 {only when compiled with the |+channel| feature for channel stuff}
@@ -56,6 +57,7 @@ NL	every message ends in a NL (newline) character
 JSON	JSON encoding |json_encode()|
 JS	JavaScript style JSON-like encoding |js_encode()|
 LSP	Language Server Protocol encoding |language-server-protocol|
+DAP	Debug Adapter Protocol encoding |debug-adapter-protocol|
 
 Common combination are:
 - Using a job connected through pipes in NL mode.  E.g., to run a style
@@ -112,6 +114,32 @@ Vim to write lines in log file: >
 	call ch_logfile('channellog', 'w')
 See |ch_logfile()|.
 
+You can also make Vim act as a server using |ch_listen()|.  This does not
+require an external server program.
+
+							*channel-listen-demo*
+Start Vim and create a listening channel: >
+	func OnAccept(channel, clientaddr)
+	  " Log the connection
+	  echomsg "Accepted connection from " .. a:clientaddr
+
+	  " Get current time and send it to the client
+	  let current_time = strftime("%Y-%m-%d %H:%M:%S")
+	  call ch_sendraw(a:channel, "Vim Server Time: " .. current_time .. "\n")
+
+	  " Optional: close immediately if you only want to provide the time
+	  call ch_close(a:channel)
+	endfunc
+
+	" Start listening on port 8765
+	let server = ch_listen('8765', {"callback": "OnAccept"})
+
+From another Vim instance (or any program) you can connect to it: >
+	let channel = ch_open('localhost:8765')
+
+When done, close the server channel: >
+	call ch_close(server)
+
 ==============================================================================
 3. Opening a channel					*channel-open*
 
@@ -130,6 +158,11 @@ a Unix-domain socket path prefixed by "unix:".  E.g. >
     [2001:db8::1]:8765   " IPv6 + port
     unix:/tmp/my-socket  " Unix-domain socket path
 
+When a domain name resolves to multiple addresses (e.g., both IPv6 and IPv4),
+Vim tries each address in order.  If a connection is slow or unreachable, it
+quickly falls back to the next address.  This helps when IPv6 or IPv4 is
+unreachable on the network.
+
 {options} is a dictionary with optional entries:	*channel-open-options*
 
 "mode" can be:						*channel-mode*
@@ -137,7 +170,9 @@ a Unix-domain socket path prefixed by "unix:".  E.g. >
 	"js"   - Use JS (JavaScript) encoding, more efficient than JSON.
 	"nl"   - Use messages that end in a NL character
 	"raw"  - Use raw messages
+	"blob" - Use raw messages and pass callback data as a |Blob|
 	"lsp"  - Use language server protocol encoding
+	"dap"  - Use debug adapter protocol encoding
 						*channel-callback* *E921*
 "callback"	A function that is called when a message is received that is
 		not handled otherwise (e.g. a JSON message with ID zero).  It
@@ -148,12 +183,15 @@ a Unix-domain socket path prefixed by "unix:".  E.g. >
 	endfunc
 	let channel = ch_open("localhost:8765", {"callback": "Handle"})
 <
-		When "mode" is "json" or "js" or "lsp" the "msg" argument is
-		the body of the received message, converted to Vim types.
+		When "mode" is any of "json", "js", "lsp" or "dap" the "msg"
+		argument is the body of the received message, converted to Vim
+		types.
 		When "mode" is "nl" the "msg" argument is one message,
 		excluding the NL.
 		When "mode" is "raw" the "msg" argument is the whole message
 		as a string.
+		When "mode" is "blob" the "msg" argument is the whole message
+		as a |Blob|.
 
 		For all callbacks: Use |function()| to bind it to arguments
 		and/or a Dictionary.  Or use the form "dict.function" to bind
@@ -514,7 +552,7 @@ ch_close({handle})						*ch_close()*
 		Can also be used as a |method|: >
 			GetChannel()->ch_close()
 <
-		Return type: |Number|
+		Return type: void
 
 ch_close_in({handle})						*ch_close_in()*
 		Close the "in" part of {handle}.  See |channel-close-in|.
@@ -524,7 +562,7 @@ ch_close_in({handle})						*ch_close_in()*
 		Can also be used as a |method|: >
 			GetChannel()->ch_close_in()
 <
-		Return type: |Number|
+		Return type: void
 
 
 ch_evalexpr({handle}, {expr} [, {options}])			*ch_evalexpr()*
@@ -532,7 +570,8 @@ ch_evalexpr({handle}, {expr} [, {options}])			*ch_evalexpr()*
 		according to the type of channel.  The function cannot be used
 		with a raw channel.  See |channel-use|.
 		{handle} can be a Channel or a Job that has a Channel.
-		When using the "lsp" channel mode, {expr} must be a |Dict|.
+		When using the "lsp" or "dap" channel mode, {expr} must be a
+		|Dict|.
 								*E917*
 		{options} must be a Dictionary.  It must not have a "callback"
 		entry.  It can have a "timeout" entry to specify the timeout
@@ -540,8 +579,8 @@ ch_evalexpr({handle}, {expr} [, {options}])			*ch_evalexpr()*
 
 		ch_evalexpr() waits for a response and returns the decoded
 		expression.  When there is an error or timeout it returns an
-		empty |String| or, when using the "lsp" channel mode, returns an
-		empty |Dict|.
+		empty |String| or, when using the "lsp" or "dap" channel mode,
+		returns an empty |Dict|.
 
 		Note that while waiting for the response, Vim handles other
 		messages.  You need to make sure this doesn't cause trouble.
@@ -601,8 +640,7 @@ ch_info({handle})						*ch_info()*
 		   "status"	  "open", "buffered" or "closed", like
 				  ch_status()
 		When opened with ch_open():
-		   "hostname"	  the hostname of the address
-		   "port"	  the port of the address
+		   "port"	  the port on loopback
 		   "path"	  the path of the Unix-domain socket
 		   "sock_status"  "open" or "closed"
 		   "sock_mode"	  "NL", "RAW", "JSON" or "JS"
@@ -622,7 +660,7 @@ ch_info({handle})						*ch_info()*
 		   "err_io"	  "out", "null", "pipe", "file" or "buffer"
 		   "err_timeout"  timeout in msec
 		   "in_status"	  "open" or "closed"
-		   "in_mode"	  "NL", "RAW", "JSON", "JS" or "LSP"
+		   "in_mode"	  "NL", "RAW", "JSON", "JS" or "LSP" or "DAP"
 		   "in_io"	  "null", "pipe", "file" or "buffer"
 		   "in_timeout"	  timeout in msec
 
@@ -631,6 +669,36 @@ ch_info({handle})						*ch_info()*
 <
 		Return type: dict
 
+ch_listen({address} [, {options}])		*E1573* *E1574* *ch_listen()*
+		Listen on {address} - port on loopback or UNIX domain socket
+		for incoming channel connections.  This creates a server-side
+		channel, unlike |ch_open()| which connects to an existing
+		server.
+		Returns a Channel.  Use |ch_status()| to check for failure.
+
+		{address} is a String, see |channel-address| for the possible
+		accepted forms, however in case of TCP sockets it allows to
+		set only a port and binds to loopback address for security
+		reasons.
+		Note: IPv6 is not yet supported.
+
+		If {options} is given it must be a |Dictionary|.
+		See |channel-open-options|.
+		The "callback" in {options} is invoked when a new connection
+		is accepted.  It receives two arguments: the new Channel and
+		the client address as a String (e.g. "127.0.0.1:12345").
+
+		Use |ch_open()| to connect to an existing server instead.
+
+		See |channel-listen-demo| for an example.
+
+		Can also be used as a |method|: >
+			GetAddress()->ch_listen()
+<
+		{only available when compiled with the |+channel| feature}
+
+		Return type: channel
+
 ch_log({msg} [, {handle}])					*ch_log()*
 		Write String {msg} in the channel log file, if it was opened
 		with |ch_logfile()|.
@@ -645,7 +713,7 @@ ch_log({msg} [, {handle}])					*ch_log()*
 		Can also be used as a |method|: >
 			'did something'->ch_log()
 <
-		Return type: dict
+		Return type: void
 
 ch_logfile({fname} [, {mode}])					*ch_logfile()*
 		Start logging channel activity to {fname}.
@@ -673,7 +741,7 @@ ch_logfile({fname} [, {mode}])					*ch_logfile()*
 		Can also be used as a |method|: >
 			'logfile'->ch_logfile('w')
 <
-		Return type: |Number|
+		Return type: void
 
 ch_open({address} [, {options}])				*ch_open()*
 		Open a channel to {address}.  See |channel|.
@@ -685,6 +753,9 @@ ch_open({address} [, {options}])				*ch_open()*
 		If {options} is given it must be a |Dictionary|.
 		See |channel-open-options|.
 
+		Use |ch_listen()| to listen for incoming connections
+		instead.
+
 		Can also be used as a |method|: >
 			GetAddress()->ch_open()
 <
@@ -728,14 +799,15 @@ ch_sendexpr({handle}, {expr} [, {options}])			*ch_sendexpr()*
 		with a raw channel.
 		See |channel-use|.				*E912*
 		{handle} can be a Channel or a Job that has a Channel.
-		When using the "lsp" channel mode, {expr} must be a |Dict|.
+		When using the "lsp" or "dap" channel mode, {expr} must be a
+		|Dict|.
 
-		If the channel mode is "lsp", then returns a Dict.  Otherwise
-		returns an empty String.  If the "callback" item is present in
-		{options}, then the returned Dict contains the ID of the
-		request message.  The ID can be used to send a cancellation
-		request to the LSP server (if needed).  Returns an empty Dict
-		on error.
+		If the channel mode is "lsp" or "dap", then returns a Dict.
+		Otherwise returns an empty String.  If the "callback" item is
+		present in {options}, then the returned Dict contains the ID
+		of the request message.  The ID can be used to send a
+		cancellation request to the LSP server or debug adapter (if
+		needed).  Returns an empty Dict on error.
 
 		If a response message is not expected for {expr}, then don't
 		specify the "callback" item in {options}.
@@ -758,7 +830,7 @@ ch_sendraw({handle}, {expr} [, {options}])		*ch_sendraw()*
 		Can also be used as a |method|: >
 			GetChannel()->ch_sendraw(rawexpr)
 <
-		Return type: dict or |String|
+		Return type: void
 
 ch_setoptions({handle}, {options})			*ch_setoptions()*
 		Set options on {handle}:
@@ -777,7 +849,7 @@ ch_setoptions({handle}, {options})			*ch_setoptions()*
 		Can also be used as a |method|: >
 			GetChannel()->ch_setoptions(options)
 <
-		Return type: |Number|
+		Return type: void
 
 ch_status({handle} [, {options}])				*ch_status()*
 		Return the status of {handle}:
@@ -971,7 +1043,7 @@ job_setoptions({job}, {options})			*job_setoptions()*
 		Can also be used as a |method|: >
 			GetJob()->job_setoptions(options)
 <
-		Return type: |Number|
+		Return type: void
 
 
 job_start({command} [, {options}])			*job_start()*
@@ -1583,8 +1655,8 @@ A LSP request message has the following format (expressed as a Vim Dict).  The
 	"params": 
     }
 
-A LSP response message has the following format (expressed as a Vim Dict).  The
-"result" and "error" fields are optional: >
+A LSP response message has the following format (expressed as a Vim Dict).
+The "result" and "error" fields are optional: >
 
     {
 	"jsonrpc": "2.0",
@@ -1602,5 +1674,33 @@ The "params" field is optional: >
 	"params": 
     }
 
-<
+==============================================================================
+16. Debug Adapter Protocol			*debug-adapter-protocol*
+
+The debug adapter protocol is very similar to the language server protocol,
+with the main difference being that it does not use the JSON-RPC format. The
+specification can be found here:
+
+    https://microsoft.github.io/debug-adapter-protocol/specification
+
+The protocol uses the same header format as the LSP protocol.
+
+To encode and send a DAP request/notification message in a Vim |Dict| into a
+JSON message and to receive and decode a DAP JSON response/notification
+message into a Vim |Dict|, connect to the debug adapter with the
+|channel-mode| set to "dap".
+
+For messages received on a channel with |channel-mode| set to "dap", Vim will
+process the HTTP header and decode the JSON payload into a Vim |Dict| type.
+When sending messages on a channel using the |ch_evalexpr()| or
+|ch_sendexpr()| functions, Vim will add the HTTP header and encode the Vim
+expression into JSON.
+
+Vim will automatically add the "seq" field to the JSON DAP message, and manage
+the "request_seq" field as well for responses. However it will not add the
+"type" field, it should be manually specified in the |Dict|.
+
+Otherwise the behaviour is the same as how Vim handles the "lsp" channel mode
+|language-server-protocol|.
+
  vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index ede9a5ec03..6427507d7e 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,7 +1,7 @@
-*cmdline.txt*   For Vim version 9.1.  Last change: 2025 Oct 26
+*cmdline.txt*	For Vim version 9.2.  Last change: 2026 May 20
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 				*Cmdline-mode* *Command-line-mode*
@@ -56,7 +56,7 @@ history tables:
 These are completely separate.  Each history can only be accessed when
 entering the same type of line.
 Use the 'history' option to set the number of lines that are remembered
-(default: 50).
+(default: 200).
 Notes:
 - When you enter a command-line that is exactly the same as an older one, the
   old one is removed (to avoid repeated commands moving older commands out of
@@ -466,14 +466,15 @@ CTRL-L		A match is done on the pattern in front of the cursor.  If
 	                                            *c_CTRL-G* */_CTRL-G*
 CTRL-G		When 'incsearch' is set, entering a search pattern for "/" or
 		"?" and the current match is displayed then CTRL-G will move
-		to the next match (does not take |search-offset| into account)
+		to the next match.  The |search-offset| is applied when 
+		is pressed, but does not affect the match highlighting.
 		Use CTRL-T to move to the previous match.  Hint: on a regular
 		keyboard G is below T.
 	                                            *c_CTRL-T* */_CTRL-T*
 CTRL-T		When 'incsearch' is set, entering a search pattern for "/" or
 		"?" and the current match is displayed then CTRL-T will move
-		to the previous match (does not take |search-offset| into
-		account).
+		to the previous match.  The |search-offset| is applied when
+		 is pressed, but does not affect the match highlighting.
 		Use CTRL-G to move to the next match.  Hint: on a regular
 		keyboard T is above G.
 
@@ -1101,7 +1102,7 @@ Note: these are typed literally, they are not special keys!
 		   It differs from  in that  is replaced with
 		   the script line number in any situation.  *E961*
 							*:* **
-	   is replaced with the {clinetid} of the last received
+	   is replaced with the {clientid} of the last received
 		   message in |server2client()|
 
 							 *filename-modifiers*
@@ -1381,10 +1382,10 @@ Example: >
 	:au CmdwinLeave :  let &cpt = b:cpt_save
 This sets 'complete' to use completion in the current window for |i_CTRL-N|.
 Another example: >
-	:au CmdwinEnter [/\?]  startinsert
+	:au CmdwinEnter [\/\?]  startinsert
 This will make Vim start in Insert mode in the command-line window.
-Note: The "?" needs to be escaped, as this is a |file-pattern|.  See also
-|cmdline-autocompletion|.
+Note: The "/" and "?" needs to be escaped, as this is a |file-pattern|.
+See also |cmdline-autocompletion|.
 
 						*cmdwin-char*
 The character used for the pattern indicates the type of command-line:
diff --git a/runtime/doc/debug.txt b/runtime/doc/debug.txt
index 4e75c174b8..17280db77b 100644
--- a/runtime/doc/debug.txt
+++ b/runtime/doc/debug.txt
@@ -1,7 +1,7 @@
-*debug.txt*     For Vim version 9.1.  Last change: 2025 Oct 12
+*debug.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Debugging Vim						*debug-vim*
diff --git a/runtime/doc/debugger.txt b/runtime/doc/debugger.txt
index 164dfbf902..f14527d984 100644
--- a/runtime/doc/debugger.txt
+++ b/runtime/doc/debugger.txt
@@ -1,7 +1,7 @@
-*debugger.txt*  For Vim version 9.1.  Last change: 2025 Oct 12
+*debugger.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Gordon Prieur
+		  VIM REFERENCE MANUAL	  by Gordon Prieur
 
 
 Debugger Support Features				*debugger-support*
diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt
index 922da72727..c2c9cb6eb7 100644
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -1,7 +1,7 @@
-*develop.txt*   For Vim version 9.1.  Last change: 2025 Oct 09
+*develop.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Development of Vim.					*development*
@@ -153,7 +153,7 @@ VIM IS... NOT						*design-not*
   everything but the kitchen sink, but some people say that you can clean one
   with it.  ;-)"
   To use Vim with gdb see |terminal-debugger|.  Other (older) tools can be
-  found at http://www.agide.org (link seems dead)  and http://clewn.sf.net.
+  found at http://clewn.sf.net.
 - Vim is not a fancy GUI editor that tries to look nice at the cost of
   being less consistent over all platforms.  But functional GUI features are
   welcomed.
@@ -411,12 +411,12 @@ For any non-trivial change, please always create a pull request on github,
 since this triggers the test suite.
 
 A PR should ideally contain a single commit for a single logical change.
-However, you can include several commits if you want to group multiple logical,
-atomic changes in one PR.  This can also make longer PRs easier to review.  Be
-sure to describe the reasoning for your changes in each commit message, as
-this greatly helps with the review process.  In cases where each commit
-handles different logical changes, they will also be applied as separate
-patches in Vim's repository.
+However, you can include several commits if you want to group multiple
+logical, atomic changes in one PR.  This can also make longer PRs easier to
+review.  Be sure to describe the reasoning for your changes in each commit
+message, as this greatly helps with the review process.  In cases where each
+commit handles different logical changes, they will also be applied as
+separate patches in Vim's repository.
 
 							*style-clang-format*
 sound.c and sign.c can be (semi-) automatically formatted using the
diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt
index 419373a8de..c33837030a 100644
--- a/runtime/doc/diff.txt
+++ b/runtime/doc/diff.txt
@@ -1,7 +1,7 @@
-*diff.txt*      For Vim version 9.1.  Last change: 2025 Oct 14
+*diff.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 				*diff* *vimdiff* *gvimdiff* *diff-mode*
diff --git a/runtime/doc/digraph.txt b/runtime/doc/digraph.txt
index ac3ae71b5c..36b5bded51 100644
--- a/runtime/doc/digraph.txt
+++ b/runtime/doc/digraph.txt
@@ -1,7 +1,7 @@
-*digraph.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*digraph.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Digraphs					*digraph* *digraphs* *Digraphs*
diff --git a/runtime/doc/doctags.c b/runtime/doc/doctags.c
index 8822dcb9ac..8820aa5622 100644
--- a/runtime/doc/doctags.c
+++ b/runtime/doc/doctags.c
@@ -9,7 +9,6 @@
 
 #include 
 #include 
-#include 
 #include 
 
 #define LINELEN 200
@@ -63,8 +62,8 @@ main(int argc, char **argv)
 					// followed by a white character or end-of-line.
 					if (p == p2
 							&& (p1 == line || p1[-1] == ' ' || p1[-1] == '\t')
-								&& (strchr(" \t\n\r", p[1]) != NULL
-									|| p[1] == '\0'))
+							&& (strchr(" \t\n\r", p[1]) != NULL
+								|| p[1] == '\0'))
 					{
 						*p2 = '\0';
 						++p1;
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index 6141dcec12..c1fadf71ce 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,7 +1,7 @@
-*editing.txt*   For Vim version 9.1.  Last change: 2025 Oct 14
+*editing.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Editing files						*edit-files*
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 497c1a1b5b..57ca36a764 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,7 +1,7 @@
-*eval.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*eval.txt*	For Vim version 9.2.  Last change: 2026 May 31
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Expression evaluation			*expression* *expr* *E15* *eval*
@@ -38,6 +38,7 @@ a remark is given.
 12. The sandbox			|eval-sandbox|
 13. Textlock			|textlock|
 14. Vim script library		|vim-script-library|
+15. Clipboard providers		|clipboard-providers|
 
 Testing support is documented in |testing.txt|.
 Profiling is documented at |profiling|.
@@ -169,8 +170,8 @@ Note that " " and "0" are also non-empty strings, thus considered to be TRUE.
 A List, Dictionary or Float is not a Number or String, thus evaluate to FALSE.
 
 		*E611* *E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910*
-		*E913* *E974* *E975* *E976* *E1319* *E1320* *E1321* *E1322*
-		*E1323* *E1324* *E1520* *E1522*
+		*E913* *E974* *E975* *E976* *E1320* *E1322* *E1324* *E1520*
+		*E1522*
 |List|, |Tuple|, |Dictionary|, |Funcref|, |Job|, |Channel|, |Blob|, |Class|
 and |object| types are not automatically converted.
 
@@ -466,7 +467,13 @@ Changing the order of items in a list: >
 	:call reverse(list)		" reverse the order of items
 	:call uniq(sort(list))		" sort and remove duplicates
 
-
+In a Vim9 script or a def method, a new item can be appended to a List by
+using the list length as the index: >
+    vim9script
+    var l: list
+    l[0] = 'a'
+    l[1] = 'b'
+<
 For loop ~
 
 The |:for| loop executes commands for each item in a List, Tuple, String or
@@ -1348,7 +1355,13 @@ To compare Funcrefs to see if they refer to the same function, ignoring bound
 Dictionary and arguments, use |get()| to get the function name: >
 	if get(Part1, 'name') == get(Part2, 'name')
 	   " Part1 and Part2 refer to the same function
-<							*E1037*
+<
+							*E1437*
+An |Object| can only be compared with another |Object|, using only the
+"equal", "not equal", "is" and "isnot" operators |expr4|.  An |enum| is also a
+type of |Object|, and the same rules apply.
+
+							*E1037*
 Using "is" or "isnot" with a |List|, |Tuple|, |Dictionary| or |Blob| checks
 whether the expressions are referring to the same |List|, |Tuple|,
 |Dictionary| or |Blob| instance.  A copy of a |List| or |Tuple| is different
@@ -2247,7 +2260,14 @@ v:clipmethod	The current method of accessing the clipboard that is being
 			x11		X11 selections are being used.
 			none		The above methods are unavailable or
 					cannot be used.
-		See 'clipmethod' for more details.
+		If it is set to a value not in the above list, then a
+		clipboard provider with the given name is being used for the
+		clipboard functionality.  See 'clipmethod' for more details.
+
+					*v:clipproviders*
+v:clipproviders
+		A dictionary containing clipboard providers, see
+		|clipboard-providers| for more information.
 
 					*v:cmdarg* *cmdarg-variable*
 v:cmdarg	This variable is used for two purposes:
@@ -2381,8 +2401,8 @@ v:echospace	Number of screen cells that can be used for an `:echo` message
 		available above the last line.
 
 					*v:errmsg* *errmsg-variable*
-v:errmsg	Last given error message.  It's allowed to set this variable.
-		Example: >
+v:errmsg	Last error message that occurred (not necessarily displayed).
+		It's allowed to set this variable.  Example: >
 	:let v:errmsg = ""
 	:silent! next
 	:if v:errmsg != ""
@@ -2802,9 +2822,9 @@ v:sizeoflong	Number of bytes in a long.  Depends on how Vim was compiled.
 		expected result.
 
 				*v:sizeofpointer* *sizeofpointer-variable*
-v:sizeofpointer	Number of bytes in a pointer.  Depends on how Vim was compiled.
-		This is only useful for deciding whether a test will give the
-		expected result.
+v:sizeofpointer	Number of bytes in a pointer.  Depends on how Vim was
+		compiled.  This is only useful for deciding whether a test
+		will give the expected result.
 
 					*v:stacktrace* *stacktrace-variable*
 v:stacktrace	The stack trace of the exception most recently caught and
@@ -3003,6 +3023,10 @@ v:versionlong	Like v:version, but also including the patchlevel in the last
 v:vim_did_enter	Zero until most of startup is done.  It is set to one just
 		before |VimEnter| autocommands are triggered.
 
+				*v:vim_did_init* *vim_did_init-variable*
+v:vim_did_init	Zero until initialization is done.  It is set to one just
+		after |vimrc| is sourced and before |load-plugins|.
+
 					*v:warningmsg* *warningmsg-variable*
 v:warningmsg	Last given warning message.  It's allowed to set this
 		variable.
@@ -3375,7 +3399,7 @@ text...
 			  s:	script-local variables
 			  l:	local function variables
 			  v:	Vim variables.
-			This does not work in Vim9 script. |vim9-declaration|
+			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:
@@ -3651,7 +3675,7 @@ text...
 			all nested `:try`s inside the loop.  The outermost
 			`:endtry` then jumps back to the start of the loop.
 
-			In |Vim9| script `:cont` is the shortest form, to
+			In |Vim9| script `:continue` cannot be shortened, to
 			improve script readability.
 						*:break* *:brea* *E587*
 :brea[k]		When used inside a `:while` or `:for` loop, skips to
@@ -3709,19 +3733,22 @@ text...
 
 					*:cat* *:catch*
 					*E603* *E604* *E605* *E654* *E1033*
-:cat[ch] /{pattern}/	The following commands until the next `:catch`,
+:cat[ch] [/{pattern}/]	The following commands until the next `:catch`,
 			`:finally`, or `:endtry` that belongs to the same
 			`:try` as the `:catch` are executed when an exception
 			matching {pattern} is being thrown and has not yet
 			been caught by a previous `:catch`.  Otherwise, these
 			commands are skipped.
-			When {pattern} is omitted all errors are caught.
-			Examples: >
+			Pattern can start with "Vim({cmd})" to indicate an
+			exception that occurred when executing the Ex command
+			{cmd}.  When {pattern} is omitted all errors are
+			caught. Examples: >
 		:catch /^Vim:Interrupt$/	 " catch interrupts (CTRL-C)
-		:catch /^Vim\%((\a\+)\)\=:E/	 " catch all Vim errors
-		:catch /^Vim\%((\a\+)\)\=:/	 " catch errors and interrupts
+		:catch /^Vim\%((\S\+)\)\=:E/	 " catch all Vim errors
+		:catch /^Vim\%((\S\+)\)\=:/	 " catch errors and interrupts
 		:catch /^Vim(write):/		 " catch all errors in :write
-		:catch /^Vim\%((\a\+)\)\=:E123:/ " catch error E123
+		:catch /^Vim(!):/		 " catch all errors in :!
+		:catch /^Vim\%((\S\+)\)\=:E123:/ " catch error E123
 		:catch /my-exception/		 " catch user exception
 		:catch /.*/			 " catch everything
 		:catch				 " same as /.*/
@@ -3844,7 +3871,7 @@ text...
 			when the screen is redrawn.
 
 					*:echow* *:echowin* *:echowindow*
-:[N]echow[indow] {expr1} ..
+:[N]echow[indow] {expr1} ...
 			Like |:echomsg| but when the messages popup window is
 			available the message is displayed there.  This means
 			it will show for three seconds and avoid a
@@ -5228,7 +5255,7 @@ $VIMRUNTIME/plugin/openPlugin.vim
 dist#vim9#Open(file: string) ~
 
 Opens `path` with the system default handler (macOS `open`, Windows
-`explorer.exe`, Linux `xdg-open`, …).  If the variable |g:Openprg| exists the
+`start`, Linux `xdg-open`, …).  If the variable |g:Openprg| exists the
 string specified in the variable is used instead.
 
 The |:Open| user command uses file completion for its argument.
@@ -5277,5 +5304,123 @@ Usage: >vim
 	:call dist#vim9#Launch()
 	:Launch  .
 <
-
+==============================================================================
+15. Clipboard providers				*clipboard-providers*
+
+The clipboard provider feature allows the "+" |quoteplus| and "*" |quotestar|
+registers to be overridden by custom Vim script functions.  There can be
+multiple providers, and Vim chooses which one to use based on 'clipmethod'.
+
+Despite the name, it should be treated separate from the clipboard
+functionality.  It essentially overrides the existing behaviour of the
+clipboard registers.
+
+						*clipboard-providers-clipboard*
+The clipboard provider feature will respect the "unnamed" and "unnamedplus"
+values in the 'clipboard' option.  Any other value will be ignored.
+
+					*clipboard-providers-no-clipboard*
+If the |+clipboard| feature is not enabled, then the "+" and "*" registers
+will not be enabled/available unless |v:clipmethod| is set to a provider.  If
+it is set to a provider, then the clipboard registers will be exposed despite
+not having the |+clipboard| feature.
+
+						*clipboard-providers-plus*
+If on a platform that only has the "*" register, then the "+" register will
+only be available when |v:clipmethod| is set to a provider.  If you want to
+check if the "+" is available for use, it can be checked with: >
+	if has('unnamedplus')
+<
+						*clipboard-providers-clipmethod*
+To integrate the providers with Vim's clipboard functionality, the
+'clipmethod' option is used on all platforms.  The names of clipboard
+providers should be put inside the option, and if Vim chooses it, then it
+overrides the "+" and "*" registers.  Note that the "+" and "*" will not be
+saved in the viminfo at all.
+
+						*clipboard-providers-define*
+To define a clipboard provider, the |v:clipproviders| vim variable is used. It
+is a |dict| where each key is the clipboard provider name, and the value is
+another |dict| declaring the "available", "copy", and "paste" callbacks: >vim
+	let v:clipproviders["myprovider"] = {
+	    \ "available": function("Available"),
+	    \ "paste": {
+	    \     "+": function("Paste"),
+	    \     "*": function("Paste")
+	    \	},
+	    \ "copy": {
+	    \     "+": function("Copy"),
+	    \     "*": function("Copy")
+	    \	}
+	    \ }
+	set clipmethod^=myprovider
+<
+Each callback can either be a name of a function in a string, a |Funcref|, or
+a |lambda| expression.
+
+With the exception of the "available" callback if a callback is not provided,
+Vim will not invoke anything, and this is not an error.
+
+If the "paste" or "copy" callbacks are triggered recursively, then they will
+not be called.
+
+						*clipboard-providers-textlock*
+In both the "paste" and "copy" callbacks, it is not allowed to change the
+buffer text, see |textlock|.
+
+						*clipboard-providers-available*
+The "available" callback is optional, does not take any arguments and should
+return a |boolean| or non-zero number, which tells Vim if it is available
+for use.  If it is not, then Vim skips over it and tries the next 'clipmethod'
+value.  If the "available" callback is not provided, Vim assumes the provider
+is always available for use (true).
+
+						*clipboard-providers-paste*
+The "paste" callback takes the following arguments in the following order:
+	1. Name of the register being accessed, either "+" or "*".
+
+It should return a |list| or |tuple| containing the following elements in
+order:
+	1. Register type (and optional width) conforming to |setreg()|.  If it
+	   is an empty string, then the type is automatically chosen.
+	2. A |list| of strings to return to Vim, each representing a line.
+
+If an invalid value is returned, then this is not an error.  Instead the
+register will be left unchanged (not cleared).
+
+						*clipboard-providers-copy*
+The "copy" callback returns nothing and takes the following arguments in the
+following order:
+	1. Name of the register being accessed, either "+" or "*".
+	2. Register type conforming to |getregtype()|
+	3. List of strings to use, each representing a line.
+
+Below is a sample script that makes use of the clipboard provider feature: >vim
+	func Available()
+	    return v:true
+	endfunc
+
+	func Copy(reg, type, str)
+	    echom "Register: " .. a:reg
+	    echom "Register type: " .. a:type
+	    echom "Contents: " .. string(a:str)
+	endfunc
+
+	func Paste(reg)
+	    return ("b40", ["this", "is", "the", a:reg, "register!"])
+	endfunc
+
+	let v:clipproviders["test"] = {
+	    \ "available": function("Available"),
+	    \ "copy": {
+	    \     "+": function("Copy"),
+	    \     "*": function("Copy")
+	    \	},
+	    \ "paste": {
+	    \     "+": function("Paste"),
+	    \     "*": function("Paste")
+	    \	}
+	    \ }
+	set clipmethod^=test
+<
  vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/evim-ja.UTF-8.1 b/runtime/doc/evim-ja.UTF-8.1
index 1a03527202..8bfefbca77 100644
--- a/runtime/doc/evim-ja.UTF-8.1
+++ b/runtime/doc/evim-ja.UTF-8.1
@@ -1,4 +1,4 @@
-.TH EVIM 1 "2002 February 16"
+.TH EVIM 1 "2024 August 12"
 .SH åå‰
 evim \- easy Vim, モードレスエディタ Vim
 .SH 書å¼
@@ -34,8 +34,13 @@ CTRL-X ãŒåˆ‡ã‚Šå–りã€CTRL-C ãŒã‚³ãƒ”ーã€CTRL-V ãŒãƒšãƒ¼ã‚¹ãƒˆã§ã™ã€‚
 vim(1) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
 .SH ファイル
 .TP 15
-/usr/local/lib/vim/evim.vim
+/usr/local/share/vim/vim??/evim.vim
 eVim ã®åˆæœŸåŒ–スクリプト。
+.br
+.I vim??
+ã¯çŸ­ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã§
+.B Vim 9.1
+ã§ã¯ vim91 ã§ã™ã€‚
 .SH 別å
 evim 㯠"gumbies ã®ãŸã‚ã® Vim" ã¨ã‚‚呼ã°ã‚Œã¦ã„ã¾ã™ã€‚
 evim を使ã£ã¦ã„ã‚‹ã‚ãªãŸã¯ãã£ã¨ã€é ­ã«ãƒãƒ³ã‚«ãƒã‚’ã‹ã¶ã£ã¦ã„ã‚‹ã®ã§ã™ã€‚
diff --git a/runtime/doc/evim-sv.1 b/runtime/doc/evim-sv.1
new file mode 100644
index 0000000000..4d1579cb42
--- /dev/null
+++ b/runtime/doc/evim-sv.1
@@ -0,0 +1,55 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH EVIM 1 "12 augusti 2024"
+.SH NAMN
+evim  enkel Vim, redigera en fil med Vim och konfigurera för lägeslös
+redigering
+.SH SYNOPSIS
+.br
+\fBevim\fP [flaggor] [fil ..]
+.br
+\fBeview\fP
+.SH BESKRIVNING
+\fBeVim\fP startar \fBVim\fP och ställer in flaggor så att det fungerar som en
+lägeslös redigerare.  Det är fortfarande Vim, men används som en
+pek\-och\-klicka\-redigerare.  Det känns ungefär som att använda Notepad i
+MS\-Windows.  \fBeVim\fP körs alltid i grafiskt gränssnitt, för att möjliggöra
+användning av menyer och verktygsfält.
+.PP
+Endast för personer som verkligen inte kan arbeta med Vim på normalt
+sätt. Redigeringen blir mycket mindre effektiv.
+.PP
+\fBeview\fP är detsamma, men startar i skrivskyddat läge.  Det fungerar precis
+som evim \-R.
+.PP
+Se vim(1) för mer information om Vim, flaggor etc.
+.PP
+Flaggan "insertmode" är inställt så att man kan skriva text direkt.
+.br
+Mappningar är inställda så att kopiera och klistra in fungerar med
+MS\-Windows\-tangenterna. CTRL\-X klipper ut text, CTRL\-C kopierar text och
+CTRL\-V klistrar in text. Använd CTRL\-Q för att få den ursprungliga
+funktionen för CTRL\-V.
+.SH FLAGGOR
+Se vim(1).
+.SH FILER
+.TP  15
+/usr/local/share/vim/vim??/evim.vim
+Skriptet som läses in för att initialisera eVim.
+.br
+\fIvim??\fP är ett kort versionsnummer, till exempel vim91 för \fBVim 9.1\fP
+.SH AKA
+Även känt som "Vim för gumbies".  När du använder evim förväntas du ta en
+näsduk, göra en knut i varje hörn och bära den på huvudet.
+.SH "SE ÄVEN"
+vim(1)
+.SH UPPHOVSPERSON
+Det mesta av \fBVim\fP en har skapats av Bram Moolenaar, med stor hjälp från
+andra.  Se menyn Hjälp/Tack till.
+.SH SVENSK ÖVERSÄTTNING
+Vim översattes ursprungligen av Johan Svedberg 2003-2007 och har under 2025
+uppdaterats av Daniel Nylander, speciellt manualsidor samt själva Vim.
+Om du hittar fel i översättningen, kontakta .
\ No newline at end of file
diff --git a/runtime/doc/evim-sv.UTF-8.1 b/runtime/doc/evim-sv.UTF-8.1
new file mode 100644
index 0000000000..f862aa7b3d
--- /dev/null
+++ b/runtime/doc/evim-sv.UTF-8.1
@@ -0,0 +1,55 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH EVIM 1 "12 augusti 2024"
+.SH NAMN
+evim  enkel Vim, redigera en fil med Vim och konfigurera för lägeslös
+redigering
+.SH SYNOPSIS
+.br
+\fBevim\fP [flaggor] [fil ..]
+.br
+\fBeview\fP
+.SH BESKRIVNING
+\fBeVim\fP startar \fBVim\fP och ställer in flaggor så att det fungerar som en
+lägeslös redigerare.  Det är fortfarande Vim, men används som en
+pek\-och\-klicka\-redigerare.  Det känns ungefär som att använda Notepad i
+MS\-Windows.  \fBeVim\fP körs alltid i grafiskt gränssnitt, för att möjliggöra
+användning av menyer och verktygsfält.
+.PP
+Endast för personer som verkligen inte kan arbeta med Vim på normalt
+sätt. Redigeringen blir mycket mindre effektiv.
+.PP
+\fBeview\fP är detsamma, men startar i skrivskyddat läge.  Det fungerar precis
+som evim \-R.
+.PP
+Se vim(1) för mer information om Vim, flaggor etc.
+.PP
+Flaggan "insertmode" är inställt så att man kan skriva text direkt.
+.br
+Mappningar är inställda så att kopiera och klistra in fungerar med
+MS\-Windows\-tangenterna. CTRL\-X klipper ut text, CTRL\-C kopierar text och
+CTRL\-V klistrar in text. Använd CTRL\-Q för att få den ursprungliga
+funktionen för CTRL\-V.
+.SH FLAGGOR
+Se vim(1).
+.SH FILER
+.TP  15
+/usr/local/share/vim/vim??/evim.vim
+Skriptet som läses in för att initialisera eVim.
+.br
+\fIvim??\fP är ett kort versionsnummer, till exempel vim91 för \fBVim 9.1\fP
+.SH AKA
+Även känt som "Vim för gumbies".  När du använder evim förväntas du ta en
+näsduk, göra en knut i varje hörn och bära den på huvudet.
+.SH "SE ÄVEN"
+vim(1)
+.SH UPPHOVSPERSON
+Det mesta av \fBVim\fP en har skapats av Bram Moolenaar, med stor hjälp från
+andra.  Se menyn Hjälp/Tack till.
+.SH SVENSK ÖVERSÄTTNING
+Vim översattes ursprungligen av Johan Svedberg 2003-2007 och har under 2025
+uppdaterats av Daniel Nylander, speciellt manualsidor samt själva Vim.
+Om du hittar fel i översättningen, kontakta .
\ No newline at end of file
diff --git a/runtime/doc/farsi.txt b/runtime/doc/farsi.txt
index f4474038d4..7e87a4289a 100644
--- a/runtime/doc/farsi.txt
+++ b/runtime/doc/farsi.txt
@@ -1,7 +1,7 @@
-*farsi.txt*     For Vim version 9.1.  Last change: 2019 May 05
+*farsi.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Mortaza Ghassab Shiran
+		  VIM REFERENCE MANUAL	  by Mortaza Ghassab Shiran
 
 
 Right to Left and Farsi Mapping for Vim		*farsi* *Farsi*
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index b363b11293..73ce826c19 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -1,7 +1,7 @@
-*filetype.txt*	For Vim version 9.1.  Last change: 2025 Oct 12
+*filetype.txt*	For Vim version 9.2.  Last change: 2026 Jun 18
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Filetypes						*filetype* *file-type*
@@ -138,6 +138,8 @@ what kind of file it is.  This doesn't always work.  A number of global
 variables can be used to overrule the filetype used for certain extensions:
 
 	file name	variable ~
+	*.app		g:filetype_app
+	*.as		g:filetype_as
 	*.asa		g:filetype_asa		|ft-aspperl-syntax|
 						|ft-aspvbs-syntax|
 	*.asm		g:asmsyntax		|ft-asm-syntax|
@@ -160,8 +162,11 @@ variables can be used to overrule the filetype used for certain extensions:
 						|ft-cpp-syntax|
 	*.i		g:filetype_i		|ft-progress-syntax|
 	*.inc		g:filetype_inc
+	*.int		g:filetype_int
 	*.lsl		g:filetype_lsl
 	*.m		g:filetype_m		|ft-mathematica-syntax|
+	*.mm		g:filetype_mm
+	*.mac		g:filetype_mac
 	*[mM]makefile,*.mk,*.mak,[mM]akefile*
 			g:make_flavor		|ft-make-syntax|
 	*.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md
@@ -178,6 +183,7 @@ variables can be used to overrule the filetype used for certain extensions:
 	*.sys		g:filetype_sys
 	*.sh		g:bash_is_sh		|ft-sh-syntax|
 	*.tex		g:tex_flavor		|ft-tex-plugin|
+	*.tf		g:filetype_tf
 	*.typ		g:filetype_typ
 	*.v		g:filetype_v
 	*.w		g:filetype_w		|ft-cweb-syntax|
@@ -477,6 +483,61 @@ Support for features specific to GNU Awk, like @include, can be enabled by
 setting: >
 	:let g:awk_is_gawk = 1
 
+BEANCOUNT						*ft-beancount-plugin*
+
+Beancount omni-completion |compl-omni| is provided by beancountcomplete.vim,
+if enabled with g:beancount_completion_enable.
+
+To enable completion of account names, set: >
+	let g:beancount_completion_enable = 1
+<
+Note: Enabling this may cause beancount to load additional plugin files.  Only
+enable for code you trust.
+
+Variables:
+g:beancount_account_completion
+			Specify the completion pattern format for the account
+			name.  Can be either "default" or "chunks".
+			Default value: "default"
+
+g:beancount_completion_enable
+			Enable omni-completion |compl-omni| for accounts.
+			Default value: 0
+
+g:beancount_detailed_first
+			If non-zero, accounts higher down the hierarchy will
+			be listed first as completions.
+			Default value: 0
+
+g:beancount_separator_col
+			The column that the decimal separator is aligned to.
+			Default value: 50
+
+b:beancount_root
+			Set the root Beancount file.  This is used to gather
+			values for the completion.
+			If not set (default), the current file will be used.
+
+
+Commands:
+:AlignCommodity		Adds spaces between an account and commodity so that
+			the decimal points of the commodities all occur in the
+			column given by g:beancount_separator_col.  If an
+			amount has no decimal point, the imaginary decimal
+			point to the right of the least significant digit will
+			align.
+
+			The command acts on a range, with the default being
+			the current line.  If the cursor happens to be inside
+			that range and to the right of the account name, the
+			cursor will be pushed to the right the appropriate
+			amount, so that it remains on the same character.
+
+			The script assumes the use of spaces for alignment.
+			It does not understand tabs.
+
+:GetContext		Uses bean-doctor context to display the context of the
+			current line.
 
 CHANGELOG						*ft-changelog-plugin*
 
@@ -649,6 +710,12 @@ One command, :DiffGitCached, is provided to show a diff of the current commit
 in the preview window.  It is equivalent to calling "git diff --cached" plus
 any arguments given to the command.
 
+The length of the first line of the commit message used for
+syntax highlighting can be configured via `g:gitcommit_summary_length`.
+The default is 50.  Example: >
+
+        let g:gitcommit_summary_length = 70
+
 GIT REBASE						*ft-gitrebase-plugin*
 
 The gitrebase filetype defines the following buffer-local commands, to help
@@ -823,6 +890,12 @@ For example, to use Lua 5.1, set the variables like this: >
 	let g:lua_version = 5
 	let g:lua_subversion = 1
 <
+LUAU					*ft-luau-plugin* *g:luau_folding*
+
+You can enable folding of Luau block constructs using |fold-expr| by: >
+
+	let g:luau_folding = 1
+<
 MAIL							*ft-mail-plugin*
 
 Options:
@@ -965,7 +1038,20 @@ By default the following options are set, in accordance with PEP8: >
 To disable this behavior, set the following variable in your vimrc: >
 
 	let g:python_recommended_style = 0
-
+<
+Python omni-completion |compl-omni| is provided by python3complete.vim (or
+pythoncomplete.vim) for Vim builds with the |+python|/|+python3| interpreter.
+By default it does not inspect the import / from statements found in the
+buffer. This means completion of names defined in the buffer itself (classes,
+functions, variables) works, but completion of members of imported modules is
+not offered.
+
+To enable completion of imported module members, set: >
+	let g:pythoncomplete_allow_import = 1
+<
+WARNING: enabling this causes omni-completion to execute the import statements
+found in the buffer through Python's import machinery, which runs the imported
+modules' top-level code. Only enable this for code you trust.
 
 QF QUICKFIX					    *qf.vim* *ft-qf-plugin*
 
diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt
index 40cff059c6..1e729f9862 100644
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -1,7 +1,7 @@
-*fold.txt*      For Vim version 9.1.  Last change: 2025 Oct 03
+*fold.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Folding						*Folding* *folding* *folds*
diff --git a/runtime/doc/ft_ada.txt b/runtime/doc/ft_ada.txt
index 866857e8c3..35ab8c8ea0 100644
--- a/runtime/doc/ft_ada.txt
+++ b/runtime/doc/ft_ada.txt
@@ -1,4 +1,4 @@
-*ft_ada.txt*	For Vim version 9.1.  Last change: 2025 Aug 06
+*ft_ada.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
 		    ADA FILE TYPE PLUG-INS REFERENCE MANUAL~
diff --git a/runtime/doc/ft_context.txt b/runtime/doc/ft_context.txt
index fa8316457b..e659d171f0 100644
--- a/runtime/doc/ft_context.txt
+++ b/runtime/doc/ft_context.txt
@@ -1,8 +1,8 @@
-*ft_context.txt*	For Vim version 9.1.  Last change: 2024 Jan 01
+*ft_context.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 This is the documentation for the ConTeXt filetype plugin.
 
-NOTE: the plugin requires +vim9script.
+NOTE: the plugin requires |+vim9script|.
 
 ==============================================================================
 CONTENTS						*context.vim* *ft-context*
@@ -19,11 +19,11 @@ Introduction ~
 ConTeXt, similarly to LaTeX, is a macro-based typesetting system built on TeX:
 >
 	https://wiki.contextgarden.net
-	https://wiki.contextgarden.net/Vim
+	https://wiki.contextgarden.net/Input_and_compilation/Text_editors/Vim
 <
 The ConTeXt plugin provides syntax highlighting, completion and support for
 typesetting ConTeXt documents. The recommended way to typeset a document is to
-use |:ConTeXt|. This will invoke the `mtxrun` script that is found in `$PATH`.
+use |:ConTeXt|, which invokes the `mtxrun` script that is found in $PATH.
 
 For more fine grained control over the command and its environment,
 `context.Typeset()` can be used directly (or `context#Typeset()` from legacy
@@ -32,26 +32,31 @@ Vim script). For instance, if a version of ConTeXt is installed in
 >
 	import autoload 'context.vim'
 
+	var os = "linux"    # Update to match your system
+	var arch = "arm64"  # Update to match your system
+
 	def MyConTeXt()
-	    const env = {'PATH':
-	      printf("%s/context/tex/texmf--/bin:%s", $HOME, $PATH)}
-	    context.Typeset("%", env)
+	  var env = {
+	    'PATH': $'{$HOME}/context/tex/texmf-{os}-{arch}/bin:{$PATH}'
+	  }
+	  context.Typeset("%", env)
 	enddef
 
-This code may go in `~/.vim/after/ftplugin/context.vim`. A mapping can then be
-defined to invoke the custom command:
->
 	nnoremap t MyConTeXt()
 <
+This code should go in `~/.vim/after/ftplugin/context.vim`.
+
 `context.Typeset()` accepts a third optional argument to specify a custom
 typesetting command. That must be a function that takes a path and returns the
-command as a List. For example:
+command as a |list|. For example:
 >
 	def ConTeXtCustomCommand(path: string): list
 	  return ['mtxrun', '--script', 'context', '--nonstopmode', path]
 	enddef
 
-	context.ConTeXtTypeset("%", v:none, ConTeXtCustomCommand)
+	def MyContext()
+	    context.Typeset("%", v:none, ConTeXtCustomCommand)
+	enddef
 <
 Large projects are often organized as a root document and various chapter
 files. When editing a chapter file, it is convenient to invoke |:ConTeXt|
@@ -67,7 +72,7 @@ one in the current buffer. The root document does not have to be opened in
 Vim.
 
 To extend completion and syntax highlighting, you may generate supporting
-files using ConTeXt and add them to your configuration. If you configuration
+files using ConTeXt and add them to your configuration. If your configuration
 resides in `~/.vim`, you may use these commands:
 >
 	mkdir -p ~/.vim/syntax/shared
@@ -81,7 +86,8 @@ The last command will create the following syntax files:
 - `context-data-metafun.vim`;
 - `context-data-tex.vim`.
 
-The same command can be used to update those syntax files.
+If present, such files will be automatically loaded to enhance syntax
+highlighting. The same command can be used to update those syntax files.
 
 							*ft-context-commands*
 Commands ~
@@ -109,8 +115,9 @@ and this option is not set, standard `make` is used. If this option is set,
 >
 	g:context_ignore_makefile = 0
 <
-NOTE: before using |:make|, set the working directory of the buffer to the
-directory of the file to be typeset.
+NOTE: before using |:make|, ensure that the working directory of the buffer is
+set to the directory of the file you want to typeset. Additionally, be aware
+that |:make| searches for `mtxrun` in $PATH.
 
 					*'g:context_extra_options'*
 A list of additional options to pass to `mtxrun`.
@@ -135,11 +142,11 @@ When set, do not define any mappings.
 							*ft-context-mappings*
 Mappings ~
 
-tp			"reflow TeX paragraph".
+tp			"reflow TeX paragraph" (motion).
 
-i$			"inside inline math block".
+i$			"inside inline math block" (text object selection).
 
-a$			"around inline math block".
+a$			"around inline math block" (text object selection).
 
 ]]			[count] start of sections forward.
 
diff --git a/runtime/doc/ft_hare.txt b/runtime/doc/ft_hare.txt
index ce344b73d9..918ff2a5bc 100644
--- a/runtime/doc/ft_hare.txt
+++ b/runtime/doc/ft_hare.txt
@@ -19,23 +19,33 @@ functionality for the Hare programming language.
 FILETYPE PLUGIN						*ft-hare-plugin*
 
 This plugin has a few different variables that can be defined inside your
-|vimrc| to tweak its behavior.
+|vimrc| to adjust its behavior.
 
-Additionally, support is provided for folding `{ }` blocks.  To enable folding,
-add the following to a file inside your |after-directory| (e.g.
+							*hare-folding*
+This plugin supports folding `{ }` blocks.  To enable folding, add the
+following to a file inside your |after-directory| (e.g.
 ~/.vim/after/ftplugin/hare.vim): >
 
 	setlocal foldmethod=syntax
 
-Because block-based folding tends to create many small folds, consider setting
-a few related options, such as 'foldminlines' and 'foldnestmax'.
+Because syntax-based folding tends to create many small folds, consider
+setting a few related options, such as 'foldminlines' or 'foldnestmax'.
 
+						*hare-symbol-operators*
+Most symbolic operators do not receive any highlighting by default (with the
+exception of "?", "!", and "::").  If you prefer highlighting all operators,
+you can link them to your preferred highlight group inside your |vimrc|.  For
+example: >
+
+	hi def link hareCast hareSymbolOperator
+	hi def link hareSymbolOperator hareOperator
+<
 						*g:hare_recommended_style*
 The following options are set by default, in accordance with Hare's official
 style guide: >
 
 	setlocal noexpandtab
-	setlocal shiftwidth=0
+	setlocal shiftwidth=8
 	setlocal softtabstop=0
 	setlocal tabstop=8
 	setlocal textwidth=80
@@ -43,18 +53,11 @@ style guide: >
 To disable this behavior, add the following to your |vimrc|: >
 
 	let g:hare_recommended_style = 0
-<
-						*g:hare_symbol_operators*
-By default, symbolic operators do not receive any special highlighting (with
-`!`, `?`, and `::` being the only exceptions).  To enable syntax highlighting
-for most other operators, add the following to your |vimrc|: >
-
-	let g:hare_symbol_operators = 1
 <
 							*g:hare_space_error*
-By default, trailing whitespace and spaces followed by  characters will
-be highlighted as errors.  This is automatically disabled in Insert mode.  To
-turn off this highlighting completely, add the following to your |vimrc|: >
+By default, trailing whitespace and spaces followed by  characters are
+highlighted as errors.  This is automatically disabled while in insert mode.
+To turn off this highlighting completely, add the following to your |vimrc|: >
 
 	let g:hare_space_error = 0
 
@@ -67,28 +70,27 @@ this is such a common filename, this plugin only searches for Hare source
 files within the same directory by default.
 
 							*g:filetype_haredoc*
-The |g:filetype_haredoc| variable can be used to tweak the depth of this
+The `g:filetype_haredoc` variable can be used to tweak the depth of this
 search, or bypass the detection of Hare documentation files altogether:
 
 	Value		Effect~
-	0		No automatic detection
+	0		Search disabled
 	1		Search current directory only (this is the default)
 	2		Search one level of subdirectories
-	3		Search two levels of subdirectories
 
-The search depth may be any positive integer, but values higher than `2` are
-unlikely to provide a tangible benefit in most situations.
+The search depth may be any positive integer, but values greater than 2 are
+very unlikely to provide any tangible benefit and can impact performance.
 
 
 INDENTATION SETTINGS					*ft-hare-indent*
 
-Unlike most other settings for this plugin, the indentation settings may also
-be set per-buffer, overriding any global configuration that exists.  To do
-this, simply prefix the variable with |b:| instead of |g:|.
+Unlike other settings, indentation settings may be configured on a per-buffer
+basis, overriding any existing global configuration.  To do so, simply prefix
+the variable with |b:| instead of |g:|.
 
-						*g:hare_indent_match_switch*
-By default, continuation lines for "match" and "switch" conditions are
-indented only one level: >hare
+		*g:hare_indent_match_switch* *b:hare_indent_match_switch*
+By default, the continuation lines for "match" and "switch" conditions are
+only indented one level: >hare
 
 	const file = match (os::create(path, 0o644,
 		flag::WRONLY | flag::TRUNC)) {
@@ -96,39 +98,33 @@ indented only one level: >hare
 		yield file;
 	// ...
 
-If you instead prefer indenting them two levels, to more closely resemble "if"
-and "for" conditions, add the following line to your |vimrc|: >
+If you prefer indenting them two levels, more closely resembling "if" and
+"for" conditions, add the following line to your |vimrc|: >
 
 	let g:hare_indent_match_switch = 2
 <
-							*g:hare_indent_case*
-By default, continuation lines for cases in "match" and "switch" expressions
-are indented two levels, to visually distinguish them from the body of the
-case: >hare
+				*g:hare_indent_case* *b:hare_indent_case*
+By default, the continuation lines for "match" and "switch" cases are indented
+two levels, to visually distinguish them from the case body: >hare
 
 	case ltok::I8, ltok::I16, ltok::I32,
 			ltok::I64, ltok::INT =>
 		// ...
 
-If you prefer a different amount of indentation, you can adjust it using
-|g:hare_indent_case|.  Valid values include `0`, `1`, and `2`.
+If you prefer a different level of indentation, you can adjust it using
+`g:hare_indent_case`.  The possible values are 0, 1, and 2.
 
 
 COMPILER SUPPORT					*compiler-hare*
 
-If this plugin detects a Makefile in the current directory, it will assume you
-wish to use `make` for your build system, and will leave 'makeprg' untouched.
-Otherwise, `hare build` will be used.
-
-							*g:hare_makeprg_params*
-When `hare build` is used, additional compiler options may be appended to
-'makeprg' with the |g:hare_makeprg_params| variable.  It may also be set on a
-per-buffer basis (using |b:| instead of |g:|), overriding any global
-configuration that exists.  For example: >
-
-	let b:hare_makeprg_params = '-lc -t o'
+If a Makefile is detected in the current directory, this plugin will assume
+you are using "make" for your build system, and will leave 'makeprg' as-is.
+Otherwise, "hare build" will be used.
 
-The global default is "-q", to suppress writing to stdout while building.
+						*g:hare_makeprg_params*
+When using "hare build", additional compiler options may be appended to
+'makeprg' using `g:hare_makeprg_params`.  The default is "-q", to suppress
+printing to stdout when building.
 
 ==============================================================================
  vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/ft_mp.txt b/runtime/doc/ft_mp.txt
index 11ddd3b796..f4ea042576 100644
--- a/runtime/doc/ft_mp.txt
+++ b/runtime/doc/ft_mp.txt
@@ -1,10 +1,10 @@
-*ft_mp.txt*	For Vim version 9.1.  Last change: 2022 Aug 12
+*ft_mp.txt*	For Vim version 9.2.  Last change: 2026 May 04
 
 This is the documentation for the METAFONT and MetaPost filetype plugins.
 Unless otherwise specified, the commands, settings and mappings defined below
 apply equally to both filetypes.
 
-NOTE: the plugin requires +vim9script.
+NOTE: the plugin requires |+vim9script|.
 
 ==============================================================================
 CONTENTS						*mp.vim* *ft-metapost*
@@ -25,7 +25,7 @@ MetaPost documents, including syntax coloring, indentation, and completion.
 Defining indentation rules for METAFONT and MetaPost code is tricky and
 somewhat subjective, because the syntax is quite liberal. The plugin uses some
 heuristics that work well most of the time, but in particular cases you may
-want to to override the automatic rules, so that the manually defined
+want to override the automatic rules, so that the manually defined
 indentation is preserved by commands like `gg=G`.
 
 This can be achieved by appending `%>`, `%<`, `%=` or `%!` to a line to
@@ -38,25 +38,25 @@ next line should not change from whatever it has been manually set.
 
 For example, this is the default indentation of a simple macro:
 >
-   def foo =
-       makepen(
-           subpath(T-n,t) of r
-           shifted .5down
-           --subpath(t,T) of r shifted .5up -- cycle
-       )
-       withcolor black
-   enddef
+	def foo =
+	    makepen(
+	        subpath(T-n,t) of r
+	        shifted .5down
+	        --subpath(t,T) of r shifted .5up -- cycle
+	    )
+	    withcolor black
+	enddef
 <
 By adding the special comments, the indentation can be adjusted arbitrarily:
 >
-   def foo =
-       makepen(
-           subpath(T-n,t) of r  %>
-               shifted .5down   %>
-                   --subpath(t,T) of r shifted .5up -- cycle   %<<<
-       )
-       withcolor black
-   enddef
+	def foo =
+	    makepen(
+	        subpath(T-n,t) of r  %>
+	            shifted .5down   %>
+	                --subpath(t,T) of r shifted .5up -- cycle   %<<<
+	    )
+	    withcolor black
+	enddef
 <
 							*ft-metapost-commands*
 Commands ~
diff --git a/runtime/doc/ft_rust.txt b/runtime/doc/ft_rust.txt
index 4f4e3a85e7..34346626e5 100644
--- a/runtime/doc/ft_rust.txt
+++ b/runtime/doc/ft_rust.txt
@@ -1,392 +1,373 @@
-*ft_rust.txt*      Filetype plugin for Rust
+*ft_rust.txt*	Filetype plugin for Rust
 
 ==============================================================================
-CONTENTS                                                      *rust*
+CONTENTS					*rust*
 
-1. Introduction                                                   |rust-intro|
-2. Settings                                                    |rust-settings|
-3. Commands                                                    |rust-commands|
-4. Mappings                                                    |rust-mappings|
+1. Introduction					|rust-intro|
+2. Settings					|rust-settings|
+3. Commands					|rust-commands|
+4. Mappings					|rust-mappings|
 
 ==============================================================================
-INTRODUCTION                                                      *rust-intro*
+INTRODUCTION					*rust-intro*
 
 This plugin provides syntax and supporting functionality for the Rust
-filetype. It requires Vim 8 or higher for full functionality. Some commands
-will not work on earlier versions.
+filetype.
 
 ==============================================================================
-SETTINGS                                                       *rust-settings*
+SETTINGS					*rust-settings*
 
 This plugin has a few variables you can define in your vimrc that change the
 behavior of the plugin.
 
-Some variables can be set buffer local (`:b` prefix), and the buffer local
+Some variables can be set buffer local (`b:` prefix), and the buffer local
 will take precedence over the global `g:` counterpart.
 
-                                                                *g:rustc_path*
+						*g:rustc_path*
 g:rustc_path~
 	Set this option to the path to rustc for use in the |:RustRun| and
-	|:RustExpand| commands. If unset, "rustc" will be located in $PATH: >
-	    let g:rustc_path = $HOME."/bin/rustc"
+	|:RustExpand| commands.  If unset, "rustc" will be located in $PATH: >
+		let g:rustc_path = $HOME."/bin/rustc"
 <
-
-                                                  *g:rustc_makeprg_no_percent*
+						*g:rustc_makeprg_no_percent*
 g:rustc_makeprg_no_percent~
 	Set this option to 1 to have 'makeprg' default to "rustc" instead of
 	"rustc %": >
-	    let g:rustc_makeprg_no_percent = 1
+		let g:rustc_makeprg_no_percent = 1
 <
-
-                                                              *g:rust_conceal*
+						*g:rust_conceal*
 g:rust_conceal~
 	Set this option to turn on the basic |conceal| support: >
-	    let g:rust_conceal = 1
+		let g:rust_conceal = 1
 <
-
-                                                     *g:rust_conceal_mod_path*
+						*g:rust_conceal_mod_path*
 g:rust_conceal_mod_path~
-	Set this option to turn on |conceal| for the path connecting token
-	"::": >
-	    let g:rust_conceal_mod_path = 1
+	Set this option to turn on |conceal| for the path connecting token "::": >
+		let g:rust_conceal_mod_path = 1
 <
-
-                                                          *g:rust_conceal_pub*
+						*g:rust_conceal_pub*
 g:rust_conceal_pub~
 	Set this option to turn on |conceal| for the "pub" token: >
-	    let g:rust_conceal_pub = 1
+		let g:rust_conceal_pub = 1
 <
-
-                                                     *g:rust_recommended_style*
+						*g:rust_recommended_style*
 g:rust_recommended_style~
-        Set this option to enable vim indentation and textwidth settings to
-        conform to style conventions of the rust standard library (i.e. use 4
-        spaces for indents and sets 'textwidth' to 99). This option is enabled
-	by default. To disable it: >
-	    let g:rust_recommended_style = 0
+	Set this option to enable vim indentation and textwidth settings to
+	conform to style conventions of the Rust style guide (i.e. use 4
+	spaces for indents and set 'textwidth' to 100).  This option is
+	enabled by default.  To disable it: >
+		let g:rust_recommended_style = 0
 <
-
-                                                                 *g:rust_fold*
+						*g:rust_fold*
 g:rust_fold~
 	Set this option to turn on |folding|: >
-	    let g:rust_fold = 1
+		let g:rust_fold = 1
 <
-	Value		Effect ~
-	0		No folding
-	1		Braced blocks are folded. All folds are open by
-			default.
-	2		Braced blocks are folded. 'foldlevel' is left at the
-			global value (all folds are closed by default).
-
-                                                  *g:rust_bang_comment_leader*
+	Value	Effect ~
+	0	No folding
+	1	Braced blocks are folded.  All folds are open by default.
+	2	Braced blocks are folded. 'foldlevel' is left at the global
+		value (all folds are closed by default).
+
+						*g:rust_bang_comment_leader*
 g:rust_bang_comment_leader~
 	Set this option to 1 to preserve the leader on multi-line doc comments
 	using the /*! syntax: >
-	    let g:rust_bang_comment_leader = 1
+		let g:rust_bang_comment_leader = 1
 <
-
-                                                *g:rust_use_custom_ctags_defs*
+						*g:rust_use_custom_ctags_defs*
 g:rust_use_custom_ctags_defs~
 	Set this option to 1 if you have customized ctags definitions for Rust
 	and do not wish for those included with rust.vim to be used: >
-	    let g:rust_use_custom_ctags_defs = 1
+		let g:rust_use_custom_ctags_defs = 1
 <
 
 	NOTE: rust.vim's built-in definitions are only used for the Tagbar Vim
 	plugin, if you have it installed, AND if Universal Ctags is not
-	detected. This is because Universal Ctags already has built-in
+	detected.  This is because Universal Ctags already has built-in
 	support for Rust when used with Tagbar.
 
 	Also, note that when using ctags other than Universal Ctags, it is not
 	automatically used when generating |tags| files that Vim can use to
-	navigate to definitions across different source files. Feel free to
+	navigate to definitions across different source files.  Feel free to
 	copy `rust.vim/ctags/rust.ctags` into your own `~/.ctags` if you wish
 	to generate |tags| files.
 
-
-                                                 *g:ftplugin_rust_source_path*
+						*g:ftplugin_rust_source_path*
 g:ftplugin_rust_source_path~
 	Set this option to a path that should be prepended to 'path' for Rust
 	source files: >
-	    let g:ftplugin_rust_source_path = $HOME.'/dev/rust'
+		let g:ftplugin_rust_source_path = $HOME.'/dev/rust'
 <
-
-                                                       *g:rustfmt_command*
+						*g:rustfmt_command*
 g:rustfmt_command~
-	Set this option to the name of the 'rustfmt' executable in your $PATH. If
-	not specified it defaults to 'rustfmt' : >
-	    let g:rustfmt_command = 'rustfmt'
+	Set this option to the name of the "rustfmt" executable in your $PATH.
+	If not specified it defaults to "rustfmt": >
+		let g:rustfmt_command = 'rustfmt'
 <
-                                                       *g:rustfmt_autosave*
+						*g:rustfmt_autosave*
+						*b:rustfmt_autosave*
 g:rustfmt_autosave~
 	Set this option to 1 to run |:RustFmt| automatically when saving a
-	buffer. If not specified it defaults to 0 : >
-	    let g:rustfmt_autosave = 0
+	buffer.  If not specified it defaults to 0: >
+		let g:rustfmt_autosave = 0
 <
 	There is also a buffer-local b:rustfmt_autosave that can be set for
 	the same purpose, and can override the global setting.
 
-                                        *g:rustfmt_autosave_if_config_present*
+					*g:rustfmt_autosave_if_config_present*
+					*b:rustfmt_autosave_if_config_present*
 g:rustfmt_autosave_if_config_present~
-	Set this option to 1 to have *b:rustfmt_autosave* be set automatically
-	if a `rustfmt.toml` file is present in any parent directly leading to
-	the file being edited. If not set, default to 0: >
-	    let g:rustfmt_autosave_if_config_present = 0
+	Set this option to 1 to have |b:rustfmt_autosave| be set automatically
+	if a `rustfmt.toml` file is present in any parent directory leading to
+	the file being edited.  If not set, default to 0: >
+		let g:rustfmt_autosave_if_config_present = 0
 <
 	This is useful to have `rustfmt` only execute on save, on projects
 	that have `rustfmt.toml` configuration.
 
 	There is also a buffer-local b:rustfmt_autosave_if_config_present
-	that can be set for the same purpose, which can overrides the global
+	that can be set for the same purpose, which can override the global
 	setting.
-                                                       *g:rustfmt_fail_silently*
+						*g:rustfmt_fail_silently*
 g:rustfmt_fail_silently~
-	Set this option to 1 to prevent 'rustfmt' from populating the
-	|location-list| with errors. If not specified it defaults to 0: >
-	    let g:rustfmt_fail_silently = 0
+	Set this option to 1 to prevent "rustfmt" from populating the
+	|location-list| with errors.  If not specified it defaults to 0: >
+		let g:rustfmt_fail_silently = 0
 <
-                                                       *g:rustfmt_options*
+						*g:rustfmt_options*
 g:rustfmt_options~
-	Set this option to a string of options to pass to 'rustfmt'. The
-	write-mode is already set to 'overwrite'. If not specified it
-	defaults to '' : >
-	    let g:rustfmt_options = ''
+	Set this option to a string of options to pass to "rustfmt".
+	The write-mode is already set to "overwrite".  If not specified it
+	defaults to '': >
+		let g:rustfmt_options = ''
 <
-                                                       *g:rustfmt_emit_files*
+						*g:rustfmt_emit_files*
 g:rustfmt_emit_files~
 	If not specified rust.vim tries to detect the right parameter to
-	pass to rustfmt based on its reported version. Otherwise, it
-	determines whether to run rustfmt with '--emit=files' (when 1 is
-	provided) instead of '--write-mode=overwrite'. >
-	    let g:rustfmt_emit_files = 0
+	pass to rustfmt based on its reported version.  Otherwise, it
+	determines whether to run rustfmt with "--emit=files" (when 1 is
+	provided) instead of "--write-mode=overwrite". >
+		let g:rustfmt_emit_files = 0
 <
-                                                       *g:rustfmt_detect_version*
+						*g:rustfmt_detect_version*
 g:rustfmt_detect_version~
 	When set to 1, will try to parse the version output from "rustfmt".
-	Disabled by default for performance reasons
->
-	    let g:rustfmt_detect_version = 1
+	Disabled by default for performance reasons. >
+		let g:rustfmt_detect_version = 1
+<
+						*g:rustfmt_find_toml*
+g:rustfmt_find_toml~
+	When set to 1, will try to find `rustfmt.toml` file by searching from
+	current path upwards.  Disabled by default for performance reasons. >
+		let g:rustfmt_find_toml = 1
 <
-                                                          *g:rust_playpen_url*
+						*g:rust_playpen_url*
 g:rust_playpen_url~
 	Set this option to override the url for the playpen to use: >
-	    let g:rust_playpen_url = 'https://play.rust-lang.org/'
+		let g:rust_playpen_url = 'https://play.rust-lang.org/'
 <
-
-                                                        *g:rust_shortener_url*
+						*g:rust_shortener_url*
 g:rust_shortener_url~
 	Set this option to override the url for the url shortener: >
-	    let g:rust_shortener_url = 'https://is.gd/'
+		let g:rust_shortener_url = 'https://is.gd/'
 <
-
-                                                        *g:rust_clip_command*
+						*g:rust_clip_command*
 g:rust_clip_command~
 	Set this option to the command used in your OS to copy the Rust Play
 	url to the clipboard: >
-	    let g:rust_clip_command = 'xclip -selection clipboard'
+		let g:rust_clip_command = 'xclip -selection clipboard'
 <
-
-                                                       *g:cargo_makeprg_params*
+						*g:cargo_makeprg_params*
 g:cargo_makeprg_params~
-	Set this option to the string of parameters to pass to cargo. If not
-	specified it defaults to '$*' : >
-	    let g:cargo_makeprg_params = 'build'
+	Set this option to the string of parameters to pass to cargo.  If not
+	specified it defaults to "$*": >
+		let g:cargo_makeprg_params = 'build'
 <
-
-                                                  *g:cargo_shell_command_runner*
+						*g:cargo_shell_command_runner*
 g:cargo_shell_command_runner~
 	Set this option to change how to run shell commands for cargo commands
-	|:Cargo|, |:Cbuild|, |:Crun|, ...
-	By default, |:terminal| is used to run shell command in terminal window
-	asynchronously. But if you prefer |:!| for running the commands, it can
-	be specified: >
-	    let g:cargo_shell_command_runner = '!'
+	|:Cargo|, |:Cbuild|, |:Crun|, etc. - see |rust-commands|.
+	By default, |:terminal| is used to run a shell command in a terminal
+	window asynchronously.  But if you prefer |:!| for running the
+	commands, it can be specified: >
+		let g:cargo_shell_command_runner = '!'
 <
-
-
-Integration with Syntastic                                    *rust-syntastic*
+Integration with Syntastic			*rust-syntastic*
 --------------------------
 
-This plugin automatically integrates with the Syntastic checker. There are two
-checkers provided: 'rustc', and 'cargo'. The latter invokes 'Cargo' in order to
-build code, and the former delivers a single edited '.rs' file as a compilation
-target directly to the Rust compiler, `rustc`.
+This plugin automatically integrates with the Syntastic checker.  There are
+two checkers provided: "rustc", and "cargo".  The latter invokes "cargo" to
+build code, and the former delivers a single edited ".rs" file as a
+compilation target directly to the Rust compiler, `rustc`.
 
 Because Cargo is almost exclusively being used for building Rust code these
-days, 'cargo' is the default checker. >
-
-    let g:syntastic_rust_checkers = ['cargo']
+days, "cargo" is the default checker.
+>
+	let g:syntastic_rust_checkers = ['cargo']
 <
 If you would like to change it, you can set `g:syntastic_rust_checkers` to a
 different value.
-                                          *g:rust_cargo_avoid_whole_workspace*
-                                          *b:rust_cargo_avoid_whole_workspace*
+					*g:rust_cargo_avoid_whole_workspace*
+					*b:rust_cargo_avoid_whole_workspace*
 g:rust_cargo_avoid_whole_workspace~
 	When editing a crate that is part of a Cargo workspace, and this
-	option is set to 1 (the default), then 'cargo' will be executed
+	option is set to 1 (the default), then "cargo" will be executed
 	directly in that crate directory instead of in the workspace
-	directory. Setting 0 prevents this behavior - however be aware that if
-	you are working in large workspace, Cargo commands may take more time,
-	plus the Syntastic error list may include all the crates in the
+	directory.  Setting 0 prevents this behavior - however be aware that
+	if you are working in a large workspace, Cargo commands may take more
+	time, plus the Syntastic error list may include all the crates in the
 	workspace. >
-            let g:rust_cargo_avoid_whole_workspace = 0
+		let g:rust_cargo_avoid_whole_workspace = 0
 <
-                                              *g:rust_cargo_check_all_targets*
-                                              *b:rust_cargo_check_all_targets*
+					*g:rust_cargo_check_all_targets*
+					*b:rust_cargo_check_all_targets*
 g:rust_cargo_check_all_targets~
 	When set to 1, the `--all-targets` option will be passed to cargo when
 	Syntastic executes it, allowing the linting of all targets under the
 	package.
 	The default is 0.
-
-                                              *g:rust_cargo_check_all_features*
-                                              *b:rust_cargo_check_all_features*
+					*g:rust_cargo_check_all_features*
+					*b:rust_cargo_check_all_features*
 g:rust_cargo_check_all_features~
 	When set to 1, the `--all-features` option will be passed to cargo when
 	Syntastic executes it, allowing the linting of all features of the
 	package.
 	The default is 0.
-
-                                                 *g:rust_cargo_check_examples*
-                                                 *b:rust_cargo_check_examples*
+					*g:rust_cargo_check_examples*
+					*b:rust_cargo_check_examples*
 g:rust_cargo_check_examples~
 	When set to 1, the `--examples` option will be passed to cargo when
 	Syntastic executes it, to prevent the exclusion of examples from
-	linting. The examples are normally under the `examples/` directory of
+	linting.  The examples are normally under the `examples/` directory of
 	the crate.
 	The default is 0.
-
-                                                    *g:rust_cargo_check_tests*
-                                                    *b:rust_cargo_check_tests*
+					*g:rust_cargo_check_tests*
+					*b:rust_cargo_check_tests*
 g:rust_cargo_check_tests~
 	When set to 1, the `--tests` option will be passed to cargo when
 	Syntastic executes it, to prevent the exclusion of tests from linting.
 	The tests are normally under the `tests/` directory of the crate.
 	The default is 0.
-
-                                                  *g:rust_cargo_check_benches*
-                                                  *b:rust_cargo_check_benches*
+					*g:rust_cargo_check_benches*
+					*b:rust_cargo_check_benches*
 g:rust_cargo_check_benches~
 	When set to 1, the `--benches` option will be passed to cargo when
 	Syntastic executes it.  The benches are normally under the `benches/`
 	directory of the crate.
 	The default is 0.
 
-Integration with auto-pairs                                    *rust-auto-pairs*
+Integration with auto-pairs		*rust-auto-pairs*
 ---------------------------
 
 This plugin automatically configures the auto-pairs plugin not to duplicate
 single quotes, which are used more often for lifetime annotations than for
 single character literals.
 
-                                                  *g:rust_keep_autopairs_default*
+					*g:rust_keep_autopairs_default*
 g:rust_keep_autopairs_default~
-
-	Don't override auto-pairs default for the Rust filetype. The default
+	Don't override auto-pairs default for the Rust filetype.  The default
 	is 0.
 
 ==============================================================================
-COMMANDS                                                       *rust-commands*
+COMMANDS						*rust-commands*
 
 Invoking Cargo
 --------------
 
-This plug defines very simple shortcuts for invoking Cargo from with Vim.
+This plugin defines very simple shortcuts for invoking Cargo from within Vim.
 
-:Cargo                                                        *:Cargo*
-                Runs 'cargo' with the provided arguments.
+:Cargo 						*:Cargo*
+		Runs "cargo" with the provided arguments.
 
-:Cbuild                                                      *:Cbuild*
-                Shortcut for 'cargo build`.
+:Cbuild 						*:Cbuild*
+		Shortcut for "cargo build".
 
-:Cclean                                                      *:Cclean*
-                Shortcut for 'cargo clean`.
+:Cclean 						*:Cclean*
+		Shortcut for "cargo clean".
 
-:Cdoc                                                          *:Cdoc*
-                Shortcut for 'cargo doc`.
+:Cdoc 						*:Cdoc*
+		Shortcut for "cargo doc".
 
-:Cinit                                                        *:Cinit*
-                Shortcut for 'cargo init`.
+:Cinit 						*:Cinit*
+		Shortcut for "cargo init".
 
-:Crun                                                          *:Crun*
-                Shortcut for 'cargo run`.
+:Crun 						*:Crun*
+		Shortcut for "cargo run".
 
-:Ctest                                                        *:Ctest*
-                Shortcut for 'cargo test`.
+:Ctest 						*:Ctest*
+		Shortcut for "cargo test".
 
-:Cupdate                                                    *:Cupdate*
-                Shortcut for 'cargo update`.
+:Cupdate 						*:Cupdate*
+		Shortcut for "cargo update".
 
-:Cbench                                                      *:Cbench*
-                Shortcut for 'cargo bench`.
+:Cbench 						*:Cbench*
+		Shortcut for "cargo bench".
 
-:Csearch                                                    *:Csearch*
-                Shortcut for 'cargo search`.
+:Csearch 						*:Csearch*
+		Shortcut for "cargo search".
 
-:Cpublish                                                  *:Cpublish*
-                Shortcut for 'cargo publish`.
+:Cpublish 					*:Cpublish*
+		Shortcut for "cargo publish".
 
-:Cinstall                                                  *:Cinstall*
-                Shortcut for 'cargo install`.
+:Cinstall 					*:Cinstall*
+		Shortcut for "cargo install".
 
-:Cruntarget                                                  *:Cruntarget*
-                Shortcut for 'cargo run --bin' or 'cargo run --example',
-                depending on the currently open buffer.
+:Cruntarget 					*:Cruntarget*
+		Shortcut for "cargo run --bin" or "cargo run --example",
+		depending on the currently open buffer.
 
 Formatting
 ----------
 
-:RustFmt                                                       *:RustFmt*
-		Runs |g:rustfmt_command| on the current buffer. If
+:RustFmt						*:RustFmt*
+		Runs |g:rustfmt_command| on the current buffer.  If
 		|g:rustfmt_options| is set then those will be passed to the
 		executable.
 
 		If |g:rustfmt_fail_silently| is 0 (the default) then it
 		will populate the |location-list| with the errors from
-		|g:rustfmt_command|. If |g:rustfmt_fail_silently| is set to 1
+		|g:rustfmt_command|.  If |g:rustfmt_fail_silently| is set to 1
 		then it will not populate the |location-list|.
 
-:RustFmtRange                                                  *:RustFmtRange*
-		Runs |g:rustfmt_command| with selected range. See
-		|:RustFmt| for any other information.
-
+:RustFmtRange						*:RustFmtRange*
+		Runs |g:rustfmt_command| with selected range.  See |:RustFmt|
+		for any other information.
 
 Playpen integration
 -------------------
 
-:RustPlay                                                          *:RustPlay*
+:RustPlay						*:RustPlay*
 		This command will only work if you have web-api.vim installed
-		(available at https://github.com/mattn/webapi-vim).  It sends the
-		current selection, or if nothing is selected, the entirety of the
-		current buffer to the Rust playpen, and emits a message with the
-		shortened URL to the playpen.
+		(available at https://github.com/mattn/webapi-vim).  It sends
+		the current selection, or if nothing is selected, the entirety
+		of the current buffer to the Rust playpen, and emits a message
+		with the shortened URL to the playpen.
 
 		|g:rust_playpen_url| is the base URL to the playpen, by default
 		"https://play.rust-lang.org/".
 
-		|g:rust_shortener_url| is the base url for the shorterner, by
+		|g:rust_shortener_url| is the base url for the shortener, by
 		default "https://is.gd/"
 
 		|g:rust_clip_command| is the command to run to copy the
 		playpen url to the clipboard of your system.
 
-
 Evaluation of a single Rust file
 --------------------------------
 
 NOTE: These commands are useful only when working with standalone Rust files,
-which is usually not the case for common Rust development. If you wish to
-building Rust crates from with Vim can should use Vim's make, Syntastic, or
-functionality from other plugins.
+which is usually not the case for common Rust development.  If you wish to
+build Rust crates from within Vim, use Vim's make, Syntastic, or functionality
+from other plugins.
 
-
-:RustRun  [args]                                                    *:RustRun*
+:RustRun  [args]					*:RustRun*
 :RustRun! [rustc-args] [--] [args]
-		Compiles and runs the current file. If it has unsaved changes,
-		it will be saved first using |:update|. If the current file is
-		an unnamed buffer, it will be written to a temporary file
-		first. The compiled binary is always placed in a temporary
-		directory, but is run from the current directory.
+		Compiles and runs the current file.  If it has unsaved
+		changes, it will be saved first using |:update|.  If the
+		current file is an unnamed buffer, it will be written to a
+		temporary file first.  The compiled binary is always placed in
+		a temporary directory, but is run from the current directory.
 
 		The arguments given to |:RustRun| will be passed to the
 		compiled binary.
@@ -398,11 +379,11 @@ functionality from other plugins.
 		If |g:rustc_path| is defined, it is used as the path to rustc.
 		Otherwise it is assumed rustc can be found in $PATH.
 
-:RustExpand  [args]                                              *:RustExpand*
+:RustExpand  [args]					*:RustExpand*
 :RustExpand! [TYPE] [args]
 		Expands the current file using --pretty and displays the
-		results in a new split. If the current file has unsaved
-		changes, it will be saved first using |:update|. If the
+		results in a new split.  If the current file has unsaved
+		changes, it will be saved first using |:update|.  If the
 		current file is an unnamed buffer, it will be written to a
 		temporary file first.
 
@@ -411,16 +392,16 @@ functionality from other plugins.
 		configurations.
 
 		If ! is specified, the first argument is the expansion type to
-		pass to rustc --pretty. Otherwise it will default to
+		pass to rustc --pretty.  Otherwise it will default to
 		"expanded".
 
 		If |g:rustc_path| is defined, it is used as the path to rustc.
 		Otherwise it is assumed rustc can be found in $PATH.
 
-:RustEmitIr [args]                                               *:RustEmitIr*
+:RustEmitIr [args]					*:RustEmitIr*
 		Compiles the current file to LLVM IR and displays the results
-		in a new split. If the current file has unsaved changes, it
-		will be saved first using |:update|. If the current file is an
+		in a new split.  If the current file has unsaved changes, it
+		will be saved first using |:update|.  If the current file is an
 		unnamed buffer, it will be written to a temporary file first.
 
 		The arguments given to |:RustEmitIr| will be passed to rustc.
@@ -428,10 +409,10 @@ functionality from other plugins.
 		If |g:rustc_path| is defined, it is used as the path to rustc.
 		Otherwise it is assumed rustc can be found in $PATH.
 
-:RustEmitAsm [args]                                             *:RustEmitAsm*
+:RustEmitAsm [args]					*:RustEmitAsm*
 		Compiles the current file to assembly and displays the results
-		in a new split. If the current file has unsaved changes, it
-		will be saved first using |:update|. If the current file is an
+		in a new split.  If the current file has unsaved changes, it
+		will be saved first using |:update|.  If the current file is an
 		unnamed buffer, it will be written to a temporary file first.
 
 		The arguments given to |:RustEmitAsm| will be passed to rustc.
@@ -439,13 +420,12 @@ functionality from other plugins.
 		If |g:rustc_path| is defined, it is used as the path to rustc.
 		Otherwise it is assumed rustc can be found in $PATH.
 
-
 Running test(s)
 ---------------
 
-:[N]RustTest[!] [options]                                       *:RustTest*
+:[N]RustTest[!] [options]				*:RustTest*
 		Runs a test under the cursor when the current buffer is in a
-		cargo project with "cargo test" command. If the command did
+		cargo project with "cargo test" command.  If the command did
 		not find any test function under the cursor, it stops with an
 		error message.
 
@@ -458,35 +438,36 @@ Running test(s)
 		When [options] is given, it is passed to "cargo" command
 		arguments.
 
-		When the current buffer is outside cargo project, the command
-		runs "rustc --test" command instead of "cargo test" as
-		fallback. All tests are run regardless of adding ! since there
-		is no way to run specific test function with rustc. [options]
-		is passed to "rustc" command arguments in the case.
+		When the current buffer is outside a cargo project, the
+		command runs "rustc --test" command instead of "cargo test" as
+		fallback.  All tests are run regardless of adding ! since
+		there is no way to run specific test function with rustc.
+		[options] is passed to "rustc" command arguments in that case.
 
-		Takes optional modifiers (see ||):  >
-		    :tab RustTest
-		    :belowright 16RustTest
-		    :leftabove vert 80RustTest
+		Takes optional modifiers (see ||): >
+			:tab RustTest
+			:belowright 16RustTest
+			:leftabove vert 80RustTest
 <
 rust.vim Debugging
 ------------------
 
-:RustInfo                                                          *:RustInfo*
+:RustInfo						*:RustInfo*
 		Emits debugging info of the Vim Rust plugin.
 
-:RustInfoToClipboard                                      *:RustInfoClipboard*
+:RustInfoToClipboard					*:RustInfoClipboard*
 		Saves debugging info of the Vim Rust plugin to the default
 		register.
 
-:RustInfoToFile [filename]                                   *:RustInfoToFile*
+:RustInfoToFile [filename]				*:RustInfoToFile*
 		Saves debugging info of the Vim Rust plugin to the given file,
 		overwriting it.
 
 ==============================================================================
-MAPPINGS                                                       *rust-mappings*
+MAPPINGS						*rust-mappings*
 
-This plugin defines mappings for |[[| and |]]| to support hanging indents.
+This plugin defines Normal mode, Visual mode, and Operator-pending mode
+mappings for |[[| and |]]| to support hanging indents.
 
 ==============================================================================
  vim:tw=78:sw=4:noet:ts=8:ft=help:norl:
diff --git a/runtime/doc/ft_sql.txt b/runtime/doc/ft_sql.txt
index 22706c123d..2baa36410d 100644
--- a/runtime/doc/ft_sql.txt
+++ b/runtime/doc/ft_sql.txt
@@ -1,4 +1,4 @@
-*ft_sql.txt*	For Vim version 9.1.  Last change: 2025 Aug 10
+*ft_sql.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 by David Fishburn
 
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index 0096e083fb..9204fb8ea6 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,7 +1,7 @@
-*gui.txt*       For Vim version 9.1.  Last change: 2025 Oct 12
+*gui.txt*	For Vim version 9.2.  Last change: 2026 Jun 02
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Vim's Graphical User Interface				*gui* *GUI*
@@ -1184,11 +1184,22 @@ For the Win32 GUI					*E244* *E245*
 	      NONANTIALIASED, CLEARTYPE and DEFAULT.  Normally you would use
 	      "qDEFAULT".
 	      Some quality values are not supported in legacy OSs.
+	fXX - OpenType font feature.  Specify a single feature as
+	      tag=value, where tag is a 4-character OpenType feature
+	      tag and value is the parameter (0 to disable, 1 or
+	      higher to enable/select variant).  Multiple features
+	      can be specified by repeating the ":f" option.
+	      This only takes effect when 'renderoptions' is set to use
+	      DirectWrite (type:directx).  Default features (calt, liga,
+	      etc.) are preserved unless explicitly overridden.
+	      Example: ":fss19=1:fcalt=0" enables Stylistic Set 19
+	      and disables Contextual Alternates.
 - A '_' can be used in the place of a space, so you don't need to use
   backslashes to escape the spaces.
 Examples: >
     :set guifont=courier_new:h12:w5:b:cRUSSIAN
     :set guifont=Andale_Mono:h7.5:w4.5
+    :set guifont=Cascadia_Code:h14:fss19=1:fcalt=1:fliga=1
 
 See also |font-sizes|.
 
@@ -1285,6 +1296,32 @@ A recommended Japanese font is MS Mincho.  You can find info here:
 https://learn.microsoft.com/en-us/typography/font-list/ms-mincho
 It should be distributed with Windows.
 
+
+Full Screen						*gui-fullscreen*
+
+Fullscreen mode is currently only supported in the Windows and GTK GUI
+versions of Vim.
+
+To enable fullscreen mode in the GUI version of Vim, add the "s" flag to the
+'guioptions' setting.
+
+For convenience, you can define a command or mapping to toggle fullscreen
+mode:
+>
+	command ToggleFullscreen {
+	  if &guioptions =~# 's'
+	    set guioptions-=s
+	  else
+	    set guioptions+=s
+	  endif
+	}
+
+	map   &go =~# 's' ? ":se go-=s" : ":se go+=s"
+
+The fullscreen mode will occupy the entire screen area while hiding window
+decorations such as the title bar and borders.
+
+
 ==============================================================================
 8. Shell Commands					*gui-shell*
 
diff --git a/runtime/doc/gui_w32.txt b/runtime/doc/gui_w32.txt
index 1c33ff6962..26c516d895 100644
--- a/runtime/doc/gui_w32.txt
+++ b/runtime/doc/gui_w32.txt
@@ -1,7 +1,7 @@
-*gui_w32.txt*   For Vim version 9.1.  Last change: 2025 Oct 11
+*gui_w32.txt*	For Vim version 9.2.  Last change: 2026 May 25
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Vim's Win32 Graphical User Interface			*gui-w32* *win32-gui*
@@ -425,8 +425,8 @@ simulating the keystrokes Alt, F. >
 This maps Alt-Space to pop down the system menu for the Vim window.  Note that
 ~ is used by simalt to represent the  character. >
 	:map  :simalt ~n
-Maps Control-N to produce the keys Alt-Space followed by N.  This minimizes the
-Vim window via the system menu.
+Maps Control-N to produce the keys Alt-Space followed by N.  This minimizes
+the Vim window via the system menu.
 
 Note that the key changes depending on the language you are using.
 
@@ -504,4 +504,5 @@ To use the system's default title bar colors, set highlighting groups to
 	hi TitleBar guibg=NONE guifg=NONE
 	hi TitleBarNC guibg=NONE guifg=NONE
 <
+
  vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/gui_x11.txt b/runtime/doc/gui_x11.txt
index 7810e3d31a..c35cf50ecc 100644
--- a/runtime/doc/gui_x11.txt
+++ b/runtime/doc/gui_x11.txt
@@ -1,7 +1,7 @@
-*gui_x11.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*gui_x11.txt*	For Vim version 9.2.  Last change: 2026 Jun 13
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Vim's Graphical User Interface				*gui-x11* *GUI-X11*
@@ -365,6 +365,24 @@ for more information.
 If you are using GTK3 and Vim appears to be slow, try setting the environment
 variable $GDK_RENDERING to "image".
 
+							*gtk4-slow*
+If the GTK4 GUI is slow, freezes, or does not accept keyboard input right
+after startup, it may be caused by the OpenGL renderer or GPU driver.  Try
+starting gvim with one of the following environment variables.  Setting
+$GSK_RENDERER to "cairo" disables the GSK OpenGL renderer.  Setting
+$LIBGL_ALWAYS_SOFTWARE to "true" retains the OpenGL renderer but forces Mesa
+to use software rendering: >
+
+    $ GSK_RENDERER=cairo gvim
+    $ LIBGL_ALWAYS_SOFTWARE=true gvim
+<
+							*gtk4-hwaccel*
+If Vim is compiled with the configure option "--enable-gtk4-hwaccel" set, then
+the GTK4 GUI will use GtkSnapshot instead of Cairo, allowing for hardware
+accelerated rendering, which is much faster.  Enabling this configure option
+also makes the GTK4 GUI use |+image_gdk| instead of |+image_cairo| for
+rendering popup window images.  Note that this feature is currently
+experimental.
 
 Tooltip Colors ~
 							*gtk-tooltip-colors*
diff --git a/runtime/doc/hangulin.txt b/runtime/doc/hangulin.txt
index 3f37d8eb83..be5798ad31 100644
--- a/runtime/doc/hangulin.txt
+++ b/runtime/doc/hangulin.txt
@@ -1,7 +1,8 @@
-*hangulin.txt*  For Vim version 9.1.  Last change: 2019 Nov 21
+*hangulin.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Chi-Deok Hwang and Sung-Hyun Nam
+		  VIM REFERENCE MANUAL	  by Chi-Deok Hwang and Sung-Hyun Nam
+
 
 						*hangul*
 Vim had built-in support for hangul, the Korean language, for users without
diff --git a/runtime/doc/hebrew.txt b/runtime/doc/hebrew.txt
index 64b9c60bc6..9640a14692 100644
--- a/runtime/doc/hebrew.txt
+++ b/runtime/doc/hebrew.txt
@@ -1,7 +1,7 @@
-*hebrew.txt*    For Vim version 9.1.  Last change: 2025 Oct 26
+*hebrew.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Ron Aaron and Avner Lottem
+		  VIM REFERENCE MANUAL	  by Ron Aaron and Avner Lottem
 
 
 Hebrew Language support (options & mapping) for Vim		*hebrew*
diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt
index d39292baf2..1313fb58c1 100644
--- a/runtime/doc/help.txt
+++ b/runtime/doc/help.txt
@@ -1,4 +1,4 @@
-*help.txt*	For Vim version 9.1.  Last change: 2025 Jun 27
+*help.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 			VIM - main help file
 									 k
@@ -44,7 +44,7 @@ BASIC:
 |quickref|	Overview of the most common commands you will use
 |tutor|		30-minute interactive course for beginners
 |copying|	About copyrights
-|iccf|		Helping poor children in Uganda
+|Kuwasha|	Helping poor children in Uganda
 |sponsor|	Sponsor Vim development, become a registered Vim user
 |www|		Vim on the World Wide Web
 |bugs|		Where to send bug reports
diff --git a/runtime/doc/helphelp.txt b/runtime/doc/helphelp.txt
index d10cb2c14a..7ef2ff00bb 100644
--- a/runtime/doc/helphelp.txt
+++ b/runtime/doc/helphelp.txt
@@ -1,7 +1,7 @@
-*helphelp.txt*	For Vim version 9.1.  Last change: 2025 Oct 12
+*helphelp.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Help on help files					*helphelp*
@@ -158,11 +158,12 @@ When no argument is given to |:help| the file given with the 'helpfile' option
 will be opened.  Otherwise the specified tag is searched for in all "doc/tags"
 files in the directories specified in the 'runtimepath' option.
 
-If you would like to open the help in the current window, see this tip:
-|help-curwin|.
-
 The initial height of the help window can be set with the 'helpheight' option
 (default 20).
+
+If you want to open help on {subject} in the current window, the helpcurwin
+optional package can be used.  See |package-helpcurwin|.
+
 						*help-buffer-options*
 When the help buffer is created, several local options are set to make sure
 the help text is displayed as it was intended:
@@ -325,6 +326,7 @@ At this moment translations are available for:
 	Japanese - multiple authors
 	Polish   - translated by Mikolaj Machowski
 	Russian  - translated by Vassily Ragosin
+	Swedish  - translated by Daniel Nylander
 See the Vim website to find them: http://www.vim.org/translations.php
 
 A set of translated help files consists of these files:
@@ -417,8 +419,9 @@ STYLE
 If your Vim has 'modeline' enabled, Vim should follow the preferred style
 automatically when editing built-in help files.
 
-Vim help files should be formatted for a 'textwidth' of 78 characters, so they
-look good in a typical 80 x 24 terminal window.
+Vim help files should be formatted for a 'textwidth' of 78 characters (with
+'conceal' enabled), so they look good in a typical 80 x 24 terminal window;
+use `:set colorcolumn=+0` as a visual guide.
 
 Use two spaces between the final dot of a sentence of the first letter of the
 next sentence.  Like this.
diff --git a/runtime/doc/howto.txt b/runtime/doc/howto.txt
index 2d8c8b5c4f..3df22065fe 100644
--- a/runtime/doc/howto.txt
+++ b/runtime/doc/howto.txt
@@ -1,7 +1,7 @@
-*howto.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*howto.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 How to ...				*howdoi* *how-do-i* *howto* *how-to*
diff --git a/runtime/doc/if_cscop.txt b/runtime/doc/if_cscop.txt
index e96a04ecf1..e3968366c9 100644
--- a/runtime/doc/if_cscop.txt
+++ b/runtime/doc/if_cscop.txt
@@ -1,7 +1,8 @@
-*if_cscop.txt*  For Vim version 9.1.  Last change: 2025 Oct 12
+*if_cscop.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Andy Kahn
+		  VIM REFERENCE MANUAL	  by Andy Kahn
+
 
 							*cscope* *Cscope*
 This document explains how to use Vim's cscope interface.
diff --git a/runtime/doc/if_lua.txt b/runtime/doc/if_lua.txt
index f0d77cffda..cd8fdce3e0 100644
--- a/runtime/doc/if_lua.txt
+++ b/runtime/doc/if_lua.txt
@@ -1,7 +1,7 @@
-*if_lua.txt*    For Vim version 9.1.  Last change: 2025 Oct 12
+*if_lua.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Luis Carvalho
+		  VIM REFERENCE MANUAL	  by Luis Carvalho
 
 
 The Lua Interface to Vim				*lua* *Lua*
diff --git a/runtime/doc/if_mzsch.txt b/runtime/doc/if_mzsch.txt
index d76816dbec..3f38bae732 100644
--- a/runtime/doc/if_mzsch.txt
+++ b/runtime/doc/if_mzsch.txt
@@ -1,7 +1,7 @@
-*if_mzsch.txt*  For Vim version 9.1.  Last change: 2025 Oct 14
+*if_mzsch.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Sergey Khorev
+		  VIM REFERENCE MANUAL	  by Sergey Khorev
 
 
 The MzScheme Interface to Vim				*mzscheme* *MzScheme*
diff --git a/runtime/doc/if_ole.txt b/runtime/doc/if_ole.txt
index c546e971a6..289dd1ae64 100644
--- a/runtime/doc/if_ole.txt
+++ b/runtime/doc/if_ole.txt
@@ -1,7 +1,7 @@
-*if_ole.txt*    For Vim version 9.1.  Last change: 2023 Nov 19
+*if_ole.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Paul Moore
+		  VIM REFERENCE MANUAL	  by Paul Moore
 
 
 The OLE Interface to Vim				*ole-interface*
diff --git a/runtime/doc/if_perl.txt b/runtime/doc/if_perl.txt
index 616c3b31cd..d4692ff382 100644
--- a/runtime/doc/if_perl.txt
+++ b/runtime/doc/if_perl.txt
@@ -1,9 +1,10 @@
-*if_perl.txt*   For Vim version 9.1.  Last change: 2025 Oct 26
+*if_perl.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Sven Verdoolaege
+		  VIM REFERENCE MANUAL	  by Sven Verdoolaege
 					  and Matt Gerassimof
 
+
 Perl and Vim				*perl* *Perl*
 
 1. Editing Perl files			|perl-editing|
diff --git a/runtime/doc/if_pyth.txt b/runtime/doc/if_pyth.txt
index 0402e2cbbd..321b37773b 100644
--- a/runtime/doc/if_pyth.txt
+++ b/runtime/doc/if_pyth.txt
@@ -1,7 +1,7 @@
-*if_pyth.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*if_pyth.txt*	For Vim version 9.2.  Last change: 2026 Mar 18
 
 
-		  VIM REFERENCE MANUAL    by Paul Moore
+		  VIM REFERENCE MANUAL	  by Paul Moore
 
 
 The Python Interface to Vim				*python* *Python*
@@ -183,9 +183,11 @@ vim.eval(str)						*python-eval*
 	Evaluates the expression str using the vim internal expression
 	evaluator (see |expression|).  Returns the expression result as:
 	- a string if the Vim expression evaluates to a string or number
-	- a list if the Vim expression evaluates to a Vim list
-	- a tuple if the Vim expression evaluates to a Vim tuple
-	- a dictionary if the Vim expression evaluates to a Vim dictionary
+	- a list if the Vim expression evaluates to a Vim |list|
+	- a tuple if the Vim expression evaluates to a Vim |tuple|
+	- a dictionary if the Vim expression evaluates to a Vim |dict|
+	- a boolean if Vim expression evaluates to |v:true| or |v:false|
+	- `None` if Vim expression evaluates to |v:null| or |v:none|
 	Dictionaries, lists and tuples are recursively expanded.
 	Examples: >
 	    :" value of the 'textwidth' option
diff --git a/runtime/doc/if_ruby.txt b/runtime/doc/if_ruby.txt
index c024b48e3c..475c5f5eea 100644
--- a/runtime/doc/if_ruby.txt
+++ b/runtime/doc/if_ruby.txt
@@ -1,7 +1,8 @@
-*if_ruby.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*if_ruby.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Shugo Maeda
+		  VIM REFERENCE MANUAL	  by Shugo Maeda
+
 
 The Ruby Interface to Vim				*ruby* *Ruby*
 
diff --git a/runtime/doc/if_sniff.txt b/runtime/doc/if_sniff.txt
index ff587ad249..9cc7b26537 100644
--- a/runtime/doc/if_sniff.txt
+++ b/runtime/doc/if_sniff.txt
@@ -1,7 +1,7 @@
-*if_sniff.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*if_sniff.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Anton Leherbauer
+		  VIM REFERENCE MANUAL	  by Anton Leherbauer
 
 
 The SNiFF+ support was removed at patch 7.4.1433.  If you want to check it out
diff --git a/runtime/doc/if_tcl.txt b/runtime/doc/if_tcl.txt
index a5c098297d..c3710c6f8f 100644
--- a/runtime/doc/if_tcl.txt
+++ b/runtime/doc/if_tcl.txt
@@ -1,7 +1,7 @@
-*if_tcl.txt*    For Vim version 9.1.  Last change: 2025 Oct 12
+*if_tcl.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Ingo Wilken
+		  VIM REFERENCE MANUAL	  by Ingo Wilken
 
 
 The Tcl Interface to Vim				*tcl* *Tcl* *TCL*
diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt
index afd3954654..6059e3f5f0 100644
--- a/runtime/doc/indent.txt
+++ b/runtime/doc/indent.txt
@@ -1,7 +1,7 @@
-*indent.txt*    For Vim version 9.1.  Last change: 2025 Oct 14
+*indent.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 This file is about indenting C programs and other files.
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index 7bda20b248..ba96a24e2d 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,7 +1,8 @@
-*index.txt*     For Vim version 9.1.  Last change: 2025 Aug 06
+*index.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+
 
 								*index*
 This file contains a list of all commands for each mode, with a tag and a
@@ -169,7 +170,7 @@ commands in CTRL-X submode				*i_CTRL-X_index*
 |i_CTRL-X_CTRL-Y|	CTRL-X CTRL-Y	scroll down
 |i_CTRL-X_CTRL-U|	CTRL-X CTRL-U	complete with 'completefunc'
 |i_CTRL-X_CTRL-V|	CTRL-X CTRL-V	complete like in : command line
-|i_CTRL-X_CTRL-Z|	CTRL-X CTRL-Z	stop completion, keeping the text as-is
+|i_CTRL-X_CTRL-Z|	CTRL-X CTRL-Z	stop completion, text is unchanged
 |i_CTRL-X_CTRL-]|	CTRL-X CTRL-]	complete tags
 |i_CTRL-X_s|		CTRL-X s	spelling suggestions
 
@@ -807,7 +808,8 @@ tag		char	      note action in Normal mode	~
 |g@|		g@{motion}	   call 'operatorfunc'
 |g~|		g~{motion}	2  swap case for Nmove text
 |g|	g		1  same as "gj"
-|g|	g		1  same as "g$"
+|g|	g		1  same as "g$" but go to the rightmost
+				   non-blank character instead
 |g|	g		1  same as "g0"
 |g|	g	   same as 
 		g	   same as 
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
index b0bd39a281..688d65fb3f 100644
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,7 +1,7 @@
-*insert.txt*    For Vim version 9.1.  Last change: 2025 Oct 17
+*insert.txt*	For Vim version 9.2.  Last change: 2026 Jun 13
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 						*Insert* *Insert-mode*
@@ -690,7 +690,8 @@ When the popup menu is displayed there are a few more special keys, see
 Note: The keys that are valid in CTRL-X mode are not mapped.  This allows for
 `:map  ` to work (assuming "<" is not in 'cpo').  The key that
 ends CTRL-X mode (any key that is not a valid CTRL-X mode command) is mapped.
-Also, when doing completion with 'complete' mappings apply as usual.
+Also, when doing completion with 'complete' or when completion was started
+with |complete()| mappings apply as usual.
 
 								*E565*
 Note: While completion is active Insert mode can't be used recursively and
@@ -1449,6 +1450,22 @@ CTRL-E		  End completion, go back to what was there before selecting a
 		  insert it.
 		  Select the next match, as if CTRL-N was used, but don't
 		  insert it.
+CTRL-SHIFT-
+		  Scroll the info popup up one line, when it is shown, see
+		  |complete-popup|.
+		  Note: these CTRL-SHIFT keys need the GUI or a terminal that
+		  reports key modifiers; the Linux console does not.
+CTRL-SHIFT-
+		  Scroll the info popup down one line.
+CTRL-SHIFT-
+		  Scroll the info popup up one page.
+CTRL-SHIFT-
+		  Scroll the info popup down one page.
+CTRL-SHIFT-P	  Like CTRL-SHIFT-, scroll the info popup up one line.
+CTRL-SHIFT-N	  Like CTRL-SHIFT-, scroll the info popup down one line.
+		  Note: CTRL-SHIFT-N and CTRL-SHIFT-P additionally need the
+		  terminal to report modifiers for letter keys, see
+		  |modifyOtherKeys|.
  or   Stop completion without changing the match and insert the
 		  typed character.
 
@@ -1720,7 +1737,7 @@ Complete:
 Notes
 
 - It doesn't complete command arguments that rely on 'shellcmd' completion
-  type in Windows and WSL due to general slowness of canditate gathering,
+  type in Windows and WSL due to general slowness of candidate gathering,
   e.g.
 >
      terminal dir
@@ -1813,14 +1830,15 @@ for the syntax items.  For example, in the Scheme language completion should
 include the "-", call-with-output-file.  Depending on your filetype, this may
 not provide the words you are expecting.  Setting the
 g:omni_syntax_use_iskeyword option to 0 will force the syntax plugin to break
-on word characters.   This can be controlled adding the following to your
+on word characters.  This can be controlled adding the following to your
 vimrc: >
     let g:omni_syntax_use_iskeyword = 0
 
-For plugin developers, the plugin exposes a public function OmniSyntaxList.
-This function can be used to request a List of syntax items.  When editing a
-SQL file (:e syntax.sql) you can use the ":syntax list" command to see the
-various groups and syntax items.  For example: >
+For plugin developers, the plugin exposes a public function
+syntaxcomplete#OmniSyntaxList.  This function can be used to request a List of
+syntax items.  When editing a SQL file (:e syntax.sql) you can use the
+":syntax list" command to see the various groups and syntax items.  For
+example: >
     syntax list
 
 Yields data similar to this:
@@ -1834,22 +1852,22 @@ Yields data similar to this:
                        image float integer timestamp real decimal ~
 
 There are two syntax groups listed here: sqlOperator and sqlType.  To retrieve
-a List of syntax items you can call OmniSyntaxList a number of different
-ways.  To retrieve all syntax items regardless of syntax group:  >
-    echo OmniSyntaxList( [] )
+a List of syntax items you can call syntaxcomplete#OmniSyntaxList a number of
+different ways.  To retrieve all syntax items regardless of syntax group:  >
+    echo syntaxcomplete#OmniSyntaxList( [] )
 
 To retrieve only the syntax items for the sqlOperator syntax group: >
-    echo OmniSyntaxList( ['sqlOperator'] )
+    echo syntaxcomplete#OmniSyntaxList( ['sqlOperator'] )
 
 To retrieve all syntax items for both the sqlOperator and sqlType groups: >
-    echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )
+    echo syntaxcomplete#OmniSyntaxList( ['sqlOperator', 'sqlType'] )
 
 A regular expression can also be used: >
-    echo OmniSyntaxList( ['sql\w\+'] )
+    echo syntaxcomplete#OmniSyntaxList( ['sql\w\+'] )
 
 From within a plugin, you would typically assign the output to a List: >
     let myKeywords = []
-    let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
+    let myKeywords = syntaxcomplete#OmniSyntaxList( ['sqlKeyword'] )
 
 
 SQL							*ft-sql-omni*
diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt
index 46aa9428f3..f26d49d737 100644
--- a/runtime/doc/intro.txt
+++ b/runtime/doc/intro.txt
@@ -1,7 +1,7 @@
-*intro.txt*     For Vim version 9.1.  Last change: 2025 Oct 12
+*intro.txt*	For Vim version 9.2.  Last change: 2026 Mar 08
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Introduction to Vim					*ref* *reference*
@@ -275,7 +275,7 @@ Vim would never have become what it is now, without the help of these people!
 				improvements
 	Doug Kearns		Runtime file maintainer
 	Foxe Chen		Wayland support, new features
-	glepnir			completion feature
+	glepnir			work on improving completion feature, fixes
 	Girish Palya		autocompletion (ins/cmdline), omnifunc
 				composing, search/subst completion, and more.
 	Hirohito Higashi	lots of patches and fixes
@@ -313,11 +313,11 @@ Elvis	Another Vi clone, made by Steve Kirkendall.  Very compact but isn't
 	as flexible as Vim.  Development has stalled, Elvis has left the
 	building!  Source code is freely available.
 							*Neovim*
-Neovim	A Vim clone.  Forked the Vim source in 2014 and went a different way.
-	Very much bound to github and has many more dependencies, making
-	development more complex and limiting portability.  Code has been
-	refactored, resulting in patches not being exchangeable with Vim.
-	Supports a remote GUI and integration with scripting languages.
+Neovim	A fork of Vim from 2014 that went a different way.  Very much bound
+	to GitHub and has many more dependencies, making development more
+	complex and limiting portability.  Code has been refactored, resulting
+	in patches not being exchangeable with Vim.  Supports remote UIs and
+	first-class Lua scripting.
 
 ==============================================================================
 4. Notation						*notation*
@@ -450,6 +450,8 @@ notation	meaning		    equivalent	decimal value(s)	~
 		delete				127
 		command sequence intro  ALT-Esc 155	**
 		CSI when typed in the GUI		**
+		operating system command	157	**
+		received OSC response			**
 
 		end-of-line (can be ,  or ,
 		depends on system and 'fileformat')	**
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 98ac3e1181..98b3819908 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,7 +1,7 @@
-*map.txt*       For Vim version 9.1.  Last change: 2025 Oct 12
+*map.txt*	For Vim version 9.2.  Last change: 2026 Jun 13
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Key mapping, abbreviations and user-defined commands.
@@ -208,8 +208,7 @@ be effective in the current buffer only.  Example: >
 Then you can map ",w" to something else in another buffer: >
 	:map   ,w  /[#&!]
 The local buffer mappings are used before the global ones.  See  below
-to make a short local mapping not taking effect when a longer global one
-exists.
+to make a short local mapping take effect when a longer global one exists.
 The "" argument can also be used to clear mappings: >
 	:unmap  ,w
 	:mapclear 
@@ -1593,7 +1592,10 @@ reported if any are supplied).  However, it is possible to specify that the
 command can take arguments, using the -nargs attribute.  Valid cases are:
 
 	-nargs=0    No arguments are allowed (the default)
-	-nargs=1    Exactly one argument is required, it includes spaces
+	-nargs=1    Exactly one argument is required, it includes spaces;
+		    completion treats white spaces as argument separation
+	-nargs=_    Exactly one argument is required, it includes spaces;
+		    completion treats white spaces as part of the argument
 	-nargs=*    Any number of arguments are allowed (0, 1, or many),
 		    separated by white space
 	-nargs=?    0 or 1 arguments are allowed
@@ -1601,7 +1603,28 @@ command can take arguments, using the -nargs attribute.  Valid cases are:
 
 Arguments are considered to be separated by (unescaped) spaces or tabs in this
 context, except when there is one argument, then the white space is part of
-the argument.
+the argument. The difference between the "-nargs=1" and "-nargs=_": >
+
+	func MyComplete(ArgLead, CmdLine, CursorPos)
+	  return ["one value", "two values", "three values"]
+		\->matchfuzzy(a:ArgLead)
+	endfunc
+	:command -nargs=1 -complete=customlist,MyComplete MyCmd1 echo 
+	:command -nargs=_ -complete=customlist,MyComplete MyCmd2 echo 
+
+Completing ":MyCmd1 two va" will complete with: >
+
+	:MyCmd1 two one value
+
+Completing ":MyCmd2 two va" will complete with: >
+
+	:MyCmd2 two values
+
+Use -nargs=_ when the whole argument area should be taken as a single value
+as-is.  When you need several arguments and an individual argument may itself
+contain spaces (so the splitter must keep running), use -nargs=+/* together
+with |:command-completeopt| (-completeopt=escape) instead.
+
 
 Note that arguments are used as text, not as expressions.  Specifically,
 "s:var" will use the script-local variable in the script where the command was
@@ -1659,7 +1682,9 @@ completion can be enabled:
 	-complete=scriptnames	sourced script names
 	-complete=shellcmd	Shell command
 	-complete=shellcmdline	First is a shell command and subsequent ones
-				are filenames.  The same behavior as |:!cmd|
+				are filenames.  The same behavior as |:!cmd|.
+				To get correct completion, |:command-nargs|
+				should be '*' or '+'
 	-complete=sign		|:sign| suboptions
 	-complete=syntax	syntax file names 'syntax'
 	-complete=syntime	|:syntime| suboptions
@@ -1691,11 +1716,26 @@ For the "custom" argument, the function should return the completion
 candidates one per line in a newline separated string.
 							*E1303*
 For the "customlist" argument, the function should return the completion
-candidates as a Vim List.  Non-string items in the list are ignored.
+candidates as a Vim List.  Each item may be either a string or a |Dictionary|.
+A Dictionary item may have the following keys:
+	word	(required) the text inserted into the command line when the
+		item is selected
+	abbr	alternative text shown in the popup menu in place of "word",
+		when 'wildoptions' contains "pum"; useful when the inserted
+		text and the displayed text should differ
+	kind	short kind text (one or two characters), shown in the popup
+		menu when 'wildoptions' contains "pum"
+	menu	extra text shown after the match in the popup menu
+	info	long description shown in the info popup; the |+popupwin|
+		feature is required to display it
+Items that are neither a string nor a Dictionary, and Dictionary items without
+a "word" key, are ignored.  When 'wildoptions' does not contain "pum", only
+"word" is shown.
 
 The function arguments are:
 	ArgLead		the leading portion of the argument currently being
-			completed on
+			completed on; note that this only captures the current
+			space-separated word, even when using "-nargs=1"
 	CmdLine		the entire command line
 	CursorPos	the cursor position in it (byte index)
 The function may use these for determining context.  For the "custom"
@@ -1723,6 +1763,50 @@ the 'path' option: >
 <
 This example does not work for file names with spaces!
 
+							*:command-completeopt*
+For the "custom" and "customlist" types you can further opt into specific
+behaviors with the -completeopt= attribute.  It takes a comma-separated list
+of option names; currently only "escape" is recognized:
+
+	-completeopt=escape
+		The completion function may return matches containing spaces,
+		tabs or backslashes.  When such a match is inserted into the
+		command line each space, tab and backslash is preceded by a
+		backslash so the value is preserved as a single argument.  The
+		unescaped form is used for display (popup menu / wildmenu /
+		|getcompletion()|).  The ArgLead passed to the completion
+		function is also unescaped: when the user types
+		`:Cmd foo\ b` the function is called with `foo b`, not
+		`foo\ b` .  In the command's replacement text || and
+		|| likewise yield the unescaped value.
+
+Example: >
+    :func MyComplete(ArgLead, CmdLine, CursorPos)
+    :    return filter(['hello world', 'good morning'],
+    :    \              {_, v -> stridx(v, a:ArgLead) ==# 0})
+    :endfunc
+    :com! -nargs=1 -complete=customlist,MyComplete -completeopt=escape MyCmd
+		\ echo 
+<
+After `:MyCmd ` the popup shows `hello world` and `good morning`.  Typing
+`:MyCmd hello\ w` calls MyComplete with ArgLead set to `hello w` (the
+backslash before the space is removed), the filter finds `hello world`, and
+`` inserts it as `:MyCmd hello\ world`.  `` then evaluates to the
+logical `hello world`.
+
+Without -completeopt=escape the literal string `hello world` would be inserted
+into the command line, so Vim's argument splitter would treat it as two
+arguments.
+
+-completeopt=escape and -nargs=_ (see |:command-nargs|) target different
+shapes; they are not competing solutions for the same one:
+	"whole line as one argument, no escaping"
+			use -nargs=_
+	"multiple arguments, each may contain spaces"
+			use -nargs=+ or -nargs=* with -completeopt=escape
+Because -nargs=_ disables the argument splitter, escaping has no effect there,
+so combining -nargs=_ with -completeopt=escape is an error (E1579).
+
 
 Range handling ~
 				*E177* *E178* *:command-range* *:command-count*
@@ -1753,7 +1837,7 @@ by default correspond to the current line, last line and the whole buffer,
 relate to arguments, (loaded) buffers, windows or tab pages.
 
 Possible values are (second column is the short name used in listing):
-    -addr=lines			Range of lines (this is the default for -range)
+    -addr=lines			Range of lines (the default for -range)
     -addr=arguments	  arg	Range for arguments
     -addr=buffers	  buf	Range for buffers (also not loaded buffers)
     -addr=loaded_buffers  load	Range for loaded buffers
@@ -1761,8 +1845,7 @@ Possible values are (second column is the short name used in listing):
     -addr=tabs		  tab	Range for tab pages
     -addr=quickfix	  qf	Range for quickfix entries
     -addr=other		  ?	Other kind of range; can use ".", "$" and "%"
-				as with "lines" (this is the default for
-				-count)
+				as with "lines" (the default for -count)
 
 
 Special cases ~
diff --git a/runtime/doc/mbyte.txt b/runtime/doc/mbyte.txt
index ea545874c2..c8312b7f7d 100644
--- a/runtime/doc/mbyte.txt
+++ b/runtime/doc/mbyte.txt
@@ -1,7 +1,7 @@
-*mbyte.txt*     For Vim version 9.1.  Last change: 2025 Oct 26
+*mbyte.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar et al.
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar et al.
 
 
 Multi-byte support				*multibyte* *multi-byte*
@@ -455,8 +455,8 @@ Useful utilities for converting the charset:
 	ftp://ftp.cuhk.hk/pub/chinese/ifcss/software/unix/convert/hc-30.tar.gz
 
     Korean:	    hmconv
-	Hmconv is Korean code conversion utility especially for E-mail.  It can
-	convert between EUC-KR and ISO-2022-KR.  Hmconv can be found at:
+	Hmconv is Korean code conversion utility especially for E-mail.  It
+	can convert between EUC-KR and ISO-2022-KR.  Hmconv can be found at:
 	https://www.freshports.org/korean/hmconv/
 
     Multilingual:   lv
@@ -601,7 +601,7 @@ Each field means:
 - AVE:	    AVERAGE_WIDTH field.  Ten times average width in pixels.
 - CR:	    CHARSET_REGISTRY field.  The name of the charset group.
 - CE:	    CHARSET_ENCODING field.  The rest of the charset name.  For some
-	    charsets, such as JIS X 0208, if this field is 0, code points has
+	    charsets, such as JIS X 0208, if this field is 0, codepoints has
 	    the same value as GL, and GR if 1.
 
 For example, in case of a 16 dots font corresponding to JIS X 0208, it is
@@ -761,9 +761,9 @@ Then add a command to your |gvimrc| file to set 'guifont': >
 
 X INPUT METHOD (XIM) BACKGROUND			*XIM* *xim* *x-input-method*
 
-XIM is an international input module for X.  There are two kinds of structures,
-Xlib unit type and |IM-server| (Input-Method server) type.  |IM-server| type
-is suitable for complex input, such as CJK.
+XIM is an international input module for X.  There are two kinds of
+structures, Xlib unit type and |IM-server| (Input-Method server) type.
+|IM-server| type is suitable for complex input, such as CJK.
 
 - IM-server
 							*IM-server*
@@ -997,8 +997,8 @@ recommended to test with an alternative one.
 
 For proper integration with Vim's |+multi_byte_ime| system, changes in the
 input method's status must be detectable by the `ImmGetOpenStatus()` function
-in Vims source code.  Currently, some input methods that support multi-language
-input may have internal state changes that gVim cannot capture.
+in Vim's source code.  Currently, some input methods that support
+multi-language input may have internal state changes that gVim cannot capture.
 
 
 Cursor color when IME or XIM is on				*CursorIM*
diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index 33b8fbdfee..6a39e3f013 100644
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -1,7 +1,7 @@
-*message.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*message.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 This file contains an alphabetical list of messages and error messages that
@@ -644,6 +644,22 @@ Set the 'autoread' option if you want to do this automatically.
 This message is not given when 'buftype' is not empty.
 Also see the |FileChangedShell| autocommand.
 
+You will be given a dialog with the following options:
+
+"OK":		Dismiss the warning and continue editing.  No changes are
+		loaded, the buffer remains as it is.
+
+"Load File":	Reload the file from disk, replacing the current buffer
+		contents.  Any changes you made in Vim that haven't been saved
+		will be lost.
+
+"Load File and Options":
+		Reload the file from disk and, in addition, apply relevant
+		file settings, such as indentation, syntax highlighting, text
+		width, and other filetype-specific options.  This ensures the
+		buffer matches the file's intended configuration according to
+		your current settings and autocommands.
+
 There is one situation where you get this message even though there is nothing
 wrong: If you save a file in Windows on the day the daylight saving time
 starts.  It can be fixed in one of these ways:
@@ -832,6 +848,8 @@ and the screen is about to be redrawn:
    like pressing .  This makes it impossible to select text though.
 -> For the GUI clicking the left mouse button in the last line works like
    pressing .
+-> |q| won't start recording into a register (rationale: it is often used as
+   "quit" prompt key by users)
 
 If you accidentally hit  or  and you want to see the displayed
 text then use |g<|.  This only works when 'more' is set.
diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt
index e98e15e1dd..6f0bb3fe62 100644
--- a/runtime/doc/mlang.txt
+++ b/runtime/doc/mlang.txt
@@ -1,7 +1,7 @@
-*mlang.txt*     For Vim version 9.1.  Last change: 2025 Oct 12
+*mlang.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Multi-language features				*multilang* *multi-lang*
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
index e0c9d8ba64..a78ee204e5 100644
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -1,7 +1,7 @@
-*motion.txt*    For Vim version 9.1.  Last change: 2025 Oct 12
+*motion.txt*	For Vim version 9.2.  Last change: 2026 Jun 13
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Cursor motions					*cursor-motions* *navigation*
@@ -429,8 +429,10 @@ These commands move over words or WORDS.
 							*word*
 A word consists of a sequence of letters, digits and underscores, or a
 sequence of other non-blank characters, separated with white space (spaces,
-tabs, ).  This can be changed with the 'iskeyword' option.  An empty line
-is also considered to be a word.
+tabs, ).  This can be changed with the 'iskeyword' option.  For
+characters above 255, a word ends when the Unicode character class changes
+(e.g., between letters, subscripts, emojis, etc).  An empty line is also
+considered to be a word.
 							*WORD*
 A WORD consists of a sequence of non-blank characters, separated with white
 space.  An empty line is also considered to be a WORD.
@@ -1292,9 +1294,13 @@ remembered.
 			quotes).  Note that this works fine for C, but not for
 			Perl, where single quotes are used for strings.
 
-			Nothing special is done for matches in comments.  You
-			can either use the matchit plugin |matchit-install| or
-			put quotes around matches.
+			When in addition 'comments' defines C-style "//" or
+			"/*" comments, parens and braces inside such comments
+			are skipped, like the |=| operator does.  This does
+			not happen when the cursor is inside a comment, so a
+			match inside that comment can still be found.
+			Otherwise you can use the matchit plugin
+			|matchit-install| or put quotes around matches.
 
 			No count is allowed, {count}% jumps to a line {count}
 			percentage down the file |N%|.  Using '%' on
diff --git a/runtime/doc/netbeans.txt b/runtime/doc/netbeans.txt
index 871302616f..4803e97497 100644
--- a/runtime/doc/netbeans.txt
+++ b/runtime/doc/netbeans.txt
@@ -1,7 +1,7 @@
-*netbeans.txt*  For Vim version 9.1.  Last change: 2025 Oct 12
+*netbeans.txt*	For Vim version 9.2.  Last change: 2026 Apr 09
 
 
-		  VIM REFERENCE MANUAL    by Gordon Prieur et al.
+		  VIM REFERENCE MANUAL	  by Gordon Prieur et al.
 
 
 					*netbeans* *NetBeans* *netbeans-support*
@@ -48,7 +48,7 @@ VimIntegration, description of various projects doing Vim Integration:
 
 Projects using the NetBeans protocol of Vim are or were:
 - Agide, an IDE for the AAP project, written in Python (now replaced by
-  |:Termdebug|): http://www.a-a-p.org
+  |:Termdebug|): http://www.a-a-p.org (link now dead)
 - Clewn, a gdb integration into Vim, written in C:
 	http://clewn.sourceforge.net/
 - Pyclewn, a gdb integration into Vim, written in Python:
@@ -262,8 +262,8 @@ connection has been established.
 The communication between the Vim Controller and Vim uses plain text
 messages.  This protocol was first designed to work with the external editor
 module of NetBeans.  Later it was extended to work with Agide (A-A-P GUI IDE,
-see http://www.a-a-p.org) and then with other IDE.  The extensions are marked
-with "version 2.1".
+formerly http://www.a-a-p.org, link now dead) and then with other IDE.
+The extensions are marked with "version 2.1".
 
 Version 2.2 of the protocol has several minor changes which should only affect
 NetBeans users (ie, not Agide users).  However, a bug was fixed which could
@@ -390,7 +390,8 @@ addAnno serNum typeNum off len
 		   typeNum	number	sequence number of the annotation
 					defined with defineAnnoType for this
 					buffer
-		   off		number	offset where annotation is to be placed
+		   off		number	offset where annotation is to be
+					placed
 		   len		number	not used
 		In version 2.1 "lnum/col" can be used instead of "off".
 
@@ -645,7 +646,8 @@ getMark		Not implemented.
 getAnno serNum
 		Return the line number of the annotation in the buffer.
 		Argument:
-			serNum		serial number of this placed annotation
+			serNum		serial number of this placed
+					annotation
 		The reply is:
 			123 lnum	line number of the annotation
 			123 0		invalid annotation serial number
@@ -847,7 +849,7 @@ REJECT		Not used.
 These errors occur when a message violates the protocol:
 *E627* *E628* *E629* *E632* *E633* *E634* *E635* *E636*
 *E637* *E638* *E639* *E640* *E641* *E642* *E643* *E644* *E645* *E646*
-*E647* *E648* *E650* *E651* *E652*
+*E647* *E648* *E649* *E650* *E651* *E652*
 
 
 ==============================================================================
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 0d8c668e3b..97d8a409ac 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,7 +1,7 @@
-*options.txt*	For Vim version 9.1.  Last change: 2025 Oct 28
+*options.txt*	For Vim version 9.2.  Last change: 2026 Jun 17
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Options							*options*
@@ -97,6 +97,17 @@ achieve special effects.  These options come in three forms:
 			If the option is a list of flags, superfluous flags
 			are removed.  When adding a flag that was already
 			present the option value doesn't change.
+			When the option supports "key:value" items and {value}
+			contains a "key:value" item or multiple
+			comma-separated items, each item is processed
+			individually:
+			- A "key:value" item where the key already exists with
+			  a different value: the old item is removed and the
+			  new item is appended to the end.
+			- A "key:value" item that is an exact duplicate is
+			  left unchanged.
+			- Other items that already exist are left unchanged.
+			- New items are appended to the end.
 			Also see |:set-args| above.
 
 :se[t] {option}^={value}				*:set^=*
@@ -104,6 +115,11 @@ achieve special effects.  These options come in three forms:
 			the {value} to a string option.  When the option is a
 			comma-separated list, a comma is added, unless the
 			value was empty.
+			When the option supports "key:value" items and {value}
+			contains a "key:value" item or multiple
+			comma-separated items, each item is processed
+			individually.  Works like |:set+=| but new items are
+			prepended to the beginning instead of appended.
 			Also see |:set-args| above.
 
 :se[t] {option}-={value}				*:set-=*
@@ -116,6 +132,12 @@ achieve special effects.  These options come in three forms:
 			When the option is a list of flags, {value} must be
 			exactly as they appear in the option.  Remove flags
 			one by one to avoid problems.
+			When the option supports "key:value" items and {value}
+			contains a "key:value" item or multiple
+			comma-separated items, each item is processed
+			individually.  A "key:value" item removes the existing
+			item with that key regardless of its value.  A "key:"
+			item also removes by key match.
 			The individual values from a comma separated list or
 			list of flags can be inserted by typing 'wildchar'.
 			See |complete-set-option|.
@@ -302,12 +324,12 @@ that was last closed are used again.  If this buffer has been edited in this
 window, the values from back then are used.  Otherwise the values from the
 last closed window where the buffer was edited last are used.
 
-It's possible to set a local window option specifically for a type of buffer.
-When you edit another buffer in the same window, you don't want to keep
-using these local window options.  Therefore Vim keeps a global value of the
-local window options, which is used when editing another buffer.  Each window
-has its own copy of these values.  Thus these are local to the window, but
-global to all buffers in the window.  With this you can do: >
+":setlocal" can be used to set a local window option specifically for a type
+of buffer.  When you edit another buffer in the same window, you don't want to
+keep using these local window options.  Meanwhile ":set" also sets a global
+value of a local window option, which is used when editing another buffer.
+Each window has its own copy of these global values, making them local to the
+window, but global to all buffers in the window.  With this you can do: >
 	:e one
 	:set list
 	:e two
@@ -1005,10 +1027,10 @@ A jump table for the options with a short description can be found at |Q_op|.
 'autowrite' 'aw'	boolean	(default off)
 			global
 	Write the contents of the file, if it has been modified, on each
-	`:next`, `:rewind`, `:last`, `:first`, `:previous`, `:stop`,
-	`:suspend`, `:tag`, `:!`, `:make`, CTRL-] and CTRL-^ command; and when
-	a `:buffer`, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command takes one
-	to another file.
+	`:next`, `:rewind`, `:last`, `:first`, `:previous`, `:tag`, `:stop`,
+	`:suspend`, `:!`, `:make`, `:terminal`, CTRL-] or CTRL-^ command; and
+	when a `:buffer`, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command
+	switches to another file.
 	A buffer is not written if it becomes hidden, e.g. when 'bufhidden' is
 	set to "hide" and `:next` is used.
 	Note that for some commands the 'autowrite' option is not used, see
@@ -1022,8 +1044,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 			 *'autowriteall'* *'awa'* *'noautowriteall'* *'noawa'*
 'autowriteall' 'awa'	boolean	(default off)
 			global
-	Like 'autowrite', but also used for commands ":edit", ":enew", ":quit",
-	":qall", ":exit", ":xit", ":recover" and closing the Vim window.
+	Like 'autowrite', but also used for commands `:edit`, `:enew`,
+	`:quit`, `:qall`, `:exit`, `:xit`, `:recover` and closing the Vim
+	window.
 	Setting this option also implies that Vim behaves like 'autowrite' has
 	been set.
 
@@ -1675,7 +1698,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	a modified version of the following command in your vimrc file to
 	override it: >
 	  :let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
-<	This option cannot be set from a |modeline| or in the |sandbox|, for
+<	Environment variables are expanded |:set_env|.
+	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 	(parts of 'cdpath' can be passed to the shell to expand file names).
 
@@ -1819,13 +1843,19 @@ A jump table for the options with a short description can be found at |Q_op|.
 						  for X-windows, "" otherwise)
 			global
 			{only in GUI versions or when the |+xterm_clipboard|
-			or |+wayland_clipboard| features are included}
+			or |+wayland_clipboard| features or
+			|+clipboard_provider| features are included}
 	This option is a list of comma-separated names.
 	Note: if one of the items is "exclude:", then you can't add an item
 	after that.  Therefore do not append an item with += but use ^= to
 	prepend, e.g.: >
 		set clipboard^=unnamed
 <	When using the GUI see |'go-A'|.
+	When using the |clipboard-providers| feature, only the "unnamed" and
+	"unnamedplus" features will be recognized  If compiled without the
+	|+clipboard| feature but compiled with the |+clipboard_provider|
+	feature, then they will be the only values allowed and the other
+	values will be invalid.
 	These names are recognized:
 
 						*clipboard-unnamed*
@@ -1847,11 +1877,10 @@ A jump table for the options with a short description can be found at |Q_op|.
 			option, yank operations (but not delete, change or
 			put) will additionally copy the text into register
 			'*'.  If Wayland is being used and the compositor does
-			not support the primary-selection-unstable-v1
-			protocol, then the regular selection is used in its
-			place.  Only available with the |+X11| or
-			|+wayland_clipboard| feature.  Availability can be
-			checked with: >
+			not support the primary selection then the regular
+			selection is used in its place.  Only available with
+			the |+X11| or |+wayland_clipboard| feature.
+			Availability can be checked with: >
 			if has('unnamedplus')
 <
 						*clipboard-autoselect*
@@ -1916,18 +1945,22 @@ A jump table for the options with a short description can be found at |Q_op|.
 				 for VMS: "x11",
 				 otherwise: "")
 			global
-			{only when the |+xterm_clipboard| or
-			|+wayland_clipboard| features are included}
-	Specifies which method of accessing the system clipboard is used,
-	depending on which method works first or is available.  Supported
-	methods are:
+			{only when the |+xterm_clipboard|, |+wayland_clipboard|,
+			or |+eval| features are included}
+	Specifies which method of accessing the system clipboard (or clipboard
+	provider) is used.  Methods are tried in the order given; the first
+	working method is used.  Supported methods are:
 		wayland		Wayland selections
 		x11		X11 selections
+				Use a clipboard provider with the given name
 
 	Note: This option is ignored when either the GUI is running or if Vim
 	is run on a system without Wayland or X11 support, such as Windows or
-	macOS.  The GUI or system way of accessing the clipboard is always
-	used instead.
+	macOS.  The GUI or system way of accessing the clipboard is used
+	instead, meaning |v:clipmethod| will be set to "none".  The
+	exception to this is the |clipboard-providers| feature, in which if
+	a clipboard provider is being used, then it will override the existing
+	clipboard functionality.
 
 	The option value is a list of comma separated items.  The list is
 	parsed left to right in order, and the first method that Vim
@@ -2006,8 +2039,6 @@ A jump table for the options with a short description can be found at |Q_op|.
 					*'commentstring'* *'cms'* *E537*
 'commentstring' 'cms'	string	(default "/* %s */")
 			local to buffer
-			{not available when compiled without the |+folding|
-			feature}
 	A template for a comment.  The "%s" in the value is replaced with the
 	comment text, and should be padded with a space when possible.
 	Currently used to add markers for folding, see |fold-marker|.  Also
@@ -2210,6 +2241,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	Note: The match limit takes effect only during forward completion
 	(CTRL-N) and is ignored during backward completion (CTRL-P).
 
+	This option cannot be set in a modeline when 'modelineexpr' is off.
+
 						*'completefunc'* *'cfu'*
 'completefunc' 'cfu'	string	(default: empty)
 			local to buffer
@@ -2227,11 +2260,13 @@ A jump table for the options with a short description can be found at |Q_op|.
 						*'completefuzzycollect'* *'cfc'*
 'completefuzzycollect' 'cfc'	string	(default: empty)
 				global
-	A comma-separated list of strings to enable fuzzy collection for
-	specific |ins-completion| modes, affecting how matches are gathered
-	during completion.  For specified modes, fuzzy matching is used to
-	find completion candidates instead of the standard prefix-based
-	matching.  This option can contain the following values:
+	DEPRECATED: This option is no longer used; changing it has no effect.
+	When 'completeopt' contains "fuzzy", Vim will internally use the
+	equivalent of:
+		"keyword,files,whole_line"
+
+	The values below are kept for compatibility and for scripts that
+	may read this option:
 
 	keyword		keywords in the current file	|i_CTRL-X_CTRL-N|
 			keywords with flags ".", "w",	|i_CTRL-N| |i_CTRL-P|
@@ -2242,10 +2277,6 @@ A jump table for the options with a short description can be found at |Q_op|.
 
 	whole_line	whole lines			|i_CTRL-X_CTRL-L|
 
-	When using the 'completeopt' "longest" option value, fuzzy collection
-	can identify the longest common string among the best fuzzy matches
-	and insert it automatically.
-
 						*'completeitemalign'* *'cia'*
 'completeitemalign' 'cia' string (default: "abbr,kind,menu")
 			  global
@@ -2265,16 +2296,13 @@ A jump table for the options with a short description can be found at |Q_op|.
 	   fuzzy    Enable |fuzzy-matching| for completion candidates.  This
 		    allows for more flexible and intuitive matching, where
 		    characters can be skipped and matches can be found even
-		    if the exact sequence is not typed.  Note: This option
-		    does not affect the collection of candidate list, it only
-		    controls how completion candidates are reduced from the
-		    list of alternatives.  If you want to use |fuzzy-matching|
-		    to gather more alternatives for your candidate list,
-		    see 'completefuzzycollect'.
+		    if the exact sequence is not typed (disabled for thesaurus
+		    completion |compl-thesaurus|).
 
 	   longest
 		    When 'autocomplete' is not active, only the longest common
-		    prefix of the matches is inserted.  If the popup menu is
+		    prefix of the matches is inserted (disabled for thesaurus
+		    completion |compl-thesaurus|).  If the popup menu is
 		    displayed, you can use CTRL-L to add more characters.
 		    Whether case is ignored depends on the type of completion.
 		    For buffer text the 'ignorecase' option applies.
@@ -2380,6 +2408,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 		close		show close button: "on" (default) or "off"
 		height		maximum height of the popup
 		highlight	popup highlight group (default: PmenuSel)
+		opacity		opacity percentage 0-100 (default 100, fully
+				opaque).  When less than 100, content beneath
+				the popup shows through.
 		resize		show resize handle: "on" (default) or "off"
 		shadow		"off" (default) or "on" using |hl-PmenuShadow|
 		width		maximum width of the popup
@@ -2387,6 +2418,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	Example: >
 		:set completepopup=height:10,border:single,highlight:InfoPopup
 		:set completepopup=width:60,border:custom:─;│;─;│;┌;â”;┘;â””
+		:set completepopup=border:round,opacity:80
 <
 	When "align" is set to "item", the popup is positioned near the
 	selected item and moves as the selection changes.
@@ -2585,8 +2617,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 			This makes "y0" fail in the first column.
 								*cpo-f*
 		f	When included, a ":read" command with a file name
-			argument will set the file name for the current buffer,
-			if the current buffer doesn't have a file name yet.
+			argument will set the file name for the current
+			buffer, if the current buffer doesn't have a file name
+			yet.
 								*cpo-F*
 		F	When included, a ":write" command with a file name
 			argument will set the file name for the current
@@ -3081,6 +3114,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	To include a comma in a file name precede it with a backslash.  Spaces
 	after a comma are ignored, otherwise spaces are included in the file
 	name.  See |option-backslash| about using backslashes.
+	Environment variables are expanded |:set_env|.
 	This has nothing to do with the |Dictionary| variable type.
 	Where to find a list of words?
 	- On FreeBSD, there is the file "/usr/share/dict/words".
@@ -3186,8 +3220,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 		hiddenoff	Do not use diff mode for a buffer when it
 				becomes hidden.
 
-		iblank		Ignore changes where lines are all blank.  Adds
-				the "-B" flag to the "diff" command if
+		iblank		Ignore changes where lines are all blank.
+				Adds the "-B" flag to the "diff" command if
 				'diffexpr' is empty.  Check the documentation
 				of the "diff" command for what this does
 				exactly.
@@ -3219,14 +3253,18 @@ A jump table for the options with a short description can be found at |Q_op|.
 					difference.  Non-alphanumeric
 					multi-byte characters such as emoji
 					and CJK characters are considered
-					individual words.
+					individual words.  Small gaps of
+					non-word characters (5 bytes or less)
+					between changes are merged into a
+					single highlight block.
 
 		internal	Use the internal diff library.  This is
 				ignored when 'diffexpr' is set.  *E960*
 				When running out of memory when writing a
-				buffer this item will be ignored for diffs
-				involving that buffer.  Set the 'verbose'
-				option to see when this happens.
+				buffer or the diff is larger than 1 GB this
+				item will be ignored for diffs involving that
+				buffer.  Set the 'verbose' option to see when
+				this happens.
 
 		iwhite		Ignore changes in amount of white space.  Adds
 				the "-b" flag to the "diff" command if
@@ -3603,6 +3641,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 		|SafeState|,
 		|SafeStateAgain|,
 		|SessionLoadPost|,
+		|SessionLoadPre|,
 		|SessionWritePost|,
 		|ShellCmdPost|,
 		|SigUSR1|,
@@ -3816,9 +3855,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 	  edit a file, a check is done for the :
 	  1. If all lines end in , and 'fileformats' includes "dos",
 	     'fileformat' is set to "dos".
-	  2. If a  is found and 'fileformats' includes "unix", 'fileformat'
-	     is set to "unix".  Note that when a  is found without a
-	     preceding , "unix" is preferred over "dos".
+	  2. If a  is found and 'fileformats' includes "unix",
+	     'fileformat' is set to "unix".  Note that when a  is found
+	     without a preceding , "unix" is preferred over "dos".
 	  3. If 'fileformat' has not yet been set, and if a  is found, and
 	     if 'fileformats' includes "mac", 'fileformat' is set to "mac".
 	     This means that "mac" is only chosen when:
@@ -3959,7 +3998,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	|String| and is the |:find| command argument.  The second argument is
 	a |Boolean| and is set to |v:true| when the function is called to get
 	a List of command-line completion matches for the |:find| command.
-	The function should return a List of strings.
+	The function should return a List, which is handled similarly to the
+	return value of a |:command-completion-customlist| function.
 
 	The function is called only once per |:find| command invocation.
 	The function can process all the directories specified in 'path'.
@@ -4286,15 +4326,17 @@ A jump table for the options with a short description can be found at |Q_op|.
 
 					*'fsync'* *'fs'* *'nofsync'* *'nofs'*
 'fsync' 'fs'		boolean	(default on)
-			global
+			global or local to buffer |global-local|
 	When on, the library function fsync() will be called after writing a
 	file.  This will flush a file to disk, ensuring that it is safely
 	written even on filesystems which do metadata-only journaling.  This
-	will force the harddrive to spin up on Linux systems running in laptop
-	mode, so it may be undesirable in some situations.  Be warned that
-	turning this off increases the chances of data loss after a crash.  On
-	systems without an fsync() implementation, this variable is always
-	off.
+	will force the hard drive to spin up on Linux systems running in
+	laptop mode, so it may be undesirable in some situations.  Be warned
+	that turning this off increases the chances of data loss after a
+	crash.  On systems without an fsync() implementation, this variable is
+	always off.
+	This is a |global-local| option, so it can be set per buffer, for
+	example when writing to a slow filesystem.
 	Also see 'swapsync' for controlling fsync() on swap files.
 	'fsync' also applies to |writefile()| (unless a flag is used to
 	overrule it) and when writing undo files (see |undo-persistence|).
@@ -4607,8 +4649,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 		by a yank or delete operation for the "* register.
 		The same applies to the modeless selection.
 								*'go-P'*
-	  'P'	Like autoselect but using the "+ register instead of the "*
-		register.
+	  'P'	Like autoselect but only copy to the "+ register instead of
+		the "* register.
 								*'go-A'*
 	  'A'	Autoselect for the modeless selection.  Like 'a', but only
 		applies to the modeless selection.
@@ -4626,17 +4668,17 @@ A jump table for the options with a short description can be found at |Q_op|.
 		choices.
 								*'go-C'*
 	  'C'	Use |hl-TitleBar| and |hl-TitleBarNC| if available.
-		Currently only works for MS-Window GUI.
+		Currently only works for MS-Windows GUI.
 		See |gui-w32-title-bar| for details.
 								*'go-d'*
 	  'd'	Use dark theme variant if available.  Currently only works for
-		GTK+ GUI.
+		MS-Windows and GTK+ GUI.
 								*'go-e'*
 	  'e'	Add tab pages when indicated with 'showtabline'.
 		'guitablabel' can be used to change the text in the labels.
 		When 'e' is missing a non-GUI tab pages line may be used.
-		The GUI tabs are only supported on some systems, currently GTK,
-		Motif, Mac OS/X, Haiku, and MS-Windows.
+		The GUI tabs are only supported on some systems, currently
+		GTK, Motif, Mac OS/X, Haiku, and MS-Windows.
 								*'go-f'*
 	  'f'	Foreground: Don't use fork() to detach the GUI from the shell
 		where it was started.  Use this for programs that wait for the
@@ -4668,6 +4710,12 @@ A jump table for the options with a short description can be found at |Q_op|.
 								*'go-T'*
 	  'T'	Include Toolbar.  Currently only in Win32, GTK+, Motif,
 		Photon and MacVim GUIs.
+								*'go-s'*
+	  's'	Enable fullscreen mode.  Currently only supported in the
+		MS-Windows and GTK GUI version.  When set, the window will
+		occupy the entire screen and remove window decorations.
+		Define custom mappings to toggle this mode conveniently.
+		For detailed usage instructions, see |gui-fullscreen|.
 								*'go-r'*
 	  'r'	Right-hand scrollbar is always present.
 								*'go-R'*
@@ -4744,6 +4792,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	You can include a line break.  Simplest method is to use |:let|: >
 		:let &guitabtooltip = "line one\nline two"
 <
+	This option cannot be set in a modeline when 'modelineexpr' is off.
 
 						*'helpfile'* *'hf'*
 'helpfile' 'hf'		string	(default (MS-Windows) "$VIMRUNTIME\doc\help.txt"
@@ -4812,7 +4861,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 				     l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,
 				     a:LineNrAbove,b:LineNrBelow,
 				     N:CursorLineNr,r:Question,s:StatusLine,
-				     S:StatusLineNC,c:VertSplit,t:Title,
+				     S:StatusLineNC,c:VertSplit,
+				     |:VertSplitNC,t:Title,
 				     v:Visual,V:VisualNOS,w:WarningMsg,
 				     W:WildMenu,f:Folded,F:FoldColumn,
 				     A:DiffAdd,C:DiffChange,D:DiffDelete,
@@ -4823,7 +4873,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 				     [:PmenuKind,]:PmenuKindSel,
 				     {:PmenuExtra,}:PmenuExtraSel,
 				     x:PmenuSbar,X:PmenuThumb,j:PmenuBorder,
-				     H:PmenuShadow,*:TabLine,
+				     H:PmenuShadow,p:Popup,J:PopupBorder,
+				     Q:PopupTitle,*:TabLine,
 				     #:TabLineSel,_:TabLineFill,!:CursorColumn,
 				     .:CursorLine,o:ColorColumn,q:QuickFixLine,
 				     z:StatusLineTerm,Z:StatusLineTermNC,
@@ -4860,6 +4911,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	|hl-StatusLineNC|  S  status lines of not-current windows
 	|hl-Title|	 t  Titles for output from ":set all", ":autocmd" etc.
 	|hl-VertSplit|	 c  column used to separate vertically split windows
+	|hl-VertSplitNC| |  column separating non-current vertically split
+			    windows
 	|hl-Visual|	 v  Visual mode
 	|hl-VisualNOS|	 V  Visual mode when Vim is "Not Owning the
 			    Selection" Only X11 Gui's |gui-x11|,
@@ -4892,7 +4945,13 @@ A jump table for the options with a short description can be found at |Q_op|.
 	|hl-PmenuMatchSel| <  popup menu matched text in selected line
 	|hl-PmenuBorder|   j  popup menu border characters
 	|hl-PmenuShadow|   H  popup menu shadow
+	|hl-Popup|	 p  popup window body
+	|hl-PopupBorder|   J  popup window border characters
+	|hl-PopupTitle|	 Q  popup window title
 	|hl-PreInsert|	 I  text inserted when "preinsert" is in 'completeopt'
+	|hl-Normal|	 (  Window color (supersedes 'wincolor' option)
+
+	Note that the "(" occasion is not set by default.
 
 	The display modes are:
 		r	reverse		(termcap entry "mr" and "me")
@@ -5264,7 +5323,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	command line has no uppercase characters, the added character is
 	converted to lowercase.
 	CTRL-R CTRL-W can be used to add the word at the end of the current
-	match, excluding the characters that were already typed.
+	match, excluding the characters that were already typed (starting from
+	the beginning of the word).
 	NOTE: This option is reset when 'compatible' is set.
 
 						*'indentexpr'* *'inde'*
@@ -5335,23 +5395,6 @@ A jump table for the options with a short description can be found at |Q_op|.
 	and there is a letter before it, the completed part is made uppercase.
 	With 'noinfercase' the match is used as-is.
 
-						*'isexpand'* *'ise'*
-'isexpand' 'ise'	string	(default: "")
-			local to buffer
-	Defines characters and patterns for completion in insert mode.  Used
-	by the |complete_match()| function to determine the starting position
-	for completion.  This is a comma-separated list of triggers.  Each
-	trigger can be:
-	- A single character like "." or "/"
-	- A sequence of characters like "->", "/*", or "/**"
-
-	Note: Use "\\," to add a literal comma as trigger character, see
-	|option-backslash|.
-
-	Examples: >
-		set isexpand=.,->,/*,\\,
-<
-
 			*'insertmode'* *'im'* *'noinsertmode'* *'noim'*
 'insertmode' 'im'	boolean	(default off)
 			global
@@ -5457,7 +5500,13 @@ A jump table for the options with a short description can be found at |Q_op|.
 	"w", "*", "[i", etc.  It is also used for "\k" in a |pattern|.  See
 	'isfname' for a description of the format of this option.  For '@'
 	characters above 255 check the "word" character class (any character
-	that is not white space or punctuation).
+	that is categorized as a letter, number or emoji according to the
+	Unicode general category).
+
+	Note that there is a difference between the "\k" character class and
+	the |word| motion.  The former matches any word character, while the
+	latter stops at a change of the character class.
+
 	For C programs you could use "a-z,A-Z,48-57,_,.,-,>".
 	For a help file it is set to all non-blank printable characters except
 	'*', '"' and '|' (so that CTRL-] on a command finds the help for that
@@ -5902,6 +5951,15 @@ A jump table for the options with a short description can be found at |Q_op|.
 				---+---+--XXX ~
 			Where "XXX" denotes the first non-blank characters in
 			the line.
+							*lcs-leadtab*
+	  leadtab:xy[z]
+			Like |lcs-tab|, but only for leading tabs.  When
+			omitted, the "tab" setting is used for leading tabs.
+			|lcs-tab| must also be set for this to work. *E1572*
+			You can combine it with "tab:", for example: >
+				:set listchars=tab:>-,leadtab:.\ 
+<			This shows leading tabs as periods(.) and other tabs
+			as ">--".
 							*lcs-trail*
 	  trail:c	Character to show for trailing spaces.  When omitted,
 			trailing spaces are blank.  Overrides the "space" and
@@ -6038,8 +6096,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 					*'makeencoding'* *'menc'*
 'makeencoding' 'menc'	string	(default "")
 			global or local to buffer |global-local|
-	Encoding used for reading the output of external commands.  When empty,
-	encoding is not converted.
+	Encoding used for reading the output of external commands.  When
+	empty, encoding is not converted.
 	This is used for `:make`, `:lmake`, `:grep`, `:lgrep`, `:grepadd`,
 	`:lgrepadd`, `:cfile`, `:cgetfile`, `:caddfile`, `:lfile`, `:lgetfile`,
 	and `:laddfile`.
@@ -6120,7 +6178,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	Increasing this limit above 200 also changes the maximum for Ex
 	command recursion, see |E169|.
 	See also |:function|.
-	Also used for maximum depth of callback functions.
+	Also used for maximum depth of callback functions and encoding and
+	decoding of deeply nested json data.
 
 						*'maxmapdepth'* *'mmd'* *E223*
 'maxmapdepth' 'mmd'	number	(default 1000)
@@ -6183,7 +6242,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	When the number of matches exceeds this value, Vim shows ">" instead
 	of the exact count to keep searching fast.
 	Note: larger values may impact performance.
-	The value must be between 1 and 9999.
+	The value must be between 1 and 9999.  See also the |searchcount()|
+	function.
 
 						*'menuitems'* *'mis'*
 'menuitems' 'mis'	number	(default 25)
@@ -6254,7 +6314,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 		:set mkspellmem=900000,3000,800
 <	If you have less than 512 Mbyte |:mkspell| may fail for some
 	languages, no matter what you set 'mkspellmem' to.
-
+	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -6284,6 +6344,54 @@ A jump table for the options with a short description can be found at |Q_op|.
 	NOTE: 'modeline' is set to the Vi default value when 'compatible' is
 	set and to the Vim default value when 'compatible' is reset.
 
+		    *'modelinestrict'* *'mlst'* *'nomodelinestrict'* *'nomlst'*
+'modelinestrict' 'mlst'	boolean (default: on)
+			global
+	When on, only a safe subset of options can be set from a |modeline|.
+	The following options are allowed:
+		'autoindent'
+		'cindent'
+		'commentstring'
+		'expandtab'
+		'filetype'
+		'foldcolumn'
+		'foldenable'
+		'foldmarker'
+		'foldmethod'
+		'modifiable'
+		'readonly'
+		'rightleft'
+		'shiftwidth'
+		'smartindent'
+		'softtabstop'
+		'spell'
+		'spelllang'
+		'tabstop'
+		'textwidth'
+		'varsofttabstop'
+		'vartabstop'
+
+	Any other option set from a modeline will be silently ignored.
+	This option cannot be set from a |modeline| or in the |sandbox|, for
+	security reasons.
+
+	As an exception, `set nomodeline` is honored from within a modeline
+	even when 'modelinestrict' is on.  Other forms (`set modeline=0`,
+	`set modeline!`, `set invmodeline`) are still silently ignored.
+	This lets a file disable further modeline processing for itself.
+
+	The behaviour of 'modeline', 'modelinestrict' and 'modelineexpr' is
+	as follows:
+
+	'modeline'| 'modelinestrict'| 'modelineexpr' | Meaning
+	----------+-----------------+-------------------+--------~
+	   on     |    off          |   on           | All options can be set
+	   on     |    on           |   any          | Only whitelisted
+		  |                 |                | options can be set
+	   on     |    off          |   off          | All options except for
+		  |                 |                | expr options can be set
+	   off    |    any          |   any          | No options can be set
+
 				*'modifiable'* *'ma'* *'nomodifiable'* *'noma'*
 				*E21*
 'modifiable' 'ma'	boolean	(default on)
@@ -6346,8 +6454,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 <	If your terminal can't overrule the mouse events going to the
 	application, use: >
 		:set mouse=nvi
-<	Then you can press ":", select text for the system, and press Esc to go
-	back to Vim using the mouse events.
+<	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".
 
@@ -6397,7 +6505,10 @@ A jump table for the options with a short description can be found at |Q_op|.
 			be acted upon, i.e. no cursor move.  This implies of
 			course, that right clicking outside a selection will
 			end Visual mode.
-	Overview of what button does what for each model:
+
+	For a detailed description of 'mousemodel' behaviour see
+	|mouse-mode-table|.  Overview of what button does what for each model:
+
 	mouse		    extend		popup(_setpos) ~
 	left click	    place cursor	place cursor
 	left drag	    start selection	start selection
@@ -6677,6 +6788,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 				*'packpath'* *'pp'*
 'packpath' 'pp'		string	(default: see 'runtimepath')
 	Directories used to find packages.  See |packages|.
+	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -6938,6 +7050,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	The format of the header produced in |:hardcopy| output.
 	See |pheader-option|.
 
+	This option cannot be set in a modeline when 'modelineexpr' is off.
+
 						*'printmbcharset'* *'pmbcs'*
 'printmbcharset' 'pmbcs'  string (default "")
 			global
@@ -6971,6 +7085,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 			global
 	Defines a border and optional decorations for the popup menu in
 	completion.  The value is a comma-separated list of keywords.
+	See 'pumopt' for a consolidated alternative.
 
 	Border styles (at most one):
 	"single"	use thin box-drawing characters
@@ -7006,6 +7121,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	Determines the maximum number of items to show in the popup menu for
 	Insert mode completion.  When zero as much space as available is used.
 	|ins-completion-menu|.
+	See 'pumopt' for a consolidated alternative.
 
 						*'pummaxwidth'* *'pmw'*
 'pummaxwidth' 'pmw'	number	(default 0)
@@ -7017,12 +7133,68 @@ A jump table for the options with a short description can be found at |Q_op|.
 
 	This option takes precedence over 'pumwidth'.
 	|ins-completion-menu|.
+	See 'pumopt' for a consolidated alternative.
+
+						*'pumopt'*
+'pumopt'		string	(default "")
+			global
+	Configures the popup menu used for Insert mode completion.
+	The value is a comma-separated list of "key:value" pairs and flags.
+
+	Keys with values:
+	  border:{style}	set a border style (at most one):
+				"single"  thin box-drawing characters
+				"double"  double-line box-drawing characters
+				"round"   rounded corners
+				"ascii"   ASCII characters (-, |, +)
+				"custom:X;X;X;X;X;X;X;X"
+					  eight characters separated by
+					  semicolons, in the order: top, right,
+					  bottom, left, topleft, topright,
+					  botright, botleft
+	  height:{n}		maximum number of items to show (default 0,
+				meaning as much space as available)
+	  width:{n}		minimum width (default 15)
+	  maxwidth:{n}		maximum width (default 0, meaning no limit).
+				This takes precedence over width.
+				Truncated text is indicated by "trunc" value
+				of 'fillchars' option.
+	  opacity:{n}		opacity percentage 0-100 (default 100).
+				When less than 100, background content shows
+				through the popup menu.  Requires the GUI,
+				'termguicolors', or a 256-color terminal.
+
+	Flags (no value):
+	  margin		adds one-cell spacing inside the left and
+				right border.  Requires a border style.
+	  shadow		draws a shadow at the right and bottom edges.
+
+	Border styles using box-drawing characters ("single", "double",
+	"round") are only available when 'encoding' is "utf-8" and 'ambiwidth'
+	is "single".
+
+	Highlight groups:
+	|hl-PmenuBorder|	used for the border characters
+	|hl-PmenuShadow|	used for the shadow
+
+	Note: When 'pumopt' is set, all values are reset to their defaults
+	first, then the specified keys are applied.  Unspecified keys get
+	their default values.
+
+	Examples: >
+		:set pumopt=border:single
+		:set pumopt=border:double,margin,shadow
+		:set pumopt=height:10,width:20,opacity:80
+		:set pumopt=border:custom:─;│;─;│;┌;â”;┘;â””,shadow
+<
+	See also: |ins-completion-menu|.
 
 						*'pumwidth'* *'pw'*
 'pumwidth' 'pw'		number	(default 15)
 			global
 	Determines the minimum width to use for the popup menu for Insert mode
 	completion.  |ins-completion-menu|.
+	See 'pumopt' for a consolidated alternative.
 
 						*'pythondll'*
 'pythondll'		string	(default depends on the build)
@@ -7113,6 +7285,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 	|lambda| or a |Funcref|.  See |option-value-function| for more
 	information.
 
+	It is not allowed to change text or jump to another window while
+	evaluating 'qftf' |textlock|.
+
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -7467,7 +7642,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	For $XDG_CONFIG_HOME see |xdg-base-dir|.
 
 	The defaults for most systems are setup to search five locations:
-	1. In your home directory, for your personal preferences.
+	1. In your $MYVIMDIR directory, for your personal preferences.
 	2. In a system-wide Vim directory, for preferences from the system
 	   administrator.
 	3. In $VIMRUNTIME, for files distributed with Vim.
@@ -7475,7 +7650,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	4. In the "after" directory in the system-wide Vim directory.  This is
 	   for the system administrator to overrule or add to the distributed
 	   defaults (rarely needed)
-	5. In the "after" directory in your home directory.  This is for
+	5. In the "after" directory in your $MYVIMDIR directory.  This is for
 	   personal preferences to overrule or add to the distributed defaults
 	   or system-wide settings (rarely needed).
 
@@ -7501,6 +7676,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	runtime files.
 	When Vim is started with |--clean| the home directory entries are not
 	included.
+	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -7532,6 +7708,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 'scrollfocus' 'scf'	boolean  (default off)
 			global
 			{only for MS-Windows GUI}
+	NOTE: This option is currently not functional.  It may be fixed or
+	removed in a future version.
 	When using the scroll wheel and this option is set, the window under
 	the mouse pointer is scrolled.  With this option off the current
 	window is scrolled.
@@ -7554,8 +7732,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	Minimal number of screen lines to keep above and below the cursor.
 	This will make some context visible around where you are working.  If
 	you set it to a very large value (999) the cursor line will always be
-	in the middle of the window (except at the start or end of the file or
-	when long lines wrap).
+	in the middle of the window (except at the start or end of the file,
+	see 'scrolloffpad', or when long lines wrap).
 	After using the local value, go back the global value with one of
 	these two: >
 		setlocal scrolloff<
@@ -7563,7 +7741,24 @@ A jump table for the options with a short description can be found at |Q_op|.
 <	For scrolling horizontally see 'sidescrolloff'.
 	NOTE: This option is set to 0 when 'compatible' is set.
 
-						*'scrollopt'* *'sbo'*
+						*'scrolloffpad'* *'sop'*
+'scrolloffpad' 'sop'	number	(default 0)
+			global or local to window |global-local|
+	When 'scrolloff' and 'scrolloffpad' are greater than zero, allow
+	the cursor to remain centered when at the end of the file.
+	Normally, 'scrolloff' will not keep the cursor centered at the
+	end of the file.
+
+	A value of 0 disables this feature.  Any value above 0 enables it.
+	For a window-local value, -1 means to use the global value.
+	Values below -1 are invalid.
+
+	After using the local value, go back the global value with one of
+	these two: >
+		setlocal scrolloffpad<
+		setlocal scrolloffpad=-1
+
+<						*'scrollopt'* *'sbo'*
 'scrollopt' 'sbo'	string	(default "ver,jump")
 			global
 	This is a comma-separated list of words that specifies how
@@ -7800,6 +7995,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	Note: When using a pipe like "| tee", you'll lose the exit code of the
 	shell command.  This might be configurable by your shell, look for
 	the pipefail option (for bash and zsh, use ":set -o pipefail").
+	Only a single "%s" value is allowed.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -7843,6 +8039,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 	become obsolete (at least for Unix).
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
+								*E1577*
+	Only a single "%s" item is allowed in the option value.
+
 
 			*'shellslash'* *'ssl'* *'noshellslash'* *'nossl'*
 'shellslash' 'ssl'	boolean	(default off)
@@ -8002,7 +8201,11 @@ A jump table for the options with a short description can be found at |Q_op|.
 		"search hit TOP, continuing at BOTTOM" messages are only
 		indicated by a "W" (Mnemonic: Wrapped) letter before the
 		search count statistics.  The maximum limit can be set with
-		the 'maxsearchcount' option.
+		the 'maxsearchcount' option, see also |searchcount()|
+		function.
+	  u	don't give undo and redo messages like			*shm-u*
+		"1 line less; before #1  1 second ago", "Already at oldest
+		change" or "Already at newest change"
 
 	This gives you the opportunity to avoid that a change between buffers
 	requires you to hit , but still gives as useful a message as
@@ -8279,7 +8482,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	when it is turned off.  It is also reset when 'compatible' is set.
 
 	The 'L' flag in 'cpoptions' alters tab behavior when 'list' is
-	enabled.  See also |ins-expandtab| ans user manual section |30.5| for
+	enabled.  See also |ins-expandtab| and user manual section |30.5| for
 	in-depth explanations.
 
 	If Vim is compiled with the |+vartabs| feature then the value of
@@ -8333,6 +8536,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	name if you want to.  However, it will then only be used when
 	'spellfile' is set to it, for entries in 'spelllang' only files
 	without region name will be found.
+	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -8460,7 +8664,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	Only one of "best", "double" or "fast" may be used.  The others may
 	appear several times in any order.  Example: >
 		:set sps=file:~/.vim/sugg,best,expr:MySuggest()
-<
+<	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -8602,7 +8806,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	{ NF  Evaluate expression between '%{' and '}' and substitute result.
 	      Note that there is no '%' before the closing '}'.  The
 	      expression cannot contain a '}' character, call a function to
-	      work around that.  See |stl-%{| below.
+	      work around that.  See |stl-%{| below.  Use '%0{' to insert the
+	      result verbatim.
 	{% -  This is almost same as { except the result of the expression is
 	      re-evaluated as a statusline format string.  Thus if the
 	      return value of expr contains % items they will get expanded.
@@ -8635,11 +8840,67 @@ A jump table for the options with a short description can be found at |Q_op|.
 	      highlighting is used, also for the statusline of non-current
 	      windows.
 	* -   Set highlight group to User{N}, where {N} is taken from the
-	      minwid field, e.g. %1*.  Restore normal highlight with %* or %0*.
-	      The difference between User{N} and StatusLine will be applied to
-	      StatusLineNC for the statusline of non-current windows.
+	      minwid field, e.g. %1*.  Restore normal highlight with %* or
+	      %0*.  The difference between User{N} and StatusLine will be
+	      applied to StatusLineNC for the statusline of non-current
+	      windows.
 	      The number N must be between 1 and 9.  See |hl-User1..9|
+							*stl-%@*
+	@ -   Inserts a newline.  This only takes effect when the "maxheight"
+	      value of 'statuslineopt' is greater than 1, or for |tabpanel|.
+
+							*stl-%[FuncName]*
+	%[ defines clickable regions in the statusline.  When the user clicks
+	on a region with the mouse, the specified function is called.  The
+	same syntax can also be used in 'tabline' and 'tabpanel'.
+
+	  %[FuncName]	Start of a clickable region.  "FuncName" is the name
+			of a Vim function to call when the region is clicked.
+	  %[]		End of the clickable region.  If omitted, the region
+			extends to the end of the statusline or to the start
+			of the next clickable region.
+
+	A {minwid} value can be used to pass an identifier to the callback:
+	  %3[FuncName]	Starts a clickable region with minwid 3.
+
+	The function receives a single |Dictionary| argument with these
+	entries:
+	  "minwid"	The minwid value from %N[Func] (0 if not specified).
+	  "nclicks"	Number of clicks: 1, 2, or 3.
+	  "button"	Mouse button: "l" (left), "m" (middle), "r" (right).
+	  "mods"	Modifier keys: combination of "s" (shift), "c" (ctrl),
+			"a" (alt).  Empty string if no modifiers.
+	  "winid"	|window-ID| of the window whose statusline was clicked,
+			or 0 when the click was in 'tabline' or 'tabpanel'.
+	  "area"	"statusline", "tabline", or "tabpanel".  Indicates
+			which option the clicked region belongs to.
+	  "tabnr"	(tabpanel only) Tab page number of the clicked label.
+
+	If the function returns non-zero, the statusline is redrawn.
+	Dragging the statusline to resize the window still works even when
+	click handlers are defined.  When used in 'tabline' or 'tabpanel',
+	clicks in %[FuncName] regions are dispatched to the callback
+	instead of the default tab-selection behavior.
 
+	Example: >
+	    func! ClickFile(info)
+		if a:info.button ==# 'l' && a:info.nclicks == 2
+		    browse edit
+		endif
+		return 0
+	    endfunc
+	    set statusline=%[ClickFile]%f%[]\ %l:%c
+<	This makes the filename in the statusline clickable.  Double-clicking
+	it opens the file browser.
+
+	Use `has('statusline_click')` to check if this feature is available.
+	This is useful for backward compatibility: >
+	    if has('statusline_click')
+		set statusline=%[ClickFile]%f%[]\ %l:%c
+	    else
+		set statusline=%f\ %l:%c
+	    endif
+<
 	When displaying a flag, Vim removes the leading comma, if any, when
 	that flag comes right after plaintext.  This will make a nice display
 	when flags are used like in the examples below.
@@ -8673,6 +8934,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	A result of all digits is regarded a number for display purposes.
 	Otherwise the result is taken as flag text and applied to the rules
 	described above.
+								*stl-%0{*
+	With %0{ neither applies: the result is inserted as a literal string.
 
 	Watch out for errors in expressions.  They may render Vim unusable!
 	If you are stuck, hold down ':' or 'Q' to get a prompt, then quit and
@@ -8696,6 +8959,51 @@ A jump table for the options with a short description can be found at |Q_op|.
 	  :function VarExists(var, val)
 	  :    if exists(a:var) | return a:val | else | return '' | endif
 	  :endfunction
+<
+						*'statuslineopt'* *'stlo'*
+'statuslineopt' 'stlo'	string	(default "")
+			global or local to window |global-local|
+			{not available when compiled without the |+statusline|
+			feature}
+	Optional settings for |status-line|.  It can consist of the following
+	items.  All are optional.  Items must be separated by a comma.
+
+	    fixedheight     Fix the status line height to "maxheight".
+			    Without this, the height varies from 1 to
+			    "maxheight" based on the number of newline
+			    |stl-%@| in 'statusline'.
+
+	    maxheight:{n}   Set the maximum status line height to {n}.
+			    {n} must be 1 or greater.  If not specified, the
+			    height is 1.
+			    When {n} is 2 or more, you can use newline
+			    |stl-%@| in 'statusline' to display information on
+			    multiple lines.
+
+			    If {n} cannot be set due to insufficient window
+			    height or other constraints, a best-effort
+			    approach will be taken to set the closest possible
+			    value that does not exceed {n}.  No error will be
+			    shown even if the setting cannot be changed.
+
+			    For the global value, a value applicable to all
+			    windows on all tab pages is used.  For a
+			    window-local value, a value applicable to that
+			    window is used.
+			    Note: When the applied value differs from {n}, the
+			    option is updated to reflect it.
+			    Example of updated options: >vim
+				:set statuslineopt=maxheight:999,fixedheight
+				" Only 20 lines could be applied, so
+				" maxheight is updated to 20.
+				:set statuslineopt?
+				  statuslineopt=maxheight:20,fixedheight
+<
+	Examples: >
+		:set statuslineopt=fixedheight
+		:set stlo=
+		:set stlo=maxheight:2,fixedheight
+		:set stlo-=fixedheight
 <
 						*'suffixes'* *'su'*
 'suffixes' 'su'		string	(default ".bak,~,.o,.h,.info,.swp,.obj")
@@ -8882,11 +9190,11 @@ A jump table for the options with a short description can be found at |Q_op|.
 
 	You can use |g:actual_curtabpage| within a function assigned to
 	tabpanel.  |g:actual_curtabpage| represents current tab's label number.
-	The option value can contain line breaks: >
+	You can use "%@" or "\n" to insert a newline: >
 
 		set tabpanel=%!TabPanel()
 		function! TabPanel() abort
-		  return printf("(%2d)\n  %%f", g:actual_curtabpage)
+		  return "(" .. g:actual_curtabpage .. ")%@  %f"
 		endfunction
 <
 	The result is:
@@ -8900,30 +9208,31 @@ A jump table for the options with a short description can be found at |Q_op|.
 	|           |
 	|           |
 <
+	Note: using "\n" is considered experimental and deprecated, prefer
+	the |stl-%@| atom instead.
+
 					*'tabpanelopt'* *'tplo'*
 'tabpanelopt' 'tplo'	string	(default "")
 			global
 	Optional settings for the |tabpanel|,  It can consist of the following
 	items.  Items must be separated by a comma.
 
-		align:{text}	Specifies the position of the tabpanel.
-				Currently supported positions are:
-
-				left	left-side
+	    align:{text}    Specifies the position of the tabpanel.
+			    Currently supported positions are:
+				left	left-side  (default)
 				right	right-side
-
-				(default "left")
-
-		columns:{n}	Number of columns of the tabpanel.
-				If this value is 0 or less than 'columns', the
-				tab panel will not be displayed.
-				(default 20)
-
-		vert		Use a vertical separator for tabpanel.
-				The vertical separator character is taken from
-				"tpl_vert" in 'fillchars'.
-				(default off)
-
+	    columns:{n}	    Number of columns of the tabpanel.  (default 20)
+			    If this value is 0 or less than 'columns', the
+			    tabpanel will not be displayed.
+	    scrollbar	    A one-column scrollbar is always displayed at the
+			    right edge of the tabpanel, regardless of the
+			    "align:" setting.  (default off)
+			    See |tabpanel-scroll|.
+	    vert	    The vertical separator is drawn at the boundary
+			    between the tabpanel and the buffer area.
+			    (default off)
+			    The character to be drawn uses "tpl_vert" from
+			    'fillchars'.
 	Examples: >
 		:set tabpanelopt=columns:16,align:right
 		:set tabpanelopt=
@@ -9061,6 +9370,22 @@ A jump table for the options with a short description can be found at |Q_op|.
 	file names from the list.  This avoids problems when a future version
 	uses another default.
 
+			*'tagsecure'* *'tsc'* *'notagsecure'* *'notsc'*
+'tagsecure' 'tsc'	boolean	(default on)
+			global
+	When on, Vim refuses to follow tag entries whose file field looks like
+	a URL ("scheme://..."), aborting the jump with error |E1576|.  This
+	prevents tag files from causing Vim to open URLs through |netrw|, which
+	would trigger a network request and expose netrw's URL-handling code to
+	attacker-controlled input or lead to environment exfiltration.
+
+	Tag files might be distributed alongside source code (e.g. via Git
+	repositories) and may therefore be untrustworthy.  Only disable
+	this option if you fully control the tag files Vim will read.
+
+	This option cannot be set from a |modeline| or in the |sandbox|, for
+	security reasons.
+
 				*'tagstack'* *'tgst'* *'notagstack'* *'notgst'*
 'tagstack' 'tgst'	boolean	(default on)
 			global
@@ -9171,6 +9496,39 @@ A jump table for the options with a short description can be found at |Q_op|.
 <
 	NOTE: This option is reset when 'compatible' is set.
 
+						*'termresize'* *'trz'*
+'termresize' 'trz'	string	(default "")
+			global
+			{only available in Unix, does not work in the GUI}
+	Determines the method to use for detecting window resize events,
+	possible values are:
+	    "sigwinch":	    Use the SIGWINCH signal.
+	    "inband":	    Receive resize events from the terminal via escape
+			    sequences (recommended if supported by terminal).
+	    "":		    Automatically choose depending on terminal.
+
+	The SIGWINCH handler is always available.  If set to "inband" and the
+	terminal does not support in-band window resize events, then the
+	SIGWINCH handler will be used instead as a fallback.  If set to ""
+	(empty option), then "inband" will be used if Vim detects that the
+	terminal supports it, otherwise "sigwinch".
+
+
+						*'termsync'* *'tsy'*
+'termsync' 'tsy'	boolean (default off)
+			global
+	If the host terminal supports it, buffer all screen updates made
+	during a redraw cycle so that each screen is displayed in the terminal
+	all at once.  This can prevent tearing or flickering when the terminal
+	updates faster than Vim can redraw.  If the host terminal does not
+	support it or if Vim is running graphically, then this option does
+	nothing.
+
+	The specification can be found at:
+	https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md
+
+	The terminal codes used are |t_BS| and |t_ES|.
+
 						*'termwinkey'* *'twk'*
 'termwinkey' 'twk'	string	(default "")
 			local to window
@@ -9239,8 +9597,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 
 	|ConPTY| support depends on the platform.  Windows 10 October 2018
 	Update is the first version that supports ConPTY, however it is still
-	considered unstable.  ConPTY might become stable in the next release
-	of Windows 10.  winpty support needs to be installed.  If neither is
+	considered unstable.  ConPTY has become stable with the initial release
+	of Windows 11.  winpty support needs to be installed.  If neither is
 	supported then you cannot open a terminal window.
 
 						*'terse'* *'noterse'*
@@ -9298,8 +9656,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 	name.  See |option-backslash| about using backslashes.  The use of
 	|:set+=| and |:set-=| is preferred when adding or removing directories
 	from the list.  This avoids problems when a future version uses
-	another default.  Backticks cannot be used in this option for security
-	reasons.
+	another default.
+	Environment variables are expanded |:set_env|.
+	Backticks cannot be used in this option for security reasons.
 
 						*'thesaurusfunc'* *'tsrfu'*
 'thesaurusfunc' 'tsrfu'	string	(default: empty)
@@ -9476,7 +9835,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 		icons		Toolbar buttons are shown with icons.
 		text		Toolbar buttons shown with text.
 		horiz		Icon and text of a toolbar button are
-				horizontally arranged.  {only in GTK+ 2 GUI}
+				horizontally arranged.
+				{only in GTK+ 2 and GTK 4 GUI}
 		tooltips	Tooltips are active for toolbar buttons.
 	Tooltips refer to the popup help text which appears after the mouse
 	cursor is placed over a toolbar button for a brief moment.
@@ -9639,6 +9999,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 'ttytype' 'tty'		string	(default from $TERM)
 			global
 	Alias for 'term', see above.
+	Environment variables are expanded |:set_env|.
 
 						*'undodir'* *'udir'*
 'undodir' 'udir'	string	(default ".")
@@ -9656,6 +10017,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	undo file that exists is used.  When it cannot be read an error is
 	given, no further entry is used.
 	See |undo-persistence|.
+	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -9678,9 +10040,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 			global or local to buffer |global-local|
 	Maximum number of changes that can be undone.  Since undo information
 	is kept in memory, higher numbers will cause more memory to be used.
-	Nevertheless, a single change can already use a large amount of memory.
-	Set to 0 for Vi compatibility: One level of undo and "u" undoes
-	itself: >
+	Nevertheless, a single change can already use a large amount of
+	memory.  Set to 0 for Vi compatibility: One level of undo and "u"
+	undoes itself: >
 		set ul=0
 <	But you can also get Vi compatibility by including the 'u' flag in
 	'cpoptions', and still be able to use CTRL-R to repeat undo.
@@ -9807,6 +10169,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	Setting 'verbosefile' to a new value is like making it empty first.
 	The difference with |:redir| is that verbose messages are not
 	displayed when 'verbosefile' is set.
+	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -9821,6 +10184,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 			feature}
 	Name of the directory where to store files for |:mkview|.
 	For $XDG_CONFIG_HOME see |xdg-base-dir|.
+	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -9872,6 +10236,14 @@ A jump table for the options with a short description can be found at |Q_op|.
 		letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
 		and "_K_L_M" are not.  Nested List and Dict items may not be
 		read back correctly, you end up with an empty item.
+
+		Restoring |List|, |Dictionary| and |Tuple| variables is done by
+		parsing their textual form with the Vim expression evaluator.
+		Reading a viminfo file with "!" enabled is therefore only safe
+		when the file is trusted.  In particular, do not enable "!"
+		before reading a viminfo file you obtained from another user,
+		downloaded, or that is writable by another account.  See
+		also |viminfo-security|.
 							*viminfo-quote*
 	"	Maximum number of lines saved for each register.  Old name of
 		the '<' item, with the disadvantage that you need to put a
@@ -9976,6 +10348,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 	When equal to "NONE" no viminfo file will be read or written.
 	This option can be set with the |-i| command line flag.  The |--clean|
 	command line flag sets it to "NONE".
+	Environment variables are expanded |:set_env|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -10013,9 +10386,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 			*'visualbell'* *'vb'* *'novisualbell'* *'novb'* *beep*
 'visualbell' 'vb'	boolean	(default off)
 			global
-	Use a visual bell instead of beeping.  The terminal code to display the
-	visual bell is given with 't_vb'.  When no beep or flash is wanted,
-	use: >
+	Use a visual bell instead of beeping.  The terminal code to display
+	the visual bell is given with 't_vb'.  When no beep or flash is
+	wanted, use: >
 		:set vb t_vb=
 <	If you want a short flash, you can use this on many terminals: >
 		:set vb t_vb=[?5h$<100>[?5l
@@ -10023,8 +10396,9 @@ A jump table for the options with a short description can be found at |Q_op|.
 	to get a shorter or longer flash.
 
 	Note: Vim will limit the bell to once per half a second.  This avoids
-	having to wait for the flashing to finish when there are lots of bells,
-	e.g. on key repeat.  This also happens without 'visualbell' set.
+	having to wait for the flashing to finish when there are lots of
+	bells, e.g. on key repeat.  This also happens without 'visualbell'
+	set.
 
 	In the GUI, 't_vb' defaults to "|f", which inverts the display
 	for 20 msec.  If you want to use a different time, use "|40f",
@@ -10111,10 +10485,11 @@ A jump table for the options with a short description can be found at |Q_op|.
 'wildcharm' 'wcm'	number	(default: none (0))
 			global
 	'wildcharm' works exactly like 'wildchar', except that it is
-	recognized when used inside a macro.  You can find "spare" command-line
-	keys suitable for this option by looking at |ex-edit-index|.  Normally
-	you'll never actually type 'wildcharm', just use it in mappings that
-	automatically invoke completion mode, e.g.: >
+	recognized when used inside a macro.  You can find "spare"
+	command-line keys suitable for this option by looking at
+	|ex-edit-index|.  Normally you'll never actually type 'wildcharm',
+	just use it in mappings that automatically invoke completion mode,
+	e.g.: >
 		:set wcm=
 		:cnoremap ss so $vim/sessions/*.vim
 <	Then after typing :ss you can use CTRL-P & CTRL-N.
@@ -10226,8 +10601,12 @@ A jump table for the options with a short description can be found at |Q_op|.
 			applies to buffer name completion.
 	"noselect"	If 'wildmenu' is enabled, show the menu but do not
 			preselect the first item.
-	If only one match exists, it is completed fully, unless "noselect" is
-	specified.
+	"noinsert"	If 'wildmenu' is enabled, show the menu and preselect
+			the first match, but do not insert it in the command
+			line.  If both "noinsert" and "noselect" are present,
+			"noselect" takes precedence.
+	If only one match exists, it is completed fully, unless "noselect" or
+	"noinsert" is specified.
 
 	Some useful combinations of colon-separated values:
 	"longest:full"		Start with the longest common string and show
@@ -10294,7 +10673,11 @@ A jump table for the options with a short description can be found at |Q_op|.
 			is not supported for file and directory names and
 			instead wildcard expansion is used.
 	  pum		Display the completion matches using the popup menu in
-			the same style as the |ins-completion-menu|.
+			the same style as the |ins-completion-menu|.  When an
+			info popup is shown next to the menu, it can be
+			scrolled by moving the mouse pointer on top of it and
+			using the scroll wheel, or with the keyboard like in
+			Insert mode completion, see |popupmenu-keys|.
 	  tagfile	When using CTRL-D to list matching tags, the kind of
 			tag and the file of the tag is listed.	Only one match
 			is displayed per line.  Often used tag kinds are:
@@ -10328,8 +10711,19 @@ A jump table for the options with a short description can be found at |Q_op|.
 						*'wincolor'* *'wcr'*
 'wincolor' 'wcr' string (default empty)
 			local to window
+	DEPRECATED: Use 'winhighlight' if possible, this option uses
+	'winhighlight' internally by setting it to: >vim
+	    set winhighlight=!(:HighlightGroup
+<	If this option is set and 'winhighlight' is changed, then it will not
+	update the option value.  For example, if 'wincolor' is set to "A" and
+	then 'winhighlight' is to an empty value, then 'wincolor' will still
+	remain as "A".  Additionally, the existing value in 'winhighlight' will
+	be discarded when this option is set.
+
 	Highlight group name to use for this window instead of the Normal
-	color |hl-Normal|.
+	color |hl-Normal|.  For other |highlight-groups|, see 'winhighlight'.
+	Note that it is not recommended to set this and 'winhighlight' at the
+	same time.
 
 						*'window'* *'wi'*
 'window' 'wi'		number  (default screen height - 1)
@@ -10388,6 +10782,35 @@ A jump table for the options with a short description can be found at |Q_op|.
 	'winheight' applies to the current window.  Use 'winminheight' to set
 	the minimal height for other windows.
 
+						*'winhighlight'* *'whl'*
+'winhighlight' 'whl'	string (default empty)
+			local to window
+	Window-local highlight group mappings.  Comma-delimited list of
+	highlight |group-name| pairs "{hl-from}:{hl-to},..." where each
+	{hl-from} is a |highlight-groups| item to be overridden by {hl-to}
+	group in the window.  If {hl-from} is "Normal", then it will always
+	map to the "(" (window color) value in 'highlight'.
+
+	If a highlight group name starts with "!", then it is assumed to map
+	to a value in 'highlight'.  For example, this will override the
+	visual mode setting: >vim
+	    set winhighlight=!v:SomeHighlightGroup
+<	This will map the occasion "v" to occasion "l" >vim
+	    set winhighlight=!v:!l
+<
+	Highlights of vertical separators are determined by the window to the
+	left of the separator.  The 'tabline' highlight of a tabpage is
+	decided by the last-focused window of the tabpage.  Highlights of
+	the popupmenu are determined by the current window.  Highlights in the
+	message area cannot be overridden.
+
+	When handling highlight group links, if a highlight group (which may
+	be a link as well) is overridden by 'winhighlight', then all highlight
+	groups that link to it will be affected.  For example, if highlight
+	group C links to B which links to A, then >vim
+	    set winhighlight=B:SomeHighlightGroup
+<	will make SomeHighlightGroup override groups B and C, but not A.
+
 						*'winminheight'* *'wmh'*
 'winminheight' 'wmh'	number	(default 1)
 			global
@@ -10455,11 +10878,10 @@ A jump table for the options with a short description can be found at |Q_op|.
 				*'wlsteal'* *'wst'* *'nowlsteal'* *'nowst'*
 'wlsteal' 'wst'		boolean  (default off)
 			global
-			{only when the |+wayland_focus_steal| feature is
-			included}
+	DEPRECATED: This option is no longer used; changing it has no effect.
+
 	When enabled, then allow Vim to steal focus by creating a temporary
-	surface, in order to access the clipboard.  For more information see
-	|wayland-focus-steal|.
+	surface, in order to access the clipboard.
 
 						*'wltimeoutlen'* *'wtm'*
 'wltimeoutlen' 'wtm'	number	(default 500)
@@ -10472,9 +10894,6 @@ A jump table for the options with a short description can be found at |Q_op|.
 	some cases.  On the other hand, it may also mean you receive errors
 	when the compositor takes more time to respond than usual.
 
-	Additionally, this option is also used as the maximum timeout when
-	waiting for a surface to gain focus, see |wayland-focus-steal|.
-
 						*'wrap'* *'nowrap'*
 'wrap'			boolean	(default on)
 			local to window
diff --git a/runtime/doc/os_390.txt b/runtime/doc/os_390.txt
index b30c1b2b06..c7532d9e70 100644
--- a/runtime/doc/os_390.txt
+++ b/runtime/doc/os_390.txt
@@ -1,7 +1,8 @@
-*os_390.txt*    For Vim version 9.1.  Last change: 2025 Oct 26
+*os_390.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Ralf Schandl
+		  VIM REFERENCE MANUAL	  by Ralf Schandl
+
 
 					*zOS* *z/OS* *OS390* *os390* *MVS*
 This file contains the particulars for the z/OS UNIX version of Vim.
diff --git a/runtime/doc/os_amiga.txt b/runtime/doc/os_amiga.txt
index 046a24fb94..a777079947 100644
--- a/runtime/doc/os_amiga.txt
+++ b/runtime/doc/os_amiga.txt
@@ -1,7 +1,7 @@
-*os_amiga.txt*  For Vim version 9.1.  Last change: 2025 Oct 12
+*os_amiga.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 							*Amiga*
diff --git a/runtime/doc/os_beos.txt b/runtime/doc/os_beos.txt
index 5ac41597ff..460175a595 100644
--- a/runtime/doc/os_beos.txt
+++ b/runtime/doc/os_beos.txt
@@ -1,7 +1,7 @@
-*os_beos.txt*	For Vim version 9.1.  Last change: 2020 Jun 07
+*os_beos.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 						*beos* *BeOS* *BeBox*
diff --git a/runtime/doc/os_dos.txt b/runtime/doc/os_dos.txt
index 7e85f7145a..55534304fe 100644
--- a/runtime/doc/os_dos.txt
+++ b/runtime/doc/os_dos.txt
@@ -1,7 +1,7 @@
-*os_dos.txt*    For Vim version 9.1.  Last change: 2025 Aug 06
+*os_dos.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 							*dos* *DOS*
diff --git a/runtime/doc/os_haiku.txt b/runtime/doc/os_haiku.txt
index bdabbb14fa..5d46b56ccc 100644
--- a/runtime/doc/os_haiku.txt
+++ b/runtime/doc/os_haiku.txt
@@ -1,7 +1,7 @@
-*os_haiku.txt*	For Vim version 9.1.  Last change: 2025 Oct 12
+*os_haiku.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 							*Haiku*
diff --git a/runtime/doc/os_mac.txt b/runtime/doc/os_mac.txt
index a7760f373f..e82977d984 100644
--- a/runtime/doc/os_mac.txt
+++ b/runtime/doc/os_mac.txt
@@ -1,7 +1,7 @@
-*os_mac.txt*    For Vim version 9.1.  Last change: 2025 Oct 12
+*os_mac.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar et al.
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar et al.
 
 
 					*mac* *Mac* *macintosh* *Macintosh*
diff --git a/runtime/doc/os_mint.txt b/runtime/doc/os_mint.txt
index 4ad0399d79..3edc9d68f4 100644
--- a/runtime/doc/os_mint.txt
+++ b/runtime/doc/os_mint.txt
@@ -1,7 +1,7 @@
-*os_mint.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*os_mint.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Jens M. Felderhoff
+		  VIM REFERENCE MANUAL	  by Jens M. Felderhoff
 
 
 							*MiNT* *Atari*
diff --git a/runtime/doc/os_msdos.txt b/runtime/doc/os_msdos.txt
index d6d67f0040..b64d5c3952 100644
--- a/runtime/doc/os_msdos.txt
+++ b/runtime/doc/os_msdos.txt
@@ -1,7 +1,7 @@
-*os_msdos.txt*  For Vim version 9.1.  Last change: 2016 Feb 26
+*os_msdos.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 					*msdos* *ms-dos* *MSDOS* *MS-DOS*
diff --git a/runtime/doc/os_os2.txt b/runtime/doc/os_os2.txt
index bd24d139ae..f9df1d6ac3 100644
--- a/runtime/doc/os_os2.txt
+++ b/runtime/doc/os_os2.txt
@@ -1,7 +1,7 @@
-*os_os2.txt*    For Vim version 9.1.  Last change: 2015 Dec 31
+*os_os2.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Paul Slootman
+		  VIM REFERENCE MANUAL	  by Paul Slootman
 
 
 							*os2* *OS2* *OS/2*
diff --git a/runtime/doc/os_qnx.txt b/runtime/doc/os_qnx.txt
index e55bdf82e3..5131e4a9ff 100644
--- a/runtime/doc/os_qnx.txt
+++ b/runtime/doc/os_qnx.txt
@@ -1,7 +1,7 @@
-*os_qnx.txt*    For Vim version 9.1.  Last change: 2025 Oct 12
+*os_qnx.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Julian Kinraid
+		  VIM REFERENCE MANUAL	  by Julian Kinraid
 
 
 							*QNX* *qnx*
diff --git a/runtime/doc/os_risc.txt b/runtime/doc/os_risc.txt
index dad3549b98..b1a7480170 100644
--- a/runtime/doc/os_risc.txt
+++ b/runtime/doc/os_risc.txt
@@ -1,7 +1,7 @@
-*os_risc.txt*   For Vim version 9.1.  Last change: 2011 May 10
+*os_risc.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Thomas Leonard
+		  VIM REFERENCE MANUAL	  by Thomas Leonard
 
 
 						*riscos* *RISCOS* *RISC-OS*
diff --git a/runtime/doc/os_unix.txt b/runtime/doc/os_unix.txt
index 90069a20b2..c315aec54f 100644
--- a/runtime/doc/os_unix.txt
+++ b/runtime/doc/os_unix.txt
@@ -1,7 +1,7 @@
-*os_unix.txt*   For Vim version 9.1.  Last change: 2022 Nov 25
+*os_unix.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 							*unix* *Unix*
diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt
index 8a800c10c9..7d00b59def 100644
--- a/runtime/doc/os_vms.txt
+++ b/runtime/doc/os_vms.txt
@@ -1,4 +1,4 @@
-*os_vms.txt*    For Vim version 9.1.  Last change: 2025 Oct 12
+*os_vms.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
 		  VIM REFERENCE MANUAL
diff --git a/runtime/doc/os_win32.txt b/runtime/doc/os_win32.txt
index 53b967f896..694e0fe75c 100644
--- a/runtime/doc/os_win32.txt
+++ b/runtime/doc/os_win32.txt
@@ -1,7 +1,7 @@
-*os_win32.txt*  For Vim version 9.1.  Last change: 2025 Oct 12
+*os_win32.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by George Reilly
+		  VIM REFERENCE MANUAL	  by George Reilly
 
 
 						*win32* *Win32* *MS-Windows*
diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt
index 3381694595..18d7a41120 100644
--- a/runtime/doc/pattern.txt
+++ b/runtime/doc/pattern.txt
@@ -1,7 +1,7 @@
-*pattern.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*pattern.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Patterns and search commands				*pattern-searches*
@@ -1169,13 +1169,15 @@ x	A single character, with no special meaning, matches itself
 *[:graph:]*	  [:graph:]   isgraph	ASCII printable characters excluding
 					space
 *[:lower:]*	  [:lower:]   (1)	lowercase letters (all letters when
-					'ignorecase' is used)
+					'ignorecase' is used and the old
+					engine is in use |two-engines|)
 *[:print:]*	  [:print:]   (2)	printable characters including space
 *[:punct:]*	  [:punct:]   ispunct	ASCII punctuation characters
 *[:space:]*	  [:space:]		whitespace characters: space, tab, CR,
 					NL, vertical tab, form feed
 *[:upper:]*	  [:upper:]   (3)	uppercase letters (all letters when
-					'ignorecase' is used)
+					'ignorecase' is used and the old
+					engine is in use |two-engines|)
 *[:xdigit:]*	  [:xdigit:]		hexadecimal digits: 0-9, a-f, A-F
 *[:return:]*	  [:return:]		the  character
 *[:tab:]*	  [:tab:]		the  character
diff --git a/runtime/doc/pi_getscript.txt b/runtime/doc/pi_getscript.txt
index ff61777477..756d9e83dc 100644
--- a/runtime/doc/pi_getscript.txt
+++ b/runtime/doc/pi_getscript.txt
@@ -1,4 +1,4 @@
-*pi_getscript.txt*  For Vim version 9.1.  Last change: 2025 Aug 10
+*pi_getscript.txt*  For Vim version 9.2.  Last change: 2026 Feb 14
 >
 		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell
 <
@@ -57,7 +57,8 @@ The GetLatestVimScripts.dist file serves as an example and a template for your
 own personal list.  Feel free to remove all the scripts mentioned within it;
 the "important" part of it is the first two lines.
 
-Your computer needs to have wget or curl for GetLatestVimScripts to do its work.
+Your computer needs to have wget or curl for GetLatestVimScripts to do its
+work.
 
 	1. if compressed:  gunzip getscript.vmb.gz
 	2. Unix:
diff --git a/runtime/doc/pi_gzip.txt b/runtime/doc/pi_gzip.txt
index cb4fc6b3b8..bce98d5513 100644
--- a/runtime/doc/pi_gzip.txt
+++ b/runtime/doc/pi_gzip.txt
@@ -1,7 +1,7 @@
-*pi_gzip.txt*   For Vim version 9.1.  Last change: 2025 Mar 05
+*pi_gzip.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Editing compressed files with Vim		*gzip* *bzip2* *compress*
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
index a86cac36ba..e3c06852cc 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1047,7 +1047,7 @@ QUICK REFERENCE: MAPS				*netrw-browse-maps* {{{2
 	   C	Setting the editing window                           |netrw-C|
 	   d	Make a directory                                     |netrw-d|
 	   D	Attempt to remove the file(s)/directory(ies)         |netrw-D|
-	   gb	Go to previous bookmarked directory                  |netrw-gb|
+	   gb	Go to bookmark                                       |netrw-gb|
 	   gd	Force treatment as directory                         |netrw-gd|
 	   gf	Force treatment as file                              |netrw-gf|
 	   gh	Quick hide/unhide of dot-files                       |netrw-gh|
@@ -1056,11 +1056,12 @@ QUICK REFERENCE: MAPS				*netrw-browse-maps* {{{2
 	   i	Cycle between thin, long, wide, and tree listings    |netrw-i|
 	   I	Toggle the displaying of the banner                  |netrw-I|
 	   mb	Bookmark current directory                           |netrw-mb|
+	   mB	Delete bookmark                                      |netrw-mB|
 	   mc	Copy marked files to marked-file target directory    |netrw-mc|
 	   md	Apply diff to marked files (up to 3)                 |netrw-md|
 	   me	Place marked files on arg list and edit them         |netrw-me|
 	   mf	Mark a file                                          |netrw-mf|
-	   mF	Unmark files                                         |netrw-mF|
+	   mF	Unmark buffer-local files                            |netrw-mF|
 	   mg	Apply vimgrep to marked files                        |netrw-mg|
 	   mh	Toggle marked file suffices' presence on hiding list |netrw-mh|
 	   mm	Move marked files to marked-file target directory    |netrw-mm|
@@ -1142,6 +1143,8 @@ One may easily "bookmark" the currently browsed directory by using >
 
 	mb
 <
+Note: Bookmarked paths are normalized and stored as absolute paths.
+
 								*.netrwbook*
 Bookmarks are retained in between sessions of vim in a file called .netrwbook
 as a |List|, which is typically stored in the first directory on the user's
@@ -1363,13 +1366,16 @@ Currently, this only works for local files.
 Associated setting variables: |g:netrw_chgperm|
 
 
-CHANGING TO A BOOKMARKED DIRECTORY			*netrw-gb*  {{{2
+CHANGING TO A BOOKMARKED PATH			*netrw-gb*  {{{2
 
-To change directory back to a bookmarked directory, use
+To change to a bookmarked path, use >
 
-	{cnt}gb
+	[{cnt}]gb
 
 Any count may be used to reference any of the bookmarks.
+If {cnt} is omitted, it shows a list of the current bookmarks
+and prompts for a bookmark number to go to.
+
 Note that |netrw-qb| shows both bookmarks and history; to go
 to a location stored in the history see |netrw-u| and |netrw-U|.
 
@@ -1432,10 +1438,13 @@ DELETING BOOKMARKS					*netrw-mB* {{{2
 
 To delete a bookmark, use >
 
-	{cnt}mB
+	[{cnt}]mB
 
 If there are marked files, then mB will remove them from the
 bookmark list.
+If no files are marked and {cnt} is omitted, it shows a list
+of the current bookmarks and prompts for a bookmark number
+to delete.
 
 Alternatively, one may use :NetrwMB! (see |netrw-:NetrwMB|). >
 
@@ -2275,9 +2284,10 @@ Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
     displayed directory is used for the copy/move-to target.
 
   * Also, if the cursor is in the banner, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
-    Unless the target already is the current directory.  In which case,
-    typing "mf" clears the target.
+    displayed directory is used for the copy/move-to target - unless that
+    directory is already the target, in which case typing "mt" again clears
+    it.  Repeating "mt" in the banner thus toggles the current directory as
+    the target.
 
   * However, if the cursor is atop a directory name, then that directory is
     used for the copy/move-to target
@@ -2854,10 +2864,6 @@ your browsing preferences.  (see also: |netrw-settings|)
 				such as listing, file removal, etc.
 				 default: ssh
 
-  *g:netrw_tmpfile_escape*	=' &;'
-				escape() is applied to all temporary files
-				to escape these characters.
-
   *g:netrw_timefmt*		specify format string to vim's strftime().
 				The default, "%c", is "the preferred date
 				and time representation for the current
diff --git a/runtime/doc/pi_paren.txt b/runtime/doc/pi_paren.txt
index 049889699d..82fa1c7850 100644
--- a/runtime/doc/pi_paren.txt
+++ b/runtime/doc/pi_paren.txt
@@ -1,7 +1,7 @@
-*pi_paren.txt*  For Vim version 9.1.  Last change: 2024 Nov 04
+*pi_paren.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Highlighting matching parens			*matchparen*
diff --git a/runtime/doc/pi_spec.txt b/runtime/doc/pi_spec.txt
index a8d26cdb13..986e00e0ea 100644
--- a/runtime/doc/pi_spec.txt
+++ b/runtime/doc/pi_spec.txt
@@ -1,4 +1,4 @@
-*pi_spec.txt*   For Vim version 9.1.  Last change: 2006 Apr 24
+*pi_spec.txt*   For Vim version 9.2.  Last change: 2026 Feb 14
 
 by Gustavo Niemeyer ~
 
diff --git a/runtime/doc/pi_tar.txt b/runtime/doc/pi_tar.txt
index 9064b2ba1a..5a4dae8f31 100644
--- a/runtime/doc/pi_tar.txt
+++ b/runtime/doc/pi_tar.txt
@@ -1,4 +1,4 @@
-*pi_tar.txt*	For Vim version 9.1.  Last change: 2025 Aug 10
+*pi_tar.txt*	For Vim version 9.2.  Last change: 2026 Apr 16
 
 		       +====================+
 		       | Tar File Interface |
@@ -101,10 +101,17 @@ Copyright 2005-2017:					*tar-copyright*
 4. History						*tar-history*
 
 	unreleased:
+		Apr 16, 2026	* add missing g:tar_secure into tar#Extract
+		Apr 15, 2026	* add path traversal checks in tar#Extract()
+		Apr 09, 2026	* fix zstd support and dotted filename support
+		Apr 06, 2026	* fix lz4 support
+		Feb 07, 2026	* make path traversal detection more robust
+		Feb 06, 2026	* fix bug with nowrapscan
+		Jul 16, 2025	* update minimum required Vim version
 		Jul 13, 2025	* drop leading /
 		May 19, 2025	* restore working directory after read/write
 		Apr 16, 2025	* decouple from netrw by adding s:WinPath()
-				instead of shelling out to file(1)
+				  instead of shelling out to file(1)
 		Mar 02, 2025	* determine the compression using readblob()
 		Mar 02, 2025	* escape the filename before using :read
 		Mar 01, 2025	* fix syntax error in tar#Read()
diff --git a/runtime/doc/pi_tutor.txt b/runtime/doc/pi_tutor.txt
index 9b1de1f702..121b286d77 100644
--- a/runtime/doc/pi_tutor.txt
+++ b/runtime/doc/pi_tutor.txt
@@ -1,4 +1,4 @@
-*pi_tutor.txt*    For Vim version 9.1.  Last change: 2025 May 19
+*pi_tutor.txt*    For Vim version 9.2.  Last change: 2026 Feb 14
 
 INTERACTIVE TUTORIALS FOR VIM			 *vim-tutor-mode*
 
diff --git a/runtime/doc/pi_vimball.txt b/runtime/doc/pi_vimball.txt
index f498e57f93..e1770e289e 100644
--- a/runtime/doc/pi_vimball.txt
+++ b/runtime/doc/pi_vimball.txt
@@ -1,4 +1,4 @@
-*pi_vimball.txt*	For Vim version 9.1.  Last change: 2025 Aug 06
+*pi_vimball.txt*	For Vim version 9.2.  Last change: 2026 Apr 16
 
 			       ----------------
 			       Vimball Archiver
@@ -9,13 +9,13 @@ Author:  Charles E. Campbell  
 Copyright: (c) 2004-2015 by Charles E. Campbell		*Vimball-copyright*
 	The VIM LICENSE (see |copyright|) applies to the files in this
 	package, including vimballPlugin.vim, vimball.vim, and pi_vimball.txt.
-	except use "vimball" instead of "VIM".  Like anything else that's free,
-	vimball.vim and its associated files are provided *as is* and comes with
-	no warranty of any kind, either expressed or implied.  No guarantees
-	of merchantability.  No guarantees of suitability for any purpose.  By
-	using this plugin, you agree that in no event will the copyright
-	holder be liable for any damages resulting from the use of this
-	software. Use at your own risk!
+	except use "vimball" instead of "VIM".  Like anything else that's
+	free, vimball.vim and its associated files are provided *as is* and
+	comes with no warranty of any kind, either expressed or implied.  No
+	guarantees of merchantability.  No guarantees of suitability for any
+	purpose.  By using this plugin, you agree that in no event will the
+	copyright holder be liable for any damages resulting from the use of
+	this software. Use at your own risk!
 
 ==============================================================================
 1. Contents				*vba* *vimball* *vimball-contents*
@@ -93,21 +93,6 @@ MAKING A VIMBALL						*:MkVimball*
 	make.
 
 
-MAKING DIRECTORIES VIA VIMBALLS				*g:vimball_mkdir*
-
-	First, the |mkdir()| command is tried (not all systems support it).
-
-	If it doesn't exist, then if g:vimball_mkdir doesn't exist, it is set
-	as follows: >
-	  |g:netrw_localmkdir|, if it exists
-	  "mkdir"             , if it is executable
-	  "makedir"           , if it is executable
-	  Otherwise           , it is undefined.
-<	One may explicitly specify the directory making command using
-	g:vimball_mkdir.  This command is used to make directories that
-	are needed as indicated by the vimball.
-
-
 CONTROLLING THE VIMBALL EXTRACTION DIRECTORY		*g:vimball_home*
 
 	You may override the use of the 'runtimepath' by specifying a
@@ -181,6 +166,11 @@ WINDOWS							*vimball-windows*
 ==============================================================================
 4. Vimball History					*vimball-history* {{{1
 
+	unreleased:
+	     Feb 28, 2025 * add support for bzip3 (#16755)
+	     Apr 05, 2026 * Detect path traversal attacks
+	     Apr 09, 2026 * Detect more path traversal attacks
+	     Apr 16, 2026 * Block Windows drive letter paths
 	37 : Jul 18, 2014 * (by request of T. Miedema) added augroup around
 			    the autocmds in vimballPlugin.vim
 	     Jul 06, 2015 * there are two uses of tabc; changed to tabc!
@@ -248,8 +238,8 @@ WINDOWS							*vimball-windows*
 	13 : May 01, 2006 * exists("&acd") used to determine if the acd
 			    option exists
 	12 : May 01, 2006 * bugfix - the 'acd' option is not always defined
-	11 : Apr 27, 2006 * VimballList would create missing subdirectories that
-			    the vimball specified were needed.  Fixed.
+	11 : Apr 27, 2006 * VimballList would create missing subdirectories
+			    that the vimball specified were needed.  Fixed.
 	10 : Apr 27, 2006 * moved all setting saving/restoration to a pair of
 			    functions.  Included some more settings in them
 			    which frequently cause trouble.
diff --git a/runtime/doc/pi_zip.txt b/runtime/doc/pi_zip.txt
index e32d4c197c..dc462cfefc 100644
--- a/runtime/doc/pi_zip.txt
+++ b/runtime/doc/pi_zip.txt
@@ -1,4 +1,4 @@
-*pi_zip.txt*	For Vim version 9.1.  Last change: 2025 Sep 22
+*pi_zip.txt*	For Vim version 9.2.  Last change: 2026 Jun 20
 
 				+====================+
 				| Zip File Interface |
@@ -33,6 +33,10 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell	 *zip-copyright*
    also write to the file.  Currently, one may not make a new file in
    zip archives via the plugin.
 
+   The zip plugin tries to detect some common path traversal attack
+   patterns, but it may not catch all possible cases.  Please be very
+   careful when using this plugin with untrusted input.
+
    COMMANDS~
 								*zip-x*
    x : extract a listed file when the cursor is atop it
@@ -44,16 +48,6 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell	 *zip-copyright*
    If this variable exists and is true, the file window will not be
    automatically maximized when opened.
 
-							*g:zip_shq*
-   Different operating systems may use one or more shells to execute
-   commands.  Zip will try to guess the correct quoting mechanism to
-   allow spaces and whatnot in filenames; however, if it is incorrectly
-   guessing the quote to use for your setup, you may use >
-	g:zip_shq
-<   which by default is a single quote under Unix (') and a double quote
-   under Windows (").  If you'd rather have no quotes, simply set
-   g:zip_shq to the empty string (let g:zip_shq= "") in your <.vimrc>.
-
 							*g:zip_unzipcmd*
    Use this option to specify the program which does the duty of "unzip".
    It's used during browsing. By default: >
@@ -110,9 +104,9 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell	 *zip-copyright*
    should be treated as zip files.
 
    Alternatively, one may change *g:zipPlugin_ext* in one's .vimrc.
-   Currently (as of October 2025) it holds: >
+   Currently (as of May 2026) it holds: >
 
-        let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx,
+        let g:zipPlugin_ext='*.aar,*.apk,*.cbz,*.celzip,*.crtx,*.docm,*.docx,
        \ *.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,
        \ *.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf,
        \ *.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.pkpass,*.potm,*.potx,
diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt
index 41f4da5455..ef3310638c 100644
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -1,10 +1,10 @@
-*popup.txt*  For Vim version 9.1.  Last change: 2025 Oct 12
+*popup.txt*	For Vim version 9.2.  Last change: 2026 Jun 17
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
-Displaying text in a floating window.	*popup* *popup-window* *popupwin*
+Displaying text in a popup window.	*popup* *popup-window* *popupwin*
 
 
 1. Introduction			|popup-intro|
@@ -21,7 +21,9 @@ Displaying text in a floating window.	*popup* *popup-window* *popupwin*
    Popup filter			|popup-filter|
    Popup callback		|popup-callback|
    Popup scrollbar		|popup-scrollbar|
+   Popup opacity		|popup-opacity|
    Popup mask			|popup-mask|
+   Popup image			|popup-image|
 4. Examples			|popup-examples|
 
 
@@ -43,8 +45,11 @@ A popup window can be used for such things as:
 The text in the popup window can be colored with |text-properties|.  It is
 also possible to use syntax highlighting.
 
-The default color used is "Pmenu".  If you prefer something else use the
-"highlight" argument or the 'wincolor' option, e.g.: >
+The default colors are taken from |hl-Popup| (body), |hl-PopupBorder|
+(border) and |hl-PopupTitle| (title), which all link to |hl-Pmenu| by
+default for backward compatibility.  Override them to give general popup
+windows a different look than the popup completion menu, or use the
+"highlight" argument or the 'wincolor' option for a per-popup override: >
 	hi MyPopupColor ctermbg=lightblue guibg=lightblue
 	call setwinvar(winid, '&wincolor', 'MyPopupColor')
 
@@ -253,7 +258,7 @@ popup_clear([{force}])
 		when it is the current window.  If a terminal is running in a
 		popup it is killed.
 
-		Return type: |Number|
+		Return type: void
 
 
 popup_close({id} [, {result}])				*popup_close()*
@@ -268,7 +273,7 @@ popup_close({id} [, {result}])				*popup_close()*
 		Can also be used as a |method|: >
 			GetPopup()->popup_close()
 <
-		Return type: |Number|
+		Return type: void
 
 
 popup_create({what}, {options})				*popup_create()*
@@ -350,7 +355,7 @@ popup_filter_menu({id}, {key})				*popup_filter_menu()*
 		To add shortcut keys, see the example here:
 		|popup_menu-shortcut-example|
 
-		Return type: |Number|
+		Return type: |vim9-boolean|
 
 
 popup_filter_yesno({id}, {key})				*popup_filter_yesno()*
@@ -362,7 +367,7 @@ popup_filter_yesno({id}, {key})				*popup_filter_yesno()*
 		keys are ignored.
 		See the example here: |popup_dialog-example|
 
-		Return type: |Number|
+		Return type: |vim9-boolean|
 
 
 popup_findecho()					*popup_findecho()*
@@ -470,7 +475,7 @@ popup_hide({id})						*popup_hide()*
 		Can also be used as a |method|: >
 			GetPopup()->popup_hide()
 <
-		Return type: |Number|
+		Return type: void
 
 
 popup_list()						 *popup_list()*
@@ -541,7 +546,7 @@ popup_move({id}, {options})					*popup_move()*
 		Can also be used as a |method|: >
 			GetPopup()->popup_move(options)
 <
-		Return type: |Number|
+		Return type: void
 
 
 popup_notification({what}, {options})			 *popup_notification()*
@@ -623,7 +628,7 @@ popup_setoptions({id}, {options})			*popup_setoptions()*
 		Can also be used as a |method|: >
 			GetPopup()->popup_setoptions(options)
 <
-		Return type: |Number|
+		Return type: void
 
 
 popup_settext({id}, {text})				*popup_settext()*
@@ -635,7 +640,7 @@ popup_settext({id}, {text})				*popup_settext()*
 		Can also be used as a |method|: >
 			GetPopup()->popup_settext('hello')
 <
-		Return type: |Number|
+		Return type: void
 
 
 popup_show({id})						*popup_show()*
@@ -711,6 +716,15 @@ The second argument of |popup_create()| is a dictionary with options:
 			when "textprop" is present.
 	textpropid	Used to identify the text property when "textprop" is
 			present.  Use zero to reset.
+	clipwindow	Only used when "textprop" is set.  When TRUE the popup
+			is kept within the window containing the text
+			property: if the text property scrolls past that
+			window's top, bottom, left or right edge, the popup
+			is clipped at that edge instead of being drawn
+			outside it.  Once the text property has scrolled out
+			of the window the popup is hidden.
+			Default FALSE.
+			See |popup-clipwindow|.
 	fixed		When FALSE (the default), and:
 			 - "pos" is "botleft" or "topleft", and
 			 - the popup would be truncated at the right edge of
@@ -750,6 +764,10 @@ The second argument of |popup_create()| is a dictionary with options:
 			border one line of padding is added to put the title
 			on.  You might want to add one or more spaces at the
 			start and end as padding.
+			The title uses |hl-PopupTitle| by default; if
+			"borderhighlight" is set the top border highlight is
+			used instead, and if "highlight"/'wincolor' is set
+			that is used.
 	wrap		TRUE to make the lines wrap (default TRUE).
 	drag		TRUE to allow the popup to be dragged with the mouse
 			by grabbing at the border.  Has no effect if the
@@ -772,6 +790,27 @@ The second argument of |popup_create()| is a dictionary with options:
 			the popup window.
 	highlight	Highlight group name to use for the text, stored in
 			the 'wincolor' option.
+	highlights	Highlight group overrides, stored in the
+			'winhighlight' option (same format).
+	opacity		Opacity of the popup, a value between 0 and 100:
+			0 is fully transparent (background text fully visible)
+			100 is fully opaque (default, no transparency)
+			Values in between blend the popup background with the
+			underlying text, making it partially transparent.
+			Requires 'termguicolors' to be set.
+			Also see |popup-opacity|.
+	image		Dictionary describing a raw RGB or RGBA pixel buffer
+			to render inside the popup.  When set the popup
+			auto-sizes its cell box from the image's pixel
+			dimensions, so "minwidth" / "minheight" / "maxwidth" /
+			"maxheight" do not need to be set by hand.  Keys:
+			    data    |Blob| of bytes; length must equal
+				    width*height*3 (RGB) or width*height*4
+				    (RGBA).
+			    width   image width in pixels.
+			    height  image height in pixels.
+			Use an empty dictionary to remove a previously set
+			image.  See |popup-image|.
 	padding		List with numbers, defining the padding
 			above/right/below/left of the popup (similar to CSS).
 			An empty list uses a padding of 1 all around.  The
@@ -789,6 +828,8 @@ The second argument of |popup_create()| is a dictionary with options:
 			the highlight for the top/right/bottom/left border.
 			Example: ['TopColor', 'RightColor', 'BottomColor,
 			'LeftColor']
+			When not given and "highlight"/'wincolor' is also not
+			set, |hl-PopupBorder| is used.
 	borderchars	List with characters, defining the character to use
 			for the top/right/bottom/left border.  Optionally
 			followed by the character to use for the
@@ -939,6 +980,31 @@ If the window for which the popup was defined is closed, the popup is closed.
 If the popup cannot fit in the desired position, it may show at a nearby
 position.
 
+
+CLIP TEXTPROP POPUP TO HOST WINDOW			*popup-clipwindow*
+
+When the popup is anchored to a text property in a split window, the popup is
+by default drawn relative to the whole screen and may extend past the edges of
+the window that contains the text property (the "host window").  Setting
+"clipwindow" to TRUE keeps the popup within window's content area:
+parts of the popup that fall outside the window are clipped, and the popup is
+hidden once the text property has scrolled entirely past one of the edges.
+
+Example: a tall popup anchored above the cursor that should never spill into
+the window below the split: >
+	call popup_create(body, #{
+		\ textprop: 'marker',
+		\ textpropid: id,
+		\ pos: 'topleft',
+		\ line: -1, col: 0,
+		\ posinvert: v:false,
+		\ clipwindow: v:true,
+		\ })
+<
+With "posinvert" left at its default (TRUE) the popup may be flipped to the
+opposite side of the text property when there is no room; set it to FALSE to
+keep the requested side and rely on "clipwindow" to clip the overflow.
+
 Some hints:
 - To avoid collision with other plugins the text property type name has to be
   unique.  You can also use the "bufnr" item to make it local to a buffer.
@@ -1046,6 +1112,43 @@ A click in the lower half will scroll the text up one line.  However, this is
 limited so that the popup does not get smaller.
 
 
+
+POPUP OPACITY						*popup-opacity*
+
+A popup window can be made semi-transparent by setting the "opacity" option.
+The opacity value ranges from 0 to 100:
+    0		Fully transparent - the popup background is invisible and the
+		text behind the popup is fully visible.
+    100		Fully opaque (default) - the popup is not transparent at all.
+    1-99	Partially transparent - the popup background is blended with
+		the underlying text, making both partially visible.
+
+The transparency effect requires using the GUI, having 'termguicolors'
+enabled, or running in a 256-color terminal.  On terminals with fewer
+than 256 colors the opacity setting has no effect.
+
+When a popup is transparent:
+- The popup's background color is blended with the background text
+- The popup's text (foreground) remains fully visible and unblended
+- Text behind the popup is visible through transparent areas
+- The more transparent the popup (lower opacity), the more clearly the
+  background text can be seen
+
+This can be useful for:
+- Creating overlay windows that don't completely obscure underlying text
+- Showing contextual information without blocking the view
+- Creating visual effects and modern UI designs
+
+Example with 50% opacity: >
+	let winid = popup_create('Semi-transparent text', #{
+	\ line: 5,
+	\ col: 10,
+	\ opacity: 50,
+	\ })
+
+The opacity can be changed dynamically using |popup_setoptions()|: >
+	call popup_setoptions(winid, #{opacity: 80})
+
 POPUP MASK						*popup-mask*
 
 To minimize the text that the popup covers, parts of it can be made
@@ -1065,6 +1168,77 @@ For example, to make the last 10 columns of the last line transparent:
 To make the four corners transparent:
 	[[1, 1, 1, 1], [-1, -1, 1, 1], [1, 1, -1, -1], [-1, -1, -1, -1]]
 
+POPUP IMAGE						*popup-image*
+
+A popup window can render an image instead of (or on top of) text by passing
+an "image" dictionary to |popup_create()| or |popup_setoptions()|.  The caller
+supplies an already-decoded raw pixel buffer and Vim emits it through
+whichever backend is available at runtime:
+
+    sixel   DEC sixel DCS sequence on a sixel-capable terminal.
+	    |+image_sixel|.  Detected automatically; the buffer is also
+	    cropped one cell above the screen edge to avoid sixel-induced
+	    terminal scrolling.
+    kitty   kitty graphics protocol APC sequence on terminals that support it
+	    (kitty, ghostty, WezTerm, Konsole, ...).  |+image_kitty|.
+	    Detected by actively querying the terminal.
+    GDI     StretchDIBits onto the GUI canvas on the MS-Windows GUI.
+	    |+image_gdi|.
+    Cairo   composite onto a cairo_image_surface_t on the GTK GUI
+	    (covers GTK 2 and GTK 3).  |+image_cairo|.
+    GDK	    Use GdkTexture, which uploads the image onto the GPU for faster
+	    rendering (only for GTK 4).	|+image_gdk|
+
+Vim itself does NOT link against libpng, libjpeg, libwebp or any image
+decoder.  Format decoding is left to the caller, who can pipe the file through
+any external tool (GraphicsMagick, ImageMagick, ffmpeg, a custom converter,
+...) and pass the resulting bytes via a |Blob|.
+
+The "image" dictionary accepts:
+    data	|Blob| of bytes.  Length must equal width*height*3 for RGB,
+		or width*height*4 for RGBA.  RGBA buffers are alpha-composited
+		over the popup's background.
+    width	image width in pixels.
+    height	image height in pixels.
+
+The popup's cell box is derived from the pixel dimensions and the terminal /
+GUI cell metrics, so the caller does not normally have to set "minwidth" /
+"minheight" / "maxwidth" / "maxheight".
+
+For RGBA buffers that need to blend cleanly into the editor's actual backdrop
+the script can call |getbgcolor()| to obtain the current background colour as
+[r, g, b] and pre-composite anti-aliased edges against it.
+
+Minimal RGB example - a 4x4 red square popped at the cursor: >
+	let pixels = repeat([0xff, 0x00, 0x00], 4 * 4)->list2blob()
+	call popup_create('', #{
+	      \ image: #{ data: pixels, width: 4, height: 4 },
+	      \ line: 'cursor+1', col: 'cursor',
+	      \ })
+
+Real-world example - pipe a PNG through GraphicsMagick and pop the resulting
+raw RGB bytes: >
+	let png = 'cat.png'
+	let dim = split(system('gm identify -format "%w %h" '
+		\ .. shellescape(png)))
+	let [w, h] = [str2nr(dim[0]), str2nr(dim[1])]
+	call system('gm convert ' .. shellescape(png)
+		\ .. ' -depth 8 rgb:/tmp/cat.rgb')
+	let blob = readblob('/tmp/cat.rgb')
+	call popup_create('', #{
+	      \ image: #{ data: blob, width: w, height: h },
+	      \ line: 1, col: 1, border: [], padding: [0, 0, 0, 0],
+	      \ })
+
+The image can be replaced at runtime via |popup_setoptions()|.  When the new
+buffer has the same width and height as the current one the pixels are swapped
+in place, which is fast enough to drive frame-by-frame animation from a
+|timer|.  |popup_getoptions()| returns the same dictionary back; the "data"
+entry is a fresh blob copy independent of the popup's internal buffer.
+
+To remove a previously set image pass an empty dictionary: >
+	call popup_setoptions(winid, #{image: {}})
+
 ==============================================================================
 4. Examples						*popup-examples*
 
diff --git a/runtime/doc/print.txt b/runtime/doc/print.txt
index 0c980a0691..5887ee9872 100644
--- a/runtime/doc/print.txt
+++ b/runtime/doc/print.txt
@@ -1,7 +1,7 @@
-*print.txt*     For Vim version 9.1.  Last change: 2025 Oct 12
+*print.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Printing						*printing*
@@ -311,7 +311,7 @@ another font will be used as follows:
   if o: is missing, then use b:
 
 Some CJK fonts do not contain characters for codes in the ASCII code range.
-Also, some characters in the CJK ASCII code ranges differ in a few code points
+Also, some characters in the CJK ASCII code ranges differ in a few codepoints
 from traditional ASCII characters.  There are two additional fields to control
 printing of characters in the ASCII code range.
 
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index a3226020aa..4b24d12980 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,7 +1,7 @@
-*quickfix.txt*  For Vim version 9.1.  Last change: 2025 Oct 28
+*quickfix.txt*  For Vim version 9.2.  Last change: 2026 May 28
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 This subject is introduced in section |30.1| of the user manual.
@@ -491,8 +491,8 @@ entries parsed from lines.  The following shows how to use a custom
 
 EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
 							*:cdo*
-:cdo[!] {cmd}		Execute {cmd} in each valid entry in the quickfix list.
-			It works like doing this: >
+:cdo[!] {cmd}		Execute {cmd} in each valid entry in the quickfix
+			list.  It works like doing this: >
 				:cfirst
 				:{cmd}
 				:cnext
@@ -625,6 +625,10 @@ can go back to the unfiltered list using the |:colder|/|:lolder| command.
 			errors.  If the window is already open and there are
 			no recognized errors, close the window.
 
+			When opening the window and [height] is given, the
+			window becomes that high (if there is room).  When
+			[height] is omitted the window is made ten lines high.
+
 							*:lw* *:lwindow*
 :lw[indow] [height]	Same as ":cwindow", except use the window showing the
 			location list for the current window.
@@ -1281,6 +1285,17 @@ For writing a compiler plugin, see |write-compiler-plugin|.
 
 Use the |compiler-make| plugin to undo the effect of a compiler plugin.
 
+BIOME				      *compiler-biome* *quickfix-biome*
+
+Biome check lints JavaScript, TypeScript, JSX, TSX, JSON, JSONC, HTML, Vue,
+Svelte, Astro, CSS, GraphQL and GritQL files.
+
+Commonly used compiler options can be added to 'makeprg' by setting the
+b/g:biome_makeprg_params variable.  For example (global default is ""): >
+
+  let b:biome_makeprg_params = "--diagnostic-level=error --staged"
+
+
 CPPCHECK			*quickfix-cppcheck* *compiler-cppcheck*
 
 Use g/b:`c_cppcheck_params` to set cppcheck parameters.  The global
@@ -1643,6 +1658,22 @@ b/g:mypy_makeprg_params variable.  For example: >
 
 The global default is "--strict --ignore-missing-imports".
 
+PYRIGHT TYPE CHECKER					*compiler-pyright*
+
+Commonly used compiler options can be added to 'makeprg' by setting the
+b/g:pyright_makeprg_params variable.
+
+The global default is "pyright".
+
+TY TYPE CHECKER					*compiler-ty*
+
+Commonly used compiler options and executable can be set by the
+b/g:ty_makeprg variable.  For example: >
+
+	let b:ty_makeprg = "uv run ty"
+
+The global default is "ty --no-progress --color=never".
+
 RUFF LINTER						*compiler-ruff*
 
 Commonly used compiler options can be added to 'makeprg' by setting the
@@ -1790,9 +1821,9 @@ Basic items
 	%c		column number (finds a number representing character
 			column of the error, byte index, a  is 1
 			character column)
-	%v		virtual column number (finds a number representing
-			screen column of the error (1  == 8 screen
-			columns))
+	%v		virtual column number (finds a number representing the
+			screen column of the error, where a  is always 8
+			screen columns regardless of 'tabstop')
 	%k		end column number (finds a number representing
 			the character column of the error, byte index, or a
 			number representing screen end column of the error if
@@ -2004,9 +2035,9 @@ case they have to precede the letter, e.g. '%+A' or '%-G':
 	%-		do not include the matching multi-line in any output
 	%+		include the whole matching line in the %m error string
 
-One prefix is only useful in combination with '+' or '-', namely %G.  It parses
-over lines containing general information like compiler version strings or
-other headers that can be skipped.
+One prefix is only useful in combination with '+' or '-', namely %G.  It
+parses over lines containing general information like compiler version strings
+or other headers that can be skipped.
 	%-G		ignore this message
 	%+G		general message
 
@@ -2174,8 +2205,8 @@ prints information about entering a directory in the form "Making all in dir".
    Making all in dir2		  ./dir1/dir2
    Making all in dir2		  ./dir1/dir2
 
-   This can be solved by printing absolute directories in the "enter directory"
-   message or by printing "leave directory" messages.
+   This can be solved by printing absolute directories in the "enter
+   directory" message or by printing "leave directory" messages.
 
 To avoid this problem, ensure to print absolute directory names and "leave
 directory" messages.
diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt
index 99dcc3d0e5..2400246e76 100644
--- a/runtime/doc/quickref.txt
+++ b/runtime/doc/quickref.txt
@@ -1,7 +1,8 @@
-*quickref.txt*  For Vim version 9.1.  Last change: 2025 Aug 23
+*quickref.txt*	For Vim version 9.2.  Last change: 2026 May 17
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+
 
 			    Quick reference guide
 
@@ -829,6 +830,7 @@ Short explanation of each option:		*option-list*
 'modeline'	  'ml'	    recognize modelines at start or end of file
 'modelineexpr'	  'mle'	    allow setting expression options from a modeline
 'modelines'	  'mls'     number of lines checked for modelines
+'modelinestrict'  'mlst'    only allow safe options in modelines
 'modifiable'	  'ma'	    changes to the text are not possible
 'modified'	  'mod'     buffer has been modified
 'more'			    pause listings when the whole screen is filled
@@ -871,6 +873,7 @@ Short explanation of each option:		*option-list*
 'printoptions'	  'popt'    controls the format of :hardcopy output
 'prompt'	  'prompt'  enable prompt in Ex mode
 'pumheight'	  'ph'	    maximum height of the popup menu
+'pumopt'	  'pumopt'  additional options for the popup menu
 'pumwidth'	  'pw'	    minimum width of the popup menu
 'pythondll'		    name of the Python 2 dynamic library
 'pythonhome'		    name of the Python 2 home directory
@@ -899,6 +902,7 @@ Short explanation of each option:		*option-list*
 'scrollfocus'	  'scf'     scroll wheel applies to window under pointer
 'scrolljump'	  'sj'	    minimum number of lines to scroll
 'scrolloff'	  'so'	    minimum nr. of lines above and below cursor
+'scrolloffpad'	  'sop'	    vertically center cursor at end of file
 'scrollopt'	  'sbo'     how 'scrollbind' should behave
 'sections'	  'sect'    nroff macros that separate sections
 'secure'		    secure mode for reading .vimrc in current dir
@@ -945,6 +949,7 @@ Short explanation of each option:		*option-list*
 'splitright'	  'spr'     new window is put right of the current one
 'startofline'	  'sol'     commands move cursor to first non-blank in line
 'statusline'	  'stl'     custom format for the status line
+'statuslineopt'	  'stlo'    additional options for the |status-line|
 'suffixes'	  'su'	    suffixes that are ignored with multiple match
 'suffixesadd'	  'sua'     suffixes added when searching for a file
 'swapfile'	  'swf'     whether to use a swapfile for a buffer
@@ -962,12 +967,14 @@ Short explanation of each option:		*option-list*
 'taglength'	  'tl'	    number of significant characters for a tag
 'tagrelative'	  'tr'	    file names in tag file are relative
 'tags'		  'tag'     list of file names used by the tag command
+'tagsecure'	  'tsc'	    do not open remote files using tag commands
 'tagstack'	  'tgst'    push tags onto the tag stack
 'tcldll'		    name of the Tcl dynamic library
 'term'			    name of the terminal
 'termbidi'	  'tbidi'   terminal takes care of bi-directionality
 'termencoding'	  'tenc'    character encoding used by the terminal
 'termguicolors'	  'tgc'     use GUI colors for the terminal
+'termsync'	  'tsy'     enable terminal sync mode for redraw
 'termwinkey'	  'twk'	    key that precedes a Vim command in a terminal
 'termwinscroll'   'twsl'    max number of scrollback lines in a terminal window
 'termwinsize'	  'tws'	    size of a terminal window
@@ -1023,6 +1030,7 @@ Short explanation of each option:		*option-list*
 'wildoptions'	  'wop'     specifies how command line completion is done
 'winaltkeys'	  'wak'     when the windows system handles ALT keys
 'wincolor'	  'wcr'	    window-local highlighting
+'winhighlight'	  'whl'	    window-local highlighting mappings
 'window'	  'wi'	    nr of lines to scroll for CTRL-F and CTRL-B
 'winfixbuf'	  'wfb'     keep window focused on a single buffer
 'winfixheight'	  'wfh'     keep window height when opening/closing windows
diff --git a/runtime/doc/quotes.txt b/runtime/doc/quotes.txt
index 0eeb1b6916..19d752c62b 100644
--- a/runtime/doc/quotes.txt
+++ b/runtime/doc/quotes.txt
@@ -1,7 +1,7 @@
-*quotes.txt*    For Vim version 9.1.  Last change: 2018 Mar 29
+*quotes.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 							*quotes*
diff --git a/runtime/doc/recover.txt b/runtime/doc/recover.txt
index b399b23933..d52aacd880 100644
--- a/runtime/doc/recover.txt
+++ b/runtime/doc/recover.txt
@@ -1,7 +1,7 @@
-*recover.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*recover.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Recovery after a crash					*crash-recovery*
@@ -195,6 +195,10 @@ recovered file.  Or use |:DiffOrig|.
 Once you are sure the recovery is ok delete the swap file.  Otherwise, you
 will continue to get warning messages that the ".swp" file already exists.
 
+Note: Recovering swap files is best-effort.  Vim attempts to validate fields
+and skip corrupted sections, but the swap file format is intended for files
+you trust.  A crafted swap file may trigger parser bugs; such reports are
+treated as robustness issues rather than security vulnerabilities.
 
 
 ENCRYPTION AND THE SWAP FILE				*:recover-crypt*
diff --git a/runtime/doc/remote.txt b/runtime/doc/remote.txt
index 2c10813550..dff85b7e40 100644
--- a/runtime/doc/remote.txt
+++ b/runtime/doc/remote.txt
@@ -1,7 +1,7 @@
-*remote.txt*    For Vim version 9.1.  Last change: 2025 Aug 22
+*remote.txt*	For Vim version 9.2.  Last change: 2026 Jun 05
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Vim client-server communication				*client-server*
@@ -80,10 +80,17 @@ The following command line arguments are available:
 								*--clientserver*
    --clientserver {method}	Use the specified method {method} as the
 				backend for clientserver functionality.  Can
-				either be "socket" or "x11".
+				either be "socket", "x11", or "mswin".
+							    *$VIM_CLIENTSERVER*
+				If the "$VIM_CLIENTSERVER" environment
+				variable is set, then Vim will interpret the
+				value just like the --clientserver argument.
+				If it is set and --clientserver is provided in
+				the command line, then --clientserver takes
+				priority.
 				{only available when compiled with both |+X11|
-				and |+socketserver| features}
-
+				and |+socketserver| features, or
+				|+socketserver| on MS-Windows}
 
 Examples ~
 
@@ -221,12 +228,16 @@ When using gvim, the --remote-wait only works properly this way: >
 <
 ==============================================================================
 4. Socket server specific items			    *socketserver-clientserver*
-				    *E1563* *E1564* *E1565* *E1566* *E1567*
+						    *E1564* *E1565* *E1566*
+
+NOTE: Vim version before patch 9.2.511 use a different socketserver backend
+which is incompatible with the new one, which is based on channels and JSON.
 
-The communication between client and server is done using Unix domain sockets.
-These sockets are either placed in these directories in the following order of
+The communication between client and server is done using channels internally.
+When using the traditional/generic clientserver naming (only available on
+Unix), sockets are placed in these directories in the following order of
 availability:
-    1. "$XDG_RUTIME_DIR/vim" if $XDG_RUNTIME_DIR is set in the environment.
+    1. "$XDG_RUNTIME_DIR/vim" if $XDG_RUNTIME_DIR is set in the environment.
     2. "$TMPDIR/vim-[uid]", where "[uid]" is the uid of the user.  This
        directory will have the access permissions set to 700 so only the user
        can read or write from/to it.  If $TMPDIR is not set, "/tmp" is used.
@@ -238,46 +249,56 @@ absolute or relative path.  If the server id starts with either a "/"
 Otherwise the server id will be the filename of the socket which will be
 placed in the above common directories.  Note that a server id/name can only
 contain slashes "/" if it is taken as a path, so names such as "abc/dir" will
-be invalid.
+be invalid.  This feature is only available on Unix.
+
+						    *socketserver-address*
+In addition, the socketserver can also be created as a |channel-address|. To
+do this, prefix the address with "channel:" (which will be ignored).  This is
+available on both Unix and MS-Windows, and is the only available naming for the
+socketserver backend on Windows.  However, note that |ch_listen()|
+restrictions apply, meaning only port numbers can be used for TCP sockets.
 
-Socket server functionality is available in both GTK GUI and terminal versions
-of Vim.  Unless Vim is compiled with |+autoservername| feature, the socket
-server will have to started explicitly, just like X11, even in the GUI.
+If the name is prefixed with "name:", then the legacy servername behaviour is
+used, so "name:VIM" is the same as "VIM".
+
+Unless Vim is compiled with |+autoservername| feature, the socket server will
+have to started explicitly, similar to X11. This is unless a X11 GUI Vim is
+being used.
 
 If Vim crashes or does not exit cleanly, the socket server will not remove the
 socket file and it will be left around.  This is generally not a problem,
 because if a socket name is taken, Vim checks if the socket in its place is
 dead (not attached to any process), and can replace it instead of finding a
-new name.
-
-To send commands to a Vim socket server from another application, read the
-source file src/os_unix.c, there is detailed description of the protocol used.
+new name.  This is only relevant for Unix.
 
 						    *socketserver-differences*
-Most of the functionality is the same as X11, however unlike X11, where the
-client does not need to be a server in order to communicate with another
-server, the socket server requires the server to be running even as a client.
-The exception is |serverlist()| or the |--serverlist| argument, which does not
-require the server to be running.
+Most of the functionality is the same as the other clientserver backends.
 
-Additionally, the server id or client id will not be a number like X11 or
+However, the server id or client id will not be a number like X11 or
 MS-Windows (shown in hex representation), instead it is the absolute path to
-the socket.  This can be seen via the |v:servername| variable.
+the socket.  This can be seen via the |v:servername| variable.  If the name is
+a channel address, then it will be the address with the "a/" prefix as well.
+
+Note when using |--remote-wait|, the client id will look like "t/". This naming is specifically for this command, and attempting to use
+it as an address will fail.
 
-The |--serverlist| argument will act just like X11, however it only checks the
-given common directories above.  If a custom path is used for a socket, it
-will not be detected, such as a path either not in $XDG_RUNTIME_DIR or
-<$TMPDIR or /tmp>/vim of the |--serverlist| Vim process.
+If on Unix, the |--serverlist| argument will act just like X11, however it
+only checks the given common directories above.  If a custom path is used for
+a socket, it will not be detected, such as a path either not in
+$XDG_RUNTIME_DIR or <$TMPDIR or /tmp>/vim of the |--serverlist| Vim process.
+If on MS-Windows, then the |--serverlist| argument will output nothing.
 
-If you have both |+socketserver| and |+X11| compiled, you will need to add
-|--clientserver| set to "socket" in combination with |--serverlist| to list
-the available servers.  You cannot list both types of backends in one command.
+The |+socketserver| feature is automatically enabled when on Unix or
+MS-Windows, and the |+channel| feature is enabled
 
 						    *socketserver-x11*
-If Vim is compiled with both |+X11| and |+socketserver|, then deciding which
-backend to use is done at startup time, via the |--clientserver| argument.  By
-default if it is not specified, then X11 will be used.  A Vim instance using a
-socket server cannot communicate with one using X11.
+If Vim is compiled with |+socketserver| and another clientserver backend, then
+deciding which backend to use is done at startup time, via the
+|--clientserver| argument.  By default if it is not specified, then the native
+backend (X11 or MS-Window messages) will be used, if available.  A Vim
+instance using a socket server cannot communicate with one using another
+clientserver backend.
 
 ==============================================================================
 5. MacVim specific items				*macvim-clientserver*
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index d1b2012ced..95ccbb6687 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -1,7 +1,7 @@
-*repeat.txt*    For Vim version 9.1.  Last change: 2025 Oct 13
+*repeat.txt*	For Vim version 9.2.  Last change: 2026 May 31
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Repeating commands, Vim scripts and debugging			*repeating*
@@ -328,6 +328,12 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
 			you will need to write `filetype plugin indent on`
 			AFTER all `packadd!` commands.
 
+			To programmatically decide if `!` is needed during
+			startup, check |v:vim_did_init|: use `!` if 0 (to not
+			duplicate |load-plugins| step), no `!` otherwise (to
+			force load plugin files as otherwise they won't be
+			loaded automatically).
+
 			Also see |pack-add|.
 			{only available when compiled with |+eval|}
 
@@ -448,6 +454,9 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
 			nested ":try"s in the script.  The outermost ":endtry"
 			then stops sourcing the script.
 
+			In |Vim9| script `:finish` cannot be shortened, to
+			improve script readability.
+
 All commands and command sequences can be repeated by putting them in a named
 register and then executing it.  There are two ways to get the commands in the
 register:
@@ -1214,7 +1223,8 @@ Additionally, these commands can be used:
 							*>bt*
 							*>backtrace*
 							*>where*
-	backtrace	Show the call stacktrace for current debugging session.
+	backtrace	Show the call stacktrace for current debugging
+			session.
 	bt
 	where
 							*>frame*
diff --git a/runtime/doc/rileft.txt b/runtime/doc/rileft.txt
index 8589bb6a35..206951f8b4 100644
--- a/runtime/doc/rileft.txt
+++ b/runtime/doc/rileft.txt
@@ -1,7 +1,7 @@
-*rileft.txt*    For Vim version 9.1.  Last change: 2022 Oct 12
+*rileft.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Avner Lottem
+		  VIM REFERENCE MANUAL	  by Avner Lottem
 					  updated by Nadim Shaikli
 
 
diff --git a/runtime/doc/russian.txt b/runtime/doc/russian.txt
index bf6493d5e3..97d045636d 100644
--- a/runtime/doc/russian.txt
+++ b/runtime/doc/russian.txt
@@ -1,7 +1,7 @@
-*russian.txt*   For Vim version 9.1.  Last change: 2006 Apr 24
+*russian.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Vassily Ragosin
+		  VIM REFERENCE MANUAL	  by Vassily Ragosin
 
 
 Russian language localization and support in Vim	   *russian* *Russian*
@@ -11,13 +11,13 @@ Russian language localization and support in Vim	   *russian* *Russian*
 3. Localization				  |russian-l18n|
 4. Known issues				  |russian-issues|
 
-===============================================================================
+==============================================================================
 1. Introduction							*russian-intro*
 
 Russian language is supported perfectly well in Vim.  You can type and view
 Russian text just as any other, without the need to tweak the settings.
 
-===============================================================================
+==============================================================================
 2. Russian keymaps					       *russian-keymap*
 
 To switch between languages you can use your system native keyboard switcher,
@@ -41,7 +41,7 @@ This is in utf-8, you cannot read this if your 'encoding' is not utf-8.
 You have to type this command in one line, it is wrapped for the sake of
 readability.
 
-===============================================================================
+==============================================================================
 3. Localization							 *russian-l18n*
 
 If you wish to use messages, help files, menus and other items translated to
@@ -60,7 +60,7 @@ $VIMRUNTIME directory.  We recommend using UTF-8 archive.
 In order to use the Russian documentation, make sure you have set the
 'helplang' option to "ru".
 
-===============================================================================
+==============================================================================
 4. Known issues						       *russian-issues*
 
 -- If you are using Russian message translations in Win32 console, then
@@ -69,5 +69,5 @@ In order to use the Russian documentation, make sure you have set the
    is related to a bug in GNU gettext library and may be fixed in the future
    releases of gettext.
 
-===============================================================================
+==============================================================================
  vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/scroll.txt b/runtime/doc/scroll.txt
index f0ec16b6f8..63d0beed9a 100644
--- a/runtime/doc/scroll.txt
+++ b/runtime/doc/scroll.txt
@@ -1,7 +1,7 @@
-*scroll.txt*    For Vim version 9.1.  Last change: 2024 Jul 06
+*scroll.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Scrolling						*scrolling*
diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt
index f49f74e944..22233efb45 100644
--- a/runtime/doc/sign.txt
+++ b/runtime/doc/sign.txt
@@ -1,7 +1,7 @@
-*sign.txt*      For Vim version 9.1.  Last change: 2025 Oct 12
+*sign.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Gordon Prieur
+		  VIM REFERENCE MANUAL	  by Gordon Prieur
 					  and Bram Moolenaar
 
 
diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt
index 579dce413b..774f0777c3 100644
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 9.1.  Last change: 2025 Oct 12
+*spell.txt*	For Vim version 9.2.  Last change: 2026 May 23
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -516,10 +516,6 @@ The older, OpenOffice 2 files may be used if this doesn't work:
 You can also use a plain word list.  The results are the same, the choice
 depends on what word lists you can find.
 
-If you install Aap (from www.a-a-p.org) you can use the recipes in the
-runtime/spell/??/ directories.  Aap will take care of downloading the files,
-apply patches needed for Vim and build the .spl file.
-
 Make sure your current locale is set properly, otherwise Vim doesn't know what
 characters are upper/lower case letters.  If the locale isn't available (e.g.,
 when using an MS-Windows codepage on Unix) add tables to the .aff file
@@ -566,6 +562,11 @@ then Vim will try to guess.
 			avoid running out of memory compression will be done
 			now and then.  This can be tuned with the 'mkspellmem'
 			option.
+								*E1578*
+			There is a limit on how many postponed prefix and
+			compound flags can be stored for one word.  Reduce the
+			number of affix/compound flags on a word in the .dic
+			file that exceeds it.
 
 			After the spell file was written and it was being used
 			in a buffer it will be reloaded automatically.
diff --git a/runtime/doc/sponsor.txt b/runtime/doc/sponsor.txt
index 8a35e29849..781a9a2568 100644
--- a/runtime/doc/sponsor.txt
+++ b/runtime/doc/sponsor.txt
@@ -1,7 +1,7 @@
-*sponsor.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*sponsor.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 
@@ -28,30 +28,6 @@ If you would like to support MacVim development itself, visit:
 	https://github.com/sponsors/macvim-dev
 
 
-REGISTERED VIM USER						*register*
-
-You can become a registered Vim user by sending at least 10 euro.  This works
-similar to sponsoring Vim, see |sponsor| above.  Registration was made
-possible for the situation where your boss or bookkeeper may be willing to
-register software, but does not like the terms "sponsoring" and "donation".
-
-More explanations can be found in the |register-faq|.
-
-
-VOTE FOR FEATURES					*vote-for-features*
-
-Note: Voting for features has been discontinued since the passing of |Bram| in
-2023.  The following two links still work, but they are no longer updated.  So
-they now only provide a historic view as of summer 2023.
-
-The voting results appear on the results page, which is visible for everybody:
-http://www.vim.org/sponsor/vote_results.php
-
-Additionally, once you have sent 100 euro or more in total, your name appears
-in the "Vim hall of honour":   http://www.vim.org/sponsor/hall_of_honour.php
-But only if you enable this on your account page.
-
-
 HOW TO SEND MONEY						*send-money*
 
 Credit card	Through PayPal, see the PayPal site for information:
@@ -64,77 +40,45 @@ Credit card	Through PayPal, see the PayPal site for information:
 		In Euro countries a bank transfer is preferred, this has lower
 		costs.
 
-Other methods	See |iccf-donations|.
+Other methods	See |donate|.
 		Include "Vim sponsor" or "Vim registration" in the comment of
 		your money transfer.
 
 
 QUESTIONS AND ANSWERS				*sponsor-faq* *register-faq*
 
-Why should I give money?
+Why should I give money?~
 
 If you do not show your appreciation for Vim, the development team will be
 less motivated to fix bugs and add new features.  They will do something else
 instead.
 
 
-How much money should I send?
+How much money should I send?~
 
 That is up to you.  The more you give, the more children will be helped.
 An indication for individuals that use Vim at home: 10 Euro per year.  For
 professional use: 30 Euro per year per person.
 
 
-How do I become a Vim sponsor or registered Vim user?
-
-Send money, as explained above |send-money| and include your e-mail address.
-When the money has been received you will receive a unique registration key.
-This key can be used on the Vim website to get an extra page where you can
-choose whether others will be able to see that you donated.  There is a link
-to this page on your "My Account" page.
-
-
-What is the difference between sponsoring and registering?
-
-It has a different name.  Use the term "registration" if your boss doesn't
-like "sponsoring" or "donation".  The benefits are the same.
-
-
-How can I send money?
+How can I send money?~
 
 See |send-money|.  Check the web site for the most recent information:
 http://www.vim.org/sponsor/
 
 
-Why don't you use the SourceForge donation system?
-
-SourceForge takes 5% of the donations for themselves.  If you want to support
-SourceForge you can send money to them directly.
-
-
-I cannot afford to send money, may I still use Vim?
-
-Yes.
-
-
-I did not register Vim, can I use all available features?
+I cannot afford to send money, may I still use Vim?~
 
 Yes.
 
 
-I noticed a bug, do I need to register before I can report it?
-
-No, suggestions for improving Vim can always be given.  For improvements use
-the developer |maillist|, for reporting bugs see |bugs|.
-
-
-How about Charityware?
+How about Charityware?~
 
 Currently the Vim donations go to |uganda| anyway.  Thus it doesn't matter if
-you sponsor Vim or ICCF.
+you sponsor Vim or Kuwasha.
 
 
-I donated $$$, now please add feature XYZ!
+I donated $$$, now please add feature XYZ!~
 
 There is no direct relation between your donation and the work developers do.
 Otherwise you would be paying for work and we would have to pay tax over the
@@ -142,15 +86,12 @@ donation.  If you want to hire one of the developers for specific work,
 contact them directly, don't use the donation system.
 
 
-Are the donations tax deductible?
+Are the donations tax deductible?~
 
-That depends on your country.  The donations to help the children in |Uganda|
-are tax deductible in Holland, Germany, Canada and in the USA.  See the ICCF
-website https://iccf-holland.org/donate.html (Note: this process is currently
-undergoing some changes and will be done differently in the future).
+Possibly.  Please refer to |Kuwasha| for this question.
 
 
-Can you send me a bill?
+Can you send me a bill?~
 
 No, because there is no relation between the money you send and the work that
 is done.  But a receipt is possible.
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index 70e4875633..48945985e6 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -1,7 +1,7 @@
-*starting.txt*  For Vim version 9.1.  Last change: 2025 Oct 12
+*starting.txt*	For Vim version 9.2.  Last change: 2026 Jun 02
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Starting Vim						*starting*
@@ -252,7 +252,8 @@ a slash.  Thus "-R" means recovery and "-/R" readonly.
 		":sh", filtering, the |system()| function, backtick expansion
 		and libcall().
 		Also disallowed are |delete()|, |rename()|, |mkdir()|,
-		|job_start()|, |setenv()| etc.
+		|job_start()|, |setenv()| and setting environment variables,
+		etc.
 		Interfaces, such as Python, Ruby and Lua, are also disabled,
 		since they could be used to execute shell commands.  Perl uses
 		the Safe module.
@@ -641,6 +642,12 @@ a slash.  Thus "-R" means recovery and "-/R" readonly.
 		of the output is: >
 			WID: 12345\n
 
+--display {display}					*--display*
+		Run Vim on {display}, connecting to that X server instead of
+		the one in $DISPLAY.  The "--display" long form is accepted
+		only by the GTK+ 2 or GTK+ 3 GUI, see also |-display|.
+		{only available with the |+xterm_clipboard| feature}
+
 --role {role}						*--role*
 		GTK+ 2 GUI only.  Set the role of the main window to {role}.
 		The window role can be used by a window manager to uniquely
@@ -843,6 +850,9 @@ accordingly.  Vim proceeds in this order:
 	If Vim was started in Ex mode with the "-s" argument, all following
 	initializations until 4. are skipped.  Only the "-u" option is
 	interpreted.
+
+	The |v:vim_did_init| variable is set to 1 after this step is finished.
+
 							*evim.vim*
      a. If Vim was started as |evim| or |eview| or with the |-y| argument, the
 	script $VIMRUNTIME/evim.vim will be loaded.
@@ -888,8 +898,8 @@ accordingly.  Vim proceeds in this order:
 	III The environment variable EXINIT.
 	    The value of $EXINIT is used as an Ex command line.
 	IV  The user exrc file(s).  Same as for the user vimrc file, but with
-	    "vimrc" replaced by "exrc".  But only one of ".exrc" and "_exrc" is
-	    used, depending on the system.  And without the (*)!
+	    "vimrc" replaced by "exrc".  But only one of ".exrc" and "_exrc"
+	    is used, depending on the system.  And without the (*)!
 	V   The default vimrc file, $VIMRUNTIME/defaults.vim.  This sets up
 	    options values and has "syntax on" and "filetype on" commands,
 	    which is what most new users will want.  See |defaults.vim|.
@@ -1123,8 +1133,13 @@ This is not an exhaustive list of those directories:
   `$XDG_DATA_HOME`	$HOME/.local/share	Persistent data files
   `$XDG_STATE_HOME`	$HOME/.local/state	State data files
 
-Vim will only use the `$XDG_CONFIG_HOME` directory, the others are not
-(yet) used for its various configuration and state files.
+							*xdg.vim*
+Vim itself will only use the $XDG_CONFIG_HOME directory.  Support for the
+other XDG directories is provided by the "$VIMRUNTIME/xdg.vim" script.
+Note: xdg.vim is only effective if the $XDG_CONFIG_HOME/vim directory (or
+its default fallback) exists.  By default, it only sets the 'viminfofile'
+option.  Other option settings are commented out, see the script for
+details on how to enable them.
 
 							*xdg-vimrc*
 Vim, on Unix systems, will look at `$XDG_CONFIG_HOME/vim/vimrc` for its
@@ -1138,7 +1153,8 @@ and `~/.vim/vimrc` file.
 When the |xdg-vimrc| is used the 'runtimepath' and 'packpath' options will be
 modified accordingly to respect the |xdg-base-dir|: >
 
-    "$XDG_CONFIG_HOME/vim,$VIMRUNTIME,/after,$XDG_CONFIG_HOME/vim/after"
+  "$XDG_CONFIG_HOME/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,
+   $XDG_CONFIG_HOME/vim/after"
 <
 
 Avoiding trojan horses ~
@@ -1285,7 +1301,7 @@ CTRL-Z			Suspend Vim, like ":stop".
 			Works in Normal and in Visual mode.  In Insert and
 			Command-line mode, the CTRL-Z is inserted as a normal
 			character.  In Visual mode Vim goes back to Normal
-			mode.
+			mode before suspending.
 			Note: if CTRL-Z undoes a change see |mswin.vim|.
 
 
@@ -1460,8 +1476,8 @@ This saves the current Session, and starts off the command to load another.
 A session includes all tab pages, unless "tabpages" was removed from
 'sessionoptions'. |tab-page|
 
-The |SessionLoadPost| autocmd event is triggered after a session file is
-loaded/sourced.
+The |SessionLoadPre| autocmd event is triggered before a session file is
+loaded/sourced and |SessionLoadPost| autocmd event is triggered after.
 						*SessionLoad-variable*
 While the session file is loading, the SessionLoad global variable is set to
 1.  Plugins can use this to postpone some work until the SessionLoadPost event
@@ -1564,6 +1580,24 @@ Session.  You could have several Session files, one for each project you are
 working on.  Viminfo and Session files together can be used to effectively
 enter Vim and directly start working in your desired setup. |session-file|
 
+							*viminfo-security*
+A viminfo file written by Vim is plain text and contains Vim expressions for
+|List|, |Dictionary| and |Tuple| values.  When "!" is in 'viminfo' at the time
+Vim processes the file as a viminfo file, those expressions are evaluated.
+
+The default value of 'viminfo' does not include "!", so by default no
+expression evaluation happens.
+
+Opening a viminfo file in a buffer (e.g. with |:edit|) is harmless; Vim only
+displays the file contents.  The risk is letting Vim process an untrusted file
+through the viminfo machinery, which happens when:
+- |:rviminfo| is used on the file, or
+- 'viminfofile' is set to point at it, or
+- the file is placed at the path Vim already reads as viminfo
+  |viminfo-file-name|
+
+In any of those cases, do not have "!" in 'viminfo' if you do not trust it.
+
 							*viminfo-read*
 When Vim is started and the 'viminfo' option is non-empty, the contents of
 the viminfo file are read and the info can be used in the appropriate places.
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index b443efe538..f56a833de8 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 9.1.  Last change: 2025 Oct 14
+*syntax.txt*	For Vim version 9.2.  Last change: 2026 Jun 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -402,9 +402,8 @@ the desired value, or restored to their default by removing the variable using
 Remarks:
 - Some truly ancient browsers may not show the background colors.
 - From most browsers you can also print the file (in color)!
-- The latest TOhtml may actually work with older versions of Vim, but some
-  features such as conceal support will not function, and the colors may be
-  incorrect for an old Vim without GUI support compiled in.
+- Colors may be incorrect for Vim without GUI support compiled in.
+- The latest TOhtml requires Vim 9.1 or later.
 
 Here is an example how to run the script over all .c and .h files from a
 Unix shell: >
@@ -487,10 +486,10 @@ specifying each command separately.
 				    *hl-TOhtmlProgress* *TOhtml-progress-color*
 When displayed, the progress bar will show colored boxes along the statusline
 as the HTML conversion proceeds.  By default, the background color as the
-current "DiffDelete" highlight group is used.  If "DiffDelete" and "StatusLine"
-have the same background color, TOhtml will automatically adjust the color to
-differ.  If you do not like the automatically selected colors, you can define
-your own highlight colors for the progress bar.  Example: >
+current "DiffDelete" highlight group is used.  If "DiffDelete" and
+"StatusLine" have the same background color, TOhtml will automatically adjust
+the color to differ.  If you do not like the automatically selected colors,
+you can define your own highlight colors for the progress bar.  Example: >
 
 	hi TOhtmlProgress guifg=#c0ffee ctermbg=7
 <
@@ -615,9 +614,9 @@ browsers; the  tags get pasted with the text.
 
 When "fallback" (default value), the same  elements are generated for
 older browsers, but newer browsers (detected by CSS feature query) hide the
- elements and instead use generated content in an ::before pseudoelement
-to display the uncopyable text.  This method should work with the largest
-number of browsers, both old and new.
+ elements and instead use generated content in an ::before
+pseudoelement to display the uncopyable text.  This method should work with
+the largest number of browsers, both old and new.
 
 When "none", the  elements are not generated at all.  Only the
 generated-content method is used.  This means that old browsers, notably
@@ -849,6 +848,19 @@ ADA
 See |ft-ada-syntax|
 
 
+ALGOL 68					*algol68* *ft-algol68-syntax*
+
+This syntax file currently targets the Algol 68 Genie project using the
+default UPPER stropping regime.  It should also be usable in other
+environments using the UPPER stropping regime, though somewhat less complete.
+
+Highlighting can be further configured with the following variables.
+
+Variable			Highlight ~
+*algol68_no_preludes*		no prelude identifiers, procedures or
+				operators
+
+
 ANT						*ant.vim* *ft-ant-syntax*
 
 The ant syntax file provides syntax highlighting for javascript and python
@@ -1125,6 +1137,7 @@ new-generation language oriented to full-scenario intelligence.
 All highlighting is enabled by default.  To disable highlighting for a
 specific group, set the corresponding variable to 0 in your |vimrc|.
 All options to disable highlighting are: >
+	:let g:cangjie_builtin_color = 0
 	:let g:cangjie_comment_color = 0
 	:let g:cangjie_identifier_color = 0
 	:let g:cangjie_keyword_color = 0
@@ -1247,6 +1260,8 @@ cpp_no_cpp11		don't highlight C++11 standard items
 cpp_no_cpp14		don't highlight C++14 standard items
 cpp_no_cpp17		don't highlight C++17 standard items
 cpp_no_cpp20		don't highlight C++20 standard items
+cpp_no_cpp23		don't highlight C++23 standard items
+cpp_no_cpp26		don't highlight C++26 standard items
 
 
 CSH						*csh.vim* *ft-csh-syntax*
@@ -1885,6 +1900,14 @@ The backticks for inline java are highlighted according to the htmlError
 group to make them easier to see.
 
 
+GDB						*gdb.vim* *ft-gdb-syntax*
+
+The GDB syntax file provides syntax |folding| (see |:syn-fold|) for comments
+and block statements. This can be enabled with: >
+
+	:set foldmethod=syntax
+
+
 GROFF						*groff.vim* *ft-groff-syntax*
 
 The groff syntax file is a wrapper for |nroff.vim|, see the notes
@@ -2276,11 +2299,11 @@ cycles for such a feature to become either integrated into the platform or
 withdrawn from this effort.  To cater for early adopters, there is optional
 support in Vim for syntax related preview features that are implemented.  You
 can request it by specifying a list of preview feature numbers as follows: >
-	:let g:java_syntax_previews = [507]
+	:let g:java_syntax_previews = [530]
 
 The supported JEP numbers are to be drawn from this table:
 	`430`: String Templates [JDK 21]
-	`507`: Primitive types in Patterns, instanceof, and switch
+	`530`: Primitive types in Patterns, instanceof, and switch
 
 Note that as soon as the particular preview feature will have been integrated
 into the Java platform, its entry will be removed from the table and related
@@ -2701,50 +2724,50 @@ If you don't want to highlight these errors, leave it unset.
 
 NROFF						*nroff.vim* *ft-nroff-syntax*
 
-The nroff syntax file works with AT&T n/troff out of the box.  You need to
-activate the GNU groff extra features included in the syntax file before you
-can use them.
-
-For example, Linux and BSD distributions use groff as their default text
-processing package.  In order to activate the extra syntax highlighting
-features for groff, arrange for files to be recognized as groff (see
+The nroff syntax file works with AT&T n/troff as-is.  To support GNU troff
+(groff), which Linux and BSD distributions use as their default typesetting
+package, arrange for files to be recognized as groff input (see
 |ft-groff-syntax|) or add the following option to your start-up files: >
 
   :let nroff_is_groff = 1
 
-Groff is different from the old AT&T n/troff that you may still find in
-Solaris.  Groff macro and request names can be longer than 2 characters and
-there are extensions to the language primitives.  For example, in AT&T troff
-you access the year as a 2-digit number with the request \(yr.  In groff you
-can use the same request, recognized for compatibility, or you can use groff's
-native syntax, \[yr].  Furthermore, you can use a 4-digit year directly:
-\[year].  Macro requests can be longer than 2 characters, for example, GNU mm
-accepts the requests ".VERBON" and ".VERBOFF" for creating verbatim
-environments.
+GNU troff differs from older AT&T n/troff programs (that you may still find in
+Solaris or Plan 9) by extending the *roff language syntax.  For example, in
+AT&T troff, you access the count of years since 1900 with the escape sequence
+\n(yr.  In groff you can do the same, which it recognizes for compatibility,
+or use groff's extended syntax, \n[yr].  AT&T troff documented the yr register
+as storing the "last two digits of current year", but had a Y2K problem; in
+groff, you can access the Gregorian year correctly: \n[year].  In groff, font,
+register, macro, string, and request names can exceed two characters; for
+example, with groff's mm package, the control lines ".VERBON" and ".VERBOFF"
+call macros of those names to bracket displays of "verbatim" content.
 
 In order to obtain the best formatted output g/troff can give you, you should
 follow a few simple rules about spacing and punctuation.
 
-1. Do not leave empty spaces at the end of lines.
+1. Break the line (put a carriage return) at the end of every sentence.  Don't
+   permit trailing spaces before the newline.
 
-2. Leave one space and one space only after an end-of-sentence period,
-   exclamation mark, etc.
+2. If a line ends with a period, question mark, or exclamation point that does
+   not end a sentence, follow it with the dummy character escape sequence \&.
 
-3. For reasons stated below, it is best to follow all period marks with a
-   carriage return.
+3. If you're using a macro package, employ its paragraphing macros to achieve
+   indentation of paragraphs and spacing between them.
 
-The reason behind these unusual tips is that g/n/troff have a line breaking
-algorithm that can be easily upset if you don't follow the rules given above.
+4. Use the empty request, a '.' on a line by itself, freely to visually
+   separate material for ease of document maintenance.
 
-Unlike TeX, troff fills text line-by-line, not paragraph-by-paragraph and,
-furthermore, it does not have a concept of glue or stretch, all horizontal and
-vertical space input will be output as is.
+The reason for these tips is that g/n/troff attempts to detect the ends of
+sentences, and can use that information to apply inter-sentence space.  Using
+them also minimizes the size of diffs where lines change due only to refilling
+in the text editor.  Macro packages typically employ inter-paragraph spacing
+amounts other than one vee (which is the result of a blank input line), and
+typically store that spacing amount, and that of paragraph indentation, in
+user-configurable registers so that pages lay out consistently.
 
-Therefore, you should be careful about not using more space between sentences
-than you intend to have in your final document.  For this reason, the common
-practice is to insert a carriage return immediately after all punctuation
-marks.  If you want to have "even" text in your final processed output, you
-need to maintain regular spacing in the input text.  To mark both trailing
+Unlike TeX, troff fills text line-by-line, not paragraph-by-paragraph.  If you
+desire consistent spacing between words and sentences in formatted output, you
+must maintain consistent spacing in the input text.  To mark both trailing
 spaces and two or more spaces after a punctuation as an error, use: >
 
   :let nroff_space_errors = 1
@@ -2764,11 +2787,11 @@ file: >
 
 	let b:preprocs_as_sections = 1
 
-As well, the syntax file adds an extra paragraph marker for the extended
-paragraph macro (.XP) in the ms package.
+Further, the syntax file adds an extra paragraph marker for the XP
+paragraphing macro in the ms package, a Berkeley and GNU extension.
 
-Finally, there is a |groff.vim| syntax file that can be used for enabling
-groff syntax highlighting either on a file basis or globally by default.
+Finally, there is a |groff.vim| syntax file that can be used to enable groff
+syntax highlighting either on a per-file basis or globally by default.
 
 
 OCAML						*ocaml.vim* *ft-ocaml-syntax*
@@ -3222,7 +3245,7 @@ Pascal.  Use this if you don't use assembly and Pascal: >
 
 PYTHON						*python.vim* *ft-python-syntax*
 
-There are six options to control Python syntax highlighting.
+There are seven options to control Python syntax highlighting.
 
 For highlighted numbers: >
 	:let python_no_number_highlight = 1
@@ -3242,10 +3265,13 @@ The first option implies the second one.
 For highlighted trailing whitespace and mix of spaces and tabs: >
 	:let python_space_error_highlight = 1
 
+For highlighted built-in constants distinguished from other keywords: >
+	:let python_constant_highlight = 1
+
 If you want all possible Python highlighting: >
 	:let python_highlight_all = 1
-This has the same effect as setting python_space_error_highlight and
-unsetting all the other ones.
+This has the same effect as setting python_space_error_highlight,
+python_constant_highlight and unsetting all the other ones.
 
 If you use Python 2 or straddling code (Python 2 and 3 compatible),
 you can enforce the use of an older syntax file with support for
@@ -4698,7 +4724,7 @@ the region, but not the contents of the region, are marked as concealable.
 Whether or not they are actually concealed depends on the setting on the
 'conceallevel' option.  The ends of a region can only be concealed separately
 in this way when they have their own highlighting via "matchgroup".  The
-|synconcealed()| function can be used to retrieve information about conealed
+|synconcealed()| function can be used to retrieve information about concealed
 items.
 
 cchar							*:syn-cchar*
@@ -5966,7 +5992,14 @@ EndOfBuffer	Filler lines (~) after the last line in the buffer.
 							*hl-ErrorMsg*
 ErrorMsg	Error messages on the command line.
 							*hl-VertSplit*
-VertSplit	Column separating vertically split windows.
+VertSplit	Column separating vertically split windows that is adjacent
+		to the current window.  Drawn with the "vert" item of
+		'fillchars'.
+							*hl-VertSplitNC*
+VertSplitNC	Column separating vertically split windows where neither
+		adjacent window is the current window.  Drawn with the
+		"vert" item of 'fillchars'.
+		By default, highlighted like |hl-VertSplit|.
 							*hl-Folded*
 Folded		Line used for closed folds.
 							*hl-FoldColumn*
@@ -6044,6 +6077,18 @@ PmenuShadow	Popup menu: Used for shadow.
 ComplMatchIns	Matched text of the currently inserted completion.
 							*hl-PreInsert*
 PreInsert	Text inserted when "preinsert" is in 'completeopt'.
+							*hl-Popup*
+Popup		Popup window body, used when neither the popup's 'wincolor'
+		nor explicit "highlight" argument is set.  Linked to |hl-Pmenu|
+		by default.
+							*hl-PopupBorder*
+PopupBorder	Popup window border characters, used when "borderhighlight" is
+		not set and the popup's 'wincolor' is also not set.
+		Linked to |hl-Pmenu| by default.
+							*hl-PopupTitle*
+PopupTitle	Popup window title, used when "borderhighlight" is not set and
+		the popup's 'wincolor' is also not set.  Linked to
+		|hl-Pmenu| by default.
 							*hl-PopupSelected*
 PopupSelected	Popup window created with |popup_menu()|.  Linked to
 		|hl-PmenuSel| by default.
@@ -6082,16 +6127,23 @@ SpellRare	Word that is recognized by the spellchecker as one that is
 		hardly ever used. |spell|
 		This will be combined with the highlighting used otherwise.
 							*hl-StatusLine*
-StatusLine	Status line of current window.
+StatusLine	Status line of current window.  The highlight at the status
+		line's edge (StatusLine, or any %#... / %N* in 'statusline')
+		also extends into the adjacent vertical separator cell when
+		the status lines are connected (The "vert" in 'fillchars' is
+		not being drawn).
 							*hl-StatusLineNC*
-StatusLineNC	status lines of not-current windows
+StatusLineNC	status lines of not-current windows.  Like |hl-StatusLine|,
+		the edge highlight also extends into the adjacent vertical
+		separator cell.
 		Note: If this is equal to "StatusLine", Vim will use "^^^" in
 		the status line of the current window.
 							*hl-StatusLineTerm*
 StatusLineTerm	Status line of current window, if it is a |terminal| window.
 							*hl-StatusLineTermNC*
-StatusLineTermNC	Status lines of not-current windows that is a
-			|terminal| window.
+StatusLineTermNC
+		Status lines of not-current windows that is a |terminal|
+		window.
 							*hl-TabLine*
 TabLine		Tab pages line, not active tab page label.
 							*hl-TabLineFill*
@@ -6111,18 +6163,19 @@ Title		Titles for output from ":set all", ":autocmd" etc.
 							*hl-TitleBar*
 TitleBar	Title bar for the active Gui's window.
 		This feature is supported only in the MS-Windows GUI.
-		See |gui-w32-title-bar| for details
+		See |gui-w32-title-bar| for details.
 		Only the `guibg` and `guifg` highlight arguments are effective.
 							*hl-TitleBarNC*
 TitleBarNC	Title bar for inactive Gui's window.
 		This feature is supported only in the MS-Windows GUI.
-		See |gui-w32-title-bar| for details
+		See |gui-w32-title-bar| for details.
 		Only the `guibg` and `guifg` highlight arguments are effective.
 							*hl-Visual*
 Visual		Visual mode selection.
 							*hl-VisualNOS*
 VisualNOS	Visual mode selection when vim is "Not Owning the Selection".
-		Only X11 Gui's |gui-x11| and |xterm-clipboard| supports this.
+		Only X11 Gui's |gui-x11|, |xterm-clipboard| and
+		|wayland-selections| supports this.
 							*hl-WarningMsg*
 WarningMsg	Warning messages.
 							*hl-WildMenu*
@@ -6142,10 +6195,9 @@ Menu		Current font, background and foreground colors of the menus.
 		Also used for the toolbar.
 		Applicable highlight arguments: font, guibg, guifg.
 
-		NOTE: For Motif the font argument actually
-		specifies a fontset at all times, no matter if 'guifontset' is
-		empty, and as such it is tied to the current |:language| when
-		set.
+		NOTE: For Motif the font argument actually specifies a fontset
+		at all times, no matter if 'guifontset' is empty, and as such
+		it is tied to the current |:language| when set.
 
 							*hl-Scrollbar*
 Scrollbar	Current background and foreground of the main window's
@@ -6156,10 +6208,9 @@ Scrollbar	Current background and foreground of the main window's
 Tooltip		Current font, background and foreground of the tooltips.
 		Applicable highlight arguments: font, guibg, guifg.
 
-		NOTE: For Motif the font argument actually
-		specifies a fontset at all times, no matter if 'guifontset' is
-		empty, and as such it is tied to the current |:language| when
-		set.
+		NOTE: For Motif the font argument actually specifies a fontset
+		at all times, no matter if 'guifontset' is empty, and as such
+		it is tied to the current |:language| when set.
 
 ==============================================================================
 15. Linking groups		*:hi-link* *:highlight-link* *E412* *E413*
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt
index 590221bc36..1b6f781272 100644
--- a/runtime/doc/tabpage.txt
+++ b/runtime/doc/tabpage.txt
@@ -1,7 +1,7 @@
-*tabpage.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*tabpage.txt*	For Vim version 9.2.  Last change: 2026 May 04
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Editing with windows in multiple tab pages.		*tab-page* *tabpage*
@@ -482,6 +482,42 @@ The vertical separator character is taken from "tpl_vert" in 'fillchars'.
 You can customize the appearance of the tab page labels using the highlight
 groups: |hl-TabPanel| |hl-TabPanelSel| |hl-TabPanelFill|
 
+SCROLLING IN THE TABPANEL				*tabpanel-scroll*
+
+When the total height of the tab page list exceeds the visible screen height,
+mouse wheel events over the tabpanel area scroll the tab page list up or down.
+The scroll step follows the 'mousescroll' setting.  Wheel events inside the
+tabpanel area are consumed by the tabpanel and do not trigger
+|| or || mappings.
+
+The current tab page is always brought into view: when the selected tab page
+changes (by |gt|, |gT|, |:tabnext| etc.), the panel scrolls so the current
+entry is visible.
+
+To show a vertical scrollbar indicating the current scroll position, add
+"scrollbar" to 'tabpanelopt': >
+	:set tabpanelopt+=scrollbar
+
+A one-column scrollbar is always displayed at the right edge of the tabpanel,
+regardless of the "align:" setting in 'tabpanelopt'.  Clicking on the
+scrollbar column moves the thumb to the click position, and the thumb can be
+dragged to scroll continuously.
+
+The scrollbar uses the |hl-PmenuSbar| highlight group for the track and
+|hl-PmenuThumb| for the thumb.
+
+The scroll offset is remembered across redraws.
+
+MOUSE CLICKS IN THE TABPANEL				*tabpanel-mouse*
+
+A left click on a row in the tabpanel selects the tab page that the row
+belongs to.  Unlike the tabline, a double click in the tabpanel does not open
+a new, empty tab page; it is treated the same as a single click.
+
+For finer-grained control, the 'tabpanel' value may contain |stl-%[FuncName]|
+click regions.  Clicks on those regions are dispatched to the callback
+function instead of falling through to tab page selection.
+
 ==============================================================================
 6. Setting 'guitablabel'				*setting-guitablabel*
 
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 924e2bbb88..edeb9941ff 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -9,9 +9,11 @@ $HOME-windows	options.txt	/*$HOME-windows*
 $MYGVIMRC	gui.txt	/*$MYGVIMRC*
 $MYVIMDIR	starting.txt	/*$MYVIMDIR*
 $MYVIMRC	starting.txt	/*$MYVIMRC*
+$NoDefaultCurrentDirectoryInExePath	builtin.txt	/*$NoDefaultCurrentDirectoryInExePath*
 $VIM	starting.txt	/*$VIM*
 $VIM-use	version5.txt	/*$VIM-use*
 $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
+$VIM_CLIENTSERVER	remote.txt	/*$VIM_CLIENTSERVER*
 $VIM_POSIX	vi_diff.txt	/*$VIM_POSIX*
 $XDG_CONFIG_HOME	starting.txt	/*$XDG_CONFIG_HOME*
 $quote	eval.txt	/*$quote*
@@ -384,6 +386,7 @@ $quote	eval.txt	/*$quote*
 'go-m'	options.txt	/*'go-m'*
 'go-p'	options.txt	/*'go-p'*
 'go-r'	options.txt	/*'go-r'*
+'go-s'	options.txt	/*'go-s'*
 'go-t'	options.txt	/*'go-t'*
 'go-v'	options.txt	/*'go-v'*
 'gp'	options.txt	/*'gp'*
@@ -457,8 +460,6 @@ $quote	eval.txt	/*$quote*
 'infercase'	options.txt	/*'infercase'*
 'insertmode'	options.txt	/*'insertmode'*
 'is'	options.txt	/*'is'*
-'ise'	options.txt	/*'ise'*
-'isexpand'	options.txt	/*'isexpand'*
 'isf'	options.txt	/*'isf'*
 'isfname'	options.txt	/*'isfname'*
 'isi'	options.txt	/*'isi'*
@@ -542,6 +543,7 @@ $quote	eval.txt	/*$quote*
 'ml'	options.txt	/*'ml'*
 'mle'	options.txt	/*'mle'*
 'mls'	options.txt	/*'mls'*
+'mlst'	options.txt	/*'mlst'*
 'mm'	options.txt	/*'mm'*
 'mmd'	options.txt	/*'mmd'*
 'mmp'	options.txt	/*'mmp'*
@@ -551,6 +553,7 @@ $quote	eval.txt	/*$quote*
 'modeline'	options.txt	/*'modeline'*
 'modelineexpr'	options.txt	/*'modelineexpr'*
 'modelines'	options.txt	/*'modelines'*
+'modelinestrict'	options.txt	/*'modelinestrict'*
 'modifiable'	options.txt	/*'modifiable'*
 'modified'	options.txt	/*'modified'*
 'mopt'	options.txt	/*'mopt'*
@@ -723,10 +726,12 @@ $quote	eval.txt	/*$quote*
 'nomh'	options.txt	/*'nomh'*
 'noml'	options.txt	/*'noml'*
 'nomle'	options.txt	/*'nomle'*
+'nomlst'	options.txt	/*'nomlst'*
 'nommta'	options.txt	/*'nommta'*
 'nomod'	options.txt	/*'nomod'*
 'nomodeline'	options.txt	/*'nomodeline'*
 'nomodelineexpr'	options.txt	/*'nomodelineexpr'*
+'nomodelinestrict'	options.txt	/*'nomodelinestrict'*
 'nomodifiable'	options.txt	/*'nomodifiable'*
 'nomodified'	options.txt	/*'nomodified'*
 'nomore'	options.txt	/*'nomore'*
@@ -799,6 +804,7 @@ $quote	eval.txt	/*$quote*
 'nota'	options.txt	/*'nota'*
 'notagbsearch'	options.txt	/*'notagbsearch'*
 'notagrelative'	options.txt	/*'notagrelative'*
+'notagsecure'	options.txt	/*'notagsecure'*
 'notagstack'	options.txt	/*'notagstack'*
 'notbi'	options.txt	/*'notbi'*
 'notbidi'	options.txt	/*'notbidi'*
@@ -817,6 +823,7 @@ $quote	eval.txt	/*$quote*
 'noto'	options.txt	/*'noto'*
 'notop'	options.txt	/*'notop'*
 'notr'	options.txt	/*'notr'*
+'notsc'	options.txt	/*'notsc'*
 'nottimeout'	options.txt	/*'nottimeout'*
 'nottybuiltin'	options.txt	/*'nottybuiltin'*
 'nottyfast'	options.txt	/*'nottyfast'*
@@ -909,6 +916,7 @@ $quote	eval.txt	/*$quote*
 'pumborder'	options.txt	/*'pumborder'*
 'pumheight'	options.txt	/*'pumheight'*
 'pummaxwidth'	options.txt	/*'pummaxwidth'*
+'pumopt'	options.txt	/*'pumopt'*
 'pumwidth'	options.txt	/*'pumwidth'*
 'pvh'	options.txt	/*'pvh'*
 'pvp'	options.txt	/*'pvp'*
@@ -966,6 +974,7 @@ $quote	eval.txt	/*$quote*
 'scrollfocus'	options.txt	/*'scrollfocus'*
 'scrolljump'	options.txt	/*'scrolljump'*
 'scrolloff'	options.txt	/*'scrolloff'*
+'scrolloffpad'	options.txt	/*'scrolloffpad'*
 'scrollopt'	options.txt	/*'scrollopt'*
 'scs'	options.txt	/*'scs'*
 'sect'	options.txt	/*'sect'*
@@ -1024,6 +1033,7 @@ $quote	eval.txt	/*$quote*
 'so'	options.txt	/*'so'*
 'softtabstop'	options.txt	/*'softtabstop'*
 'sol'	options.txt	/*'sol'*
+'sop'	options.txt	/*'sop'*
 'sourceany'	vi_diff.txt	/*'sourceany'*
 'sp'	options.txt	/*'sp'*
 'spc'	options.txt	/*'spc'*
@@ -1052,7 +1062,9 @@ $quote	eval.txt	/*$quote*
 'stal'	options.txt	/*'stal'*
 'startofline'	options.txt	/*'startofline'*
 'statusline'	options.txt	/*'statusline'*
+'statuslineopt'	options.txt	/*'statuslineopt'*
 'stl'	options.txt	/*'stl'*
+'stlo'	options.txt	/*'stlo'*
 'stmp'	options.txt	/*'stmp'*
 'stpl'	options.txt	/*'stpl'*
 'sts'	options.txt	/*'sts'*
@@ -1087,6 +1099,7 @@ $quote	eval.txt	/*$quote*
 't_AU'	term.txt	/*'t_AU'*
 't_BD'	term.txt	/*'t_BD'*
 't_BE'	term.txt	/*'t_BE'*
+'t_BS'	term.txt	/*'t_BS'*
 't_CF'	term.txt	/*'t_CF'*
 't_CS'	term.txt	/*'t_CS'*
 't_CV'	term.txt	/*'t_CV'*
@@ -1097,6 +1110,7 @@ $quote	eval.txt	/*$quote*
 't_Ds'	term.txt	/*'t_Ds'*
 't_EC'	term.txt	/*'t_EC'*
 't_EI'	term.txt	/*'t_EI'*
+'t_ES'	term.txt	/*'t_ES'*
 't_F1'	term.txt	/*'t_F1'*
 't_F2'	term.txt	/*'t_F2'*
 't_F3'	term.txt	/*'t_F3'*
@@ -1236,6 +1250,7 @@ $quote	eval.txt	/*$quote*
 'taglength'	options.txt	/*'taglength'*
 'tagrelative'	options.txt	/*'tagrelative'*
 'tags'	options.txt	/*'tags'*
+'tagsecure'	options.txt	/*'tagsecure'*
 'tagstack'	options.txt	/*'tagstack'*
 'tal'	options.txt	/*'tal'*
 'tb'	options.txt	/*'tb'*
@@ -1251,6 +1266,8 @@ $quote	eval.txt	/*$quote*
 'termbidi'	options.txt	/*'termbidi'*
 'termencoding'	options.txt	/*'termencoding'*
 'termguicolors'	options.txt	/*'termguicolors'*
+'termresize'	options.txt	/*'termresize'*
+'termsync'	options.txt	/*'termsync'*
 'termwinkey'	options.txt	/*'termwinkey'*
 'termwinscroll'	options.txt	/*'termwinscroll'*
 'termwinsize'	options.txt	/*'termwinsize'*
@@ -1284,10 +1301,13 @@ $quote	eval.txt	/*$quote*
 'tr'	options.txt	/*'tr'*
 'transp'	options.txt	/*'transp'*
 'transparency'	options.txt	/*'transparency'*
+'trz'	options.txt	/*'trz'*
 'ts'	options.txt	/*'ts'*
+'tsc'	options.txt	/*'tsc'*
 'tsl'	options.txt	/*'tsl'*
 'tsr'	options.txt	/*'tsr'*
 'tsrfu'	options.txt	/*'tsrfu'*
+'tsy'	options.txt	/*'tsy'*
 'ttimeout'	options.txt	/*'ttimeout'*
 'ttimeoutlen'	options.txt	/*'ttimeoutlen'*
 'ttm'	options.txt	/*'ttm'*
@@ -1353,6 +1373,7 @@ $quote	eval.txt	/*$quote*
 'wfw'	options.txt	/*'wfw'*
 'wh'	options.txt	/*'wh'*
 'whichwrap'	options.txt	/*'whichwrap'*
+'whl'	options.txt	/*'whl'*
 'wi'	options.txt	/*'wi'*
 'wic'	options.txt	/*'wic'*
 'wig'	options.txt	/*'wig'*
@@ -1371,6 +1392,7 @@ $quote	eval.txt	/*$quote*
 'winfixheight'	options.txt	/*'winfixheight'*
 'winfixwidth'	options.txt	/*'winfixwidth'*
 'winheight'	options.txt	/*'winheight'*
+'winhighlight'	options.txt	/*'winhighlight'*
 'winminheight'	options.txt	/*'winminheight'*
 'winminwidth'	options.txt	/*'winminwidth'*
 'winptydll'	options.txt	/*'winptydll'*
@@ -1431,6 +1453,7 @@ $quote	eval.txt	/*$quote*
 +cindent	various.txt	/*+cindent*
 +clientserver	various.txt	/*+clientserver*
 +clipboard	various.txt	/*+clipboard*
++clipboard_provider	various.txt	/*+clipboard_provider*
 +clipboard_working	various.txt	/*+clipboard_working*
 +cmd	editing.txt	/*+cmd*
 +cmdline_compl	various.txt	/*+cmdline_compl*
@@ -1468,6 +1491,12 @@ $quote	eval.txt	/*$quote*
 +hangul_input	various.txt	/*+hangul_input*
 +iconv	various.txt	/*+iconv*
 +iconv/dyn	various.txt	/*+iconv\/dyn*
++image	various.txt	/*+image*
++image_cairo	various.txt	/*+image_cairo*
++image_gdi	various.txt	/*+image_gdi*
++image_gdk	various.txt	/*+image_gdk*
++image_kitty	various.txt	/*+image_kitty*
++image_sixel	various.txt	/*+image_sixel*
 +insert_expand	various.txt	/*+insert_expand*
 +ipv6	various.txt	/*+ipv6*
 +job	various.txt	/*+job*
@@ -1567,7 +1596,6 @@ $quote	eval.txt	/*$quote*
 +vtp	various.txt	/*+vtp*
 +wayland	various.txt	/*+wayland*
 +wayland_clipboard	various.txt	/*+wayland_clipboard*
-+wayland_focus_steal	various.txt	/*+wayland_focus_steal*
 +wildignore	various.txt	/*+wildignore*
 +wildmenu	various.txt	/*+wildmenu*
 +windows	various.txt	/*+windows*
@@ -1593,6 +1621,7 @@ $quote	eval.txt	/*$quote*
 --clean	starting.txt	/*--clean*
 --clientserver	remote.txt	/*--clientserver*
 --cmd	starting.txt	/*--cmd*
+--display	starting.txt	/*--display*
 --echo-wid	starting.txt	/*--echo-wid*
 --gui-dialog-file	starting.txt	/*--gui-dialog-file*
 --help	starting.txt	/*--help*
@@ -2519,6 +2548,7 @@ $quote	eval.txt	/*$quote*
 :command-bar	map.txt	/*:command-bar*
 :command-buffer	map.txt	/*:command-buffer*
 :command-complete	map.txt	/*:command-complete*
+:command-completeopt	map.txt	/*:command-completeopt*
 :command-completion	map.txt	/*:command-completion*
 :command-completion-custom	map.txt	/*:command-completion-custom*
 :command-completion-customlist	map.txt	/*:command-completion-customlist*
@@ -3879,6 +3909,7 @@ $quote	eval.txt	/*$quote*
 	motion.txt	/**
 	map.txt	/**
 	intro.txt	/**
+	intro.txt	/**
 	scroll.txt	/**
 	scroll.txt	/**
 	map.txt	/**
@@ -4003,6 +4034,7 @@ $quote	eval.txt	/*$quote*
 	term.txt	/**
 -xterm	term.txt	/*-xterm*
 	term.txt	/**
+	intro.txt	/**
 	term.txt	/**
 	term.txt	/**
 =	change.txt	/*=*
@@ -4592,12 +4624,9 @@ E1315	vim9class.txt	/*E1315*
 E1316	vim9class.txt	/*E1316*
 E1317	vim9class.txt	/*E1317*
 E1318	vim9class.txt	/*E1318*
-E1319	eval.txt	/*E1319*
 E132	userfunc.txt	/*E132*
 E1320	eval.txt	/*E1320*
-E1321	eval.txt	/*E1321*
 E1322	eval.txt	/*E1322*
-E1323	eval.txt	/*E1323*
 E1324	eval.txt	/*E1324*
 E1325	vim9class.txt	/*E1325*
 E1326	vim9class.txt	/*E1326*
@@ -4613,7 +4642,6 @@ E1335	vim9class.txt	/*E1335*
 E1336	options.txt	/*E1336*
 E1337	vim9class.txt	/*E1337*
 E1338	vim9class.txt	/*E1338*
-E1339	textprop.txt	/*E1339*
 E134	change.txt	/*E134*
 E1340	vim9class.txt	/*E1340*
 E1341	vim9class.txt	/*E1341*
@@ -4675,15 +4703,12 @@ E1391	eval.txt	/*E1391*
 E1392	eval.txt	/*E1392*
 E1393	vim9class.txt	/*E1393*
 E1394	vim9class.txt	/*E1394*
-E1395	vim9class.txt	/*E1395*
+E1395	vim9.txt	/*E1395*
 E1396	vim9class.txt	/*E1396*
 E1397	vim9class.txt	/*E1397*
 E1398	vim9class.txt	/*E1398*
 E1399	vim9class.txt	/*E1399*
 E140	message.txt	/*E140*
-E1400	vim9class.txt	/*E1400*
-E1401	vim9class.txt	/*E1401*
-E1402	vim9class.txt	/*E1402*
 E1403	vim9class.txt	/*E1403*
 E1404	vim9class.txt	/*E1404*
 E1405	vim9class.txt	/*E1405*
@@ -4721,6 +4746,7 @@ E1433	vim9.txt	/*E1433*
 E1434	vim9.txt	/*E1434*
 E1435	vim9class.txt	/*E1435*
 E1436	vim9class.txt	/*E1436*
+E1437	eval.txt	/*E1437*
 E144	various.txt	/*E144*
 E145	starting.txt	/*E145*
 E146	change.txt	/*E146*
@@ -4798,14 +4824,21 @@ E156	sign.txt	/*E156*
 E1560	vim9.txt	/*E1560*
 E1561	vim9.txt	/*E1561*
 E1562	options.txt	/*E1562*
-E1563	remote.txt	/*E1563*
 E1564	remote.txt	/*E1564*
 E1565	remote.txt	/*E1565*
 E1566	remote.txt	/*E1566*
-E1567	remote.txt	/*E1567*
 E1568	options.txt	/*E1568*
 E1569	builtin.txt	/*E1569*
 E157	sign.txt	/*E157*
+E1570	builtin.txt	/*E1570*
+E1571	builtin.txt	/*E1571*
+E1572	options.txt	/*E1572*
+E1573	channel.txt	/*E1573*
+E1574	channel.txt	/*E1574*
+E1575	builtin.txt	/*E1575*
+E1576	tagsrch.txt	/*E1576*
+E1577	options.txt	/*E1577*
+E1578	spell.txt	/*E1578*
 E158	sign.txt	/*E158*
 E159	sign.txt	/*E159*
 E16	cmdline.txt	/*E16*
@@ -5295,7 +5328,6 @@ E610	editing.txt	/*E610*
 E611	eval.txt	/*E611*
 E612	sign.txt	/*E612*
 E613	print.txt	/*E613*
-E614	builtin.txt	/*E614*
 E616	builtin.txt	/*E616*
 E617	options.txt	/*E617*
 E618	print.txt	/*E618*
@@ -5332,6 +5364,7 @@ E645	netbeans.txt	/*E645*
 E646	netbeans.txt	/*E646*
 E647	netbeans.txt	/*E647*
 E648	netbeans.txt	/*E648*
+E649	netbeans.txt	/*E649*
 E65	pattern.txt	/*E65*
 E650	netbeans.txt	/*E650*
 E651	netbeans.txt	/*E651*
@@ -5794,6 +5827,7 @@ KVim	gui_x11.txt	/*KVim*
 KeyInputPre	autocmd.txt	/*KeyInputPre*
 Kibaale	uganda.txt	/*Kibaale*
 Korean	mbyte.txt	/*Korean*
+Kuwasha	uganda.txt	/*Kuwasha*
 L	motion.txt	/*L*
 Linux-backspace	options.txt	/*Linux-backspace*
 List	eval.txt	/*List*
@@ -5873,7 +5907,6 @@ Neovim	intro.txt	/*Neovim*
 NetBSD-backspace	options.txt	/*NetBSD-backspace*
 NetBeans	netbeans.txt	/*NetBeans*
 NetUserPass()	pi_netrw.txt	/*NetUserPass()*
-NoDefaultCurrentDirectoryInExePath	builtin.txt	/*NoDefaultCurrentDirectoryInExePath*
 None	eval.txt	/*None*
 Normal	intro.txt	/*Normal*
 Normal-mode	intro.txt	/*Normal-mode*
@@ -5989,6 +6022,7 @@ Select-mode-mapping	visual.txt	/*Select-mode-mapping*
 Session	starting.txt	/*Session*
 SessionLoad-variable	starting.txt	/*SessionLoad-variable*
 SessionLoadPost	autocmd.txt	/*SessionLoadPost*
+SessionLoadPre	autocmd.txt	/*SessionLoadPre*
 SessionWritePost	autocmd.txt	/*SessionWritePost*
 ShellCmdPost	autocmd.txt	/*ShellCmdPost*
 ShellFilterPost	autocmd.txt	/*ShellFilterPost*
@@ -6040,6 +6074,8 @@ TextChanged	autocmd.txt	/*TextChanged*
 TextChangedI	autocmd.txt	/*TextChangedI*
 TextChangedP	autocmd.txt	/*TextChangedP*
 TextChangedT	autocmd.txt	/*TextChangedT*
+TextPutPost	autocmd.txt	/*TextPutPost*
+TextPutPre	autocmd.txt	/*TextPutPre*
 TextYankPost	autocmd.txt	/*TextYankPost*
 Transact-SQL	ft_sql.txt	/*Transact-SQL*
 Tuple	eval.txt	/*Tuple*
@@ -6294,6 +6330,7 @@ added-8.1	version8.txt	/*added-8.1*
 added-8.2	version8.txt	/*added-8.2*
 added-9.1	version9.txt	/*added-9.1*
 added-9.2	version9.txt	/*added-9.2*
+added-9.3	version9.txt	/*added-9.3*
 added-BeOS	version5.txt	/*added-BeOS*
 added-Mac	version5.txt	/*added-Mac*
 added-VMS	version5.txt	/*added-VMS*
@@ -6305,12 +6342,15 @@ added-win32-GUI	version5.txt	/*added-win32-GUI*
 aff-dic-format	spell.txt	/*aff-dic-format*
 after-directory	options.txt	/*after-directory*
 aleph	options.txt	/*aleph*
+algol68	syntax.txt	/*algol68*
+algol68_no_preludes	syntax.txt	/*algol68_no_preludes*
 alt	intro.txt	/*alt*
 alt-input	debugger.txt	/*alt-input*
 alt-movement	gui_mac.txt	/*alt-movement*
 alternate-file	editing.txt	/*alternate-file*
 amiga-window	starting.txt	/*amiga-window*
 and()	builtin.txt	/*and()*
+android	builtin.txt	/*android*
 anonymous-function	eval.txt	/*anonymous-function*
 ant.vim	syntax.txt	/*ant.vim*
 ap	motion.txt	/*ap*
@@ -6410,6 +6450,8 @@ b:changelog_name	filetype.txt	/*b:changelog_name*
 b:clojure_syntax_keywords	syntax.txt	/*b:clojure_syntax_keywords*
 b:clojure_syntax_without_core_keywords	syntax.txt	/*b:clojure_syntax_without_core_keywords*
 b:current_syntax-variable	syntax.txt	/*b:current_syntax-variable*
+b:hare_indent_case	ft_hare.txt	/*b:hare_indent_case*
+b:hare_indent_match_switch	ft_hare.txt	/*b:hare_indent_match_switch*
 b:lf_shell_syntax	syntax.txt	/*b:lf_shell_syntax*
 b:netrw_lastfile	pi_netrw.txt	/*b:netrw_lastfile*
 b:rust_cargo_avoid_whole_workspace	ft_rust.txt	/*b:rust_cargo_avoid_whole_workspace*
@@ -6419,6 +6461,7 @@ b:rust_cargo_check_benches	ft_rust.txt	/*b:rust_cargo_check_benches*
 b:rust_cargo_check_examples	ft_rust.txt	/*b:rust_cargo_check_examples*
 b:rust_cargo_check_tests	ft_rust.txt	/*b:rust_cargo_check_tests*
 b:rustfmt_autosave	ft_rust.txt	/*b:rustfmt_autosave*
+b:rustfmt_autosave_if_config_present	ft_rust.txt	/*b:rustfmt_autosave_if_config_present*
 b:tex_stylish	syntax.txt	/*b:tex_stylish*
 b:var	eval.txt	/*b:var*
 b:yaml_schema	syntax.txt	/*b:yaml_schema*
@@ -6509,6 +6552,7 @@ bug-fixes-8	version8.txt	/*bug-fixes-8*
 bug-fixes-9	version9.txt	/*bug-fixes-9*
 bug-fixes-9.1	version9.txt	/*bug-fixes-9.1*
 bug-fixes-9.2	version9.txt	/*bug-fixes-9.2*
+bug-fixes-9.3	version9.txt	/*bug-fixes-9.3*
 bug-reports	intro.txt	/*bug-reports*
 bugreport.vim	intro.txt	/*bugreport.vim*
 bugs	intro.txt	/*bugs*
@@ -6663,6 +6707,7 @@ ch_evalraw()	channel.txt	/*ch_evalraw()*
 ch_getbufnr()	channel.txt	/*ch_getbufnr()*
 ch_getjob()	channel.txt	/*ch_getjob()*
 ch_info()	channel.txt	/*ch_info()*
+ch_listen()	channel.txt	/*ch_listen()*
 ch_log()	channel.txt	/*ch_log()*
 ch_logfile()	channel.txt	/*ch_logfile()*
 ch_open()	channel.txt	/*ch_open()*
@@ -6697,6 +6742,7 @@ changed-8.1	version8.txt	/*changed-8.1*
 changed-8.2	version8.txt	/*changed-8.2*
 changed-9.1	version9.txt	/*changed-9.1*
 changed-9.2	version9.txt	/*changed-9.2*
+changed-9.3	version9.txt	/*changed-9.3*
 changelist	motion.txt	/*changelist*
 changelog.vim	syntax.txt	/*changelog.vim*
 changenr()	builtin.txt	/*changenr()*
@@ -6712,6 +6758,7 @@ channel-demo	channel.txt	/*channel-demo*
 channel-drop	channel.txt	/*channel-drop*
 channel-functions	usr_41.txt	/*channel-functions*
 channel-functions-details	channel.txt	/*channel-functions-details*
+channel-listen-demo	channel.txt	/*channel-listen-demo*
 channel-mode	channel.txt	/*channel-mode*
 channel-more	channel.txt	/*channel-more*
 channel-noblock	channel.txt	/*channel-noblock*
@@ -6792,6 +6839,16 @@ clipboard-autoselectml	options.txt	/*clipboard-autoselectml*
 clipboard-autoselectplus	options.txt	/*clipboard-autoselectplus*
 clipboard-exclude	options.txt	/*clipboard-exclude*
 clipboard-html	options.txt	/*clipboard-html*
+clipboard-providers	eval.txt	/*clipboard-providers*
+clipboard-providers-available	eval.txt	/*clipboard-providers-available*
+clipboard-providers-clipboard	eval.txt	/*clipboard-providers-clipboard*
+clipboard-providers-clipmethod	eval.txt	/*clipboard-providers-clipmethod*
+clipboard-providers-copy	eval.txt	/*clipboard-providers-copy*
+clipboard-providers-define	eval.txt	/*clipboard-providers-define*
+clipboard-providers-no-clipboard	eval.txt	/*clipboard-providers-no-clipboard*
+clipboard-providers-paste	eval.txt	/*clipboard-providers-paste*
+clipboard-providers-plus	eval.txt	/*clipboard-providers-plus*
+clipboard-providers-textlock	eval.txt	/*clipboard-providers-textlock*
 clipboard-unnamed	options.txt	/*clipboard-unnamed*
 clipboard-unnamedplus	options.txt	/*clipboard-unnamedplus*
 clojure-indent	indent.txt	/*clojure-indent*
@@ -6842,6 +6899,7 @@ compile-changes-7	version7.txt	/*compile-changes-7*
 compile-changes-8	version8.txt	/*compile-changes-8*
 compile-changes-9	version9.txt	/*compile-changes-9*
 compile-changes-9.2	version9.txt	/*compile-changes-9.2*
+compiler-biome	quickfix.txt	/*compiler-biome*
 compiler-compaqada	ft_ada.txt	/*compiler-compaqada*
 compiler-cppcheck	quickfix.txt	/*compiler-cppcheck*
 compiler-decada	ft_ada.txt	/*compiler-decada*
@@ -6859,6 +6917,7 @@ compiler-mypy	quickfix.txt	/*compiler-mypy*
 compiler-pandoc	quickfix.txt	/*compiler-pandoc*
 compiler-perl	quickfix.txt	/*compiler-perl*
 compiler-pylint	quickfix.txt	/*compiler-pylint*
+compiler-pyright	quickfix.txt	/*compiler-pyright*
 compiler-pytest	quickfix.txt	/*compiler-pytest*
 compiler-pyunit	quickfix.txt	/*compiler-pyunit*
 compiler-ruff	quickfix.txt	/*compiler-ruff*
@@ -6867,6 +6926,7 @@ compiler-spotbugs	quickfix.txt	/*compiler-spotbugs*
 compiler-tex	quickfix.txt	/*compiler-tex*
 compiler-tombi	quickfix.txt	/*compiler-tombi*
 compiler-tsc	quickfix.txt	/*compiler-tsc*
+compiler-ty	quickfix.txt	/*compiler-ty*
 compiler-typst	quickfix.txt	/*compiler-typst*
 compiler-vaxada	ft_ada.txt	/*compiler-vaxada*
 compl-current	insert.txt	/*compl-current*
@@ -6901,7 +6961,6 @@ complete_add()	builtin.txt	/*complete_add()*
 complete_check()	builtin.txt	/*complete_check()*
 complete_info()	builtin.txt	/*complete_info()*
 complete_info_mode	builtin.txt	/*complete_info_mode*
-complete_match()	builtin.txt	/*complete_match()*
 completed_item-variable	eval.txt	/*completed_item-variable*
 completion-functions	usr_41.txt	/*completion-functions*
 complex-change	change.txt	/*complex-change*
@@ -6918,6 +6977,7 @@ conversion-server	mbyte.txt	/*conversion-server*
 convert-to-HTML	syntax.txt	/*convert-to-HTML*
 convert-to-XHTML	syntax.txt	/*convert-to-XHTML*
 convert-to-XML	syntax.txt	/*convert-to-XML*
+convert_:function_to_:def	vim9.txt	/*convert_:function_to_:def*
 convert_legacy_function_to_vim9	vim9.txt	/*convert_legacy_function_to_vim9*
 copy()	builtin.txt	/*copy()*
 copy-diffs	diff.txt	/*copy-diffs*
@@ -7069,6 +7129,7 @@ dav	pi_netrw.txt	/*dav*
 davs	pi_netrw.txt	/*davs*
 daw	motion.txt	/*daw*
 dd	change.txt	/*dd*
+debug-adapter-protocol	channel.txt	/*debug-adapter-protocol*
 debug-gcc	debug.txt	/*debug-gcc*
 debug-highlight	debugger.txt	/*debug-highlight*
 debug-leaks	debug.txt	/*debug-leaks*
@@ -7574,6 +7635,7 @@ ft-ada-options	ft_ada.txt	/*ft-ada-options*
 ft-ada-plugin	ft_ada.txt	/*ft-ada-plugin*
 ft-ada-syntax	ft_ada.txt	/*ft-ada-syntax*
 ft-ada-variables	ft_ada.txt	/*ft-ada-variables*
+ft-algol68-syntax	syntax.txt	/*ft-algol68-syntax*
 ft-ant-syntax	syntax.txt	/*ft-ant-syntax*
 ft-apache-syntax	syntax.txt	/*ft-apache-syntax*
 ft-arduino-plugin	filetype.txt	/*ft-arduino-plugin*
@@ -7588,6 +7650,7 @@ ft-asy-syntax	syntax.txt	/*ft-asy-syntax*
 ft-awk-plugin	filetype.txt	/*ft-awk-plugin*
 ft-bash-syntax	syntax.txt	/*ft-bash-syntax*
 ft-basic-syntax	syntax.txt	/*ft-basic-syntax*
+ft-beancount-plugin	filetype.txt	/*ft-beancount-plugin*
 ft-c-omni	insert.txt	/*ft-c-omni*
 ft-c-syntax	syntax.txt	/*ft-c-syntax*
 ft-cangjie-syntax	syntax.txt	/*ft-cangjie-syntax*
@@ -7633,6 +7696,7 @@ ft-fortran-syntax	syntax.txt	/*ft-fortran-syntax*
 ft-freebasic-plugin	filetype.txt	/*ft-freebasic-plugin*
 ft-freebasic-syntax	syntax.txt	/*ft-freebasic-syntax*
 ft-fvwm-syntax	syntax.txt	/*ft-fvwm-syntax*
+ft-gdb-syntax	syntax.txt	/*ft-gdb-syntax*
 ft-gdscript-plugin	filetype.txt	/*ft-gdscript-plugin*
 ft-gitcommit-plugin	filetype.txt	/*ft-gitcommit-plugin*
 ft-gitrebase-plugin	filetype.txt	/*ft-gitrebase-plugin*
@@ -7675,6 +7739,7 @@ ft-log-syntax	syntax.txt	/*ft-log-syntax*
 ft-lpc-syntax	syntax.txt	/*ft-lpc-syntax*
 ft-lua-plugin	filetype.txt	/*ft-lua-plugin*
 ft-lua-syntax	syntax.txt	/*ft-lua-syntax*
+ft-luau-plugin	filetype.txt	/*ft-luau-plugin*
 ft-mail-plugin	filetype.txt	/*ft-mail-plugin*
 ft-mail.vim	syntax.txt	/*ft-mail.vim*
 ft-make-syntax	syntax.txt	/*ft-make-syntax*
@@ -7795,6 +7860,7 @@ ft_hare.txt	ft_hare.txt	/*ft_hare.txt*
 ft_mp.txt	ft_mp.txt	/*ft_mp.txt*
 ft_ps1.txt	ft_ps1.txt	/*ft_ps1.txt*
 ft_raku.txt	ft_raku.txt	/*ft_raku.txt*
+ft_recommended_style	usr_51.txt	/*ft_recommended_style*
 ft_rust.txt	ft_rust.txt	/*ft_rust.txt*
 ft_sql.txt	ft_sql.txt	/*ft_sql.txt*
 ftdetect	filetype.txt	/*ftdetect*
@@ -7905,7 +7971,6 @@ g:hare_indent_match_switch	ft_hare.txt	/*g:hare_indent_match_switch*
 g:hare_makeprg_params	ft_hare.txt	/*g:hare_makeprg_params*
 g:hare_recommended_style	ft_hare.txt	/*g:hare_recommended_style*
 g:hare_space_error	ft_hare.txt	/*g:hare_space_error*
-g:hare_symbol_operators	ft_hare.txt	/*g:hare_symbol_operators*
 g:help_example_languages	helphelp.txt	/*g:help_example_languages*
 g:html_charset_override	syntax.txt	/*g:html_charset_override*
 g:html_diff_one_file	syntax.txt	/*g:html_diff_one_file*
@@ -7939,6 +8004,7 @@ g:lf_shell_syntax	syntax.txt	/*g:lf_shell_syntax*
 g:lua_folding	filetype.txt	/*g:lua_folding*
 g:lua_subversion	filetype.txt	/*g:lua_subversion*
 g:lua_version	filetype.txt	/*g:lua_version*
+g:luau_folding	filetype.txt	/*g:luau_folding*
 g:macvim_default_touchbar_characterpicker	gui_mac.txt	/*g:macvim_default_touchbar_characterpicker*
 g:macvim_default_touchbar_fullscreen	gui_mac.txt	/*g:macvim_default_touchbar_fullscreen*
 g:markdown_fenced_languages	syntax.txt	/*g:markdown_fenced_languages*
@@ -8027,7 +8093,6 @@ g:netrw_ssh_browse_reject	pi_netrw.txt	/*g:netrw_ssh_browse_reject*
 g:netrw_ssh_cmd	pi_netrw.txt	/*g:netrw_ssh_cmd*
 g:netrw_sshport	pi_netrw.txt	/*g:netrw_sshport*
 g:netrw_timefmt	pi_netrw.txt	/*g:netrw_timefmt*
-g:netrw_tmpfile_escape	pi_netrw.txt	/*g:netrw_tmpfile_escape*
 g:netrw_uid	pi_netrw.txt	/*g:netrw_uid*
 g:netrw_use_noswf	pi_netrw.txt	/*g:netrw_use_noswf*
 g:netrw_use_nt_rcp	pi_netrw.txt	/*g:netrw_use_nt_rcp*
@@ -8063,6 +8128,7 @@ g:rustfmt_command	ft_rust.txt	/*g:rustfmt_command*
 g:rustfmt_detect_version	ft_rust.txt	/*g:rustfmt_detect_version*
 g:rustfmt_emit_files	ft_rust.txt	/*g:rustfmt_emit_files*
 g:rustfmt_fail_silently	ft_rust.txt	/*g:rustfmt_fail_silently*
+g:rustfmt_find_toml	ft_rust.txt	/*g:rustfmt_find_toml*
 g:rustfmt_options	ft_rust.txt	/*g:rustfmt_options*
 g:statusline_winid	options.txt	/*g:statusline_winid*
 g:syntax_on	syntax.txt	/*g:syntax_on*
@@ -8101,7 +8167,6 @@ g:vim_indent_cont	indent.txt	/*g:vim_indent_cont*
 g:vim_json_conceal	syntax.txt	/*g:vim_json_conceal*
 g:vim_json_warnings	syntax.txt	/*g:vim_json_warnings*
 g:vimball_home	pi_vimball.txt	/*g:vimball_home*
-g:vimball_mkdir	pi_vimball.txt	/*g:vimball_mkdir*
 g:vimsyn_comment_strings	syntax.txt	/*g:vimsyn_comment_strings*
 g:vimsyn_embed	syntax.txt	/*g:vimsyn_embed*
 g:vimsyn_folding	syntax.txt	/*g:vimsyn_folding*
@@ -8115,7 +8180,6 @@ g:zipPlugin_ext	pi_zip.txt	/*g:zipPlugin_ext*
 g:zip_exec	pi_zip.txt	/*g:zip_exec*
 g:zip_extractcmd	pi_zip.txt	/*g:zip_extractcmd*
 g:zip_nomax	pi_zip.txt	/*g:zip_nomax*
-g:zip_shq	pi_zip.txt	/*g:zip_shq*
 g:zip_unzipcmd	pi_zip.txt	/*g:zip_unzipcmd*
 g:zip_zipcmd	pi_zip.txt	/*g:zip_zipcmd*
 g;	motion.txt	/*g;*
@@ -8162,6 +8226,7 @@ garbagecollect()	builtin.txt	/*garbagecollect()*
 gd	pattern.txt	/*gd*
 gdb	debug.txt	/*gdb*
 gdb-version	terminal.txt	/*gdb-version*
+gdb.vim	syntax.txt	/*gdb.vim*
 ge	motion.txt	/*ge*
 gender-neutral	helphelp.txt	/*gender-neutral*
 generic-function-call	vim9.txt	/*generic-function-call*
@@ -8175,6 +8240,7 @@ get()-func	builtin.txt	/*get()-func*
 get()-list	builtin.txt	/*get()-list*
 get()-tuple	builtin.txt	/*get()-tuple*
 get-ms-debuggers	debug.txt	/*get-ms-debuggers*
+getbgcolor()	builtin.txt	/*getbgcolor()*
 getbufinfo()	builtin.txt	/*getbufinfo()*
 getbufline()	builtin.txt	/*getbufline()*
 getbufoneline()	builtin.txt	/*getbufoneline()*
@@ -8299,6 +8365,8 @@ gt	tabpage.txt	/*gt*
 gtk-css	gui_x11.txt	/*gtk-css*
 gtk-tooltip-colors	gui_x11.txt	/*gtk-tooltip-colors*
 gtk3-slow	gui_x11.txt	/*gtk3-slow*
+gtk4-hwaccel	gui_x11.txt	/*gtk4-hwaccel*
+gtk4-slow	gui_x11.txt	/*gtk4-slow*
 gu	change.txt	/*gu*
 gugu	change.txt	/*gugu*
 gui	gui.txt	/*gui*
@@ -8310,6 +8378,7 @@ gui-font	gui.txt	/*gui-font*
 gui-fontwide	gui.txt	/*gui-fontwide*
 gui-footer	debugger.txt	/*gui-footer*
 gui-fork	gui_x11.txt	/*gui-fork*
+gui-fullscreen	gui.txt	/*gui-fullscreen*
 gui-functions	usr_41.txt	/*gui-functions*
 gui-gnome	gui_x11.txt	/*gui-gnome*
 gui-gnome-session	gui_x11.txt	/*gui-gnome-session*
@@ -8402,6 +8471,8 @@ haiku-vimdir	os_haiku.txt	/*haiku-vimdir*
 hangul	hangulin.txt	/*hangul*
 hangulin.txt	hangulin.txt	/*hangulin.txt*
 hare	ft_hare.txt	/*hare*
+hare-folding	ft_hare.txt	/*hare-folding*
+hare-symbol-operators	ft_hare.txt	/*hare-symbol-operators*
 hare.vim	ft_hare.txt	/*hare.vim*
 has()	builtin.txt	/*has()*
 has-patch	builtin.txt	/*has-patch*
@@ -8417,7 +8488,6 @@ help	helphelp.txt	/*help*
 help-TOC	helphelp.txt	/*help-TOC*
 help-buffer-options	helphelp.txt	/*help-buffer-options*
 help-context	help.txt	/*help-context*
-help-curwin	tips.txt	/*help-curwin*
 help-notation	helphelp.txt	/*help-notation*
 help-summary	usr_02.txt	/*help-summary*
 help-tags	tags	1
@@ -8514,8 +8584,11 @@ hl-PmenuSbar	syntax.txt	/*hl-PmenuSbar*
 hl-PmenuSel	syntax.txt	/*hl-PmenuSel*
 hl-PmenuShadow	syntax.txt	/*hl-PmenuShadow*
 hl-PmenuThumb	syntax.txt	/*hl-PmenuThumb*
+hl-Popup	syntax.txt	/*hl-Popup*
+hl-PopupBorder	syntax.txt	/*hl-PopupBorder*
 hl-PopupNotification	syntax.txt	/*hl-PopupNotification*
 hl-PopupSelected	syntax.txt	/*hl-PopupSelected*
+hl-PopupTitle	syntax.txt	/*hl-PopupTitle*
 hl-PreInsert	syntax.txt	/*hl-PreInsert*
 hl-Question	syntax.txt	/*hl-Question*
 hl-QuickFixLine	syntax.txt	/*hl-QuickFixLine*
@@ -8549,6 +8622,7 @@ hl-User1	syntax.txt	/*hl-User1*
 hl-User1..9	syntax.txt	/*hl-User1..9*
 hl-User9	syntax.txt	/*hl-User9*
 hl-VertSplit	syntax.txt	/*hl-VertSplit*
+hl-VertSplitNC	syntax.txt	/*hl-VertSplitNC*
 hl-Visual	syntax.txt	/*hl-Visual*
 hl-VisualNOS	syntax.txt	/*hl-VisualNOS*
 hl-WarningMsg	syntax.txt	/*hl-WarningMsg*
@@ -8708,7 +8782,6 @@ i`	motion.txt	/*i`*
 ia64.vim	syntax.txt	/*ia64.vim*
 ib	motion.txt	/*ib*
 iccf	uganda.txt	/*iccf*
-iccf-donations	uganda.txt	/*iccf-donations*
 icon-changed	version4.txt	/*icon-changed*
 iconise	starting.txt	/*iconise*
 iconize	starting.txt	/*iconize*
@@ -8806,6 +8879,7 @@ instanceof()	builtin.txt	/*instanceof()*
 intel-itanium	syntax.txt	/*intel-itanium*
 intellimouse-wheel-problems	gui_w32.txt	/*intellimouse-wheel-problems*
 interactive-functions	usr_41.txt	/*interactive-functions*
+interface	vim9class.txt	/*interface*
 interfaces-5.2	version5.txt	/*interfaces-5.2*
 internal-error	message.txt	/*internal-error*
 internal-variables	eval.txt	/*internal-variables*
@@ -8929,6 +9003,7 @@ lcs-eol	options.txt	/*lcs-eol*
 lcs-extends	options.txt	/*lcs-extends*
 lcs-lead	options.txt	/*lcs-lead*
 lcs-leadmultispace	options.txt	/*lcs-leadmultispace*
+lcs-leadtab	options.txt	/*lcs-leadtab*
 lcs-multispace	options.txt	/*lcs-multispace*
 lcs-nbsp	options.txt	/*lcs-nbsp*
 lcs-precedes	options.txt	/*lcs-precedes*
@@ -9774,6 +9849,7 @@ os_risc.txt	os_risc.txt	/*os_risc.txt*
 os_unix.txt	os_unix.txt	/*os_unix.txt*
 os_vms.txt	os_vms.txt	/*os_vms.txt*
 os_win32.txt	os_win32.txt	/*os_win32.txt*
+osc52-install	usr_05.txt	/*osc52-install*
 other-features	vi_diff.txt	/*other-features*
 out_buf	channel.txt	/*out_buf*
 out_cb	channel.txt	/*out_cb*
@@ -9791,12 +9867,14 @@ package-create	repeat.txt	/*package-create*
 package-doc	repeat.txt	/*package-doc*
 package-documentation	repeat.txt	/*package-documentation*
 package-editorconfig	usr_05.txt	/*package-editorconfig*
+package-helpcurwin	tips.txt	/*package-helpcurwin*
 package-helptoc	helphelp.txt	/*package-helptoc*
 package-hlyank	usr_05.txt	/*package-hlyank*
 package-justify	usr_25.txt	/*package-justify*
 package-matchit	usr_05.txt	/*package-matchit*
 package-nohlsearch	usr_05.txt	/*package-nohlsearch*
 package-open	eval.txt	/*package-open*
+package-osc52	usr_05.txt	/*package-osc52*
 package-termdebug	terminal.txt	/*package-termdebug*
 package-translate_example	repeat.txt	/*package-translate_example*
 package-translation	repeat.txt	/*package-translation*
@@ -9817,9 +9895,11 @@ patches-8.2	version8.txt	/*patches-8.2*
 patches-9	version9.txt	/*patches-9*
 patches-9.1	version9.txt	/*patches-9.1*
 patches-9.2	version9.txt	/*patches-9.2*
+patches-9.3	version9.txt	/*patches-9.3*
 patches-after-8.2	version9.txt	/*patches-after-8.2*
 patches-after-9.0	version9.txt	/*patches-after-9.0*
 patches-after-9.1	version9.txt	/*patches-after-9.1*
+patches-after-9.2	version9.txt	/*patches-after-9.2*
 pathshorten()	builtin.txt	/*pathshorten()*
 pattern	pattern.txt	/*pattern*
 pattern-atoms	pattern.txt	/*pattern-atoms*
@@ -9897,6 +9977,7 @@ popt-option	print.txt	/*popt-option*
 popup	popup.txt	/*popup*
 popup-buffer	popup.txt	/*popup-buffer*
 popup-callback	popup.txt	/*popup-callback*
+popup-clipwindow	popup.txt	/*popup-clipwindow*
 popup-close	popup.txt	/*popup-close*
 popup-examples	popup.txt	/*popup-examples*
 popup-filter	popup.txt	/*popup-filter*
@@ -9904,11 +9985,13 @@ popup-filter-errors	popup.txt	/*popup-filter-errors*
 popup-filter-mode	popup.txt	/*popup-filter-mode*
 popup-function-details	popup.txt	/*popup-function-details*
 popup-functions	popup.txt	/*popup-functions*
+popup-image	popup.txt	/*popup-image*
 popup-intro	popup.txt	/*popup-intro*
 popup-mapping	popup.txt	/*popup-mapping*
 popup-mask	popup.txt	/*popup-mask*
 popup-menu	gui.txt	/*popup-menu*
 popup-menu-added	version5.txt	/*popup-menu-added*
+popup-opacity	popup.txt	/*popup-opacity*
 popup-position	popup.txt	/*popup-position*
 popup-props	popup.txt	/*popup-props*
 popup-scrollbar	popup.txt	/*popup-scrollbar*
@@ -10101,6 +10184,7 @@ quake.vim	syntax.txt	/*quake.vim*
 quickfix	quickfix.txt	/*quickfix*
 quickfix-6	version6.txt	/*quickfix-6*
 quickfix-ID	quickfix.txt	/*quickfix-ID*
+quickfix-biome	quickfix.txt	/*quickfix-biome*
 quickfix-buffer	quickfix.txt	/*quickfix-buffer*
 quickfix-changedtick	quickfix.txt	/*quickfix-changedtick*
 quickfix-context	quickfix.txt	/*quickfix-context*
@@ -10186,6 +10270,8 @@ recovery	recover.txt	/*recovery*
 recursive_mapping	map.txt	/*recursive_mapping*
 redo	undo.txt	/*redo*
 redo-register	undo.txt	/*redo-register*
+redraw_listener_add()	builtin.txt	/*redraw_listener_add()*
+redraw_listener_remove()	builtin.txt	/*redraw_listener_remove()*
 reduce()	builtin.txt	/*reduce()*
 ref	intro.txt	/*ref*
 reference	intro.txt	/*reference*
@@ -10194,7 +10280,6 @@ reg_executing()	builtin.txt	/*reg_executing()*
 reg_recording()	builtin.txt	/*reg_recording()*
 regexp	pattern.txt	/*regexp*
 regexp-changes-5.4	version5.txt	/*regexp-changes-5.4*
-register	sponsor.txt	/*register*
 register-faq	sponsor.txt	/*register-faq*
 register-functions	usr_41.txt	/*register-functions*
 register-variable	eval.txt	/*register-variable*
@@ -10435,6 +10520,7 @@ shm-q	options.txt	/*shm-q*
 shm-r	options.txt	/*shm-r*
 shm-s	options.txt	/*shm-s*
 shm-t	options.txt	/*shm-t*
+shm-u	options.txt	/*shm-u*
 shm-w	options.txt	/*shm-w*
 shm-x	options.txt	/*shm-x*
 short-name-changed	version4.txt	/*short-name-changed*
@@ -10477,6 +10563,7 @@ slow-fast-terminal	term.txt	/*slow-fast-terminal*
 slow-start	starting.txt	/*slow-start*
 slow-terminal	term.txt	/*slow-terminal*
 socket-interface	channel.txt	/*socket-interface*
+socketserver-address	remote.txt	/*socketserver-address*
 socketserver-clientserver	remote.txt	/*socketserver-clientserver*
 socketserver-differences	remote.txt	/*socketserver-differences*
 socketserver-name	remote.txt	/*socketserver-name*
@@ -10661,6 +10748,9 @@ static-tag	tagsrch.txt	/*static-tag*
 status-line	windows.txt	/*status-line*
 statusmsg-variable	eval.txt	/*statusmsg-variable*
 stl-%!	options.txt	/*stl-%!*
+stl-%0{	options.txt	/*stl-%0{*
+stl-%@	options.txt	/*stl-%@*
+stl-%[FuncName]	options.txt	/*stl-%[FuncName]*
 stl-%{	options.txt	/*stl-%{*
 str2blob()	builtin.txt	/*str2blob()*
 str2float()	builtin.txt	/*str2float()*
@@ -10781,6 +10871,7 @@ t_AL	term.txt	/*t_AL*
 t_AU	term.txt	/*t_AU*
 t_BD	term.txt	/*t_BD*
 t_BE	term.txt	/*t_BE*
+t_BS	term.txt	/*t_BS*
 t_CF	term.txt	/*t_CF*
 t_CS	term.txt	/*t_CS*
 t_CTRL-W_.	terminal.txt	/*t_CTRL-W_.*
@@ -10800,6 +10891,7 @@ t_DL	term.txt	/*t_DL*
 t_Ds	term.txt	/*t_Ds*
 t_EC	term.txt	/*t_EC*
 t_EI	term.txt	/*t_EI*
+t_ES	term.txt	/*t_ES*
 t_F1	term.txt	/*t_F1*
 t_F2	term.txt	/*t_F2*
 t_F3	term.txt	/*t_F3*
@@ -10995,6 +11087,10 @@ tabpagebuflist()	builtin.txt	/*tabpagebuflist()*
 tabpagenr()	builtin.txt	/*tabpagenr()*
 tabpagewinnr()	builtin.txt	/*tabpagewinnr()*
 tabpanel	tabpage.txt	/*tabpanel*
+tabpanel-mouse	tabpage.txt	/*tabpanel-mouse*
+tabpanel-scroll	tabpage.txt	/*tabpanel-scroll*
+tabpanel_getinfo()	builtin.txt	/*tabpanel_getinfo()*
+tabpanel_scroll()	builtin.txt	/*tabpanel_scroll()*
 tag	tagsrch.txt	/*tag*
 tag-!	tagsrch.txt	/*tag-!*
 tag-binary-search	tagsrch.txt	/*tag-binary-search*
@@ -11124,6 +11220,7 @@ termcap-cursor-shape	term.txt	/*termcap-cursor-shape*
 termcap-options	term.txt	/*termcap-options*
 termcap-title	term.txt	/*termcap-title*
 termda1-variable	eval.txt	/*termda1-variable*
+termdebug	terminal.txt	/*termdebug*
 termdebug-commands	terminal.txt	/*termdebug-commands*
 termdebug-communication	terminal.txt	/*termdebug-communication*
 termdebug-customizing	terminal.txt	/*termdebug-customizing*
@@ -11197,6 +11294,7 @@ termresponse-variable	eval.txt	/*termresponse-variable*
 termrfgresp-variable	eval.txt	/*termrfgresp-variable*
 termstyleresp-variable	eval.txt	/*termstyleresp-variable*
 termu7resp-variable	eval.txt	/*termu7resp-variable*
+termux	builtin.txt	/*termux*
 ternary	eval.txt	/*ternary*
 test-functions	usr_41.txt	/*test-functions*
 test-functions-details	testing.txt	/*test-functions-details*
@@ -11428,6 +11526,7 @@ v:char	eval.txt	/*v:char*
 v:charconvert_from	eval.txt	/*v:charconvert_from*
 v:charconvert_to	eval.txt	/*v:charconvert_to*
 v:clipmethod	eval.txt	/*v:clipmethod*
+v:clipproviders	eval.txt	/*v:clipproviders*
 v:cmdarg	eval.txt	/*v:cmdarg*
 v:cmdbang	eval.txt	/*v:cmdbang*
 v:collate	eval.txt	/*v:collate*
@@ -11533,6 +11632,7 @@ v:var	eval.txt	/*v:var*
 v:version	eval.txt	/*v:version*
 v:versionlong	eval.txt	/*v:versionlong*
 v:vim_did_enter	eval.txt	/*v:vim_did_enter*
+v:vim_did_init	eval.txt	/*v:vim_did_init*
 v:warningmsg	eval.txt	/*v:warningmsg*
 v:wayland_display	eval.txt	/*v:wayland_display*
 v:windowid	eval.txt	/*v:windowid*
@@ -11689,6 +11789,7 @@ version-8.2	version8.txt	/*version-8.2*
 version-9.0	version9.txt	/*version-9.0*
 version-9.1	version9.txt	/*version-9.1*
 version-9.2	version9.txt	/*version-9.2*
+version-9.3	version9.txt	/*version-9.3*
 version-variable	eval.txt	/*version-variable*
 version4.txt	version4.txt	/*version4.txt*
 version5.txt	version5.txt	/*version5.txt*
@@ -11706,6 +11807,7 @@ version8.txt	version8.txt	/*version8.txt*
 version9.0	version9.txt	/*version9.0*
 version9.1	version9.txt	/*version9.1*
 version9.2	version9.txt	/*version9.2*
+version9.3	version9.txt	/*version9.3*
 version9.txt	version9.txt	/*version9.txt*
 versionlong-variable	eval.txt	/*versionlong-variable*
 vi	intro.txt	/*vi*
@@ -11735,6 +11837,7 @@ vim-9	version9.txt	/*vim-9*
 vim-9.0	version9.txt	/*vim-9.0*
 vim-9.1	version9.txt	/*vim-9.1*
 vim-9.2	version9.txt	/*vim-9.2*
+vim-9.3	version9.txt	/*vim-9.3*
 vim-additions	vi_diff.txt	/*vim-additions*
 vim-announce	intro.txt	/*vim-announce*
 vim-arguments	starting.txt	/*vim-arguments*
@@ -11768,6 +11871,7 @@ vim9-access-modes	vim9class.txt	/*vim9-access-modes*
 vim9-autoload	vim9.txt	/*vim9-autoload*
 vim9-boolean	vim9.txt	/*vim9-boolean*
 vim9-class	vim9class.txt	/*vim9-class*
+vim9-class-type	vim9.txt	/*vim9-class-type*
 vim9-classes	vim9.txt	/*vim9-classes*
 vim9-const	vim9.txt	/*vim9-const*
 vim9-curly	vim9.txt	/*vim9-curly*
@@ -11775,14 +11879,18 @@ vim9-debug	repeat.txt	/*vim9-debug*
 vim9-declaration	vim9.txt	/*vim9-declaration*
 vim9-declarations	usr_41.txt	/*vim9-declarations*
 vim9-differences	vim9.txt	/*vim9-differences*
+vim9-enum-type	vim9.txt	/*vim9-enum-type*
+vim9-enumvalue-type	vim9.txt	/*vim9-enumvalue-type*
 vim9-export	vim9.txt	/*vim9-export*
 vim9-false-true	vim9.txt	/*vim9-false-true*
 vim9-final	vim9.txt	/*vim9-final*
 vim9-func-declaration	vim9.txt	/*vim9-func-declaration*
+vim9-func-type	vim9.txt	/*vim9-func-type*
 vim9-function-defined-later	vim9.txt	/*vim9-function-defined-later*
 vim9-gotchas	vim9.txt	/*vim9-gotchas*
 vim9-ignored-argument	vim9.txt	/*vim9-ignored-argument*
 vim9-import	vim9.txt	/*vim9-import*
+vim9-interface-type	vim9.txt	/*vim9-interface-type*
 vim9-lambda	vim9.txt	/*vim9-lambda*
 vim9-lambda-arguments	vim9.txt	/*vim9-lambda-arguments*
 vim9-line-continuation	vim9.txt	/*vim9-line-continuation*
@@ -11791,15 +11899,19 @@ vim9-mix	vim9.txt	/*vim9-mix*
 vim9-namespace	vim9.txt	/*vim9-namespace*
 vim9-no-dict-function	vim9.txt	/*vim9-no-dict-function*
 vim9-no-shorten	vim9.txt	/*vim9-no-shorten*
+vim9-object-type	vim9.txt	/*vim9-object-type*
+vim9-partial-declaration	vim9.txt	/*vim9-partial-declaration*
 vim9-rationale	vim9.txt	/*vim9-rationale*
 vim9-reload	vim9.txt	/*vim9-reload*
 vim9-s-namespace	vim9.txt	/*vim9-s-namespace*
 vim9-scopes	vim9.txt	/*vim9-scopes*
 vim9-string-index	vim9.txt	/*vim9-string-index*
+vim9-typealias-type	vim9.txt	/*vim9-typealias-type*
 vim9-types	vim9.txt	/*vim9-types*
 vim9-unpack-ignore	vim9.txt	/*vim9-unpack-ignore*
 vim9-user-command	vim9.txt	/*vim9-user-command*
 vim9-variable-arguments	vim9.txt	/*vim9-variable-arguments*
+vim9-white-space	vim9.txt	/*vim9-white-space*
 vim9.txt	vim9.txt	/*vim9.txt*
 vim9class.txt	vim9class.txt	/*vim9class.txt*
 vim9script	vim9.txt	/*vim9script*
@@ -11807,6 +11919,7 @@ vim:	options.txt	/*vim:*
 vim_announce	intro.txt	/*vim_announce*
 vim_dev	intro.txt	/*vim_dev*
 vim_did_enter-variable	eval.txt	/*vim_did_enter-variable*
+vim_did_init-variable	eval.txt	/*vim_did_init-variable*
 vim_mac	intro.txt	/*vim_mac*
 vim_mac_group	gui_mac.txt	/*vim_mac_group*
 vim_starting	builtin.txt	/*vim_starting*
@@ -11843,6 +11956,7 @@ viminfo-r	options.txt	/*viminfo-r*
 viminfo-read	starting.txt	/*viminfo-read*
 viminfo-read-write	starting.txt	/*viminfo-read-write*
 viminfo-s	options.txt	/*viminfo-s*
+viminfo-security	starting.txt	/*viminfo-security*
 viminfo-timestamp	starting.txt	/*viminfo-timestamp*
 viminfo-write	starting.txt	/*viminfo-write*
 vimrc	starting.txt	/*vimrc*
@@ -11879,8 +11993,6 @@ vms-notes	os_vms.txt	/*vms-notes*
 vms-problems	os_vms.txt	/*vms-problems*
 vms-started	os_vms.txt	/*vms-started*
 vms-usage	os_vms.txt	/*vms-usage*
-vote-for-features	sponsor.txt	/*vote-for-features*
-votes-for-changes	todo.txt	/*votes-for-changes*
 vreplace-mode	insert.txt	/*vreplace-mode*
 vt100-cursor-keys	term.txt	/*vt100-cursor-keys*
 vt100-function-keys	term.txt	/*vt100-function-keys*
@@ -11896,8 +12008,6 @@ waittime	channel.txt	/*waittime*
 warningmsg-variable	eval.txt	/*warningmsg-variable*
 wayland	wayland.txt	/*wayland*
 wayland-and-x11	wayland.txt	/*wayland-and-x11*
-wayland-focus-steal	wayland.txt	/*wayland-focus-steal*
-wayland-gnome	wayland.txt	/*wayland-gnome*
 wayland-gui	wayland.txt	/*wayland-gui*
 wayland-persist	wayland.txt	/*wayland-persist*
 wayland-primary-selection	wayland.txt	/*wayland-primary-selection*
@@ -12023,6 +12133,7 @@ xattr	editing.txt	/*xattr*
 xdg-base-dir	starting.txt	/*xdg-base-dir*
 xdg-runtime	starting.txt	/*xdg-runtime*
 xdg-vimrc	starting.txt	/*xdg-vimrc*
+xdg.vim	starting.txt	/*xdg.vim*
 xf86conf.vim	syntax.txt	/*xf86conf.vim*
 xfontset	mbyte.txt	/*xfontset*
 xfree-xterm	syntax.txt	/*xfree-xterm*
diff --git a/runtime/doc/tagsrch.txt b/runtime/doc/tagsrch.txt
index dcd6f05c3e..e381d5fc08 100644
--- a/runtime/doc/tagsrch.txt
+++ b/runtime/doc/tagsrch.txt
@@ -1,7 +1,7 @@
-*tagsrch.txt*   For Vim version 9.1.  Last change: 2025 Oct 12
+*tagsrch.txt*	For Vim version 9.2.  Last change: 2026 May 31
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Tags and special searches				*tags-and-searches*
@@ -579,6 +579,10 @@ ctags).
 		have an absolute or relative path.  It may contain environment
 		variables and wildcards (although the use of wildcards is
 		doubtful).  It cannot contain a .
+								*E1576*
+		Using a remote file via network protocol (e.g. using
+		http://remote/file.txt) is not allowed unless 'tagsecure'
+		is unset.
 {tagaddress}	The Ex command that positions the cursor on the tag.  It can
 		be any Ex command, although restrictions apply (see
 		|tag-security|).  Posix only allows line numbers and search
@@ -829,8 +833,9 @@ CTRL-W i		Open a new window, with the cursor on the first line
 			Like `[D`  and `]D`, but search in [range] lines
 			(default: whole file).
 			See |:search-args| for [/] and [!].
-			Note that `:dl` works like `:delete` with the "l"
-			flag, not `:dlist`.
+			Note: In legacy Vim script, `:dl` works like
+			`:delete` with the "l" flag, not `:dlist`, whereas in
+			|Vim9| script `:dl` does work like `:dlist`.
 
 							*[_CTRL-D*
 [ CTRL-D		Jump to the first macro definition that contains the
@@ -872,9 +877,9 @@ Common arguments for the commands above:
 	When excluded, a match is ignored when the line is recognized as a
 	comment (according to 'comments'), or the match is in a C comment
 	(after "//" or inside /* */).  Note that a match may be missed if a
-	line is recognized as a comment, but the comment ends halfway the line.
-	And if the line is a comment, but it is not recognized (according to
-	'comments') a match may be found in it anyway.  Example: >
+	line is recognized as a comment, but the comment ends halfway the
+	line.  And if the line is a comment, but it is not recognized
+	(according to 'comments') a match may be found in it anyway.  Example: >
 		/* comment
 		   foobar */
 <	A match for "foobar" is found, because this line is not recognized as
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index 53a6fc0c9b..3363303e10 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -1,7 +1,7 @@
-*term.txt*      For Vim version 9.1.  Last change: 2025 Oct 12
+*term.txt*	For Vim version 9.2.  Last change: 2026 Mar 04
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Terminal information					*terminal-info*
@@ -196,8 +196,8 @@ try the entry ":ku=\233A:".
 
 Some termcap entries have the entry ":ku=\E[A:".  But the Amiga really sends
 "\233A".  On output "\E[" and "\233" are often equivalent, on input they
-aren't.  You will have to change the termcap entry, or change the key code with
-the :set command to fix this.
+aren't.  You will have to change the termcap entry, or change the key code
+with the :set command to fix this.
 
 Many cursor key codes start with an .  Vim must find out if this is a
 single hit of the  key or the start of a cursor key sequence.  It waits
@@ -510,6 +510,10 @@ Added by Vim (there are no standard codes for these):
 		|xterm-focus-event|
 	t_fd	disable focus-event tracking			*t_fd* *'t_fd'*
 		|xterm-focus-event|
+	t_BS	begin synchronized update			*t_BS* *'t_BS'*
+		see 'termsync'
+	t_ES	end synchronized update				*t_ES* *'t_ES'*
+		see 'termsync'
 
 Some codes have a start, middle and end part.  The start and end are defined
 by the termcap option, the middle part is text.
@@ -528,6 +532,11 @@ t_SH must take one argument:
 t_RS is sent only if the response to t_RV has been received.  It is not used
 on Mac OS when Terminal.app could be recognized from the termresponse.
 
+The t_BS and t_ES are not stored in the termcap, but are instead set to the
+following default values on startup:
+	t_BS		"\033[?2026h"
+	t_ES		"\033[?2026l"
+
 							*mouse-reporting*
 Many terminals can report mouse clicks and some can report mouse movement and
 dragging.  Vim needs to know what codes are being used for this.
@@ -1167,7 +1176,8 @@ Mouse clicks can be mapped.  The codes for mouse clicks are:
 
 The X1 and X2 buttons refer to the extra buttons found on some mice.  The
 'Microsoft Explorer' mouse has these buttons available to the right thumb.
-Currently X1 and X2 only work on MacVim, Win32, and X11 environments.
+Currently, X1 and X2 work only on MacVim, Win32 and X11 environments, and in
+terminals that support xterm-like mouse functionality.
 
 Examples: >
 	:noremap  
diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt
index f7fe330167..01fd88ca66 100644
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -1,4 +1,4 @@
-*terminal.txt*	For Vim version 9.1.  Last change: 2025 Oct 14
+*terminal.txt*	For Vim version 9.2.  Last change: 2026 Apr 06
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -490,8 +490,8 @@ On more recent versions of MS-Windows 10 (beginning with the "October 2018
 Update"), winpty is no longer required.  On those versions, |:terminal| will use
 Windows' built-in support for hosting terminal applications, "ConPTY".  When
 ConPTY is in use, there may be rendering artifacts regarding ambiguous-width
-characters.  If you encounter any such issues, install "winpty".  Until the
-ConPTY problems have been fixed "winpty" will be preferred.
+characters.  If you encounter any such issues, install "winpty".  ConPTY
+support is considered stable with the first release of Windows 11.
 
 Environment variables are used to pass information to the running job:
     VIM_SERVERNAME	v:servername
@@ -525,10 +525,12 @@ term_dumpdiff({filename}, {filename} [, {options}])
 				     of the first file name.
 		   "term_rows"	     vertical size to use for the terminal,
 				     instead of using 'termwinsize', but
-				     respecting the minimal size
+				     respecting the minimal size; valid range
+				     is from 0 to 1000
 		   "term_cols"	     horizontal size to use for the terminal,
 				     instead of using 'termwinsize', but
-				     respecting the minimal size
+				     respecting the minimal size; valid range
+				     is from 0 to 1000
 		   "vertical"	     split the window vertically
 		   "curwin"	     use the current window, do not split the
 				     window; fails if the current buffer
@@ -594,7 +596,7 @@ term_dumpwrite({buf}, {filename} [, {options}])		*term_dumpwrite()*
 		name: >
 			GetFilename()->term_dumpwrite(bufnr)
 <
-		Return type: |Number|
+		Return type: void
 
 
 term_getaltscreen({buf})				*term_getaltscreen()*
@@ -815,7 +817,7 @@ term_sendkeys({buf}, {keys})				*term_sendkeys()*
 		Can also be used as a |method|: >
 			GetBufnr()->term_sendkeys(keys)
 <
-		Return type: |Number|
+		Return type: void
 
 
 term_setansicolors({buf}, {colors})			*term_setansicolors()*
@@ -850,7 +852,7 @@ term_setansicolors({buf}, {colors})			*term_setansicolors()*
 		Can also be used as a |method|: >
 			GetBufnr()->term_setansicolors(colors)
 <
-		Return type: |Number|
+		Return type: void
 
 		{only available with GUI enabled and/or the |+termguicolors|
 		feature}
@@ -868,7 +870,7 @@ term_setapi({buf}, {expr})				*term_setapi()*
 		When used as a method the base is used for {buf}: >
 			GetBufnr()->term_setapi({expr})
 <
-		Return type: |Number|
+		Return type: void
 
 
 term_setkill({buf}, {how})				*term_setkill()*
@@ -886,7 +888,7 @@ term_setkill({buf}, {how})				*term_setkill()*
 		Can also be used as a |method|: >
 			GetBufnr()->term_setkill(how)
 <
-		Return type: |Number|
+		Return type: void
 
 
 term_setrestore({buf}, {command})			*term_setrestore()*
@@ -901,7 +903,7 @@ term_setrestore({buf}, {command})			*term_setrestore()*
 		Can also be used as a |method|: >
 			GetBufnr()->term_setrestore(command)
 <
-		Return type: |Number|
+		Return type: void
 
 
 term_setsize({buf}, {rows}, {cols})		*term_setsize()* *E955*
@@ -917,7 +919,7 @@ term_setsize({buf}, {rows}, {cols})		*term_setsize()* *E955*
 		Can also be used as a |method|: >
 			GetBufnr()->term_setsize(rows, cols)
 <
-		Return type: |Number|
+		Return type: void
 
 
 term_start({cmd} [, {options}])			*term_start()*
@@ -942,18 +944,50 @@ term_start({cmd} [, {options}])			*term_start()*
 		   "in_io", "in_top", "in_bot", "in_name", "in_buf"
 		   "out_io", "out_name", "out_buf", "out_modifiable", "out_msg"
 		   "err_io", "err_name", "err_buf", "err_modifiable", "err_msg"
-		However, at least one of stdin, stdout or stderr must be
-		connected to the terminal.  When I/O is connected to the
-		terminal then the callback function for that part is not used.
-
+		On Unix:
+		stdin, stdout, and stderr are connected to a pty by default,
+		since bidirectional communication with the terminal is
+		required.  Setting "out_cb" does not switch stdout from the
+		pty to a pipe.  Only setting "err_cb" switches stderr to a
+		pipe.
+		Note: Since a pty is line-buffered and a pipe is
+		block-buffered, the order of output between stdout and stderr
+		may not be preserved.  Without "err_cb", stderr uses the same
+		pty as stdout, so the output order is preserved but stdout and
+		stderr cannot be distinguished.
+
+		On MS-Windows with |ConPTY|:
+		stdin, stdout, and stderr are always connected through pipes
+		to the pseudo console, regardless of callback settings.
+		Since stdout and stderr share the same pipe, they cannot be
+		separated by "err_cb".
+		This is because the CreatePseudoConsole() API only accepts one
+		input and one output handle, with no separate handle for
+		stderr.
+
+		Note: term_start() always uses RAW mode for its callbacks.
+		"out_cb" and "err_cb" receive the raw chunk of data as read
+		from the OS.  A single callback invocation may contain
+		multiple lines separated by NL, and (for stdout via a pty)
+		each line may have a trailing CR from the line discipline
+		(ONLCR).  If per-line handling is desired, the callback must
+		split "msg" on NL and strip the trailing CR itself.
+		Example: >
+			func Handle(ch, msg)
+			  for line in split(a:msg, "\n")
+			    echom substitute(line, '\r$', '', '')
+			  endfor
+			endfunc
+<
 		There are extra options:
 		   "term_name"	     name to use for the buffer name, instead
 				     of the command name.
 		   "term_rows"	     vertical size to use for the terminal,
 				     instead of using 'termwinsize'; valid
-				     range is from zero to 1000
+				     range is from 0 to 1000
 		   "term_cols"	     horizontal size to use for the terminal,
-				     instead of using 'termwinsize'
+				     instead of using 'termwinsize'; valid
+				     range is from 0 to 1000
 		   "vertical"	     split the window vertically; note that
 				     other window position can be defined with
 				     command modifiers, such as |:belowright|.
@@ -1007,7 +1041,7 @@ term_wait({buf} [, {time}])					*term_wait()*
 		Can also be used as a |method|: >
 			GetBufnr()->term_wait()
 <
-		Return type: |Number|
+		Return type: void
 
 ==============================================================================
 3. Terminal communication			 *terminal-communication*
@@ -1263,7 +1297,8 @@ Alternatively, press "s" to swap the first and second dump.  Do this several
 times so that you can spot the difference in the context of the text.
 
 ==============================================================================
-6. Debugging	*terminal-debug* *terminal-debugger* *package-termdebug*
+6. Debugging				*terminal-debug* *terminal-debugger*
+					*package-termdebug* *termdebug*
 
 The Terminal debugging plugin can be used to debug a program with gdb and view
 the source code in a Vim window.  Since this is completely contained inside
@@ -1423,11 +1458,25 @@ gdb:
  `:Arguments` {args}  set arguments for the next `:Run`
 
  *:Break*	set a breakpoint at the cursor position
- :Break {position}
+ :Break [{position}] [thread {nr}] [if {expr}]
 		set a breakpoint at the specified position
+		if {position} is omitted, use the current file and line
+		thread {nr} limits the breakpoint to one thread
+		if {expr} sets a conditional breakpoint
+		Examples: >
+			:Break if argc == 1
+			:Break 42 thread 3 if x > 10
+			:Break main
+<
  *:Tbreak*	set a temporary breakpoint at the cursor position
- :Tbreak {position}
-		set a temporary breakpoint at the specified position
+ :Tbreak [{position}] [thread {nr}] [if {expr}]
+		like `:Break`, but the breakpoint is deleted after
+		it is hit once
+		Examples: >
+			:Tbreak if argc == 1
+			:Tbreak 42 thread 3 if x > 10
+			:Tbreak main
+<
  *:Clear*	delete the breakpoint at the cursor position
  *:ToggleBreak*	set a breakpoint at the cursor position or delete all
 		breakpoints at the cursor position
@@ -1877,7 +1926,7 @@ Contributions for termdebug improvements are welcome.
 However, it is fairly common that during the development process you need some
 mechanisms like `echo` statements (or similar) to help you in your job.
 For this reason, you can set: >
-    let g:termdebug_config['debug'] = true
+    let g:termdebug_config['debug'] = v:true
 <
 This sets the `DEBUG` variable to `true`, which can be referenced in the
 source code.  An example of its usage follows: >
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index 990bcfb27b..8e8831b422 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -1,4 +1,4 @@
-*testing.txt*	For Vim version 9.1.  Last change: 2025 Oct 12
+*testing.txt*	For Vim version 9.2.  Last change: 2026 Apr 06
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -46,14 +46,14 @@ test_alloc_fail({id}, {countdown}, {repeat})		*test_alloc_fail()*
 		Can also be used as a |method|: >
 			GetAllocId()->test_alloc_fail()
 <
-		Return type: |Number|
+		Return type: void
 
 
 test_autochdir()					*test_autochdir()*
 		Set a flag to enable the effect of 'autochdir' before Vim
 		startup has finished.
 
-		Return type: |Number|
+		Return type: void
 
 
 test_feedinput({string})				*test_feedinput()*
@@ -64,7 +64,7 @@ test_feedinput({string})				*test_feedinput()*
 		Can also be used as a |method|: >
 			GetText()->test_feedinput()
 <
-		Return type: |Number|
+		Return type: void
 
 
 test_garbagecollect_now()			 *test_garbagecollect_now()*
@@ -75,13 +75,13 @@ test_garbagecollect_now()			 *test_garbagecollect_now()*
 		This will not work when called from a :def function, because
 		variables on the stack will be freed.
 
-		Return type: |Number|
+		Return type: void
 
 test_garbagecollect_soon()			 *test_garbagecollect_soon()*
 		Set the flag to call the garbagecollector as if in the main
 		loop.  Only to be used in tests.
 
-		Return type: |Number|
+		Return type: void
 
 test_getvalue({name})					*test_getvalue()*
 		Get the value of an internal variable.  These values for
@@ -237,7 +237,7 @@ test_ignore_error({expr})			 *test_ignore_error()*
 		Can also be used as a |method|: >
 			GetErrorText()->test_ignore_error()
 <
-		Return type: |Number|
+		Return type: void
 
 test_mswin_event({event}, {args})		*test_mswin_event()*
 		Generate a low-level MS-Windows {event} with arguments {args}
@@ -381,7 +381,7 @@ test_option_not_set({name})				*test_option_not_set()*
 		Can also be used as a |method|: >
 			GetOptionName()->test_option_not_set()
 <
-		Return type: |Number|
+		Return type: void
 
 test_override({name}, {val})				*test_override()*
 		Overrides certain parts of Vim's internal processing to be
@@ -409,6 +409,8 @@ test_override({name}, {val})				*test_override()*
 		redraw       disable the redrawing() function.
 		redraw_flag  ignore the RedrawingDisabled flag.
 		starting     reset the "starting" variable, see below.
+		syn_idlist_cache	disable the cache for resolving
+					syntax "contains"/cluster lists.
 		term_props   reset all terminal properties when the version
 			     string is detected.
 		ui_delay     time in msec to use in ui_delay(); overrules a
@@ -438,7 +440,7 @@ test_override({name}, {val})				*test_override()*
 <		Can also be used as a |method|: >
 			GetOverrideVal()-> test_override('starting')
 <
-		Return type: |Number|
+		Return type: void
 
 test_refcount({expr})					*test_refcount()*
 		Return the reference count of {expr}.  When {expr} is of a
@@ -457,7 +459,7 @@ test_setmouse({row}, {col})				*test_setmouse()*
 			call test_setmouse(4, 20)
 			call feedkeys("\", "xt")
 <
-		Return type: |Number|
+		Return type: void
 
 
 test_settime({expr})					*test_settime()*
@@ -472,13 +474,13 @@ test_settime({expr})					*test_settime()*
 		Can also be used as a |method|: >
 			GetTime()->test_settime()
 <
-		Return type: |Number|
+		Return type: void
 
 test_srand_seed([{seed}])				*test_srand_seed()*
 		When {seed} is given this sets the seed value used by
 		`srand()`.  When omitted the test seed is removed.
 
-		Return type: |Number|
+		Return type: void
 
 test_unknown()						*test_unknown()*
 		Return a value with unknown type.  Only useful for testing.
diff --git a/runtime/doc/textprop.txt b/runtime/doc/textprop.txt
index fbef22842b..ce28677913 100644
--- a/runtime/doc/textprop.txt
+++ b/runtime/doc/textprop.txt
@@ -1,7 +1,7 @@
-*textprop.txt*  For Vim version 9.1.  Last change: 2025 Oct 14
+*textprop.txt*	For Vim version 9.2.  Last change: 2026 May 31
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Displaying text with properties attached.	*textprop* *text-properties*
@@ -141,9 +141,9 @@ prop_add({lnum}, {col}, {props})
 				the current buffer is used
 		   id		user defined ID for the property; must be a
 				number, should be positive |E1510|;
-				when using "text" then "id" must not be
-				present and will be set automatically to a
-				negative number; otherwise zero is used
+				when using "text" then any "id" value is
+				ignored and a negative number is assigned
+				automatically; otherwise zero is used
 							*E1305*
 		   text		text to be displayed before {col}, or
 				above/below the line if {col} is zero; prepend
@@ -177,7 +177,9 @@ prop_add({lnum}, {col}, {props})
 				When omitted "truncate" is used.
 				Note that this applies to the individual text
 				property, the 'wrap' option sets the overall
-				behavior
+				behavior.  "wrap" only takes effect when the
+				'wrap' option is set; with 'nowrap' the text
+				is truncated at the right edge of the window.
 		All fields except "type" are optional.
 
 		It is an error when both "length" and "end_lnum" or "end_col"
@@ -224,14 +226,9 @@ prop_add({lnum}, {col}, {props})
 		is difficult to compute).
 		A negative "id" will be chosen and is returned.
 
-		Before text properties with text were supported it was
-		possible to use a negative "id", even though this was very
-		rare.  Now that negative "id"s are reserved for text
-		properties with text an error is given when using a negative
-		"id".  When a text property with text already exists using a
-		negative "id" results in *E1293* .  If a negative "id" was
-		used and later a text property with text is added results in
-		*E1339* .
+		Negative "id"s are reserved for text properties with "text"
+		and cannot be used otherwise.  Using a negative "id" results
+		in *E1293* .
 
 		Can also be used as a |method|: >
 			GetLnum()->prop_add(col, props)
@@ -275,6 +272,8 @@ prop_add_list({props}, [{item}, ...])			*prop_add_list()*
 <
 		Can also be used as a |method|: >
 			GetProp()->prop_add_list([[1, 1, 1, 2], [1, 4, 1, 8]])
+<
+		Return type: void
 
 
 prop_clear({lnum} [, {lnum-end} [, {props}]])		*prop_clear()*
@@ -288,7 +287,7 @@ prop_clear({lnum} [, {lnum-end} [, {props}]])		*prop_clear()*
 		Can also be used as a |method|: >
 			GetLnum()->prop_clear()
 <
-		Return type: |Number|
+		Return type: void
 
 
 prop_find({props} [, {direction}])			*prop_find()*
@@ -449,7 +448,7 @@ prop_type_add({name}, {props})		*prop_type_add()* *E969* *E970*
 		Can also be used as a |method|: >
 			GetPropName()->prop_type_add(props)
 <
-		Return type: |Number|
+		Return type: void
 
 
 prop_type_change({name}, {props})			*prop_type_change()*
@@ -460,7 +459,7 @@ prop_type_change({name}, {props})			*prop_type_change()*
 		Can also be used as a |method|: >
 			GetPropName()->prop_type_change(props)
 <
-		Return type: |Number|
+		Return type: void
 
 
 prop_type_delete({name} [, {props}])			*prop_type_delete()*
@@ -477,7 +476,7 @@ prop_type_delete({name} [, {props}])			*prop_type_delete()*
 		Can also be used as a |method|: >
 			GetPropName()->prop_type_delete()
 <
-		Return type: |Number|
+		Return type: void
 
 
 prop_type_get({name} [, {props}])			*prop_type_get()*
@@ -514,7 +513,9 @@ will move accordingly.
 
 When text is deleted and a text property no longer includes any text, it is
 deleted.  However, a text property that was defined as zero-width will remain,
-unless the whole line is deleted.
+unless the whole line is deleted.  When lines are joined by a multi-line
+substitute command, virtual text properties on the deleted lines are moved to
+the resulting joined line.
 								*E275*
 When a buffer is unloaded, all the text properties are gone.  There is no way
 to store the properties in a file.  You can only re-create them.  When a
diff --git a/runtime/doc/tips.txt b/runtime/doc/tips.txt
index c362bea164..9dde7dc41a 100644
--- a/runtime/doc/tips.txt
+++ b/runtime/doc/tips.txt
@@ -1,7 +1,7 @@
-*tips.txt*      For Vim version 9.1.  Last change: 2025 Oct 12
+*tips.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 Tips and ideas for using Vim				*tips*
@@ -30,7 +30,7 @@ Executing shell commands in a window		|shell-window|
 Hex editing					|hex-editing|
 Using <> notation in autocommands		|autocmd-<>|
 Highlighting matching parens			|match-parens|
-Opening help in the current window		|help-curwin|
+Opening help in the current window		|package-helpcurwin|
 
 ==============================================================================
 Editing C programs					*C-editing*
@@ -544,28 +544,22 @@ A slightly more advanced version is used in the |matchparen| plugin.
 <
 
 ==============================================================================
-Opening help in the current window				*help-curwin*
+Opening help in the current window			*package-helpcurwin*
 
-By default, help is displayed in a split window.  If you prefer it opens in
-the current window, try this custom `:HelpCurwin` command:
->
-	command -bar -nargs=? -complete=help HelpCurwin execute s:HelpCurwin()
-	let s:did_open_help = v:false
-
-	function s:HelpCurwin(subject) abort
-	  let mods = 'silent noautocmd keepalt'
-	  if !s:did_open_help
-	    execute mods .. ' help'
-	    execute mods .. ' helpclose'
-	    let s:did_open_help = v:true
-	  endif
-	  if !getcompletion(a:subject, 'help')->empty()
-	    execute mods .. ' edit ' .. &helpfile
-	    set buftype=help
-	  endif
-	  return 'help ' .. a:subject
-	endfunction
-<
+By default, help is displayed in a split window.  In some scenarios, you may
+prefer to open the help in the current window.  The optional helpcurwin
+package makes this possible.  Load the package manually, or in your |vimrc|,
+with: >vim
 
+    packadd helpcurwin
+<
+After it has loaded:
+- The command `:HelpCurwin` {subject} can be used to open help in the current
+  window.
+- If the current window contains a modified buffer, the plugin asks for
+  confirmation before replacing it.  If confirmed, the buffer becomes
+  hidden |hidden-buffer|.
+- The help file, |helpcurwin.txt|, will be available and describes the plugin
+  in more details.
 
  vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index cdafaf05e9..66b8f96ed5 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 9.1.  Last change: 2025 Sep 02
+*todo.txt*	For Vim version 9.2.  Last change: 2026 Jun 12
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -23,9 +23,7 @@ Priority classification:
 1   probably not
 -   unclassified
 
-						    *votes-for-changes*
-See |develop.txt| for development plans.  You can vote for which items should
-be worked on, but only if you sponsor Vim development.  See |sponsor|.
+See |develop.txt| for development plans.
 
 Issues can also be entered online: https://github.com/vim/vim/issues
 Only use this for bug reports, not for questions!  Those belong on the
@@ -205,11 +203,8 @@ Popup windows:
   positioned?  PopupNew?  Could be used to set some options or move it out of
   the way. (#5737)
   However, it may also cause trouble, changing the popup of another plugin.
-- Should popup_getoptions() also return the mask?  #7774
 - Add a way to use popup_menu() synchronously: instead of invoking the
   callback, return the choice. (Ben Jackson, #6534)
-- When using a popup for the info of a completion menu, and there is not
-  enough space, let the popup overlap with the menu. (#4544)
 - Implement flip option.
 - Make redrawing more efficient and avoid flicker:
     - put popup menu also in popup_mask?
@@ -294,23 +289,9 @@ Terminal emulator window:
 - When 'encoding' is not utf-8, or the job is using another encoding, setup
   conversions.
 
-Patch adds showcmd() function  #11708
-
-Cursor is after the end of the line:  #12137.
-
-Crash when a variable is removed while listing variables (Issue #11435)
-
-Problem with Visual highlight when 'linebreak' and 'showbreak' are set.
-#11272
-
-'cindent': compound literal indented wrong.  Check for " = " before "{"?
-#12491
-
 GUI Scroll test fails on FreeBSD when using Motif.  See FIXME in
 Test_scrollbars in src/test_gui.vim
 
-Support dark mode for MS-Windows: #12282
-
 Remote command escapes single quote with backslash, should be doubling the
 single quote in vim_strsave_escaped_ext()  #12202.
 
@@ -329,8 +310,6 @@ combining characters. (Ron Aaron, 2023 Apr 10)
 
 Add BufDeletePost.  #11041
 
-Add winid arg to col() and charcol()  #11466 (request #11461)
-
 'switchbuf' set to "newtab" does not work for ":cfirst" when in the quickfix
 window.  #12436
 
@@ -349,14 +328,6 @@ since it's an unusual situation.
 	noeol:¡
 	eof:CTRL-Z
 
-Test property disappears when using CR twice in a row.  OK when some text was
-entered. (#11151)
-
-Add 'keywordprg' to various ftplugin files:
-https://github.com/vim/vim/pull/5566
-
-PR #11579 to add visualtext(), return Visually selected text.
-
 PR #11860: Add more info to 'colorcolumn': display a character and highlight
 for each separate entry.  Disadvantage: option value gets very complicated
 with multiple entries, e.g. every 8 columns.
@@ -367,12 +338,6 @@ Stray characters in the shell #11719, caused by requesting a response for:
 - Whether kitty keyboard protocol is active
 Can we not request XT key sequences, or reduce them drastically?
 
-Issue #10512: Dynamic loading broken with Perl 5.36
-Damien has a patch (2022 Dec 4)
-
-Request #11965: Allow several "%=" items in 'statusline', makes it possible
-to have text in the center.
-
 Add some kind of ":whathappend" command and functions to make visible what the
 last few typed keys and executed commands are.  To be used when the user
 wonders what went wrong.  Could also be used for statistics #12046.
@@ -382,10 +347,6 @@ wonders what went wrong.  Could also be used for statistics #12046.
 - executed command lines
 - with more verbosity: what scripts/functions/autocommands were executed
 
-NFA regexp does not handle composing characters well: #10286
-    [ɔ̃] matches both ɔ and ɔ̃
-    \(ɔ\|ɔ̃\) matches ɔ and not ɔ̃
-
 Is there a way to make 'autowriteall' make a clean exit when the xterm is
 closed? (Dennis Nazic says files are preserved, okt 28).  Perhaps handle TERM
 like HUP?
@@ -412,15 +373,10 @@ Better terminal emulator support:
     add an optional additional one.  So that "xterm-kitty" can first load
     "xterm" and then add "kitty" entries.
 
-Using "A" and "o" in manually created fold (in empty buffer) does not behave
-consistently (James McCoy, #10698)
-
 In a timer callback, when using ":echo" and then input() the message is
 overwritten.  Could use ":echowin" and call redraw_cmd() in get_user_input().
 #11299
 
-Syntax include problem: #11277.  Related to Patch 8.2.2761
-
 To avoid flicker: add an option that when a screen clear is requested, instead
 of clearing it draws everything and uses "clear to end of line" for every line.
 Resetting 't_ut' already causes this?
@@ -446,18 +402,6 @@ Idea: when typing ":e /some/dir/" and "dir" does not exist, highlight in red.
 initialization to figure out the default value from 'shell'.  Add a test for
 this.
 
-Add a diff() function to use the built-in diff support in a script.
-#12321   Is the returned value in the right form now?
-
-Support translations for plugins: #11637  PR: #12447
-- Need a tool like xgettext for Vim script, generates a .pot file.
-  Need the equivalent of _() and N_(), perhaps TR() and TRN().
-- Instructions for how to create .po files and translate.
-- Script or Makefile to generate .mo files.
-- Instructions and perhaps a script to install the .mo files in the right
-  place.
-- Add variant of gettext() that takes a package name.
-
 With concealed text mouse click doesn't put the cursor in the right position.
 (Herb Sitz)  Fix by Christian Brabandt, 2011 Jun 16.  Doesn't work properly,
 need to make the change in where RET_WIN_BUF_CHARTABSIZE() is called.
@@ -473,15 +417,10 @@ Information for a specific terminal (e.g. gnome, tmux, konsole, alacritty) is
 spread out.  Make a section with copy/paste examples of script and pointers to
 more information.
 
-Request to use "." for the cursor column in search pattern \%<.c and \%<.v.
-(#8179)
-
 ":filter set termcap" only filters terminal codes, not keys. (#9297)
 
 Add an option to restrict 'incsearch' to not scroll the view. (Tavis Ormandy)
 
-Remove SPACE_IN_FILENAME ? It is only used for completion.
-
 When 'term' starts with "foot" then default t_TI and t_TE to the values used
 for the builtin xterm termcap.
 
@@ -494,8 +433,6 @@ New English spell files also have very slow suggestions.
 When 'spelloptions' is "camel" then zG doesn't work on some words.
 (Gary Johnson, 17 Oct 2022)
 
-SpellCap doesn't show below a closed fold. #12420
-
 'cdpath' problems:
 - Adding "~" to 'cdpath' doesn't work for completion?  (Davido, 2013 Aug 19)
 - Problem with 'cdpath' on MS-Windows when a directory is equal to $HOME.
@@ -519,8 +456,6 @@ there is a match do not scan the directory (possibly speeds up :find a lot).
 
 globpath() does not use 'wildignorecase' at all? (related to #8350)
 
-mksession uses :buffer instead of :edit in one place but not another. #10629
-
 Add 'termguiattr' option, use "gui=" attributes in the terminal?  Would work
 with 'termguicolors'. #1740
 
@@ -538,9 +473,6 @@ when redirecting to a local variable (function or script) storing the value
 won't work.  At least give an error.  Is there a way to make it work?
 #10616
 
-Completion for ":runtime" should show valid values, not what's in the current
-directory. (#11447)
-
 Add a "description" property to mappings.  #12205
 
 Add an option to start_timer() to return from the input loop with K_IGNORE.
@@ -556,9 +488,6 @@ Try setting a color then request the current color, like using t_u7.
 Add a v:register_used variable, which has the name of the register used for
 the last command, e.g. put.  #12003
 
-Make the jumplist behave like a tag stack. (#7738)  Should there be a more
-time bound navigation, like with undo?
-
 For testing, make a copy of ml_line_ptr instead of pointing it into the data
 block, so that valgrind can do out of bounds check.  Set ML_LINE_DIRTY flag or
 add ML_LINE_ALLOCED.
@@ -615,7 +544,6 @@ Add the <=> (spaceship) operator and "cond ?< expr ?= expr ?> expr"
 	let res = left < right ? lower : left == right ? equal : upper
     by:
 	let res = GetLeftFunc() <=> GetRightFunc() ?< lower ?= equal ?> upper
-Patch to make :q work with local arglist. (Christian Brabandt, #6286)
 
 Why does Test_invalid_sid() not work in the GUI?
 
@@ -805,28 +733,6 @@ Window size changes after closing a tab. (#4741)
 
 Problem with colors in terminal window. (Jason Franklin, 2019 May 12)
 
-Color schemes:
-NOTE: modernizing the default colorschemes _AND_ introducing new ones is now
-a project in its own right: https://github.com/vim/colorschemes. Feel free to
-reach out if you want to lend a hand.
-- Lifepillar: Updated/cleaned up color schemes:
-  https://github.com/lifepillar/vim8-colorschemes.
-- Include a few color schemes, based on popularity:
-  - http://www.vim.org/scripts/script_search_results.php?keywords=&script_type=color+scheme&order_by=rating&direction=descending&search=search
-http://vimawesome.com/?q=tag:color-scheme
-- Use names that indicate their appearance (Christian Brabandt, 2017 Aug 3)
-  - monokai - Xia Crusoe (2017 Aug 4)
-  - seoul256 - Christian Brabandt (2017 Aug 3)
-  - gruvbox -  Christian Brabandt (2017 Aug 3) (simplified version from
-        Lifepillar, 2018 Jan 22, #2573)
-  - janah - Marco Hinz (2017 Aug 4)
-  - apprentice - Romain Lafourcade (2017 Aug 6)  remarks about help file #1964
-- Suggested by Hiroki Kokubun:
-  - [Iceberg](https://github.com/cocopon/iceberg.vim) (my one)
-  - [hybrid](https://github.com/w0ng/vim-hybrid)
-- Include solarized color scheme?, it does not support termguicolors.
-  - Sanitized version of pablo (Lifepillar, 2017 Nov 21)
-
 Bug: "vipgw" does not put cursor back where it belongs. (Jason Franklin, 2019
 Mar 5)
 
@@ -871,15 +777,13 @@ balloonexpr() on MS-Windows GUI doesn't handle accented chars? (nivaemail,
 2018 Sep 14)
 
 More warnings from static analysis:
-https://lgtm.com/projects/g/vim/vim/alerts/?mode=list
+https://lgtm.com/projects/g/vim/vim/alerts/?mode=list (URL no longer resolves)
 
 Not existing directory in CDPATH leads to two shell calls. (#4525)
 
 Use dict_iterate_start() / dict_iterate_next() instead of relying on the
 internals of the dict structure.
 
-nvo-mode mapping works on Windows, not on Linux. (#3678)
-
 Redo only remembers the last change.  Could use "{count}g." to redo an older
 change.  How does the user know which change?  At least have a way to list
 them: ":repeats".  Add to history, like search history and command line history.
@@ -1073,8 +977,6 @@ CmdlineEnter.  (xtal8, 2017 Oct 30, #2263)
 Add some way to get the nested state.  Although CmdwinEnter is obviously
 always nested.
 
-matchit hasn't been maintained for a long time.  #955.
-
 Problem with 'delcombine'. (agguser, 2017 Nov 10, #2313)
 
 'delcombine' does not work for the command line. (Tony Mechelynck, 2009 Jul
@@ -2097,9 +1999,6 @@ Dominique can't reproduce it.
 ":function f(x) keepjumps" creates a function where every command is executed
 like it has ":keepjumps" before it.
 
-Coverity: Check if there are new reported defects:
-https://scan.coverity.com/projects/241
-
 Problem with editing file in binary mode. (Ingo Krabbe, 2009 Oct 8)
 
 Display error when 'tabline' that includes a file name with double-width
@@ -2211,7 +2110,6 @@ es_ES.utf-8" gives an error and doesn't switch messages. (Dominique Pelle,
 
 When $HOME contains special characters, such as a comma, escape them when used
 in an option. (Michael Hordijk, 2009 May 5)
-Turn "esc" argument of expand_env_esc() into string of chars to be escaped.
 
 Should make 'ignorecase' global-local, so that it makes sense setting it from
 a modeline.
@@ -5786,7 +5684,6 @@ Argument list:
 
 
 Registers:
-8   Don't display empty registers with ":display". (Etienne)
 8   Add put command that overwrites existing text.  Should also work for
     blocks.  Useful to move text around in a table.  Works like using "R ^R r"
     for every line.
diff --git a/runtime/doc/uganda.txt b/runtime/doc/uganda.txt
index 1abc2bd3ea..0e803bc338 100644
--- a/runtime/doc/uganda.txt
+++ b/runtime/doc/uganda.txt
@@ -1,23 +1,35 @@
-*uganda.txt*    For Vim version 9.1.  Last change: 2025 Aug 10
+*uganda.txt*	For Vim version 9.2.  Last change: 2026 Jun 07
 
 
-		  VIM REFERENCE MANUAL    by Bram Moolenaar
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
 
 
 			*uganda* *Uganda* *copying* *copyright* *license*
 SUMMARY
-								*iccf* *ICCF*
+							*Kuwasha*
 Vim is Charityware.  You can use and copy it as much as you like, but you are
 encouraged to make a donation for needy children in Uganda.  Please see |kcc|
-below or visit the ICCF web site, available at these URLs:
+below or visit the Kuwasha web site, available at the following URL:
 
-	https://iccf-holland.org/
-	https://www.vim.org/iccf/
-	https://www.iccf.nl/
+	https://www.kuwasha.net
 
 You can also sponsor the development of Vim, see |sponsor|.  The money goes to
 Uganda anyway.
 
+							*iccf* *ICCF*
+ICCF Holland and Kuwasha~
+
+|Bram| Moolenaar's charity, ICCF Holland, has long supported the education of
+children in Uganda through the Kibaale Children's Centre.  Following Bram's
+passing in 2023, ICCF Holland transferred all activities to its sister charity
+Kuwasha in Canada and dissolved at the end of 2025.
+
+Donations from Vim users are still welcome and will continue to go directly to
+Uganda.  To continue supporting this cause, please send contributions to
+Kuwasha.
+
+License~
+
 The Open Publication License applies to the Vim documentation, see
 |manual-copyright|.
 
@@ -53,12 +65,14 @@ II) It is allowed to distribute a modified (or extended) version of Vim,
 	  maintainer will do with your changes and under what license they
 	  will be distributed is negotiable.  If there has been no negotiation
 	  then this license, or a later version, also applies to your changes.
-	  The current maintainers are listed here: https://github.com/orgs/vim/people.
-	  If this changes it will be announced in appropriate places (most likely
-	  vim.sf.net, www.vim.org and/or comp.editors).  When it is completely
-	  impossible to contact the maintainer, the obligation to send him
-	  your changes ceases.  Once the maintainer has confirmed that he has
-	  received your changes they will not have to be sent again.
+	  The current maintainers are listed here:
+	      https://github.com/orgs/vim/people
+	  If this changes it will be announced in appropriate places (most
+	  likely vim.sf.net, www.vim.org and/or comp.editors).  When it is
+	  completely impossible to contact the maintainer, the obligation to
+	  send him your changes ceases.  Once the maintainer has confirmed
+	  that he has received your changes they will not have to be sent
+	  again.
        b) If you have received a modified Vim that was distributed as
 	  mentioned under a) you are allowed to further distribute it
 	  unmodified, as mentioned at I).  If you make additional changes the
@@ -185,84 +199,43 @@ medical help.  Since 2020 a maternity ward was added and 24/7 service is
 available.  When needed, transport to a hospital is offered.  Immunization
 programs are carried out and help is provided when an epidemic is breaking out
 (measles and cholera have been a problem).
-							*donate*
-Summer 1994 to summer 1995 I spent a whole year at the centre, working as a
-volunteer.  I have helped to expand the centre and worked in the area of water
-and sanitation.  I learned that the help that the KCC provides really helps.
-When I came back to Holland, I wanted to continue supporting KCC.  To do this
-I'm raising funds and organizing the sponsorship program.  Please consider one
-of these possibilities:
-
-1.  Sponsor a child in primary school: 17 euro a month (or more).
-2.  Sponsor a child in secondary school: 25 euro a month (or more).
-3.  Sponsor the clinic: Any amount a month or quarter
-4.  A one-time donation
-
-Compared with other organizations that do child sponsorship the amounts are
-very low.  This is because the money goes directly to the centre.  Less than
-5% is used for administration.  This is possible because this is a small
-organization that works with volunteers.  If you would like to sponsor a
-child, you should have the intention to do this for at least one year.
-
-How do you know that the money will be spent right?  First of all you have my
-personal guarantee as the author of Vim.  I trust the people that are working
-at the centre, I know them personally.  Furthermore, the centre has been
+
+Summer 1994 to summer 1995 Bram spent a whole year at the centre, working as a
+volunteer.  Bram helped to expand the centre and worked in the area of water
+and sanitation.  Bram learned that the help that the KCC provides really
+helps. When Bram came back to Holland, he wanted to continue supporting KCC.
+To do this he has been raising funds and organizing the sponsorship program.
+
+How do you know that the money will be spent right?  First of all you have the
+personal guarantee of Bram as the author of Vim, who knew the people working
+at the centre personally.  Furthermore, the centre has been
 co-sponsored and inspected by World Vision, Save the Children Fund and is now
-under the supervision of Pacific Academy Outreach Society.  The centre is
-visited about once a year to check the progress (at our own cost).  I have
-visited the centre myself many times, starting in 1993.  The visit reports are
-on the ICCF web site.
+under the supervision of Pacific Academy Outreach Society.  Bram has
+visited the centre many times, starting in 1993.  The visit reports are
+have been shared on the ICCF web site (may no longer be available).
 
-If you have any further questions, send e-mail: .
+If you have any further questions, send an e-mail: info@kuwasha.net.
 
 The address of the centre is:
 			Kibaale Children's Centre
 			p.o. box 1658
 			Masaka, Uganda, East Africa
 
-Sending money:						*iccf-donations*
-
-Check the ICCF web site for the latest information!  See |iccf| for the URL.
-
+							*donate*
+Sending money:
 
-USA:		The methods mentioned below can be used.
-		If you must send a check send it to our Canadian partner:
-		https://www.kuwasha.net/
+Check the Kuwasha web site for the latest information!
 
-Canada:		Contact Kuwasha in Surrey, Canada.  They take care of the
-		Canadian sponsors for the children in Kibaale.  Kuwasha
-		forwards 100% of the money to the project in Uganda.  You can
-		send them a one time donation directly.
 		Look on their site for information about sponsorship:
-		https://www.kuwasha.net/
+		    https://www.kuwasha.net/
 		If you make a donation to Kuwasha you will receive a tax
 		receipt which can be submitted with your tax return.
 
-Holland:	Transfer to the account of "Stichting ICCF Holland" in
-		Amersfoort.  This will allow for tax deduction if you live in
-		Holland.  ING bank, IBAN: NL95 INGB 0004 5487 74
-
-Germany:	It is possible to make donations that allow for a tax return.
-		Check the ICCF web site for the latest information:
-			https://iccf-holland.org/germany.html
-
-Europe:		Use a bank transfer if possible.  See "Others" below for the
-		swift code and IBAN number.
-		Any other method should work.  Ask for information about
-		sponsorship.
-
 Credit Card:	You can use PayPal to send money with a Credit card.  This is
 		the most widely used Internet based payment system.  It's
 		really simple to use.  Use this link to find more info:
-		    https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q
+		    https://www.paypal.com/ncp/payment/ZZPJ7XEYD3CZ2
 		The e-mail address for sending the money to is:
-		    Bram@iccf-holland.org
-
-Others:		Transfer to this account if possible:
-		    ING bank:	IBAN: NL95 INGB 0004 5487 74
-				Swift code: INGBNL2A
-		    under the name "stichting ICCF Holland", Amersfoort
-		Checks are not accepted.
-
+		    info@kuwasha.net
 
  vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/undo.txt b/runtime/doc/undo.txt
index e8a0417eed..c32cbe030f 100644
--- a/runtime/doc/undo.txt
+++ b/runtime/doc/undo.txt
@@ -1,4 +1,4 @@
-*undo.txt*      For Vim version 9.1.  Last change: 2025 Oct 26
+*undo.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
diff --git a/runtime/doc/userfunc.txt b/runtime/doc/userfunc.txt
index aa8ed9ec8c..b0051fb27b 100644
--- a/runtime/doc/userfunc.txt
+++ b/runtime/doc/userfunc.txt
@@ -1,4 +1,4 @@
-*userfunc.txt*	For Vim version 9.1.  Last change: 2025 Oct 28
+*userfunc.txt*	For Vim version 9.2.  Last change: 2026 May 31
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -27,13 +27,13 @@ make them script-local.  If you do use a global function then avoid obvious,
 short names.  A good habit is to start the function name with the name of the
 script, e.g., "HTMLcolor()".
 
-In legacy script it is also possible to use curly braces, see
+In legacy Vim script it is also possible to use curly braces, see
 |curly-braces-names|.
 
 The |autoload| facility is useful to define a function only when it's called.
 
 							*local-function*
-A function local to a legacy script must start with "s:".  A local script
+A function local to a legacy Vim script must start with "s:".  A local script
 function can only be called from within the script and from functions, user
 commands and autocommands defined in the script.  It is also possible to call
 the function from a mapping defined in the script, but then || must be
@@ -80,11 +80,11 @@ See |:verbose-cmd| for more information.
 			matching |:endfunction|.
 								*E1267*
 			The name must be made of alphanumeric characters and
-			'_', and must start with a capital or "s:" (see
-			above).  Note that using "b:" or "g:" is not allowed.
-			(since patch 7.4.260 E884 is given if the function
-			name has a colon in the name, e.g. for "foo:bar()".
-			Before that patch no error was given).
+			'_' and must start with a capital or "s:" (see above).
+			Note that using "b:", "l:", etc. is not allowed (since
+			patch 7.4.260 E884 is given if the function name has a
+			colon, e.g. for "foo:bar()"), while a leading "g:" is
+			skipped and still requires a following capital letter.
 
 			{name} can also be a |Dictionary| entry that is a
 			|Funcref|: >
@@ -195,9 +195,19 @@ See |:verbose-cmd| for more information.
 			When a function ends without an explicit ":return",
 			the number 0 is returned.
 
-			In a :def function *E1095* is given if unreachable
-			code follows after the `:return`.
-			In legacy script there is no check for unreachable
+			In |Vim9| script:
+			- `:return` cannot be shortened, and
+			- *E1095* is given if unreachable code follows after
+			  the `:return`.  For example:
+>vim9
+			  vim9script
+			  var L: func = (): bool => {
+			    return false
+			    echo 'no'  # E1095: Unreachable code after :return
+			  }
+			  echo L()
+<
+			In legacy Vim script there is no check for unreachable
 			lines, thus there is no warning if commands follow
 			`:return`.  Also, there is no check if the following
 			line contains a valid command.  Forgetting the line
diff --git a/runtime/doc/usr_01.txt b/runtime/doc/usr_01.txt
index 704c1d4774..9afe54035a 100644
--- a/runtime/doc/usr_01.txt
+++ b/runtime/doc/usr_01.txt
@@ -1,7 +1,7 @@
-*usr_01.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_01.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL      by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      About the manuals
@@ -194,7 +194,7 @@ manual.  Not only by providing literal text, but also by setting the tone and
 style.
 
 If you make money through selling the manuals, you are strongly encouraged to
-donate part of the profit to help AIDS victims in Uganda.  See |iccf|.
+donate part of the profit to help AIDS victims in Uganda.  See |Kuwasha|.
 
 ==============================================================================
 
diff --git a/runtime/doc/usr_02.txt b/runtime/doc/usr_02.txt
index 6bb860fbed..4f83a8f578 100644
--- a/runtime/doc/usr_02.txt
+++ b/runtime/doc/usr_02.txt
@@ -1,7 +1,7 @@
-*usr_02.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_02.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL      by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			    The first steps in Vim
@@ -522,8 +522,8 @@ Summary:					*help-summary*  >
 <   You can see the user guide topics |03.9| and |usr_27.txt| in the
    introduction.
 
-3) Options are enclosed in single apostrophes.  To go to the help topic for the
-   list option: >
+3) Options are enclosed in single apostrophes.  To go to the help topic for
+   the list option: >
 	:help 'list'
 <   If you only know you are looking for a certain option, you can also do: >
 	:help options.txt
diff --git a/runtime/doc/usr_03.txt b/runtime/doc/usr_03.txt
index c5b5fe95e6..5da19697e9 100644
--- a/runtime/doc/usr_03.txt
+++ b/runtime/doc/usr_03.txt
@@ -1,7 +1,7 @@
-*usr_03.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_03.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			     Moving around
diff --git a/runtime/doc/usr_04.txt b/runtime/doc/usr_04.txt
index 60fb09a215..f6580738c5 100644
--- a/runtime/doc/usr_04.txt
+++ b/runtime/doc/usr_04.txt
@@ -1,7 +1,7 @@
-*usr_04.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_04.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			     Making small changes
diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt
index 1be470e132..4a3444b61a 100644
--- a/runtime/doc/usr_05.txt
+++ b/runtime/doc/usr_05.txt
@@ -1,7 +1,7 @@
-*usr_05.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_05.txt*	For Vim version 9.2.  Last change: 2026 May 11
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      Set your settings
@@ -338,8 +338,8 @@ This only works in a Vim script file, not when typing commands at the
 command line.
 
 >
-	command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
-		  \ | wincmd p | diffthis
+	command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_
+		  \ | diffthis | wincmd p | diffthis
 
 This adds the ":DiffOrig" command.  Use this in a modified buffer to see the
 differences with the file it was loaded from.  See |diff| and |:DiffOrig|.
@@ -399,13 +399,17 @@ The ":map" command (with no arguments) lists your current mappings.  At
 least the ones for Normal mode.  More about mappings in section |40.1|.
 
 ==============================================================================
-*05.5*	Adding a package  *add-package* *matchit-install* *package-matchit*
+*05.5*	Adding a package  *add-package*
 
 A package is a set of files that you can add to Vim.  There are two kinds of
 packages: optional and automatically loaded on startup.
 
 The Vim distribution comes with a few packages that you can optionally use.
-For example, the matchit plugin.  This plugin makes the "%" command jump to
+
+------------------------------------------------------------------------------
+Adding the matchit package		*matchit-install* *package-matchit*
+------------------------------------------------------------------------------
+For example, the matchit package  This plugin makes the "%" command jump to
 matching HTML tags, if/else/endif in Vim scripts, etc.  Very useful, although
 it's not backwards compatible (that's why it is not enabled by default).
 
@@ -434,7 +438,9 @@ an archive or as a repository.  For an archive you can follow these steps:
 	   Here "fancytext" is the name of the package, it can be anything
 	   else.
 
+------------------------------------------------------------------------------
 Adding the editorconfig package *editorconfig-install* *package-editorconfig*
+------------------------------------------------------------------------------
 
 Similar to the matchit package, to load the distributed editorconfig plugin
 when Vim starts, add the following line to your vimrc file: >
@@ -444,7 +450,9 @@ After restarting your Vim, the plugin is active and you can read about it at: >
 	:h editorconfig.txt
 
 
+------------------------------------------------------------------------------
 Adding the comment package		*comment-install* *package-comment*
+------------------------------------------------------------------------------
 
 Load the plugin with this command: >
 	packadd comment
@@ -457,7 +465,9 @@ the package loaded.  Once the package is loaded, read about it at: >
 	:h comment.txt
 
 
+------------------------------------------------------------------------------
 Adding the nohlsearch package	*nohlsearch-install* *package-nohlsearch*
+------------------------------------------------------------------------------
 
 Load the plugin with this command: >
 	packadd nohlsearch
@@ -471,7 +481,9 @@ To disable the effect of the plugin after it has been loaded: >
 	au! nohlsearch
 <
 
+------------------------------------------------------------------------------
 Adding the highlight-yank package	*hlyank-install* *package-hlyank*
+------------------------------------------------------------------------------
 
 Load the plugin with this command: >
 	packadd hlyank
@@ -497,6 +509,30 @@ To highlight in visual mode, use: >
 To disable the effect of the plugin after it has been loaded: >
 	au! hlyank
 
+Additionally, the plugin can also highlight regions that are put using the
+|TextPutPost| autocommand.  This is by default disabled and can be enabled
+using: >
+	:let g:hlput_enable = v:true
+<
+The following configuration variables can be used are "g:hlput_hlgroup" and
+"g:hlput_duration", which have the same effect as their yank counterparts: >
+	:let g:hlput_hlgroup = 'IncSearch'
+	:let g:hlput_duration = 300
+
+------------------------------------------------------------------------------
+Adding the osc52 package		*osc52-install* *package-osc52*
+------------------------------------------------------------------------------
+
+Load the plugin with this command: >
+	packadd osc52
+<
+The osc52.vim package provides support for the OSC 52 terminal command, which
+allows an application to access the clipboard by communicating directly with
+your terminal.
+
+Once the package is loaded, read about it at: >
+	:h osc52.txt
+
 More information about packages can be found here: |packages|.
 
 ==============================================================================
@@ -539,7 +575,8 @@ when you use Vim.  There are only two steps for adding a global plugin:
 GETTING A GLOBAL PLUGIN
 
 Where can you find plugins?
-- Some are always loaded, you can see them in the directory $VIMRUNTIME/plugin.
+- Some are always loaded, you can see them in the directory
+  $VIMRUNTIME/plugin.
 - Some come with Vim.  You can find them in the directory $VIMRUNTIME/macros
   and its sub-directories and under $VIM/vimfiles/pack/dist/opt/.
 - Download from the net.  There is a large collection on http://www.vim.org.
diff --git a/runtime/doc/usr_06.txt b/runtime/doc/usr_06.txt
index d84444db3f..cea2b6161e 100644
--- a/runtime/doc/usr_06.txt
+++ b/runtime/doc/usr_06.txt
@@ -1,7 +1,7 @@
-*usr_06.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_06.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			  Using syntax highlighting
diff --git a/runtime/doc/usr_07.txt b/runtime/doc/usr_07.txt
index 2ac30ec26b..57c53a1b94 100644
--- a/runtime/doc/usr_07.txt
+++ b/runtime/doc/usr_07.txt
@@ -1,7 +1,7 @@
-*usr_07.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_07.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			  Editing more than one file
diff --git a/runtime/doc/usr_08.txt b/runtime/doc/usr_08.txt
index 1237c363fa..b904e5c76c 100644
--- a/runtime/doc/usr_08.txt
+++ b/runtime/doc/usr_08.txt
@@ -1,7 +1,7 @@
-*usr_08.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_08.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      Splitting windows
@@ -444,7 +444,8 @@ To go the other way use: >
 
 	[c
 
-Prepended a count to jump further away.
+Prepend a count to jump further away. Thus "4]c" jumps to the fourth next
+change, and "3[c" jumps to the third previous change.
 
 
 REMOVING CHANGES
diff --git a/runtime/doc/usr_09.txt b/runtime/doc/usr_09.txt
index 666dbd4e98..7c81a6fa13 100644
--- a/runtime/doc/usr_09.txt
+++ b/runtime/doc/usr_09.txt
@@ -1,7 +1,7 @@
-*usr_09.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_09.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 				Using the GUI
@@ -132,8 +132,8 @@ select text in a standard manner.  The X Window system also has a standard
 system for using the mouse.  Unfortunately, these two standards are not the
 same.
    Fortunately, you can customize Vim.  You can make the behavior of the mouse
-work like an X Window system mouse or a Microsoft Windows mouse.  The following
-command makes the mouse behave like an X Window mouse: >
+work like an X Window system mouse or a Microsoft Windows mouse.  The
+following command makes the mouse behave like an X Window mouse: >
 
 	:behave xterm
 
diff --git a/runtime/doc/usr_10.txt b/runtime/doc/usr_10.txt
index ebf4bab40f..72738d3c20 100644
--- a/runtime/doc/usr_10.txt
+++ b/runtime/doc/usr_10.txt
@@ -1,7 +1,7 @@
-*usr_10.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_10.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			     Making big changes
@@ -296,8 +296,8 @@ five lines before the last line in the file.
 
 USING MARKS
 
-Instead of figuring out the line numbers of certain positions, remembering them
-and typing them in a range, you can use marks.
+Instead of figuring out the line numbers of certain positions, remembering
+them and typing them in a range, you can use marks.
    Place the marks as mentioned in chapter 3.  For example, use "mt" to mark
 the top of an area and "mb" to mark the bottom.  Then you can use this range
 to specify the lines between the marks (including the lines with the marks): >
@@ -736,9 +736,10 @@ of the program replaces these lines.
 	line 44			      line 55
 	last line		      last line
 
-The "!!" command filters the current line through a filter.  In Unix the "date"
-command prints the current time and date.  "!!date" replaces the current
-line with the output of "date".  This is useful to add a timestamp to a file.
+The "!!" command filters the current line through a filter.  In Unix the
+"date" command prints the current time and date.  "!!date" replaces the
+current line with the output of "date".  This is useful to add a timestamp to
+a file.
 
 Note: There is a difference between "!cmd" (e.g. using it without any file
 range) and "{range}!cmd".  While the former will simply execute the external
diff --git a/runtime/doc/usr_11.txt b/runtime/doc/usr_11.txt
index f33daf6821..5a5ba59abd 100644
--- a/runtime/doc/usr_11.txt
+++ b/runtime/doc/usr_11.txt
@@ -1,7 +1,7 @@
-*usr_11.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_11.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			   Recovering from a crash
diff --git a/runtime/doc/usr_12.txt b/runtime/doc/usr_12.txt
index 4ca4a8c245..bc90e8e6ab 100644
--- a/runtime/doc/usr_12.txt
+++ b/runtime/doc/usr_12.txt
@@ -1,7 +1,7 @@
-*usr_12.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_12.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 				Clever tricks
diff --git a/runtime/doc/usr_20.txt b/runtime/doc/usr_20.txt
index 7bd2faa3f6..5b23ac89d5 100644
--- a/runtime/doc/usr_20.txt
+++ b/runtime/doc/usr_20.txt
@@ -1,7 +1,7 @@
-*usr_20.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_20.txt*	For Vim version 9.2.  Last change: 2026 Jun 02
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 		     Typing command-line commands quickly
@@ -116,9 +116,18 @@ command.  It's like deleting the ":" or "/" that the line starts with.
 *20.2*	Command line abbreviations
 
 Some of the ":" commands are really long.  We already mentioned that
-":substitute" can be abbreviated to ":s".  This is a generic mechanism, all
-":" commands can be abbreviated.
-
+":substitute" can be abbreviated to ":s".  This is a generic mechanism, and
+most ":" commands can be abbreviated.  However, in Vim9 script some commands
+cannot be shortened to improve readability - see |vim9-no-shorten|.
+
+The builtin function |fullcommand()| can be used to return an abbreviated
+command's full name.  For example, the following commands echo "edit", "echo",
+and "echowindow":
+>vim
+	:echo fullcommand('e')
+	:echo fullcommand('ec')
+	:echo fullcommand('echow')
+<
 How short can a command get?  There are 26 letters, and many more commands.
 For example, ":set" also starts with ":s", but ":s" doesn't start a ":set"
 command.  Instead ":set" can be abbreviated to ":se".
diff --git a/runtime/doc/usr_21.txt b/runtime/doc/usr_21.txt
index 8621887a49..56835256ac 100644
--- a/runtime/doc/usr_21.txt
+++ b/runtime/doc/usr_21.txt
@@ -1,7 +1,7 @@
-*usr_21.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_21.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			   Go away and come back
diff --git a/runtime/doc/usr_22.txt b/runtime/doc/usr_22.txt
index d03cb53fe2..0740987c27 100644
--- a/runtime/doc/usr_22.txt
+++ b/runtime/doc/usr_22.txt
@@ -1,7 +1,7 @@
-*usr_22.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_22.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			   Finding the file to edit
@@ -30,15 +30,15 @@ Vim has a plugin that makes it possible to edit a directory.  Try this: >
 
 Through the magic of autocommands and Vim scripts, the window will be filled
 with the contents of the directory.  It looks like this (slightly cleaned up
-so that it fits within 80 chars): >
+so that it fits within 78 chars): >
 
-  " ===========================================================================
-  " Netrw Directory Listing                                        (netrw v180)
+  " ==========================================================================
+  " Netrw Directory Listing                                       (netrw v184)
   "   /path/to/vim/runtime/doc
   "   Sorted by      name
   "   Sort sequence: [\/]$,*,\(\.bak\|\~\|\.o\|\.h\|\.info\|\.swp\)[*@]\=$
   "   Quick Help: :help -:go up dir D:delete R:rename s:sort-by x:special
-  " ===========================================================================
+  " ==========================================================================
   ../
   ./
   check/
@@ -51,15 +51,12 @@ so that it fits within 80 chars): >
 
 You can see these items:
 
-1.  The name of the browsing tool and its version number
-2.  The name of the browsing directory
-3.  The method of sorting (may be by name, time, or size)
-4.  How names are to be sorted (directories first, then *.h files,
-    *.c files, etc)
-5.  How to get help (use the  key), and an abbreviated listing
-    of available commands
-6.  A listing of files, including "../", which allows one to list
-    the parent directory.
+1. The name of the browsing tool and its version number
+2. The name of the browsing directory
+3. The method of sorting (may be by name, time, or size)
+4. How names are to be sorted (directories first, then by extension, etc.)
+5. How to get help (the  key), and an abridged list of available commands
+6. A listing of files, including "../" (it will list the parent directory).
 
 If you have syntax highlighting enabled, the different parts are highlighted
 so as to make it easier to spot them.
@@ -76,76 +73,66 @@ higher.  Pressing "-" does the same thing, without the need to move to the
 "../" item first.
 
 You can press  to get help on the things you can do in the netrw file
-browser.  This is what you get: >
-
-    9. Directory Browsing	 netrw-browse   netrw-dir   netrw-list   netrw-help
-
-    MAPS								 netrw-maps
-	 .............Help.......................................|netrw-help|
-	 .............Browsing...................................|netrw-cr|
-	 ............Deleting Files or Directories..............|netrw-delete|
-	 -................Going Up...................................|netrw--|
-	 a................Hiding Files or Directories................|netrw-a|
-	 mb...............Bookmarking a Directory....................|netrw-mb|
-	 gb...............Changing to a Bookmarked Directory.........|netrw-gb|
-	 cd...............Make Browsing Directory The Current Dir....|netrw-c|
-	 d................Make A New Directory.......................|netrw-d|
-	 D................Deleting Files or Directories..............|netrw-D|
-	 ............Edit File/Directory Hiding List............|netrw-ctrl-h|
-	 i................Change Listing Style.......................|netrw-i|
-	 ............Refreshing the Listing.....................|netrw-ctrl-l|
-	 o................Browsing with a Horizontal Split...........|netrw-o|
-	 p................Use Preview Window.........................|netrw-p|
-	 P................Edit in Previous Window....................|netrw-p|
-	 q................Listing Bookmarks and History..............|netrw-qb|
-	 r................Reversing Sorting Order....................|netrw-r|
-<	(etc)
-
+browser.  This is what you get:
+>
+ QUICK HELP						netrw-quickhelp
+                       (Use ctrl-] to select a topic)
+	Intro to Browsing...............................netrw-intro-browse
+	  Quick Reference: Maps.........................netrw-quickmap
+	  Quick Reference: Commands.....................netrw-browse-cmds
+<
 The  key thus brings you to a netrw directory browsing contents help page.
 It's a regular help page; use the usual |CTRL-]| to jump to tagged help items
-and |CTRL-O| to jump back.
-
-To select files for display and editing: (with the cursor is atop a filename)
-
-			Open the file in the current window.	   |netrw-cr|
-	o		Horizontally split window and display file |netrw-o|
-	v		Vertically split window and display file   |netrw-v|
-	p		Use the |preview-window|		   |netrw-p|
-	P		Edit in the previous window		   |netrw-P|
-	t		Open file in a new tab			   |netrw-t|
-
+and |CTRL-O| to jump back.  So, if you CTRL-] on |netrw-quickmap| you will
+jump to this:
+>
+				netrw-quickmap  netrw-quickmaps
+ QUICK REFERENCE: MAPS				netrw-browse-maps
+
+	  ---			-----------------			----
+	  Map			Quick Explanation			Link
+	  ---			-----------------			----
+	 	Causes Netrw to issue help
+	 	Netrw will enter the directory or read the file      netrw-cr
+	 	Netrw will attempt to remove the file/directory      netrw-del
+<	 (etc.)
+
+To select files for display and editing (with the cursor atop a filename):
+>
+	   o	Enter the file/directory under the cursor in a new   netrw-o
+		browser window.  A horizontal split is used.
+	   O	Obtain a file specified by cursor                    netrw-O
+	   p	Preview the file                                     netrw-p
+	   P	Browse in the previously used window                 netrw-P
+	   v	Enter the file/directory under the cursor in a new   netrw-v
+		browser window.  A vertical split is used.
+<
 The following normal-mode commands may be used to control the browser display:
-
-	i		Controls listing style (thin, long, wide, and tree).
-			The long listing includes size and date information.
-	s		Repeatedly pressing s will change the way the files
-			are sorted; one may sort on name, modification time,
-			or size.
-	r		Reverse the sorting order.
-
+>
+	   i	Cycle between thin, long, wide, and tree listings    netrw-i
+	   r	Reverse sorting order                                netrw-r
+	   s	Select sorting style: by name, time, or file size    netrw-s
+<
 As a sampling of extra normal-mode commands:
-
-	cd		Change Vim's notion of the current directory to be
-			the same as the browser directory.  (see
-			|g:netrw_keepdir| to control this, too)
-	R		Rename the file or directory under the cursor; a
-			prompt will be issued for the new name.
-	D		Delete the file or directory under the cursor; a
-			confirmation request will be issued.
-	mb gb		Make bookmark/goto bookmark
-
-
+>
+	   cd	Make browsing directory the current directory        netrw-cd
+	   D	Attempt to remove the file(s)/directory(ies)         netrw-D
+	   gb	Go to previous bookmarked directory                  netrw-gb
+	   mb	Bookmark current directory                           netrw-mb
+	   R	Rename the designated file(s)/directory(ies)         netrw-R
+<
 One may also use command mode; again, just a sampling:
-
-	:Explore [directory]	Browse specified/current directory
-	:NetrwSettings		A comprehensive list of your current netrw
-				settings with help linkage.
-
-The netrw browser is not limited to just your local machine; one may use
-urls such as:    (that trailing / is important)
+>
+     :Explore[!]  [dir] Explore directory of current file......netrw-explore
+     :Hexplore[!] [dir] Horizontal Split & Explore.............netrw-explore
+<
+The netrw browser is not limited to just your local machine; one may use URLs
+such as: >
 
 	:Explore ftp://somehost/path/to/dir/
 	:e scp://somehost/path/to/dir/
+<
+	Note: The trailing "/" is important.
 
 See |netrw-browse| for more.
 
@@ -219,8 +206,8 @@ TAB LOCAL DIRECTORY
 
 When you open a new tab page, it uses the directory of the window in the
 previous tab page from which the new tab page was opened.  You can change the
-directory of the current tab page using the `:tcd` command.  All the windows in
-a tab page share this directory except for windows with a window-local
+directory of the current tab page using the `:tcd` command.  All the windows
+in a tab page share this directory except for windows with a window-local
 directory.  Any new windows opened in this tab page will use this directory as
 the current working directory.  Using a `:cd` command in a tab page will not
 change the working directory of tab pages which have a tab local directory.
@@ -318,13 +305,13 @@ without making sure you have saved all the buffers.
 
 INACTIVE BUFFERS
 
-   When a buffer has been used once, Vim remembers some information about it.
+When a buffer has been used once, Vim remembers some information about it.
 When it is not displayed in a window and it is not hidden, it is still in the
 buffer list.  This is called an inactive buffer.  Overview:
 
-   Active		Appears in a window, text loaded.
-   Hidden		Not in a window, text loaded.
-   Inactive		Not in a window, no text loaded.
+	Active		Appears in a window, text loaded.
+	Hidden		Not in a window, text loaded.
+	Inactive	Not in a window, no text loaded.
 
 The inactive buffers are remembered, because Vim keeps information about them,
 like marks.  And remembering the file name is useful too, so that you can see
@@ -404,12 +391,11 @@ will be closed.  If you delete the current buffer, the current window will be
 closed.  If it was the last window, Vim will find another buffer to edit.  You
 can't be editing nothing!
 
-	Note:
-	Even after removing the buffer with ":bdelete" Vim still remembers it.
-	It's actually made "unlisted", it no longer appears in the list from
-	":buffers".  The ":buffers!" command will list unlisted buffers (yes,
-	Vim can do the impossible).  To really make Vim forget about a buffer,
-	use ":bwipe".  Also see the 'buflisted' option.
+	Note: Even after removing the buffer with ":bdelete" Vim still
+	remembers it.  It's actually made "unlisted", it no longer appears in
+	the list from ":buffers".  The ":buffers!" command will list unlisted
+	buffers (yes, Vim can do the impossible).  To really make Vim forget
+	about a buffer, use ":bwipe".  Also see the 'buflisted' option.
 
 ==============================================================================
 
diff --git a/runtime/doc/usr_23.txt b/runtime/doc/usr_23.txt
index e5ba25aee5..91b925a7fe 100644
--- a/runtime/doc/usr_23.txt
+++ b/runtime/doc/usr_23.txt
@@ -1,7 +1,7 @@
-*usr_23.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_23.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			     Editing other files
diff --git a/runtime/doc/usr_24.txt b/runtime/doc/usr_24.txt
index 16a7063531..540880b2f7 100644
--- a/runtime/doc/usr_24.txt
+++ b/runtime/doc/usr_24.txt
@@ -1,7 +1,7 @@
-*usr_24.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_24.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			     Inserting quickly
@@ -567,8 +567,8 @@ that combination.  Thus CTRL-K dP also works.  Since there is no digraph for
 
 	Note:
 	The digraphs depend on the character set that Vim assumes you are
-	using.  Always use ":digraphs" to find out which digraphs are currently
-	available.
+	using.  Always use ":digraphs" to find out which digraphs are
+	currently available.
 
 You can define your own digraphs by specifying the target character with a
 decimal number.  Example: >
diff --git a/runtime/doc/usr_25.txt b/runtime/doc/usr_25.txt
index 71e96c7767..f44634dd5b 100644
--- a/runtime/doc/usr_25.txt
+++ b/runtime/doc/usr_25.txt
@@ -1,7 +1,7 @@
-*usr_25.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_25.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			     Editing formatted text
diff --git a/runtime/doc/usr_26.txt b/runtime/doc/usr_26.txt
index 3dc54543aa..2c718bffc8 100644
--- a/runtime/doc/usr_26.txt
+++ b/runtime/doc/usr_26.txt
@@ -1,7 +1,7 @@
-*usr_26.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_26.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 				  Repeating
diff --git a/runtime/doc/usr_27.txt b/runtime/doc/usr_27.txt
index ab21e00b24..1df32a7617 100644
--- a/runtime/doc/usr_27.txt
+++ b/runtime/doc/usr_27.txt
@@ -1,7 +1,7 @@
-*usr_27.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_27.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			 Search commands and patterns
diff --git a/runtime/doc/usr_28.txt b/runtime/doc/usr_28.txt
index ad06cc0a69..2ff01e93ef 100644
--- a/runtime/doc/usr_28.txt
+++ b/runtime/doc/usr_28.txt
@@ -1,7 +1,7 @@
-*usr_28.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_28.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 				   Folding
diff --git a/runtime/doc/usr_29.txt b/runtime/doc/usr_29.txt
index fe1a79f789..3efbe47c72 100644
--- a/runtime/doc/usr_29.txt
+++ b/runtime/doc/usr_29.txt
@@ -1,7 +1,7 @@
-*usr_29.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_29.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			    Moving through programs
diff --git a/runtime/doc/usr_30.txt b/runtime/doc/usr_30.txt
index 8a3873c867..cae3749969 100644
--- a/runtime/doc/usr_30.txt
+++ b/runtime/doc/usr_30.txt
@@ -1,7 +1,7 @@
-*usr_30.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_30.txt*	For Vim version 9.2.  Last change: 2026 May 23
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      Editing programs
@@ -37,9 +37,9 @@ you give) and captures the results: >
 
 If errors were generated, they are captured and the editor positions you where
 the first error occurred.
-   Take a look at an example ":make" session.  (Typical :make sessions generate
-far more errors and fewer stupid ones.)  After typing ":make" the screen looks
-like this:
+   Take a look at an example ":make" session.  (Typical :make sessions
+generate far more errors and fewer stupid ones.)  After typing ":make" the
+screen looks like this:
 
 	:!make | &tee /tmp/vim215953.err ~
 	gcc -g -Wall -o prog main.c sub.c ~
@@ -531,9 +531,9 @@ they do when using only tab characters.
   Vim 5.4 introduced the 'softtabstop' option.  On top of the (hard) tab stops
 used to display the horizontal tab characters in the text, Vim adds extra
 soft tab stops dedicated only to the cursor.  When 'softtabstop' is set to a
-positive value, and the  key will push the cursor to the next soft tab
-stop.  Vim will insert the correct combination of tab characters and spaces to
-make the effect visually.  Likewise pressing  will have the cursor try to
+positive value, the  key will push the cursor to the next soft tab stop.
+Vim will insert the correct combination of tab characters and spaces to
+achieve this effect.  Likewise pressing  will have the cursor try to
 reach the nearest soft tab stop.  The following example uses
 `:set softtabstop=4`
 
@@ -544,7 +544,7 @@ reach the nearest soft tab stop.  The following example uses
 	a	------->a
 
   To maintain global coherence, one can `:set softtabstop=-1` so that
-the value of 'shiftwidth' is use for the number of columns between two soft
+the value of 'shiftwidth' is used for the number of columns between two soft
 tab stops.
 
   If you prefer to have different values for 'shiftwidth' and 'softtabstop',
diff --git a/runtime/doc/usr_31.txt b/runtime/doc/usr_31.txt
index 5e65f6827a..15c391b469 100644
--- a/runtime/doc/usr_31.txt
+++ b/runtime/doc/usr_31.txt
@@ -1,7 +1,7 @@
-*usr_31.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_31.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      Exploiting the GUI
diff --git a/runtime/doc/usr_32.txt b/runtime/doc/usr_32.txt
index ee3ad62a33..b3c1b9b3af 100644
--- a/runtime/doc/usr_32.txt
+++ b/runtime/doc/usr_32.txt
@@ -1,7 +1,7 @@
-*usr_32.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_32.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      The undo tree
diff --git a/runtime/doc/usr_40.txt b/runtime/doc/usr_40.txt
index 6517f851e8..a80436c91d 100644
--- a/runtime/doc/usr_40.txt
+++ b/runtime/doc/usr_40.txt
@@ -1,7 +1,7 @@
-*usr_40.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_40.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      Make new commands
@@ -385,8 +385,8 @@ Some of the other options and keywords are as follows:
 	-count={number}		The command can take a count whose default is
 				{number}.  The resulting count can be used
 				through the  keyword.
-	-bang			You can use a !.  If present, using  will
-				result in a !.
+	-bang			You can use a !.  If present, using 
+				will result in a !.
 	-register		You can specify a register.  (The default is
 				the unnamed register.)
 				The register specification is available as
@@ -563,9 +563,9 @@ for the cprograms group: >
 
 GROUPS
 
-The {group} item, used when defining an autocommand, groups related autocommands
-together.  This can be used to delete all the autocommands in a certain group,
-for example.
+The {group} item, used when defining an autocommand, groups related
+autocommands together.  This can be used to delete all the autocommands in a
+certain group, for example.
    When defining several autocommands for a certain group, use the ":augroup"
 command.  For example, let's define autocommands for C programs: >
 
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index aa4aed192e..380f7e140a 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,7 +1,7 @@
-*usr_41.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_41.txt*	For Vim version 9.2.  Last change: 2026 Jun 09
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      Write a Vim script
@@ -38,7 +38,7 @@ language like for example .vim files or configuration files like .vimrc and
 uses to customize and extend its behavior.
 
 						*vim-script-notation*
-The correct notation is "Vim script" (or "Vim9 script" when refering to the
+The correct notation is "Vim script" (or "Vim9 script" when referring to the
 new Vim9 language |Vim9-script|), so we will use "Vim script" to refer to the
 Vim scripting language throughout this documentation. This shorthand helps to
 streamline explanations and discussions about scripting with Vim.
@@ -764,7 +764,8 @@ String manipulation:					*string-functions*
 	charclass()		class of a character
 	match()			position where a pattern matches in a string
 	matchbufline()		all the matches of a pattern in a buffer
-	matchend()		position where a pattern match ends in a string
+	matchend()		position where a pattern match ends in a
+				string
 	matchfuzzy()		fuzzy matches a string in a list of strings
 	matchfuzzypos()		fuzzy matches a string in a list of strings
 	matchstr()		match of a pattern in a string
@@ -841,7 +842,8 @@ List manipulation:					*list-functions*
 	indexof()		index in a List where an expression is true
 	max()			maximum value in a List
 	min()			minimum value in a List
-	count()			count number of times a value appears in a List
+	count()			count number of times a value appears in a
+				List
 	repeat()		repeat a List multiple times
 	flatten()		flatten a List
 	flattennew()		flatten a copy of a List
@@ -1079,6 +1081,8 @@ Buffers, windows and the argument list:
 	tabpagebuflist()	return List of buffers in a tab page
 	tabpagenr()		get the number of a tab page
 	tabpagewinnr()		like winnr() for a specified tab page
+	tabpanel_getinfo()	get current state of the tabpanel
+	tabpanel_scroll()	scroll the tabpanel
 	winnr()			get the window number for the current window
 	bufwinid()		get the window ID of a specific buffer
 	bufwinnr()		get the window number of a specific buffer
@@ -1135,8 +1139,6 @@ Insert mode completion:				*completion-functions*
 	complete_add()		add to found matches
 	complete_check()	check if completion should be aborted
 	complete_info()		get current completion information
-	complete_match()	get insert completion start match col and
-				trigger text
 	preinserted()		check if text is inserted after cursor
 	pumvisible()		check if the popup menu is displayed
 	pum_getpos()		position and size of popup menu if visible
@@ -1201,6 +1203,7 @@ Interactive:					*interactive-functions*
 	inputrestore()		restore typeahead
 
 GUI:						*gui-functions*
+	getbgcolor()		get current background colour as [r, g, b]
 	getfontname()		get name of current font being used
 	getwinpos()		position of the Vim window
 	getwinposx()		X position of the Vim window
@@ -1246,7 +1249,8 @@ Mappings and Menus:			    *mapping-functions*
 Testing:				    *test-functions*
 	assert_equal()		assert that two expressions values are equal
 	assert_equalfile()	assert that two file contents are equal
-	assert_notequal()	assert that two expressions values are not equal
+	assert_notequal()	assert that two expressions values are not
+				equal
 	assert_inrange()	assert that an expression is inside a range
 	assert_match()		assert that a pattern matches the value
 	assert_notmatch()	assert that a pattern does not match the value
@@ -1286,23 +1290,24 @@ Testing:				    *test-functions*
 
 Inter-process communication:		    *channel-functions*
 	ch_canread()		check if there is something to read
-	ch_open()		open a channel
 	ch_close()		close a channel
 	ch_close_in()		close the in part of a channel
+	ch_evalexpr()		evaluate an expression over channel
+	ch_evalraw()		evaluate a raw string over channel
+	ch_getbufnr()		get the buffer number for a channel
+	ch_getjob()		get the Job of a channel
+	ch_info()		get information about a channel
+	ch_listen()		listen on a channel
+	ch_log()		write a message in the channel log
+	ch_logfile()		start logging channel activity
+	ch_open()		open a channel
 	ch_read()		read a message from a channel
 	ch_readblob()		read a Blob from a channel
 	ch_readraw()		read a raw message from a channel
 	ch_sendexpr()		send a JSON message over a channel
 	ch_sendraw()		send a raw message over a channel
-	ch_evalexpr()		evaluate an expression over channel
-	ch_evalraw()		evaluate a raw string over channel
+	ch_setoptions()		set channel options
 	ch_status()		get status of a channel
-	ch_getbufnr()		get the buffer number of a channel
-	ch_getjob()		get the job associated with a channel
-	ch_info()		get channel information
-	ch_log()		write a message in the channel log file
-	ch_logfile()		set the channel log file
-	ch_setoptions()		set the options for a channel
 	json_encode()		encode an expression to a JSON string
 	json_decode()		decode a JSON string to Vim types
 	js_encode()		encode an expression to a JSON string
@@ -1472,6 +1477,9 @@ Various:					*various-functions*
 
 	debugbreak()		interrupt a program being debugged
 
+	redraw_listener_add()   add callbacks to listen for redraws
+	redraw_listener_remove()    remove a redraw listener
+
 MacVim-specific functions
 	showdefinition()	look up and show definition of provided string
 
diff --git a/runtime/doc/usr_42.txt b/runtime/doc/usr_42.txt
index 9086a619f3..70afa00314 100644
--- a/runtime/doc/usr_42.txt
+++ b/runtime/doc/usr_42.txt
@@ -1,7 +1,7 @@
-*usr_42.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_42.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      Add new menus
diff --git a/runtime/doc/usr_43.txt b/runtime/doc/usr_43.txt
index e7a52392bb..30aef67ee6 100644
--- a/runtime/doc/usr_43.txt
+++ b/runtime/doc/usr_43.txt
@@ -1,7 +1,7 @@
-*usr_43.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_43.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			       Using filetypes
diff --git a/runtime/doc/usr_44.txt b/runtime/doc/usr_44.txt
index 12a32e507a..a77bb4e358 100644
--- a/runtime/doc/usr_44.txt
+++ b/runtime/doc/usr_44.txt
@@ -1,7 +1,7 @@
-*usr_44.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_44.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			 Your own syntax highlighted
@@ -629,10 +629,10 @@ be included in the next Vim version!
 
 ADDING TO AN EXISTING SYNTAX FILE
 
-We were assuming you were adding a completely new syntax file.  When an existing
-syntax file works, but is missing some items, you can add items in a separate
-file.  That avoids changing the distributed syntax file, which will be lost
-when installing a new version of Vim.
+We were assuming you were adding a completely new syntax file.  When an
+existing syntax file works, but is missing some items, you can add items in a
+separate file.  That avoids changing the distributed syntax file, which will
+be lost when installing a new version of Vim.
    Write syntax commands in your file, possibly using group names from the
 existing syntax.  For example, to add new variable types to the C syntax file:
 >
diff --git a/runtime/doc/usr_45.txt b/runtime/doc/usr_45.txt
index 175d4fc394..726c0e222a 100644
--- a/runtime/doc/usr_45.txt
+++ b/runtime/doc/usr_45.txt
@@ -1,7 +1,7 @@
-*usr_45.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_45.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			Select your language (locale)
diff --git a/runtime/doc/usr_50.txt b/runtime/doc/usr_50.txt
index 6082ce2a0b..35bb0da06a 100644
--- a/runtime/doc/usr_50.txt
+++ b/runtime/doc/usr_50.txt
@@ -1,7 +1,7 @@
-*usr_50.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_50.txt*	For Vim version 9.2.  Last change: 2026 Feb 14
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			 Advanced Vim script writing
diff --git a/runtime/doc/usr_51.txt b/runtime/doc/usr_51.txt
index 3b43d2731d..e8fb68bced 100644
--- a/runtime/doc/usr_51.txt
+++ b/runtime/doc/usr_51.txt
@@ -1,7 +1,7 @@
-*usr_51.txt*	For Vim version 9.1.  Last change: 2025 Oct 26
+*usr_51.txt*	For Vim version 9.2.  Last change: 2026 Jun 03
 
 
-		     VIM USER MANUAL	  by Bram Moolenaar
+		     VIM USER MANUAL	by Bram Moolenaar
 
 
 			      Write plugins
@@ -134,9 +134,9 @@ for this mapping, but the user might already use it for something else.  To
 allow the user to define which keys a mapping in a plugin uses, the 
 item can be used: >
 
- 20	  map  a  TypecorrAdd;
+ 20	  map  a  (TypecorrAdd)
 
-The "TypecorrAdd;" thing will do the work, more about that further on.
+The "(TypecorrAdd)" thing will do the work, more about that further on.
 
 The user can set the "g:mapleader" variable to the key sequence that they want
 plugin mappings to start with.  Thus if the user has done: >
@@ -152,15 +152,15 @@ already happened to exist. |:map-|
 But what if the user wants to define their own key sequence?  We can allow
 that with this mechanism: >
 
- 19	if !hasmapto('TypecorrAdd;')
- 20	  map  a  TypecorrAdd;
+ 19	if !hasmapto('(TypecorrAdd)')
+ 20	  map  a  (TypecorrAdd)
  21	endif
 
-This checks if a mapping to "TypecorrAdd;" already exists, and only
+This checks if a mapping to "(TypecorrAdd)" already exists, and only
 defines the mapping from "a" if it doesn't.  The user then has a
 chance of putting this in their vimrc file: >
 
-	map ,c  TypecorrAdd;
+	map ,c  (TypecorrAdd)
 
 Then the mapped key sequence will be ",c" instead of "_a" or "\a".
 
@@ -191,13 +191,13 @@ which is again another function.
  can be used with mappings.  It generates a script ID, which identifies
 the current script.  In our typing correction plugin we use it like this: >
 
- 22	noremap  "
-	  \ ])
+  # insert script closing tag if needed
+  if uses_script
+    extend(lines, [
+      '',
+      settings.use_xhtml ? '//]]>' : '-->',
+      ""
+    ])
   endif
 
-  call extend(s:lines, ["",
-	\ ""])
+  extend(lines, ["",
+    ""])
 endif
 
-if s:settings.no_pre
-  " if we're not using CSS we use a font tag which can't have a div inside
-  if s:settings.use_css
-    call extend(s:lines, ["
"]) +if settings.no_pre + # if we're not using CSS we use a font tag which can't have a div inside + if settings.use_css + extend(lines, ["
"]) endif else - call extend(s:lines, ["
"])
+  extend(lines, ["
"])
 endif
 
-exe s:orgwin .. "wincmd w"
+execute $":{orgwin}wincmd w"
 
-" caches of style data
-" initialize to include line numbers if using them
-if s:settings.number_lines
-  let s:stylelist = { s:LINENR_ID : ".LineNr { " .. s:CSS1( s:LINENR_ID ) .. "}" }
+# caches of style data
+# initialize to include line numbers if using them
+var stylelist: dict
+if settings.number_lines
+  stylelist = { [LINENR_ID]: ".LineNr { " .. CSS1(LINENR_ID) .. "}" }
 else
-  let s:stylelist = {}
+  stylelist = {}
 endif
-let s:diffstylelist = {
-      \   s:DIFF_A_ID : ".DiffAdd { " .. s:CSS1( s:DIFF_A_ID ) .. "}",
-      \   s:DIFF_C_ID : ".DiffChange { " .. s:CSS1( s:DIFF_C_ID ) .. "}",
-      \   s:DIFF_D_ID : ".DiffDelete { " .. s:CSS1( s:DIFF_D_ID ) .. "}",
-      \   s:DIFF_T_ID : ".DiffText { " .. s:CSS1( s:DIFF_T_ID ) .. "}"
-      \ }
-
-" set up progress bar in the status line
-if !s:settings.no_progress
-  " ProgressBar Indicator
-  let s:progressbar={}
-
-  " Progressbar specific functions
-
-  func! s:SetProgbarColor()
-    if hlID("TOhtmlProgress") != 0
-      hi! link TOhtmlProgress_auto TOhtmlProgress
-    elseif hlID("TOhtmlProgress_auto")==0 ||
-       \ !exists("s:last_colors_name") || !exists("g:colors_name") ||
-       \ g:colors_name != s:last_colors_name
-      let s:last_colors_name = exists("g:colors_name") ? g:colors_name : "none"
-
-      let l:diffatr = synIDattr(hlID("DiffDelete")->synIDtrans(), "reverse", s:whatterm) ? "fg#" : "bg#"
-      let l:stlatr = synIDattr(hlID("StatusLine")->synIDtrans(), "reverse", s:whatterm) ? "fg#" : "bg#"
-
-      let l:progbar_color = synIDattr(hlID("DiffDelete")->synIDtrans(), l:diffatr, s:whatterm)
-      let l:stl_color = synIDattr(hlID("StatusLine")->synIDtrans(), l:stlatr, s:whatterm)
-
-      if "" == l:progbar_color
-	let l:progbar_color = synIDattr(hlID("DiffDelete")->synIDtrans(), "reverse", s:whatterm) ? s:fgc : s:bgc
-      endif
-      if "" == l:stl_color
-	let l:stl_color = synIDattr(hlID("StatusLine")->synIDtrans(), "reverse", s:whatterm) ? s:fgc : s:bgc
-      endif
+var diffstylelist: dict = {
+  [DIFF_A_ID]: ".DiffAdd { " .. CSS1(DIFF_A_ID) .. "}",
+  [DIFF_C_ID]: ".DiffChange { " .. CSS1(DIFF_C_ID) .. "}",
+  [DIFF_D_ID]: ".DiffDelete { " .. CSS1(DIFF_D_ID) .. "}",
+  [DIFF_T_ID]: ".DiffText { " .. CSS1(DIFF_T_ID) .. "}"
+}
+
+var last_colors_name: string
+# set up progress bar in the status line
+# ProgressBar Indicator
+# Progressbar specific functions
+def SetProgbarColor()
+  if hlID("TOhtmlProgress") != 0
+    hi! link TOhtmlProgress_auto TOhtmlProgress
+  elseif hlID("TOhtmlProgress_auto") == 0 ||
+      last_colors_name == null_string || !exists("g:colors_name") ||
+      g:colors_name != last_colors_name
+    last_colors_name = exists("g:colors_name") ? g:colors_name : "none"
+
+    var diffatr = synIDattr(synIDtrans(hlID("DiffDelete")), "reverse", whatterm) == '1' ? "fg#" : "bg#"
+    var stlatr = synIDattr(synIDtrans(hlID("StatusLine")), "reverse", whatterm) == '1' ? "fg#" : "bg#"
+
+    var progbar_color = synIDattr(synIDtrans(hlID("DiffDelete")), diffatr, whatterm)
+    var stl_color = synIDattr(synIDtrans(hlID("StatusLine")), stlatr, whatterm)
+
+    if empty(progbar_color)
+      progbar_color = synIDattr(synIDtrans(hlID("DiffDelete")), "reverse", whatterm) == '1' ? fgc : bgc
+    endif
+    if empty(stl_color)
+      stl_color = synIDattr(synIDtrans(hlID("StatusLine")), "reverse", whatterm) == '1' ? fgc : bgc
+    endif
 
-      if l:progbar_color == l:stl_color
-	if s:whatterm == 'cterm'
-	  if l:progbar_color >= (&t_Co/2)
-	    let l:progbar_color-=1
-	  else
-	    let l:progbar_color+=1
-	  endif
+    if progbar_color == stl_color
+      if whatterm == 'cterm'
+	var nr = str2nr(progbar_color)
+	if nr >= (str2nr(&t_Co) / 2)
+	  nr -= 1
 	else
-	  let l:rgb = map(matchlist(l:progbar_color, '#\zs\x\x\ze\(\x\x\)\(\x\x\)')[:2], 'str2nr(v:val, 16)')
-	  let l:avg = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3
-	  if l:avg >= 128
-	    let l:avg_new = l:avg
-	    while l:avg - l:avg_new < 0x15
-	      let l:rgb = map(l:rgb, 'v:val * 3 / 4')
-	      let l:avg_new = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3
-	    endwhile
-	  else
-	    let l:avg_new = l:avg
-	    while l:avg_new - l:avg < 0x15
-	      let l:rgb = map(l:rgb, 'min([max([v:val, 4]) * 5 / 4, 255])')
-	      let l:avg_new = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3
-	    endwhile
-	  endif
-	  let l:progbar_color = printf("#%02x%02x%02x", l:rgb[0], l:rgb[1], l:rgb[2])
+	  nr += 1
 	endif
-	echomsg "diff detected progbar color set to" l:progbar_color
+	progbar_color = string(nr)
+      else
+	var rgb = map(matchlist(progbar_color, '#\zs\x\x\ze\(\x\x\)\(\x\x\)')[: 2], (_, v) => str2nr(v, 16))
+	var avg = (rgb[0] + rgb[1] + rgb[2]) / 3
+	if avg >= 128
+	  var avg_new = avg
+	  while avg - avg_new < 0x15
+	    rgb = map(rgb, (_, v) => v * 3 / 4)
+	    avg_new = (rgb[0] + rgb[1] + rgb[2]) / 3
+	  endwhile
+	else
+	  var avg_new = avg
+	  while avg_new - avg < 0x15
+	    rgb = map(rgb, (_, v) => min([max([v, 4]) * 5 / 4, 255]))
+	    avg_new = (rgb[0] + rgb[1] + rgb[2]) / 3
+	  endwhile
+	endif
+	progbar_color = printf("#%02x%02x%02x", rgb[0], rgb[1], rgb[2])
       endif
-      exe "hi TOhtmlProgress_auto" s:whatterm.."bg="..l:progbar_color
+      echomsg "diff detected progbar color set to" progbar_color
     endif
-  endfun
-
-  func! s:ProgressBar(title, max_value, winnr)
-    let pgb=copy(s:progressbar)
-    let pgb.title = a:title..' '
-    let pgb.max_value = a:max_value
-    let pgb.winnr = a:winnr
-    let pgb.cur_value = 0
-
-    let pgb.items = { 'title'   : { 'color' : 'Statusline' },
-	  \'bar'     : { 'color' : 'Statusline' , 'fillcolor' : 'TOhtmlProgress_auto' , 'bg' : 'Statusline' } ,
-	  \'counter' : { 'color' : 'Statusline' } }
-    let pgb.last_value = 0
-    let pgb.needs_redraw = 0
-    " Note that you must use len(split) instead of len() if you want to use 
-    " unicode in title.
-    "
-    " Subtract 3 for spacing around the title.
-    " Subtract 4 for the percentage display.
-    " Subtract 2 for spacing before this.
-    " Subtract 2 more for the '|' on either side of the progress bar
-    let pgb.subtractedlen=len(split(pgb.title, '\zs'))+3+4+2+2
-    let pgb.max_len = 0
+    execute "hi TOhtmlProgress_auto" whatterm .. "bg=" .. progbar_color
+  endif
+enddef
+
+class ProgressBar #{{{
+  public var title: string
+  public var max_value: number
+  public var winnr: number
+  public var cur_value: number = 0
+  public var items: dict
+  public var last_value: number = 0
+  public var needs_redraw: number = 0
+  public var pb_len: number = 0
+  public var max_len: number = 0
+  public var progress_ticks: list = []
+  var subtractedlen: number
+
+  def new(title: string, max_value: number, winnr: number)
+    this.title = title .. ' '
+    this.max_value = max_value
+    this.winnr = winnr
+
+    this.items = {
+      'title': { 'color': 'Statusline' },
+      'bar': { 'color': 'Statusline', 'fillcolor': 'TOhtmlProgress_auto', 'bg': 'Statusline' },
+      'counter': { 'color': 'Statusline' }
+    }
+    # Note that you must use len(split) instead of len() if you want to use
+    # unicode in title.
+    #
+    # Subtract 3 for spacing around the title.
+    # Subtract 4 for the percentage display.
+    # Subtract 2 for spacing before this.
+    # Subtract 2 more for the '|' on either side of the progress bar
+    this.subtractedlen = len(split(this.title, '\zs')) + 3 + 4 + 2 + 2
     set laststatus=2
-    return pgb
-  endfun
+  enddef
 
-  " Function: progressbar.calculate_ticks() {{{1
-  func! s:progressbar.calculate_ticks(pb_len)
-    if a:pb_len<=0
-      let pb_len = 100
-    else
-      let pb_len = a:pb_len
-    endif
-    let self.progress_ticks = map(range(pb_len+1), "v:val * self.max_value / pb_len")
-  endfun
-
-  "Function: progressbar.paint()
-  func! s:progressbar.paint()
-    " Recalculate widths.
-    let max_len = winwidth(self.winnr)
-    let pb_len = 0
-    " always true on first call because of initial value of self.max_len
-    if max_len != self.max_len
-      let self.max_len = max_len
-
-      " Progressbar length
-      let pb_len = max_len - self.subtractedlen
-
-      call self.calculate_ticks(pb_len)
-
-      let self.needs_redraw = 1
-      let cur_value = 0
-      let self.pb_len = pb_len
+  def Paint()
+    # Recalculate widths.
+    var max_len = winwidth(this.winnr)
+    var pb_len = 0
+    var cur_value: number
+
+    def CalculateTicks(len: number)
+      if len <= 0
+	pb_len = 100
+      else
+	pb_len = len
+      endif
+      this.progress_ticks = range(pb_len + 1)->map((_, v) => v * this.max_value / pb_len)
+    enddef
+
+    # always true on first call because of initial value of this.max_len
+    if max_len != this.max_len
+      this.max_len = max_len
+
+      # Progressbar length
+      pb_len = max_len - this.subtractedlen
+
+      CalculateTicks(pb_len)
+
+      this.needs_redraw = 1
+      cur_value = 0
+      this.pb_len = pb_len
     else
-      " start searching at the last found index to make the search for the
-      " appropriate tick value normally take 0 or 1 comparisons
-      let cur_value = self.last_value
-      let pb_len = self.pb_len
+      # start searching at the last found index to make the search for the
+      # appropriate tick value normally take 0 or 1 comparisons
+      cur_value = this.last_value
+      pb_len = this.pb_len
     endif
 
-    let cur_val_max = pb_len > 0 ? pb_len : 100
+    var cur_val_max = pb_len > 0 ? pb_len : 100
 
-    " find the current progress bar position based on precalculated thresholds
-    while cur_value < cur_val_max && self.cur_value > self.progress_ticks[cur_value]
-      let cur_value += 1
+    # find the current progress bar position based on precalculated thresholds
+    while cur_value < cur_val_max && this.cur_value > this.progress_ticks[cur_value]
+      cur_value += 1
     endwhile
 
-    " update progress bar
-    if self.last_value != cur_value || self.needs_redraw || self.cur_value == self.max_value
-      let self.needs_redraw = 1
-      let self.last_value = cur_value
-
-      let t_color  = self.items.title.color
-      let b_fcolor = self.items.bar.fillcolor
-      let b_color  = self.items.bar.color
-      let c_color  = self.items.counter.color
-
-      let stl =  "%#".t_color."#%-( ".self.title." %)".
-	    \"%#".b_color."#".
-	    \(pb_len>0 ?
-	    \	('|%#'.b_fcolor."#%-(".repeat(" ",cur_value)."%)".
-	    \	 '%#'.b_color."#".repeat(" ",pb_len-cur_value)."|"):
-	    \	('')).
-	    \"%=%#".c_color."#%( ".printf("%3.d ",100*self.cur_value/self.max_value)."%% %)"
-      call setwinvar(self.winnr, '&stl', stl)
+    # update progress bar
+    if this.last_value != cur_value || this.needs_redraw || this.cur_value == this.max_value
+      this.needs_redraw = 1
+      this.last_value = cur_value
+
+      var t_color  = this.items.title.color
+      var b_fcolor = this.items.bar.fillcolor
+      var b_color  = this.items.bar.color
+      var c_color  = this.items.counter.color
+
+      var stl =  $"%#{t_color}#%-( {this.title} %)%#{b_color}#" ..
+	(pb_len > 0 ? $'|%#{b_fcolor}#%-({repeat(" ", cur_value)}%)%#{b_color}#{repeat(" ", pb_len - cur_value)}|' : (''))
+	.. $"%=%#{c_color}#%( {printf("%3.d ", 100 * this.cur_value / this.max_value)}%% %)"
+      setwinvar(this.winnr, '&stl', stl)
     endif
-  endfun
-
-  func! s:progressbar.incr( ... )
-    let self.cur_value += (a:0 ? a:1 : 1)
-    " if we were making a general-purpose progress bar, we'd need to limit to a
-    " lower limit as well, but since we always increment with a positive value
-    " in this script, we only need limit the upper value
-    let self.cur_value = (self.cur_value > self.max_value ? self.max_value : self.cur_value)
-    call self.paint()
-  endfun
-  " }}}
-  if s:settings.dynamic_folds
-    " to process folds we make two passes through each line
-    let s:pgb = s:ProgressBar("Processing folds:", line('$')*2, s:orgwin)
+  enddef
+
+  def Incr(delta: number = 1)
+    this.cur_value += delta
+    # if we were making a general-purpose progress bar, we'd need to limit to a
+    # lower limit as well, but since we always increment with a positive value
+    # in this script, we only need limit the upper value
+    this.cur_value = (this.cur_value > this.max_value ? this.max_value : this.cur_value)
+    this.Paint()
+  enddef
+endclass #}}}
+
+var pgb: ProgressBar
+if !settings.no_progress
+  if settings.dynamic_folds
+    # to process folds we make two passes through each line
+    pgb = ProgressBar.new("Processing folds:", line('$') * 2, orgwin)
   endif
 
-  call s:SetProgbarColor()
+  SetProgbarColor()
 endif
 
-let s:build_fun_lines = []
-call add(s:build_fun_lines, [])
-let s:build_fun_lines[-1] =<< trim ENDLET
-    func! s:Add_diff_fill(lnum)
-      let l:filler = diff_filler(a:lnum)
-      if l:filler > 0
-	let l:to_insert = l:filler
-	while l:to_insert > 0
-	  let l:new = repeat(s:difffillchar, 3)
-
-	  if l:to_insert > 2 && l:to_insert < l:filler && !s:settings.whole_filler
-	    let l:new = l:new .. " " .. l:filler .. " inserted lines "
-	    let l:to_insert = 2
-	  endif
+var build_fun_lines: list
+build_fun_lines =<< trim ENDLET
+  def Add_diff_fill(_lnum: number)
+    var filler = diff_filler(_lnum)
+    if filler > 0
+      var to_insert = filler
+      while to_insert > 0
+	var new = repeat(difffillchar, 3)
+
+	if to_insert > 2 && to_insert < filler && !settings.whole_filler
+	  new = new .. " " .. filler .. " inserted lines "
+	  to_insert = 2
+	endif
 ENDLET
-call add(s:build_fun_lines, [])
-if !s:settings.no_pre
-  let s:build_fun_lines[-1] =<< trim ENDLET
-	  " HTML line wrapping is off--go ahead and fill to the margin
-	  " TODO: what about when CSS wrapping is turned on?
-	  let l:new = l:new .. repeat(s:difffillchar, &columns - strlen(l:new) - s:margin)
+if !settings.no_pre
+  trim_tmp =<< trim ENDLET
+	# HTML line wrapping is off--go ahead and fill to the margin
+	# TODO: what about when CSS wrapping is turned on?
+	new = new .. repeat(difffillchar, &columns - strlen(new) - margin)
   ENDLET
+  build_fun_lines += trim_tmp
 else
-  let s:build_fun_lines[-1] =<< trim ENDLET
-	  let l:new = l:new .. repeat(s:difffillchar, 3)
+  trim_tmp =<< trim ENDLET
+	new = new .. repeat(difffillchar, 3)
   ENDLET
+  build_fun_lines += trim_tmp
 endif
-call add(s:build_fun_lines, [])
-let s:build_fun_lines[-1] =<< trim ENDLET
-	let l:new = s:HtmlFormat_d(l:new, s:DIFF_D_ID, 0)
+trim_tmp =<< trim ENDLET
+	new = HtmlFormat_d(new, DIFF_D_ID, 0)
 ENDLET
-if s:settings.number_lines
-  call add(s:build_fun_lines, [])
-  let s:build_fun_lines[-1] =<< trim ENDLET
-	  " Indent if line numbering is on. Indent gets style of line number
-	  " column.
-	  let l:new = s:HtmlFormat_n(repeat(' ', s:margin), s:LINENR_ID, 0, 0) .. l:new
+build_fun_lines += trim_tmp
+if settings.number_lines
+  trim_tmp =<< trim ENDLET
+	# Indent if line numbering is on. Indent gets style of line number
+	# column.
+	new = HtmlFormat_n(repeat(' ', margin), LINENR_ID, 0, 0) .. new
   ENDLET
+  build_fun_lines += trim_tmp
 endif
-if s:settings.dynamic_folds && !s:settings.no_foldcolumn 
-  call add(s:build_fun_lines, [])
-  let s:build_fun_lines[-1] =<< trim ENDLET
-	  if s:foldcolumn > 0
-	    " Indent for foldcolumn if there is one. Assume it's empty, there should
-	    " not be a fold for deleted lines in diff mode.
-	    let l:new = s:FoldColumn_fill() .. l:new
-	  endif
+if settings.dynamic_folds && !settings.no_foldcolumn
+  trim_tmp =<< trim ENDLET
+	if foldcolumn > 0
+	  # Indent for foldcolumn if there is one. Assume it's empty, there should
+	  # not be a fold for deleted lines in diff mode.
+	  new = FoldColumn_fill() .. new
+	endif
   ENDLET
+  build_fun_lines += trim_tmp
 endif
-" Ignore this comment, just bypassing a highlighting issue: if
-call add(s:build_fun_lines, [])
-let s:build_fun_lines[-1] =<< trim ENDLET
-	call add(s:lines, l:new..s:HtmlEndline)
-	let l:to_insert = l:to_insert - 1
+# Ignore this comment, just bypassing a highlighting issue: if
+trim_tmp =<< trim ENDLET
+	add(lines, new .. HtmlEndline)
+	to_insert -= 1
       endwhile
     endif
-  endfun
+  enddef
 ENDLET
-exec join(flatten(s:build_fun_lines), "\n")
-
-" First do some preprocessing for dynamic folding. Do this for the entire file
-" so we don't accidentally start within a closed fold or something.
-let s:allfolds = []
-
-if s:settings.dynamic_folds
-  let s:lnum = 1
-  let s:end = line('$')
-  " save the fold text and set it to the default so we can find fold levels
-  let s:foldtext_save = &foldtext
-  setlocal foldtext&
-
-  " we will set the foldcolumn in the html to the greater of the maximum fold
-  " level and the current foldcolumn setting
-  let s:foldcolumn = &foldcolumn
-
-  " get all info needed to describe currently closed folds
-  while s:lnum <= s:end
-    if foldclosed(s:lnum) == s:lnum
-      " default fold text has '+-' and then a number of dashes equal to fold
-      " level, so subtract 2 from index of first non-dash after the dashes
-      " in order to get the fold level of the current fold
-      let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
-      " store fold info for later use
-      let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
-      call add(s:allfolds, s:newfold)
-      " open the fold so we can find any contained folds
-      execute s:lnum.."foldopen"
-    else
-      if !s:settings.no_progress
-	call s:pgb.incr()
-	if s:pgb.needs_redraw
-	  redrawstatus
-	  let s:pgb.needs_redraw = 0
+build_fun_lines += trim_tmp
+execute join(build_fun_lines, "\n")
+
+# First do some preprocessing for dynamic folding. Do this for the entire file
+# so we don't accidentally start within a closed fold or something.
+var allfolds: list = []
+
+var foldcolumn: number
+if settings.dynamic_folds
+  def ProcessFolds()
+    lnum = 1
+    end = line('$')
+    # save the fold text and set it to the default so we can find fold levels
+    var foldtext_save = &foldtext
+    setlocal foldtext&
+
+    # we will set the foldcolumn in the html to the greater of the maximum fold
+    # level and the current foldcolumn setting
+    foldcolumn = &foldcolumn
+
+    # get all info needed to describe currently closed folds
+    while lnum <= end
+      if foldclosed(lnum) == lnum
+	# default fold text has '+-' and then a number of dashes equal to fold
+	# level, so subtract 2 from index of first non-dash after the dashes
+	# in order to get the fold level of the current fold
+	var level = match(foldtextresult(lnum), '+-*\zs[^-]') - 2
+	# store fold info for later use
+	var newfold = {firstline: lnum, lastline: foldclosedend(lnum), level: level, type: "closed-fold"}
+	add(allfolds, newfold)
+	# open the fold so we can find any contained folds
+	execute $":{lnum}foldopen"
+      else
+	if !settings.no_progress
+	  pgb.Incr()
+	  if pgb.needs_redraw
+	    redrawstatus
+	    pgb.needs_redraw = 0
+	  endif
 	endif
+	lnum = lnum + 1
       endif
-      let s:lnum = s:lnum + 1
-    endif
-  endwhile
+    endwhile
 
-  " close all folds to get info for originally open folds
-  silent! %foldclose!
-  let s:lnum = 1
-
-  " the originally open folds will be all folds we encounter that aren't
-  " already in the list of closed folds
-  while s:lnum <= s:end
-    if foldclosed(s:lnum) == s:lnum
-      " default fold text has '+-' and then a number of dashes equal to fold
-      " level, so subtract 2 from index of first non-dash after the dashes
-      " in order to get the fold level of the current fold
-      let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
-      let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
-      " only add the fold if we don't already have it
-      if empty(s:allfolds) || index(s:allfolds, s:newfold) == -1
-	let s:newfold.type = "open-fold"
-	call add(s:allfolds, s:newfold)
-      endif
-      " open the fold so we can find any contained folds
-      execute s:lnum.."foldopen"
-    else
-      if !s:settings.no_progress
-	call s:pgb.incr()
-	if s:pgb.needs_redraw
-	  redrawstatus
-	  let s:pgb.needs_redraw = 0
+    # close all folds to get info for originally open folds
+    silent! :%foldclose!
+    lnum = 1
+
+    # the originally open folds will be all folds we encounter that aren't
+    # already in the list of closed folds
+    while lnum <= end
+      if foldclosed(lnum) == lnum
+	# default fold text has '+-' and then a number of dashes equal to fold
+	# level, so subtract 2 from index of first non-dash after the dashes
+	# in order to get the fold level of the current fold
+	var level = match(foldtextresult(lnum), '+-*\zs[^-]') - 2
+	var newfold = {firstline: lnum, lastline: foldclosedend(lnum), level: level, type: "closed-fold"}
+	# only add the fold if we don't already have it
+	if empty(allfolds) || index(allfolds, newfold) == -1
+	  newfold.type = "open-fold"
+	  add(allfolds, newfold)
+	endif
+	# open the fold so we can find any contained folds
+	execute $":{lnum}foldopen"
+      else
+	if !settings.no_progress
+	  pgb.Incr()
+	  if pgb.needs_redraw
+	    redrawstatus
+	    pgb.needs_redraw = 0
+	  endif
 	endif
+	lnum = lnum + 1
       endif
-      let s:lnum = s:lnum + 1
-    endif
-  endwhile
+    endwhile
 
-  " sort the folds so that we only ever need to look at the first item in the
-  " list of folds
-  call sort(s:allfolds, "s:FoldCompare")
-
-  let &l:foldtext = s:foldtext_save
-  unlet s:foldtext_save
-
-  " close all folds again so we can get the fold text as we go
-  silent! %foldclose!
-
-  " Go through and remove folds we don't need to (or cannot) process in the
-  " current conversion range
-  "
-  " If a fold is removed which contains other folds, which are included, we need
-  " to adjust the level of the included folds as used by the conversion logic
-  " (avoiding special cases is good)
-  "
-  " Note any time we remove a fold, either all of the included folds are in it,
-  " or none of them, because we only remove a fold if neither its start nor its
-  " end are within the conversion range.
-  let leveladjust = 0
-  for afold in s:allfolds
-    let removed = 0
-    if exists("g:html_start_line") && exists("g:html_end_line")
-      if afold.firstline < g:html_start_line
-	if afold.lastline <= g:html_end_line && afold.lastline >= g:html_start_line
-	  " if a fold starts before the range to convert but stops within the
-	  " range, we need to include it. Make it start on the first converted
-	  " line.
-	  let afold.firstline = g:html_start_line
-	else
-	  " if the fold lies outside the range or the start and stop enclose
-	  " the entire range, don't bother parsing it
-	  call remove(s:allfolds, index(s:allfolds, afold))
-	  let removed = 1
-	  if afold.lastline > g:html_end_line
-	    let leveladjust += 1
+    # sort the folds so that we only ever need to look at the first item in the
+    # list of folds
+    sort(allfolds, FoldCompare)
+
+    &l:foldtext = foldtext_save
+
+    # close all folds again so we can get the fold text as we go
+    silent! :%foldclose!
+
+    # Go through and remove folds we don't need to (or cannot) process in the
+    # current conversion range
+    #
+    # If a fold is removed which contains other folds, which are included, we need
+    # to adjust the level of the included folds as used by the conversion logic
+    # (avoiding special cases is good)
+    #
+    # Note any time we remove a fold, either all of the included folds are in it,
+    # or none of them, because we only remove a fold if neither its start nor its
+    # end are within the conversion range.
+    var leveladjust = 0
+    for afold in allfolds
+      var removed = 0
+      if exists("g:html_start_line") && exists("g:html_end_line")
+	if afold.firstline < g:html_start_line
+	  if afold.lastline <= g:html_end_line && afold.lastline >= g:html_start_line
+	    # if a fold starts before the range to convert but stops within the
+	    # range, we need to include it. Make it start on the first converted
+	    # line.
+	    afold.firstline = g:html_start_line
+	  else
+	    # if the fold lies outside the range or the start and stop enclose
+	    # the entire range, don't bother parsing it
+	    remove(allfolds, index(allfolds, afold))
+	    removed = 1
+	    if afold.lastline > g:html_end_line
+	      leveladjust += 1
+	    endif
 	  endif
+	elseif afold.firstline > g:html_end_line
+	  # If the entire fold lies outside the range we need to remove it.
+	  remove(allfolds, index(allfolds, afold))
+	  removed = 1
+	endif
+      elseif exists("g:html_start_line")
+	if afold.firstline < g:html_start_line
+	  # if there is no last line, but there is a first line, the end of the
+	  # fold will always lie within the region of interest, so keep it
+	  afold.firstline = g:html_start_line
+	endif
+      elseif exists("g:html_end_line")
+	# if there is no first line we default to the first line in the buffer so
+	# the fold start will always be included if the fold itself is included.
+	# If however the entire fold lies outside the range we need to remove it.
+	if afold.firstline > g:html_end_line
+	  remove(allfolds, index(allfolds, afold))
+	  removed = 1
 	endif
-      elseif afold.firstline > g:html_end_line
-	" If the entire fold lies outside the range we need to remove it.
-	call remove(s:allfolds, index(s:allfolds, afold))
-	let removed = 1
-      endif
-    elseif exists("g:html_start_line")
-      if afold.firstline < g:html_start_line
-	" if there is no last line, but there is a first line, the end of the
-	" fold will always lie within the region of interest, so keep it
-	let afold.firstline = g:html_start_line
-      endif
-    elseif exists("g:html_end_line")
-      " if there is no first line we default to the first line in the buffer so
-      " the fold start will always be included if the fold itself is included.
-      " If however the entire fold lies outside the range we need to remove it.
-      if afold.firstline > g:html_end_line
-	call remove(s:allfolds, index(s:allfolds, afold))
-	let removed = 1
       endif
-    endif
-    if !removed
-      let afold.level -= leveladjust
-      if afold.level+1 > s:foldcolumn
-	let s:foldcolumn = afold.level+1
+      if !removed
+	afold.level -= leveladjust
+	if afold.level + 1 > foldcolumn
+	  foldcolumn = afold.level + 1
+	endif
       endif
-    endif
-  endfor
-
-  " if we've removed folds containing the conversion range from processing,
-  " getting foldtext as we go won't know to open the removed folds, so the
-  " foldtext would be wrong; open them now.
-  "
-  " Note that only when a start and an end line is specified will a fold
-  " containing the current range ever be removed.
-  while leveladjust > 0
-    exe g:html_start_line.."foldopen"
-    let leveladjust -= 1
-  endwhile
+    endfor
+
+    # if we've removed folds containing the conversion range from processing,
+    # getting foldtext as we go won't know to open the removed folds, so the
+    # foldtext would be wrong; open them now.
+    #
+    # Note that only when a start and an end line is specified will a fold
+    # containing the current range ever be removed.
+    while leveladjust > 0
+      execute $":{g:html_start_line}foldopen"
+      leveladjust -= 1
+    endwhile
+  enddef
+  ProcessFolds()
 endif
 
-" Now loop over all lines in the original text to convert to html.
-" Use html_start_line and html_end_line if they are set.
+# Now loop over all lines in the original text to convert to html.
+# Use html_start_line and html_end_line if they are set.
 if exists("g:html_start_line")
-  let s:lnum = html_start_line
-  if s:lnum < 1 || s:lnum > line("$")
-    let s:lnum = 1
+  lnum = g:html_start_line
+  if lnum < 1 || lnum > line("$")
+    lnum = 1
   endif
 else
-  let s:lnum = 1
+  lnum = 1
 endif
 if exists("g:html_end_line")
-  let s:end = html_end_line
-  if s:end < s:lnum || s:end > line("$")
-    let s:end = line("$")
+  end = g:html_end_line
+  if end < lnum || end > line("$")
+    end = line("$")
   endif
 else
-  let s:end = line("$")
+  end = line("$")
 endif
 
-" stack to keep track of all the folds containing the current line
-let s:foldstack = []
+# stack to keep track of all the folds containing the current line
+var foldstack: list = []
 
-if !s:settings.no_progress
-  let s:pgb = s:ProgressBar("Processing lines:", s:end - s:lnum + 1, s:orgwin)
+if !settings.no_progress
+  pgb = ProgressBar.new("Processing lines:", end - lnum + 1, orgwin)
 endif
 
-if s:settings.number_lines
-  let s:margin = strlen(s:end) + 1
+var margin: number
+if settings.number_lines
+  margin = strlen(end) + 1
 else
-  let s:margin = 0
+  margin = 0
 endif
 
-if has('folding') && !s:settings.ignore_folding
-  let s:foldfillchar = &fillchars[matchend(&fillchars, 'fold:')]
-  if s:foldfillchar == ''
-    let s:foldfillchar = '-'
+var foldfillchar: string
+var charidx: number
+if has('folding') && !settings.ignore_folding
+  charidx = matchend(&fillchars, 'fold:')
+  if charidx >= 0
+    foldfillchar = &fillchars[charidx(&fillchars, charidx)]
+  endif
+  if foldfillchar->empty()
+    foldfillchar = '-'
   endif
 endif
-let s:difffillchar = &fillchars[matchend(&fillchars, 'diff:')]
-if s:difffillchar == ''
-  let s:difffillchar = '-'
+var difffillchar: string
+charidx = matchend(&fillchars, 'diff:')
+if charidx >= 0
+  difffillchar = &fillchars[charidx(&fillchars, charidx)]
+endif
+if difffillchar->empty()
+  difffillchar = '-'
 endif
 
-let s:foldId = 0
-
-if !s:settings.expand_tabs
-  " If keeping tabs, add them to printable characters so we keep them when
-  " formatting text (strtrans() doesn't replace printable chars)
-  let s:old_isprint = &isprint
+var foldId = 0
+var old_isprint: string
+if !settings.expand_tabs
+  # If keeping tabs, add them to printable characters so we keep them when
+  # formatting text (strtrans() doesn't replace printable chars)
+  old_isprint = &isprint
   setlocal isprint+=9
 endif
 
-while s:lnum <= s:end
-
-  " If there are filler lines for diff mode, show these above the line.
-  call s:Add_diff_fill(s:lnum)
+def ProcessLines()
+  var all_lines = getline(lnum, end)
+  var start_lnum = lnum
 
-  " Start the line with the line number.
-  if s:settings.number_lines
-    let s:numcol = repeat(' ', s:margin - 1 - strlen(s:lnum)) .. s:lnum .. ' '
-  endif
+  while lnum <= end
 
-  let s:new = ""
+    # If there are filler lines for diff mode, show these above the line.
+    Add_diff_fill(lnum)
 
-  if has('folding') && !s:settings.ignore_folding && foldclosed(s:lnum) > -1 && !s:settings.dynamic_folds
-    "
-    " This is the beginning of a folded block (with no dynamic folding)
-    let s:new = foldtextresult(s:lnum)
-    if !s:settings.no_pre
-      " HTML line wrapping is off--go ahead and fill to the margin
-      let s:new = s:new .. repeat(s:foldfillchar, &columns - strlen(s:new))
+    # Start the line with the line number.
+    var numcol: string
+    if settings.number_lines
+      numcol = repeat(' ', margin - 1 - strlen(lnum)) .. lnum .. ' '
     endif
 
-    " put numcol in a separate group for sake of unselectable text
-    let s:new = (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, s:lnum): "") .. s:HtmlFormat_t(s:new, s:FOLDED_ID, 0)
-
-    " Skip to the end of the fold
-    let s:new_lnum = foldclosedend(s:lnum)
+    var new: string
 
-    if !s:settings.no_progress
-      call s:pgb.incr(s:new_lnum - s:lnum)
-    endif
+    if has('folding') && !settings.ignore_folding && foldclosed(lnum) > -1 && !settings.dynamic_folds
+      #
+      # This is the beginning of a folded block (with no dynamic folding)
+      new = foldtextresult(lnum)
+      if !settings.no_pre
+	# HTML line wrapping is off--go ahead and fill to the margin
+	new ..= repeat(foldfillchar, &columns - strlen(new))
+      endif
 
-    let s:lnum = s:new_lnum
+      # put numcol in a separate group for sake of unselectable text
+      new = (settings.number_lines ? HtmlFormat_n(numcol, FOLDED_ID, 0, lnum) : "") .. HtmlFormat_t(new, FOLDED_ID, 0)
 
-  else
-    "
-    " A line that is not folded, or doing dynamic folding.
-    "
-    let s:line = getline(s:lnum)
-    let s:len = strlen(s:line)
-
-    if s:settings.dynamic_folds
-      " First insert a closing for any open folds that end on this line
-      while !empty(s:foldstack) && get(s:foldstack,0).lastline == s:lnum-1
-	let s:new = s:new..""
-	call remove(s:foldstack, 0)
-      endwhile
+      # Skip to the end of the fold
+      var new_lnum = foldclosedend(lnum)
 
-      " Now insert an opening for any new folds that start on this line
-      let s:firstfold = 1
-      while !empty(s:allfolds) && get(s:allfolds,0).firstline == s:lnum
-	let s:foldId = s:foldId + 1
-	let s:new ..= ""
-
-
-	" Unless disabled, add a fold column for the opening line of a fold.
-	"
-	" Note that dynamic folds require using css so we just use css to take
-	" care of the leading spaces rather than using   in the case of
-	" html_no_pre to make it easier
-	if !s:settings.no_foldcolumn
-	  " add fold column that can open the new fold
-	  if s:allfolds[0].level > 1 && s:firstfold
-	    let s:new = s:new .. s:FoldColumn_build('|', s:allfolds[0].level - 1, 0, "",
-		  \ 'toggle-open FoldColumn','javascript:toggleFold("fold'..s:foldstack[0].id..s:settings.id_suffix..'");')
-	  endif
-	  " add the filler spaces separately from the '+' char so that it can be
-	  " shown/hidden separately during a hover unfold
-	  let s:new = s:new .. s:FoldColumn_build("+", 1, 0, "",
-		\ 'toggle-open FoldColumn', 'javascript:toggleFold("fold'..s:foldId..s:settings.id_suffix..'");')
-	  " If this is not the last fold we're opening on this line, we need
-	  " to keep the filler spaces hidden if the fold is opened by mouse
-	  " hover. If it is the last fold to open in the line, we shouldn't hide
-	  " them, so don't apply the toggle-filler class.
-	  let s:new = s:new .. s:FoldColumn_build(" ", 1, s:foldcolumn - s:allfolds[0].level - 1, "",
-		\ 'toggle-open FoldColumn'.. (get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum ?" toggle-filler" :""),
-		\ 'javascript:toggleFold("fold'..s:foldId..s:settings.id_suffix..'");')
-
-	  " add fold column that can close the new fold
-	  " only add extra blank space if we aren't opening another fold on the
-	  " same line
-	  if get(s:allfolds, 1, {'firstline': 0}).firstline != s:lnum
-	    let s:extra_space = s:foldcolumn - s:allfolds[0].level
-	  else
-	    let s:extra_space = 0
-	  endif
-	  if s:firstfold
-	    " the first fold in a line has '|' characters from folds opened in
-	    " previous lines, before the '-' for this fold
-	    let s:new ..= s:FoldColumn_build('|', s:allfolds[0].level - 1, s:extra_space, '-',
-		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'..s:foldId..s:settings.id_suffix..'");')
-	  else
-	    " any subsequent folds in the line only add a single '-'
-	    let s:new = s:new .. s:FoldColumn_build("-", 1, s:extra_space, "",
-		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'..s:foldId..s:settings.id_suffix..'");')
-	  endif
-	  let s:firstfold = 0
-	endif
+      if !settings.no_progress
+	pgb.Incr(new_lnum - lnum)
+      endif
 
-	" Add fold text, moving the span ending to the next line so collapsing
-	" of folds works correctly.
-	" Put numcol in a separate group for sake of unselectable text.
-	let s:new = s:new .. (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, 0) : "") .. substitute(s:HtmlFormat_t(foldtextresult(s:lnum), s:FOLDED_ID, 0), '', s:HtmlEndline..'\n\0', '')
-	let s:new = s:new .. ""
-
-	" open the fold now that we have the fold text to allow retrieval of
-	" fold text for subsequent folds
-	execute s:lnum.."foldopen"
-	call insert(s:foldstack, remove(s:allfolds,0))
-	let s:foldstack[0].id = s:foldId
-      endwhile
+      lnum = new_lnum
 
-      " Unless disabled, add a fold column for other lines.
-      "
-      " Note that dynamic folds require using css so we just use css to take
-      " care of the leading spaces rather than using   in the case of
-      " html_no_pre to make it easier
-      if !s:settings.no_foldcolumn
-	if empty(s:foldstack)
-	  " add the empty foldcolumn for unfolded lines if there is a fold
-	  " column at all
-	  if s:foldcolumn > 0
-	    let s:new = s:new .. s:FoldColumn_fill()
+    else
+      #
+      # A line that is not folded, or doing dynamic folding.
+      #
+      var line = all_lines[lnum - start_lnum]
+      var len = strlen(line)
+
+      if settings.dynamic_folds
+	# First insert a closing for any open folds that end on this line
+	while !empty(foldstack) && get(foldstack, 0).lastline == lnum - 1
+	  new ..= ""
+	  remove(foldstack, 0)
+	endwhile
+
+	# Now insert an opening for any new folds that start on this line
+	var firstfold = 1
+	while !empty(allfolds) && get(allfolds, 0).firstline == lnum
+	  foldId = foldId + 1
+	  new ..= ""
+
+
+	  # Unless disabled, add a fold column for the opening line of a fold.
+	  #
+	  # Note that dynamic folds require using css so we just use css to take
+	  # care of the leading spaces rather than using   in the case of
+	  # html_no_pre to make it easier
+	  if !settings.no_foldcolumn
+	    # add fold column that can open the new fold
+	    if allfolds[0].level > 1 && firstfold
+	      new ..= FoldColumn_build('|', allfolds[0].level - 1, 0, "",
+		'toggle-open FoldColumn', 'javascript:toggleFold("fold' .. foldstack[0].id .. settings.id_suffix .. '");')
+	    endif
+	    # add the filler spaces separately from the '+' char so that it can be
+	    # shown/hidden separately during a hover unfold
+	    new ..= FoldColumn_build("+", 1, 0, "",
+	      'toggle-open FoldColumn', 'javascript:toggleFold("fold' .. foldId .. settings.id_suffix .. '");')
+	    # If this is not the last fold we're opening on this line, we need
+	    # to keep the filler spaces hidden if the fold is opened by mouse
+	    # hover. If it is the last fold to open in the line, we shouldn't hide
+	    # them, so don't apply the toggle-filler class.
+	    new ..= FoldColumn_build(" ", 1, foldcolumn - allfolds[0].level - 1, "",
+	      'toggle-open FoldColumn' .. (get(allfolds, 1, {firstline: 0}).firstline == lnum ? " toggle-filler" : ""),
+	      'javascript:toggleFold("fold' .. foldId .. settings.id_suffix .. '");')
+
+	    # add fold column that can close the new fold
+	    # only add extra blank space if we aren't opening another fold on the
+	    # same line
+	    var extra_space: number
+	    if get(allfolds, 1, {firstline: 0}).firstline != lnum
+	      extra_space = foldcolumn - allfolds[0].level
+	    else
+	      extra_space = 0
+	    endif
+	    if firstfold
+	      # the first fold in a line has '|' characters from folds opened in
+	      # previous lines, before the '-' for this fold
+	      new ..= FoldColumn_build('|', allfolds[0].level - 1, extra_space, '-',
+		'toggle-closed FoldColumn', 'javascript:toggleFold("fold' .. foldId .. settings.id_suffix .. '");')
+	    else
+	      # any subsequent folds in the line only add a single '-'
+	      new ..= FoldColumn_build("-", 1, extra_space, "",
+		'toggle-closed FoldColumn', 'javascript:toggleFold("fold' .. foldId .. settings.id_suffix .. '");')
+	    endif
+	    firstfold = 0
 	  endif
-	else
-	  " add the fold column for folds not on the opening line
-	  if get(s:foldstack, 0).firstline < s:lnum
-	    let s:new = s:new .. s:FoldColumn_build('|', s:foldstack[0].level, s:foldcolumn - s:foldstack[0].level, "",
-		  \ 'FoldColumn', 'javascript:toggleFold("fold'..s:foldstack[0].id..s:settings.id_suffix..'");')
+
+	  # Add fold text, moving the span ending to the next line so collapsing
+	  # of folds works correctly.
+	  # Put numcol in a separate group for sake of unselectable text.
+	  new ..= (settings.number_lines ? HtmlFormat_n(numcol, FOLDED_ID, 0, 0) : "") .. substitute(HtmlFormat_t(foldtextresult(lnum), FOLDED_ID, 0), '', HtmlEndline .. '\n\0', '')
+	  new ..= ""
+
+	  # open the fold now that we have the fold text to allow retrieval of
+	  # fold text for subsequent folds
+	  execute $":{lnum}foldopen"
+	  insert(foldstack, remove(allfolds, 0), 0)
+	  foldstack[0].id = foldId
+	endwhile
+
+	# Unless disabled, add a fold column for other lines.
+	#
+	# Note that dynamic folds require using css so we just use css to take
+	# care of the leading spaces rather than using   in the case of
+	# html_no_pre to make it easier
+	if !settings.no_foldcolumn
+	  if empty(foldstack)
+	    # add the empty foldcolumn for unfolded lines if there is a fold
+	    # column at all
+	    if foldcolumn > 0
+	      new = new .. FoldColumn_fill()
+	    endif
+	  else
+	    # add the fold column for folds not on the opening line
+	    if get(foldstack, 0).firstline < lnum
+	      new = new .. FoldColumn_build('|', foldstack[0].level, foldcolumn - foldstack[0].level, "",
+		'FoldColumn', 'javascript:toggleFold("fold' .. foldstack[0].id .. settings.id_suffix .. '");')
+	    endif
 	  endif
 	endif
       endif
-    endif
 
-    " Now continue with the unfolded line text
-    if s:settings.number_lines
-      let s:new = s:new .. s:HtmlFormat_n(s:numcol, s:LINENR_ID, 0, s:lnum)
-    elseif s:settings.line_ids
-      let s:new = s:new .. s:HtmlFormat_n("", s:LINENR_ID, 0, s:lnum)
-    endif
+      # Now continue with the unfolded line text
+      if settings.number_lines
+	new ..= HtmlFormat_n(numcol, LINENR_ID, 0, lnum)
+      elseif settings.line_ids
+	new ..= HtmlFormat_n("", LINENR_ID, 0, lnum)
+      endif
 
-    " Get the diff attribute, if any.
-    let s:diffattr = diff_hlID(s:lnum, 1)
+      # Get the diff attribute, if any.
+      var diffattr = diff_hlID(lnum, 1)
 
-    " initialize conceal info to act like not concealed, just in case
-    let s:concealinfo = [0, '']
+      # initialize conceal info to act like not concealed, just in case
+      var concealinfo = [0, '']
 
-    " Loop over each character in the line
-    let s:col = 1
+      # Loop over each character in the line
+      var col = 1
 
-    " most of the time we won't use the diff_id, initialize to zero
-    let s:diff_id = 0
+      # most of the time we won't use the diff_id, initialize to zero
+      var diff_id = 0
 
-    while s:col <= s:len || (s:col == 1 && s:diffattr)
-      let s:startcol = s:col " The start column for processing text
-      if !s:settings.ignore_conceal && has('conceal')
-	let s:concealinfo = synconcealed(s:lnum, s:col)
-      endif
-      if !s:settings.ignore_conceal && s:concealinfo[0]
-	let s:col = s:col + 1
-	" Speed loop (it's small - that's the trick)
-	" Go along till we find a change in the match sequence number (ending
-	" the specific concealed region) or until there are no more concealed
-	" characters.
-	while s:col <= s:len && s:concealinfo == synconcealed(s:lnum, s:col) | let s:col = s:col + 1 | endwhile
-      elseif s:diffattr
-	let s:diff_id = diff_hlID(s:lnum, s:col)
-	let s:id = synID(s:lnum, s:col, 1)
-	let s:col = s:col + 1
-	" Speed loop (it's small - that's the trick)
-	" Go along till we find a change in hlID
-	while s:col <= s:len && s:id == synID(s:lnum, s:col, 1)
-	      \   && s:diff_id == diff_hlID(s:lnum, s:col) |
-	      \     let s:col = s:col + 1 |
-	      \ endwhile
-	if s:len < &columns && !s:settings.no_pre
-	  " Add spaces at the end of the raw text line to extend the changed
-	  " line to the full width.
-	  let s:line = s:line .. repeat(' ', &columns - virtcol([s:lnum, s:len]) - s:margin)
-	  let s:len = &columns
+      while col <= len || (col == 1 && diffattr != 0)
+	var id: number
+	var startcol = col # The start column for processing text
+	if !settings.ignore_conceal && has('conceal')
+	  concealinfo = synconcealed(lnum, col)
 	endif
-      else
-	let s:id = synID(s:lnum, s:col, 1)
-	let s:col = s:col + 1
-	" Speed loop (it's small - that's the trick)
-	" Go along till we find a change in synID
-	while s:col <= s:len && s:id == synID(s:lnum, s:col, 1) | let s:col = s:col + 1 | endwhile
-      endif
-
-      if s:settings.ignore_conceal || !s:concealinfo[0]
-	" Expand tabs if needed
-	let s:expandedtab = strpart(s:line, s:startcol - 1, s:col - s:startcol)
-	if s:settings.expand_tabs
-	  let s:offset = 0
-	  let s:idx = stridx(s:expandedtab, "\t")
-	  let s:tablist = split(&vts,',')
-	  if empty(s:tablist)
-	    let s:tablist = [ &ts ]
+	if !settings.ignore_conceal && concealinfo[0]
+	  col = col + 1
+	  # Speed loop (it's small - that's the trick)
+	  # Go along till we find a change in the match sequence number (ending
+	  # the specific concealed region) or until there are no more concealed
+	  # characters.
+	  while col <= len && concealinfo == synconcealed(lnum, col) | col = col + 1 | endwhile
+	elseif diffattr != 0
+	  diff_id = diff_hlID(lnum, col)
+	  id = synID(lnum, col, 1)
+	  col = col + 1
+	  # Speed loop (it's small - that's the trick)
+	  # Go along till we find a change in hlID
+	  while col <= len && id == synID(lnum, col, 1) && diff_id == diff_hlID(lnum, col)
+	    col = col + 1
+	  endwhile
+	  if len < &columns && !settings.no_pre
+	    # Add spaces at the end of the raw text line to extend the changed
+	    # line to the full width.
+	    line = line .. repeat(' ', &columns - virtcol([lnum, len]) - margin)
+	    len = &columns
 	  endif
-	  let s:tabidx = 0
-	  let s:tabwidth = 0
-	  while s:idx >= 0
-	    if s:startcol + s:idx == 1
-	      let s:i = s:tablist[0]
-	    else
-	      " Get the character, which could be multiple bytes, which falls
-	      " immediately before the found tab. Extract it by matching a
-	      " character just prior to the column where the tab matches.
-	      " We'll use this to get the byte index of the character
-	      " immediately preceding the tab, so we can then look up the
-	      " virtual column that character appears in, to determine how
-	      " much of the current tabstop has been used up.
-	      if s:idx == 0
-		" if the found tab is the first character in the text being
-		" processed, we need to get the character prior to the text,
-		" given by startcol.
-		let s:prevc = matchstr(s:line, '.\%' .. (s:startcol + s:offset) .. 'c')
+	else
+	  id = synID(lnum, col, 1)
+	  col = col + 1
+	  # Speed loop (it's small - that's the trick)
+	  # Go along till we find a change in synID
+	  while col <= len && id == synID(lnum, col, 1) | col = col + 1 | endwhile
+	endif
+	var expandedtab: string
+	if settings.ignore_conceal || !concealinfo[0]
+	  # Expand tabs if needed
+	  expandedtab = strpart(line, startcol - 1, col - startcol)
+	  if settings.expand_tabs
+	    var offset = 0
+	    var idx = stridx(expandedtab, "\t")
+	    var tablist = mapnew(split(&vts, ','), (_, v) => str2nr(v))
+	    if empty(tablist)
+	      tablist = [&ts]
+	    endif
+	    var tabidx = 0
+	    var tabwidth = 0
+	    var i: number
+	    while idx >= 0
+	      if startcol + idx == 1
+		i = tablist[0]
 	      else
-		" Otherwise, the byte index of the tab into s:expandedtab is
-		" given by s:idx.
-		let s:prevc = matchstr(s:expandedtab, '.\%' .. (s:idx + 1) .. 'c')
-	      endif
-	      let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
-
-	      " find the tabstop interval to use for the tab we just found. Keep
-	      " adding tabstops (which could be variable) until we would exceed
-	      " the virtual screen position of the start of the found tab.
-	      while s:vcol >= s:tabwidth + s:tablist[s:tabidx]
-		let s:tabwidth += s:tablist[s:tabidx]
-		if s:tabidx < len(s:tablist)-1
-		  let s:tabidx = s:tabidx+1
+		# Get the character, which could be multiple bytes, which falls
+		# immediately before the found tab. Extract it by matching a
+		# character just prior to the column where the tab matches.
+		# We'll use this to get the byte index of the character
+		# immediately preceding the tab, so we can then look up the
+		# virtual column that character appears in, to determine how
+		# much of the current tabstop has been used up.
+		var prevc: string
+		if idx == 0
+		  # if the found tab is the first character in the text being
+		  # processed, we need to get the character prior to the text,
+		  # given by startcol.
+		  prevc = matchstr(line, '.\%' .. (startcol + offset) .. 'c')
+		else
+		  # Otherwise, the byte index of the tab into expandedtab is
+		  # given by idx.
+		  prevc = matchstr(expandedtab, '.\%' .. (idx + 1) .. 'c')
 		endif
-	      endwhile
-	      let s:i = s:tablist[s:tabidx] - (s:vcol - s:tabwidth)
-	    endif
-	    " update offset to keep the index within the line corresponding to
-	    " actual tab characters instead of replaced spaces; s:idx reflects
-	    " replaced spaces in s:expandedtab, s:offset cancels out all but
-	    " the tab character itself.
-	    let s:offset -= s:i - 1
-	    let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
-	    let s:idx = stridx(s:expandedtab, "\t")
-	  endwhile
-	end
-
-	" get the highlight group name to use
-	let s:id = synIDtrans(s:id)
-      else
-	" use Conceal highlighting for concealed text
-	let s:id = s:CONCEAL_ID
-	let s:expandedtab = s:concealinfo[1]
-      endif
-
-      " Output the text with the same synID, with class set to the highlight ID
-      " name, unless it has been concealed completely.
-      if strlen(s:expandedtab) > 0
-	let s:new = s:new .. s:HtmlFormat(s:expandedtab,  s:id, s:diff_id, "", 0)
-      endif
-    endwhile
-  endif
+		var vcol = virtcol([lnum, startcol + idx + offset - len(prevc)])
+
+		# find the tabstop interval to use for the tab we just found. Keep
+		# adding tabstops (which could be variable) until we would exceed
+		# the virtual screen position of the start of the found tab.
+		while vcol >= tabwidth + tablist[tabidx]
+		  tabwidth += tablist[tabidx]
+		  if tabidx < len(tablist) - 1
+		    tabidx = tabidx + 1
+		  endif
+		endwhile
+		i = tablist[tabidx] - (vcol - tabwidth)
+	      endif
+	      # update offset to keep the index within the line corresponding to
+	      # actual tab characters instead of replaced spaces; idx reflects
+	      # replaced spaces in expandedtab, offset cancels out all but
+	      # the tab character itself.
+	      offset -= i - 1
+	      expandedtab = substitute(expandedtab, '\t', repeat(' ', i), '')
+	      idx = stridx(expandedtab, "\t")
+	    endwhile
+	  endif
 
-  call extend(s:lines, split(s:new..s:HtmlEndline, '\n', 1))
-  if !s:settings.no_progress && s:pgb.needs_redraw
-    redrawstatus
-    let s:pgb.needs_redraw = 0
-  endif
-  let s:lnum = s:lnum + 1
+	  # get the highlight group name to use
+	  id = synIDtrans(id)
+	else
+	  # use Conceal highlighting for concealed text
+	  id = CONCEAL_ID
+	  expandedtab = concealinfo[1]
+	endif
 
-  if !s:settings.no_progress
-    call s:pgb.incr()
-  endif
-endwhile
+	# Output the text with the same synID, with class set to the highlight ID
+	# name, unless it has been concealed completely.
+	if strlen(expandedtab) > 0
+	  new = new .. HtmlFormat(expandedtab, id, diff_id, "", false)
+	endif
+      endwhile
+    endif
 
-" Diff filler is returned based on what needs inserting *before* the given line.
-" So to get diff filler at the end of the buffer, we need to use last line + 1
-call s:Add_diff_fill(s:end+1)
+    extend(lines, split(new .. HtmlEndline, '\n', 1))
+    if !settings.no_progress && pgb.needs_redraw
+      redrawstatus
+      pgb.needs_redraw = 0
+    endif
+    lnum = lnum + 1
 
-if s:settings.dynamic_folds
-  " finish off any open folds
-  while !empty(s:foldstack)
-    let s:lines[-1]..=""
-    call remove(s:foldstack, 0)
+    if !settings.no_progress
+      pgb.Incr()
+    endif
+  endwhile
+enddef
+ProcessLines()
+
+# Diff filler is returned based on what needs inserting *before* the given line.
+# So to get diff filler at the end of the buffer, we need to use last line + 1
+Add_diff_fill(end + 1)
+
+if settings.dynamic_folds
+  # finish off any open folds
+  while !empty(foldstack)
+    lines[-1] ..= ""
+    remove(foldstack, 0)
   endwhile
 
-  " add fold column to the style list if not already there
-  let s:id = s:FOLD_C_ID
-  if !has_key(s:stylelist, s:id)
-    let s:stylelist[s:id] = '.FoldColumn { ' .. s:CSS1(s:id) .. '}'
+  # add fold column to the style list if not already there
+  var id = FOLD_C_ID
+  if !has_key(stylelist, id)
+    stylelist[id] = '.FoldColumn { ' .. CSS1(id) .. '}'
   endif
 endif
 
-if s:settings.no_pre
-  if !s:settings.use_css
-    " Close off the font tag that encapsulates the whole 
-    call extend(s:lines, [""])
+if settings.no_pre
+  if !settings.use_css
+    # Close off the font tag that encapsulates the whole 
+    extend(lines, [""])
   else
-    call extend(s:lines, ["
"]) + extend(lines, ["
"]) endif else - call extend(s:lines, ["
"]) + extend(lines, ["
"]) endif -if !s:settings.no_doc - call extend(s:lines, ["", ""]) +if !settings.no_doc + extend(lines, ["", ""]) endif -exe s:newwin .. "wincmd w" -call setline(1, s:lines) -unlet s:lines - -" Mangle modelines so Vim doesn't try to use HTML text as a modeline if editing -" this file in the future; need to do this after generating all the text in case -" the modeline text has different highlight groups which all turn out to be -" stripped from the final output. -%s!\v(%(^|\s+)%([Vv]i%(m%([<=>]?\d+)?)?|ex)):!\1\:!ge - -" The generated HTML is admittedly ugly and takes a LONG time to fold. -" Make sure the user doesn't do syntax folding when loading a generated file, -" using a modeline. -if !s:settings.no_modeline - call append(line('$'), "") +execute $":{newwin}wincmd w" +setline(1, lines) + +# Mangle modelines so Vim doesn't try to use HTML text as a modeline if editing +# this file in the future; need to do this after generating all the text in case +# the modeline text has different highlight groups which all turn out to be +# stripped from the final output. +:%s!\v(%(^|\s+)%([Vv]i%(m%([<=>]?\d+)?)?|ex)):!\1\:!ge + +# The generated HTML is admittedly ugly and takes a LONG time to fold. +# Make sure the user doesn't do syntax folding when loading a generated file, +# using a modeline. +if !settings.no_modeline + append(line('$'), "") endif -" Now, when we finally know which, we define the colors and styles -if s:settings.use_css && !s:settings.no_doc - 1;//+1 +# Now, when we finally know which, we define the colors and styles +if settings.use_css && !settings.no_doc + :1;//+1 - " Normal/global attributes - if s:settings.no_pre - call append('.', "body { color: " .. s:fgc .. "; background-color: " .. s:bgc .. "; font-family: ".. s:htmlfont .."; }") - + + # Normal/global attributes + if settings.no_pre + append('.', "body { color: " .. fgc .. "; background-color: " .. bgc .. "; font-family: " .. htmlfont .. "; }") + :+ else - call append('.', "pre { " .. s:whitespace .. "font-family: ".. s:htmlfont .."; color: " .. s:fgc .. "; background-color: " .. s:bgc .. "; }") - + + append('.', "pre { " .. whitespace .. "font-family: " .. htmlfont .. "; color: " .. fgc .. "; background-color: " .. bgc .. "; }") + :+ yank put execute "normal! ^cwbody\e" - " body should not have the wrap formatting, only the pre section - if s:whitespace != '' - exec 's#'..s:whitespace + # body should not have the wrap formatting, only the pre section + if whitespace != '' + execute 's#' .. whitespace endif endif - " fix browser inconsistencies (sometimes within the same browser) of different - " default font size for different elements - call append('.', '* { font-size: 1em; }') - + - " use color scheme styles for links - " browser-default blue/purple colors for links don't look like the existing theme and are unreadable on dark backgrounds - call append('.', 'a { color: inherit; }') - + - " if we use any input elements for unselectable content, make sure they look - " like normal text - if !empty(s:settings.prevent_copy) - if s:settings.use_input_for_pc !=# "none" - call append('.', 'input { border: none; margin: 0; padding: 0; font-family: '..s:htmlfont..'; }') - + - " ch units for browsers which support them, em units for a somewhat - " reasonable fallback. + # fix browser inconsistencies (sometimes within the same browser) of different + # default font size for different elements + append('.', '* { font-size: 1em; }') + :+ + # use color scheme styles for links + # browser-default blue/purple colors for links don't look like the existing theme and are unreadable on dark backgrounds + append('.', 'a { color: inherit; }') + :+ + # if we use any input elements for unselectable content, make sure they look + # like normal text + if !empty(settings.prevent_copy) + if settings.use_input_for_pc !=# "none" + append('.', 'input { border: none; margin: 0; padding: 0; font-family: ' .. htmlfont .. '; }') + :+ + # ch units for browsers which support them, em units for a somewhat + # reasonable fallback. for w in range(1, 20, 1) - call append('.', [ - \ "input[size='"..w.."'] { width: "..w.."em; width: "..w.."ch; }" - \ ]) - + + append('.', [ + "input[size='" .. w .. "'] { width: " .. w .. "em; width: " .. w .. "ch; }" + ]) + :+ endfor endif - if s:settings.use_input_for_pc !=# 'all' - let s:unselectable_styles = [] - if s:settings.prevent_copy =~# 'f' - call add(s:unselectable_styles, 'FoldColumn') + if settings.use_input_for_pc !=# 'all' + var unselectable_styles: list = [] + if settings.prevent_copy =~# 'f' + add(unselectable_styles, 'FoldColumn') endif - if s:settings.prevent_copy =~# 'n' - call add(s:unselectable_styles, 'LineNr') + if settings.prevent_copy =~# 'n' + add(unselectable_styles, 'LineNr') endif - if s:settings.prevent_copy =~# 't' && !s:settings.ignore_folding - call add(s:unselectable_styles, 'Folded') + if settings.prevent_copy =~# 't' && !settings.ignore_folding + add(unselectable_styles, 'Folded') endif - if s:settings.prevent_copy =~# 'd' - call add(s:unselectable_styles, 'DiffDelete') + if settings.prevent_copy =~# 'd' + add(unselectable_styles, 'DiffDelete') endif - if s:settings.use_input_for_pc !=# 'none' - call append('.', [ - \ '/* Note: IE does not support @supports conditionals, but also does not fully support', - \ ' "content:" with custom content, so we *want* the check to fail */', - \ '@supports ( content: attr(data-custom-content) ) {' - \ ]) - +3 + if settings.use_input_for_pc !=# 'none' + append('.', [ + '/* Note: IE does not support @supports conditionals, but also does not fully support', + ' "content:" with custom content, so we *want* the check to fail */', + '@supports ( content: attr(data-custom-content) ) {' + ]) + :+3 endif - " The line number column inside the foldtext is styled just like the fold - " text in Vim, but it should use the prevent_copy settings of line number - " rather than fold text. Apply the prevent_copy styles to foldtext - " specifically for line numbers, which always come after the fold column, - " or at the beginning of the line. - if s:settings.prevent_copy =~# 'n' && !s:settings.ignore_folding - call append('.', [ - \ ' .FoldColumn + .Folded, .Folded:first-child { user-select: none; }', - \ ' .FoldColumn + [data-Folded-content]::before, [data-Folded-content]:first-child::before { content: attr(data-Folded-content); }', - \ ' .FoldColumn + [data-Folded-content]::before, [data-Folded-content]:first-child::before { padding-bottom: 1px; display: inline-block; /* match the 1-px padding of standard items with background */ }', - \ ' .FoldColumn + span[data-Folded-content]::before, [data-Folded-content]:first-child::before { cursor: default; }', - \ ]) - +4 + # The line number column inside the foldtext is styled just like the fold + # text in Vim, but it should use the prevent_copy settings of line number + # rather than fold text. Apply the prevent_copy styles to foldtext + # specifically for line numbers, which always come after the fold column, + # or at the beginning of the line. + if settings.prevent_copy =~# 'n' && !settings.ignore_folding + append('.', [ + ' .FoldColumn + .Folded, .Folded:first-child { user-select: none; }', + ' .FoldColumn + [data-Folded-content]::before, [data-Folded-content]:first-child::before { content: attr(data-Folded-content); }', + ' .FoldColumn + [data-Folded-content]::before, [data-Folded-content]:first-child::before { padding-bottom: 1px; display: inline-block; /* match the 1-px padding of standard items with background */ }', + ' .FoldColumn + span[data-Folded-content]::before, [data-Folded-content]:first-child::before { cursor: default; }', + ]) + :+4 endif - for s:style_name in s:unselectable_styles - call append('.', [ - \ ' .'..s:style_name..' { user-select: none; }', - \ ' [data-'..s:style_name..'-content]::before { content: attr(data-'..s:style_name..'-content); }', - \ ' [data-'..s:style_name..'-content]::before { padding-bottom: 1px; display: inline-block; /* match the 1-px padding of standard items with background */ }', - \ ' span[data-'..s:style_name..'-content]::before { cursor: default; }', - \ ]) - +4 + for style_name in unselectable_styles + append('.', [ + ' .' .. style_name .. ' { user-select: none; }', + ' [data-' .. style_name .. '-content]::before { content: attr(data-' .. style_name .. '-content); }', + ' [data-' .. style_name .. '-content]::before { padding-bottom: 1px; display: inline-block; /* match the 1-px padding of standard items with background */ }', + ' span[data-' .. style_name .. '-content]::before { cursor: default; }', + ]) + :+4 endfor - if s:settings.use_input_for_pc !=# 'none' - " Note, the extra '}' is to match the "@supports" above - call append('.', [ - \ ' input { display: none; }', - \ '}' - \ ]) - +2 + if settings.use_input_for_pc !=# 'none' + # Note, the extra '}' is to match the "@supports" above + append('.', [ + ' input { display: none; }', + '}' + ]) + :+2 endif - unlet s:unselectable_styles endif - " Fix mouse cursor shape for the fallback method of uncopyable text - if s:settings.use_input_for_pc !=# 'none' - if s:settings.prevent_copy =~# 'f' - " Make the cursor show active fold columns as active areas, and empty fold - " columns as not interactive. - call append('.', ['input.FoldColumn { cursor: pointer; }', - \ 'input.FoldColumn[value="'..repeat(' ', s:foldcolumn)..'"] { cursor: default; }' - \ ]) - +2 - if s:settings.use_input_for_pc !=# 'all' - call append('.', [ - \ 'a[data-FoldColumn-content="'..repeat(' ', s:foldcolumn)..'"] { cursor: default; }' - \ ]) - +1 - end + # Fix mouse cursor shape for the fallback method of uncopyable text + if settings.use_input_for_pc !=# 'none' + if settings.prevent_copy =~# 'f' + # Make the cursor show active fold columns as active areas, and empty fold + # columns as not interactive. + append('.', ['input.FoldColumn { cursor: pointer; }', + 'input.FoldColumn[value="' .. repeat(' ', foldcolumn) .. '"] { cursor: default; }' + ]) + :+2 + if settings.use_input_for_pc !=# 'all' + append('.', [ + 'a[data-FoldColumn-content="' .. repeat(' ', foldcolumn) .. '"] { cursor: default; }' + ]) + :+1 + endif endif - " make line number column show as non-interactive if not selectable - if s:settings.prevent_copy =~# 'n' - call append('.', 'input.LineNr { cursor: default; }') - + + # make line number column show as non-interactive if not selectable + if settings.prevent_copy =~# 'n' + append('.', 'input.LineNr { cursor: default; }') + :+ endif - " make fold text and line number column within fold text show as - " non-interactive if not selectable - if (s:settings.prevent_copy =~# 'n' || s:settings.prevent_copy =~# 't') && !s:settings.ignore_folding - call append('.', 'input.Folded { cursor: default; }') - + + # make fold text and line number column within fold text show as + # non-interactive if not selectable + if (settings.prevent_copy =~# 'n' || settings.prevent_copy =~# 't') && !settings.ignore_folding + append('.', 'input.Folded { cursor: default; }') + :+ endif - " make diff filler show as non-interactive if not selectable - if s:settings.prevent_copy =~# 'd' - call append('.', 'input.DiffDelete { cursor: default; }') - + + # make diff filler show as non-interactive if not selectable + if settings.prevent_copy =~# 'd' + append('.', 'input.DiffDelete { cursor: default; }') + :+ endif endif endif endif -if !s:settings.use_css && !s:settings.no_doc - " For Netscape 4, set attributes too, though, strictly speaking, it's - " incorrect. - execute '%s:]*\):\r attributes too, though, strictly speaking, it's + # incorrect. + execute $':%s/]*\)/\r diffstylelist[k]), (_, v) => v != "")) endif - if !empty(s:stylelist) - call append('.', filter(map(keys(s:stylelist), "s:stylelist[v:val]"), 'v:val != ""')) + if !empty(stylelist) + append('.', filter(map(keys(stylelist), (_, k) => stylelist[k]), (_, v) => v != "")) endif endif -" Add hyperlinks -if !s:settings.no_links - %s+\(https\=://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|>\|<\|"\)+\1\2+ge +# Add hyperlinks +if !settings.no_links + :%s+\(https\=://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|>\|<\|"\)+\1\2+ge endif -" The DTD -if !s:settings.no_doc - if s:settings.use_xhtml - exe "normal! gg$a\n" - elseif s:html5 - exe "normal! gg0i\n" +# The DTD +if !settings.no_doc + if settings.use_xhtml + execute "normal! gg$a\n" + elseif html5 + execute "normal! gg0i\n" else - exe "normal! gg0i\n" + execute "normal! gg0i\n" endif endif -if s:settings.use_xhtml && !s:settings.no_doc - exe "normal! gg/ " URL: https://8th-dev.com/ " Filetypes: *.8th @@ -53,10 +53,10 @@ Builtin K G:K NaN G:NaN NaN? G:NaN? SED-CHECK G:SED-CHECK SED: G:SED: SED: G:SE Builtin _swap G:_swap actor: G:actor: again G:again ahead G:ahead all-words G:all-words and G:and apropos G:apropos Builtin argc G:argc args G:args array? G:array? assert G:assert base G:base base>n G:base>n bi G:bi Builtin bits G:bits break G:break break? G:break? breakif G:breakif build? G:build? buildver? G:buildver? -Builtin bye G:bye c/does G:c/does case: G:case: catch G:catch chdir G:chdir clip-mime> G:clip-mime> -Builtin clip-mime? G:clip-mime? clip> G:clip> clone G:clone clone-shallow G:clone-shallow cold G:cold -Builtin compile G:compile compile? G:compile? compiling? G:compiling? conflict G:conflict const G:const -Builtin container? G:container? counting-allocations G:counting-allocations cr G:cr critical: G:critical: +Builtin bye G:bye c/does G:c/does case: G:case: catch G:catch chdir G:chdir clip-mime-types G:clip-mime-types +Builtin clip-mime> G:clip-mime> clip-mime? G:clip-mime? clip> G:clip> clone G:clone clone-shallow G:clone-shallow +Builtin cold G:cold compile G:compile compile? G:compile? compiling? G:compiling? conflict G:conflict +Builtin const G:const container? G:container? counting-allocations G:counting-allocations cr G:cr critical: G:critical: Builtin critical; G:critical; curlang G:curlang curry G:curry curry: G:curry: decimal G:decimal default: G:default: Builtin defer: G:defer: deferred: G:deferred: deg>rad G:deg>rad depth G:depth die G:die dip G:dip drop G:drop Builtin dstack G:dstack dump G:dump dup G:dup dup>r G:dup>r dup? G:dup? e# G:e# enum: G:enum: error? G:error? @@ -70,25 +70,25 @@ Builtin l: G:l: last G:last lib G:lib libbin G:libbin libc G:libc libimg G:libi Builtin locals: G:locals: lock G:lock lock-to G:lock-to locked? G:locked? log G:log logl G:logl long-days G:long-days Builtin long-months G:long-months longjmp G:longjmp lookup G:lookup loop G:loop loop- G:loop- map? G:map? Builtin mark G:mark mark? G:mark? mobile? G:mobile? n# G:n# name>os G:name>os name>sem G:name>sem ndrop G:ndrop -Builtin needs G:needs needs-throws G:needs-throws new G:new next-arg G:next-arg nip G:nip noop G:noop -Builtin not G:not nothrow G:nothrow ns G:ns ns: G:ns: ns>ls G:ns>ls ns>s G:ns>s ns? G:ns? null G:null -Builtin null; G:null; null? G:null? nullvar G:nullvar number? G:number? of: G:of: off G:off on G:on -Builtin onexit G:onexit only G:only op! G:op! or G:or os G:os os-names G:os-names os>long-name G:os>long-name -Builtin os>name G:os>name over G:over p: G:p: pack G:pack parse G:parse parse-csv G:parse-csv parse-date G:parse-date -Builtin parsech G:parsech parseln G:parseln parsews G:parsews pick G:pick poke G:poke pool-clear G:pool-clear -Builtin pool-clear-all G:pool-clear-all prior G:prior private G:private process-args G:process-args -Builtin process-args-fancy G:process-args-fancy process-args-help G:process-args-help prompt G:prompt -Builtin public G:public putc G:putc puts G:puts quote G:quote r! G:r! r> G:r> r@ G:r@ rad>deg G:rad>deg -Builtin rand-float G:rand-float rand-float-signed G:rand-float-signed rand-jit G:rand-jit rand-jsf G:rand-jsf -Builtin rand-native G:rand-native rand-normal G:rand-normal rand-pcg G:rand-pcg rand-pcg-seed G:rand-pcg-seed -Builtin rand-range G:rand-range rand-select G:rand-select randbuf-pcg G:randbuf-pcg random G:random -Builtin rdrop G:rdrop recurse G:recurse recurse-stack G:recurse-stack ref@ G:ref@ reg! G:reg! reg@ G:reg@ -Builtin regbin@ G:regbin@ remaining-args G:remaining-args repeat G:repeat requires G:requires reset G:reset -Builtin roll G:roll rop! G:rop! rot G:rot rpick G:rpick rreset G:rreset rroll G:rroll rstack G:rstack -Builtin rswap G:rswap rusage G:rusage s>ns G:s>ns same? G:same? scriptdir G:scriptdir scriptfile G:scriptfile -Builtin sem G:sem sem-post G:sem-post sem-rm G:sem-rm sem-wait G:sem-wait sem-wait? G:sem-wait? sem>name G:sem>name -Builtin semi-throw G:semi-throw set-wipe G:set-wipe setenv G:setenv setjmp G:setjmp settings! G:settings! -Builtin settings![] G:settings![] settings-clear G:settings-clear settings-db-name G:settings-db-name +Builtin needs G:needs needs-throws G:needs-throws new G:new next-arg G:next-arg next-num-var G:next-num-var +Builtin next-var G:next-var nip G:nip noop G:noop not G:not nothrow G:nothrow ns G:ns ns: G:ns: ns>ls G:ns>ls +Builtin ns>s G:ns>s ns? G:ns? null G:null null; G:null; null? G:null? nullvar G:nullvar number? G:number? +Builtin of: G:of: off G:off on G:on onexit G:onexit only G:only op! G:op! or G:or os G:os os-names G:os-names +Builtin os>long-name G:os>long-name os>name G:os>name over G:over p: G:p: pack G:pack parse G:parse +Builtin parse-csv G:parse-csv parse-date G:parse-date parsech G:parsech parseln G:parseln parsews G:parsews +Builtin pick G:pick poke G:poke pool-clear G:pool-clear pool-clear-all G:pool-clear-all prior G:prior +Builtin private G:private process-args G:process-args process-args-fancy G:process-args-fancy process-args-help G:process-args-help +Builtin prompt G:prompt public G:public putc G:putc puts G:puts quote G:quote r! G:r! r> G:r> r@ G:r@ +Builtin rad>deg G:rad>deg rand-float G:rand-float rand-float-signed G:rand-float-signed rand-jit G:rand-jit +Builtin rand-jsf G:rand-jsf rand-native G:rand-native rand-normal G:rand-normal rand-pcg G:rand-pcg +Builtin rand-pcg-seed G:rand-pcg-seed rand-range G:rand-range rand-select G:rand-select randbuf-pcg G:randbuf-pcg +Builtin random G:random rdrop G:rdrop recurse G:recurse recurse-stack G:recurse-stack ref@ G:ref@ reg! G:reg! +Builtin reg@ G:reg@ regbin@ G:regbin@ remaining-args G:remaining-args repeat G:repeat requires G:requires +Builtin reset G:reset roll G:roll rop! G:rop! rot G:rot rpick G:rpick rreset G:rreset rroll G:rroll +Builtin rstack G:rstack rswap G:rswap rusage G:rusage s>ns G:s>ns same? G:same? scriptdir G:scriptdir +Builtin scriptfile G:scriptfile sem G:sem sem-post G:sem-post sem-rm G:sem-rm sem-wait G:sem-wait sem-wait? G:sem-wait? +Builtin sem>name G:sem>name semi-throw G:semi-throw set-wipe G:set-wipe setenv G:setenv setjmp G:setjmp +Builtin settings! G:settings! settings![] G:settings![] settings-clear G:settings-clear settings-db-name G:settings-db-name Builtin settings-gather G:settings-gather settings-load G:settings-load settings-save G:settings-save Builtin settings-save-these G:settings-save-these settings-ungather G:settings-ungather settings@ G:settings@ Builtin settings@? G:settings@? settings@[] G:settings@[] sh G:sh sh! G:sh! sh!to G:sh!to sh$ G:sh$ @@ -108,19 +108,20 @@ Builtin dot a:dot each a:each each! a:each! each-par a:each-par each-slice a:ea Builtin filter a:filter filter-par a:filter-par generate a:generate group a:group indexof a:indexof Builtin insert a:insert intersect a:intersect join a:join len a:len map a:map map+ a:map+ map-par a:map-par Builtin map= a:map= maxlen a:maxlen mean a:mean mean&variance a:mean&variance merge a:merge new a:new -Builtin op! a:op! open a:open pigeon a:pigeon pivot a:pivot pop a:pop push a:push qsort a:qsort randeach a:randeach -Builtin reduce a:reduce reduce+ a:reduce+ remove a:remove rev a:rev rindexof a:rindexof shift a:shift -Builtin shuffle a:shuffle slice a:slice slice+ a:slice+ slide a:slide smear a:smear sort a:sort split a:split -Builtin squash a:squash switch a:switch union a:union uniq a:uniq unzip a:unzip x a:x x-each a:x-each -Builtin xchg a:xchg y a:y zip a:zip 8thdir app:8thdir asset app:asset atrun app:atrun atrun app:atrun -Builtin atrun app:atrun basedir app:basedir basename app:basename config-file-name app:config-file-name +Builtin op! a:op! open a:open pigeon a:pigeon pivot a:pivot pop a:pop push a:push push-n a:push-n qsort a:qsort +Builtin randeach a:randeach reduce a:reduce reduce+ a:reduce+ remove a:remove rev a:rev rindexof a:rindexof +Builtin search a:search shift a:shift shuffle a:shuffle slice a:slice slice+ a:slice+ slide a:slide +Builtin smear a:smear sort a:sort split a:split squash a:squash union a:union uniq a:uniq unzip a:unzip +Builtin when-n a:when-n x a:x x-each a:x-each xchg a:xchg y a:y zip a:zip 8thdir app:8thdir asset app:asset +Builtin atrun app:atrun atrun app:atrun atrun app:atrun basedir app:basedir basename app:basename config-file-name app:config-file-name Builtin current app:current datadir app:datadir display-moved app:display-moved exename app:exename Builtin localechanged app:localechanged lowmem app:lowmem main app:main meta! app:meta! meta@ app:meta@ Builtin name app:name onback app:onback oncrash app:oncrash opts! app:opts! opts@ app:opts@ orientation app:orientation Builtin orientation! app:orientation! pid app:pid post-main app:post-main pre-main app:pre-main privdir app:privdir Builtin quiet? app:quiet? raise app:raise read-config app:read-config read-config-map app:read-config-map -Builtin read-config-var app:read-config-var request-perm app:request-perm restart app:restart resumed app:resumed -Builtin signal app:signal standalone app:standalone standalone! app:standalone! subdir app:subdir suspended app:suspended +Builtin read-config-var app:read-config-var read-config-vars app:read-config-vars request-perm app:request-perm +Builtin restart app:restart resumed app:resumed save-config-vars app:save-config-vars signal app:signal +Builtin standalone app:standalone standalone! app:standalone! subdir app:subdir suspended app:suspended Builtin sysquit app:sysquit terminated app:terminated theme? app:theme? themechanged app:themechanged Builtin ticks app:ticks timeout app:timeout trap app:trap dawn astro:dawn do-dawn astro:do-dawn do-dusk astro:do-dusk Builtin do-rise astro:do-rise dst! astro:dst! dusk astro:dusk latitude astro:latitude location! astro:location! @@ -197,14 +198,16 @@ Builtin prev-dow d:prev-dow relative d:relative rfc5322 d:rfc5322 start-timer d Builtin ticks/sec d:ticks/sec timer d:timer timer-ctrl d:timer-ctrl tzadjust d:tzadjust unix> d:unix> Builtin unknown d:unknown unknown? d:unknown? updatetz d:updatetz year@ d:year@ ymd d:ymd ymd> d:ymd> Builtin MYSQLLIB db:MYSQLLIB ODBCLIB db:ODBCLIB add-func db:add-func aes! db:aes! again? db:again? -Builtin begin db:begin bind db:bind bind-exec db:bind-exec bind-exec{} db:bind-exec{} close db:close -Builtin col db:col col{} db:col{} commit db:commit db db:db dbpush db:dbpush disuse db:disuse each db:each -Builtin err-handler db:err-handler exec db:exec exec-cb db:exec-cb exec-name db:exec-name exec{} db:exec{} -Builtin get db:get get-sub db:get-sub key db:key kind? db:kind? last-rowid db:last-rowid mysql? db:mysql? -Builtin odbc? db:odbc? open db:open open? db:open? prep-name db:prep-name prepare db:prepare query db:query -Builtin query-all db:query-all rekey db:rekey rollback db:rollback set db:set set-sub db:set-sub sql@ db:sql@ -Builtin sql[] db:sql[] sql[np] db:sql[np] sql{np} db:sql{np} sql{} db:sql{} use db:use zip db:zip .state dbg:.state -Builtin bp dbg:bp bt dbg:bt except-task@ dbg:except-task@ go dbg:go prompt dbg:prompt see dbg:see stop dbg:stop +Builtin begin db:begin begin! db:begin! bind db:bind bind-exec db:bind-exec bind-exec{} db:bind-exec{} +Builtin close db:close col db:col col{} db:col{} commit db:commit commit! db:commit! db db:db dbpush db:dbpush +Builtin disuse db:disuse each db:each ensure db:ensure err-handler db:err-handler exec db:exec exec-cb db:exec-cb +Builtin exec-name db:exec-name exec{} db:exec{} get db:get get-sub db:get-sub get-sub[] db:get-sub[] +Builtin get[] db:get[] key db:key kind? db:kind? last-rowid db:last-rowid mysql? db:mysql? odbc? db:odbc? +Builtin open db:open open? db:open? prep-name db:prep-name prepare db:prepare query db:query query-all db:query-all +Builtin rekey db:rekey rollback db:rollback rollback! db:rollback! rowid@ db:rowid@ set db:set set-sub db:set-sub +Builtin set-sub[] db:set-sub[] set[] db:set[] sql@ db:sql@ sql[] db:sql[] sql[np] db:sql[np] sql{np} db:sql{np} +Builtin sql{} db:sql{} table-exists db:table-exists use db:use zip db:zip .state dbg:.state bp dbg:bp +Builtin bt dbg:bt except-task@ dbg:except-task@ go dbg:go prompt dbg:prompt see dbg:see stop dbg:stop Builtin trace dbg:trace pso ds:pso / f:/ >posix f:>posix abspath f:abspath absrel f:absrel append f:append Builtin associate f:associate atime f:atime autodel f:autodel canwrite? f:canwrite? chmod f:chmod close f:close Builtin copy f:copy copydir f:copydir create f:create ctime f:ctime dir? f:dir? dname f:dname eachbuf f:eachbuf @@ -214,47 +217,49 @@ Builtin getline f:getline getmod f:getmod glob f:glob glob-links f:glob-links g Builtin globfilter f:globfilter gunz f:gunz homedir f:homedir homedir! f:homedir! include f:include Builtin ioctl f:ioctl join f:join launch f:launch link f:link link> f:link> link? f:link? lock f:lock Builtin mkdir f:mkdir mmap f:mmap mmap-range f:mmap-range mmap-range? f:mmap-range? mtime f:mtime mv f:mv -Builtin name@ f:name@ open f:open open! f:open! open-ro f:open-ro popen f:popen popen3 f:popen3 print f:print -Builtin read f:read read-buf f:read-buf read? f:read? relpath f:relpath rglob f:rglob rm f:rm rmdir f:rmdir -Builtin seek f:seek sep f:sep size f:size slurp f:slurp sparse? f:sparse? spit f:spit stderr f:stderr -Builtin stdin f:stdin stdout f:stdout tell f:tell tempfile f:tempfile tilde f:tilde tilde? f:tilde? -Builtin times f:times tmpspit f:tmpspit trash f:trash truncate f:truncate ungetb f:ungetb ungetc f:ungetc -Builtin unzip f:unzip unzip-entry f:unzip-entry watch f:watch write f:write writen f:writen zip+ f:zip+ -Builtin zip@ f:zip@ zipentry f:zipentry zipnew f:zipnew zipopen f:zipopen zipsave f:zipsave atlas! font:atlas! -Builtin atlas@ font:atlas@ default-size font:default-size default-size@ font:default-size@ info font:info -Builtin ls font:ls measure font:measure new font:new oversample font:oversample pixels font:pixels -Builtin pixels? font:pixels? system font:system system font:system filebrowser g:filebrowser media? g:media? -Builtin event-loop game:event-loop init game:init state! game:state! state@ game:state@ distance geo:distance -Builtin km/deg-lat geo:km/deg-lat km/deg-lon geo:km/deg-lon nearest geo:nearest close gpio:close flags! gpio:flags! -Builtin info gpio:info init gpio:init line gpio:line open gpio:open read gpio:read req gpio:req write gpio:write -Builtin +edge gr:+edge +edge+w gr:+edge+w +node gr:+node connect gr:connect edges gr:edges edges! gr:edges! +Builtin name@ f:name@ open f:open open! f:open! open-ro f:open-ro popen f:popen popen3 f:popen3 prepend f:prepend +Builtin print f:print read f:read read-buf f:read-buf read? f:read? relpath f:relpath rglob f:rglob +Builtin rm f:rm rmdir f:rmdir seek f:seek sep f:sep size f:size slurp f:slurp sparse? f:sparse? spit f:spit +Builtin stderr f:stderr stdin f:stdin stdout f:stdout tell f:tell tempfile f:tempfile tilde f:tilde +Builtin tilde? f:tilde? times f:times tmpspit f:tmpspit trash f:trash truncate f:truncate ungetb f:ungetb +Builtin ungetc f:ungetc unzip f:unzip unzip-entry f:unzip-entry watch f:watch write f:write writen f:writen +Builtin zip+ f:zip+ zip@ f:zip@ zipentry f:zipentry zipnew f:zipnew zipopen f:zipopen zipsave f:zipsave +Builtin atlas font:atlas atlas! font:atlas! atlas@ font:atlas@ default-size font:default-size default-size@ font:default-size@ +Builtin info font:info ls font:ls ls font:ls measure font:measure new font:new oversample font:oversample +Builtin pixels font:pixels pixels? font:pixels? pt2pix font:pt2pix system font:system filebrowser g:filebrowser +Builtin media? g:media? event-loop game:event-loop init game:init state! game:state! state@ game:state@ +Builtin distance geo:distance km/deg-lat geo:km/deg-lat km/deg-lon geo:km/deg-lon nearest geo:nearest +Builtin close gpio:close flags! gpio:flags! info gpio:info init gpio:init line gpio:line open gpio:open +Builtin read gpio:read req gpio:req ver gpio:ver write gpio:write +edge gr:+edge +edge+w gr:+edge+w +Builtin +node gr:+node connect gr:connect each gr:each edges gr:edges edges! gr:edges! info gr:info Builtin m! gr:m! m@ gr:m@ neighbors gr:neighbors new gr:new node-edges gr:node-edges nodes gr:nodes -Builtin traverse gr:traverse weight! gr:weight! + h:+ @ h:@ clear h:clear cmp! h:cmp! len h:len max! h:max! -Builtin new h:new peek h:peek pop h:pop push h:push unique h:unique parse html:parse arm? hw:arm? camera hw:camera -Builtin camera-img hw:camera-img camera? hw:camera? cpu? hw:cpu? device? hw:device? displays? hw:displays? -Builtin displaysize? hw:displaysize? finger-match hw:finger-match finger-support hw:finger-support -Builtin i2c hw:i2c i2c! hw:i2c! i2c!reg hw:i2c!reg i2c@ hw:i2c@ i2c@reg hw:i2c@reg isround? hw:isround? -Builtin iswatch? hw:iswatch? mac? hw:mac? mem? hw:mem? model? hw:model? poll hw:poll sensor hw:sensor -Builtin sensor-event hw:sensor-event sensors? hw:sensors? start hw:start stop hw:stop touch? hw:touch? -Builtin uid? hw:uid? fetch-full imap:fetch-full fetch-uid-mail imap:fetch-uid-mail login imap:login -Builtin logout imap:logout new imap:new search imap:search select-inbox imap:select-inbox >file img:>file -Builtin >fmt img:>fmt ECC-HIGH img:ECC-HIGH ECC-LOW img:ECC-LOW ECC-MEDIUM img:ECC-MEDIUM ECC-QUARTILE img:ECC-QUARTILE -Builtin copy img:copy crop img:crop data img:data desat img:desat draw img:draw draw-sub img:draw-sub -Builtin exif img:exif exif-rotate? img:exif-rotate? fill img:fill fillrect img:fillrect filter img:filter -Builtin fit img:fit flip img:flip from-svg img:from-svg line img:line new img:new pikchr img:pikchr -Builtin pix! img:pix! pix@ img:pix@ qr-black img:qr-black qr-block img:qr-block qr-gen img:qr-gen qr-margin img:qr-margin -Builtin qr-parse img:qr-parse qr-white img:qr-white qr>img img:qr>img rect img:rect rotate img:rotate -Builtin scale img:scale scroll img:scroll size img:size countries iso:countries languages iso:languages +Builtin search gr:search traverse gr:traverse weight! gr:weight! + h:+ >a h:>a @ h:@ clear h:clear +Builtin cmp! h:cmp! len h:len max! h:max! new h:new peek h:peek pop h:pop push h:push unique h:unique +Builtin parse html:parse arm? hw:arm? camera hw:camera camera-img hw:camera-img camera? hw:camera? +Builtin cpu? hw:cpu? device? hw:device? displays? hw:displays? displaysize? hw:displaysize? finger-match hw:finger-match +Builtin finger-support hw:finger-support i2c hw:i2c i2c! hw:i2c! i2c!reg hw:i2c!reg i2c@ hw:i2c@ i2c@reg hw:i2c@reg +Builtin isround? hw:isround? iswatch? hw:iswatch? mac? hw:mac? mem? hw:mem? model? hw:model? poll hw:poll +Builtin sensor hw:sensor sensor-event hw:sensor-event sensors? hw:sensors? start hw:start stop hw:stop +Builtin touch? hw:touch? uid? hw:uid? fetch-full imap:fetch-full fetch-uid-mail imap:fetch-uid-mail +Builtin login imap:login logout imap:logout new imap:new search imap:search select-inbox imap:select-inbox +Builtin >file img:>file >fmt img:>fmt ECC-HIGH img:ECC-HIGH ECC-LOW img:ECC-LOW ECC-MEDIUM img:ECC-MEDIUM +Builtin ECC-QUARTILE img:ECC-QUARTILE copy img:copy crop img:crop data img:data desat img:desat draw img:draw +Builtin draw-sub img:draw-sub exif img:exif exif-rotate? img:exif-rotate? fill img:fill fillrect img:fillrect +Builtin filter img:filter fit img:fit flip img:flip from-svg img:from-svg line img:line new img:new +Builtin pikchr img:pikchr pix! img:pix! pix@ img:pix@ qr-black img:qr-black qr-block img:qr-block qr-gen img:qr-gen +Builtin qr-margin img:qr-margin qr-parse img:qr-parse qr-white img:qr-white qr>img img:qr>img rect img:rect +Builtin rotate img:rotate scale img:scale scroll img:scroll size img:size countries iso:countries languages iso:languages Builtin bearing loc:bearing city loc:city city-db loc:city-db city-exact loc:city-exact city-exact loc:city-exact Builtin city-version loc:city-version city_country loc:city_country find loc:find sort loc:sort console log:console Builtin file log:file hook log:hook level log:level local log:local qsize log:qsize syslog log:syslog Builtin task log:task time log:time ! m:! !? m:!? + m:+ +? m:+? - m:- <> m:<> = m:= >arr m:>arr @ m:@ Builtin @? m:@? _! m:_! _@ m:_@ _@? m:_@? accumulate m:accumulate alias m:alias arr> m:arr> bitmap m:bitmap Builtin clear m:clear data m:data each m:each exists? m:exists? filter m:filter ic m:ic iter m:iter -Builtin iter-all m:iter-all keys m:keys len m:len map m:map merge m:merge new m:new op! m:op! open m:open -Builtin slice m:slice vals m:vals xchg m:xchg zip m:zip ! mat:! * mat:* + mat:+ = mat:= @ mat:@ affine mat:affine -Builtin col mat:col data mat:data det mat:det dim? mat:dim? get-n mat:get-n ident mat:ident inv mat:inv -Builtin m. mat:m. minor mat:minor n* mat:n* new mat:new new-minor mat:new-minor rotate mat:rotate row mat:row +Builtin iter-all m:iter-all iter-sorted m:iter-sorted iter-sorted-vals m:iter-sorted-vals keys m:keys +Builtin len m:len map m:map merge m:merge new m:new op! m:op! open m:open slice m:slice vals m:vals +Builtin xchg m:xchg zip m:zip ! mat:! * mat:* + mat:+ = mat:= @ mat:@ affine mat:affine col mat:col +Builtin data mat:data det mat:det dim? mat:dim? get-n mat:get-n ident mat:ident inv mat:inv m. mat:m. +Builtin minor mat:minor n* mat:n* new mat:new new-minor mat:new-minor rotate mat:rotate row mat:row Builtin same-size? mat:same-size? scale mat:scale shear mat:shear trans mat:trans translate mat:translate Builtin xform mat:xform 2console md:2console 2html md:2html 2nk md:2nk 8th? md:8th? user! md:user! Builtin user!@ md:user!@ user@ md:user@ user@@ md:user@@ color meta:color console meta:console gui meta:gui @@ -283,140 +288,146 @@ Builtin head net:head ifaces? net:ifaces? interp8th net:interp8th ipv6? net:ipv Builtin listen net:listen map>url net:map>url mime-type net:mime-type net-socket net:net-socket opts net:opts Builtin port-is-ssl? net:port-is-ssl? post net:post proxy! net:proxy! put net:put read net:read read-all net:read-all Builtin read-buf net:read-buf recvfrom net:recvfrom s>url net:s>url sendto net:sendto server net:server -Builtin setsockopt net:setsockopt socket net:socket socket-mcast net:socket-mcast tcp-connect net:tcp-connect -Builtin tlserr net:tlserr tlshello net:tlshello udp-connect net:udp-connect url> net:url> user-agent net:user-agent -Builtin valid-email? net:valid-email? vpncheck net:vpncheck wait net:wait webserver net:webserver write net:write +Builtin setsockopt net:setsockopt socket net:socket socket-mcast net:socket-mcast spamcheck net:spamcheck +Builtin tcp-connect net:tcp-connect tlserr net:tlserr tlshello net:tlshello udp-connect net:udp-connect +Builtin url> net:url> user-agent net:user-agent valid-email? net:valid-email? vpncheck net:vpncheck +Builtin wait net:wait webserver net:webserver write net:write ws-parse net:ws-parse init nfc:init list nfc:list +Builtin name nfc:name open nfc:open present? nfc:present? read nfc:read ver nfc:ver write nfc:write Builtin (begin) nk:(begin) (chart-begin) nk:(chart-begin) (chart-begin-colored) nk:(chart-begin-colored) Builtin (chart-end) nk:(chart-end) (end) nk:(end) (group-begin) nk:(group-begin) (group-end) nk:(group-end) Builtin (property) nk:(property) >img nk:>img PIXEL-FORMATS nk:PIXEL-FORMATS addfont nk:addfont affine nk:affine -Builtin anti-alias nk:anti-alias any-clicked? nk:any-clicked? bounds nk:bounds bounds! nk:bounds! button nk:button -Builtin button-color nk:button-color button-label nk:button-label button-set-behavior nk:button-set-behavior -Builtin button-symbol nk:button-symbol button-symbol-label nk:button-symbol-label calendar nk:calendar -Builtin chart-add-slot nk:chart-add-slot chart-add-slot-colored nk:chart-add-slot-colored chart-push nk:chart-push -Builtin chart-push-slot nk:chart-push-slot checkbox nk:checkbox circle nk:circle clicked? nk:clicked? -Builtin close-this! nk:close-this! close-this? nk:close-this? close? nk:close? color-chooser nk:color-chooser -Builtin color-picker nk:color-picker combo nk:combo combo-begin-color nk:combo-begin-color combo-begin-label nk:combo-begin-label -Builtin combo-cb nk:combo-cb combo-end nk:combo-end contextual-begin nk:contextual-begin contextual-close nk:contextual-close -Builtin contextual-end nk:contextual-end contextual-item-image-text nk:contextual-item-image-text contextual-item-symbol-text nk:contextual-item-symbol-text -Builtin contextual-item-text nk:contextual-item-text cp! nk:cp! cp@ nk:cp@ curpos nk:curpos cursor-load nk:cursor-load -Builtin cursor-set nk:cursor-set cursor-show nk:cursor-show display-info nk:display-info display-scale@ nk:display-scale@ -Builtin display@ nk:display@ do nk:do down? nk:down? draw-image nk:draw-image draw-image-at nk:draw-image-at -Builtin draw-image-centered nk:draw-image-centered draw-sub-image nk:draw-sub-image draw-text nk:draw-text -Builtin draw-text-centered nk:draw-text-centered draw-text-high nk:draw-text-high draw-text-wrap nk:draw-text-wrap -Builtin driver nk:driver drivers nk:drivers dropped nk:dropped dropping nk:dropping edit-focus nk:edit-focus -Builtin edit-string nk:edit-string event nk:event event-boost nk:event-boost event-msec nk:event-msec -Builtin event-wait nk:event-wait event? nk:event? fill-arc nk:fill-arc fill-circle nk:fill-circle fill-color nk:fill-color -Builtin fill-poly nk:fill-poly fill-rect nk:fill-rect fill-rect-color nk:fill-rect-color fill-triangle nk:fill-triangle -Builtin finger nk:finger flags! nk:flags! flags@ nk:flags@ flash nk:flash fullscreen nk:fullscreen -Builtin gesture nk:gesture get nk:get get-row-height nk:get-row-height getfont nk:getfont getmap nk:getmap -Builtin getmap! nk:getmap! gget nk:gget grid nk:grid grid-peek nk:grid-peek grid-push nk:grid-push -Builtin group-scroll-ofs nk:group-scroll-ofs group-scroll-ofs! nk:group-scroll-ofs! gset nk:gset hints nk:hints -Builtin hovered? nk:hovered? hrule nk:hrule ident nk:ident image nk:image init nk:init init-flags nk:init-flags -Builtin init-sub nk:init-sub input-button nk:input-button input-key nk:input-key input-motion nk:input-motion -Builtin input-scroll nk:input-scroll input-string nk:input-string key-down? nk:key-down? key-pressed? nk:key-pressed? -Builtin key-released? nk:key-released? knob nk:knob label nk:label label-colored nk:label-colored label-wrap nk:label-wrap -Builtin label-wrap-colored nk:label-wrap-colored layout-bounds nk:layout-bounds layout-grid-begin nk:layout-grid-begin -Builtin layout-grid-end nk:layout-grid-end layout-push-dynamic nk:layout-push-dynamic layout-push-static nk:layout-push-static -Builtin layout-push-variable nk:layout-push-variable layout-ratio-from-pixel nk:layout-ratio-from-pixel +Builtin anti-alias nk:anti-alias any-active nk:any-active any-clicked? nk:any-clicked? app-render nk:app-render +Builtin app-template nk:app-template bounds nk:bounds bounds! nk:bounds! button nk:button button-color nk:button-color +Builtin button-label nk:button-label button-set-behavior nk:button-set-behavior button-symbol nk:button-symbol +Builtin button-symbol-label nk:button-symbol-label calendar nk:calendar chart-add-slot nk:chart-add-slot +Builtin chart-add-slot-colored nk:chart-add-slot-colored chart-push nk:chart-push chart-push-slot nk:chart-push-slot +Builtin checkbox nk:checkbox circle nk:circle clicked? nk:clicked? clipping nk:clipping close-this! nk:close-this! +Builtin close-this? nk:close-this? close? nk:close? color-chooser nk:color-chooser color-picker nk:color-picker +Builtin combo nk:combo combo-begin-color nk:combo-begin-color combo-begin-label nk:combo-begin-label +Builtin combo-cb nk:combo-cb combo-end nk:combo-end content-region nk:content-region contextual-begin nk:contextual-begin +Builtin contextual-close nk:contextual-close contextual-end nk:contextual-end contextual-item-image-text nk:contextual-item-image-text +Builtin contextual-item-symbol-text nk:contextual-item-symbol-text contextual-item-text nk:contextual-item-text +Builtin cp! nk:cp! cp@ nk:cp@ curpos nk:curpos cursor-load nk:cursor-load cursor-set nk:cursor-set +Builtin cursor-show nk:cursor-show density@ nk:density@ display-change nk:display-change display-info nk:display-info +Builtin display-scale@ nk:display-scale@ display@ nk:display@ do nk:do down? nk:down? draw-image nk:draw-image +Builtin draw-image-at nk:draw-image-at draw-image-centered nk:draw-image-centered draw-sub-image nk:draw-sub-image +Builtin draw-text nk:draw-text draw-text-centered nk:draw-text-centered draw-text-high nk:draw-text-high +Builtin draw-text-wrap nk:draw-text-wrap driver nk:driver drivers nk:drivers dropped nk:dropped dropping nk:dropping +Builtin edit-focus nk:edit-focus edit-pwd nk:edit-pwd edit-string nk:edit-string event nk:event event-boost nk:event-boost +Builtin event-msec nk:event-msec event-wait nk:event-wait event? nk:event? file-dlg nk:file-dlg fill-arc nk:fill-arc +Builtin fill-circle nk:fill-circle fill-color nk:fill-color fill-poly nk:fill-poly fill-rect nk:fill-rect +Builtin fill-rect-color nk:fill-rect-color fill-triangle nk:fill-triangle finger nk:finger flags! nk:flags! +Builtin flags@ nk:flags@ flash nk:flash fullscreen nk:fullscreen get nk:get get-row-height nk:get-row-height +Builtin getfont nk:getfont getmap nk:getmap getmap! nk:getmap! gget nk:gget grid nk:grid grid! nk:grid! +Builtin grid-peek nk:grid-peek grid-push nk:grid-push group-scroll-ofs nk:group-scroll-ofs group-scroll-ofs! nk:group-scroll-ofs! +Builtin gset nk:gset hints nk:hints hovered? nk:hovered? hrule nk:hrule ident nk:ident image nk:image +Builtin init nk:init init-flags nk:init-flags init-sub nk:init-sub input-button nk:input-button input-key nk:input-key +Builtin input-motion nk:input-motion input-scroll nk:input-scroll input-string nk:input-string key-down? nk:key-down? +Builtin key-pressed? nk:key-pressed? key-released? nk:key-released? knob nk:knob label nk:label label-colored nk:label-colored +Builtin label-wrap nk:label-wrap label-wrap-colored nk:label-wrap-colored layout-bounds nk:layout-bounds +Builtin layout-grid-begin nk:layout-grid-begin layout-grid-end nk:layout-grid-end layout-push-dynamic nk:layout-push-dynamic +Builtin layout-push-static nk:layout-push-static layout-push-variable nk:layout-push-variable layout-ratio-from-pixel nk:layout-ratio-from-pixel Builtin layout-reset-row-height nk:layout-reset-row-height layout-row nk:layout-row layout-row-begin nk:layout-row-begin Builtin layout-row-dynamic nk:layout-row-dynamic layout-row-end nk:layout-row-end layout-row-height nk:layout-row-height Builtin layout-row-push nk:layout-row-push layout-row-static nk:layout-row-static layout-row-template-begin nk:layout-row-template-begin Builtin layout-row-template-end nk:layout-row-template-end layout-space-begin nk:layout-space-begin Builtin layout-space-end nk:layout-space-end layout-space-push nk:layout-space-push layout-widget-bounds nk:layout-widget-bounds Builtin line-rel nk:line-rel line-to nk:line-to list-begin nk:list-begin list-end nk:list-end list-new nk:list-new -Builtin list-ofs nk:list-ofs list-range nk:list-range m! nk:m! m@ nk:m@ make-style nk:make-style max-vertex-element nk:max-vertex-element -Builtin maximize nk:maximize measure nk:measure measure-font nk:measure-font menu-begin nk:menu-begin -Builtin menu-close nk:menu-close menu-end nk:menu-end menu-item-image nk:menu-item-image menu-item-label nk:menu-item-label -Builtin menu-item-symbol nk:menu-item-symbol menubar-begin nk:menubar-begin menubar-end nk:menubar-end -Builtin minimize nk:minimize mouse-pos nk:mouse-pos move-back nk:move-back move-rel nk:move-rel move-to nk:move-to -Builtin msg nk:msg msgdlg nk:msgdlg ontop nk:ontop option nk:option pen-color nk:pen-color pen-width nk:pen-width -Builtin pix! nk:pix! plot nk:plot plot-fn nk:plot-fn polygon nk:polygon pop-font nk:pop-font popup-begin nk:popup-begin -Builtin popup-close nk:popup-close popup-end nk:popup-end popup-scroll-ofs nk:popup-scroll-ofs popup-scroll-ofs! nk:popup-scroll-ofs! -Builtin progress nk:progress prop-int nk:prop-int pt-in? nk:pt-in? pt>local nk:pt>local pt>screen nk:pt>screen -Builtin push-font nk:push-font raise nk:raise rect-rel nk:rect-rel rect-to nk:rect-to rect>local nk:rect>local -Builtin rect>screen nk:rect>screen released? nk:released? render nk:render render! nk:render! render-loop nk:render-loop -Builtin render-loop-max nk:render-loop-max render-loop-timed nk:render-loop-timed render-timed nk:render-timed -Builtin render@ nk:render@ renderers nk:renderers rendering nk:rendering restore nk:restore rotate nk:rotate -Builtin rotate-rel nk:rotate-rel rtl! nk:rtl! rtl? nk:rtl? safe-bounds nk:safe-bounds save nk:save -Builtin scale nk:scale scale@ nk:scale@ scancode? nk:scancode? screen-saver nk:screen-saver screen-size nk:screen-size -Builtin screen-win-close nk:screen-win-close selectable nk:selectable set nk:set set-font nk:set-font -Builtin set-hint nk:set-hint set-num-vertices nk:set-num-vertices set-radius nk:set-radius setpos nk:setpos -Builtin setwin nk:setwin show nk:show skew nk:skew slider nk:slider slider-int nk:slider-int space nk:space -Builtin spacing nk:spacing start-text nk:start-text stroke-arc nk:stroke-arc stroke-circle nk:stroke-circle -Builtin stroke-curve nk:stroke-curve stroke-line nk:stroke-line stroke-polygon nk:stroke-polygon stroke-polyline nk:stroke-polyline -Builtin stroke-rect nk:stroke-rect stroke-tri nk:stroke-tri style-from-table nk:style-from-table swipe nk:swipe -Builtin swipe-dir-threshold nk:swipe-dir-threshold swipe-threshold nk:swipe-threshold text nk:text -Builtin text-align nk:text-align text-font nk:text-font text-pad nk:text-pad text? nk:text? timer-delay nk:timer-delay -Builtin timer? nk:timer? toast nk:toast tooltip nk:tooltip translate nk:translate tree-pop nk:tree-pop -Builtin tree-state-push nk:tree-state-push triangle nk:triangle use-style nk:use-style vsync nk:vsync -Builtin widget nk:widget widget-bounds nk:widget-bounds widget-disable nk:widget-disable widget-fitting nk:widget-fitting -Builtin widget-high nk:widget-high widget-hovered? nk:widget-hovered? widget-mouse-click-down? nk:widget-mouse-click-down? -Builtin widget-mouse-clicked? nk:widget-mouse-clicked? widget-pos nk:widget-pos widget-size nk:widget-size -Builtin widget-size-allot nk:widget-size-allot widget-wide nk:widget-wide win nk:win win-bounds nk:win-bounds -Builtin win-bounds! nk:win-bounds! win-close nk:win-close win-closed? nk:win-closed? win-collapse nk:win-collapse -Builtin win-collapsed? nk:win-collapsed? win-content-bounds nk:win-content-bounds win-focus nk:win-focus -Builtin win-focused? nk:win-focused? win-hidden? nk:win-hidden? win-high nk:win-high win-hovered? nk:win-hovered? -Builtin win-icon! nk:win-icon! win-pos nk:win-pos win-scroll-ofs nk:win-scroll-ofs win-scroll-ofs! nk:win-scroll-ofs! -Builtin win-show nk:win-show win-size nk:win-size win-title! nk:win-title! win-wide nk:win-wide win? nk:win? -Builtin MAX ns:MAX ! o:! + o:+ +? o:+? ??? o:??? @ o:@ class o:class exec o:exec isa o:isa method o:method -Builtin mutate o:mutate new o:new super o:super POSIX os:POSIX chroot os:chroot devname os:devname -Builtin docker? os:docker? env os:env lang os:lang locales os:locales notify os:notify power-state os:power-state -Builtin region os:region waitpid os:waitpid bezier pdf:bezier bezierq pdf:bezierq circle pdf:circle -Builtin color pdf:color ellipse pdf:ellipse font pdf:font img pdf:img line pdf:line new pdf:new page pdf:page -Builtin page-size pdf:page-size rect pdf:rect save pdf:save size pdf:size text pdf:text text-rotate pdf:text-rotate -Builtin text-size pdf:text-size text-width pdf:text-width text-wrap pdf:text-wrap text-wrap-rotate pdf:text-wrap-rotate -Builtin cast ptr:cast deref ptr:deref len ptr:len null? ptr:null? pack ptr:pack unpack ptr:unpack unpack_orig ptr:unpack_orig -Builtin publish pubsub:publish qsize pubsub:qsize subscribe pubsub:subscribe + q:+ clear q:clear len q:len -Builtin new q:new notify q:notify overwrite q:overwrite peek q:peek pick q:pick pop q:pop push q:push -Builtin remove q:remove shift q:shift size q:size slide q:slide throwing q:throwing wait q:wait ++match r:++match -Builtin +/ r:+/ +match r:+match / r:/ @ r:@ _@ r:_@ len r:len match r:match match[] r:match[] matchall[] r:matchall[] -Builtin new r:new rx r:rx str r:str * rat:* + rat:+ - rat:- / rat:/ >n rat:>n >s rat:>s new rat:new -Builtin proper rat:proper ! rect:! /high rect:/high /wide rect:/wide = rect:= >a rect:>a >pts rect:>pts -Builtin >pts4 rect:>pts4 @ rect:@ center rect:center center-pt rect:center-pt intersect rect:intersect -Builtin new rect:new new-pt rect:new-pt ofs rect:ofs open rect:open pad rect:pad pos rect:pos pt-open rect:pt-open -Builtin pt>a rect:pt>a pt>rect rect:pt>rect pts> rect:pts> restrict rect:restrict shrink rect:shrink -Builtin size rect:size union rect:union ! s:! * s:* + s:+ - s:- / s:/ /scripts s:/scripts /ws s:/ws -Builtin 2len s:2len <+ s:<+ <> s:<> = s:= =ic s:=ic >base64 s:>base64 >ucs2 s:>ucs2 @ s:@ _len s:_len -Builtin append s:append base64> s:base64> clear s:clear cmp s:cmp cmpi s:cmpi compress s:compress count-match s:count-match -Builtin days! s:days! dist s:dist each s:each each! s:each! eachline s:eachline escape s:escape expand s:expand -Builtin expand-env s:expand-env fill s:fill fold s:fold gen-uid s:gen-uid globmatch s:globmatch hexupr s:hexupr -Builtin insert s:insert intl s:intl intl! s:intl! lang s:lang lc s:lc lc? s:lc? len s:len lsub s:lsub -Builtin ltrim s:ltrim map s:map months! s:months! n> s:n> new s:new norm s:norm reduce s:reduce repinsert s:repinsert -Builtin replace s:replace replace! s:replace! rev s:rev rsearch s:rsearch rsub s:rsub rtl s:rtl rtrim s:rtrim -Builtin scan-match s:scan-match script? s:script? search s:search size s:size slice s:slice soundex s:soundex -Builtin strfmap s:strfmap strfmt s:strfmt term s:term text-wrap s:text-wrap tr s:tr transform s:transform -Builtin trim s:trim tsub s:tsub uc s:uc uc? s:uc? ucs2> s:ucs2> utf8? s:utf8? zt s:zt >a set:>a add set:add -Builtin add[] set:add[] del set:del difference set:difference has set:has intersect set:intersect new set:new -Builtin union set:union bits! sio:bits! bits@ sio:bits@ close sio:close enum sio:enum hz! sio:hz! hz@ sio:hz@ -Builtin mode! sio:mode! mode@ sio:mode@ open sio:open open sio:open opts! sio:opts! opts@ sio:opts@ -Builtin read sio:read read sio:read write sio:write write sio:write @ slv:@ auto slv:auto build slv:build -Builtin constraint slv:constraint dump slv:dump edit slv:edit named-variable slv:named-variable new slv:new -Builtin relation slv:relation reset slv:reset suggest slv:suggest term slv:term update slv:update v[] slv:v[] -Builtin variable slv:variable v{} slv:v{} new smtp:new send smtp:send apply-filter snd:apply-filter -Builtin devices? snd:devices? end-record snd:end-record filter snd:filter freq snd:freq gain snd:gain -Builtin gain? snd:gain? init snd:init len snd:len loop snd:loop loop? snd:loop? mix snd:mix new snd:new -Builtin pause snd:pause play snd:play played snd:played rate snd:rate ready? snd:ready? record snd:record -Builtin resume snd:resume seek snd:seek stop snd:stop stopall snd:stopall volume snd:volume volume? snd:volume? -Builtin + st:+ . st:. clear st:clear dot-depth st:dot-depth len st:len list st:list ndrop st:ndrop -Builtin new st:new op! st:op! peek st:peek pick st:pick pop st:pop push st:push roll st:roll shift st:shift -Builtin size st:size slide st:slide swap st:swap throwing st:throwing >buf struct:>buf arr> struct:arr> -Builtin buf struct:buf buf> struct:buf> byte struct:byte double struct:double field! struct:field! -Builtin field@ struct:field@ float struct:float ignore struct:ignore int struct:int long struct:long -Builtin struct; struct:struct; word struct:word ! t:! @ t:@ by-name t:by-name curtask t:curtask def-queue t:def-queue -Builtin def-stack t:def-stack done? t:done? dtor t:dtor err! t:err! err? t:err? errno? t:errno? extra t:extra -Builtin getq t:getq handler t:handler handler@ t:handler@ kill t:kill list t:list main t:main max-exceptions t:max-exceptions -Builtin name! t:name! name@ t:name@ notify t:notify parent t:parent pop t:pop priority t:priority push t:push -Builtin push! t:push! q-notify t:q-notify q-wait t:q-wait qlen t:qlen result t:result set-affinity t:set-affinity -Builtin setq t:setq task t:task task-n t:task-n task-stop t:task-stop ticks t:ticks to? t:to? wait t:wait -Builtin add tree:add binary tree:binary bk tree:bk btree tree:btree cmp! tree:cmp! data tree:data del tree:del -Builtin find tree:find iter tree:iter next tree:next nodes tree:nodes parent tree:parent parse tree:parse -Builtin prev tree:prev root tree:root search tree:search trie tree:trie ! w:! (is) w:(is) @ w:@ alias: w:alias: -Builtin cb w:cb deprecate w:deprecate dlcall w:dlcall dlopen w:dlopen dlsym w:dlsym exec w:exec exec? w:exec? -Builtin ffifail w:ffifail find w:find forget w:forget is w:is name w:name undo w:undo xt w:xt xt> w:xt> -Builtin close ws:close decode ws:decode encode ws:encode encode-nomask ws:encode-nomask gen-accept-header ws:gen-accept-header -Builtin gen-accept-key ws:gen-accept-key opcodes ws:opcodes open ws:open >s xml:>s >txt xml:>txt md-init xml:md-init -Builtin md-parse xml:md-parse parse xml:parse parse-html xml:parse-html parse-stream xml:parse-stream -Builtin getmsg[] zmq:getmsg[] sendmsg[] zmq:sendmsg[] +Builtin list-ofs nk:list-ofs list-range nk:list-range longpress nk:longpress m! nk:m! m@ nk:m@ make-style nk:make-style +Builtin max-vertex-element nk:max-vertex-element maximize nk:maximize measure nk:measure measure-font nk:measure-font +Builtin menu-begin nk:menu-begin menu-close nk:menu-close menu-end nk:menu-end menu-item-image nk:menu-item-image +Builtin menu-item-label nk:menu-item-label menu-item-symbol nk:menu-item-symbol menubar-begin nk:menubar-begin +Builtin menubar-end nk:menubar-end minimize nk:minimize mouse-moved? nk:mouse-moved? mouse-pos nk:mouse-pos +Builtin move-back nk:move-back move-rel nk:move-rel move-to nk:move-to msg nk:msg msgdlg nk:msgdlg +Builtin ontop nk:ontop option nk:option params! nk:params! pen-color nk:pen-color pen-width nk:pen-width +Builtin pinch nk:pinch pix! nk:pix! plot nk:plot plot-fn nk:plot-fn polygon nk:polygon pop-font nk:pop-font +Builtin popup-begin nk:popup-begin popup-close nk:popup-close popup-end nk:popup-end popup-scroll-ofs nk:popup-scroll-ofs +Builtin popup-scroll-ofs! nk:popup-scroll-ofs! progress nk:progress prop-float nk:prop-float prop-int nk:prop-int +Builtin pt-in? nk:pt-in? pt>local nk:pt>local pt>screen nk:pt>screen pump nk:pump push-font nk:push-font +Builtin raise nk:raise rect-rel nk:rect-rel rect-to nk:rect-to rect>local nk:rect>local rect>screen nk:rect>screen +Builtin released? nk:released? render nk:render render! nk:render! render-loop nk:render-loop render-loop-max nk:render-loop-max +Builtin render-loop-timed nk:render-loop-timed render-timed nk:render-timed render@ nk:render@ renderers nk:renderers +Builtin rendering nk:rendering restore nk:restore rotate nk:rotate rotate-rel nk:rotate-rel rtl! nk:rtl! +Builtin rtl? nk:rtl? safe-bounds nk:safe-bounds save nk:save scale nk:scale scale@ nk:scale@ scancode? nk:scancode? +Builtin screen-saver nk:screen-saver screen-size nk:screen-size screen-win-close nk:screen-win-close +Builtin selectable nk:selectable set nk:set set-font nk:set-font set-hint nk:set-hint set-num-vertices nk:set-num-vertices +Builtin set-radius nk:set-radius setpos nk:setpos setwin nk:setwin show nk:show skew nk:skew slider nk:slider +Builtin slider-int nk:slider-int space nk:space spacing nk:spacing start-text nk:start-text stroke-arc nk:stroke-arc +Builtin stroke-circle nk:stroke-circle stroke-curve nk:stroke-curve stroke-line nk:stroke-line stroke-polygon nk:stroke-polygon +Builtin stroke-polyline nk:stroke-polyline stroke-rect nk:stroke-rect stroke-tri nk:stroke-tri style-from-table nk:style-from-table +Builtin swipe nk:swipe text nk:text text-align nk:text-align text-font nk:text-font text-pad nk:text-pad +Builtin text? nk:text? timer-delay nk:timer-delay timer? nk:timer? toast nk:toast tooltip nk:tooltip +Builtin translate nk:translate tree-pop nk:tree-pop tree-state-push nk:tree-state-push triangle nk:triangle +Builtin use-style nk:use-style vsync nk:vsync widget nk:widget widget-bounds nk:widget-bounds widget-disable nk:widget-disable +Builtin widget-fitting nk:widget-fitting widget-high nk:widget-high widget-hovered? nk:widget-hovered? +Builtin widget-mouse-click-down? nk:widget-mouse-click-down? widget-mouse-clicked? nk:widget-mouse-clicked? +Builtin widget-pos nk:widget-pos widget-size nk:widget-size widget-size-allot nk:widget-size-allot +Builtin widget-wide nk:widget-wide win nk:win win-bounds nk:win-bounds win-bounds! nk:win-bounds! win-close nk:win-close +Builtin win-closed? nk:win-closed? win-collapse nk:win-collapse win-collapsed? nk:win-collapsed? win-content-bounds nk:win-content-bounds +Builtin win-focus nk:win-focus win-focused? nk:win-focused? win-hidden? nk:win-hidden? win-high nk:win-high +Builtin win-hovered? nk:win-hovered? win-icon! nk:win-icon! win-pos nk:win-pos win-scroll-ofs nk:win-scroll-ofs +Builtin win-scroll-ofs! nk:win-scroll-ofs! win-show nk:win-show win-size nk:win-size win-title! nk:win-title! +Builtin win-wide nk:win-wide win? nk:win? xchg nk:xchg MAX ns:MAX ! o:! + o:+ +? o:+? ??? o:??? @ o:@ +Builtin class o:class exec o:exec isa o:isa method o:method mutate o:mutate new o:new super o:super +Builtin POSIX os:POSIX chroot os:chroot devname os:devname docker? os:docker? env os:env lang os:lang +Builtin locales os:locales notify os:notify power-state os:power-state region os:region waitpid os:waitpid +Builtin bezier pdf:bezier bezierq pdf:bezierq circle pdf:circle color pdf:color ellipse pdf:ellipse +Builtin font pdf:font img pdf:img line pdf:line new pdf:new page pdf:page page-size pdf:page-size rect pdf:rect +Builtin save pdf:save size pdf:size text pdf:text text-rotate pdf:text-rotate text-size pdf:text-size +Builtin text-width pdf:text-width text-wrap pdf:text-wrap text-wrap-rotate pdf:text-wrap-rotate cast ptr:cast +Builtin deref ptr:deref len ptr:len null? ptr:null? pack ptr:pack unpack ptr:unpack unpack_orig ptr:unpack_orig +Builtin publish pubsub:publish qsize pubsub:qsize subscribe pubsub:subscribe + q:+ >a q:>a clear q:clear +Builtin len q:len new q:new notify q:notify overwrite q:overwrite peek q:peek pick q:pick pop q:pop +Builtin push q:push remove q:remove shift q:shift size q:size slide q:slide throwing q:throwing wait q:wait +Builtin ++match r:++match +/ r:+/ +match r:+match / r:/ @ r:@ _@ r:_@ len r:len match r:match match[] r:match[] +Builtin matchall[] r:matchall[] new r:new rx r:rx str r:str * rat:* + rat:+ - rat:- / rat:/ >n rat:>n +Builtin >s rat:>s new rat:new proper rat:proper ! rect:! /high rect:/high /wide rect:/wide = rect:= +Builtin >a rect:>a >pts rect:>pts >pts4 rect:>pts4 @ rect:@ center rect:center center-pt rect:center-pt +Builtin intersect rect:intersect new rect:new new-pt rect:new-pt ofs rect:ofs open rect:open pad rect:pad +Builtin pos rect:pos pt-open rect:pt-open pt>a rect:pt>a pt>rect rect:pt>rect pts> rect:pts> restrict rect:restrict +Builtin shrink rect:shrink size rect:size union rect:union ! s:! * s:* + s:+ - s:- / s:/ /scripts s:/scripts +Builtin /ws s:/ws 2len s:2len <+ s:<+ <> s:<> = s:= =ic s:=ic >base64 s:>base64 >ucs2 s:>ucs2 @ s:@ +Builtin _len s:_len append s:append base64> s:base64> clear s:clear cmp s:cmp cmpi s:cmpi compress s:compress +Builtin count-match s:count-match days! s:days! dist s:dist each s:each each! s:each! eachline s:eachline +Builtin escape s:escape expand s:expand expand-env s:expand-env fill s:fill fold s:fold gen-uid s:gen-uid +Builtin globmatch s:globmatch hexupr s:hexupr insert s:insert intl s:intl intl! s:intl! lang s:lang +Builtin lc s:lc lc? s:lc? len s:len lsub s:lsub ltrim s:ltrim map s:map months! s:months! n> s:n> new s:new +Builtin norm s:norm reduce s:reduce repinsert s:repinsert replace s:replace replace! s:replace! rev s:rev +Builtin rsearch s:rsearch rsub s:rsub rtl s:rtl rtrim s:rtrim scan-match s:scan-match script? s:script? +Builtin search s:search size s:size slice s:slice soundex s:soundex strfmap s:strfmap strfmt s:strfmt +Builtin term s:term text-wrap s:text-wrap tr s:tr transform s:transform trim s:trim tsub s:tsub uc s:uc +Builtin uc? s:uc? ucs2> s:ucs2> utf8? s:utf8? zt s:zt >a set:>a add set:add add[] set:add[] del set:del +Builtin difference set:difference has set:has intersect set:intersect new set:new union set:union bits! sio:bits! +Builtin bits@ sio:bits@ close sio:close enum sio:enum hz! sio:hz! hz@ sio:hz@ mode! sio:mode! mode@ sio:mode@ +Builtin open sio:open open sio:open opts! sio:opts! opts@ sio:opts@ read sio:read read sio:read write sio:write +Builtin write sio:write @ slv:@ auto slv:auto build slv:build constraint slv:constraint edit slv:edit +Builtin named-variable slv:named-variable new slv:new relation slv:relation reset slv:reset suggest slv:suggest +Builtin term slv:term update slv:update v[] slv:v[] variable slv:variable v{} slv:v{} new smtp:new +Builtin send smtp:send apply-filter snd:apply-filter devices? snd:devices? end-record snd:end-record +Builtin filter snd:filter freq snd:freq gain snd:gain gain? snd:gain? init snd:init len snd:len loop snd:loop +Builtin loop? snd:loop? mix snd:mix new snd:new pause snd:pause play snd:play played snd:played rate snd:rate +Builtin ready? snd:ready? record snd:record resume snd:resume seek snd:seek stop snd:stop stopall snd:stopall +Builtin volume snd:volume volume? snd:volume? + st:+ . st:. >a st:>a clear st:clear dot-depth st:dot-depth +Builtin len st:len list st:list ndrop st:ndrop new st:new op! st:op! peek st:peek pick st:pick pop st:pop +Builtin push st:push roll st:roll shift st:shift size st:size slide st:slide swap st:swap throwing st:throwing +Builtin >buf struct:>buf arr> struct:arr> buf struct:buf buf> struct:buf> byte struct:byte double struct:double +Builtin field! struct:field! field@ struct:field@ float struct:float ignore struct:ignore int struct:int +Builtin long struct:long struct; struct:struct; word struct:word ! t:! @ t:@ by-name t:by-name curtask t:curtask +Builtin def-queue t:def-queue def-stack t:def-stack done? t:done? dtor t:dtor err! t:err! err? t:err? +Builtin errno? t:errno? extra t:extra getq t:getq handler t:handler handler@ t:handler@ kill t:kill +Builtin list t:list main t:main max-exceptions t:max-exceptions name! t:name! name@ t:name@ notify t:notify +Builtin parent t:parent pop t:pop priority t:priority push t:push push! t:push! q-notify t:q-notify +Builtin q-wait t:q-wait qlen t:qlen result t:result set-affinity t:set-affinity setq t:setq task t:task +Builtin task-n t:task-n task-stop t:task-stop ticks t:ticks to? t:to? wait t:wait add tree:add binary tree:binary +Builtin bk tree:bk btree tree:btree cmp! tree:cmp! data tree:data del tree:del find tree:find iter tree:iter +Builtin next tree:next nodes tree:nodes parent tree:parent parse tree:parse prev tree:prev root tree:root +Builtin search tree:search trie tree:trie ! w:! (is) w:(is) @ w:@ alias: w:alias: cb w:cb deprecate w:deprecate +Builtin dlcall w:dlcall dlopen w:dlopen dlsym w:dlsym exec w:exec exec? w:exec? ffifail w:ffifail find w:find +Builtin forget w:forget is w:is name w:name undo w:undo xt w:xt xt> w:xt> close ws:close decode ws:decode +Builtin encode ws:encode encode-nomask ws:encode-nomask gen-accept-header ws:gen-accept-header gen-accept-key ws:gen-accept-key +Builtin opcodes ws:opcodes open ws:open >s xml:>s >txt xml:>txt md-init xml:md-init md-parse xml:md-parse +Builtin parse xml:parse parse-html xml:parse-html parse-stream xml:parse-stream getmsg[] zmq:getmsg[] +Builtin sendmsg[] zmq:sendmsg[] " numbers diff --git a/runtime/syntax/Makefile b/runtime/syntax/Makefile index c18369a0bf..d0f71270ac 100644 --- a/runtime/syntax/Makefile +++ b/runtime/syntax/Makefile @@ -13,7 +13,7 @@ VIMRUNTIME = ../.. # Uncomment this line to use valgrind for memory leaks and extra warnings. # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=45 --log-file=valgrind.$* -# Trace liveness on demand. +# Trace ruler liveness on demand. # VIM_SYNTAX_TEST_LOG = `pwd`/testdir/failed/00-TRACE_LOG # ENVVARS = LC_ALL=C VIM_SYNTAX_TEST_LOG="$(VIM_SYNTAX_TEST_LOG)" @@ -27,7 +27,7 @@ RUN_VIMTEST = VIMRUNTIME=$(VIMRUNTIME) $(VALGRIND) $(ENVVARS) ../$(VIMPROG) -f $ # DEBUGLOG = --log testlog # All initial phony targets; these names may clash with file types. -phonies = clean test testclean +phonies = clean executables test testclean .PHONY: $(phonies) # Run the tests that didn't run yet or failed previously. @@ -39,7 +39,7 @@ test: @# the "vimcmd" file is used by the screendump utils @echo "../$(VIMPROG)" > testdir/vimcmd @echo "$(RUN_VIMTEST)" >> testdir/vimcmd - @# Trace liveness on demand. + @# Trace ruler liveness on demand. @#mkdir -p testdir/failed @#touch "$(VIM_SYNTAX_TEST_LOG)" VIMRUNTIME=$(VIMRUNTIME) $(ENVVARS) $(VIMPROG) --clean --not-a-term $(DEBUGLOG) -u testdir/runtest.vim > /dev/null @@ -53,6 +53,9 @@ testdir/testdeps.mk: -include testdir/testdeps.mk +executables: + @! find testdir/input -type f -perm /a+x -exec echo Executable syntax test found: \{\} \; | grep : + clean testclean: rm -f testdir/failed/* testdir/done/* testdir/vimcmd testdir/messages testdir/Xtestscript testdir/Xfilter testdir/testdeps.mk diff --git a/runtime/syntax/algol68.vim b/runtime/syntax/algol68.vim new file mode 100644 index 0000000000..41b9797c51 --- /dev/null +++ b/runtime/syntax/algol68.vim @@ -0,0 +1,517 @@ +" Vim syntax file +" Language: Algol 68 +" Version: 0.4 +" Maintainer: Janis Papanagnou +" Previous Maintainer: NevilleD.ALGOL_68@sgr-a.net +" Last Change: 2026 Jun 13 + +if exists("b:current_syntax") + finish +endif + +syn sync minlines=250 maxlines=500 + +" Algol68 Final Report, unrevised +syn keyword algol68PreProc PRIORITY +syn keyword algol68Operator BTB CTB CONJ QUOTE CT CTAB EITHER SIGN + + +" Algol68 Revised Report +syn keyword algol68Boolean TRUE FALSE +syn keyword algol68Conditional IF THEN ELSE ELIF FI +syn keyword algol68Conditional CASE IN OUT OUSE ESAC +syn keyword algol68Constant NIL SKIP EMPTY +syn keyword algol68Statement MODE PROC +syn keyword algol68Statement OP PRIO skipwhite nextgroup=algol68DefiningOperator +syn keyword algol68Label GOTO +syn match algol68Label "\" +syn keyword algol68Operator ABS REPR ROUND ENTIER ARG BIN LENG SHORTEN ODD +syn keyword algol68Operator SHL SHR ROL ROR UP DOWN LEVEL LWB UPB I RE IM +syn keyword algol68Operator OVER MOD ELEM SET CLEAR +syn keyword algol68Operator LT LE GE GT +syn keyword algol68Operator EQ NE +syn keyword algol68Operator AND OR XOR NOT +" Genie short-circuit pseudo operators +syn keyword algol68Operator THEF ANDF ANDTH ELSF ORF OREL +syn keyword algol68Operator ANDTHEN ORELSE +syn keyword algol68Operator MINUSAB PLUSAB TIMESAB DIVAB OVERAB MODAB PLUSTO +syn keyword algol68Operator IS ISNT OF AT +syn keyword algol68Operator SORT ELEMS +syn keyword algol68Repeat FOR FROM BY UPTO DOWNTO TO WHILE DO UNTIL OD +syn keyword algol68Statement PAR BEGIN END EXIT +syn keyword algol68Struct STRUCT +syn keyword algol68PreProc VECTOR +syn match algol68Type "\<\%(LONG\|SHORT\)\>" +syn keyword algol68Type FLEX HEAP LOC REF +syn keyword algol68Type VOID BOOL INT REAL COMPL CHAR STRING COMPLEX +syn keyword algol68Type BITS BYTES FILE CHANNEL PIPE SEMA SOUND +syn keyword algol68Type FORMAT STRUCT UNION +" Genie extensions in addition to ROUND and ENTIER +syn keyword algol68Operator FLOOR CEIL NINT TRUNC FRAC FIX + + " 20011222az: Added new items. +syn keyword algol68Todo contained TODO FIXME XXX DEBUG NOTE + + +" String +syn region algol68String matchgroup=algol68String start=+"+ end=+"+ contains=algol68StringEscape +syn match algol68StringEscape contained '""' +syn match algol68StringEscape contained "\\$" + + +syn match algol68Identifier "\<[a-z][a-z0-9_]*\>" + + +" NOTE: monads = `[!%&+\-?^~]`, nomads = `[*/<=>]`, becomes = `:=`, assigns to = `=:` +" monadic operator => "[!%&+\-?^~][*/<=>]\?\%(:=\|=:\)\?" +" dyadic operator => "\%([!%&+\-?^~]\|[*/<=>]\)[*/<=>]\?\%(:=\|=:\)\?" + +" 'becomes' and 'is defined as' symbols +" syn match algol68SymbolOperator ":=\|=" +syn match algol68SymbolOperator "\%([!%&+\-?^~]\|[*/<=>]\)\@1]\|:\)\@1]\|:=\|=:\)\@!" + +" NOT, AND +" syn match algol68SymbolOperator "[~&]" +syn match algol68SymbolOperator "[~&]\%([*/<=>]\|:=\|=:\)\@!" + +" NOT (Genie extension) +" syn match algol68SymbolOperator "\^" +syn match algol68SymbolOperator "\^\%([*/<=>]\|:=\|=:\)\@!" + +" NE, EQ +" syn match algol68SymbolOperator "/=\|=" +syn match algol68SymbolOperator "/=\%(:=\|=:\|:\)\@!" +syn match algol68SymbolOperator "\%([!%&+\-?^~]\|[*/<=>]\|:\)\@1]\|:=\|=:\)\@!" + +" NE (Genie extension) +" syn match algol68SymbolOperator "[~^]=" +syn match algol68SymbolOperator "[~^]=\%([*/<=>]\|:=\|=:\)\@!" + +" LT, GT, LE, GE +" syn match algol68SymbolOperator "[<>]=\?" +syn match algol68SymbolOperator "\%([!%&+\-?^~]\|[*/<=>]\)\@1]\%([*/<=>]\|:=\|=:\)\@!" +syn match algol68SymbolOperator "\%([!%&+\-?^~]\|[*/<=>]\)\@1]=\%([*/<=>]\|:=\|=:\|:\)\@!" + +" -, +, *, OVER, /, MOD, UP +" syn match algol68SymbolOperator "[-+*%/]\|%\*\|\*\*" +syn match algol68SymbolOperator "[-+%]\%([*/<=>]\|:=\|=:\)\@!" +syn match algol68SymbolOperator "\%([!%&+\-?^~]\|[*/<=>]\)\@1]\|:=\|=:\)\@!" +syn match algol68SymbolOperator "\%(%\*\|\*\*\)\%(:=\|=:\)\@!" + +" syn match algol68SymbolOperator "%\*\|\*\*" +syn match algol68SymbolOperator "\%(%\*\|\*\*\)\%(:=\|=:\)\@!" + +" {MINUS,PLUS,TIMES,OVER,DIV,MOD}AB +" syn match algol68SymbolOperator "\%([-+*%/]\|%\*\):=" +syn match algol68SymbolOperator "\%([-+%]\|%\*\):=" +syn match algol68SymbolOperator "\%([!%&+\-?^~]\|[*/<=>]\)\@1]\|:=\|=:\)\@!" + +" IS, ISNT +syn match algol68SymbolOperator ":/\?=:" + +syn match algol68DefiningOperator "\u[A-Z0-9]" contained +syn match algol68DefiningOperator "[!%&+\-?^~][*/<=>]\?\%(:=\|=:\)\?" contained +syn match algol68DefiningOperator "\%([!%&+\-?^~]\|[*/<=>]\)[*/<=>]\?\%(:=\|=:\)\?" contained + +syn match algol68Number "\<\%(\%(LONG\s\+\)\+\|\%(SHORT\s\+\)\+\)\=\d\+\%(\s\+\d\+\)*\>" + +syn match algol68Float "\%(\%(LONG\s\+\)*\|\%(SHORT\s\+\)*\)\=\.\d\+\%(\s\+\d\+\)*\%(\s*[eE\\â¨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\?\>" +syn match algol68Float "\<\%(\%(LONG\s\+\)*\|\%(SHORT\s\+\)*\)\=\d\+\%(\s\+\d\+\)*\%(\s*[eE\\â¨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\>" +syn match algol68Float "\<\%(\%(LONG\s\+\)*\|\%(SHORT\s\+\)*\)\=\d\+\%(\s\+\d\+\)*\s*\.\s*\d\+\%(\s\+\d\+\)*\%(\s*[eE\\â¨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\?\>" + +syn match algol68HexNumber "\<\%(\%(LONG\s\+\)*\|\%(SHORT\s\+\)*\)\=2[rR]\s*[01]\+\%(\s\+[01]\+\)*\>" +syn match algol68HexNumber "\<\%(\%(LONG\s\+\)*\|\%(SHORT\s\+\)*\)\=4[rR]\s*[0-3]\+\%(\s\+[0-3]\+\)*\>" +syn match algol68HexNumber "\<\%(\%(LONG\s\+\)*\|\%(SHORT\s\+\)*\)\=8[rR]\s*[0-7]\+\%(\s\+[0-7]\+\)*\>" +syn match algol68HexNumber "\<\%(\%(LONG\s\+\)*\|\%(SHORT\s\+\)*\)\=16[rR]\s*[0-9a-f]\+\%(\s\+[0-9a-f]\+\)*\>" + + +syn region algol68Special start="\$" end="\$" contains=algol68String +syn region algol68Comment start="¢" end="¢" contains=algol68Todo,algol68SpaceError +syn region algol68Comment start="£" end="£" contains=algol68Todo,algol68SpaceError +syn region algol68Comment start="#" end="#" contains=algol68Todo,algol68SpaceError +syn region algol68Comment start="\" end="\" contains=algol68Todo,algol68SpaceError +syn region algol68Comment start="\" end="\" contains=algol68Todo,algol68SpaceError +syn region algol68PreProc start="\" end="\" contains=algol68Todo,algol68SpaceError +syn region algol68PreProc start="\" end="\" contains=algol68Todo,algol68SpaceError +" algol68r +syn region algol68Comment start="{" end="}" contains=algol68Todo,algol68SpaceError +syn region algol68Comment start="{{{" end="}}}" contains=algol68Todo,algol68SpaceError + +" ALGOL 68r +syn keyword algol68PreProc DECS CONTEXT configinfo A68CONFIG KEEP FINISH USE SYSPROCS IOSTATE FORALL +" ALGOL 68c +syn keyword algol68PreProc USING ENVIRON FOREACH ASSERT + +if !exists("algol68_no_preludes") + + +" THE STANDARD ENVIRONMENT + +" Enquiries + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Transput Files and Channels + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Transput Event Routines + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Connections to Files + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Positioning on Files + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" I/O on Files (Standard) + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" I/O on Files (Algol68C) + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Enquiries on Files + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Keyboard Control + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Math Constants + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Math Basic Functions + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!\%(\s\{1,7}[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Math Trigonometric Functions + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + " long-long-sinpi/cospi/tanpi/cotpi + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + " a special case in Genie? + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Random Number Generator + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Garbage Collection and Memory + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" I/O on Strings + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" +" Character Type Tests + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" +" Operations on Characters + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" +" Search in Strings + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Time and Date + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Type Operations + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!\%(\s*[a-z0-9]\)\@!" + +" Runtime + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + +" UNIX EXTENSIONS + +" Environment Functions + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Processes + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" File types and attributes + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Fetching web page contents and sending requests + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Regular expressions in string manipulation + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Curses support + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + +" POSTGRESQL CLIENT ROUTINES + +" Connecting to a server + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Sending queries and retrieving results + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Connection status information + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + +" SOUND + + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn keyword algol68Operator RESOLUTION CHANNELS RATE SAMPLES + + +" DRAWING USING THE GNU PLOTTING UTILITIES + +" Setting up a graphics device + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Specifying colours + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Drawing objects + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Drawing text + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + +" EXTRA NUMERICAL PROCEDURES + +" COMPLEX Functions + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + " cas casin casinh dcas dcasin dcasinh qcas qcasin qcasinh longcas longlongcas + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + " a special case in Genie? + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" REAL Airy Functions + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" REAL Bessel Functions + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + " only a few could be sensibly merged; we keep them apart + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" REAL Elliptic Integrals + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" REAL Error and Gamma Functions + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + " is the following a special case in Genie? + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "gamma\s*\%(\%(inc\s*\%(gsl\|[pq]\)\)\|inv\|star\)\>\%(\s*\%([a-z_]\|\l\d\+\)\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + + +" Scaling Factors + + " strangely missing some common factors (hecto, deca, deci, centi), + " also myria, and the more extreme factors (quetta, ronna, ronto, quecto) + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + +" Physical Constants + +" Fundamental Constants + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Astronomy and Astrophysics + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Atomic and Nuclear Physics + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Time + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Imperial units + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Nautical units + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Volume + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Mass and weight + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Thermal energy and power + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Pressure + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Viscosity + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Light and illumination + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Radioactivity + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + +" Force and energy + syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + +" Functions from GSL + + syn keyword algol68Operator CV RV T INV PINV MEAN DET TRACE NORM DYAD BEFORE ABOVE + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + +" Functions from R Mathlib + + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + " note: Genie documents 'r rn chisq' but it's missing in the code? + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8\%(\s*[a-z0-9]\)\@!" + + +endif + +" Define the default highlighting. +hi def link algol68Boolean Boolean +hi def link algol68Comment Comment +hi def link algol68Conditional Conditional +hi def link algol68Constant Constant +hi def link algol68Float Float +hi def link algol68Function Function +hi def link algol68Label Label +hi def link algol68MatrixDelimiter Identifier +hi def link algol68HexNumber Number +hi def link algol68Number Number +hi def link algol68Operator Operator +hi def link algol68Predefined Identifier +hi def link algol68PreProc PreProc +hi def link algol68Repeat Repeat +hi def link algol68SpaceError Error +hi def link algol68Statement Statement +hi def link algol68String String +hi def link algol68StringEscape Special +hi def link algol68Struct algol68Statement +hi def link algol68SymbolOperator algol68Operator +hi def link algol68Todo Todo +hi def link algol68Type Type +hi def link algol68ShowTab Error + +let b:current_syntax = "algol68" + +" vim: ts=8 sw=2 diff --git a/runtime/syntax/amiga.vim b/runtime/syntax/amiga.vim index 9402196482..858c1a430e 100644 --- a/runtime/syntax/amiga.vim +++ b/runtime/syntax/amiga.vim @@ -1,89 +1,303 @@ " Vim syntax file -" Language: AmigaDos -" Maintainer: This runtime file is looking for a new maintainer. -" Former Maintainer: Charles E. Campbell -" Last Change: Aug 31, 2016 -" Version: 10 -" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_AMIGA - -" quit when a syntax file was already loaded +" Language: AmigaDOS +" Maintainer: Ola Söder +" First Author: Charles E. Campbell +" Last Change: 2026 Mar 25 +" Version: 11 + if exists("b:current_syntax") - finish + finish endif syn case ignore -" Amiga Devices -syn match amiDev "\(par\|ser\|prt\|con\|nil\):" - -" Amiga aliases and paths -syn match amiAlias "\<[a-zA-Z][a-zA-Z0-9]\+:" -syn match amiAlias "\<[a-zA-Z][a-zA-Z0-9]\+:[a-zA-Z0-9/]*/" - -" strings -syn region amiString start=+"+ end=+"+ oneline contains=@Spell - -" numbers -syn match amiNumber "\<\d\+\>" - -" Logic flow -syn region amiFlow matchgroup=Statement start="if" matchgroup=Statement end="endif" contains=ALL -syn keyword amiFlow skip endskip -syn match amiError "else\|endif" -syn keyword amiElse contained else - -syn keyword amiTest contained not warn error fail eq gt ge val exists - -" echo exception -syn region amiEcho matchgroup=Statement start="\" end="$" oneline contains=amiComment -syn region amiEcho matchgroup=Statement start="^\.[bB][rR][aA]" end="$" oneline -syn region amiEcho matchgroup=Statement start="^\.[kK][eE][tT]" end="$" oneline - -" commands -syn keyword amiKey addbuffers copy fault join pointer setdate -syn keyword amiKey addmonitor cpu filenote keyshow printer setenv -syn keyword amiKey alias date fixfonts lab printergfx setfont -syn keyword amiKey ask delete fkey list printfiles setmap -syn keyword amiKey assign dir font loadwb prompt setpatch -syn keyword amiKey autopoint diskchange format lock protect sort -syn keyword amiKey avail diskcopy get magtape quit stack -syn keyword amiKey binddrivers diskdoctor getenv makedir relabel status -syn keyword amiKey bindmonitor display graphicdump makelink remrad time -syn keyword amiKey blanker iconedit more rename type -syn keyword amiKey break ed icontrol mount resident unalias -syn keyword amiKey calculator edit iconx newcli run unset -syn keyword amiKey cd endcli ihelp newshell say unsetenv -syn keyword amiKey changetaskpri endshell info nocapslock screenmode version -syn keyword amiKey clock eval initprinter nofastmem search wait -syn keyword amiKey cmd exchange input overscan serial wbpattern -syn keyword amiKey colors execute install palette set which -syn keyword amiKey conclip failat iprefs path setclock why - -" comments -syn cluster amiCommentGroup contains=amiTodo,@Spell -syn case ignore -syn keyword amiTodo contained todo -syn case match -syn match amiComment ";.*$" contains=amiCommentGroup +" Directives +syn match amiDirective "^\.\(key\|k\)\>.*$" contains=amiTemplate +syn match amiDirective "^\.\(bra\|ket\|dot\|dollar\|dol\|def\|default\)\>.*$" -" sync -syn sync lines=50 +" Template arguments +syn match amiTemplate contained "/[AKSNMF]\>" -" Define the default highlighting. -if !exists("skip_amiga_syntax_inits") +" Strings +syn region amiString start=+"+ end=+"+ oneline contains=amiEscape,amiVar,amiSubst,@Spell + +" Escape sequences +syn match amiEscape contained "\*[nNeE"*]" + +" Numbers +syn match amiNumber "\<\d\+\>" + +" Variables +syn match amiVar "\$[a-zA-Z_][a-zA-Z0-9_]*" +syn match amiVar "\$\$" + +" Parameters +syn region amiSubst start="<\a" end=">" oneline contains=amiVar +syn match amiSubst "<\$\$>" + +" Devices / assigns / paths +syn match amiPath "\<[a-zA-Z][a-zA-Z0-9]*:[^ \t]*" + +" Redirection +syn match amiOperator ">>" +syn match amiOperator "[<>|]" - hi def link amiAlias Type - hi def link amiComment Comment - hi def link amiDev Type - hi def link amiEcho String - hi def link amiElse Statement - hi def link amiError Error - hi def link amiKey Statement - hi def link amiNumber Number - hi def link amiString String - hi def link amiTest Special +" Control flow +syn region amiIfBlock matchgroup=amiConditional start="\" matchgroup=amiConditional end="\" contains=ALLBUT,amiIfError +syn keyword amiIfError ELSE ENDIF +syn keyword amiElse contained ELSE +syn keyword amiConditional SKIP ENDSKIP +syn keyword amiLabel LAB +syn keyword amiRepeat FOREACH +" Conditions +syn keyword amiCondition contained NOT WARN ERROR FAIL EQ GT GE VAL EXISTS + +" Echo +syn region amiEcho matchgroup=amiCommand start="\" end="$" oneline contains=amiComment,amiVar,amiSubst,amiBacktick,amiEscape + +" Commands +syn keyword amiCommand ADDAUDIOMODES +syn keyword amiCommand ADDBUFFERS +syn keyword amiCommand ADDDATATYPES +syn keyword amiCommand ADDMONITOR +syn keyword amiCommand ADDNETINTERFACE +syn keyword amiCommand ADDNETROUTE +syn keyword amiCommand ALIAS +syn keyword amiCommand APPLISTINFO +syn keyword amiCommand ARP +syn keyword amiCommand ASK +syn keyword amiCommand ASSIGN +syn keyword amiCommand AVAIL +syn keyword amiCommand BINDDRIVERS +syn keyword amiCommand BINDMONITOR +syn keyword amiCommand BREAK +syn keyword amiCommand BUILDMAPTABLE +syn keyword amiCommand CACHESTAT +syn keyword amiCommand CD +syn keyword amiCommand CHANGETASKPRI +syn keyword amiCommand CHARSETCONVERT +syn keyword amiCommand CLIP +syn keyword amiCommand CLOCK +syn keyword amiCommand CMD +syn keyword amiCommand CONCLIP +syn keyword amiCommand CONFIGURENETINTERFACE +syn keyword amiCommand COPY +syn keyword amiCommand COUNTLINES +syn keyword amiCommand CPU +syn keyword amiCommand CROSSDOS +syn keyword amiCommand CUT +syn keyword amiCommand DATE +syn keyword amiCommand DELETE +syn keyword amiCommand DELETENETROUTE +syn keyword amiCommand DIR +syn keyword amiCommand DISKCHANGE +syn keyword amiCommand DISKCOPY +syn keyword amiCommand DISKDOCTOR +syn keyword amiCommand DISMOUNT +syn keyword amiCommand ENDCLI +syn keyword amiCommand ENDSHELL +syn keyword amiCommand EVAL +syn keyword amiCommand EXECUTE +syn keyword amiCommand FAILAT +syn keyword amiCommand FAULT +syn keyword amiCommand FDTOOL +syn keyword amiCommand FILENOTE +syn keyword amiCommand FILESIZE +syn keyword amiCommand FORMAT +syn keyword amiCommand GET +syn keyword amiCommand GETENV +syn keyword amiCommand GETNETSTATUS +syn keyword amiCommand GROUP +syn keyword amiCommand HELP +syn keyword amiCommand HI +syn keyword amiCommand HISTORY +syn keyword amiCommand IHELP +syn keyword amiCommand INFO +syn keyword amiCommand INITPRINTER +syn keyword amiCommand INPUT +syn keyword amiCommand INSTALL +syn keyword amiCommand INTELLIFONT +syn keyword amiCommand IPMON +syn keyword amiCommand IPNAT +syn keyword amiCommand JOIN +syn keyword amiCommand KDEBUG +syn keyword amiCommand LAB +syn keyword amiCommand LIST +syn keyword amiCommand LOADMONDRVS +syn keyword amiCommand LOADRESOURCE +syn keyword amiCommand LOADWB +syn keyword amiCommand LOCALE +syn keyword amiCommand LOCK +syn keyword amiCommand MAKEDIR +syn keyword amiCommand MAKELINK +syn keyword amiCommand MEMSTAT +syn keyword amiCommand MORE +syn keyword amiCommand MOUNT +syn keyword amiCommand MOUNTINFO +syn keyword amiCommand MOVE +syn keyword amiCommand NETLOGVIEWER +syn keyword amiCommand NETSHUTDOWN +syn keyword amiCommand NEWCLI +syn keyword amiCommand NEWSHELL +syn keyword amiCommand OWNER +syn keyword amiCommand PATH +syn keyword amiCommand PATHPART +syn keyword amiCommand PIPE +syn keyword amiCommand POINTER +syn keyword amiCommand POOLSTAT +syn keyword amiCommand POPCD +syn keyword amiCommand PREPCARD +syn keyword amiCommand PROMPT +syn keyword amiCommand PROTECT +syn keyword amiCommand PUSHCD +syn keyword amiCommand QUIT +syn keyword amiCommand REBOOT +syn keyword amiCommand RELABEL +syn keyword amiCommand RELOADAPPLIST +syn keyword amiCommand REMOVENETINTERFACE +syn keyword amiCommand REMRAD +syn keyword amiCommand RENAME +syn keyword amiCommand REQUESTCHOICE +syn keyword amiCommand REQUESTFILE +syn keyword amiCommand REQUESTSTRING +syn keyword amiCommand RESIDENT +syn keyword amiCommand ROADSHOWCONTROL +syn keyword amiCommand RUN +syn keyword amiCommand RX +syn keyword amiCommand RXC +syn keyword amiCommand RXLIB +syn keyword amiCommand RXSET +syn keyword amiCommand SAY +syn keyword amiCommand SEARCH +syn keyword amiCommand SET +syn keyword amiCommand SETCLOCK +syn keyword amiCommand SETDATE +syn keyword amiCommand SETDOSDEBUG +syn keyword amiCommand SETENV +syn keyword amiCommand SETFONT +syn keyword amiCommand SETFONTCHARSET +syn keyword amiCommand SETKEYBOARD +syn keyword amiCommand SETMAP +syn keyword amiCommand SETPATCH +syn keyword amiCommand SHOW68LOADS +syn keyword amiCommand SHOWAPPLIST +syn keyword amiCommand SHOWNETSTATUS +syn keyword amiCommand SMARTCTL +syn keyword amiCommand SORT +syn keyword amiCommand SOUNDPLAYER +syn keyword amiCommand STACK +syn keyword amiCommand STATUS +syn keyword amiCommand SWAPCD +syn keyword amiCommand TYPE +syn keyword amiCommand UNALIAS +syn keyword amiCommand UNSET +syn keyword amiCommand UNSETENV +syn keyword amiCommand UPTIME +syn keyword amiCommand URLOPEN +syn keyword amiCommand VERSION +syn keyword amiCommand WAIT +syn keyword amiCommand WAITFORPORT +syn keyword amiCommand WBRUN +syn keyword amiCommand WBSTARTUPCTRL +syn keyword amiCommand WHICH +syn keyword amiCommand WHY + +" Options +syn keyword amiOption ADD +syn keyword amiOption ALL +syn keyword amiOption APPEND +syn keyword amiOption BACK +syn keyword amiOption BODY +syn keyword amiOption BUF +syn keyword amiOption BUFFER +syn keyword amiOption CASE +syn keyword amiOption CHARSET +syn keyword amiOption CHECK +syn keyword amiOption CLEAR +syn keyword amiOption CLONE +syn keyword amiOption COPYLINKS +syn keyword amiOption DATES +syn keyword amiOption DEBUG +syn keyword amiOption DEVICE +syn keyword amiOption DIRS +syn keyword amiOption DRIVE +syn keyword amiOption FILE +syn keyword amiOption FILES +syn keyword amiOption FOLLOWLINKS +syn keyword amiOption FORCE +syn keyword amiOption FROM +syn keyword amiOption FULL +syn keyword amiOption HARD +syn keyword amiOption INTERACTIVE +syn keyword amiOption LFORMAT +syn keyword amiOption LOAD +syn keyword amiOption LOCK +syn keyword amiOption MULTI +syn keyword amiOption NAME +syn keyword amiOption NEGATIVE +syn keyword amiOption NOHEAD +syn keyword amiOption NONUM +syn keyword amiOption NOREPLACE +syn keyword amiOption NOREQ +syn keyword amiOption NUMERIC +syn keyword amiOption OFF +syn keyword amiOption ON +syn keyword amiOption PATTERN +syn keyword amiOption POSITIVE +syn keyword amiOption PREPEND +syn keyword amiOption PUBSCREEN +syn keyword amiOption QUICK +syn keyword amiOption QUIET +syn keyword amiOption REMOVE +syn keyword amiOption REPLACE +syn keyword amiOption RESET +syn keyword amiOption SAVE +syn keyword amiOption SHOW +syn keyword amiOption SINCE +syn keyword amiOption SOFT +syn keyword amiOption SORT +syn keyword amiOption SUB +syn keyword amiOption TIMEOUT +syn keyword amiOption TITLE +syn keyword amiOption TO +syn keyword amiOption UNLOCK +syn keyword amiOption UPTO +syn keyword amiOption VERBOSE +syn keyword amiOption WITH + +" Comments +syn match amiComment ";.*$" contains=amiTodo,@Spell +syn match amiComment "^\.\s.*$" contains=amiTodo,@Spell +syn match amiComment "^\.$" + +" Miscellaneous +syn keyword amiTodo contained TODO FIXME XXX NOTE +syn region amiBacktick start="`" end="`" oneline + +" Define the default highlighting. +if !exists("skip_amiga_syntax_inits") + hi def link amiBacktick Special + hi def link amiCommand Statement + hi def link amiComment Comment + hi def link amiCondition Special + hi def link amiConditional Conditional + hi def link amiDirective PreProc + hi def link amiEcho String + hi def link amiElse Conditional + hi def link amiEscape SpecialChar + hi def link amiIfError Error + hi def link amiLabel Label + hi def link amiNumber Number + hi def link amiOperator Operator + hi def link amiOption Identifier + hi def link amiPath Type + hi def link amiRepeat Repeat + hi def link amiString String + hi def link amiSubst Special + hi def link amiTemplate Type + hi def link amiTodo Todo + hi def link amiVar Special endif -let b:current_syntax = "amiga" -" vim:ts=15 +let b:current_syntax = "amiga" diff --git a/runtime/syntax/apache.vim b/runtime/syntax/apache.vim index 65317fd36a..edc650e9df 100644 --- a/runtime/syntax/apache.vim +++ b/runtime/syntax/apache.vim @@ -4,6 +4,7 @@ " License: This file can be redistribued and/or modified under the same terms " as Vim itself. " Last Change: 2024 Nov 24 +" 2026 Feb 19 by Vim project: Add SSLVHostSNIPolicy " Notes: Last synced with apache-2.4.62, version 1.x is no longer supported " TODO: see particular FIXME's scattered through the file " make it really linewise? @@ -163,7 +164,7 @@ syn keyword apacheOption inherit syn keyword apacheDeclaration BrowserMatch BrowserMatchNoCase SetEnvIf SetEnvIfNoCase syn keyword apacheDeclaration LoadFile LoadModule syn keyword apacheDeclaration CheckSpelling CheckCaseOnly -syn keyword apacheDeclaration SSLCACertificateFile SSLCACertificatePath SSLCADNRequestFile SSLCADNRequestPath SSLCARevocationFile SSLCARevocationPath SSLCertificateChainFile SSLCertificateFile SSLCertificateKeyFile SSLCipherSuite SSLCompression SSLCryptoDevice SSLEngine SSLFIPS SSLHonorCipherOrder SSLInsecureRenegotiation SSLMutex SSLOptions SSLPassPhraseDialog SSLProtocol SSLProxyCACertificateFile SSLProxyCACertificatePath SSLProxyCARevocationFile SSLProxyCARevocationPath SSLProxyCheckPeerCN SSLProxyCheckPeerExpire SSLProxyCipherSuite SSLProxyEngine SSLProxyMachineCertificateChainFile SSLProxyMachineCertificateFile SSLProxyMachineCertificatePath SSLProxyProtocol SSLProxyVerify SSLProxyVerifyDepth SSLRandomSeed SSLRenegBufferSize SSLRequire SSLRequireSSL SSLSessionCache SSLSessionCacheTimeout SSLSessionTicketKeyFile SSLSessionTickets SSLStrictSNIVHostCheck SSLUserName SSLVerifyClient SSLVerifyDepth +syn keyword apacheDeclaration SSLCACertificateFile SSLCACertificatePath SSLCADNRequestFile SSLCADNRequestPath SSLCARevocationFile SSLCARevocationPath SSLCertificateChainFile SSLCertificateFile SSLCertificateKeyFile SSLCipherSuite SSLCompression SSLCryptoDevice SSLEngine SSLFIPS SSLHonorCipherOrder SSLInsecureRenegotiation SSLMutex SSLOptions SSLPassPhraseDialog SSLProtocol SSLProxyCACertificateFile SSLProxyCACertificatePath SSLProxyCARevocationFile SSLProxyCARevocationPath SSLProxyCheckPeerCN SSLProxyCheckPeerExpire SSLProxyCipherSuite SSLProxyEngine SSLProxyMachineCertificateChainFile SSLProxyMachineCertificateFile SSLProxyMachineCertificatePath SSLProxyProtocol SSLProxyVerify SSLProxyVerifyDepth SSLRandomSeed SSLRenegBufferSize SSLRequire SSLRequireSSL SSLSessionCache SSLSessionCacheTimeout SSLSessionTicketKeyFile SSLSessionTickets SSLStrictSNIVHostCheck SSLUserName SSLVerifyClient SSLVerifyDepth SSLVHostSNIPolicy syn match apacheOption "[+-]\?\<\(StdEnvVars\|CompatEnvVars\|ExportCertData\|FakeBasicAuth\|StrictRequire\|OptRenegotiate\)\>" syn keyword apacheOption builtin sem syn match apacheOption "\(file\|exec\|egd\|dbm\|shm\):" diff --git a/runtime/syntax/autohotkey.vim b/runtime/syntax/autohotkey.vim index a888394923..db3c26ec0a 100644 --- a/runtime/syntax/autohotkey.vim +++ b/runtime/syntax/autohotkey.vim @@ -3,6 +3,8 @@ " Maintainer: Michael Wong " https://github.com/mmikeww/autohotkey.vim " Latest Revision: 2022-07-25 +" Last Change: +" 2026 Apr 20 by Vim project: remove wrong oneline keyword #20018 " Previous Maintainers: SungHyun Nam " Nikolai Weibull @@ -35,7 +37,6 @@ syn region autohotkeyString syn match autohotkeyVariable \ display - \ oneline \ contains=autohotkeyBuiltinVariable \ keepend \ '%\S\{-}%' @@ -123,7 +124,7 @@ syn keyword autohotkeyCommand syn keyword autohotkeyFunction \ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr Func - \ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage + \ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage \ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan \ FileExist GetKeyState NumGet NumPut StrGet StrPut RegisterCallback \ IsFunc Trim LTrim RTrim IsObject Object Array FileOpen diff --git a/runtime/syntax/autopkgtest.vim b/runtime/syntax/autopkgtest.vim index 5dc1b5f6f5..56698129ee 100644 --- a/runtime/syntax/autopkgtest.vim +++ b/runtime/syntax/autopkgtest.vim @@ -2,6 +2,7 @@ " Language: Debian autopkgtest control files " Maintainer: Debian Vim Maintainers " Last Change: 2025 Jul 05 +" 2026 May 05 by Vim project: fix typos " URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/autopkgtest.vim " " Specification of the autopkgtest format is available at: @@ -31,10 +32,10 @@ syn match autopkgtestTests contained "[a-z0-9][a-z0-9+.-]\+\%(,\=\s*[a-z0-9][a-z syn match autopkgtestArbitrary contained "[^#]*" syn keyword autopkgtestRestrictions contained \ allow-stderr - \ breaks-testbe - \ build-neede + \ breaks-testbed + \ build-needed \ flaky - \ hint-testsuite-trigger + \ hint-testsuite-triggers \ isolation-container \ isolation-machine \ needs-internet @@ -43,10 +44,11 @@ syn keyword autopkgtestRestrictions contained \ needs-sudo \ rw-build-tree \ skip-foreign-architecture - \ skip-not-installable \ skippable \ superficial -syn keyword autopkgtestDeprecatedRestrictions contained needs-recommends +syn keyword autopkgtestDeprecatedRestrictions contained + \ needs-recommends + \ skip-not-installable syn match autopkgtestFeatures contained 'test-name=[^, ]*\%([, ]*[^, #]\)*,\=' syn match autopkgtestDepends contained '\%(@builddeps@\|@recommends@\|@\)' diff --git a/runtime/syntax/beancount.vim b/runtime/syntax/beancount.vim new file mode 100644 index 0000000000..4909c4bc08 --- /dev/null +++ b/runtime/syntax/beancount.vim @@ -0,0 +1,94 @@ +" Vim syntax file +" Language: beancount +" Maintainer: Nathan Grigg +" Latest Revision: 2024-11-25 + +if exists("b:current_syntax") + finish +endif + +syntax clear +" Basics. +syn region beanComment start="\s*;" end="$" keepend contains=beanMarker +syn match beanMarker "\v(\{\{\{|\}\}\})\d?" contained +syn region beanString start='"' skip='\\"' end='"' contained +syn match beanAmount "\v[-+]?[[:digit:].,]+" nextgroup=beanCurrency contained + \ skipwhite +syn match beanCurrency "\v\w+" contained +" Account name: alphanumeric with at least one colon. +syn match beanAccount "\v[[:alnum:]]+:[-[:alnum:]:]+" contained +syn match beanTag "\v#[-[:alnum:]]+" contained +syn match beanLink "\v\^\S+" contained +" We must require a space after the flag because you can have flags per +" transaction leg, and the letter-based flags might get confused with the +" start of an account name. +syn match beanFlag "\v[*!&#?%PSTCURM]\s\@=" contained + +" Most directives start with a date. +syn match beanDate "^\v\d{4}[-/]\d{2}[-/]\d{2}" skipwhite + \ nextgroup=beanOpen,beanTxn,beanClose,beanCommodity,beanNote,beanBalance,beanEvent,beanPad,beanPrice +" Options and events have two string arguments. The first, we are matching as +" beanOptionTitle and the second as a regular string. +syn region beanOption matchgroup=beanKeyword start="^option" end="$" + \ keepend contains=beanOptionTitle,beanComment +syn region beanOption matchgroup=beanKeyword start="^plugin" end="$" + \ keepend contains=beanString,beanComment +syn region beanInclude matchgroup=beanKeyword start="^include" end="$" + \ keepend contains=beanString,beanComment +syn region beanEvent matchgroup=beanKeyword start="event" end="$" contained + \ keepend contains=beanOptionTitle,beanComment +syn region beanOptionTitle start='"' skip='\\"' end='"' contained + \ nextgroup=beanString skipwhite +syn region beanOpen matchgroup=beanKeyword start="open" end="$" keepend + \ contained contains=beanAccount,beanCurrency,beanComment +syn region beanClose matchgroup=beanKeyword start="close" end="$" keepend + \ contained contains=beanAccount,beanComment +syn region beanCommodity matchgroup=beanKeyword start="commodity" end="$" keepend + \ contained contains=beanCurrency,beanComment +syn region beanNote matchgroup=beanKeyword start="\vnote|document" end="$" + \ keepend contains=beanAccount,beanString,beanComment contained +syn region beanBalance matchgroup=beanKeyword start="balance" end="$" contained + \ keepend contains=beanAccount,beanAmount,beanComment +syn region beanPrice matchgroup=beanKeyword start="price" end="$" contained + \ keepend contains=beanCurrency,beanAmount +syn region beanPushTag matchgroup=beanKeyword start="\v^(push|pop)tag" end="$" + \ keepend contains=beanTag +syn region beanPad matchgroup=beanKeyword start="pad" end="$" contained + \ keepend contains=beanAccount,beanComment + +syn region beanTxn matchgroup=beanKeyword start="\v\s+(txn|[*!&#?%PSTCURM])" skip="^\s" + \ end="^" keepend contained fold + \ contains=beanString,beanPost,beanComment,beanTag,beanLink,beanMeta +syn region beanPost start="^\v\C\s+(([*!&#?%PSTCURM]\s+)?[A-Z])@=" end="$" + \ contains=beanFlag,beanAccount,beanAmount,beanComment,beanCost,beanPrice +syn region beanMeta matchgroup=beanTag start="^\v\C\s+[a-z][-_a-zA-Z0-9]*:(\s|$)@=" end="$" + +syn region beanCost start="{" end="}" contains=beanAmount contained +syn match beanPrice "\V@@\?" nextgroup=beanAmount contained + +syn region beanHashHeaderFold + \ start="^\z(#\+\)" + \ skip="^\s*\z1#\+" + \ end="^\(#\)\@=" + \ fold contains=TOP + +syn region beanStarHeaderFold + \ start="^\z(\*\+\)" + \ skip="^\s*\z1\*\+" + \ end="^\(\*\)\@=" + \ fold contains=TOP + +highlight default link beanKeyword Keyword +highlight default link beanOptionTitle Keyword +highlight default link beanDate Keyword +highlight default link beanString String +highlight default link beanComment Comment +highlight default link beanAccount Identifier +highlight default link beanAmount Number +highlight default link beanCurrency Number +highlight default link beanCost Number +highlight default link beanPrice Number +highlight default link beanTag Tag +highlight default link beanLink Comment +highlight default link beanMeta Special +highlight default link beanFlag Keyword diff --git a/runtime/syntax/bitbake.vim b/runtime/syntax/bitbake.vim index 5e9bc58290..ac494cf441 100644 --- a/runtime/syntax/bitbake.vim +++ b/runtime/syntax/bitbake.vim @@ -6,6 +6,8 @@ " Copyright (C) 2008 Ricardo Salveti " Last Change: 2022 Jul 25 " 2025 Oct 13 by Vim project: update multiline function syntax #18565 +" 2026 Apr 07 by Vim project: update syntax script #19931 +" 2026 Apr 15 by Vim project: allow forward-slashes in bitbake varflags #19983 " " This file is licensed under the MIT license, see COPYING.MIT in " this source distribution for the terms. @@ -58,18 +60,18 @@ syn match bbVarValue ".*$" contained contains=bbString,bbVarDeref,bbV syn region bbVarPyValue start=+${@+ skip=+\\$+ end=+}+ contained contains=@python " Vars metadata flags -syn match bbVarFlagDef "^\([a-zA-Z0-9\-_\.]\+\)\(\[[a-zA-Z0-9\-_\.+]\+\]\)\@=" contains=bbIdentifier nextgroup=bbVarFlagFlag +syn match bbVarFlagDef "^\([a-zA-Z0-9\-_\.+/]\+\)\(\[[a-zA-Z0-9\-_\.+/]\+\]\)\@=" contains=bbIdentifier nextgroup=bbVarFlagFlag syn region bbVarFlagFlag matchgroup=bbArrayBrackets start="\[" end="\]\s*\(:=\|=\|.=\|=.|+=\|=+\|?=\)\@=" contained contains=bbIdentifier nextgroup=bbVarEq " Includes and requires -syn keyword bbInclude inherit include require contained +syn keyword bbInclude inherit inherit_defer include include_all require contained syn match bbIncludeRest ".*$" contained contains=bbString,bbVarDeref -syn match bbIncludeLine "^\(inherit\|include\|require\)\s\+" contains=bbInclude nextgroup=bbIncludeRest +syn match bbIncludeLine "^\(inherit\|inherit_defer\|include\|include_all\|require\)\s\+" contains=bbInclude nextgroup=bbIncludeRest " Add taks and similar -syn keyword bbStatement addtask deltask addhandler after before EXPORT_FUNCTIONS contained +syn keyword bbStatement addtask deltask addhandler after before EXPORT_FUNCTIONS addpylib contained syn match bbStatementRest ".*$" skipwhite contained contains=bbStatement -syn match bbStatementLine "^\(addtask\|deltask\|addhandler\|after\|before\|EXPORT_FUNCTIONS\)\s\+" contains=bbStatement nextgroup=bbStatementRest +syn match bbStatementLine "^\(addtask\|deltask\|addhandler\|after\|before\|EXPORT_FUNCTIONS\|addpylib\)\s\+" contains=bbStatement nextgroup=bbStatementRest " OE Important Functions syn keyword bbOEFunctions do_fetch do_unpack do_patch do_configure do_compile do_stage do_install do_package contained diff --git a/runtime/syntax/bpftrace.vim b/runtime/syntax/bpftrace.vim new file mode 100644 index 0000000000..4e23bcbde5 --- /dev/null +++ b/runtime/syntax/bpftrace.vim @@ -0,0 +1,66 @@ +" Vim syntax file +" Language: bpftrace +" Maintainer: Stanislaw Gruszka +" Last Change: 2025 Dec 22 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword bpftraceConditional if else +syn keyword bpftraceRepeat while for unroll +syn keyword bpftraceStatement break continue return +syn keyword bpftraceKeyword let macro import config +syn keyword bpftraceOperator sizeof offsetof + +syn keyword bpftraceProbe BEGIN END begin end +syn match bpftraceProbe "\v<(bench|self|test)\ze:" +syn match bpftraceProbe "\v<(fentry|fexit|kfunc|kretfunc|kprobe|kretprobe)\ze:" +syn match bpftraceProbe "\v<(profile|interval|iterator|hardware|software|uprobe|uretprobe)\ze:" +syn match bpftraceProbe "\v<(usdt|tracepoint|rawtracepoint|watchpoint|asyncwatchpoint)\ze:" +syn match bpftraceProbe "\v(^|[^:])<\zs(h|i|it|f|fr|k|kr|p|rt|s|t|u|ur|U|w|aw)\ze:" + +syn keyword bpftraceType bool int8 int16 int32 int64 +syn keyword bpftraceType uint8 uint16 uint32 uint64 +syn keyword bpftraceType struct + +syn match bpftraceMacro "\<\h\w*\ze\_s*(" + +syn match bpftraceNumber display "[+-]\=\<\d\+\>" +syn match bpftraceNumber display "\<0x\x\+\>" + +syn keyword bpftraceBoolean true false + +syn region bpftraceString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell extend + +syn keyword bpftraceTodo contained TODO FIXME XXX +syn match bpftraceShebang /\%^#![^[].*/ +syn region bpftraceCommentLine start="//" end="$" contains=bpftraceTodo,@Spell +syn region bpftraceCommentBlock matchgroup=bpftraceCommentBlock start="/\*" end="\*/" contains=bpftraceTodo,@Spell + +" Define the default highlighting. +hi def link bpftraceConditional Conditional +hi def link bpftraceMacro Macro +hi def link bpftraceRepeat Repeat +hi def link bpftraceKeyword Keyword +hi def link bpftraceNumber Number +hi def link bpftraceBoolean Boolean +hi def link bpftraceShebang Comment +hi def link bpftraceCommentLine Comment +hi def link bpftraceCommentBlock Comment +hi def link bpftraceString String +hi def link bpftraceType Type +hi def link bpftraceProbe Identifier + +syn sync minlines=100 + +let b:current_syntax = "bpftrace" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 sw=8 noexpandtab diff --git a/runtime/syntax/c.vim b/runtime/syntax/c.vim index 68b6778c73..6838109520 100644 --- a/runtime/syntax/c.vim +++ b/runtime/syntax/c.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: C " Maintainer: The Vim Project -" Last Change: 2025 Jan 18 +" Last Change: 2026 Jun 01 " Former Maintainer: Bram Moolenaar " Quit when a (custom) syntax file was already loaded @@ -278,9 +278,9 @@ if exists("c_gnu") syn keyword cOperator __alignof__ syn keyword cOperator typeof __typeof__ syn keyword cOperator __real__ __imag__ - syn keyword cStorageClass __attribute__ __const__ __extension__ - syn keyword cStorageClass inline __inline __inline__ - syn keyword cStorageClass __restrict__ __volatile__ __noreturn__ + syn keyword cStorageClass __attribute__ __extension__ + syn keyword cTypeQualifier __const__ __restrict__ __volatile__ + syn keyword cFunctionSpec inline __inline __inline__ __noreturn__ endif syn keyword cType int long short char void syn keyword cType signed unsigned float double @@ -314,9 +314,11 @@ endif syn keyword cTypedef typedef syn keyword cStructure struct union enum -syn keyword cStorageClass static register auto volatile extern const +syn keyword cStorageClass static register auto extern +syn keyword cTypeQualifier const volatile if !exists("c_no_c99") && !s:in_cpp_family - syn keyword cStorageClass inline restrict + syn keyword cFunctionSpec inline + syn keyword cTypeQualifier restrict endif if (s:ft ==# "c" && !exists("c_no_c23")) || (s:in_cpp_family && !exists("cpp_no_cpp11")) syn keyword cStorageClass constexpr @@ -324,9 +326,12 @@ endif if !exists("c_no_c11") syn keyword cStorageClass _Alignas alignas syn keyword cOperator _Alignof alignof - syn keyword cStorageClass _Atomic + syn keyword cTypeQualifier _Atomic syn keyword cOperator _Generic - syn keyword cStorageClass _Noreturn noreturn + syn keyword cFunctionSpec _Noreturn + if !s:in_cpp_family + syn keyword cStandardAttribute noreturn + endif syn keyword cOperator _Static_assert static_assert syn keyword cStorageClass _Thread_local thread_local syn keyword cType char16_t char32_t @@ -349,6 +354,11 @@ if !exists("c_no_c11") syn keyword cType atomic_intmax_t atomic_uintmax_t endif +if !exists("c_no_c23") && !s:in_cpp_family + syn keyword cStandardAttribute deprecated fallthrough maybe_unused nodiscard + syn keyword cStandardAttribute unsequenced reproducible +endif + if (s:ft ==# "c" && !exists("c_no_c23")) || (s:in_cpp_family && !exists("cpp_no_cpp20")) syn keyword cType char8_t endif @@ -421,8 +431,10 @@ if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu") syn keyword cConstant NDEBUG " POSIX 2001 syn keyword cConstant SIGBUS SIGPOLL SIGPROF SIGSYS SIGURG SIGVTALRM SIGXCPU SIGXFSZ + " POSIX Issue 8 (post 2017) + syn keyword cConstant SIGWINCH " non-POSIX signals - syn keyword cConstant SIGWINCH SIGINFO + syn keyword cConstant SIGINFO SIGIO " Add POSIX errors as well. List comes from: " http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html syn keyword cConstant E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF @@ -601,6 +613,9 @@ hi def link cOperator Operator hi def link cStructure Structure hi def link cTypedef Structure hi def link cStorageClass StorageClass +hi def link cTypeQualifier cStorageClass +hi def link cFunctionSpec cStorageClass +hi def link cStandardAttribute cStorageClass hi def link cInclude Include hi def link cPreProc PreProc hi def link cDefine Macro diff --git a/runtime/syntax/cabal.vim b/runtime/syntax/cabal.vim index 74cda51266..ddc905615b 100644 --- a/runtime/syntax/cabal.vim +++ b/runtime/syntax/cabal.vim @@ -5,8 +5,12 @@ " Previous Maintainer: Vincent Berthoux " File Types: .cabal " Last Change: 22 Oct 2022 +" +" 2026 Apr 29 by Léana: add missing haskell language editions +" 2026 Apr 20 by Vim project: remove wrong oneline keyword #20018 +" " v1.6: Added support for foreign-libraries -" Added highlighting for various fields +" Added highlighting for various fields " v1.5: Incorporated changes from " https://github.com/sdiehl/haskell-vim-proto/blob/master/vim/syntax/cabal.vim " Use `syn keyword` instead of `syn match`. @@ -25,7 +29,7 @@ " Cabal known compiler are highlighted too. " " V1.2: Added cpp-options which was missing. Feature implemented -" by GHC, found with a GHC warning, but undocumented. +" by GHC, found with a GHC warning, but undocumented. " Whatever... " " v1.1: Fixed operator problems and added ftdetect file @@ -186,19 +190,20 @@ syn match cabalVersionRegionA \ contains=cabalVersionOperator,cabalVersion \ keepend \ /\%(==\|\^\?>=\|<=\|<\|>\)\s*\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/ -" version inside `version: ...` +" version inside `version: ...` syn match cabalVersionRegionB \ contains=cabalStatementRegion,cabalVersionOperator,cabalVersion \ /^\s*\%(cabal-\)\?version\s*:.*$/ -syn keyword cabalLanguage Haskell98 Haskell2010 +" See the following link for all Haskell language editions supported by Cabal. +" https://cabal.readthedocs.io/en/stable/cabal-package-description-file.html#pkg-field-default-language +syn keyword cabalLanguage Haskell98 Haskell2010 GHC2021 GHC2024 " title region syn match cabalName contained /:\@<=.*/ syn match cabalNameRegion \ contains=cabalStatementRegion,cabalName \ nextgroup=cabalStatementRegion - \ oneline \ /^\c\s*name\s*:.*$/ " author region @@ -206,7 +211,6 @@ syn match cabalAuthor contained /:\@<=.*/ syn match cabalAuthorRegion \ contains=cabalStatementRegion,cabalStatement,cabalAuthor \ nextgroup=cabalStatementRegion - \ oneline \ /^\c\s*author\s*:.*$/ " maintainer region @@ -214,7 +218,6 @@ syn match cabalMaintainer contained /:\@<=.*/ syn match cabalMaintainerRegion \ contains=cabalStatementRegion,cabalStatement,cabalMaintainer \ nextgroup=cabalStatementRegion - \ oneline \ /^\c\s*maintainer\s*:.*$/ " license region @@ -222,7 +225,6 @@ syn match cabalLicense contained /:\@<=.*/ syn match cabalLicenseRegion \ contains=cabalStatementRegion,cabalStatement,cabalLicense \ nextgroup=cabalStatementRegion - \ oneline \ /^\c\s*license\s*:.*$/ " license-file region @@ -230,7 +232,6 @@ syn match cabalLicenseFile contained /:\@<=.*/ syn match cabalLicenseFileRegion \ contains=cabalStatementRegion,cabalStatement,cabalLicenseFile \ nextgroup=cabalStatementRegion - \ oneline \ /^\c\s*license-file\s*:.*$/ " tested-with region with compilers and versions @@ -238,7 +239,6 @@ syn keyword cabalCompiler contained ghc nhc yhc hugs hbc helium jhc lhc syn match cabalTestedWithRegion \ contains=cabalStatementRegion,cabalStatement,cabalCompiler,cabalVersionRegionA \ nextgroup=cabalStatementRegion - \ oneline \ /^\c\s*tested-with\s*:.*$/ " build type keywords diff --git a/runtime/syntax/cangjie.vim b/runtime/syntax/cangjie.vim index 1e8b872198..d8194a9274 100644 --- a/runtime/syntax/cangjie.vim +++ b/runtime/syntax/cangjie.vim @@ -2,7 +2,7 @@ " Language: Cangjie " Maintainer: Wu Junkai " URL: https://github.com/WuJunkai2004/cangjie.vim -" Last Change: 2025 Oct 12 +" Last Change: 2026 Jan 5 " " The Cangjie programming language is a new-generation programming " language oriented to full-scenario intelligence. It features @@ -33,9 +33,13 @@ endfunction syn case match " 1. comments -syn keyword cangjieTodo TODO FIXME XXX NOTE BUG contained -syn match cangjieComment /\v\/\/.*/ contains=cangjieTodo -syn region cangjieComment start=/\/\*/ end=/\*\// contains=cangjieTodo,@Spell +syn keyword cangjieTodo TODO FIXME XXX NOTE BUG contained +syn match cangjieDocKeyword /\v\c\@(brief|param|return|note|warning|deprecated)/ contained +syn match cangjieDocKeyword /\v\c\@(author|version|date|since|file|copyright)/ contained +syn match cangjieDocKeyword /\v\c\@(details|link|see|throws|exception|example)/ contained +syn match cangjieDocKeyword /\v\c\@(private|protected|public|internal)/ contained +syn match cangjieComment /\v\/\/.*/ contains=cangjieTodo,cangjieDocKeyword +syn region cangjieComment start=/\/\*/ end=/\*\// contains=cangjieTodo,cangjieDocKeyword,@spell " 2. keywords syn keyword cangjieDeclaration abstract extend macro foreign @@ -65,27 +69,48 @@ syn match cangjieTypeName /\h\w*/ contained syn region cangjieSpIdentifier start=/`/ end=/`/ oneline " 6. types -syn keyword cangjieSpType Any Nothing Range Unit Iterable -syn keyword cangjieArrayType Array ArrayList VArray -syn keyword cangjieHashType HashMap HashSet +syn keyword cangjieSpType Nothing Range Unit LibC Duration DefaultHasher +syn keyword cangjieArrayType Array VArray syn keyword cangjieCommonType Bool Byte Rune String syn keyword cangjieFloatType Float16 Float32 Float64 -syn keyword cangjieIntType Int8 Int16 Int32 Int64 IntNative -syn keyword cangjieUIntType UInt8 UInt16 UInt32 UInt64 UIntNative +syn keyword cangjieIntType Int Int8 Int16 Int32 Int64 IntNative +syn keyword cangjieUIntType UInt UInt8 UInt16 UInt32 UInt64 UIntNative +syn keyword cangjieFFIType CPointer CPointerHandle CPointerResource CString CStringResource syn cluster cangjieTypeCluster contains= \ cangjieSpType, \ cangjieArrayType, - \ cangjieHashType, \ cangjieCommonType, \ cangjieFloatType, \ cangjieIntType, - \ cangjieUIntType + \ cangjieUIntType, + \ cangjieFFIType + +" 6.1. builtin function/interface/class +syn keyword cangjieCoreFunc acquireArrayRawData alignOf eprint eprintln ifNone ifSome max min +syn keyword cangjieCoreFunc print println readln refEq releaseArrayRawData sizeOf sleep zeroValue +syn keyword cangjieCoreItf Any Hasher ThreadContext Countable Collection Less Greater +syn keyword cangjieCoreItf LessOrEqual GreaterOrEqual Comparable Equal NotEqual Equatable +syn keyword cangjieCoreItf Hashable Iterable Resource ToString CType +syn keyword cangjieCoreClass ArrayIterator Box Future Iterator Object RangeIterator +syn keyword cangjieCoreClass StackTraceElement StringBuilder Thread ThreadLocal +syn keyword cangjieCoreError ArithmeticException Error Exception IllegalArgumentException +syn keyword cangjieCoreError IllegalFormatException IllegalMemoryException IllegalStateException +syn keyword cangjieCoreError IncompatiblePackageException IndexOutOfBoundsException InternalError +syn keyword cangjieCoreError NegativeArraySizeException NoneValueException OutOfMemoryError +syn keyword cangjieCoreError OverflowException SpawnException StackOverflowError +syn keyword cangjieCoreError TimeoutException UnsupportedException +syn cluster cangjieBuiltinCluster contains= + \ cangjieCoreFunc, + \ cangjieCoreItf, + \ cangjieCoreClass, + \ cangjieCoreError " 7. character and strings syn cluster cangjieInterpolatedPart contains= \ @cangjieKeywordCluster, \ cangjieSpIdentifier, \ @cangjieTypeCluster, + \ @cangjieBuiltinCluster, \ @cangjieNumberCluster, \ cangjieOperator syn region cangjieInterpolation contained keepend start=/\${/ end=/}/ contains=@cangjieInterpolatedPart @@ -139,6 +164,7 @@ syn region cangjieFoldBrackets transparent fold start='\[' end='\]' contains=ALL " finally, link the syntax groups to the highlight groups if s:enabled('comment') hi def link cangjieTodo Todo + hi def link cangjieDocKeyword SpecialComment hi def link cangjieComment Comment endif if s:enabled('identifier') @@ -151,6 +177,12 @@ if s:enabled('keyword') hi def link cangjieVariable Keyword hi def link cangjieOption Keyword endif +if s:enabled('builtin') + hi def link cangjieCoreFunc Function + hi def link cangjieCoreItf Type + hi def link cangjieCoreClass Type + hi def link cangjieCoreError Structure +endif if s:enabled('macro') hi def link cangjieMacro PreProc endif @@ -178,11 +210,11 @@ if s:enabled('type') hi def link cangjieTypeName Type hi def link cangjieSpType Type hi def link cangjieArrayType Type - hi def link cangjieHashType Type hi def link cangjieCommonType Type hi def link cangjieFloatType Type hi def link cangjieIntType Type hi def link cangjieUIntType Type + hi def link cangjieFFIType Type endif let b:current_syntax = "cangjie" diff --git a/runtime/syntax/context.vim b/runtime/syntax/context.vim index c5bbbb472b..891d5c6515 100644 --- a/runtime/syntax/context.vim +++ b/runtime/syntax/context.vim @@ -4,7 +4,7 @@ vim9script # Language: ConTeXt typesetting engine # Maintainer: Nicola Vitacolonna # Former Maintainers: Nikolai Weibull -# Latest Revision: 2023 Dec 26 +# Latest Revision: 2026 Jun 13 if exists("b:current_syntax") finish @@ -60,7 +60,7 @@ syn match contextSequence '\\[a-zA-Z]*[@_!?]\+[a-zA-Z@_!?]*' contains=@NoSpe # Math syn match contextMathCmd '\\m\%(ath\%(ematics\)\=\)\=\>' -syn region contextInlineMath matchgroup=contextMathDelim start='\$' skip='\\\\\|\\\$' end='\$' +syn region contextInlineMath matchgroup=contextMathDelim start='[\\]\@1' syn match contextFont '\\\%(vi\{1,3}\|ix\|xi\{0,2}\)\>' contains=@NoSpell syn match contextFont '\\\%(tf\|b[si]\|s[cl]\|os\)\%(xx\|[xabcd]\)\=\>' contains=@NoSpell -hi def link contextBlockDelim Keyword -hi def link contextBuiltin Keyword -hi def link contextCommand Keyword -hi def link contextComment Comment -hi def link contextDelimiter Delimiter -hi def link contextDirectLua Keyword -hi def link contextEscaped String -hi def link contextFont contextType -hi def link contextKeyword Keyword -hi def link contextInlineMath String -hi def link contextMagicLine PreProc -hi def link contextMathCmd Identifier -hi def link contextMathDelim Delimiter -hi def link contextOptions Typedef -hi def link contextPreProc PreProc -hi def link contextSectioning PreProc -hi def link contextSequence Identifier -hi def link contextSpecial Special -hi def link contextStyle contextType -hi def link contextTodo Todo -hi def link contextType Type +hi def link contextBlockDelim Keyword +hi def link contextBuiltin Keyword +hi def link contextCommand Keyword +hi def link contextComment Comment +hi def link contextDelimiter Delimiter +hi def link contextDirectLua Keyword +hi def link contextDisplayMath String +hi def link contextEscaped String +hi def link contextFont contextType +hi def link contextKeyword Keyword +hi def link contextInlineMath String +hi def link contextMagicLine PreProc +hi def link contextMathCmd Identifier +hi def link contextMathDelim Delimiter +hi def link contextOptions Typedef +hi def link contextPreProc PreProc +hi def link contextSectioning PreProc +hi def link contextSequence Identifier +hi def link contextSpecial Special +hi def link contextStyle contextType +hi def link contextTodo Todo +hi def link contextType Type b:current_syntax = 'context' diff --git a/runtime/syntax/cpp.vim b/runtime/syntax/cpp.vim index ff1226b7b0..121eab2c6f 100644 --- a/runtime/syntax/cpp.vim +++ b/runtime/syntax/cpp.vim @@ -1,9 +1,13 @@ " Vim syntax file " Language: C++ -" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) -" Previous Maintainer: Ken Shan +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) +" Ken Shan " Last Change: 2024 May 04 -" 2024 May 04 by Vim Project (fix digit separator in octals and floats) +" 2024 May 04 by Vim Project fix digit separator in octals and floats +" 2026 Jan 06 by Vim Project orphaning announcement +" 2026 Jan 08 by Vim Project highlight capital letter prefixes for numbers +" 2026 May 29 by Vim Project add C++23 stdfloat types (#16498) " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -57,11 +61,11 @@ if !exists("cpp_no_cpp14") syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" syn match cppNumber display contained "\<0\('\=\o\+\)\+\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppFloat display contained "\<\d\('\=\d\+\)*\.\(\d\('\=\d\+\)*\)\=\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppFloat display contained "\.\d\('\=\d\+\)*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppFloat display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppNumber display contained "\<0[Bb][01]\('\=[01]\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppNumber display contained "\<0[Xx]\x\('\=\x\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<\d\('\=\d\+\)*\.\(\d\('\=\d\+\)*\)\=\([Ee][-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\.\d\('\=\d\+\)*\([Ee][-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<\d\+[Ee][-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" syn region cppString start=+\(L\|u\|u8\|U\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"\(sv\|s\|_\i*\)\=+ end='$' contains=cSpecial,cFormat,@Spell endif @@ -69,8 +73,8 @@ endif if !exists("cpp_no_cpp17") syn match cppCast "\" - syn match cppFloat display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<0[Xx]\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<0[Xx]\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" " TODO: push this up to c.vim if/when supported in C23 syn match cppCharacter "u8'[^\\]'" @@ -92,8 +96,8 @@ if !exists("cpp_no_cpp20") syn match cppNumber display contained "\<0\(y\|d\)\>" syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>" syn match cppNumber display contained "\<0\o\+\(y\|d\)\>" - syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>" - syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>" + syn match cppNumber display contained "\<0[Bb][01]\('\=[01]\+\)*\(y\|d\)\>" + syn match cppNumber display contained "\<0[Xx]\x\('\=\x\+\)*\(y\|d\)\>" syn keyword cppStatement co_await co_return co_yield requires syn keyword cppStorageClass consteval constinit syn keyword cppStructure concept @@ -101,6 +105,20 @@ if !exists("cpp_no_cpp20") syn keyword cppModule import module export endif +" C++ 23 extensions +if !exists("cpp_no_cpp23") + syn keyword cppType float16_t float32_t float64_t float128_t bfloat16_t +endif + +" C++ 26 extensions +if !exists("cpp_no_cpp26") + " attribute [[ ... ]] with optional value expr, eg [[=foo{1}]] + syn region cppAttribute matchgroup=cppAttributeBracket start="\w\@1]?" @@ -125,6 +143,9 @@ hi def link cppString String hi def link cppNumber Number hi def link cppFloat Number hi def link cppModule Include +hi def link cppAttributeBracket Special +hi def link cppReflect Operator +hi def link cppSpliceBracket Special let b:current_syntax = "cpp" diff --git a/runtime/syntax/csh.vim b/runtime/syntax/csh.vim index 0ad85adfc7..cf1c68d65f 100644 --- a/runtime/syntax/csh.vim +++ b/runtime/syntax/csh.vim @@ -1,10 +1,8 @@ " Vim syntax file -" Language: C-shell (csh) -" Maintainer: This runtime file is looking for a new maintainer. -" Former Maintainer: Charles E. Campbell -" Last Change: Aug 31, 2016 -" Version: 14 -" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_CSH +" Language: C-shell (csh) +" Maintainer: Doug Kearns +" Former Maintainer: Charles E. Campbell +" Last Change: 2026 Jan 16 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -40,7 +38,7 @@ syn region cshDblQuote start=+^"+ skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial syn region cshSnglQuote start=+^'+ skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ,@Spell syn region cshBckQuote start=+^`+ skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ,@Spell syn cluster cshCommentGroup contains=cshTodo,@Spell -syn match cshComment "#.*$" contains=@cshCommentGroup +syn match cshComment "#.*" contains=@cshCommentGroup " A bunch of useful csh keywords syn keyword cshStatement alias end history onintr setenv unalias diff --git a/runtime/syntax/css.vim b/runtime/syntax/css.vim index f4d09cfa4e..3f28717959 100644 --- a/runtime/syntax/css.vim +++ b/runtime/syntax/css.vim @@ -8,6 +8,9 @@ " URL: https://github.com/vim-language-dept/css-syntax.vim " Maintainer: Jay Sitter " Last Change: 2024 Mar 2 +" Changelog: +" 2025 Nov 11: improve support for cssBoxProperties #18717 +" 2026 Feb 13: add missing numeric units (baseline 2015, 2020, 2022, 2023, 2026) #19325 " quit when a syntax file was already loaded if !exists("main_syntax") @@ -70,12 +73,14 @@ endtry " digits syn match cssValueInteger contained "[-+]\=\d\+" contains=cssUnitDecorators -syn match cssValueNumber contained "[-+]\=\d\+\(\.\d*\)\=" contains=cssUnitDecorators -syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(mm\|cm\|in\|pt\|pc\|em\|ex\|px\|rem\|dpi\|dppx\|dpcm\|fr\|vw\|vh\|vmin\|vmax\|ch\)\>" contains=cssUnitDecorators -syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=%" contains=cssUnitDecorators -syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)\>" contains=cssUnitDecorators -syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)\>" contains=cssUnitDecorators -syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)\>" contains=cssUnitDecorators +syn match cssValueNumber contained "[-+]\=\d\+\%(\.\d*\)\=" contains=cssUnitDecorators +syn match cssValueLength contained "[-+]\=\d\+\%(\.\d*\)\=\%(mm\|cm\|in\|pt\|pc\|px\|dpi\|dppx\|dpcm\|fr\|Q\|x\)\>" contains=cssUnitDecorators +syn match cssValueLength contained "[-+]\=\d\+\%(\.\d*\)\=r\=\%(em\|ex\|cap\|lh\|ch\|ic\)\>" contains=cssUnitDecorators +syn match cssValueLength contained "[-+]\=\d\+\%(\.\d*\)\=[dls]\=\%(vb\|vh\|vi\|vmax\|vmin\|vw\)\>" contains=cssUnitDecorators +syn match cssValueLength contained "[-+]\=\d\+\%(\.\d*\)\=%" contains=cssUnitDecorators +syn match cssValueAngle contained "[-+]\=\d\+\%(\.\d*\)\=\%(deg\|grad\|rad\|turn\)\>" contains=cssUnitDecorators +syn match cssValueTime contained "+\=\d\+\%(\.\d*\)\=\%(ms\|s\)\>" contains=cssUnitDecorators +syn match cssValueFrequency contained "+\=\d\+\%(\.\d*\)\=\%(Hz\|kHz\)\>" contains=cssUnitDecorators " The 16 basic color names syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon navy olive purple red silver teal yellow @@ -84,23 +89,23 @@ syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon na syn keyword cssColor contained aliceblue antiquewhite aquamarine azure syn keyword cssColor contained beige bisque blanchedalmond blueviolet brown burlywood syn keyword cssColor contained cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan -syn match cssColor contained /\/ -syn match cssColor contained /\/ -syn match cssColor contained /\/ -syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ syn keyword cssColor contained deeppink deepskyblue dimgray dimgrey dodgerblue firebrick syn keyword cssColor contained floralwhite forestgreen gainsboro ghostwhite gold syn keyword cssColor contained goldenrod greenyellow grey honeydew hotpink syn keyword cssColor contained indianred indigo ivory khaki lavender lavenderblush lawngreen syn keyword cssColor contained lemonchiffon limegreen linen magenta -syn match cssColor contained /\/ -syn match cssColor contained /\/ -syn match cssColor contained /\/ -syn match cssColor contained /\/ -syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ +syn match cssColor contained /\/ syn keyword cssColor contained midnightblue mintcream mistyrose moccasin navajowhite syn keyword cssColor contained oldlace olivedrab orange orangered orchid -syn match cssColor contained /\/ +syn match cssColor contained /\/ syn keyword cssColor contained papayawhip peachpuff peru pink plum powderblue syn keyword cssColor contained rosybrown royalblue rebeccapurple saddlebrown salmon syn keyword cssColor contained sandybrown seagreen seashell sienna skyblue slateblue @@ -125,25 +130,25 @@ syn match cssColor contained "#\x\{3,4\}\>" contains=cssUnitDecorators syn match cssColor contained "#\x\{6\}\>" contains=cssUnitDecorators syn match cssColor contained "#\x\{8\}\>" contains=cssUnitDecorators -syn region cssURL contained matchgroup=cssFunctionName start="\<\(uri\|url\|local\|format\)\s*(" end=")" contains=cssStringQ,cssStringQQ oneline +syn region cssURL contained matchgroup=cssFunctionName start="\<\%(uri\|url\|local\|format\)\s*(" end=")" contains=cssStringQ,cssStringQQ oneline syn region cssMathGroup contained matchgroup=cssMathParens start="(" end=")" containedin=cssFunction,cssMathGroup contains=cssCustomProp,cssValue.*,cssFunction,cssColor,cssStringQ,cssStringQQ oneline -syn region cssFunction contained matchgroup=cssFunctionName start="\<\(var\|calc\)\s*(" end=")" contains=cssCustomProp,cssValue.*,cssFunction,cssURL,cssColor,cssStringQ,cssStringQQ oneline -syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\|cubic-bezier\|steps\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma -syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgba\|hsl\|hsla\|color-stop\|from\|to\)\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma,cssFunction -syn region cssFunction contained matchgroup=cssFunctionName start="\<\(linear-\|radial-\|conic-\)\=\gradient\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunction,cssGradientAttr,cssFunctionComma -syn region cssFunction contained matchgroup=cssFunctionName start="\<\(matrix\(3d\)\=\|scale\(3d\|X\|Y\|Z\)\=\|translate\(3d\|X\|Y\|Z\)\=\|skew\(X\|Y\)\=\|rotate\(3d\|X\|Y\|Z\)\=\|perspective\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma -syn region cssFunction contained matchgroup=cssFunctionName start="\<\(blur\|brightness\|contrast\|drop-shadow\|grayscale\|hue-rotate\|invert\|opacity\|saturate\|sepia\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\%(var\|calc\)\s*(" end=")" contains=cssCustomProp,cssValue.*,cssFunction,cssURL,cssColor,cssStringQ,cssStringQQ oneline +syn region cssFunction contained matchgroup=cssFunctionName start="\<\%(rgb\|clip\|attr\|counter\|rect\|cubic-bezier\|steps\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\%(rgba\|hsl\|hsla\|color-stop\|from\|to\)\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma,cssFunction +syn region cssFunction contained matchgroup=cssFunctionName start="\<\%(linear-\|radial-\|conic-\)\=\gradient\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunction,cssGradientAttr,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\%(matrix\%(3d\)\=\|scale\%(3d\|X\|Y\|Z\)\=\|translate\%(3d\|X\|Y\|Z\)\=\|skew\%(X\|Y\)\=\|rotate\%(3d\|X\|Y\|Z\)\=\|perspective\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\%(blur\|brightness\|contrast\|drop-shadow\|grayscale\|hue-rotate\|invert\|opacity\|saturate\|sepia\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma syn keyword cssGradientAttr contained top bottom left right cover center middle ellipse at syn match cssFunctionComma contained "," " Common Prop and Attr syn keyword cssCommonAttr contained auto none inherit all default normal syn keyword cssCommonAttr contained top bottom center stretch hidden visible -syn match cssCommonAttr contained "\<\(max-\|min-\|fit-\)content\>" +syn match cssCommonAttr contained "\<\%(max-\|min-\|fit-\)content\>" "------------------------------------------------ " CSS Animations " http://www.w3.org/TR/css3-animations/ -syn match cssAnimationProp contained "\" +syn match cssAnimationProp contained "\" " animation-direction attributes syn keyword cssAnimationAttr contained alternate reverse @@ -160,7 +165,7 @@ syn keyword cssAnimationAttr contained infinite "------------------------------------------------ " CSS Backgrounds and Borders Module Level 3 " http://www.w3.org/TR/css3-background/ -syn match cssBackgroundProp contained "\" +syn match cssBackgroundProp contained "\" " background-attachment attributes syn keyword cssBackgroundAttr contained scroll fixed local @@ -169,16 +174,16 @@ syn keyword cssBackgroundAttr contained left center right top bottom " background-repeat attributes syn match cssBackgroundAttr contained "\" -syn match cssBackgroundAttr contained "\" +syn match cssBackgroundAttr contained "\" " background-size attributes syn keyword cssBackgroundAttr contained cover contain -syn match cssBorderProp contained "\" -syn match cssBorderProp contained "\" -syn match cssBorderProp contained "\" -syn match cssBorderProp contained "\" -syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" +syn match cssBorderProp contained "\" syn match cssBorderProp contained "\" syn match cssBorderProp contained "\" @@ -195,13 +200,13 @@ syn keyword cssBorderAttr contained thin thick medium syn keyword cssBorderAttr contained clone slice "------------------------------------------------ -syn match cssBoxProp contained "\" -syn match cssBoxProp contained "\" -syn match cssBoxProp contained "\<\(margin\|padding\)\(-\(inline\|block\)\(-\(start\|end\)\)\)\=\>" -syn match cssBoxProp contained "\" -syn match cssBoxProp contained "\" +syn match cssBoxProp contained "\" +syn match cssBoxProp contained "\" +syn match cssBoxProp contained "\<\%(margin\|padding\)\%(-\%(inline\|block\)\%(-\%(start\|end\)\)\=\)\=\>" +syn match cssBoxProp contained "\" +syn match cssBoxProp contained "\" syn keyword cssBoxAttr contained visible hidden scroll auto -syn match cssBoxAttr contained "\" +syn match cssBoxAttr contained "\" syn keyword cssCascadeProp contained all syn keyword cssCascadeAttr contained initial unset revert @@ -211,7 +216,7 @@ syn match cssColorProp contained "\" syn match cssColorProp contained "\" -syn match cssDimensionProp contained "\<\(min\|max\)-\(width\|height\)\>" +syn match cssDimensionProp contained "\<\%(min\|max\)-\%(width\|height\)\>" syn keyword cssDimensionProp contained height syn keyword cssDimensionProp contained width @@ -219,32 +224,32 @@ syn keyword cssDimensionProp contained width " http://www.w3.org/TR/css3-flexbox/ " CSS Box Alignment Module Level 3 " http://www.w3.org/TR/css-align-3/ -syn match cssFlexibleBoxProp contained "\" -syn match cssFlexibleBoxProp contained "\<\(align\|justify\)\(-\(items\|self\|content\)\)\=\>" +syn match cssFlexibleBoxProp contained "\" +syn match cssFlexibleBoxProp contained "\<\%(align\|justify\)\%(-\%(items\|self\|content\)\)\=\>" syn keyword cssFlexibleBoxProp contained order -syn match cssFlexibleBoxAttr contained "\<\(row\|column\|wrap\)\(-reverse\)\=\>" +syn match cssFlexibleBoxAttr contained "\<\%(row\|column\|wrap\)\%(-reverse\)\=\>" syn keyword cssFlexibleBoxAttr contained nowrap stretch baseline center -syn match cssFlexibleBoxAttr contained "\" -syn match cssFlexibleBoxAttr contained "\" +syn match cssFlexibleBoxAttr contained "\" +syn match cssFlexibleBoxAttr contained "\" " CSS Fonts Module Level 3 " http://www.w3.org/TR/css-fonts-3/ -syn match cssFontProp contained "\" +syn match cssFontProp contained "\" " font attributes syn keyword cssFontAttr contained icon menu caption syn match cssFontAttr contained "\" syn match cssFontAttr contained "\" syn keyword cssFontAttr contained larger smaller -syn match cssFontAttr contained "\<\(x\{1,2\}-\)\=\(large\|small\)\>" -syn match cssFontAttr contained "\" +syn match cssFontAttr contained "\<\%(x\{1,2\}-\)\=\%(large\|small\)\>" +syn match cssFontAttr contained "\" " font-family attributes syn keyword cssFontAttr contained sans-serif serif cursive fantasy monospace " font-feature-settings attributes syn keyword cssFontAttr contained on off " font-stretch attributes -syn match cssFontAttr contained "\<\(\(ultra\|extra\|semi\)-\)\=\(condensed\|expanded\)\>" +syn match cssFontAttr contained "\<\%(\%(ultra\|extra\|semi\)-\)\=\%(condensed\|expanded\)\>" " font-style attributes syn keyword cssFontAttr contained italic oblique " font-synthesis attributes @@ -258,89 +263,89 @@ syn keyword cssFontAttr contained auto block swap fallback optional " Webkit specific property/attributes syn match cssFontProp contained "\" -syn match cssFontAttr contained "\<\(subpixel-\)\=\antialiased\>" +syn match cssFontAttr contained "\<\%(subpixel-\)\=\antialiased\>" " CSS Multi-column Layout Module " http://www.w3.org/TR/css3-multicol/ -syn match cssMultiColumnProp contained "\" -syn match cssMultiColumnProp contained "\" +syn match cssMultiColumnProp contained "\" +syn match cssMultiColumnProp contained "\" syn keyword cssMultiColumnProp contained columns syn keyword cssMultiColumnAttr contained balance medium syn keyword cssMultiColumnAttr contained always left right page column -syn match cssMultiColumnAttr contained "\" +syn match cssMultiColumnAttr contained "\" " http://www.w3.org/TR/css3-break/#page-break -syn match cssMultiColumnProp contained "\" +syn match cssMultiColumnProp contained "\" " http://www.w3.org/TR/SVG11/interact.html syn match cssInteractProp contained "\" -syn match cssInteractAttr contained "\<\(visible\)\=\(Painted\|Fill\|Stroke\)\=\>" +syn match cssInteractAttr contained "\<\%(visible\)\=\%(Painted\|Fill\|Stroke\)\=\>" " TODO find following items in w3c docs. syn keyword cssGeneratedContentProp contained quotes crop -syn match cssGeneratedContentProp contained "\" +syn match cssGeneratedContentProp contained "\" syn match cssGeneratedContentProp contained "\" syn match cssGeneratedContentProp contained "\" -syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>" +syn match cssGeneratedContentAttr contained "\<\%(no-\)\=\%(open\|close\)-quote\>" " https://www.w3.org/TR/css-grid-1/ syn match cssGridProp contained "\" -syn match cssGridProp contained "\" -syn match cssGridProp contained "\<\(grid-\)\=\(column\|row\)\(-\(start\|end\|gap\)\)\=\>" -syn match cssGridProp contained "\" +syn match cssGridProp contained "\" +syn match cssGridProp contained "\<\%(grid-\)\=\%(column\|row\)\%(-\%(start\|end\|gap\)\)\=\>" +syn match cssGridProp contained "\" syn match cssGridProp contained "\" -syn match cssGridProp contained "\" +syn match cssGridProp contained "\" -syn match cssHyerlinkProp contained "\" +syn match cssHyerlinkProp contained "\" -syn match cssListProp contained "\" -syn match cssListAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>" -syn match cssListAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>" -syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>" +syn match cssListProp contained "\" +syn match cssListAttr contained "\<\%(lower\|upper\)-\%(roman\|alpha\|greek\|latin\)\>" +syn match cssListAttr contained "\<\%(hiragana\|katakana\)\%(-iroha\)\=\>" +syn match cssListAttr contained "\<\%(decimal\%(-leading-zero\)\=\|cjk-ideographic\)\>" syn keyword cssListAttr contained disc circle square hebrew armenian georgian syn keyword cssListAttr contained inside outside " object-fit https://www.w3.org/TR/css-images-3/#the-object-fit -syn match cssObjectProp contained "\" +syn match cssObjectProp contained "\" syn keyword cssObjectAttr contained fill contain cover scale-down syn keyword cssPositioningProp contained bottom clear clip display float left syn keyword cssPositioningProp contained position right top visibility syn match cssPositioningProp contained "\" syn keyword cssPositioningAttr contained block compact grid -syn match cssPositioningAttr contained "\" +syn match cssPositioningAttr contained "\" syn keyword cssPositioningAttr contained left right both syn match cssPositioningAttr contained "\" -syn match cssPositioningAttr contained "\" -syn match cssPositioningAttr contained "\" +syn match cssPositioningAttr contained "\" +syn match cssPositioningAttr contained "\" syn keyword cssPositioningAttr contained static relative absolute fixed subgrid sticky syn keyword cssPrintAttr contained landscape portrait crop cross always -syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>" +syn match cssTableProp contained "\<\%(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>" syn keyword cssTableAttr contained fixed collapse separate show hide once always syn keyword cssTextProp contained color direction hyphens -syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>" -syn match cssTextProp contained "\" -syn match cssTextProp contained "\<\(word\|line\)-break\|\(overflow\|word\)-wrap\>" +syn match cssTextProp "\<\%(\%(word\|letter\)-spacing\|text\%(-\%(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\<\%(word\|line\)-break\|\%(overflow\|word\)-wrap\>" syn match cssTextProp contained "\" syn match cssTextProp contained "\" syn match cssTextProp contained "\" syn match cssTextProp contained "\" syn match cssTextAttr contained "\" -syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>" +syn match cssTextAttr contained "\<\%(text-\)\=\%(top\|bottom\)\>" syn keyword cssTextAttr contained ltr rtl embed nowrap syn keyword cssTextAttr contained underline overline blink sub super middle syn keyword cssTextAttr contained capitalize uppercase lowercase syn keyword cssTextAttr contained justify baseline sub super syn keyword cssTextAttr contained optimizeLegibility optimizeSpeed geometricPrecision -syn match cssTextAttr contained "\" -syn match cssTextAttr contained "\<\(allow\|force\)-end\>" +syn match cssTextAttr contained "\" +syn match cssTextAttr contained "\<\%(allow\|force\)-end\>" syn keyword cssTextAttr contained start end adjacent -syn match cssTextAttr contained "\" +syn match cssTextAttr contained "\" syn keyword cssTextAttr contained distribute kashida first last syn keyword cssTextAttr contained clip ellipsis unrestricted suppress syn match cssTextAttr contained "\" @@ -348,40 +353,40 @@ syn match cssTextAttr contained "\" syn keyword cssTextAttr contained manual syn match cssTextAttr contained "\" -syn match cssTransformProp contained "\" -syn match cssTransformProp contained "\" +syn match cssTransformProp contained "\" +syn match cssTransformProp contained "\" syn match cssTransformProp contained "\" " CSS Transitions " http://www.w3.org/TR/css3-transitions/ -syn match cssTransitionProp contained "\" +syn match cssTransitionProp contained "\" " transition-time-function attributes -syn match cssTransitionAttr contained "\" -syn match cssTransitionAttr contained "\" -syn match cssTransitionAttr contained "\" +syn match cssTransitionAttr contained "\" +syn match cssTransitionAttr contained "\" +syn match cssTransitionAttr contained "\" "------------------------------------------------ " CSS Basic User Interface Module Level 3 (CSS3 UI) " http://www.w3.org/TR/css3-ui/ syn match cssUIProp contained "\" -syn match cssUIAttr contained "\<\(content\|padding\|border\)\(-box\)\=\>" +syn match cssUIAttr contained "\<\%(content\|padding\|border\)\%(-box\)\=\>" syn keyword cssUIProp contained cursor -syn match cssUIAttr contained "\<\(\([ns]\=[ew]\=\)\|col\|row\|nesw\|nwse\)-resize\>" +syn match cssUIAttr contained "\<\%(\%([ns]\=[ew]\=\)\|col\|row\|nesw\|nwse\)-resize\>" syn keyword cssUIAttr contained crosshair help move pointer alias copy syn keyword cssUIAttr contained progress wait text cell move syn match cssUIAttr contained "\" syn match cssUIAttr contained "\" syn match cssUIAttr contained "\" syn match cssUIAttr contained "\" -syn match cssUIAttr contained "\<\(vertical-\)\=text\>" -syn match cssUIAttr contained "\" +syn match cssUIAttr contained "\<\%(vertical-\)\=text\>" +syn match cssUIAttr contained "\" syn match cssUIProp contained "\" syn keyword cssUIAttr contained active inactive disabled -syn match cssUIProp contained "\" -syn match cssUIProp contained "\" +syn match cssUIProp contained "\" +syn match cssUIProp contained "\" syn keyword cssUIAttr contained invert syn keyword cssUIProp contained icon resize @@ -401,27 +406,27 @@ syn match cssUIAttr contained '\' syn match cssIEUIAttr contained '\' " Webkit/iOS specific properties -syn match cssUIProp contained '\<\(tap-highlight-color\|user-select\|touch-callout\)\>' +syn match cssUIProp contained '\<\%(tap-highlight-color\|user-select\|touch-callout\)\>' " IE specific properties -syn match cssIEUIProp contained '\<\(interpolation-mode\|zoom\|filter\)\>' +syn match cssIEUIProp contained '\<\%(interpolation-mode\|zoom\|filter\)\>' " Webkit/Firebox specific properties/attributes syn keyword cssUIProp contained appearance syn keyword cssUIAttr contained window button field icon document menu -syn match cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>" -syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numeral\|header\)\)\=\)\>" +syn match cssAuralProp contained "\<\%(pause\|cue\)\%(-\%(before\|after\)\)\=\>" +syn match cssAuralProp contained "\<\%(play-during\|speech-rate\|voice-family\|pitch\%(-range\)\=\|speak\%(-\%(punctuation\|numeral\|header\)\)\=\)\>" syn keyword cssAuralProp contained volume during azimuth elevation stress richness -syn match cssAuralAttr contained "\<\(x-\)\=\(soft\|loud\)\>" +syn match cssAuralAttr contained "\<\%(x-\)\=\%(soft\|loud\)\>" syn keyword cssAuralAttr contained silent syn match cssAuralAttr contained "\" syn keyword cssAuralAttr contained non mix -syn match cssAuralAttr contained "\<\(left\|right\)-side\>" -syn match cssAuralAttr contained "\<\(far\|center\)-\(left\|center\|right\)\>" +syn match cssAuralAttr contained "\<\%(left\|right\)-side\>" +syn match cssAuralAttr contained "\<\%(far\|center\)-\%(left\|center\|right\)\>" syn keyword cssAuralAttr contained leftwards rightwards behind syn keyword cssAuralAttr contained below level above lower higher -syn match cssAuralAttr contained "\<\(x-\)\=\(slow\|fast\|low\|high\)\>" +syn match cssAuralAttr contained "\<\%(x-\)\=\%(slow\|fast\|low\|high\)\>" syn keyword cssAuralAttr contained faster slower syn keyword cssAuralAttr contained male female child code digits continuous @@ -431,15 +436,15 @@ syn match cssMobileTextProp contained "\" syn keyword cssMediaProp contained width height orientation scan syn keyword cssMediaProp contained any-hover any-pointer color-gamut grid hover syn keyword cssMediaProp contained overflow-block overflow-inline pointer update -syn match cssMediaProp contained /\<\(\(max\|min\)-\)\=\(\(device\)-\)\=aspect-ratio\>/ -syn match cssMediaProp contained /\<\(\(max\|min\)-\)\=device-pixel-ratio\>/ -syn match cssMediaProp contained /\<\(\(max\|min\)-\)\=device-\(height\|width\)\>/ -syn match cssMediaProp contained /\<\(\(max\|min\)-\)\=\(height\|width\|resolution\|monochrome\|color\(-index\)\=\)\>/ +syn match cssMediaProp contained /\<\%(\%(max\|min\)-\)\=\%(\%(device\)-\)\=aspect-ratio\>/ +syn match cssMediaProp contained /\<\%(\%(max\|min\)-\)\=device-pixel-ratio\>/ +syn match cssMediaProp contained /\<\%(\%(max\|min\)-\)\=device-\%(height\|width\)\>/ +syn match cssMediaProp contained /\<\%(\%(max\|min\)-\)\=\%(height\|width\|resolution\|monochrome\|color\%(-index\)\=\)\>/ syn keyword cssMediaAttr contained portrait landscape progressive interlace syn keyword cssMediaAttr contained coarse fast fine hover infinite p3 paged syn keyword cssMediaAttr contained rec2020 scroll slow srgb -syn match cssKeyFrameProp contained /\(\d\+\(\.\d\+\)\?%\|\(\\)\)/ nextgroup=cssDefinition -syn match cssPageMarginProp /@\(\(top\|left\|right\|bottom\)-\(left\|center\|right\|middle\|bottom\)\)\(-corner\)\=/ contained nextgroup=cssDefinition +syn match cssKeyFrameProp contained /\%(\d\+\%(\.\d\+\)\?%\|\%(\\)\)/ nextgroup=cssDefinition +syn match cssPageMarginProp /@\%(\%(top\|left\|right\|bottom\)-\%(left\|center\|right\|middle\|bottom\)\)\%(-corner\)\=/ contained nextgroup=cssDefinition syn keyword cssPageProp contained content size syn keyword cssPageProp contained orphans widows syn keyword cssFontDescriptorProp contained src @@ -459,18 +464,18 @@ syn match cssAttrComma "," syn match cssPseudoClass ":[A-Za-z0-9_-]*" contains=cssNoise,cssPseudoClassId,cssUnicodeEscape,cssVendor,cssPseudoClassFn syn keyword cssPseudoClassId contained link visited active hover before after left right syn keyword cssPseudoClassId contained root empty target enabled disabled checked invalid -syn match cssPseudoClassId contained "\" -syn match cssPseudoClassId contained "\<\(first\|last\|only\)-\(of-type\|child\)\>" -syn match cssPseudoClassId contained "\" -syn region cssPseudoClassFn contained matchgroup=cssFunctionName start="\<\(not\|is\|lang\|\(nth\|nth-last\)-\(of-type\|child\)\)(" end=")" contains=cssStringQ,cssStringQQ,cssTagName,cssAttributeSelector,cssClassName,cssIdentifier +syn match cssPseudoClassId contained "\" +syn match cssPseudoClassId contained "\<\%(first\|last\|only\)-\%(of-type\|child\)\>" +syn match cssPseudoClassId contained "\" +syn region cssPseudoClassFn contained matchgroup=cssFunctionName start="\<\%(not\|is\|lang\|\%(nth\|nth-last\)-\%(of-type\|child\)\)(" end=")" contains=cssStringQ,cssStringQQ,cssTagName,cssAttributeSelector,cssClassName,cssIdentifier " ------------------------------------ " Vendor specific properties syn match cssPseudoClassId contained "\" -syn match cssPseudoClassId contained "\<\(input-\)\=placeholder\>" +syn match cssPseudoClassId contained "\<\%(input-\)\=placeholder\>" " Misc highlight groups -syntax match cssUnitDecorators /\(#\|-\|+\|%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\|ch\|rem\|vh\|vw\|vmin\|vmax\|dpi\|dppx\|dpcm\|Hz\|kHz\|s\|ms\|deg\|grad\|rad\)/ contained -syntax match cssNoise contained /\(:\|;\|\/\)/ +syntax match cssUnitDecorators /\%(#\|-\|+\|%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\|ch\|rem\|vh\|vw\|vmin\|vmax\|dpi\|dppx\|dpcm\|Hz\|kHz\|s\|ms\|deg\|grad\|rad\)/ contained +syntax match cssNoise contained /\%(:\|;\|\/\)/ " Comment syn region cssComment start="/\*" end="\*/" contains=@Spell fold @@ -482,7 +487,7 @@ syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEsc syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ " Vendor Prefix -syn match cssVendor contained "-\(webkit\|moz\|o\|ms\)-" +syn match cssVendor contained "-\%(webkit\|moz\|o\|ms\)-" " Various CSS Hack characters " In earlier versions of IE (6 and 7), one can prefix property names @@ -490,18 +495,18 @@ syn match cssVendor contained "-\(webkit\|moz\|o\|ms\)-" " This is purely decorative and therefore we assign to the same highlight " group to cssVendor, for more information: " http://www.paulirish.com/2009/browser-specific-css-hacks/ -syn match cssHacks contained /\(_\|*\)/ +syn match cssHacks contained /\%(_\|*\)/ " Attr Enhance " Some keywords are both Prop and Attr, so we have to handle them " cssPseudoClassId is hidden by cssAttrRegion, so we add it here. see #69 -syn region cssAttrRegion start=/:/ end=/\ze\(;\|)\|}\|{\)/ contained contains=cssPseudoClassId,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise +syn region cssAttrRegion start=/:/ end=/\ze\%(;\|)\|}\|{\)/ contained contains=cssPseudoClassId,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise " Hack for transition " 'transition' has Props after ':'. -syn region cssAttrRegion start=/transition\s*:/ end=/\ze\(;\|)\|}\)/ contained contains=css.*Prop,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise +syn region cssAttrRegion start=/transition\s*:/ end=/\ze\%(;\|)\|}\)/ contained contains=css.*Prop,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise -syn match cssAtKeyword /@\(font-face\|media\|keyframes\|import\|charset\|namespace\|page\|supports\)/ +syn match cssAtKeyword /@\%(font-face\|media\|keyframes\|import\|charset\|namespace\|page\|supports\)/ syn keyword cssAtRuleLogical only not and contained @@ -513,10 +518,10 @@ syn keyword cssMediaType contained screen print aural braille embossed handheld " @page " http://www.w3.org/TR/css3-page/ syn region cssAtRule start=/@page\>/ end=/\ze{/ skipwhite skipnl matchgroup=cssAtKeyword contains=cssPagePseudo,cssComment nextgroup=cssDefinition -syn match cssPagePseudo /:\(left\|right\|first\|blank\)/ contained skipwhite skipnl +syn match cssPagePseudo /:\%(left\|right\|first\|blank\)/ contained skipwhite skipnl " @keyframe " http://www.w3.org/TR/css3-animations/#keyframes -syn region cssAtRule start=/@\(-[a-z]\+-\)\=keyframes\>/ end=/\ze{/ skipwhite skipnl matchgroup=cssAtKeyword contains=cssVendor,cssComment nextgroup=cssDefinition +syn region cssAtRule start=/@\%(-[a-z]\+-\)\=keyframes\>/ end=/\ze{/ skipwhite skipnl matchgroup=cssAtKeyword contains=cssVendor,cssComment nextgroup=cssDefinition syn region cssAtRule start=/@import\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssAtKeyword,cssURL,cssMediaProp,cssValueLength,cssAtRuleLogical,cssValueInteger,cssMediaAttr,cssMediaType syn region cssAtRule start=/@charset\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssAtKeyword diff --git a/runtime/syntax/debcontrol.vim b/runtime/syntax/debcontrol.vim index e98a6d3f36..7b4d14062a 100644 --- a/runtime/syntax/debcontrol.vim +++ b/runtime/syntax/debcontrol.vim @@ -3,7 +3,7 @@ " Maintainer: Debian Vim Maintainers " Former Maintainers: Gerfried Fuchs " Wichert Akkerman -" Last Change: 2025 Jul 05 +" Last Change: 2026 Jan 20 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcontrol.vim " Standard syntax initialization @@ -34,7 +34,7 @@ exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureKerne exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureAnyKernelArch) exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureArchs) -" Keep in sync with https://metadata.ftp-master.org/sections.822 +" Keep in sync with https://metadata.ftp-master.debian.org/sections.822 " curl -q https://metadata.ftp-master.debian.org/sections.822 2>/dev/null| grep-dctrl -n --not -FSection -sSection / - let s:sections = [ \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug' @@ -74,14 +74,32 @@ syn match debcontrolEmail "<.\{-}>" " #-Comments syn match debcontrolComment "^#.*$" contains=@Spell +" Build profiles +" Since there's no official spec for the field, use dpkg's parsing +" (from BuildProfiles.pm) as the de facto spec +syn match debcontrolBuildProfile "<\@" contained + +" Architecture specification for a package relationship +let s:all_archs = join(g:debArchitectureKernelAnyArch, '\|') + \. '\|' + \. join(g:debArchitectureAnyKernelArch, '\|') + \. '\|' + \. join(g:debArchitectureArchs, '\|') +exe 'syn match debcontrolArchSpec "\[\s*!\=\%('. s:all_archs .'\)\%(\s\+!\=\%('. s:all_archs. '\)\)*\s*\]" contained' +unlet s:all_archs + syn case ignore " Handle all fields from deb-src-control(5) " Catch-all for the legal fields -syn region debcontrolField matchgroup=debcontrolKey start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\|\%(XS-\)\=Testsuite\%(-Triggers\)\=\|Build-Profiles\|Tag\|Subarchitecture\|Kernel-Version\|Installer-Menu-Item\): " end="$" contains=debcontrolVariable,debcontrolEmail oneline -syn region debcontrolMultiField matchgroup=debcontrolKey start="^\%(Build-\%(Conflicts\|Depends\)\%(-Arch\|-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Breaks\|Enhances\|Replaces\|Conflicts\|Provides\|Built-Using\|Static-Built-Using\|Uploaders\|X[SBC]\{0,3\}\%(Private-\)\=-[-a-zA-Z0-9]\+\): *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment -syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell +syn region debcontrolField matchgroup=debcontrolKey start="^\%(XSBC-Original-\)\=Maintainer: " end="$" contains=debcontrolVariable,debcontrolEmail oneline +syn region debcontrolField matchgroup=debcontrolKey start="^Build-Profiles: " end="$" contains=debcontrolVariable,debcontrolBuildProfile oneline +syn region debcontrolField matchgroup=debcontrolKey start="^\%(Standards-Version\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\|\%(XS-\)\=Testsuite\%(-Triggers\)\=\|Build-Driver\|Tag\|Subarchitecture\|Kernel-Version\|Installer-Menu-Item\): " end="$" contains=debcontrolVariable oneline +syn region debcontrolMultiField matchgroup=debcontrolKey start="^\%(Build-\%(Conflicts\|Depends\)\%(-Arch\|-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Breaks\|Enhances\|Replaces\|Conflicts\|Provides\|Built-Using\|Static-Built-Using\): *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolVariable,debcontrolComment,debcontrolBuildProfile,debcontrolArchSpec +syn region debcontrolMultiField matchgroup=debcontrolKey start="^X[SBC]\{0,3\}\%(Private-\)\=-[-a-zA-Z0-9]\+: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolVariable,debcontrolComment +syn region debcontrolMultiField matchgroup=debcontrolKey start="^Uploaders: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment +syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolVariable,debcontrolComment,@Spell " Fields for which we do strict syntax checking syn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline @@ -96,7 +114,7 @@ syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend syn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline -syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline +syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(\%(Build-\)\=Essential\|Protected\): *" end="$" contains=debcontrolYesNo oneline syn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline @@ -113,6 +131,8 @@ hi def link debcontrolPriority Normal hi def link debcontrolSection Normal hi def link debcontrolPackageType Normal hi def link debcontrolVariable Identifier +hi def link debcontrolArchSpec Identifier +hi def link debcontrolBuildProfile Identifier hi def link debcontrolEmail Identifier hi def link debcontrolVcsSvn Identifier hi def link debcontrolVcsCvs Identifier diff --git a/runtime/syntax/django.vim b/runtime/syntax/django.vim index 76b47d2e59..0d0c11b510 100644 --- a/runtime/syntax/django.vim +++ b/runtime/syntax/django.vim @@ -2,6 +2,9 @@ " Language: Django template " Maintainer: Dave Hodder " Last Change: 2021 Nov 29 +" 2026 Feb 12 by Vim Project add partial support #19386 +" 2026 Apr 17 by Vim Project Update to Django 5.2 version #19994 +" 2026 May 17 by Vim Project Update comparison operators #20225 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -16,28 +19,28 @@ syn match djangoError "%}\|}}\|#}" " Django template built-in tags and parameters " 'comment' doesn't appear here because it gets special treatment syn keyword djangoStatement contained autoescape csrf_token empty -" FIXME ==, !=, <, >, <=, and >= should be djangoStatements: -" syn keyword djangoStatement contained == != < > <= >= syn keyword djangoStatement contained and as block endblock by cycle debug else elif syn keyword djangoStatement contained extends filter endfilter firstof for syn keyword djangoStatement contained endfor if endif ifchanged endifchanged -syn keyword djangoStatement contained ifequal endifequal ifnotequal -syn keyword djangoStatement contained endifnotequal in include load not now or -syn keyword djangoStatement contained parsed regroup reversed spaceless -syn keyword djangoStatement contained endspaceless ssi templatetag openblock +syn keyword djangoStatement contained in include load not now +syn keyword djangoStatement contained regroup reversed spaceless +syn keyword djangoStatement contained endspaceless templatetag openblock syn keyword djangoStatement contained closeblock openvariable closevariable -syn keyword djangoStatement contained openbrace closebrace opencomment +syn keyword djangoStatement contained openbrace closebrace opencomment or syn keyword djangoStatement contained closecomment widthratio url with endwith -syn keyword djangoStatement contained get_current_language trans noop blocktrans -syn keyword djangoStatement contained endblocktrans get_available_languages -syn keyword djangoStatement contained get_current_language_bidi plural +syn keyword djangoStatement contained get_current_language noop get_available_languages +syn keyword djangoStatement contained get_current_language_bidi get_language_info plural syn keyword djangoStatement contained translate blocktranslate endblocktranslate +syn keyword djangoStatement contained partialdef endpartialdef partial +syn keyword djangoStatement contained querystring lorem verbatim localize endlocalize +syn keyword djangoStatement contained localtime endlocaltime timezone endtimezone +syn keyword djangoStatement contained get_current_timezone " Django templete built-in filters syn keyword djangoFilter contained add addslashes capfirst center cut date syn keyword djangoFilter contained default default_if_none dictsort syn keyword djangoFilter contained dictsortreversed divisibleby escape escapejs -syn keyword djangoFilter contained filesizeformat first fix_ampersands +syn keyword djangoFilter contained filesizeformat first syn keyword djangoFilter contained floatformat get_digit join last length length_is syn keyword djangoFilter contained linebreaks linebreaksbr linenumbers ljust syn keyword djangoFilter contained lower make_list phone2numeric pluralize @@ -46,6 +49,8 @@ syn keyword djangoFilter contained safe safeseq stringformat striptags syn keyword djangoFilter contained time timesince timeuntil title truncatechars syn keyword djangoFilter contained truncatewords truncatewords_html unordered_list upper urlencode syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno +syn keyword djangoFilter contained force_escape iriencode json_script truncatechars_html +syn keyword djangoFilter contained localize unlocalize localtime utc timezone " Keywords to highlight within comments syn keyword djangoTodo contained TODO FIXME XXX @@ -65,6 +70,9 @@ syn region djangoVarBlock start="{{" end="}}" contains=djangoFilter,djangoArgume syn region djangoComment start="{%\s*comment\(\s\+.\{-}\)\?%}" end="{%\s*endcomment\s*%}" contains=djangoTodo syn region djangoComBlock start="{#" end="#}" contains=djangoTodo +" Match comparison operators within Django statements. +syn match djangoOperator "==\|!=\|<=\|>=\|<\|>" contained containedin=djangoTagBlock + " Define the default highlighting. " Only when an item doesn't have highlighting yet @@ -79,6 +87,6 @@ hi def link djangoError Error hi def link djangoComment Comment hi def link djangoComBlock Comment hi def link djangoTodo Todo - +hi def link djangoOperator Operator let b:current_syntax = "django" diff --git a/runtime/syntax/dockerfile.vim b/runtime/syntax/dockerfile.vim index f1d612f4ad..17b32d2942 100644 --- a/runtime/syntax/dockerfile.vim +++ b/runtime/syntax/dockerfile.vim @@ -1,6 +1,7 @@ " dockerfile.vim - Syntax highlighting for Dockerfiles " Maintainer: Honza Pokorny " Last Change: 2024 Dec 20 +" 2026 Mar 26 by Vim Project: dockerfileShell comments (#19829) " License: BSD " https://docs.docker.com/engine/reference/builder/ @@ -31,7 +32,7 @@ syntax match dockerfileInstruction contained /\v<(SHELL|VOLUME)>/ syntax region dockerfileString contained start=/\v"/ skip=/\v\\./ end=/\v"/ syntax region dockerfileJSON contained keepend start=/\v\[/ skip=/\v\\\_./ end=/\v$/ contains=@JSON -syntax region dockerfileShell contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=@Shell +syntax region dockerfileShell contained keepend start=/\v/ skip=/\v\\\_.|^\s*#.*/ end=/\v$/ contains=@Shell syntax region dockerfileValue contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=dockerfileString syntax region dockerfileComment start=/\v^\s*#/ end=/\v$/ contains=@Spell diff --git a/runtime/syntax/env.vim b/runtime/syntax/env.vim new file mode 100644 index 0000000000..a33eb045da --- /dev/null +++ b/runtime/syntax/env.vim @@ -0,0 +1,28 @@ +" Vim syntax file +" Language: env +" Maintainer: DuckAfire +" Last Change: 2026 Jan 27 +" Version: 2 +" Changelog: +" 0. Create syntax file. +" 1. Remove unused variable (g:main_syntax). +" 2. Apply changes required by github@dkearns + +if exists("b:current_syntax") + finish +endif + +syn match envField nextgroup=envValue /^\h\%(\w\|\.\)*/ +syn region envValue matchgroup=Operator start=/=/ end=/$/ +syn match envComment contains=envTodo,envTitles /^#.*$/ +syn keyword envTodo contained CAUTION NOTE TODO WARN WARNING +syn match envTitle contained /^\s*#\s*\zs[A-Z0-9][A-Z0-9 ]*:/ + +hi def link envField Identifier +hi def link envValue String +hi def link envComment Comment +hi def link envTodo Todo +hi def link envTitle PreProc + +let b:current_syntax = "env" + diff --git a/runtime/syntax/erlang.vim b/runtime/syntax/erlang.vim index 3ef2c8d410..71084ac1dd 100644 --- a/runtime/syntax/erlang.vim +++ b/runtime/syntax/erlang.vim @@ -3,7 +3,7 @@ " Maintainer: Csaba Hoch " Contributor: Adam Rutkowski " Johannes Christ -" Last Update: 2025-Jul-06 +" Last Update: 2026-Jun-14 " License: Vim license " URL: https://github.com/vim-erlang/vim-erlang-runtime @@ -178,8 +178,38 @@ syn match erlangQuotedAtomModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' con syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' " Operators, separators -syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|=>\|:=\|?=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' +syn match erlangOperator '=' +syn match erlangOperator '+' +syn match erlangOperator '-' +syn match erlangOperator '*' +syn match erlangOperator '/' +syn match erlangOperator '<' +syn match erlangOperator '>' +syn match erlangOperator '!' +syn match erlangOperator '=<' +syn match erlangOperator '>=' +syn match erlangOperator '=>' +syn match erlangOperator '==' +syn match erlangOperator '=:=' +syn match erlangOperator '/=' +syn match erlangOperator '=/=' +syn match erlangOperator ':=' +syn match erlangOperator '?=' +syn match erlangOperator '++' +syn match erlangOperator '--' +syn match erlangOperator '<-' + +" erlangEqualsBinary makes the syntax reflect how Erlang parses the following: +" +" A=<<<"binary">> +" Valid, same as: A =< <<"binary">> +" A==<<"binary">> +" Valid, same as: A == <<"binary">> +" A=<<"binary">> +" Invalid, parsed as: A =< <"binary">>. This is invalid because there are no +" "<<" before the binary, only "<". syn match erlangEqualsBinary '=<<\%(<\)\@!' + syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse syn match erlangBracket '{\|}\|\[\|]\||\|||' syn match erlangPipe '|' @@ -207,7 +237,7 @@ syn region erlangQuotedRecord start=/#\s*'/ end=/'/ contains=erlangQuoted syn match erlangShebang '^#!.*' " Bitstrings -syn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment +syn match erlangBitType '\%#=1\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\<\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\<\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment " Constants and Directives syn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment @@ -217,7 +247,7 @@ syn match erlangInnerDocAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(moduledoc\|doc\)\> syn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment syn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment -syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment +syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|if\|elif\|endif\)\>' contains=erlangComment syn match erlangType '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|nominal\|callback\)\>' contains=erlangComment " Keywords diff --git a/runtime/syntax/eruby.vim b/runtime/syntax/eruby.vim index 3d1bf715db..469408752e 100644 --- a/runtime/syntax/eruby.vim +++ b/runtime/syntax/eruby.vim @@ -2,7 +2,6 @@ " Language: eRuby " Maintainer: Tim Pope " URL: https://github.com/vim-ruby/vim-ruby -" Release Coordinator: Doug Kearns " Last Change: 2022 Mar 18 if exists("b:current_syntax") diff --git a/runtime/syntax/fstab.vim b/runtime/syntax/fstab.vim index 442bc94f3c..a7ec978be3 100644 --- a/runtime/syntax/fstab.vim +++ b/runtime/syntax/fstab.vim @@ -2,8 +2,8 @@ " Language: fstab file " Maintainer: Radu Dineiu " URL: https://raw.github.com/rid9/vim-fstab/master/syntax/fstab.vim -" Last Change: 2025 Aug 21 -" Version: 1.7.0 +" Last Change: 2026 Feb 14 +" Version: 1.7.1 " " Credits: " David Necas (Yeti) @@ -21,6 +21,7 @@ " " Changelog: " - 2025 Aug 21 added support for mtab +" - 2026 Feb 14 added cgroup2 to device types " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -38,7 +39,7 @@ syn match fsOperator /[,=:#]/ " Device syn cluster fsDeviceCluster contains=fsOperator,fsDeviceKeyword,fsDeviceError syn match fsDeviceError /\%([^a-zA-Z0-9_\/#@:\.-]\|^\w\{-}\ze\W\)/ contained -syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs tracefs overlay +syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs tracefs overlay cgroup2 syn keyword fsDeviceKeyword contained LABEL nextgroup=fsDeviceLabel syn keyword fsDeviceKeyword contained UUID nextgroup=fsDeviceUUID syn keyword fsDeviceKeyword contained PARTLABEL nextgroup=fsDevicePARTLABEL diff --git a/runtime/syntax/fvwm.vim b/runtime/syntax/fvwm.vim index 2f96bab5bc..cb974a2daf 100644 --- a/runtime/syntax/fvwm.vim +++ b/runtime/syntax/fvwm.vim @@ -3,6 +3,7 @@ " Maintainer: Gautam Iyer " Previous Maintainer: Haakon Riiser " Last Change: Sat 29 Sep 2007 11:08:34 AM PDT +" 2025 Dec 14: Update fvwm2 keywords #18924 " " Thanks to David Necas (Yeti) for adding Fvwm 2.4 support. " @@ -157,7 +158,7 @@ else \ PrintInfo Repeat Schedule State WindowFont \ XSync XSynchronize AnimatedMove \ HideGeometryWindow Layer Lower Move - \ MoveToDesk MoveThreshold MoveToPage + \ MoveToDesk MoveThreshold MoveToPage Resize \ MoveToScreen OpaqueMoveSize PlaceAgain Raise \ RaiseLower ResizeMaximize ResizeMove \ ResizeMoveMaximize RestackTransients @@ -166,7 +167,7 @@ else \ FlipFocus Focus WarpToWindow Close Delete \ Destroy Iconify Recapture RecaptureWindow \ Refresh RefreshWindow Stick StickAcrossPages - \ StickAcrossDesks WindowShade + \ StickAcrossDesks WindowShade Maximize GotoDesk \ WindowShadeAnimate IgnoreModifiers \ EdgeCommand EdgeLeaveCommand GnomeButton \ Stroke StrokeFunc FocusStyle DestroyStyle @@ -186,6 +187,7 @@ else \ QuitSession Restart SaveSession \ SaveQuitSession KeepRc NoWindow Break \ CleanupColorsets EchoFuncDefinition + \ InfoStoreAdd DesktopConfiguration " Conditional commands syn keyword fvwmKeyword nextgroup=fvwmCondition skipwhite @@ -276,7 +278,7 @@ else \ BackColor Colorset HilightFore HilightBack \ HilightColorset BorderColorset \ HilightBorderColorset IconTitleColorset - \ HilightIconTitleColorset + \ HilightIconTitleColorset IconTitleFormat \ IconBackgroundColorset IconTitleRelief \ IconBackgroundRelief IconBackgroundPadding \ Font IconFont StartsOnDesk StartsOnPage @@ -382,6 +384,7 @@ else \ MinOverlapPlacementPenalties \ MinOverlapPercentPlacementPenalties \ MinWindowSize StartShaded + \ EdgeMoveDelay EdgeMoveResistance " Cursor styles syn keyword fvwmKeyword nextgroup=fvwmCursorStyle skipwhite @@ -441,7 +444,8 @@ else syn keyword fvwmBStyleNames contained \ Simple Default Solid Colorset Vector Pixmap \ AdjustedPixmap ShrunkPixmap StretchedPixmap - \ TiledPixmap MiniIcon + \ TiledPixmap MiniIcon MwmDecorMenu MwmDecorMin + \ MwmDecorMax MwmDecorShade MwmDecorStick MwmDecorLayer syn keyword fvwmBStyleFlags contained \ Raised Sunk Flat UseTitleStyle \ UseBorderStyle diff --git a/runtime/syntax/gdb.vim b/runtime/syntax/gdb.vim index c15b96de6f..0955f0f107 100644 --- a/runtime/syntax/gdb.vim +++ b/runtime/syntax/gdb.vim @@ -1,9 +1,11 @@ " Vim syntax file -" Language: GDB command files -" Maintainer: Claudio Fleiner -" URL: http://www.fleiner.com/vim/syntax/gdb.vim -" Last Change: 2021 Nov 15 -" Additional changes by Simon Sobisch +" Language: GDB command files +" Maintainer: Doug Kearns +" Previous Maintainer: Claudio Fleiner +" Last Change: 2026 Feb 08 +" Contributors: Simon Sobisch + +" WARNING: the group names are NOT stable and may change at any time " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -13,92 +15,1631 @@ endif let s:cpo_save = &cpo set cpo&vim -syn keyword gdbInfo contained address architecture args breakpoints catch common copying dcache -syn keyword gdbInfo contained display files float frame functions handle line -syn keyword gdbInfo contained locals program registers scope set sharedlibrary signals -syn keyword gdbInfo contained source sources stack symbol target terminal threads -syn keyword gdbInfo contained syn keyword tracepoints types udot variables warranty watchpoints -syn match gdbInfo contained "all-registers" - - -syn keyword gdbStatement contained actions apply attach awatch backtrace break bt call catch cd clear collect commands -syn keyword gdbStatement contained complete condition continue delete detach directory disable disas[semble] disp[lay] down -syn keyword gdbStatement contained echo else enable end file finish frame handle hbreak help if ignore -syn keyword gdbStatement contained inspect jump kill list load maintenance make next nexti ni output overlay -syn keyword gdbStatement contained passcount path print printf ptype python pwd quit rbreak remote return run rwatch -syn keyword gdbStatement contained search section set sharedlibrary shell show si signal skip source step stepi stepping -syn keyword gdbStatement contained stop target tbreak tdump tfind thbreak thread tp trace tstart tstatus tstop -syn keyword gdbStatement contained tty und[isplay] unset until up watch whatis where while ws x -syn match gdbFuncDef "\.*" -syn match gdbStatementContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef -syn match gdbStatement "^\s*info" nextgroup=gdbInfo skipwhite skipempty - -" some commonly used abbreviations -syn keyword gdbStatement c cont p py - -syn region gdbDocument matchgroup=gdbFuncDef start="\.*$" matchgroup=gdbFuncDef end="^end\s*$" - -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" -syn match gdbStatement "\" - -syn keyword gdbSet annotate architecture args check complaints confirm editing endian -syn keyword gdbSet environment gnutarget height history language listsize print prompt -syn keyword gdbSet radix remotebaud remotebreak remotecache remotedebug remotedevice remotelogbase -syn keyword gdbSet remotelogfile remotetimeout remotewritesize targetdebug variable verbose -syn keyword gdbSet watchdog width write -syn match gdbSet "\" -syn match gdbSet "\" -syn match gdbSet "\" -syn match gdbSet "\" -syn match gdbSet "\" -syn match gdbSet "\" -syn match gdbSet "\" -syn match gdbSet "\" - -syn match gdbComment "^\s*#.*" contains=@Spell - -syn match gdbVariable "\$\K\k*" - -" Strings and constants -syn region gdbString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell +syn iskeyword @,48-57,_,128-167,224-235,- + +" Include {{{1 +" TODO: other languages: ada asm auto c d fortran go local minimal opencl pascal rust unknown +syn include @gdbC syntax/c.vim +unlet b:current_syntax + +syn region gdbExpression contained start="\S" skip="\\$" end="$" contains=@gdbC,gdbLineContinuation transparent + +" Commands {{{1 + +" breakpoints {{{2 +syn keyword gdbCommand contained aw[atch] nextgroup=@gdbWatchOption,gdbExpression skipwhite +syn keyword gdbCommand contained b[reak] +syn keyword gdbCommand contained break-[range] +syn keyword gdbCommand contained cat[ch] nextgroup=gdbCatchArgs skipwhite + syn keyword gdbCatchArgs contained assert catch exception exec fork handlers load rethrow signal syscall throw unload vfork +syn keyword gdbCommand contained cl[ear] cl + +syn match gdbCommand contained "\" nextgroup=gdbBreakpointNumber,gdbBreakpointRange skipwhite + " TODO: move this and generalise to idlist or similar? Where else are id + " numbers and ranges used? Breakpoints include catchpoints and watchpoints. + syn match gdbBreakpointNumber contained "\<\d\+\>" nextgroup=gdbBreakpointNumber,gdbBreakpointRange skipwhite + syn match gdbBreakpointRange contained "\<\d\+-\d\+\>" nextgroup=gdbBreakpointNumber,gdbBreakpointRange skipwhite + syn cluster gdbBreakpointNumbers contains=gdbBreakpointNumber,gdbBreakpointRange + syn match gdbBreakpointCount contained "-\@1" nextgroup=@gdbBreakpointNumbers skipwhite + " TODO: better name + syn keyword gdbCommandsKeyword silent contained + hi def link gdbCommandsKeyword gdbCommand +syn region gdbMultilineCommand contained start="\" matchgroup=gdbCommand end="^\s*\zsend\ze\s*$" contains=gdbCommand,gdbComment,gdbCommandsKeyword transparent fold + +syn keyword gdbCommand contained cond[ition] nextgroup=@gdbConditionOption,gdbConditionBreakpointNumber skipwhite + syn match gdbConditionEndOption contained "--" nextgroup=gdbExpression skipwhite + syn match gdbConditionOption contained "-f\%[orce]\>" nextgroup=gdbConditionEndOption,gdbExpression skipwhite + syn cluster gdbConditionOption contains=gdbConditionOption,gdbConditionEndOption + syn match gdbConditionBreakpointNumber contained "\<\d\+\>" contains=gdbBreakpointNumber nextgroup=gdbExpression skipwhite + +syn keyword gdbCommand contained del[ete] del d nextgroup=@gdbBreakpointNumbers,gdbDeleteArgs skipwhite + syn keyword gdbDeleteArgs contained breakpoints nextgroup=@gdbBreakpointNumbers skipwhite + syn keyword gdbDeleteArgs contained tracepoints tr nextgroup=@gdbBreakpointNumbers skipwhite + syn keyword gdbDeleteArgs contained bookmark checkpoint display mem tvariable +syn keyword gdbCommand contained dis[able] disa dis nextgroup=@gdbBreakpointNumbers,gdbDisableArgs skipwhite + syn keyword gdbDisableArgs contained breakpoints nextgroup=@gdbBreakpointNumbers skipwhite + syn keyword gdbDisableArgs contained display frame-filter mem pretty-printer probes type-printer unwinder xmethod +syn keyword gdbCommand contained dp[rintf] +syn keyword gdbCommand contained e[nable] en nextgroup=gdbEnableArgs skipwhite + syn keyword gdbEnableArgs contained display frame-filter mem pretty-printer probes type-printer unwinder xmethod + syn keyword gdbEnableArgs contained delete once nextgroup=@gdbBreakpointNumbers skipwhite + syn keyword gdbEnableArgs contained count nextgroup=gdbBreakpointCount skipwhite + syn keyword gdbEnableArgs contained breakpoints nextgroup=gdbEnableBreakpointArgs,@gdbBreakpointNumbers skipwhite + syn keyword gdbEnableBreakpointArgs contained count nextgroup=gdbBreakpointCount skipwhite + syn keyword gdbEnableBreakpointArgs contained delete once nextgroup=@gdbBreakpointNumbers skipwhite +syn keyword gdbCommand contained ft[race] +syn keyword gdbCommand contained hb[reak] +syn keyword gdbCommand contained ig[nore] +syn keyword gdbCommand contained rb[reak] +syn keyword gdbCommand contained rw[atch] nextgroup=@gdbWatchOption,gdbExpression skipwhite +syn keyword gdbCommand contained save nextgroup=gdbSaveArgs skipwhite + syn keyword gdbSaveArgs contained breakpoints gdb-index tracepoints +syn keyword gdbCommand contained sk[ip] nextgroup=gdbSkipArgs skipwhite + syn keyword gdbSkipArgs contained delete disable enable file function +syn keyword gdbCommand contained str[ace] +syn keyword gdbCommand contained tb[reak] +syn keyword gdbCommand contained tc[atch] +syn keyword gdbCommand contained tc[atch] nextgroup=gdbCatchArgs skipwhite +syn keyword gdbCommand contained thb[reak] +syn keyword gdbCommand contained tr[ace] tp +syn keyword gdbCommand contained wa[tch] nextgroup=@gdbWatchOption,gdbExpression skipwhite + syn match gdbWatchEndOption contained "--" nextgroup=gdbExpression skipwhite + syn match gdbWatchOption contained "-l\%[ocation]\>" nextgroup=gdbWatchEndOption,gdbExpression skipwhite + syn cluster gdbWatchOption contains=gdbWatchOption,gdbWatchEndOption + +" data {{{2 +syn keyword gdbCommand contained ag[ent-printf] nextgroup=gdbString +syn keyword gdbCommand contained app[end] nextgroup=gdbAppendArgs skipwhite + syn keyword gdbAppendArgs contained b[inary] nextgroup=gdbAppendBinaryArgs skipwhite + syn keyword gdbAppendBinaryArgs contained m[emory] v[alue] nextgroup=gdbAppendBinaryArgs skipwhite + syn keyword gdbAppendArgs contained m[emory] v[alue] +syn keyword gdbCommand contained ca[ll] +syn keyword gdbCommand contained disas[semble] +syn keyword gdbCommand contained disp[lay] nextgroup=gdbFormat skipwhite +syn keyword gdbCommand contained du[mp] nextgroup=gdbDumpArgs skipwhite + " TODO: share subcommand group + syn keyword gdbDumpArgs contained b[inary] i[hex] s[rec] t[ekhex] va[lue] ve[rilog] nextgroup=gdbDumpBinaryArgs skipwhite + syn keyword gdbDumpArgs contained m[emory] + syn keyword gdbDumpBinaryArgs contained m[emory] v[alue] +syn keyword gdbCommand contained explore nextgroup=gdbExploreArgs skipwhite + syn keyword gdbExploreArgs contained t[ype] v[alue] +syn keyword gdbCommand contained find +syn keyword gdbCommand contained in[it-if-undefined] +syn keyword gdbCommand contained mem +syn keyword gdbCommand contained memo[ry-tag] nextgroup=gdbMemoryTagArgs skipwhite + syn keyword gdbMemoryTagArgs contained c[heck] + syn keyword gdbMemoryTagArgs contained print-a[llocation-tag] + syn keyword gdbMemoryTagArgs contained print-l[ogical-tag] + syn keyword gdbMemoryTagArgs contained s[et-allocation-tag] + syn keyword gdbMemoryTagArgs contained w[ith-logical-tag] +syn keyword gdbCommand contained ou[tput] +syn keyword gdbCommand contained pr[int] ins[pect] p nextgroup=gdbPrintFormat skipwhite + syn match gdbPrintFormat contained "/1\=[oxdutfaicsz]\=" +syn keyword gdbCommand contained print-[object] po +syn keyword gdbCommand contained printf +syn keyword gdbCommand contained pt[ype] +syn keyword gdbCommand contained resto[re] + +" Set command {{{3 +syn keyword gdbCommand contained set nextgroup=gdbSetArgs skipwhite + + " Value types {{{4 + + " Boolean + syn keyword gdbSetBooleanValue contained on of[f] + + " Auto-boolean + syn keyword gdbSetAutoBooleanValue contained on of[f] a[uto] + + " Integer + syn keyword gdbSetIntegerValue contained unlimited + syn match gdbSetIntegerValue contained "[+-]\=\d\+\>" + + " UInteger + syn keyword gdbSetUIntegerValue contained unlimited + syn match gdbSetUIntegerValue contained "\<\d\+\>" + + " ZInteger + syn match gdbSetZIntegerValue contained "[+-]\=\d\+\>" + + " ZUInteger + syn match gdbSetZUIntegerValue contained "\<\d\+\>" + + " ZUIntegerUnlimited + syn keyword gdbSetZUIntegerUnlimitedValue contained unlimited + syn match gdbSetZUIntegerUnlimitedValue contained "-1\>" + syn match gdbSetZUIntegerUnlimitedValue contained "\<\d\+\>" + + " Enum + syn cluster gdbSetAskBooleanValue contains=gdbSetBooleanValue,gdbSetAskValue + syn keyword gdbSetAskValue contained a[sk] + + " String + syn region gdbSetStringValue contained start="\S" skip="\\$" end="\s*$" contains=gdbStringEscape + " StringNoEscape + syn region gdbSetStringNoEscapeValue contained start="\S" skip="\\$" end="\s*$" + + " OptionalFilename + syn match gdbSetOptionalFilenameValue contained "\S\+\%(\s*\S\+\)*" + " Filename + syn match gdbSetFilenameValue contained "\S\+\%(\s*\S\+\)*" + " TODO: better pattern? + " syn match gdbSetFilenameValue contained "\S.\{-}\ze\%(\s*$\)" + " syn region gdbSetFilenameValue contained start="\S" skip="\\$" end=\s*$" + + " Subcommands {{{4 + + syn keyword gdbSetArgs contained ag[ent] con[firm] ed[iting] ob[server] pa[gination] remotec[ache] remotef[low] ve[rbose] wr[ite] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained hei[ght] wi[dth] nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetArgs contained an[notate] compl[aints] wa[tchdog] nextgroup=gdbSetZIntegerValue skipwhite + syn keyword gdbSetArgs contained remotet[imeout] remotea[ddresssize] nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetArgs contained cha[rset] " [charset] + syn keyword gdbSetArgs contained end[ian] nextgroup=gdbSetEndianValue skipwhite + syn keyword gdbSetEndianValue contained auto big little + syn keyword gdbSetArgs contained dir[ectories] nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetArgs contained la[nguage] nextgroup=gdbSetLanguageValue skipwhite + syn keyword gdbSetLanguageValue contained ada asm auto c d fortran go local minimal modula-2 objective-c opencl pascal rust + syn keyword gdbSetLanguageValue contained unknown + syn match gdbSetLanguageValue contained "\" + syn keyword gdbSetArgs contained arg[s] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained cw[d] nextgroup=gdbSetOptionalFilenameValue skipwhite + " TODO: worth including an architecture value? + syn keyword gdbSetArgs contained arc[hitecture] proc[essor] nextgroup=gdbArchitecture skipwhite + syn keyword gdbSetArgs contained env[ironment] " VAR VALUE + syn keyword gdbSetArgs contained lis[tsize] nextgroup=gdbSetIntegerValue skipwhite + " TODO: auto as constant? + syn keyword gdbSetArgs contained gn[utarget] g nextgroup=gdbSetStringNoEscapeValue skipwhite + syn keyword gdbSetArgs contained rad[ix] + syn keyword gdbSetArgs contained os[abi] nextgroup=gdbSetOsabiValue skipwhite + syn keyword gdbSetOsabiValue contained auto default none + syn keyword gdbSetArgs contained pro[mpt] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained remotelogb[ase] nextgroup=gdbSetRemotelogbaseValue skipwhite + syn keyword gdbSetRemotelogbaseValue contained hex octal ascii + syn keyword gdbSetArgs contained remotelogf[ile] nextgroup=gdbSetFilenameValue skipwhite + " TODO: deprecated + syn keyword gdbSetArgs contained remotew[ritesize] + syn keyword gdbSetArgs contained vari[able] var " VAR = EXP + + syn keyword gdbSetArgs contained ad[a] nextgroup=gdbSetAdaArgs skipwhite + syn keyword gdbSetAdaArgs contained p[rint-signatures] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetAdaArgs contained s[ource-charset] nextgroup=gdbSetAdaSourceCharsetValue skipwhite + syn keyword gdbSetAdaSourceCharsetValue contained CP437 CP850 + syn match gdbSetAdaSourceCharsetValue contained "\" + syn keyword gdbSetAdaSourceCharsetValue contained UTF-8 + syn keyword gdbSetAdaArgs contained t[rust-PAD-over-XVS] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained arm nextgroup=gdbSetArmArgs skipwhite + syn keyword gdbSetArmArgs contained apcs32 nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArmArgs contained abi nextgroup=gdbSetArmAbiValue skipwhite + syn keyword gdbSetArmAbiValue contained AAPCS APCS auto + syn keyword gdbSetArmArgs contained disassembler nextgroup=gdbSetArmDisassemblerValue skipwhite + syn keyword gdbSetArmDisassemblerValue contained apcs atpcs gcc raw special-atpcs std + syn keyword gdbSetArmArgs contained fpu nextgroup=gdbSetArmFpuValue skipwhite + syn keyword gdbSetArmFpuValue contained auto fpa softfpa softvfp vfp + syn keyword gdbSetArmArgs contained fallback-mode nextgroup=gdbSetArmFallbackModeValue skipwhite + syn keyword gdbSetArmFallbackModeValue contained arm auto thumb + syn keyword gdbSetArmArgs contained force-mode nextgroup=gdbSetArmForceModeValue skipwhite + syn keyword gdbSetArmForceModeValue contained arm auto thumb + syn keyword gdbSetArgs contained bac[ktrace] nextgroup=gdbSetBacktraceArgs skipwhite + syn keyword gdbSetBacktraceArgs contained l[imit] nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetBacktraceArgs contained past-e[ntry] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetBacktraceArgs contained past-m[ain] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained br[eakpoint] nextgroup=gdbSetBreakpointArgs skipwhite + syn keyword gdbSetBreakpointArgs contained p[ending] nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetBreakpointArgs contained al[ways-inserted] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetBreakpointArgs contained au[to-hw] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetBreakpointArgs contained c[ondition-evaluation] nextgroup=gdbSetBreakpointCondtionEvaluationValue skipwhite + syn keyword gdbSetBreakpointCondtionEvaluationValue contained auto host target + syn keyword gdbSetArgs contained c[heck] ch c nextgroup=gdbSetCheckArgs skipwhite + syn keyword gdbSetCheckArgs contained range nextgroup=gdbSetCheckRangeValue skipwhite + syn keyword gdbSetCheckArgs contained type nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetCheckRangeValue contained on off warn auto + + syn keyword gdbSetArgs contained dc[ache] nextgroup=gdbSetDcacheArgs skipwhite + syn keyword gdbSetDcacheArgs contained size nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDcacheArgs contained line-size nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetArgs contained debugi[nfod] nextgroup=gdbSetDebuginfodArgs skipwhite + syn keyword gdbSetDebuginfodArgs contained enabled nextgroup=@gdbSetAskBooleanValue skipwhite + syn keyword gdbSetDebuginfodArgs contained urls nextgroup=gdbSetStringNoEscapeValue skipwhite + syn keyword gdbSetDebuginfodArgs contained verbose nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetArgs contained for[tran] nextgroup=gdbSetFortranArgs skipwhite + syn keyword gdbSetFortranArgs contained repack-array-slices nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained gu[ile] gu nextgroup=gdbSetGuileArgs skipwhite + syn keyword gdbSetGuileArgs contained print-stack nextgroup=gdbSetGuilePrintStackValue skipwhite + syn keyword gdbSetGuilePrintStackValue contained none full message + syn keyword gdbSetArgs contained hi[story] nextgroup=gdbSetHistoryArgs skipwhite + syn keyword gdbSetHistoryArgs contained expansion save nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetHistoryArgs contained filename nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetHistoryArgs contained size nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetHistoryArgs contained remove-duplicates nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetArgs contained lo[gging] nextgroup=gdbSetLoggingArgs skipwhite + syn keyword gdbSetLoggingArgs contained debugredirect enabled overwrite redirect nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetLoggingArgs contained file nextgroup=gdbSetFilenameValue skipwhite + syn keyword gdbSetArgs contained me[m] nextgroup=gdbSetMemArgs skipwhite + syn keyword gdbSetMemArgs contained inaccessible-by-default + syn keyword gdbSetArgs contained mips nextgroup=gdbSetMipsArgs skipwhite + syn keyword gdbSetMipsArgs contained abi nextgroup=gdbSetMipsAbiValue skipwhite + syn keyword gdbSetMipsAbiValue contained auto eabi32 eabi64 n32 n64 o32 o64 + syn keyword gdbSetMipsArgs contained compression nextgroup=gdbSetMipsCompressionValue skipwhite + syn keyword gdbSetMipsCompressionValue contained micromips mips16 + syn keyword gdbSetMipsArgs contained mask-address nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetArgs contained mipsf[pu] nextgroup=gdbSetMipsfpuValue skipwhite + syn keyword gdbSetMipsfpuValue contained auto double none single 1 0 yes no on off + syn keyword gdbSetArgs contained mp[x] nextgroup=gdbSetMpxArgs skipwhite + syn keyword gdbSetMpxArgs contained bound + syn keyword gdbSetArgs contained po[werpc] nextgroup=gdbSetPowerpcArgs skipwhite + syn keyword gdbSetPowerpcArgs contained exact-watchpoints nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPowerpcArgs contained soft-float nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetPowerpcArgs contained vector-abi nextgroup=gdbSetPowerpcVectorAbiValue skipwhite + syn keyword gdbSetPowerpcVectorAbiValue contained altivec auto generic spe + syn keyword gdbSetArgs contained pri[nt] pr p nextgroup=gdbSetPrintArgs skipwhite + syn keyword gdbSetPrintArgs contained address demangle finish object pretty union vtbl nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained elements repeats nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetPrintArgs contained type nextgroup=gdbSetPrintTypeArgs skipwhite + syn keyword gdbSetPrintTypeArgs contained hex methods typedefs nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintTypeArgs contained nested-type-limit nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetPrintArgs contained array nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained array-indexes nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained asm-demangle nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained entry-values nextgroup=gdbSetPrintEntryValuesValue skipwhite + syn keyword gdbSetPrintEntryValuesValue contained both compact default if-needed no only preferred + syn keyword gdbSetPrintArgs contained frame-arguments nextgroup=gdbSetPrintFrameArgumentsValue skipwhite + syn keyword gdbSetPrintFrameArgumentsValue contained all none presence scalars + syn keyword gdbSetPrintArgs contained frame-info nextgroup=gdbSetPrintFrameInfoValue skipwhite + syn keyword gdbSetPrintFrameInfoValue contained auto location location-and-address short-location source-and-location source-line + syn keyword gdbSetPrintArgs contained inferior-events nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained max-depth nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetPrintArgs contained max-symbolic-offset nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetPrintArgs contained memory-tag-violations nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained null-stop nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained pascal_static-members nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained raw-frame-arguments nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained raw-values nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained sevenbit-strings nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained static-members nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained symbol nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained symbol-filename nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetPrintArgs contained symbol-loading nextgroup=gdbSetSymbolLoadingValue skipwhite + syn keyword gdbSetSymbolLoadingValue contained brief full off + syn keyword gdbSetPrintArgs contained thread-events nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained py[thon] nextgroup=gdbSetPythonArgs skipwhite + syn keyword gdbSetPythonArgs contained dont-write-bytecode nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetPythonArgs contained ignore-environment + syn keyword gdbSetPythonArgs contained print-stack nextgroup=gdbSetPythonPrintStackValue skipwhite + syn keyword gdbSetPythonPrintStackValue contained none full message + syn keyword gdbSetArgs contained rav[enscar] nextgroup=gdbSetRavenscarArgs skipwhite + syn keyword gdbSetRavenscarArgs contained task-switching + syn keyword gdbSetArgs contained rec[ord] rec nextgroup=gdbSetRecordArgs skipwhite + syn keyword gdbSetRecordArgs contained btrace nextgroup=gdbSetRecordBtraceArgs skipwhite + syn keyword gdbSetRecordBtraceArgs contained bts nextgroup=gdbSetRecordBtraceBtsArgs skipwhite + syn keyword gdbSetRecordBtraceBtsArgs contained buffer-size nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetRecordBtraceArgs contained cpu nextgroup=gdbSetRecordBtraceCpuArgs skipwhite + syn keyword gdbSetRecordBtraceCpuArgs contained auto none + syn keyword gdbSetRecordBtraceArgs contained pt nextgroup=gdbSetRecordBtracePtArgs skipwhite + syn keyword gdbSetRecordBtracePtArgs contained buffer-size nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetRecordBtraceArgs contained replay-memory-access nextgroup=gdbSetRecordBtraceReplayMemoryAccessValue skipwhite + syn keyword gdbSetRecordBtraceReplayMemoryAccessValue contained read-only read-write + syn keyword gdbSetRecordArgs contained full nextgroup=gdbSetRecordFullArgs skipwhite + syn keyword gdbSetRecordFullArgs contained insn-number-max nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetRecordFullArgs contained memory-query + syn keyword gdbSetRecordFullArgs contained stop-at-limit + syn keyword gdbSetRecordArgs contained function-call-history-size nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetRecordArgs contained instruction-history-size nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetArgs contained ri[scv] nextgroup=gdbSetRiscvArgs skipwhite + syn keyword gdbSetRiscvArgs contained use-compressed-breakpoints nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetArgs contained se[rial] nextgroup=gdbSetSerialArgs skipwhite + syn keyword gdbSetSerialArgs contained baud nextgroup=gdbSetZIntegerValue skipwhite + syn keyword gdbSetSerialArgs contained parity nextgroup=gdbSetSerialParityValue skipwhite + syn keyword gdbSetSerialParityValue contained none odd + syn keyword gdbSetArgs contained sh nextgroup=gdbSetShArgs skipwhite + syn keyword gdbSetShArgs contained calling-convention nextgroup=gdbSetShCallingConventionValue skipwhite + syn keyword gdbSetShCallingConventionValue contained gcc renesas + syn keyword gdbSetArgs contained sou[rce] nextgroup=gdbSetSourceArgs skipwhite + syn keyword gdbSetSourceArgs contained open + syn keyword gdbSetArgs contained sty[le] nextgroup=gdbSetStyleArgs skipwhite + syn keyword gdbSetStyleArgs contained address nextgroup=gdbSetStyleAddressArgs skipwhite + syn keyword gdbSetStyleAddressArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained disassembler nextgroup=gdbSetStyleDissassemblerArgs skipwhite + syn keyword gdbSetStyleDissassemblerArgs contained enabled nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetStyleArgs contained enabled nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetStyleArgs contained filename nextgroup=gdbSetStyleFilenameArgs skipwhite + syn keyword gdbSetStyleFilenameArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained function nextgroup=gdbSetStyleFunctionArgs skipwhite + syn keyword gdbSetStyleFunctionArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained highlight nextgroup=gdbSetStyleHighlightArgs skipwhite + syn keyword gdbSetStyleHighlightArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained metadata nextgroup=gdbSetStyleMetadataArgs skipwhite + syn keyword gdbSetStyleMetadataArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained sources nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetStyleArgs contained title nextgroup=gdbSetStyleTitleArgs skipwhite + syn keyword gdbSetStyleTitleArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained tui-active-border nextgroup=gdbSetStyleTuiActiveBorderArgs skipwhite + syn keyword gdbSetStyleTuiActiveBorderArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained tui-border nextgroup=gdbSetStyleTuiBorderArgs skipwhite + syn keyword gdbSetStyleTuiBorderArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained variable nextgroup=gdbSetStyleVariableArgs skipwhite + syn keyword gdbSetStyleVariableArgs contained background foreground intensity + syn keyword gdbSetStyleArgs contained version nextgroup=gdbSetStyleVersionArgs skipwhite + syn keyword gdbSetStyleVersionArgs contained background foreground intensity + syn keyword gdbSetArgs contained tc[p] nextgroup=gdbSetTcpArgs skipwhite + syn keyword gdbSetTcpArgs contained auto-retry nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetTcpArgs contained connect-timeout nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetArgs contained td[esc] nextgroup=gdbSetTdescArgs skipwhite + syn keyword gdbSetTdescArgs contained filename nextgroup=gdbSetFilenameValue skipwhite + syn keyword gdbSetArgs contained tu[i] nextgroup=gdbSetTuiArgs skipwhite + syn keyword gdbSetTuiArgs contained active-border-mode + syn keyword gdbSetTuiArgs contained border-kind nextgroup=gdbSetTuiBorderKindValue skipwhite + syn keyword gdbSetTuiBorderKindValue contained asc ascii space + syn keyword gdbSetTuiArgs contained border-mode nextgroup=gdbSetTuiBorderModeValue skipwhite + syn keyword gdbSetTuiBorderModeValue contained normal standout reverse half half-standout bold bold-standout + syn keyword gdbSetTuiArgs contained compact-source + syn keyword gdbSetTuiArgs contained tab-width nextgroup=gdbSetZUIntegerValue skipwhite + + syn keyword gdbSetArgs contained auto-c[onnect-native-target] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained auto-l[oad] nextgroup=gdbSetAutoloadValue,gdbSetAutoloadArgs skipwhite + syn keyword gdbSetAutoloadValue contained no off 0 + syn keyword gdbSetAutoloadArgs contained gdb-scripts nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetAutoloadArgs contained guile-scripts nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetAutoloadArgs contained libthread-db nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetAutoloadArgs contained local-gdbinit nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetAutoloadArgs contained python-scripts nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetAutoloadArgs contained safe-path nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetAutoloadArgs contained scripts-directory nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetArgs contained auto-s[olib-add] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained bas[enames-may-differ] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained can[-use-hw-watchpoints] nextgroup=gdbSetZIntegerValue skipwhite + syn keyword gdbSetArgs contained cas[e-sensitive] nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetArgs contained ci[rcular-trace-buffer] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained cod[e-cache] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained coe[rce-float-to-double] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained compile-a[rgs] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained compile-g[cc] nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetArgs contained cp[-abi] nextgroup=gdbSetCpAbiValue skipwhite + syn keyword gdbSetCpAbiValue contained auto gnu-v2 gnu-v3 + syn keyword gdbSetArgs contained cris-d[warf2-cfi] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained cris-m[ode] nextgroup=gdbSetCrisModeValue skipwhite + syn keyword gdbSetCrisModeValue contained guru normal + syn keyword gdbSetArgs contained cris-v[ersion] nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetArgs contained data-directory nextgroup=gdbSetFilenameValue skipwhite + syn keyword gdbSetArgs contained debug nextgroup=gdbSetDebugArgs skipwhite + syn keyword gdbSetDebugArgs contained arch bpf expression microblaze mips overload record serial target varobj xtensa nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained aarch64 arc arm csky displaced frame infrun hppa jit nios2 notification observer or1k parser nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained riscv nextgroup=gdbSetDebugRiscvArgs skipwhite + syn keyword gdbSetDebugRiscvArgs contained breakpoints gdbarch infcall unwinder nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained skip symfile threads timestamp xml nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained aix-solib nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained auto-load nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained bfd-cache nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained check-physname nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained coff-pe-read nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained compile nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained compile-cplus-scopes nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained compile-cplus-types nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained dwarf-die nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained dwarf-line nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained dwarf-read nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained entry-values nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained event-loop nextgroup=gdbSetDebugEventLoopValue skipwhite + syn keyword gdbSetDebugEventLoopValue contained all all-except-ui off + syn keyword gdbSetDebugArgs contained fortran-array-slicing nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained index-cache nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained libthread-db nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained linux-namespaces nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained linux-nat nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained mach-o nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained py-breakpoint nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained py-micmd nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained py-unwind nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained remote nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained remote-packet-max-chars nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetDebugArgs contained separate-debug-file nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetDebugArgs contained solib-dsbt nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained solib-frv nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained stap-expression nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained symbol-lookup nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetDebugArgs contained symtab-create nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbSetArgs contained debug-[file-directory] nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetArgs contained def[ault-collect] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained dem[angle-style] nextgroup=gdbSetDemangleStyleValue skipwhite + syn keyword gdbSetDemangleStyleValue contained auto dlang gnat gnu-v3 java none rust + syn keyword gdbSetArgs contained det[ach-on-fork] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained disab[le-randomization] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained disassemble-[next-line] nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetArgs contained disassembler[-options] nextgroup=gdbSetStringNoEscapeValue skipwhite + syn keyword gdbSetArgs contained disassembly[-flavor] nextgroup=gdbSetDisassemblyFlavorValue skipwhite + syn keyword gdbSetDisassemblyFlavorValue contained att intel + syn keyword gdbSetArgs contained disconnected-d[printf] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained disconnected-t[racing] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained disp[laced-stepping] nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetArgs contained dprintf-c[hannel] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained dprintf-f[unction] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained dprintf-s[tyle] nextgroup=gdbSetDprintfStyleValue skipwhite + syn keyword gdbSetDprintfStyleValue contained agent call gdb + syn keyword gdbSetArgs contained du[mp-excluded-mappings] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained exec-di[rection] nextgroup=gdbSetExecDirectionValue skipwhite + syn keyword gdbSetExecDirectionValue contained forward reverse + syn keyword gdbSetArgs contained exec-do[ne-display] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained exec-f[ile-mismatch] nextgroup=gdbSetExecFileMismatchValue skipwhite + syn keyword gdbSetExecFileMismatchValue contained ask off warn + syn keyword gdbSetArgs contained exec-w[rapper] nextgroup=gdbSetFilenameValue skipwhite + syn keyword gdbSetArgs contained extend[ed-prompt] nextgroup=gdbSetExtendedPromptValue skipwhite + " TODO: move this? + syn region gdbSetExtendedPromptValue contained start="\S" skip="\\$" end="\s*$" + syn match gdbStringEscape "\\[\\ efnprtvw]" containedin=gdbSetExtendedPromptValue + syn match gdbStringEscape "\\[fpt]{[^}]\+}" containedin=gdbSetExtendedPromptValue + syn match gdbStringEscape "\\\[[^]]\+]" containedin=gdbSetExtendedPromptValue + syn keyword gdbSetArgs contained extens[ion-language] nextgroup=gdbSetStringNoEscapeValue skipwhite + syn keyword gdbSetArgs contained fi[lename-display] nextgroup=gdbSetFilenameDisplayValue skipwhite + syn keyword gdbSetFilenameDisplayValue contained absolute basename relative + syn keyword gdbSetArgs contained follow-e[xec-mode] nextgroup=gdbSetFollowExecModeValue skipwhite + syn keyword gdbSetFollowExecModeValue contained new same + syn keyword gdbSetArgs contained follow-f[ork-mode] nextgroup=gdbSetFollowForkModeValue skipwhite + syn keyword gdbSetFollowForkModeValue contained child parent + syn keyword gdbSetArgs contained fr[ame-filter] nextgroup=gdbSetFrameFilterArgs skipwhite + syn keyword gdbSetFrameFilterArgs contained priority nextgroup=gdbSetFrameFilterPriorityValue skipwhite + syn keyword gdbSetFrameFilterPriorityValue contained global progspace + syn keyword gdbSetArgs contained ho[st-charset] " [charset] + syn keyword gdbSetArgs contained heu[ristic-fence-post] nextgroup=gdbSetZIntegerValue skipwhite + syn keyword gdbSetArgs contained ind[ex-cache] nextgroup=gdbSetIndexCacheArgs skipwhite + syn keyword gdbSetIndexCacheArgs contained directory nextgroup=gdbSetFilenameValue skipwhite + syn keyword gdbSetIndexCacheArgs contained enabled nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained inf[erior-tty] nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetArgs contained inp[ut-radix] + syn keyword gdbSetArgs contained int[eractive-mode] nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetArgs contained lib[thread-db-search-path] nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetArgs contained max-c[ompletions] nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetArgs contained max-u[ser-call-depth] nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbSetArgs contained max-v[alue-size] nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetArgs contained may-c[all-functions] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained may-insert-b[reakpoints] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained may-insert-f[ast-tracepoints] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained may-insert-t[racepoints] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained may-int[errupt] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained may-write-m[emory] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained may-write-r[egisters] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained mi-[async] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained mu[ltiple-symbols] nextgroup=gdbSetMultipleSymbolsValue skipwhite + syn keyword gdbSetMultipleSymbolsValue contained all ask cancel + syn keyword gdbSetArgs contained no[n-stop] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained op[aque-type-resolution] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained ou[tput-radix] + syn keyword gdbSetArgs contained ov[erload-resolution] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained ran[ge-stepping] nextgroup=gdbSetBooleanValue skipwhite + " TODO: remote protocol specific variables? + syn keyword gdbSetArgs contained remote nextgroup=gdbSetRemoteArgs skipwhite + syn keyword gdbSetRemoteArgs contained TracepointSource-packet + syn keyword gdbSetRemoteArgs contained Z-packet nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbSetRemoteArgs contained access-watchpoint-packet + syn keyword gdbSetRemoteArgs contained agent-packet + syn keyword gdbSetRemoteArgs contained allow-packet + syn keyword gdbSetRemoteArgs contained attach-packet + syn keyword gdbSetRemoteArgs contained binary-download-packet + syn keyword gdbSetRemoteArgs contained X-packet + syn keyword gdbSetRemoteArgs contained breakpoint-commands-packet + syn keyword gdbSetRemoteArgs contained btrace-conf-bts-size-packet + syn keyword gdbSetRemoteArgs contained btrace-conf-pt-size-packet + syn keyword gdbSetRemoteArgs contained catch-syscalls-packet + syn keyword gdbSetRemoteArgs contained conditional-breakpoints-packet + syn keyword gdbSetRemoteArgs contained conditional-tracepoints-packet + syn keyword gdbSetRemoteArgs contained ctrl-c-packet + syn keyword gdbSetRemoteArgs contained disable-btrace-packet + syn keyword gdbSetRemoteArgs contained disable-randomization-packet + syn keyword gdbSetRemoteArgs contained enable-btrace-bts-packet + syn keyword gdbSetRemoteArgs contained enable-btrace-pt-packet + syn keyword gdbSetRemoteArgs contained environment-hex-encoded-packet + syn keyword gdbSetRemoteArgs contained environment-reset-packet + syn keyword gdbSetRemoteArgs contained environment-unset-packet + syn keyword gdbSetRemoteArgs contained exec-event-feature-packet + syn keyword gdbSetRemoteArgs contained exec-file nextgroup=gdbSetStringNoEscapeValue skipwhite + syn keyword gdbSetRemoteArgs contained fast-tracepoints-packet + syn keyword gdbSetRemoteArgs contained fetch-register-packet + syn keyword gdbSetRemoteArgs contained p-packet + syn keyword gdbSetRemoteArgs contained fork-event-feature-packet + syn keyword gdbSetRemoteArgs contained get-thread-information-block-address-packet + syn keyword gdbSetRemoteArgs contained get-thread-local-storage-address-packet + syn keyword gdbSetRemoteArgs contained hardware-breakpoint-limit nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetRemoteArgs contained hardware-breakpoint-packet + syn keyword gdbSetRemoteArgs contained hardware-watchpoint-length-limit nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetRemoteArgs contained hardware-watchpoint-limit nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetRemoteArgs contained hostio-close-packet + syn keyword gdbSetRemoteArgs contained hostio-fstat-packet + syn keyword gdbSetRemoteArgs contained hostio-open-packet + syn keyword gdbSetRemoteArgs contained hostio-pread-packet + syn keyword gdbSetRemoteArgs contained hostio-pwrite-packet + syn keyword gdbSetRemoteArgs contained hostio-readlink-packet + syn keyword gdbSetRemoteArgs contained hostio-setfs-packet + syn keyword gdbSetRemoteArgs contained hostio-unlink-packet + syn keyword gdbSetRemoteArgs contained hwbreak-feature-packet + syn keyword gdbSetRemoteArgs contained install-in-trace-packet + syn keyword gdbSetRemoteArgs contained interrupt-on-connect + syn keyword gdbSetRemoteArgs contained interrupt-sequence nextgroup=gdbSetRemoteInterruptSequenceValue skipwhite + syn keyword gdbSetRemoteInterruptSequenceValue contained BREAK BREAK-g Ctrl-C + syn keyword gdbSetRemoteArgs contained kill-packet + syn keyword gdbSetRemoteArgs contained library-info-packet + syn keyword gdbSetRemoteArgs contained library-info-svr4-packet + syn keyword gdbSetRemoteArgs contained memory-map-packet + syn keyword gdbSetRemoteArgs contained memory-read-packet-size + syn keyword gdbSetRemoteArgs contained memory-tagging-feature-packet + syn keyword gdbSetRemoteArgs contained memory-write-packet-size + syn keyword gdbSetRemoteArgs contained multiprocess-feature-packet + syn keyword gdbSetRemoteArgs contained no-resumed-stop-reply-packet + syn keyword gdbSetRemoteArgs contained noack-packet + syn keyword gdbSetRemoteArgs contained osdata-packet + syn keyword gdbSetRemoteArgs contained pass-signals-packet + syn keyword gdbSetRemoteArgs contained pid-to-exec-file-packet + syn keyword gdbSetRemoteArgs contained program-signals-packet + syn keyword gdbSetRemoteArgs contained query-attached-packet + syn keyword gdbSetRemoteArgs contained read-aux-vector-packet + syn keyword gdbSetRemoteArgs contained read-btrace-conf-packet + syn keyword gdbSetRemoteArgs contained read-btrace-packet + syn keyword gdbSetRemoteArgs contained read-fdpic-loadmap-packet + syn keyword gdbSetRemoteArgs contained read-sdata-object-packet + syn keyword gdbSetRemoteArgs contained read-siginfo-object-packet + syn keyword gdbSetRemoteArgs contained read-watchpoint-packet + syn keyword gdbSetRemoteArgs contained reverse-continue-packet + syn keyword gdbSetRemoteArgs contained reverse-step-packet + syn keyword gdbSetRemoteArgs contained run-packet + syn keyword gdbSetRemoteArgs contained search-memory-packet + syn keyword gdbSetRemoteArgs contained set-register-packet + syn keyword gdbSetRemoteArgs contained P-packet + syn keyword gdbSetRemoteArgs contained set-working-dir-packet + syn keyword gdbSetRemoteArgs contained software-breakpoint-packet + syn keyword gdbSetRemoteArgs contained startup-with-shell-packet + syn keyword gdbSetRemoteArgs contained static-tracepoints-packet + syn keyword gdbSetRemoteArgs contained supported-packets-packet + syn keyword gdbSetRemoteArgs contained swbreak-feature-packet + syn keyword gdbSetRemoteArgs contained symbol-lookup-packet + syn keyword gdbSetRemoteArgs contained system-call-allowed + syn keyword gdbSetRemoteArgs contained target-features-packet + syn keyword gdbSetRemoteArgs contained thread-events-packet + syn keyword gdbSetRemoteArgs contained threads-packet + syn keyword gdbSetRemoteArgs contained trace-buffer-size-packet + syn keyword gdbSetRemoteArgs contained trace-status-packet + syn keyword gdbSetRemoteArgs contained traceframe-info-packet + syn keyword gdbSetRemoteArgs contained unwind-info-block-packet + syn keyword gdbSetRemoteArgs contained verbose-resume-packet + syn keyword gdbSetRemoteArgs contained verbose-resume-supported-packet + syn keyword gdbSetRemoteArgs contained vfork-event-feature-packet + syn keyword gdbSetRemoteArgs contained write-siginfo-object-packet + syn keyword gdbSetRemoteArgs contained write-watchpoint-packet + syn keyword gdbSetArgs contained remote-[mips64-transfers-32bit-regs] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained schedule-[multiple] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained schedule[r-locking] nextgroup=gdbSetSchedulerLockingValue skipwhite + syn keyword gdbSetSchedulerLockingValue contained on off replay step + syn keyword gdbSetArgs contained scr[ipt-extension] nextgroup=gdbSetScriptExtensionValue skipwhite + syn keyword gdbSetScriptExtensionValue contained off soft strict + syn keyword gdbSetArgs contained solib-s[earch-path] nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetArgs contained stac[k-cache] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained startup-q[uietly] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained startup-w[ith-shell] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained ste[p-mode] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained sto[p-on-solib-events] nextgroup=gdbSetZIntegerValue skipwhite + syn keyword gdbSetArgs contained str[uct-convention] nextgroup=gdbSetStructConventionValue skipwhite + syn keyword gdbSetStructConventionValue contained default pcc reg + syn keyword gdbSetArgs contained sub[stitute-path] nextgroup=gdbSetFilenameValue skipwhite + syn keyword gdbSetArgs contained sup[press-cli-notifications] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained sy[sroot] solib-a[bsolute-prefix] nextgroup=gdbSetOptionalFilenameValue skipwhite + syn keyword gdbSetArgs contained target-c[harset] " [charset] + syn keyword gdbSetArgs contained target-f[ile-system-kind] nextgroup=gdbSetTargetFileSystemKindValue skipwhite + syn keyword gdbSetTargetFileSystemKindValue contained auto unix dos-based + syn keyword gdbSetArgs contained target-w[ide-charset] " [charset] + syn keyword gdbSetArgs contained trace-b[uffer-size] nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbSetArgs contained trace-c[ommands] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained trace-n[otes] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained trace-s[top-notes] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained trace-u[ser] nextgroup=gdbSetStringValue skipwhite + syn keyword gdbSetArgs contained tru[st-readonly-sections] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained unwind-[on-terminating-exception] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained unwindo[nsignal] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained use-c[oredump-filter] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained use-d[eprecated-index-sections] nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbSetArgs contained vars[ize-limit] nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + " }}}3 + +syn keyword gdbCommand contained und[isplay] +syn keyword gdbCommand contained wha[tis] +syn match gdbWith contained "\<\%(wit\%[h]\|w\)\>" nextgroup=gdbSetArgs skipwhite +syn region gdbWrappedCommand contained start="\<\%(wit\%[h]\|w\)\>" matchgroup=gdbCommandAnchor end="--" end="$" skip="\\$" transparent contains=gdbWith,gdbLineContinuation nextgroup=gdbCommand skipwhite keepend +syn keyword gdbCommand contained x nextgroup=gdbFormat +syn match gdbFormat contained "/\%(-\=\d*\)\=[oxdutfaicsz]\=[bhwg]\=" +syn match gdbFormat contained "/\%(-\=\d*\)\=[bhwg]\=[oxdutfaicsz]\=" + +" files {{{2 +syn keyword gdbCommand contained add-symbol-file +syn keyword gdbCommand contained add-symbol-file-[from-memory] +syn keyword gdbCommand contained cd +syn keyword gdbCommand contained co[re-file] +syn keyword gdbCommand contained dir[ectory] +syn keyword gdbCommand contained ed[it] +syn keyword gdbCommand contained exe[c-file] +syn keyword gdbCommand contained fil[e] +syn keyword gdbCommand contained for[ward-search] fo sea[rch] +syn keyword gdbCommand contained ge[nerate-core-file] gc[ore] +syn keyword gdbCommand contained li[st] l +syn keyword gdbCommand contained lo[ad] +syn keyword gdbCommand contained no[sharedlibrary] +syn keyword gdbCommand contained pat[h] +syn keyword gdbCommand contained pw[d] +syn keyword gdbCommand contained remot[e] nextgroup=gdbRemoteArgs skipwhite + syn keyword gdbRemoteArgs contained d[elete] g[et] p[ut] +syn keyword gdbCommand contained remove-s[ymbol-file] +syn keyword gdbCommand contained reverse-se[arch] rev +syn keyword gdbCommand contained sec[tion] +syn keyword gdbCommand contained sha[redlibrary] +syn keyword gdbCommand contained sy[mbol-file] + +" internals {{{2 +syn keyword gdbCommand contained mai[ntenance] mt nextgroup=gdbMaintenanceArgs skipwhite + syn keyword gdbMaintenanceArgs contained agent + syn keyword gdbMaintenanceArgs contained agent-eval + syn keyword gdbMaintenanceArgs contained agent-printf + syn keyword gdbMaintenanceArgs contained btrace nextgroup=gdbMaintenanceBtraceArgs skipwhite + syn keyword gdbMaintenanceBtraceArgs contained clear clear-packet-history packet-history + syn keyword gdbMaintenanceArgs contained check nextgroup=gdbMaintenanceCheckArgs skipwhite + syn keyword gdbMaintenanceCheckArgs contained libthread-db xml-descriptions + syn keyword gdbMaintenanceArgs contained check-psymtabs + syn keyword gdbMaintenanceArgs contained check-symtabs + syn keyword gdbMaintenanceArgs contained cplus cp nextgroup=gdbMaintenanceCplusArgs skipwhite + syn keyword gdbMaintenanceCplusArgs contained first_component + syn keyword gdbMaintenanceArgs contained demangler-warning + syn keyword gdbMaintenanceArgs contained deprecate + syn keyword gdbMaintenanceArgs contained dump-me + syn keyword gdbMaintenanceArgs contained expand-symtabs + syn keyword gdbMaintenanceArgs contained flush nextgroup=gdbMaintenanceFlushArgs skipwhite + syn keyword gdbMaintenanceFlushArgs contained dcache register-cache source-cache symbol-cache + syn keyword gdbMaintenanceArgs contained info i nextgroup=gdbMaintenanceInfoArgs skipwhite + syn keyword gdbMaintenanceInfoArgs contained bfds breakpoints btrace jit line-table program-spaces psymtabs sections selftests + syn keyword gdbMaintenanceInfoArgs contained symtabs target-sections + syn keyword gdbMaintenanceArgs contained internal-error + syn keyword gdbMaintenanceArgs contained internal-warning + syn keyword gdbMaintenanceArgs contained packet + syn keyword gdbMaintenanceArgs contained print nextgroup=gdbMaintenancePrintArgs skipwhite + syn keyword gdbMaintenancePrintArgs contained arc nextgroup=gdbMaintenancePrintArcArgs skipwhite + syn keyword gdbMaintenancePrintArcArgs contained arc-instruction + syn keyword gdbMaintenancePrintArgs contained architecture c-tdesc cooked-registers core-file-backed-mappings dummy-frames + syn keyword gdbMaintenancePrintArgs contained msymbols objfiles psymbols raw-registers reggroups register-groups registers + syn keyword gdbMaintenancePrintArgs contained remote-registers statistics symbol-cache symbol-cache-statistics symbols + syn keyword gdbMaintenancePrintArgs contained target-stack type unwind user-registers xml-tdesc + syn keyword gdbMaintenanceArgs contained selftest + syn keyword gdbMaintenanceArgs contained set nextgroup=gdbMaintenanceSetArgs skipwhite + syn keyword gdbMaintenanceSetArgs contained ada nextgroup=gdbMaintenanceSetAdaArgs skipwhite + syn keyword gdbMaintenanceSetAdaArgs contained ignore-descriptive-types nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained backtrace-on-fatal-signal nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained bfd-sharing nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained btrace nextgroup=gdbMaintenanceSetBtraceArgs skipwhite + syn keyword gdbMaintenanceSetBtraceArgs contained pt nextgroup=gdbMaintenanceSetBtracePtArgs skipwhite + syn keyword gdbMaintenanceSetBtracePtArgs contained skip-pad nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained catch-demangler-crashes nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained check-libthread-db nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained demangler-warning nextgroup=gdbMaintenanceSetDemanglerWarningArgs skipwhite + syn keyword gdbMaintenanceSetDemanglerWarningArgs contained quit nextgroup=@gdbSetAskBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained dwarf nextgroup=gdbMaintenanceSetDwarfArgs skipwhite + syn keyword gdbMaintenanceSetDwarfArgs contained always-disassemble unwinders nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetDwarfArgs contained max-cache-age nextgroup=gdbSetZIntegerValue skipwhite + syn keyword gdbMaintenanceSetArgs contained gnu-source-highlight nextgroup=gdbMaintenanceSetGnuSourceHighlightArgs skipwhite + syn keyword gdbMaintenanceSetGnuSourceHighlightArgs contained enabled nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained internal-error nextgroup=gdbMaintenanceSetInternalErrorArgs skipwhite + syn keyword gdbMaintenanceSetInternalErrorArgs contained backtrace nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetInternalErrorArgs contained corefile quit nextgroup=@gdbSetAskBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained internal-warning nextgroup=gdbMaintenanceSetInternalWarningArgs skipwhite + syn keyword gdbMaintenanceSetInternalWarningArgs contained backtrace nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetInternalWarningArgs contained corefile quit nextgroup=@gdbSetAskBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained per-command nextgroup=gdbMaintenanceSetPerCommandArgs skipwhite + syn keyword gdbMaintenanceSetPerCommandArgs contained space symtab time nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained profile nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained selftest nextgroup=gdbMaintenanceSetSelftestArgs skipwhite + syn keyword gdbMaintenanceSetSelftestArgs contained verbose nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained show-all-tib nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained show-debug-regs nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained symbol-cache-size nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbMaintenanceSetArgs contained target-async nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained target-non-stop nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained test-settings nextgroup=gdbMaintenanceSetTestSettingsArgs skipwhite + syn keyword gdbMaintenanceSetTestSettingsArgs contained auto-boolean nextgroup=gdbSetAutoBooleanValue skipwhite + syn keyword gdbMaintenanceSetTestSettingsArgs contained boolean nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetTestSettingsArgs contained enum + syn keyword gdbMaintenanceSetTestSettingsArgs contained filename + syn keyword gdbMaintenanceSetTestSettingsArgs contained integer nextgroup=gdbSetIntegerValue skipwhite + syn keyword gdbMaintenanceSetTestSettingsArgs contained optional-filename + syn keyword gdbMaintenanceSetTestSettingsArgs contained string + syn keyword gdbMaintenanceSetTestSettingsArgs contained string-noescape + syn keyword gdbMaintenanceSetTestSettingsArgs contained uinteger nextgroup=gdbSetUIntegerValue skipwhite + syn keyword gdbMaintenanceSetTestSettingsArgs contained zinteger nextgroup=gdbSetZIntegerValue skipwhite + syn keyword gdbMaintenanceSetTestSettingsArgs contained zuinteger nextgroup=gdbSetZUIntegerValue skipwhite + syn keyword gdbMaintenanceSetTestSettingsArgs contained zuinteger-unlimited nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbMaintenanceSetArgs contained tui-resize-message nextgroup=gdbSetBooleanValue skipwhite + syn keyword gdbMaintenanceSetArgs contained worker-threads nextgroup=gdbSetZUIntegerUnlimitedValue skipwhite + syn keyword gdbMaintenanceArgs contained show nextgroup=gdbMaintenanceShowArgs,gdbMaintenanceSetArgs skipwhite + syn keyword gdbMaintenanceShowArgs contained test-options-completion-result + syn keyword gdbMaintenanceArgs contained space + syn keyword gdbMaintenanceArgs contained test-options nextgroup=gdbMaintenanceTestOptionsArgs skipwhite + syn keyword gdbMaintenanceTestOptionsArgs contained require-delimiter unknown-is-error unknown-is-operand + syn keyword gdbMaintenanceArgs contained time + syn keyword gdbMaintenanceArgs contained translate-address + syn keyword gdbMaintenanceArgs contained undeprecate + syn keyword gdbMaintenanceArgs contained with + +" obscure {{{2 +syn keyword gdbCommand contained ch[eckpoint] +syn keyword gdbCommand contained compa[re-sections] + +" syn keyword gdbCommand contained compi[le] exp[ression] +" syn keyword gdbCommand contained compi[le] exp[ression] nextgroup=gdbCompileArgs skipwhite +" syn keyword gdbCompile contained compi[le] exp[ression] nextgroup=gdbCompileArgs skipwhite +syn match gdbCompile contained "\<\%(compi\%[le]\|exp\%[ression]\)\>" nextgroup=gdbCompileArgs skipwhite + syn keyword gdbCompileArgs contained c[ode] nextgroup=gdbCompileCodeOptions,@gdbC skipwhite + syn match gdbCompileCodeOptions contained "--\|\%(-r\%[aw]\)\(\s\+--\)\=" nextgroup=@gdbC skipwhite + syn keyword gdbCompileArgs contained f[ile] nextgroup=gdbCompileCodeOptions skipwhite + syn keyword gdbCompileArgs contained p[rint] nextgroup=gdbCompilePrintOptions,gdbCompilePrintFormat,@gdbC skipwhite + " TODO: proper option support + syn match gdbCompilePrintOptions contained "\%(-\w\+\%(\s\+\w\+\)\=\s\+\)*--" nextgroup=@gdbC,gdbCompilePrintFormat skipwhite + syn match gdbCompilePrintFormat contained "/[oxdutfaicsz]" nextgroup=@gdbC skipwhite + +syn region gdbCommand contained start="\<\%(compi\%[le]\|exp\%[ression]\)\s\+c\%[ode]\ze\s" skip="\\$" end="$" contains=gdbCompile,@gdbC keepend transparent fold +syn region gdbMultilineCommand contained start="\<\%(compi\%[le]\|exp\%[ression]\)\s\+c\%[ode]\%(\s\+-r\%[aw]\)\=\%(\s\+--\)\=\s*$" matchgroup=gdbCommand end="^\s*\zsend\ze\s*$" contains=gdbCompile,@gdbC transparent fold +syn region gdbCommand contained start="\<\%(compi\%[le]\|exp\%[ression]\)\s\+p\%[rint]\ze\s" skip="\\$" end="$" contains=gdbCompile,@gdbC keepend transparent fold +syn region gdbMultilineCommand contained start="\<\%(compi\%[le]\|exp\%[ression]\)\s\+p\%[rint]\%(\%(\s\+-.*\)\=\s\+--\)\=\%(\s\+/[a-z]\)\=\s*$" matchgroup=gdbCommand end="^\s*\zsend\ze\s*$" contains=gdbCompile,@gdbC transparent fold + +syn keyword gdbCommand contained compl[ete] + +" Guile {{{3 +syn include @gdbGuile syntax/scheme.vim +unlet b:current_syntax +syn keyword gdbCommand contained guile-repl +syn keyword gdbCommand contained gr +syn region gdbCommand contained matchgroup=gdbCommand start="\" nextgroup=gdbAliasEndOption,gdbAliasName skipwhite + syn match gdbAliasName contained "\<\w\%(\w\|-\)*\>" nextgroup=gdbAliasEquals skipwhite + syn match gdbAliasEquals contained "=" nextgroup=@gdbCommands skipwhite + +syn keyword gdbCommand contained apr[opos] + +syn region gdbDefine contained matchgroup=gdbCommand start="\" end="^\s*\zsend\ze\s*$" contains=TOP transparent fold +syn keyword gdbCommand contained define-[prefix] +syn keyword gdbCommand contained dem[angle] + +syn region gdbDocument contained matchgroup=gdbCommand start="\" end="^\s*\zsend\ze\s*$" fold contains=gdbDocumentCommand + +syn keyword gdbCommand contained don[t-repeat] +syn keyword gdbCommand contained down-[silently] +syn keyword gdbCommand contained ec[ho] nextgroup=gdbUnquotedString skipwhite + " TODO: move + syn region gdbUnquotedString contained start="\S" skip="\\$" end="$" contains=gdbStringEscape,gdbLineContinuation + hi def link gdbUnquotedString String + " syn region gdbUnquotedStringNoEscape contained start="\S" skip="\\$" end="$" contains=gdbLineContinuation + " hi def link gdbUnquotedStringNoEscape String +syn keyword gdbCommand contained he[lp] h + +syn region gdbIf contained matchgroup=gdbCommand start="\" end="\%(^\s*\)\@<=end\ze\s*$" contains=TOP transparent fold +syn keyword gdbCommand contained else containedin=gdbIf + +syn keyword gdbCommand contained interp[reter-exec] +syn keyword gdbCommand contained mak[e] +syn keyword gdbCommand contained new[-ui] +syn keyword gdbCommand contained ov[erlay] ov ovly nextgroup=gdbOverlayArgs skipwhite + syn keyword gdbOverlayArgs contained a[uto] li[st-overlays] lo[ad-target] man[ual] map[-overlay] o[ff] u[nmap-overlay] +" TODO: pi completes as pipe ignoring pi (python-interactive) +" : sh region +syn keyword gdbCommand contained pip[e] +syn match gdbCommand contained "|" +syn keyword gdbCommand contained qui[t] exi[t] q +syn keyword gdbCommand contained she[ll] nextgroup=gdbShellValue skipwhite +syn match gdbCommand contained "!" nextgroup=gdbShellValue skipwhite + syn include @gdbSh syntax/sh.vim + unlet b:current_syntax + syn region gdbShellValue contained start="\S" skip="\\$" end="$" contains=@gdbSh,gdbLineContinuation keepend +syn keyword gdbCommand contained so[urce] nextgroup=gdbSourceOption skipwhite + syn match gdbSourceOption contained "\<-[sv]\>" nextgroup=gdbSourceOption skipwhite +syn keyword gdbCommand contained up-[silently] + +syn region gdbWhile contained matchgroup=gdbCommand start="\" end="\%(^\s*\)\@<=end\ze\s*$" contains=TOP transparent fold +syn keyword gdbCommand contained loop_b[reak] loop_c[ontinue] containedin=gdbWhile + +" text-user-interface {{{2 +syn match gdbCommand contained "[<>+-]" +syn keyword gdbCommand contained foc[us] fs +syn keyword gdbCommand contained la[yout] nextgroup=gdbLayoutArgs skipwhite + syn keyword gdbLayoutArgs contained a[sm] n[ext] p[rev] r[egs] sp[lit] sr[c] +syn keyword gdbCommand contained ref[resh] +syn keyword gdbCommand contained tu[i] nextgroup=gdbTuiArgs skipwhite + syn keyword gdbTuiArgs contained d[isable] e[nable] n[ew-layout] r[eg] +syn keyword gdbCommand contained upd[ate] +syn keyword gdbCommand contained win[height] wh nextgroup=gdbWindowName skipwhite + syn keyword gdbWindowName contained a[sm] c[md] sr[c] st[atus] r[egs] + +" tracepoints {{{2 +syn keyword gdbCommand contained ac[tions] +syn keyword gdbCommand contained col[lect] +syn keyword gdbCommand contained end +syn keyword gdbCommand contained pas[scount] +syn keyword gdbCommand contained t[dump] +syn keyword gdbCommand contained tev[al] +syn keyword gdbCommand contained tfi[nd] nextgroup=gdbTfindArgs skipwhite + syn keyword gdbTfindArgs contained e[nd] l[ine] n[one] o[utside] p[c] r[ange] s[tart] t[racepoint] +syn keyword gdbCommand contained tsa[ve] +syn keyword gdbCommand contained tstar[t] +syn keyword gdbCommand contained tstat[us] +syn keyword gdbCommand contained tsto[p] +syn keyword gdbCommand contained tv[ariable] +syn keyword gdbCommand contained while-stepping stepp[ing] ws + +" unclassified {{{2 +syn keyword gdbCommand contained add-i[nferior] +syn keyword gdbCommand contained clo[ne-inferior] +syn keyword gdbCommand contained ev[al] +syn keyword gdbCommand contained fl[ash-erase] +syn keyword gdbCommand contained fu[nction] +syn keyword gdbCommand contained jit-reader-l[oad] +syn keyword gdbCommand contained jit-reader-u[nload] +syn keyword gdbCommand contained remove-i[nferiors] +syn keyword gdbCommand contained uns[et] nextgroup=gdbUnsetArgs skipwhite + syn keyword gdbUnsetArgs contained environment exec-wrapper substitute-path + syn keyword gdbUnsetArgs contained tdesc nextgroup=gdbUnsetTdescArgs skipwhite + syn keyword gdbUnsetTdescArgs contained filename + syn keyword gdbUnsetArgs contained exec-wrapper + syn keyword gdbUnsetArgs contained substitute-path +syn keyword gdbCommand contained bo[okmark] +syn keyword gdbCommand contained go[to-bookmark] +" }}} + +" Command syntax {{{1 +syn keyword gdbPrefix contained server nextgroup=gdbCommand skipwhite + +syn cluster gdbCommands contains=gdbCommand,gdbMultilineCommand,gdbCompile,gdbDefine,gdbDocument,gdbIf,gdbWhile,gdbPrefix,gdbWrappedCommand + +syn match gdbCommandAnchor "^" nextgroup=@gdbCommands skipwhite +" TODO: give higher priority than \\ in unquoted strings as \\$ matches \ escape of first char on following line +syn match gdbLineContinuation "\\$" + +" Comments {{{1 +syn match gdbComment "^\s*\zs#.*" contains=@Spell + +" Variables {{{1 +syn match gdbVariable "\$\K\k*" + +" Strings and constants {{{1 +syn region gdbString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gdbStringEscape,@Spell +syn match gdbStringEscape contained "\\[abfnrtv\\'" ]" +syn match gdbStringEscape contained "\\\o\{1,3}" syn match gdbCharacter "'[^']*'" contains=gdbSpecialChar,gdbSpecialCharError syn match gdbCharacter "'\\''" contains=gdbSpecialChar syn match gdbCharacter "'[^\\]'" syn match gdbNumber "\<[0-9_]\+\>" syn match gdbNumber "\<0x[0-9a-fA-F_]\+\>" +syn match gdbNumber "\<0\o\+\>" +syn match gdbNumber "\<\d\+\>\.\=" +syn match gdbNumber "\<0x\x\+\>" -if !exists("gdb_minlines") - let gdb_minlines = 10 -endif -exec "syn sync ccomment gdbComment minlines=" . gdb_minlines +" Architecture {{{2 +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" +syn match gdbArchitecture contained "\" -" Define the default highlighting. +" Sync {{{1 +exec "syn sync minlines=" .. get(g:, "gdb_minlines", 100) +exec "syn sync maxlines=" .. get(g:, "gdb_minlines", 200) +syn sync ccomment gdbComment +syn sync linecont "\\$" + +" Default Highlighting {{{1 " Only when an item doesn't have highlighting yet -hi def link gdbFuncDef Function -hi def link gdbComment Comment -hi def link gdbStatement Statement -hi def link gdbString String +hi def link gdbCompile gdbCommand +hi def link gdbFuncDef Function +hi def link gdbComment Comment +hi def link gdbCommand Statement +hi def link gdbPrefix gdbCommand +hi def link gdbString String +hi def link gdbStringEscape SpecialChar hi def link gdbCharacter Character -hi def link gdbVariable Identifier -hi def link gdbSet Constant -hi def link gdbInfo Type -hi def link gdbDocument Special -hi def link gdbNumber Number +hi def link gdbVariable Identifier +hi def link gdbWith gdbCommand + +" Command options {{{2 +hi def link gdbFormat Special +hi def link gdbPrintFormat gdbFormat +hi def link gdbOption Special +hi def link gdbCompileCodeOptions gdbOption +hi def link gdbCompilePrintOptions gdbOption +hi def link gdbCompilePrintFormat gdbFormat + +" Subcommands {{{2 +hi def link gdbCommandArgs Type +hi def link gdbAdiArgs gdbCommandArgs +hi def link gdbAliasOption gdbCommandArgs +hi def link gdbAliasEndOption gdbCommandArgs +hi def link gdbAppendArgs gdbCommandArgs +hi def link gdbAppendBinaryArgs gdbAppendArgs +hi def link gdbCatchArgs gdbCommandArgs +hi def link gdbCompileArgs gdbCommandArgs +hi def link gdbConditionOption gdbCommandArgs +hi def link gdbConditionEndOption gdbCommandArgs +hi def link gdbDeleteArgs gdbCommandArgs +hi def link gdbDetachArgs gdbCommandArgs +hi def link gdbDisableArgs gdbCommandArgs +hi def link gdbDumpArgs gdbCommandArgs +hi def link gdbDumpBinaryArgs gdbDumpArgs +hi def link gdbEnableArgs gdbCommandArgs +hi def link gdbEnableBreakpointArgs gdbEnableArgs +hi def link gdbExploreArgs gdbCommandArgs +hi def link gdbFrameArgs gdbCommandArgs +hi def link gdbFrameApplyArgs gdbCommandArgs +hi def link gdbInfoArgs gdbCommandArgs +hi def link gdbInfoAutoLoadArgs gdbInfoArgs +hi def link gdbInfoFrameArgs gdbInfoArgs +hi def link gdbInfoModuleArgs gdbInfoArgs +hi def link gdbInfoProbesArgs gdbInfoArgs +hi def link gdbInfoProcArgs gdbInfoArgs +hi def link gdbInfoW32Args gdbInfoArgs +hi def link gdbKillArgs gdbCommandArgs +hi def link gdbLayoutArgs gdbCommandArgs +hi def link gdbMacroArgs gdbCommandArgs +hi def link gdbMaintenanceArgs gdbCommandArgs +hi def link gdbMaintenanceBtraceArgs gdbCommandArgs +hi def link gdbMaintenanceCheckArgs gdbCommandArgs +hi def link gdbMaintenanceCplusArgs gdbCommandArgs +hi def link gdbMaintenanceFlushArgs gdbCommandArgs +hi def link gdbMaintenanceInfoArgs gdbCommandArgs +hi def link gdbMaintenancePrintArgs gdbCommandArgs +hi def link gdbMaintenancePrintArcArgs gdbCommandArgs +hi def link gdbMaintenanceSetArgs gdbCommandArgs +hi def link gdbMaintenanceSetAdaArgs gdbCommandArgs +hi def link gdbMaintenanceSetBtraceArgs gdbCommandArgs +hi def link gdbMaintenanceSetBtracePtArgs gdbCommandArgs +hi def link gdbMaintenanceSetDemanglerWarningArgs gdbCommandArgs +hi def link gdbMaintenanceSetDwarfArgs gdbCommandArgs +hi def link gdbMaintenanceSetGnuSourceHighlightArgs gdbCommandArgs +hi def link gdbMaintenanceSetInternalErrorArgs gdbCommandArgs +hi def link gdbMaintenanceSetInternalErrorArgs gdbCommandArgs +hi def link gdbMaintenanceSetInternalWarningArgs gdbCommandArgs +hi def link gdbMaintenanceSetPerCommandArgs gdbCommandArgs +hi def link gdbMaintenanceSetSelftestArgs gdbCommandArgs +hi def link gdbMaintenanceSetTestSettingsArgs gdbCommandArgs +hi def link gdbMaintenanceShowArgs gdbCommandArgs +hi def link gdbMaintenanceTestOptionsArgs gdbCommandArgs +hi def link gdbMemoryTagArgs gdbCommandArgs +hi def link gdbOverlayArgs gdbCommandArgs +hi def link gdbRecordArgs gdbCommandArgs +hi def link gdbRecordBtraceArgs gdbRecordArgs +hi def link gdbRecordGotoArgs gdbRecordArgs +hi def link gdbRecordFullArgs gdbRecordArgs +hi def link gdbRemoteArgs gdbCommandArgs +hi def link gdbSaveArgs gdbCommandArgs +hi def link gdbSelectFrameArgs gdbCommandArgs +hi def link gdbSkipArgs gdbCommandArgs +hi def link gdbSetArgs gdbCommandArgs +hi def link gdbSetAdaArgs gdbCommandArgs +hi def link gdbSetArmArgs gdbCommandArgs +hi def link gdbSetAutoloadArgs gdbCommandArgs +hi def link gdbSetBacktraceArgs gdbCommandArgs +hi def link gdbSetBreakpointArgs gdbCommandArgs +hi def link gdbSetCheckArgs gdbCommandArgs +hi def link gdbSetDcacheArgs gdbCommandArgs +hi def link gdbSetDebugArgs gdbCommandArgs +hi def link gdbSetDebuginfodArgs gdbCommandArgs +hi def link gdbSetDebugRiscvArgs gdbCommandArgs +hi def link gdbSetFortranArgs gdbCommandArgs +hi def link gdbSetFrameFilterArgs gdbCommandArgs +hi def link gdbSetGuileArgs gdbCommandArgs +hi def link gdbSetHistoryArgs gdbCommandArgs +hi def link gdbSetIndexCacheArgs gdbCommandArgs +hi def link gdbSetLoggingArgs gdbCommandArgs +hi def link gdbSetMemArgs gdbCommandArgs +hi def link gdbSetMipsArgs gdbCommandArgs +hi def link gdbSetMpxArgs gdbCommandArgs +hi def link gdbSetPowerpcArgs gdbCommandArgs +hi def link gdbSetPrintArgs gdbCommandArgs +hi def link gdbSetPrintTypeArgs gdbSetPrintArgs +hi def link gdbSetPythonArgs gdbCommandArgs +hi def link gdbSetRavenscarArgs gdbCommandArgs +hi def link gdbSetRecordArgs gdbCommandArgs +hi def link gdbSetRecordBtraceArgs gdbSetRecordArgs +hi def link gdbSetRecordBtraceBtsArgs gdbSetRecordBtraceArgs +hi def link gdbSetRecordBtraceCpuArgs gdbSetRecordBtraceArgs +hi def link gdbSetRecordFullArgs gdbSetRecordArgs +hi def link gdbSetRecordBtracePtArgs gdbSetRecordBtraceArgs +hi def link gdbSetRemoteArgs gdbCommandArgs +hi def link gdbSetRiscvArgs gdbCommandArgs +hi def link gdbSetSerialArgs gdbCommandArgs +hi def link gdbSetShArgs gdbCommandArgs +hi def link gdbSetSourceArgs gdbCommandArgs +hi def link gdbSetStyleArgs gdbCommandArgs +hi def link gdbSetStyleAddressArgs gdbSetStyleArgs +hi def link gdbSetStyleDissassemblerArgs gdbSetStyleArgs +hi def link gdbSetStyleFilenameArgs gdbSetStyleArgs +hi def link gdbSetStyleFunctionArgs gdbSetStyleArgs +hi def link gdbSetStyleHighlightArgs gdbSetStyleArgs +hi def link gdbSetStyleMetadataArgs gdbSetStyleArgs +hi def link gdbSetStyleTitleArgs gdbSetStyleArgs +hi def link gdbSetStyleTuiActiveBorderArgs gdbSetStyleArgs +hi def link gdbSetStyleTuiBorderArgs gdbSetStyleArgs +hi def link gdbSetStyleVariableArgs gdbSetStyleArgs +hi def link gdbSetStyleVersionArgs gdbSetStyleArgs +hi def link gdbSetTuiArgs gdbCommandArgs +hi def link gdbSetTcpArgs gdbCommandArgs +hi def link gdbSetTdescArgs gdbCommandArgs +hi def link gdbShowArgs gdbCommandArgs +hi def link gdbShowIndexCacheArgs gdbCommandArgs +" TODO: dedicated option highlight group? +hi def link gdbSourceOption gdbCommandArgs +hi def link gdbTaskArgs gdbCommandArgs +hi def link gdbTaskApplyArgs gdbTaskArgs +hi def link gdbTargetArgs gdbCommandArgs +hi def link gdbTfindArgs gdbCommandArgs +hi def link gdbThreadArgs gdbCommandArgs +hi def link gdbThreadApplyArgs gdbThreadArgs +hi def link gdbTuiArgs gdbCommandArgs +hi def link gdbUnsetArgs gdbCommandArgs +hi def link gdbUnsetTdescArgs gdbUnsetArgs +hi def link gdbWatchOption gdbCommandArgs +hi def link gdbWatchEndOption gdbCommandArgs + +" Set values {{{2 +hi def link gdbSetValue Constant +hi def link gdbSetAskValue gdbSetValue +hi def link gdbSetAutoBooleanValue gdbSetValue +hi def link gdbSetBooleanValue gdbSetValue +hi def link gdbSetIntegerValue gdbSetValue +hi def link gdbSetUIntegerValue gdbSetValue +hi def link gdbSetZIntegerValue gdbSetValue +hi def link gdbSetZUIntegerValue gdbSetValue +hi def link gdbSetZUIntegerUnlimitedValue gdbSetValue +hi def link gdbSetFilenameValue gdbSetValue +hi def link gdbSetOptionalFilenameValue gdbSetValue +hi def link gdbSetStringValue gdbString +hi def link gdbSetStringNoEscapeValue gdbString +hi def link gdbSetExtendedPromptValue gdbString + +" Enum values {{{3 +hi def link gdbSetAdaSourceCharsetValue gdbSetValue +hi def link gdbSetArmAbiValue gdbSetValue +hi def link gdbSetArmDisassemblerValue gdbSetValue +hi def link gdbSetArmFallbackModeValue gdbSetValue +hi def link gdbSetArmForceModeValue gdbSetValue +hi def link gdbSetArmFpuValue gdbSetValue +hi def link gdbSetAutoloadValue gdbSetValue +hi def link gdbSetBreakpointCondtionEvaluationValue gdbSetValue +hi def link gdbSetCheckRangeValue gdbSetValue +hi def link gdbSetCpAbiValue gdbSetValue +hi def link gdbSetCrisModeValue gdbSetValue +hi def link gdbSetDebugEventLoopValue gdbSetValue +hi def link gdbSetDemangleStyleValue gdbSetValue +hi def link gdbSetDisassemblyFlavorValue gdbSetValue +hi def link gdbSetDprintfStyleValue gdbSetValue +hi def link gdbSetEndianValue gdbSetValue +hi def link gdbSetExecDirectionValue gdbSetValue +hi def link gdbSetExecFileMismatchValue gdbSetValue +hi def link gdbSetFilenameDisplayValue gdbSetValue +hi def link gdbSetFollowExecModeValue gdbSetValue +hi def link gdbSetFollowForkModeValue gdbSetValue +hi def link gdbSetFrameFilterPriorityValue gdbSetValue +hi def link gdbSetGuilePrintStackValue gdbSetValue +hi def link gdbSetLanguageValue gdbSetValue +hi def link gdbSetMipsAbiValue gdbSetValue +hi def link gdbSetMipsCompressionValue gdbSetValue +hi def link gdbSetMipsfpuValue gdbSetValue +hi def link gdbSetMultipleSymbolsValue gdbSetValue +hi def link gdbSetOsabiValue gdbSetValue +hi def link gdbSetPowerpcVectorAbiValue gdbSetValue +hi def link gdbSetPrintEntryValuesValue gdbSetValue +hi def link gdbSetPrintFrameArgumentsValue gdbSetValue +hi def link gdbSetPrintFrameInfoValue gdbSetValue +hi def link gdbSetPythonPrintStackValue gdbSetValue +hi def link gdbSetRecordBtraceReplayMemoryAccessValue gdbSetValue +hi def link gdbSetRemoteInterruptSequenceValue gdbSetValue +hi def link gdbSetRemotelogbaseValue gdbSetValue +hi def link gdbSetSchedulerLockingValue gdbSetValue +hi def link gdbSetScriptExtensionValue gdbSetValue +hi def link gdbSetSerialParityValue gdbSetValue +hi def link gdbSetShCallingConventionValue gdbSetValue +hi def link gdbSetStructConventionValue gdbSetValue +hi def link gdbSetSymbolLoadingValue gdbSetValue +hi def link gdbSetTargetFileSystemKindValue gdbSetValue +hi def link gdbSetTuiBorderKindValue gdbSetValue +hi def link gdbSetTuiBorderModeValue gdbSetValue +" }}}2 + +hi def link gdbAliasName Function +hi def link gdbArchitecture Constant +hi def link gdbWindowName Constant +hi def link gdbBreakpointCount Number +hi def link gdbBreakpointNumber Constant +hi def link gdbBreakpointRange Constant + +hi def link gdbDocument Special +hi def link gdbNumber Number +hi def link gdbLineContinuation Special +" }}} let b:current_syntax = "gdb" let &cpo = s:cpo_save unlet s:cpo_save -" vim: ts=8 + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/runtime/syntax/generator/README.md b/runtime/syntax/generator/README.md index 7362372151..6db445ced2 100644 --- a/runtime/syntax/generator/README.md +++ b/runtime/syntax/generator/README.md @@ -3,7 +3,7 @@ This directory contains a Vim script generator, that will parse the Vim source file and generate a vim.vim syntax file. -Files in this directory where copied from https://github.com/vim-jp/syntax-vim-ex/ +Files in this directory were copied from https://github.com/vim-jp/syntax-vim-ex/ and included here on Feb, 13th, 2024 for the Vim Project. - Maintainer: Hirohito Higashi diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim index 579dbbc396..3e7fe1bc2d 100644 --- a/runtime/syntax/generator/gen_syntax_vim.vim +++ b/runtime/syntax/generator/gen_syntax_vim.vim @@ -1,7 +1,7 @@ " Vim syntax file generator " Language: Vim script " Maintainer: Hirohito Higashi (h_east) -" Last Change: 2025 Oct 11 +" Last Change: 2025 Dec 04 let s:keepcpo= &cpo set cpo&vim @@ -31,6 +31,9 @@ function s:parse_vim_option(opt, missing_opt, term_out_code) for line in getline(1, line('$')) let list = matchlist(line, '^\s*{\s*"\(\w\+\)"\s*,\s*\%("\(\w\+\)"\|NULL\)\s*,\s*\%([^,]*\(P_BOOL\)[^,]*\|[^,]*\)\s*,\s*\([^,]*NULL\)\?.*') + if list[1] == 'completefuzzycollect' + continue + endif let item.name = list[1] let item.short_name = list[2] let item.is_bool = empty(list[3]) ? 0 : 1 @@ -288,6 +291,7 @@ function s:get_vim_command_type(cmd_name) " 6: unmap " 7: abclear " 8: modifiers + " 9: cd " 99: (Exclude registration of "syn keyword") let ab_prefix = '^[ci]\?' let menu_prefix = '^\%([acinostvx]\?\|tl\)' @@ -299,13 +303,20 @@ function s:get_vim_command_type(cmd_name) Print X abstract + argdo append augroup autocmd behave + breakadd + breakdel + breaklist browse + bufdo call catch + cdo + cfdo chdir change class @@ -313,6 +324,7 @@ function s:get_vim_command_type(cmd_name) confirm const copy + debug debuggreedy def defer @@ -343,19 +355,26 @@ function s:get_vim_command_type(cmd_name) filetype filter final + folddoopen + folddoclosed for function grep grepadd + help helpgrep highlight + history if import interface insert join k + language let + ldo + lfdo loadkeymap lhelpgrep lgrep @@ -381,6 +400,8 @@ function s:get_vim_command_type(cmd_name) popup profdel profile + promptfind + promptrepl public python pyfile @@ -411,6 +432,7 @@ function s:get_vim_command_type(cmd_name) swapname syntax syntime + tabdo tcl tcldo tclfile @@ -428,6 +450,7 @@ function s:get_vim_command_type(cmd_name) vimgrepadd while wincmd + windo EOL " Required for original behavior " \ 'global', 'vglobal' @@ -447,6 +470,9 @@ function s:get_vim_command_type(cmd_name) let ret = 6 elseif index(s:get_cmd_modifiers(), a:cmd_name) != -1 let ret = 8 + " :chdir handled specially for command/function distinction + elseif a:cmd_name =~# '^\%([lt]\?cd\|[lt]chdir\)$' + let ret = 9 else let ret = 0 endif @@ -914,6 +940,9 @@ function s:update_syntax_vim_file(vim_info) " vimCommand - modifier let lnum = s:search_and_check(kword . ' modifier', base_fname, str_info) let lnum = s:append_syn_vimcmd(lnum, str_info, li, 8) + " vimCommand - cd + let lnum = s:search_and_check(kword . ' cd', base_fname, str_info) + let lnum = s:append_syn_vimcmd(lnum, str_info, li, 9) update quit! diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 40139de24b..309ef2a9ba 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Oct 27 +" Last Change: 2026 Jun 12 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -36,7 +36,7 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell " GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang' " Lower priority :syn-match to allow for :command/function() distinction -syn match vimCommand "\" nextgroup=vimBang +" :chdir is handled specially elsewhere syn match vimCommand "\" nextgroup=vimBang syn match vimCommand "\" nextgroup=vimBang syn match vimCommand "\" nextgroup=vimBang @@ -236,17 +236,17 @@ Vim9 syn keyword vim9Boolean true false " Numbers {{{2 " ======= syn case ignore -syn match vimNumber "\<\d\+\%('\d\+\)*" skipwhite nextgroup=@vimComment,vimSubscript,vimGlobal,vimSubst1 +syn match vimNumber "\<\d\+\%('\d\+\)*" skipwhite nextgroup=@vimComment,vimSubscriptBrackets,vimGlobal,vimSubst1 syn match vimNumber "\<\d\+\%('\d\+\)*\.\d\+\%(e[+-]\=\d\+\)\=" skipwhite nextgroup=@vimComment -syn match vimNumber "\<0b[01]\+\%('[01]\+\)*" skipwhite nextgroup=@vimComment,vimSubscript -syn match vimNumber "\<0o\=\o\+\%('\o\+\)*" skipwhite nextgroup=@vimComment,vimSubscript -syn match vimNumber "\<0x\x\+\%('\x\+\)*" skipwhite nextgroup=@vimComment,vimSubscript +syn match vimNumber "\<0b[01]\+\%('[01]\+\)*" skipwhite nextgroup=@vimComment,vimSubscriptBrackets +syn match vimNumber "\<0o\=\o\+\%('\o\+\)*" skipwhite nextgroup=@vimComment,vimSubscriptBrackets +syn match vimNumber "\<0x\x\+\%('\x\+\)*" skipwhite nextgroup=@vimComment,vimSubscriptBrackets syn match vimNumber '\<0z\>' skipwhite nextgroup=@vimComment -syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vimComment,vimSubscript +syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vimComment,vimSubscriptBrackets syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimCommandModifier,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimBreakadd,vimBreakdel,vimBreaklist,vimCall,vimCatch,vimCd,vimCommandModifier,vimConst,vimDoautocmd,vimDebug,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,vimDoCommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelp,vimHelpgrep,vimHighlight,vimHistory,vimImport,vimLanguage,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimPrompt,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1" nextgroup=vimBang contains=vimCommand syn match vimBang contained "!" syn match vimWhitespace contained "\s\+" -syn region vimSubscript contained matchgroup=vimSubscriptBracket start="\[" end="]" nextgroup=vimSubscript contains=@vimExprList +syn region vimSubscriptBrackets contained + \ matchgroup=vimSubscriptBracket + \ start="\[" + \ end="]" + \ nextgroup=vimSubscriptBrackets,vimSubscriptDot + \ contains=@vimExprList +syn match vimSubscriptDot contained "\." nextgroup=vimVar,vimVarKey,vimUserFunc,vimUserFuncKey -syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vim9Super,vim9This -syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vimVarScope -syn match vimVar "\" nextgroup=vimSubscript contains=vimVarScope -syn match vimFBVar contained "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vimVarScope +syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vim9Super,vim9This +" dict-key only +syn match vimVarKey contained "\<\d\w*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot +syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVarScope +syn match vimVar "\" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVarScope +syn match vimFBVar contained "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVarScope " match the scope prefix independently of the retrofitted scope dictionary syn match vimVarScope contained "\<[bwglstav]:" -syn match vimVimVar contained "\<[bwglstav]:\%(\h\|\d\)\@!" nextgroup=vimSubscript +syn match vimVimVar contained "\<[bwglstav]:\%(\h\|\d\)\@!" nextgroup=vimSubscriptBrackets,vimSubscriptDot -syn match vimVarNameError contained "\<\h\w*\>" -syn match vimVimVar "\" nextgroup=vimSubscriptBrackets,vimSubscriptDot " just abort highlighting rather than match nextgroup? +syn match vimVimVar "\" contains=vim9Super,vim9This Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar @@ -307,10 +315,49 @@ syn match vimBehave "\" nextgroup=vimBehaveBang,vimBehaveModel,vi syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite syn keyword vimBehaveModel contained mswin xterm +" Break* commands {{{2 +" =============== +syn keyword vimBreakaddFunc contained func skipwhite nextgroup=vimBreakpointFunctionLine,vimBreakpointFunction +syn keyword vimBreakaddFile contained file skipwhite nextgroup=vimBreakpointFileLine,vimBreakpointFilename +syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn keyword vimBreakaddExpr contained expr skipwhite nextgroup=@vimExprList + +syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep + +syn cluster vimBreakpointArg contains=vimBreakaddFunc,vimBreakaddFile,vimBreakaddHere,vimBreakaddExpr + +syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointFilename contained "\<\%(\*\|\f\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointFunctionLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFunction +syn match vimBreakpointFileLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFilename + +syn keyword vimBreakadd breaka[dd] skipwhite nextgroup=@vimBreakpointArg +syn keyword vimBreakdel breakd[el] skipwhite nextgroup=@vimBreakpointArg,vimBreakpointNumber,vimBreakpointGlob +syn keyword vimBreaklist breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimSep + " Call {{{2 " ==== syn match vimCall "\" skipwhite nextgroup=vimVar,@vimFunc +" Cd: {{{2 +" == +" GEN_SYN_VIM: vimCommand cd, START_STR='syn keyword vimCd', END_STR='skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep' +syn match vimCd "\" skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep +syn region vimCdArg contained + \ start=+["#|]\@!\S+ + \ end="\ze\s*$" + \ end=+\ze\s*\\\@1" contains=vimCount " ===== syn match vimDefer "\" skipwhite nextgroup=@vimFunc,vim9LambdaParams +" *Do commands {{{2 +" ============ +syn match vimDoCommandBang contained "\a\@1<=!" skipwhite nextgroup=@vimCmdList + +syn keyword vimDoCommand argdo bufd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand tabd[o] wind[o] skipwhite nextgroup=@vimCmdList +syn keyword vimDoCommand cdo cfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand ld[o] lfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand foldd[oopen] folddoc[losed] skipwhite nextgroup=@vimCmdList + " Exception Handling {{{2 syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern @@ -340,6 +397,16 @@ endif syn keyword vimFTCmd contained filet[ype] syn keyword vimFTOption contained detect indent off on plugin +" History {{{2 +" ======= +" TODO: handle Vim9 "history" variable assignment (like :wincmd, but a common variable name) +syn keyword vimHistory his[tory] skipwhite nextgroup=vimHistoryName,vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn keyword vimHistoryName contained c[md] s[earch] e[xpr] i[nput] d[ebug] a[ll] skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn match vimHistoryName contained "[:/?=@>]" skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained "-\=\<\d\+\>\%(\s*,\)\=" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained ",\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained "-\=\<\d\+\s*,\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment + " Import {{{2 " ====== syn keyword vimImportAutoload contained autoload skipwhite nextgroup=vimImportFilename @@ -381,19 +448,29 @@ endif syn match vimImportName contained "\%(\" skipwhite nextgroup=@vimComment syn match vimImport "\" skipwhite nextgroup=vimImportAutoload,vimImportFilename +" Language {{{2 +" ======== +syn keyword vimLanguage lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimSep,vimComment,vim9Comment +syn keyword vimLanguageCategory contained col[late] cty[pe] mes[sages] tim[e] skipwhite nextgroup=@vimLanguageName + +" [language[_territory][.codeset][@modifier]] and the reserved "C" and "POSIX" +syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimSep,vimComment,vim9Comment +syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimSep,vimComment,vim9Comment +syn cluster vimLanguageName contains=vimLanguageName,vimLanguageNameReserved + " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking. syn cluster vimAugroupList contains=@vimCmdList,vimFilter,@vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue " define VimFolda syn region vimAugroup - \ start="\\ze\s\+\%([eE][nN][dD]\)\@!\S\+" + \ start="\\ze\s\+\%([eE][nN][dD]\%($\|[[:space:]|"#]\)\)\@!\S" \ matchgroup=vimAugroupKey - \ end="\\ze\s\+[eE][nN][dD]\>" + \ end="\\s\+[eE][nN][dD]\>" + syn match vimAugroupError "\=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile syn match vimOper "\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile syn match vimOper "\" \ skipwhite nextgroup=vim9LambdaOperator \ contains=@vim9Continue,vimDefParam,vim9LambdaParen,vim9LambdaReturnType -syn region vim9LambdaReturnType contained start=")\@<=:\s" end="\ze\s*#" end="\ze\s*=>" contains=@vim9Continue,@vimType transparent +syn region vim9LambdaReturnType contained start=")\@1<=:\s" end="\ze\s*#" end="\ze\s*=>" contains=@vim9Continue,@vimType transparent syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment @@ -561,7 +638,7 @@ syn match vimDelfunction "\" skipwhite nextgroup=vimDelfunct " ===== syn region vimReturnType contained - \ start=":\%(\s\|\n\)\@=" + \ start=")\@1<=:\%(\s\|\n\)\@=" \ skip=+\n\s*\%(\\\|#\\ \)\|^\s*#\\ + \ end="$" \ matchgroup=vim9Comment @@ -575,13 +652,21 @@ syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType conta syn match vimTypeSep contained ":\%(\s\|\n\)\@=" skipwhite nextgroup=@vimType syn keyword vimType contained blob bool channel float job number string void syn keyword vimTypeAny contained any +syn match vimTypeObject contained "\" syn region vimCompoundType contained matchgroup=vimType start="\" -syn cluster vimType contains=vimType,vimTypeAny,vimCompoundType,vimUserType +syn cluster vimType contains=vimType,vimTypeAny,vimTypeObject,vimCompoundType,vimUserType " Classes, Enums And Interfaces: {{{2 " ============================= @@ -620,7 +705,7 @@ if s:vim9script \ contains=vim9DefTypeParam syn region vim9MethodDefReturnType contained - \ start=":\%(\s\|\n\)\@=" + \ start=")\@1<=:\%(\s\|\n\)\@=" \ skip=+\n\s*\%(\\\|#\\ \)\|^\s*#\\ + \ end="$" \ matchgroup=vim9Comment @@ -676,7 +761,7 @@ if s:vim9script " FIXME: don't match as dictionary keys, remove when operators are not " shared between Vim9 and legacy script syn match vim9This contained "\.\@1:\@!" - " super must be folowed by '.' + " super must be followed by '.' syn match vim9Super contained "\.\@1" matchgroup=vimCommand end="\" contains=@vim9ClassBodyList transparent @@ -748,7 +833,7 @@ if s:vim9script \ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals syn region vim9AbstractDefReturnType contained - \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" + \ start=")\@1<=:\s" end="$" matchgroup=vim9Comment end="\ze[#"]" \ skipwhite skipnl nextgroup=vimDefComment,vimCommentError \ contains=vimTypeSep \ transparent @@ -807,6 +892,10 @@ syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1 syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1 syn match vimSpecFileMod "\(:[phtre]\)\+" contained +syn match vimSpecFile contained "%[ \t:]"me=e-1 nextgroup=vimSpecFileMod +syn match vimSpecFile contained excludenl "%$" nextgroup=vimSpecFileMod +syn match vimSpecFile contained "%<"me=e-1 nextgroup=vimSpecFileMod + " User-Specified Commands: {{{2 " ======================= syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,@vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange @@ -922,8 +1011,8 @@ syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\ syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline syn match vimNotPatSep contained "\\\\" syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell -syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend -syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend +syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscriptBrackets contains=@vimStringGroup extend +syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z\\@]'+lc=1 end=+'+ nextgroup=vimSubscriptBrackets contains=vimQuoteEscape extend "syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim syn match vimEscape contained "\\." @@ -933,17 +1022,17 @@ syn match vimEscape contained "\\<" contains=vimNotation syn match vimEscape contained "\\<\*[^>]*>\=>" syn match vimQuoteEscape contained "''" -syn region vimString oneline matchgroup=vimString start=+$'+ end=+'+ nextgroup=vimSubscript contains=@vimStringInterpolation,vimQuoteEscape extend -syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscript contains=@vimStringInterpolation,@vimStringGroup extend +syn region vimString oneline matchgroup=vimString start=+$'+ end=+'+ nextgroup=vimSubscriptBrackets contains=@vimStringInterpolation,vimQuoteEscape extend +syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscriptBrackets contains=@vimStringInterpolation,@vimStringGroup extend syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList syn match vimStringInterpolationBrace contained "{{" syn match vimStringInterpolationBrace contained "}}" syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace -syn region vimContinueString contained matchgroup=vimContinueString start=+"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringGroup -syn region vimContinueString contained matchgroup=vimContinueString start=+'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,vimQuoteEscape -syn region vimContinueString contained matchgroup=vimContinueString start=+$"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringInterpolation,@vimStringGroup -syn region vimContinueString contained matchgroup=vimContinueString start=+$'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringInterpolation,vimQuoteEscape +syn region vimContinueString contained matchgroup=vimContinueString start=+"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscriptBrackets,vimComment contains=@vimContinue,@vimStringGroup +syn region vimContinueString contained matchgroup=vimContinueString start=+'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscriptBrackets,vimComment contains=@vimContinue,vimQuoteEscape +syn region vimContinueString contained matchgroup=vimContinueString start=+$"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscriptBrackets,vimComment contains=@vimContinue,@vimStringInterpolation,@vimStringGroup +syn region vimContinueString contained matchgroup=vimContinueString start=+$'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscriptBrackets,vimComment contains=@vimContinue,@vimStringInterpolation,vimQuoteEscape " Substitutions: {{{2 " ============= @@ -1077,7 +1166,7 @@ syn region vimVarList contained \ start="\[" end="]" \ skipwhite nextgroup=vimLetHeredoc \ contains=@vimContinue,@vimSpecialVar,vimVar -syn match vimLetVar contained "\<\%([bwglstav]:\)\=\h[a-zA-Z0-9#_]*\>\ze\%(\[.*]\)\=\s*=<<" skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc contains=vimVarScope,vimSubscript +syn match vimLetVar contained "\<\%([bwglstav]:\)\=\h[a-zA-Z0-9#_]*\>\ze\%(\[.*]\)\=\s*=<<" skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc contains=vimVarScope,vimSubscriptBrackets hi link vimLetVar vimVar syn region vimLetVarSubscript contained \ matchgroup=vimSubscriptBracket @@ -1086,11 +1175,11 @@ syn region vimLetVarSubscript contained \ skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc \ contains=@vimExprList -VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars +syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars syn region vimUnletVars contained - \ start="$\I\|\h" skip=+\n\s*\%(\\\|"\\ \)\|^\s*"\\ + end="$" end="\ze[|"]" - \ nextgroup=vimCmdSep,vimComment + \ start="$\I\|\h" skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*["#]\\ + end="$" end=+\ze\s*[|"#]+ + \ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment \ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar " TODO: type error after register or environment variables (strings) @@ -1130,6 +1219,14 @@ syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@ syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|\n\)\@=" skipwhite nextgroup=@vim9VariableType syn keyword vim9VariableType contained blob bool channel float job number string void skipwhite nextgroup=vimLetHeredoc syn keyword vim9VariableTypeAny contained any skipwhite nextgroup=vimLetHeredoc +syn match vim9VariableTypeObject contained "\" skipwhite nextgroup=vimLetHeredoc syn region vim9VariableCompoundType contained \ matchgroup=vim9VariableType @@ -1155,7 +1252,7 @@ syn region vim9VariableCompoundType contained \ transparent syn match vim9VariableUserType contained "\<\%(\h\w*\.\)*\u\w*\>" skipwhite nextgroup=vimLetHeredoc -syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableCompoundType,vim9VariableUserType +syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableTypeObject,vim9VariableCompoundType,vim9VariableUserType " Lockvar and Unlockvar: {{{2 " ===================== @@ -1366,11 +1463,23 @@ syn region vimMakeArgs contained syn match vimMakeBarEscape contained "\\|" syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep +" Help*: {{{2 +" ===== +syn match vimHelp "\" skipwhite nextgroup=vimHelpBang,vimHelpArg,vimHelpNextCommand +" TODO: match wildcards, ignoring exceptions? +syn region vimHelpArg contained + \ start="\S" + \ matchgroup=Special + \ end="\%(@\a\a\)\=\ze\s*\%($\|\%x0d\|\%x00\||[^|]\)" + \ oneline +syn match vimHelpNextCommand contained "\ze|[^|]" skipwhite nextgroup=vimCmdSep +syn match vimHelpBang contained "\a\@1<=!" skipwhite nextgroup=vimHelpArg,vimHelpNextCommand + syn match vimHelpgrep "\" skipwhite nextgroup=vimHelpgrepBang,vimHelpgrepPattern syn region vimHelpgrepPattern contained \ start="\S" \ matchgroup=Special - \ end="@\w\w\>" + \ end="@\a\a\>" \ end="$" \ contains=@vimSubstList \ oneline @@ -1565,6 +1674,15 @@ syn keyword vimProfdelArg contained file skipwhite nextgroup=vimProfilePattern syn keyword vimProfdelArg contained here skipwhite nextgroup=vimCmdSep,@vimComment syn match vimProfdel "\" skipwhite nextgroup=vimProfdelArg +" Prompt{find,repl}: {{{2 +" ================= +syn region vimPromptArg contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimContinue +syn keyword vimPrompt promptf[ind] promptr[epl] skipwhite nextgroup=vimPromptArg + " Redir: {{{2 " ===== syn match vimRedir "\" skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd @@ -1674,17 +1792,32 @@ Vim9 syn match vimWincmd "\s\=\\ze\s\+=\s*\%([#|]\|$\)" skipwhite n " Syntax: {{{2 "======= -syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial -syn region vimGroupList contained start=/^\s*["#]\\ \|^\s*\\\|[^[:space:],]\+\s*,/ skip=/\s*\n\s*\%(\\\|["#]\\ \)\|^\s*\%(\\\|["#]\\ \)/ end=/[^[:space:],]\s*$\|[^[:space:],]\ze\s\+\w/ contains=@vimContinue,vimGroupSpecial +syn region vimGroupList contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + "\ need to consume the whitespace + \ end="\s"he=e-1 + \ end="$" + \ contains=@vimGroupListContinue,vimGroupSpecial,vimGroupListContinueComma syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP +syn match vimGroupListComma contained "," +syn match vimGroupListContinueComma contained "\s\+,\s*\|,\s\+" contains=vimGroupListComma +syn match vimGroupListContinueComma contained "\s*,\s*\%(\n\s*\%(\\\s\+\|["#]\\ .*\)\)\+" contains=@vimGroupListContinue,vimGroupListComma + +syn match vimGroupListEquals contained "=" skipwhite skipnl nextgroup=vimGroupListContinueStart,vimGroupList +" the first continuation line does not terminate the list at whitepace after \ +syn match vimGroupListContinueStart contained "^\%(\s*["#]\\ .*\n\)*\s*\\\s\+" skipwhite nextgroup=vimGroupList contains=@vimGroupListContinue transparent + +syn match vimGroupListContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimGroupListContinue,vimGroupListContinueComma contains=vimWhitespace +syn match vimGroupListContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimGroupListContinue contains=vimWhitespace +syn cluster vimGroupListContinue contains=vimGroupListContinue,vimGroupListContinueComment if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror") - syn match vimSynError contained "\i\+" - syn match vimSynError contained "\i\+=" nextgroup=vimGroupList + syn match vimSynError contained "\i\+" endif -syn match vimSynContains contained "\" skipwhite nextgroup=vimGroupListEquals +syn match vimSynContainedin contained "\" skipwhite nextgroup=vimGroupListEquals +syn match vimSynNextgroup contained "\" skipwhite nextgroup=vimGroupListEquals if has("conceal") " no whitespace allowed after '=' syn match vimSynCchar contained "\" skipwhite nextgroup=vimGroupListEquals +syn match vimGroupRem contained "\" skipwhite nextgroup=vimGroupListEquals " Syntax: conceal {{{2 syn match vimSynType contained "\" skipwhite nextgroup=vimSynConceal,vimSynConcealError @@ -1731,16 +1864,18 @@ syn match vimSynIskeyword contained "\S\+" contains=vimSynIskeywordSep syn match vimSynIskeywordSep contained "," " Syntax: include {{{2 -syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList +syn keyword vimSynType contained include skipwhite nextgroup=vimSynIncludeCluster +syn match vimSynIncludeCluster contained "@[_a-zA-Z0-9]\+\>" " Syntax: keyword {{{2 -syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin +syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin,vimSynKeyError syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>" +syn match vimSynKeyError contained "\" " Syntax: match {{{2 -syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment +syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup syn match vimSynMtchOpt contained "\%#=1\<\%(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>" @@ -1750,9 +1885,9 @@ syn keyword vimSynType contained enable list manual off on reset " Syntax: region {{{2 syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation -syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp +syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion -syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynRegGroup +syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynRegGroup syn match vimSynRegOpt contained "\%#=1\<\%(conceal\%(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>" syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup @@ -1923,10 +2058,10 @@ VimFoldl syn region vimLuaHeredoc contained " [-- mzscheme --] {{{3 if s:interfaces =~# 'm' - let s:iskKeep = &isk + let s:iskKeep = &l:isk syn include @vimMzSchemeScript syntax/scheme.vim unlet b:current_syntax - let &isk = s:iskKeep + let &l:isk = s:iskKeep endif syn keyword vimMzScheme mz[scheme] skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement @@ -2204,14 +2339,16 @@ unlet s:interfaces " Function Call Highlighting: {{{2 " (following Gautam Iyer's suggestion) " ========================== -syn match vimFunc contained "\<\l\w*\ze\s*(" skipwhite nextgroup=vimOperParen contains=vimFuncName -syn match vimUserFunc contained "\.\@1<=\l\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs -syn match vimUserFunc contained "\<\%([[:upper:]_]\|\%(\h\w*\.\)\+\h\)\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vim9MethodName,vim9Super,vim9This -syn match vimUserFunc contained "\<\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen contains=vimVarScope -syn match vimUserFunc contained "\%(\<[sgbwtlav]:\|<[sS][iI][dD]>\)\%(\h\w*\.\)*\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation +syn match vimFunc contained "\<\l\w*\ze\s*(" skipwhite nextgroup=vimOperParen contains=vimFuncName +" dict-key only +syn match vimUserFuncKey contained "\%(\l\|\d\)\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vim9MethodName +syn match vimUserFunc contained "\<[[:upper:]_]\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vim9MethodName,vim9Super,vim9This +syn match vimUserFunc contained "\<\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen contains=vimVarScope +syn match vimUserFunc contained "\%(\<[sgbwtlav]:\|<[sS][iI][dD]>\)\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation -Vim9 syn match vim9UserFunc "^\s*\zs\%([sgbwtv]:\|<[sS][iI][dD]>\)\=\%(\h\w*[.#]\)*\h\w*\ze[<(]" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation,vim9MethodName,vim9Super,vim9This -Vim9 syn match vim9Func "^\s*\zs\l\w*\ze(" skipwhite nextgroup=vimOperParen contains=vimFuncName +Vim9 syn match vim9UserFunc "^\s*\zs\%([sgbwtv]:\|<[sS][iI][dD]>\)\=\h\w*\ze[(<]" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation,vim9MethodName,vim9Super,vim9This +Vim9 syn match vim9UserFunc "^\s*\zs\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze[(<]" skipwhite nextgroup=vimOperParen contains=vimVarScope +Vim9 syn match vim9Func "^\s*\zs\l\w*\ze[(<]" skipwhite nextgroup=vimOperParen contains=vimFuncName syn cluster vimFunc contains=vimFunc,vimUserFunc syn cluster vim9Func contains=vim9Func,vim9UserFunc @@ -2230,7 +2367,7 @@ Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\%(\\\|#\\ \) VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\%(\\\|"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup -syn match vim9CommentTitle '#\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vim9CommentTitleLeader,vimTodo,@vimCommentGroup +syn match vim9CommentTitle '#\s*\%([sS]:\|\h\w*#\)\=\%([A-DF-Z]\w*\|E\%(\d\{1,4}\>\)\@!\w*\)\(\s\+\u\w*\)*:'hs=s+1 contained contains=vim9CommentTitleLeader,vimTodo,@vimCommentGroup " allowed anywhere in the file if !s:vim9script @@ -2305,6 +2442,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimSyncError vimError hi def link vimSynConcealError vimError hi def link vimSynError vimError + hi def link vimSynKeyError vimError hi def link vimSynFoldlevelError vimError hi def link vimSynIskeywordError vimError hi def link vimSynSpellError vimError @@ -2333,8 +2471,18 @@ if !exists("skip_vim_syntax_inits") hi def link vimBehaveModel vimBehave hi def link vimBehave vimCommand hi def link vimBracket Delimiter + hi def link vimBreakaddFunc Special + hi def link vimBreakaddFile Special + hi def link vimBreakaddHere Special + hi def link vimBreakaddExpr Special + hi def link vimBreakpointGlob Special + hi def link vimBreakadd vimCommand + hi def link vimBreakdel vimCommand + hi def link vimBreaklist vimCommand hi def link vimCall vimCommand hi def link vimCatch vimCommand + hi def link vimCd vimCommand + hi def link vimCdBang vimBang hi def link vimCmplxRepeat SpecialChar hi def link vimCommand Statement hi def link vimCommandModifier vimCommand @@ -2350,6 +2498,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimContinueString vimString hi def link vimCount Number hi def link vimCtrlChar SpecialChar + hi def link vimDebug vimCommand hi def link vimDebuggreedy vimCommand hi def link vimDef vimCommand hi def link vimDefBang vimBang @@ -2362,6 +2511,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimDelfunctionBang vimBang hi def link vimDoautocmd vimCommand hi def link vimDoautocmdMod Special + hi def link vimDoCommand vimCommand + hi def link vimDoCommandBang vimBang hi def link vimEcho vimCommand hi def link vimEchohlNone vimGroup hi def link vimEchohl vimCommand @@ -2397,11 +2548,16 @@ if !exists("skip_vim_syntax_inits") hi def link vimGrep vimCommand hi def link vimGrepadd vimCommand hi def link vimGrepBang vimBang + hi def link vimGroup Type hi def link vimGroupAdd vimSynOption + hi def link vimGroupListEquals vimSynOption + hi def link vimGroupListContinue vimContinue + hi def link vimGroupListContinueComment vimContinueComment hi def link vimGroupName Normal hi def link vimGroupRem vimSynOption hi def link vimGroupSpecial Special - hi def link vimGroup Type + hi def link vimHelp vimCommand + hi def link vimHelpBang vimBang hi def link vimHelpgrep vimCommand hi def link vimHiAttrib PreProc hi def link vimHiBang vimBang @@ -2422,6 +2578,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimHiStartStop vimHiTerm hi def link vimHiTerm Type hi def link vimHLGroup vimGroup + hi def link vimHistory vimCommand + hi def link vimHistoryName Special hi def link vimImport vimCommand hi def link vimImportAutoload Special hi def link vimImportAs vimImport @@ -2431,6 +2589,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimKeymapTailComment vimComment hi def link vimLambdaBrace Delimiter hi def link vimLambdaOperator vimOper + hi def link vimLanguage vimCommand + hi def link vimLanguageCategory Special + hi def link vimLanguageNameReserved Constant hi def link vimLet vimCommand hi def link vimLetHeredoc vimString hi def link vimLetHeredocStart Special @@ -2491,6 +2652,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimProfileBang vimBang hi def link vimProfdel vimCommand hi def link vimProfdelArg vimSpecial + hi def link vimPrompt vimCommand hi def link vimPython vimCommand hi def link vimPython3 vimCommand hi def link vimPythonX vimCommand @@ -2558,7 +2720,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimSynFoldlevel Type hi def link vimSynIskeyword Type hi def link vimSynIskeywordSep Delimiter - hi def link vimSynKeyContainedin vimSynContains + hi def link vimSynContainedin vimSynContains hi def link vimSynKeyOpt vimSynOption hi def link vimSynMtchGrp vimSynOption hi def link vimSynMtchOpt vimSynOption @@ -2586,6 +2748,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimTodo Todo hi def link vimType Type hi def link vimTypeAny vimType + hi def link vimTypeObject vimType + hi def link vimTypeObjectBracket vimTypeObject hi def link vimUniq vimCommand hi def link vimUniqBang vimBang hi def link vimUniqOptions Special @@ -2604,7 +2768,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimUserCmdError Error hi def link vimUserCmdKey vimCommand hi def link vimUserFunc Normal + hi def link vimUserFuncKey vimUserFunc hi def link vimVar Normal + hi def link vimVarKey vimVar hi def link vimVarScope Identifier hi def link vimVimgrep vimCommand hi def link vimVimgrepadd vimCommand @@ -2677,7 +2843,9 @@ if !exists("skip_vim_syntax_inits") hi def link vim9TypeEquals vimOper hi def link vim9Variable vimVar hi def link vim9VariableType vimType - hi def link vim9VariableTypeAny vimType + hi def link vim9VariableTypeAny vimTypeAny + hi def link vim9VariableTypeObject vimTypeObject + hi def link vim9VariableTypeObjectBracket vimTypeObjectBracket hi def link vim9Var vimCommand hi def link vim9Vim9ScriptArg Special hi def link vim9Vim9Script vimCommand diff --git a/runtime/syntax/glimmer.vim b/runtime/syntax/glimmer.vim new file mode 100644 index 0000000000..67555db857 --- /dev/null +++ b/runtime/syntax/glimmer.vim @@ -0,0 +1,51 @@ +" Vim syntax file +" Language: Glimmer +" Maintainer: Devin Weaver +" Last Change: 2026 Feb 20 +" Origin: https://github.com/joukevandermaas/vim-ember-hbs +" Credits: Jouke van der Maas +" License: Same as Vim + +" Vim detects GJS/GTS files as {java,type}script.glimmer +" Vim will read the javascript/typescript syntax files first and set +" b:current_syntax accordingly then it will read the glimmer syntax file. +" This is why we use b:current_syntax to make sure we are in the correct state +" to continue. + +if exists('b:current_syntax') && b:current_syntax !~# '\v%(type|java)script' + finish +endif + +let base_syntax = b:current_syntax +unlet! b:current_syntax + +let s:cpo_save = &cpo +set cpo&vim + +syntax include @hbs syntax/handlebars.vim + +if base_syntax == "javascript" + syntax region glimmerTemplateBlock + \ start="" + \ contains=@hbs + \ keepend fold + + let b:current_syntax = "javascript.glimmer" +else + " syntax/typescript.vim adds typescriptTypeCast which is in conflict with + "