summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/MAINTAINERS57
-rw-r--r--.github/actions/screendump/action.yml6
-rw-r--r--.github/workflows/ci.yml14
-rw-r--r--.gitignore2
-rw-r--r--.hgignore2
-rw-r--r--Filelist9
-rw-r--r--Makefile5
-rw-r--r--ci/appveyor.bat27
-rw-r--r--runtime/autoload/dist/ft.vim101
-rw-r--r--runtime/autoload/dist/man.vim7
-rw-r--r--runtime/autoload/dist/vim.vim4
-rw-r--r--runtime/autoload/dist/vim9.vim4
-rw-r--r--runtime/autoload/netrw.vim203
-rw-r--r--runtime/autoload/typst.vim50
-rw-r--r--runtime/autoload/zip.vim258
-rw-r--r--runtime/colors/blue.vim16
-rw-r--r--runtime/colors/darkblue.vim16
-rw-r--r--runtime/colors/delek.vim19
-rw-r--r--runtime/colors/desert.vim10
-rw-r--r--runtime/colors/elflord.vim10
-rw-r--r--runtime/colors/evening.vim16
-rw-r--r--runtime/colors/habamax.vim293
-rw-r--r--runtime/colors/industry.vim10
-rw-r--r--runtime/colors/koehler.vim16
-rw-r--r--runtime/colors/lunaperche.vim26
-rw-r--r--runtime/colors/morning.vim16
-rw-r--r--runtime/colors/murphy.vim10
-rw-r--r--runtime/colors/pablo.vim16
-rw-r--r--runtime/colors/peachpuff.vim20
-rw-r--r--runtime/colors/quiet.vim21
-rw-r--r--runtime/colors/retrobox.vim48
-rw-r--r--runtime/colors/ron.vim16
-rw-r--r--runtime/colors/shine.vim16
-rw-r--r--runtime/colors/slate.vim18
-rw-r--r--runtime/colors/sorbet.vim26
-rw-r--r--runtime/colors/torte.vim16
-rw-r--r--runtime/colors/wildcharm.vim194
-rw-r--r--runtime/colors/zaibatsu.vim10
-rw-r--r--runtime/colors/zellner.vim18
-rw-r--r--runtime/compiler/pandoc.vim45
-rw-r--r--runtime/compiler/typst.vim15
-rw-r--r--runtime/doc/Make_mvc.mak6
-rw-r--r--runtime/doc/Makefile88
-rw-r--r--runtime/doc/autocmd.txt52
-rw-r--r--runtime/doc/builtin.txt155
-rw-r--r--runtime/doc/change.txt25
-rw-r--r--runtime/doc/channel.txt7
-rw-r--r--runtime/doc/cmdline.txt5
-rw-r--r--runtime/doc/editing.txt16
-rw-r--r--runtime/doc/eval.txt10
-rw-r--r--runtime/doc/evim-it.18
-rw-r--r--runtime/doc/evim-it.UTF-8.18
-rw-r--r--runtime/doc/evim-ru.180
-rw-r--r--runtime/doc/evim-ru.UTF-8.180
-rw-r--r--runtime/doc/evim.18
-rw-r--r--runtime/doc/evim.man9
-rw-r--r--runtime/doc/filetype.txt39
-rw-r--r--runtime/doc/gui.txt4
-rw-r--r--runtime/doc/index.txt8
-rw-r--r--runtime/doc/insert.txt40
-rw-r--r--runtime/doc/map.txt3
-rw-r--r--runtime/doc/mbyte.txt6
-rw-r--r--runtime/doc/mlang.txt6
-rw-r--r--runtime/doc/motion.txt5
-rw-r--r--runtime/doc/options.txt56
-rw-r--r--runtime/doc/pattern.txt8
-rw-r--r--runtime/doc/pi_netrw.txt11
-rw-r--r--runtime/doc/popup.txt20
-rw-r--r--runtime/doc/quickfix.txt28
-rw-r--r--runtime/doc/quickref.txt1
-rw-r--r--runtime/doc/repeat.txt334
-rw-r--r--runtime/doc/scroll.txt5
-rw-r--r--runtime/doc/sign.txt24
-rw-r--r--runtime/doc/sponsor.txt11
-rw-r--r--runtime/doc/starting.txt25
-rw-r--r--runtime/doc/syntax.txt275
-rw-r--r--runtime/doc/tabpage.txt5
-rw-r--r--runtime/doc/tags44
-rw-r--r--runtime/doc/tagsrch.txt20
-rw-r--r--runtime/doc/terminal.txt48
-rw-r--r--runtime/doc/testing.txt30
-rw-r--r--runtime/doc/todo.txt7
-rw-r--r--runtime/doc/uganda.rux19
-rw-r--r--runtime/doc/uganda.txt6
-rw-r--r--runtime/doc/usr_05.txt20
-rw-r--r--runtime/doc/usr_41.txt4
-rw-r--r--runtime/doc/various.txt7
-rw-r--r--runtime/doc/version9.txt41
-rw-r--r--runtime/doc/vim-it.1175
-rw-r--r--runtime/doc/vim-it.UTF-8.1175
-rw-r--r--runtime/doc/vim-ja.UTF-8.191
-rw-r--r--runtime/doc/vim-ru.1794
-rw-r--r--runtime/doc/vim-ru.UTF-8.1794
-rw-r--r--runtime/doc/vim.1166
-rw-r--r--runtime/doc/vim.man241
-rw-r--r--runtime/doc/vimdiff-it.12
-rw-r--r--runtime/doc/vimdiff-it.UTF-8.12
-rw-r--r--runtime/doc/vimdiff-ru.165
-rw-r--r--runtime/doc/vimdiff-ru.UTF-8.165
-rw-r--r--runtime/doc/vimdiff.12
-rw-r--r--runtime/doc/vimdiff.man2
-rw-r--r--runtime/doc/vimtutor-it.112
-rw-r--r--runtime/doc/vimtutor-it.UTF-8.112
-rw-r--r--runtime/doc/vimtutor-ru.176
-rw-r--r--runtime/doc/vimtutor-ru.UTF-8.176
-rw-r--r--runtime/doc/vimtutor.112
-rw-r--r--runtime/doc/vimtutor.man9
-rw-r--r--runtime/doc/windows.txt5
-rw-r--r--runtime/doc/xxd-it.183
-rw-r--r--runtime/doc/xxd-it.UTF-8.183
-rw-r--r--runtime/doc/xxd-ja.UTF-8.15
-rw-r--r--runtime/doc/xxd-ru.1466
-rw-r--r--runtime/doc/xxd-ru.UTF-8.1466
-rw-r--r--runtime/doc/xxd.159
-rw-r--r--runtime/doc/xxd.man53
-rw-r--r--runtime/filetype.vim88
-rw-r--r--runtime/ftplugin/antlr4.vim14
-rw-r--r--runtime/ftplugin/asy.vim14
-rw-r--r--runtime/ftplugin/autohotkey.vim16
-rw-r--r--runtime/ftplugin/bindzone.vim16
-rw-r--r--runtime/ftplugin/cabal.vim13
-rw-r--r--runtime/ftplugin/cedar.vim13
-rw-r--r--runtime/ftplugin/chicken.vim16
-rw-r--r--runtime/ftplugin/cmakecache.vim13
-rw-r--r--runtime/ftplugin/csv.vim23
-rw-r--r--runtime/ftplugin/cuda.vim11
-rw-r--r--runtime/ftplugin/editorconfig.vim13
-rw-r--r--runtime/ftplugin/gdscript.vim6
-rw-r--r--runtime/ftplugin/go.vim6
-rw-r--r--runtime/ftplugin/goaccess.vim14
-rw-r--r--runtime/ftplugin/gomod.vim16
-rw-r--r--runtime/ftplugin/hlsplaylist.vim37
-rw-r--r--runtime/ftplugin/htmlangular.vim12
-rw-r--r--runtime/ftplugin/javacc.vim20
-rw-r--r--runtime/ftplugin/kivy.vim13
-rw-r--r--runtime/ftplugin/ldapconf.vim13
-rw-r--r--runtime/ftplugin/lex.vim14
-rw-r--r--runtime/ftplugin/man.vim14
-rw-r--r--runtime/ftplugin/mediawiki.vim42
-rw-r--r--runtime/ftplugin/mermaid.vim5
-rw-r--r--runtime/ftplugin/mojo.vim41
-rw-r--r--runtime/ftplugin/mysql.vim9
-rw-r--r--runtime/ftplugin/objcpp.vim1
-rw-r--r--runtime/ftplugin/scheme.vim18
-rw-r--r--runtime/ftplugin/sql.vim26
-rw-r--r--runtime/ftplugin/squirrel.vim17
-rw-r--r--runtime/ftplugin/terraform.vim14
-rw-r--r--runtime/ftplugin/tf.vim13
-rw-r--r--runtime/ftplugin/thrift.vim17
-rw-r--r--runtime/ftplugin/typst.vim22
-rw-r--r--runtime/ftplugin/yacc.vim16
-rw-r--r--runtime/indent/Make_mvc.mak4
-rw-r--r--runtime/indent/Makefile4
-rw-r--r--runtime/indent/glsl.vim14
-rw-r--r--runtime/indent/lua.vim9
-rw-r--r--runtime/indent/mojo.vim6
-rw-r--r--runtime/indent/ocaml.vim4
-rw-r--r--runtime/indent/proto.vim19
-rw-r--r--runtime/indent/rust.vim9
-rw-r--r--runtime/indent/scheme.vim9
-rw-r--r--runtime/indent/testdir/lua.in19
-rw-r--r--runtime/indent/testdir/lua.ok19
-rw-r--r--runtime/indent/testdir/thrift.in38
-rw-r--r--runtime/indent/testdir/thrift.ok38
-rw-r--r--runtime/indent/thrift.vim74
-rw-r--r--runtime/indent/typst.vim18
-rw-r--r--runtime/indent/vim.vim6
-rw-r--r--runtime/indent/yaml.vim5
-rw-r--r--runtime/lang/Makefile92
-rw-r--r--runtime/lang/menu_pt_br.vim304
-rw-r--r--runtime/lang/menu_pt_pt.vim38
-rw-r--r--runtime/macros/maze/mazeclean.c2
-rw-r--r--runtime/optwin.vim4
-rw-r--r--runtime/pack/dist/opt/nohlsearch/plugin/nohlsearch.vim20
-rw-r--r--runtime/pack/dist/opt/termdebug/plugin/termdebug.vim625
-rw-r--r--runtime/plugin/manpager.vim8
-rw-r--r--runtime/plugin/matchparen.vim8
-rw-r--r--runtime/syntax/antlr4.vim30
-rw-r--r--runtime/syntax/asy.vim243
-rw-r--r--runtime/syntax/chicken.vim18
-rw-r--r--runtime/syntax/csv.vim39
-rw-r--r--runtime/syntax/debcopyright.vim4
-rw-r--r--runtime/syntax/dockerfile.vim4
-rw-r--r--runtime/syntax/dosbatch.vim9
-rw-r--r--runtime/syntax/dune.vim3
-rw-r--r--runtime/syntax/fstab.vim22
-rw-r--r--runtime/syntax/generator/Makefile6
-rw-r--r--runtime/syntax/generator/gen_syntax_vim.vim19
-rw-r--r--runtime/syntax/generator/vim.vim.base298
-rw-r--r--runtime/syntax/glsl.vim752
-rw-r--r--runtime/syntax/goaccess.vim34
-rw-r--r--runtime/syntax/html.vim3
-rw-r--r--runtime/syntax/htmlangular.vim18
-rw-r--r--runtime/syntax/java.vim462
-rw-r--r--runtime/syntax/javascript.vim9
-rw-r--r--runtime/syntax/kconfig.vim4
-rw-r--r--runtime/syntax/kivy.vim10
-rw-r--r--runtime/syntax/logindefs.vim27
-rw-r--r--runtime/syntax/make.vim21
-rw-r--r--runtime/syntax/mediawiki.vim292
-rw-r--r--runtime/syntax/mysql.vim314
-rw-r--r--runtime/syntax/ocaml.vim407
-rw-r--r--runtime/syntax/opam.vim52
-rw-r--r--runtime/syntax/progress.vim14
-rw-r--r--runtime/syntax/scheme.vim21
-rw-r--r--runtime/syntax/sdc.vim46
-rw-r--r--runtime/syntax/testdir/README.txt102
-rw-r--r--runtime/syntax/testdir/dumps/c_02.dump10
-rw-r--r--runtime/syntax/testdir/dumps/c_03.dump8
-rw-r--r--runtime/syntax/testdir/dumps/c_04.dump12
-rw-r--r--runtime/syntax/testdir/dumps/c_05.dump12
-rw-r--r--runtime/syntax/testdir/dumps/c_06.dump12
-rw-r--r--runtime/syntax/testdir/dumps/c_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/c_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_01_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_01_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_01_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_01_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_02_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_02_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_02_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_02_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_03_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_03_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_03_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_03_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_04_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_04_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_04_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_04_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_04_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_05_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_05_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_05_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_05_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_05_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_06_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_06_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_06_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_06_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_07_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_07_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_07_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_07_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_07_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_08_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_08_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_08_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_08_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_08_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_09_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_09_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_09_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_09_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_10_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_10_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_10_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_10_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_10_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_10_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_11_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_11_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_11_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_11_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_11_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_11_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_12_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_12_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_12_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_12_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_12_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_13_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_13_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_13_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_13_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_13_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_14_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_14_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_14_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_14_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_14_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_15_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_15_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_15_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_15_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_16_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_16_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_16_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_16_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_17_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_17_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_17_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_17_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_18_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_18_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_18_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_18_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_19_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_19_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_19_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_19_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_20_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/dots_20_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_01.dump12
-rw-r--r--runtime/syntax/testdir/dumps/html_02.dump12
-rw-r--r--runtime/syntax/testdir/dumps/html_03.dump12
-rw-r--r--runtime/syntax/testdir/dumps/html_04.dump12
-rw-r--r--runtime/syntax/testdir/dumps/html_05.dump12
-rw-r--r--runtime/syntax/testdir/dumps/html_06.dump12
-rw-r--r--runtime/syntax/testdir/dumps/html_07.dump12
-rw-r--r--runtime/syntax/testdir/dumps/html_08.dump12
-rw-r--r--runtime/syntax/testdir/dumps/html_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_annotations_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_annotations_signature_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_annotations_signature_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_annotations_signature_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_annotations_signature_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_annotations_signature_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_comments_02.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_comments_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_comments_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_contextual_keywords_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_enfoldment_00.dump14
-rw-r--r--runtime/syntax/testdir/dumps/java_enfoldment_01.dump28
-rw-r--r--runtime/syntax/testdir/dumps/java_enfoldment_02.dump40
-rw-r--r--runtime/syntax/testdir/dumps/java_enfoldment_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_enfoldment_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_enfoldment_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_escapes_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_escapes_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_signature_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_signature_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_signature_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_signature_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_signature_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_signature_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_signature_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_generics_signature_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_07.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_lambda_expressions_signature_08.dump (renamed from runtime/syntax/testdir/dumps/java_lambda_expressions_99.dump)16
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_08.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_09.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_10.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_08.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_09.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_method_references_signature_10.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_01.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_02.dump4
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_03.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_04.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_05.vim (renamed from runtime/syntax/testdir/dumps/java_methods_indent2_99.vim)0
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.vim (renamed from runtime/syntax/testdir/dumps/java_methods_indent4_99.vim)0
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.vim (renamed from runtime/syntax/testdir/dumps/java_methods_indent8_99.vim)0
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.vim (renamed from runtime/syntax/testdir/dumps/java_methods_style_99.vim)0
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.vim (renamed from runtime/syntax/testdir/dumps/vim_keymap_99.vim)2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_01.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_02.dump4
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_03.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_04.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_05.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent4_signature_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_01.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_02.dump4
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_03.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_04.dump10
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_05.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_indent8_signature_06.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_00.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_01.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_02.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_03.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_methods_style_signature_04.vim2
-rw-r--r--runtime/syntax/testdir/dumps/java_numbers_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_numbers_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_string_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_switch_01.dump10
-rw-r--r--runtime/syntax/testdir/dumps/java_switch_02.dump10
-rw-r--r--runtime/syntax/testdir/dumps/java_switch_03.dump12
-rw-r--r--runtime/syntax/testdir/dumps/java_switch_04.dump10
-rw-r--r--runtime/syntax/testdir/dumps/java_switch_05.dump12
-rw-r--r--runtime/syntax/testdir/dumps/java_switch_06.dump12
-rw-r--r--runtime/syntax/testdir/dumps/java_switch_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_switch_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/java_unfoldment_01.dump2
-rw-r--r--runtime/syntax/testdir/dumps/java_unfoldment_02.dump4
-rw-r--r--runtime/syntax/testdir/dumps/java_unfoldment_03.dump28
-rw-r--r--runtime/syntax/testdir/dumps/java_unfoldment_04.dump28
-rw-r--r--runtime/syntax/testdir/dumps/java_unfoldment_05.dump (renamed from runtime/syntax/testdir/dumps/java_unfoldment_99.dump)18
-rw-r--r--runtime/syntax/testdir/dumps/markdown_conceal_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_02.dump10
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_03.dump10
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_04.dump10
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_05.dump10
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_06.dump10
-rw-r--r--runtime/syntax/testdir/dumps/modula2_iso_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_pim_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_02.dump10
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_03.dump10
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_04.dump12
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_05.dump10
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_06.dump12
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_07.dump12
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_08.dump20
-rw-r--r--runtime/syntax/testdir/dumps/modula2_r10_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/progress_comments_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/progress_comments_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/progress_comments_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_01_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_02_01.dump10
-rw-r--r--runtime/syntax/testdir/dumps/sh_02_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_03_01.dump10
-rw-r--r--runtime/syntax/testdir/dumps/sh_03_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_03_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_04_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_02.dump6
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_03.dump10
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_04.dump10
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_05.dump10
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_06.dump10
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_07.dump12
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_08.dump12
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_09.dump12
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_10.dump12
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_11.dump12
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_12.dump14
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_13.dump14
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_14.dump14
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_15.dump14
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_16.dump16
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_17.dump16
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_18.dump16
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_19.dump18
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_20.dump16
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_21.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_05_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_06_01.dump12
-rw-r--r--runtime/syntax/testdir/dumps/sh_06_02.dump12
-rw-r--r--runtime/syntax/testdir/dumps/sh_06_03.dump14
-rw-r--r--runtime/syntax/testdir/dumps/sh_06_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_06_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_07_01.dump16
-rw-r--r--runtime/syntax/testdir/dumps/sh_07_02.dump18
-rw-r--r--runtime/syntax/testdir/dumps/sh_07_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_07_04.dump26
-rw-r--r--runtime/syntax/testdir/dumps/sh_07_05.dump (renamed from runtime/syntax/testdir/dumps/sh_07_99.dump)6
-rw-r--r--runtime/syntax/testdir/dumps/sh_08_02.dump10
-rw-r--r--runtime/syntax/testdir/dumps/sh_08_03.dump12
-rw-r--r--runtime/syntax/testdir/dumps/sh_08_04.dump14
-rw-r--r--runtime/syntax/testdir/dumps/sh_08_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_09_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_10_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_11_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/sh_11_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_comment_00.dump2
-rw-r--r--runtime/syntax/testdir/dumps/vim9_comment_01.dump6
-rw-r--r--runtime/syntax/testdir/dumps/vim9_comment_03.dump2
-rw-r--r--runtime/syntax/testdir/dumps/vim9_comment_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_08.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_09.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_10.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_11.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_12.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_13.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_14.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_15.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_16.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_17.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_18.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_19.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_20.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_21.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_22.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_23.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_24.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_25.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_26.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_27.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_28.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_29.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_30.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_31.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_32.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_33.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_34.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_35.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_36.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_37.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_38.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_39.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_40.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_41.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_42.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_43.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_44.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_45.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_46.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_47.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_48.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_49.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_50.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_51.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_52.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_53.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_54.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_55.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_56.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_57.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_58.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_59.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_60.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_61.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_62.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_63.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_64.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_65.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_66.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_67.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_commands_68.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_comment_strings_00.dump4
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump4
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_comment_strings_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_loadkeymap_00.dump (renamed from runtime/syntax/testdir/dumps/vim9_keymap_00.dump)4
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_loadkeymap_01.dump (renamed from runtime/syntax/testdir/dumps/vim9_keymap_01.dump)0
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_00.dump4
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump4
-rw-r--r--runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_keymap_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_legacy_header_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_legacy_header_fold_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim9_shebang_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_comment_03.dump2
-rw-r--r--runtime/syntax/testdir/dumps/vim_comment_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_abbreviate_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_augroup_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_behave_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_call_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_call_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_call_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_call_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_catch_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_command_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_05.dump2
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_06.dump8
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_07.dump8
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_08.dump8
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_09.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_10.dump12
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_11.dump12
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_12.dump12
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_13.dump12
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_14.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_15.dump12
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_16.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_17.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_18.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_19.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_20.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_21.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_22.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_23.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_24.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_25.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_26.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_27.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_28.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_29.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_30.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_31.dump18
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_32.dump18
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_33.dump18
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_34.dump18
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_35.dump18
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_36.dump18
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_37.dump18
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_38.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_39.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_40.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_41.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_42.dump22
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_43.dump24
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_44.dump24
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_45.dump24
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_46.dump24
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_47.dump24
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_48.dump24
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_49.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_50.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_51.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_52.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_53.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_54.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_55.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_56.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_57.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_58.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_59.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_60.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_61.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_62.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_63.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_64.dump30
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_65.dump30
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_66.dump40
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_67.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_68.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_commands_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_comment_strings_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_comment_strings_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_05.dump12
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_fold_02.dump22
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_fold_03.dump24
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_fold_04.dump22
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_fold_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_fold_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_fold_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_fold_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump2
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_nested_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_nested_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump2
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_echo_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_echo_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_execute_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_10.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump26
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump30
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump34
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_08.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_09.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_12.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_fold_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_nested_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_nested_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_highlight_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_highlight_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_08.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_09.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_loadkeymap_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_loadkeymap_01.dump (renamed from runtime/syntax/testdir/dumps/vim_keymap_99.dump)28
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_loadkeymap_after_bar_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_loadkeymap_after_colon_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_map_00.dump6
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_map_01.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_map_02.dump12
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_map_03.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_map_04.dump32
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_map_05.dump (renamed from runtime/syntax/testdir/dumps/vim_ex_map_99.dump)10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_map_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_match_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_match_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_menu_03.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_menu_04.dump12
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_menu_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_menu_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_menutranslate_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_menutranslate_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_set_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_set_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_set_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_set_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_set_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_set_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_sleep_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_substitute_08.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_substitute_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump10
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_10.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_syntax_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_ex_throw_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_expr_01.dump14
-rw-r--r--runtime/syntax/testdir/dumps/vim_expr_02.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_expr_03.dump16
-rw-r--r--runtime/syntax/testdir/dumps/vim_expr_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_expr_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_key_notation_09.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_key_notation_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_keymap_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_keymap_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_keymap_04.vim (renamed from runtime/syntax/testdir/dumps/vim9_keymap_99.vim)0
-rw-r--r--runtime/syntax/testdir/dumps/vim_line_continuation_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_new_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_object_methods_00.dump4
-rw-r--r--runtime/syntax/testdir/dumps/vim_object_methods_02.dump6
-rw-r--r--runtime/syntax/testdir/dumps/vim_object_methods_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_object_methods_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_shebang_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/vim_variables_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_08.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml.yaml_99.dump20
-rw-r--r--runtime/syntax/testdir/dumps/yaml_01.dump4
-rw-r--r--runtime/syntax/testdir/dumps/yaml_03.dump2
-rw-r--r--runtime/syntax/testdir/dumps/yaml_04.dump2
-rw-r--r--runtime/syntax/testdir/dumps/yaml_05.dump8
-rw-r--r--runtime/syntax/testdir/dumps/yaml_06.dump12
-rw-r--r--runtime/syntax/testdir/dumps/yaml_07.dump16
-rw-r--r--runtime/syntax/testdir/dumps/yaml_99.dump20
-rw-r--r--runtime/syntax/testdir/input/java_annotations_signature.java78
-rw-r--r--runtime/syntax/testdir/input/java_enfoldment.java16
-rw-r--r--runtime/syntax/testdir/input/java_generics.java140
-rw-r--r--runtime/syntax/testdir/input/java_generics_signature.java140
-rw-r--r--runtime/syntax/testdir/input/java_lambda_expressions.java2
-rw-r--r--runtime/syntax/testdir/input/java_lambda_expressions_signature.java154
-rw-r--r--runtime/syntax/testdir/input/java_method_references.java186
-rw-r--r--runtime/syntax/testdir/input/java_method_references_signature.java186
-rw-r--r--runtime/syntax/testdir/input/java_methods_indent2.java18
-rw-r--r--runtime/syntax/testdir/input/java_methods_indent2_signature.java104
-rw-r--r--runtime/syntax/testdir/input/java_methods_indent4.java18
-rw-r--r--runtime/syntax/testdir/input/java_methods_indent4_signature.java104
-rw-r--r--runtime/syntax/testdir/input/java_methods_indent8.java18
-rw-r--r--runtime/syntax/testdir/input/java_methods_indent8_signature.java104
-rw-r--r--runtime/syntax/testdir/input/java_methods_style_signature.java82
-rw-r--r--runtime/syntax/testdir/input/java_switch.java10
-rw-r--r--runtime/syntax/testdir/input/java_unfoldment.java14
-rw-r--r--runtime/syntax/testdir/input/progress_comments.p45
-rw-r--r--runtime/syntax/testdir/input/selftestdir/README.txt10
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_01 (renamed from runtime/syntax/testdir/input/vim_keymap.vim)87
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_0230
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_0320
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_0415
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_0512
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_0610
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_079
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_088
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_097
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_106
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_116
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_125
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_135
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_145
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_154
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_164
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_174
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_184
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_194
-rw-r--r--runtime/syntax/testdir/input/selftestdir/dots_202
-rw-r--r--runtime/syntax/testdir/input/vim9_ex_commands.vim1225
-rw-r--r--runtime/syntax/testdir/input/vim9_ex_function_def_tail_comment_errors.vim44
-rw-r--r--runtime/syntax/testdir/input/vim9_ex_function_def_tail_comments.vim44
-rw-r--r--runtime/syntax/testdir/input/vim9_ex_loadkeymap.vim (renamed from runtime/syntax/testdir/input/vim9_keymap.vim)4
-rw-r--r--runtime/syntax/testdir/input/vim_ex_call.vim51
-rw-r--r--runtime/syntax/testdir/input/vim_ex_commands.vim56
-rw-r--r--runtime/syntax/testdir/input/vim_ex_def.vim2
-rw-r--r--runtime/syntax/testdir/input/vim_ex_def_fold.vim4
-rw-r--r--runtime/syntax/testdir/input/vim_ex_function_def_tail_comment_errors.vim43
-rw-r--r--runtime/syntax/testdir/input/vim_ex_function_def_tail_comments.vim43
-rw-r--r--runtime/syntax/testdir/input/vim_ex_function_fold.vim3
-rw-r--r--runtime/syntax/testdir/input/vim_ex_let_heredoc.vim196
-rw-r--r--runtime/syntax/testdir/input/vim_ex_loadkeymap.vim24
-rw-r--r--runtime/syntax/testdir/input/vim_ex_loadkeymap_after_bar.vim10
-rw-r--r--runtime/syntax/testdir/input/vim_ex_loadkeymap_after_colon.vim10
-rw-r--r--runtime/syntax/testdir/input/vim_ex_map.vim24
-rw-r--r--runtime/syntax/testdir/input/vim_ex_match.vim32
-rw-r--r--runtime/syntax/testdir/input/vim_ex_set.vim93
-rw-r--r--runtime/syntax/testdir/input/yaml.yaml7
-rw-r--r--runtime/syntax/testdir/runtest.vim204
-rw-r--r--runtime/syntax/testdir/viewdumps.vim24
-rw-r--r--runtime/syntax/thrift.vim74
-rw-r--r--runtime/syntax/tmux.vim12
-rw-r--r--runtime/syntax/tsv.vim12
-rw-r--r--runtime/syntax/typst.vim472
-rw-r--r--runtime/syntax/vim.vim368
-rw-r--r--runtime/syntax/yaml.vim2
-rw-r--r--runtime/tutor/Makefile52
-rw-r--r--runtime/tutor/tutor.es2
-rw-r--r--runtime/tutor/tutor.es.utf-82
-rw-r--r--src/GvimExt/Make_ming.mak4
-rw-r--r--src/GvimExt/Make_mvc.mak25
-rw-r--r--src/INSTALL6
-rw-r--r--src/Make_cyg_ming.mak58
-rw-r--r--src/Make_mvc.mak363
-rw-r--r--src/Makefile12
-rw-r--r--src/arglist.c6
-rwxr-xr-xsrc/auto/configure37
-rw-r--r--src/autocmd.c13
-rw-r--r--src/buffer.c39
-rw-r--r--src/bufwrite.c4
-rw-r--r--src/change.c4
-rw-r--r--src/channel.c2
-rw-r--r--src/charset.c34
-rw-r--r--src/cmdexpand.c15
-rw-r--r--src/config.h.in7
-rw-r--r--src/configure.ac19
-rw-r--r--src/dict.c7
-rw-r--r--src/edit.c8
-rw-r--r--src/errors.h41
-rw-r--r--src/eval.c106
-rw-r--r--src/evalfunc.c245
-rw-r--r--src/evalvars.c2
-rw-r--r--src/ex_cmds.c25
-rw-r--r--src/ex_cmds2.c2
-rw-r--r--src/ex_docmd.c125
-rw-r--r--src/ex_getln.c65
-rw-r--r--src/fileio.c4
-rw-r--r--src/filepath.c14
-rw-r--r--src/findfile.c70
-rw-r--r--src/fold.c5
-rw-r--r--src/getchar.c227
-rw-r--r--src/globals.h68
-rw-r--r--src/gui.c2
-rw-r--r--src/gui_gtk_x11.c4
-rw-r--r--src/gui_w32.c9
-rw-r--r--src/help.c4
-rw-r--r--src/highlight.c4
-rw-r--r--src/if_mzsch.c21
-rw-r--r--src/if_py_both.h16
-rw-r--r--src/if_python3.c58
-rw-r--r--src/indent.c2
-rw-r--r--src/insexpand.c229
-rw-r--r--src/list.c7
-rw-r--r--src/macros.h6
-rw-r--r--src/map.c46
-rw-r--r--src/mark.c32
-rw-r--r--src/mbyte.c11
-rw-r--r--src/memline.c10
-rw-r--r--src/misc1.c22
-rw-r--r--src/misc2.c2
-rw-r--r--src/move.c9
-rw-r--r--src/netbeans.c2
-rw-r--r--src/normal.c10
-rw-r--r--src/ops.c31
-rw-r--r--src/option.h27
-rw-r--r--src/optiondefs.h16
-rw-r--r--src/optionstr.c25
-rw-r--r--src/os_mswin.c255
-rw-r--r--src/os_unix.c42
-rw-r--r--src/os_w32dll.c2
-rw-r--r--src/os_w32exe.c72
-rw-r--r--src/os_win32.c71
-rw-r--r--src/po/Make_cyg.mak10
-rw-r--r--src/po/Make_ming.mak12
-rw-r--r--src/po/Make_mvc.mak167
-rw-r--r--src/po/Makefile101
-rw-r--r--src/po/README.txt17
-rw-r--r--src/po/README_mvc.txt18
-rw-r--r--src/po/ca.po4
-rw-r--r--src/po/cleanup.vim12
-rw-r--r--src/po/cs.cp1250.po2
-rw-r--r--src/po/da.po4
-rw-r--r--src/po/de.po4
-rw-r--r--src/po/eo.po4
-rw-r--r--src/po/es.po4
-rw-r--r--src/po/fi.po4
-rw-r--r--src/po/fixfilenames.vim8
-rw-r--r--src/po/fr.po4
-rw-r--r--src/po/ga.po4
-rw-r--r--src/po/hu.po4
-rw-r--r--src/po/it.po91
-rw-r--r--src/po/ja.euc-jp.po181
-rw-r--r--src/po/ja.po181
-rw-r--r--src/po/ja.sjis.po181
-rw-r--r--src/po/ko.UTF-8.po4
-rw-r--r--src/po/ko.po10
-rw-r--r--src/po/nb.po5
-rw-r--r--src/po/nl.po4
-rw-r--r--src/po/no.po5
-rw-r--r--src/po/pl.UTF-8.po4
-rw-r--r--src/po/pl.cp1250.po6
-rw-r--r--src/po/pl.po4
-rw-r--r--src/po/pt_BR.po39
-rw-r--r--src/po/ru.cp1251.po329
-rw-r--r--src/po/ru.po2
-rw-r--r--src/po/sk.cp1250.po2
-rw-r--r--src/po/sr.po68
-rw-r--r--src/po/sv.po4
-rw-r--r--src/po/tojavascript.vim13
-rw-r--r--src/po/tr.po180
-rw-r--r--src/po/uk.cp1251.po4
-rw-r--r--src/po/uk.po4
-rw-r--r--src/po/zh_CN.UTF-8.po4
-rw-r--r--src/po/zh_CN.cp936.po6
-rw-r--r--src/po/zh_CN.po6
-rw-r--r--src/po/zh_TW.po2
-rw-r--r--src/popupmenu.c21
-rw-r--r--src/popupwin.c54
-rw-r--r--src/proto/autocmd.pro1
-rw-r--r--src/proto/dict.pro2
-rw-r--r--src/proto/findfile.pro2
-rw-r--r--src/proto/list.pro2
-rw-r--r--src/proto/mark.pro1
-rw-r--r--src/proto/mbyte.pro1
-rw-r--r--src/proto/memline.pro2
-rw-r--r--src/proto/option.pro1
-rw-r--r--src/proto/optionstr.pro1
-rw-r--r--src/proto/os_mswin.pro2
-rw-r--r--src/proto/os_unix.pro1
-rw-r--r--src/proto/popupwin.pro1
-rw-r--r--src/proto/search.pro1
-rw-r--r--src/proto/sign.pro2
-rw-r--r--src/proto/tag.pro1
-rw-r--r--src/proto/typval.pro3
-rw-r--r--src/proto/userfunc.pro3
-rw-r--r--src/proto/vim9class.pro1
-rw-r--r--src/proto/vim9instr.pro2
-rw-r--r--src/proto/window.pro1
-rw-r--r--src/regexp.c58
-rw-r--r--src/regexp_bt.c8
-rw-r--r--src/regexp_nfa.c9
-rw-r--r--src/search.c172
-rw-r--r--src/sign.c37
-rw-r--r--src/spellfile.c8
-rw-r--r--src/strings.c64
-rw-r--r--src/structs.h23
-rw-r--r--src/syntax.c119
-rw-r--r--src/tag.c12
-rw-r--r--src/terminal.c18
-rw-r--r--src/testdir/Make_all.mak18
-rw-r--r--src/testdir/Make_mvc.mak8
-rw-r--r--src/testdir/Makefile4
-rw-r--r--src/testdir/README.txt83
-rw-r--r--src/testdir/commondumps.vim76
-rw-r--r--src/testdir/crash/dialog_changed_uafbin0 -> 552 bytes
-rw-r--r--src/testdir/crash/double_freebin0 -> 561 bytes
-rw-r--r--src/testdir/crash/heap_overflow3bin0 -> 700 bytes
-rw-r--r--src/testdir/crash/nullpointerbin0 -> 315 bytes
-rw-r--r--src/testdir/crash/reverse_text_overflowbin0 -> 314 bytes
-rw-r--r--src/testdir/dumps/Test_breakindent_with_double_width_wrap_1.dump6
-rw-r--r--src/testdir/dumps/Test_cmdwin_no_terminal.dump2
-rw-r--r--src/testdir/dumps/Test_matchparen_mbyte_1.dump10
-rw-r--r--src/testdir/dumps/Test_matchparen_mbyte_2.dump10
-rw-r--r--src/testdir/dumps/Test_matchparen_mbyte_3.dump10
-rw-r--r--src/testdir/dumps/Test_matchparen_mbyte_4.dump10
-rw-r--r--src/testdir/dumps/Test_matchparen_mbyte_5.dump10
-rw-r--r--src/testdir/dumps/Test_matchparen_mbyte_6.dump10
-rw-r--r--src/testdir/dumps/Test_matchparen_mbyte_7.dump10
-rw-r--r--src/testdir/dumps/Test_matchparen_mbyte_8.dump10
-rw-r--r--src/testdir/dumps/Test_popup_setbuf_01.dump10
-rw-r--r--src/testdir/dumps/Test_popup_setbuf_02.dump10
-rw-r--r--src/testdir/dumps/Test_popup_setbuf_03.dump10
-rw-r--r--src/testdir/dumps/Test_popup_setbuf_04.dump10
-rw-r--r--src/testdir/dumps/Test_popup_setbuf_05.dump10
-rw-r--r--src/testdir/dumps/Test_popup_setbuf_06.dump10
-rw-r--r--src/testdir/dumps/Test_prop_inserts_text_before_double_width_wrap_2.dump3
-rw-r--r--src/testdir/dumps/Test_prop_inserts_text_before_double_width_wrap_3.dump3
-rw-r--r--src/testdir/dumps/Test_pum_highlights_10.dump20
-rw-r--r--src/testdir/dumps/Test_pum_highlights_11.dump20
-rw-r--r--src/testdir/dumps/Test_pum_highlights_12.dump20
-rw-r--r--src/testdir/dumps/Test_pum_highlights_13.dump20
-rw-r--r--src/testdir/dumps/Test_pum_highlights_14.dump20
-rw-r--r--src/testdir/dumps/Test_pum_highlights_15.dump20
-rw-r--r--src/testdir/dumps/Test_pum_highlights_16.dump20
-rw-r--r--src/testdir/dumps/Test_wildmenu_pum_11.dump2
-rw-r--r--src/testdir/dumps/Test_wildmenu_pum_12.dump2
-rw-r--r--src/testdir/dumps/Test_wildmenu_pum_13.dump2
-rw-r--r--src/testdir/dumps/Test_wildmenu_pum_22.dump4
-rw-r--r--src/testdir/gen_opt_test.vim1
-rw-r--r--src/testdir/ru_RU/LC_MESSAGES/__PACKAGE__.mobin0 -> 875 bytes
-rw-r--r--src/testdir/samples/Test_tohtml_basic.c.html47
-rw-r--r--src/testdir/samples/Test_tohtml_basic_no_css.c.html40
-rw-r--r--src/testdir/samples/test.zipbin0 -> 464 bytes
-rw-r--r--src/testdir/samples/testa.zipbin0 -> 1236 bytes
-rw-r--r--src/testdir/test28.in13
-rw-r--r--src/testdir/test28.ok3
-rw-r--r--src/testdir/test_arglist.vim23
-rw-r--r--src/testdir/test_assert.vim9
-rw-r--r--src/testdir/test_autocmd.vim174
-rw-r--r--src/testdir/test_breakindent.vim11
-rw-r--r--src/testdir/test_buffer.vim46
-rw-r--r--src/testdir/test_cd.vim8
-rw-r--r--src/testdir/test_cmdline.vim39
-rw-r--r--src/testdir/test_codestyle.vim12
-rw-r--r--src/testdir/test_cpoptions.vim119
-rw-r--r--src/testdir/test_crash.vim40
-rw-r--r--src/testdir/test_eval_stuff.vim27
-rw-r--r--src/testdir/test_ex_mode.vim100
-rw-r--r--src/testdir/test_excmd.vim2
-rw-r--r--src/testdir/test_filetype.vim217
-rw-r--r--src/testdir/test_findfile.vim35
-rw-r--r--src/testdir/test_fnamemodify.vim2
-rw-r--r--src/testdir/test_fold.vim35
-rw-r--r--src/testdir/test_functions.vim32
-rw-r--r--src/testdir/test_gettext.vim18
-rw-r--r--src/testdir/test_gettext_cp1251.vim35
-rw-r--r--src/testdir/test_gettext_make.vim72
-rw-r--r--src/testdir/test_gettext_makefile_in1.vim7
-rw-r--r--src/testdir/test_gettext_makefile_in2.vim6
-rw-r--r--src/testdir/test_gettext_makefile_in3.vim4
-rw-r--r--src/testdir/test_gettext_makefile_in4.vim6
-rw-r--r--src/testdir/test_gettext_utf8.vim35
-rw-r--r--src/testdir/test_getvar.vim8
-rw-r--r--src/testdir/test_goto.vim7
-rw-r--r--src/testdir/test_gui.vim3
-rw-r--r--src/testdir/test_increment.vim38
-rw-r--r--src/testdir/test_ins_complete.vim118
-rw-r--r--src/testdir/test_jumplist.vim68
-rw-r--r--src/testdir/test_listdict.vim92
-rw-r--r--src/testdir/test_listlbr_utf8.vim6
-rw-r--r--src/testdir/test_mapping.vim43
-rw-r--r--src/testdir/test_matchparen.vim30
-rw-r--r--src/testdir/test_menu.vim41
-rw-r--r--src/testdir/test_normal.vim3
-rw-r--r--src/testdir/test_options.vim10
-rw-r--r--src/testdir/test_partial.vim22
-rw-r--r--src/testdir/test_paste.vim2
-rw-r--r--src/testdir/test_popup.vim93
-rw-r--r--src/testdir/test_popupwin.vim82
-rw-r--r--src/testdir/test_put.vim8
-rw-r--r--src/testdir/test_quickfix.vim4
-rw-r--r--src/testdir/test_regexp_utf8.vim32
-rw-r--r--src/testdir/test_search.vim31
-rw-r--r--src/testdir/test_selectmode.vim16
-rw-r--r--src/testdir/test_signs.vim40
-rw-r--r--src/testdir/test_spell.vim15
-rw-r--r--src/testdir/test_spellfile.vim16
-rw-r--r--src/testdir/test_substitute.vim15
-rw-r--r--src/testdir/test_tabpage.vim58
-rw-r--r--src/testdir/test_tagjump.vim57
-rw-r--r--src/testdir/test_taglist.vim47
-rw-r--r--src/testdir/test_termcodes.vim11
-rw-r--r--src/testdir/test_termdebug.vim205
-rw-r--r--src/testdir/test_textobjects.vim12
-rw-r--r--src/testdir/test_textprop.vim4
-rw-r--r--src/testdir/test_tohtml.vim72
-rw-r--r--src/testdir/test_usercommands.vim4
-rw-r--r--src/testdir/test_vim9_builtin.vim66
-rw-r--r--src/testdir/test_vim9_class.vim469
-rw-r--r--src/testdir/test_vim9_cmd.vim9
-rw-r--r--src/testdir/test_vim9_disassemble.vim90
-rw-r--r--src/testdir/test_vim9_func.vim10
-rw-r--r--src/testdir/test_vim9_script.vim18
-rw-r--r--src/testdir/test_vimscript.vim25
-rw-r--r--src/testdir/test_winfixbuf.vim1
-rw-r--r--src/testdir/test_xxd.vim16
-rw-r--r--src/testdir/test_zip_plugin.vim237
-rw-r--r--src/testdir/view_util.vim2
-rw-r--r--src/testdir/viewdumps.vim11
-rw-r--r--src/testing.c11
-rw-r--r--src/textobject.c11
-rw-r--r--src/textprop.c2
-rw-r--r--src/typval.c89
-rw-r--r--src/undo.c4
-rw-r--r--src/usercmd.c510
-rw-r--r--src/userfunc.c95
-rw-r--r--src/version.c404
-rw-r--r--src/vim.h10
-rw-r--r--src/vim9.h3
-rw-r--r--src/vim9class.c127
-rw-r--r--src/vim9cmds.c4
-rw-r--r--src/vim9compile.c13
-rw-r--r--src/vim9execute.c81
-rw-r--r--src/vim9expr.c24
-rw-r--r--src/vim9instr.c6
-rw-r--r--src/vim9type.c16
-rw-r--r--src/viminfo.c2
-rw-r--r--src/window.c76
-rw-r--r--src/xxd/Make_ming.mak2
-rw-r--r--src/xxd/Make_mvc.mak2
1184 files changed, 29240 insertions, 9681 deletions
diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS
index 1254782..38ab300 100644
--- a/.github/MAINTAINERS
+++ b/.github/MAINTAINERS
@@ -18,6 +18,7 @@ runtime/autoload/modula2.vim @dkearns
runtime/autoload/php.vim @david-szabo97
runtime/autoload/rubycomplete.vim @segfault @dkearns
runtime/autoload/rust.vim @lilyball
+runtime/autoload/typst.vim @gpanders
runtime/autoload/xmlformat.vim @chrisbra
runtime/autoload/dist/json.vim @habamax
runtime/colors/blue.vim @habamax @romainl @neutaaaaan
@@ -100,6 +101,7 @@ runtime/compiler/tidy.vim @dkearns
runtime/compiler/ts-node.vim @dkearns
runtime/compiler/tsc.vim @dkearns
runtime/compiler/typedoc.vim @dkearns
+runtime/compiler/typst.vim @gpanders
runtime/compiler/xmllint.vim @dkearns
runtime/compiler/xo.vim @dkearns
runtime/compiler/yamllint.vim @romainl
@@ -107,19 +109,28 @@ runtime/compiler/zsh.vim @dkearns
runtime/doc/ft_hare.txt @selenebun
runtime/doc/ps1.txt @heaths
runtime/ftplugin/abaqus.vim @costerwi
-runtime/ftplugin/apache.vim @dubgeiser
+runtime/ftplugin/antlr4.vim @jiangyinzuo
+runtime/ftplugin/apache.vim @dubgeiser
runtime/ftplugin/arduino.vim @k-takata
runtime/ftplugin/astro.vim @romainl
+runtime/ftplugin/asy.vim @avidseeker
+runtime/ftplugin/autohotkey.vim @telemachus
runtime/ftplugin/awk.vim @dkearns
runtime/ftplugin/basic.vim @dkearns
runtime/ftplugin/bst.vim @tpope
+runtime/ftplugin/cabal.vim @ribru17
+runtime/ftplugin/cedar.vim @ribru17
runtime/ftplugin/cfg.vim @chrisbra
runtime/ftplugin/chatito.vim @ObserverOfTime
+runtime/ftplugin/chicken.vim @evhan
runtime/ftplugin/clojure.vim @axvr
+runtime/ftplugin/cmakecache.vim @ribru17
runtime/ftplugin/cs.vim @nickspoons
runtime/ftplugin/csh.vim @dkearns
runtime/ftplugin/css.vim @dkearns
+runtime/ftplugin/csv.vim @habamax
runtime/ftplugin/cucumber.vim @tpope
+runtime/ftplugin/cuda.vim @ribru17
runtime/ftplugin/dart.vim @ribru17
runtime/ftplugin/deb822sources.vim @jamessan
runtime/ftplugin/debchangelog.vim @jamessan
@@ -127,6 +138,7 @@ runtime/ftplugin/debcontrol.vim @jamessan
runtime/ftplugin/debsources.vim @jamessan
runtime/ftplugin/desktop.vim @e-kwsm
runtime/ftplugin/dosbatch.vim @mrdubya
+runtime/ftplugin/editorconfig.vim @ribru17
runtime/ftplugin/eiffel.vim @dkearns
runtime/ftplugin/elixir.vim @mhanberg
runtime/ftplugin/erlang.vim @hcs42
@@ -148,15 +160,18 @@ runtime/ftplugin/gitconfig.vim @tpope
runtime/ftplugin/gitignore.vim @ObserverOfTime
runtime/ftplugin/gitrebase.vim @tpope
runtime/ftplugin/gitsendemail.vim @tpope
-runtime/ftplugin/graphql.vim @ribru17
-runtime/ftplugin/gyp.vim @ObserverOfTime
runtime/ftplugin/go.vim @dbarnett
+runtime/ftplugin/goaccess.vim @meonkeys
+runtime/ftplugin/gomod.vim @yu-yk
runtime/ftplugin/gprof.vim @dpelle
+runtime/ftplugin/graphql.vim @ribru17
+runtime/ftplugin/gyp.vim @ObserverOfTime
runtime/ftplugin/haml.vim @tpope
runtime/ftplugin/hare.vim @selenebun
runtime/ftplugin/haredoc.vim @selenebun
runtime/ftplugin/heex.vim @cvincent
runtime/ftplugin/hgcommit.vim @k-takata
+runtime/ftplugin/hlsplaylist.vim @avidseeker
runtime/ftplugin/hog.vim @wtfbbqhax
runtime/ftplugin/html.vim @dkearns
runtime/ftplugin/hyprlang.vim @ribru17
@@ -166,6 +181,7 @@ runtime/ftplugin/indent.vim @dkearns
runtime/ftplugin/ishd.vim @dkearns
runtime/ftplugin/j.vim @glts
runtime/ftplugin/java.vim @zzzyxwvut
+runtime/ftplugin/javacc.vim @ribru17
runtime/ftplugin/javascript.vim @dkearns
runtime/ftplugin/javascriptreact.vim @dkearns
runtime/ftplugin/jj.vim @gpanders
@@ -176,8 +192,11 @@ runtime/ftplugin/julia.vim @carlobaldassi
runtime/ftplugin/jq.vim @vito-c
runtime/ftplugin/kconfig.vim @chrisbra
runtime/ftplugin/kdl.vim @imsnif @jiangyinzuo
+runtime/ftplugin/kivy.vim @ribru17
runtime/ftplugin/kotlin.vim @udalov
+runtime/ftplugin/ldapconf.vim @ribru17
runtime/ftplugin/less.vim @genoma
+runtime/ftplugin/lex.vim @ribru17
runtime/ftplugin/liquid.vim @tpope
runtime/ftplugin/lua.vim @dkearns
runtime/ftplugin/lc.vim @ribru17
@@ -185,14 +204,17 @@ runtime/ftplugin/lynx.vim @dkearns
runtime/ftplugin/m3build.vim @dkearns
runtime/ftplugin/m3quake.vim @dkearns
runtime/ftplugin/markdown.vim @tpope
+runtime/ftplugin/mediawiki.vim @avidseeker
runtime/ftplugin/meson.vim @Liambeguin
runtime/ftplugin/modula2.vim @dkearns
runtime/ftplugin/modula3.vim @dkearns
+runtime/ftplugin/mojo.vim @ribru17
runtime/ftplugin/nginx.vim @chr4
runtime/ftplugin/nim.vim @ribru17
runtime/ftplugin/nroff.vim @a-vrma
runtime/ftplugin/nsis.vim @k-takata
runtime/ftplugin/octave.vim @dkearns
+runtime/ftplugin/ondir.vim @jparise
runtime/ftplugin/openvpn.vim @ObserverOfTime
runtime/ftplugin/pascal.vim @dkearns
runtime/ftplugin/pbtxt.vim @lakshayg
@@ -220,6 +242,7 @@ runtime/ftplugin/ruby.vim @tpope @dkearns
runtime/ftplugin/rust.vim @lilyball
runtime/ftplugin/sass.vim @tpope
runtime/ftplugin/scala.vim @derekwyatt
+runtime/ftplugin/scheme.vim @evhan
runtime/ftplugin/scss.vim @tpope
runtime/ftplugin/sdoc.vim @gpanders
runtime/ftplugin/sed.vim @dkearns
@@ -229,6 +252,7 @@ runtime/ftplugin/snakemake.vim @ribru17
runtime/ftplugin/solidity.vim @cothi
runtime/ftplugin/solution.vim @dkearns
runtime/ftplugin/spec.vim @ignatenkobrain
+runtime/ftplugin/squirrel.vim @ribru17
runtime/ftplugin/ssa.vim @ObserverOfTime
runtime/ftplugin/sshdconfig.vim @jiangyinzuo
runtime/ftplugin/svelte.vim @igorlfs
@@ -237,13 +261,16 @@ runtime/ftplugin/systemverilog.vim @Kocha
runtime/ftplugin/swig.vim @jmarrec
runtime/ftplugin/tap.vim @petdance
runtime/ftplugin/tcsh.vim @dkearns
+runtime/ftplugin/terraform.vim @JannoTjarks
+runtime/ftplugin/tf.vim @ribru17
+runtime/ftplugin/thrift.vim @jiangyinzuo
runtime/ftplugin/tidy.vim @dkearns
runtime/ftplugin/tmux.vim @ericpruitt
runtime/ftplugin/toml.vim @averms
runtime/ftplugin/tt2html.vim @petdance
runtime/ftplugin/typescript.vim @dkearns
runtime/ftplugin/typescriptreact.vim @dkearns
-runtime/ftplugin/typst.vim @ribru17
+runtime/ftplugin/typst.vim @gpanders
runtime/ftplugin/unison.vim @chuwy
runtime/ftplugin/v.vim @ribru17
runtime/ftplugin/vdf.vim @ObserverOfTime
@@ -254,6 +281,7 @@ runtime/ftplugin/wget2.vim @dkearns
runtime/ftplugin/xcompose.vim @ObserverOfTime
runtime/ftplugin/xml.vim @chrisbra
runtime/ftplugin/xs.vim @petdance
+runtime/ftplugin/yacc.vim @ribru17
runtime/ftplugin/zsh.vim @chrisbra
runtime/import/dist/vimhighlight.vim @lacygoill
runtime/indent/arduino.vim @k-takata
@@ -282,6 +310,7 @@ runtime/indent/freebasic.vim @dkearns
runtime/indent/gdscript.vim @habamax
runtime/indent/gitconfig.vim @tpope
runtime/indent/gitolite.vim @sitaramc
+runtime/indent/glsl.vim @gpanders
runtime/indent/go.vim @dbarnett
runtime/indent/gyp.vim @ObserverOfTime
runtime/indent/haml.vim @tpope
@@ -304,6 +333,7 @@ runtime/indent/lua.vim @marcuscf
runtime/indent/make.vim @dkearns
runtime/indent/meson.vim @Liambeguin
runtime/indent/mma.vim @dkearns
+runtime/indent/mojo.vim @ribru17
runtime/indent/nginx.vim @chr4
runtime/indent/nsis.vim @k-takata
runtime/indent/occam.vim @dkearns
@@ -311,6 +341,7 @@ runtime/indent/perl.vim @petdance
runtime/indent/php.vim @2072
runtime/indent/postscr.vim @mrdubya
runtime/indent/prolog.vim @dkearns
+runtime/indent/proto.vim @Limero
runtime/indent/ps1.vim @heaths
runtime/indent/qb64.vim @dkearns
runtime/indent/qml.vim @ChaseKnowlden
@@ -320,6 +351,7 @@ runtime/indent/readline.vim @dkearns
runtime/indent/ruby.vim @AndrewRadev @dkearns
runtime/indent/sass.vim @tpope
runtime/indent/scala.vim @derekwyatt
+runtime/indent/scheme.vim @evhan
runtime/indent/scss.vim @tpope
runtime/indent/sh.vim @chrisbra
runtime/indent/solidity.vim @cothi
@@ -327,7 +359,9 @@ runtime/indent/systemverilog.vim @Kocha
runtime/indent/tcl.vim @dkearns
runtime/indent/tcsh.vim @dkearns
runtime/indent/teraterm.vim @k-takata
+runtime/indent/thrift.vim @jiangyinzuo
runtime/indent/typescript.vim @HerringtonDarkholme
+runtime/indent/typst.vim @gpanders
runtime/indent/vroom.vim @dbarnett
runtime/indent/wast.vim @rhysd
runtime/indent/xml.vim @chrisbra
@@ -343,17 +377,20 @@ runtime/lang/menu_ru_ru.utf-8.vim @RestorerZ
runtime/pack/dist/opt/cfilter/plugin/cfilter.vim @yegappan
runtime/pack/dist/opt/comment/ @habamax
runtime/pack/dist/opt/matchit/ @chrisbra
+runtime/pack/dist/opt/nohlsearch/ @habamax
runtime/plugin/manpager.vim @Konfekt
runtime/syntax/shared/hgcommitDiff.vim @vegerot
runtime/syntax/abaqus.vim @costerwi
runtime/syntax/aidl.vim @dpelle
runtime/syntax/ant.vim @dkearns
+runtime/syntax/antlr4.vim @jiangyinzuo
runtime/syntax/arduino.vim @johshoff
runtime/syntax/asciidoc.vim @aerostitch
runtime/syntax/asm.vim @dkearns
runtime/syntax/asmh8300.vim @dkearns
runtime/syntax/asterisk.vim @jaunis
runtime/syntax/astro.vim @wuelnerdotexe
+runtime/syntax/asy.vim @avidseeker
runtime/syntax/autohotkey.vim @mmikeww
runtime/syntax/awk.vim @dkearns
runtime/syntax/basic.vim @dkearns
@@ -365,9 +402,11 @@ runtime/syntax/cabalconfig.vim @coot
runtime/syntax/cabalproject.vim @coot
runtime/syntax/cf.vim @ernstvanderlinden
runtime/syntax/chatito.vim @ObserverOfTime
+runtime/syntax/chicken.vim @evhan
runtime/syntax/chuck.vim @gacallea
runtime/syntax/clojure.vim @axvr
runtime/syntax/cs.vim @nickspoons
+runtime/syntax/csv.vim @habamax
runtime/syntax/cucumber.vim @tpope
runtime/syntax/d.vim @JesseKPhillips
runtime/syntax/dart.vim @pr3d4t0r
@@ -407,7 +446,9 @@ runtime/syntax/gitconfig.vim @tpope
runtime/syntax/gitignore.vim @ObserverOfTime
runtime/syntax/gitolite.vim @sitaramc
runtime/syntax/gitrebase.vim @tpope
+runtime/syntax/glsl.vim @gpanders
runtime/syntax/go.vim @bhcleek
+runtime/syntax/goaccess.vim @meonkeys
runtime/syntax/godoc.vim @dbarnett
runtime/syntax/gp.vim @KBelabas
runtime/syntax/gprof.vim @dpelle
@@ -423,6 +464,7 @@ runtime/syntax/hitest.vim @lacygoill
runtime/syntax/hog.vim @wtfbbqhax
runtime/syntax/hollywood.vim @sodero
runtime/syntax/html.vim @dkearns
+runtime/syntax/htmlangular.vim @dlvandenberg
runtime/syntax/i3config.vim @hiqua
runtime/syntax/icon.vim @dkearns
runtime/syntax/indent.vim @dkearns
@@ -436,6 +478,7 @@ runtime/syntax/jsonc.vim @izhakjakov
runtime/syntax/julia.vim @carlobaldassi
runtime/syntax/jq.vim @vito-c
runtime/syntax/kconfig.vim @chrisbra
+runtime/syntax/kivy.vim @prophittcorey
runtime/syntax/kotlin.vim @udalov
runtime/syntax/kdl.vim @imsnif @jiangyinzuo
runtime/syntax/krl.vim @KnoP-01
@@ -451,6 +494,7 @@ runtime/syntax/make.vim @rohieb
runtime/syntax/mallard.vim @jhradilek
runtime/syntax/markdown.vim @tpope
runtime/syntax/mason.vim @petdance
+runtime/syntax/mediawiki.vim @avidseeker
runtime/syntax/meson.vim @Liambeguin
runtime/syntax/modula2.vim @dkearns
runtime/syntax/modula2/opt/iso.vim @trijezdci
@@ -463,6 +507,7 @@ runtime/syntax/ninja.vim @nico
runtime/syntax/nix.vim @equill
runtime/syntax/nroff.vim @jmarshall
runtime/syntax/nsis.vim @k-takata
+runtime/syntax/ondir.vim @jparise
runtime/syntax/openvpn.vim @ObserverOfTime
runtime/syntax/pacmanlog.vim @rpigott
runtime/syntax/pascal.vim @dkearns
@@ -475,6 +520,7 @@ runtime/syntax/pod.vim @petdance
runtime/syntax/poefilter.vim @ObserverOfTime
runtime/syntax/postscr.vim @mrdubya
runtime/syntax/privoxy.vim @dkearns
+runtime/syntax/progress.vim @rdnlsmith
runtime/syntax/prolog.vim @XVilka
runtime/syntax/ps1.vim @heaths
runtime/syntax/ps1xml.vim @heaths
@@ -498,6 +544,7 @@ runtime/syntax/rst.vim @marshallward
runtime/syntax/ruby.vim @dkearns
runtime/syntax/sass.vim @tpope
runtime/syntax/scala.vim @derekwyatt
+runtime/syntax/scheme.vim @evhan
runtime/syntax/scss.vim @tpope
runtime/syntax/sdoc.vim @gpanders
runtime/syntax/sed.vim @dkearns
@@ -518,6 +565,7 @@ runtime/syntax/systemverilog.vim @Kocha
runtime/syntax/tap.vim @petdance
runtime/syntax/tcsh.vim @dkearns
runtime/syntax/teraterm.vim @k-takata
+runtime/syntax/thrift.vim @jiangyinzuo
runtime/syntax/tidy.vim @dkearns
runtime/syntax/tmux.vim @ericpruitt
runtime/syntax/toml.vim @averms
@@ -526,6 +574,7 @@ runtime/syntax/tt2html.vim @petdance
runtime/syntax/tt2js.vim @petdance
runtime/syntax/typescript.vim @HerringtonDarkholme @rhysd
runtime/syntax/typescriptreact.vim @HerringtonDarkholme @rhysd
+runtime/syntax/typst.vim @gpanders
runtime/syntax/shared/typescriptcommon.vim @HerringtonDarkholme @rhysd
runtime/syntax/unison.vim @chuwy
runtime/syntax/vdf.vim @ObserverOfTime
diff --git a/.github/actions/screendump/action.yml b/.github/actions/screendump/action.yml
index 19eb9b6..5cbc820 100644
--- a/.github/actions/screendump/action.yml
+++ b/.github/actions/screendump/action.yml
@@ -1,13 +1,13 @@
name: 'screendump'
-description: "Upload failed syntax tests"
+description: "Upload failed screendump tests"
runs:
using: "composite"
steps:
- - name: Upload failed syntax tests
+ - name: Upload failed tests
uses: actions/upload-artifact@v4
with:
# Name of the artifact to upload.
- name: ${{ github.workflow }}-${{ github.job }}-${{ join(matrix.*, '-') }}-failed-syntax-tests
+ name: ${{ github.workflow }}-${{ github.job }}-${{ join(matrix.*, '-') }}-failed-tests
# A file, directory or wildcard pattern that describes what
# to upload.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1110665..edad08a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,7 +22,7 @@ jobs:
env:
CC: ${{ matrix.compiler }}
GCC_VER: 13
- CLANG_VER: 18
+ CLANG_VER: 19
TEST: test
SRCDIR: ./src
LEAK_CFLAGS: -DEXITFREE
@@ -434,6 +434,9 @@ jobs:
# 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"
@@ -501,6 +504,7 @@ jobs:
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
if: matrix.toolchain == 'mingw'
@@ -522,6 +526,8 @@ jobs:
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@v4
@@ -555,6 +561,12 @@ jobs:
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
diff --git a/.gitignore b/.gitignore
index 241e96e..048ced9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,8 @@ src/auto/gui_gtk_gresources.h
src/auto/os_haiku.rdef
src/objects/.dirstamp
src/objects
+src/po/big5corr
+src/po/sjiscorr
src/types.vim
# We do need src/auto/configure.
diff --git a/.hgignore b/.hgignore
index 8b73f1b..5c9754e 100644
--- a/.hgignore
+++ b/.hgignore
@@ -10,6 +10,8 @@ src/auto/gui_gtk_gresources.h
src/auto/os_haiku.rdef
src/objects/.dirstamp
src/objects
+src/po/big5corr
+src/po/sjiscorr
src/types.vim
# We do need src/auto/configure.
diff --git a/Filelist b/Filelist
index 20c19f7..803de2a 100644
--- a/Filelist
+++ b/Filelist
@@ -185,6 +185,7 @@ SRC_ALL = \
src/testdir/sautest/autoload/*.vim \
src/testdir/testluaplugin/lua/testluaplugin/*.lua \
src/testdir/check.vim \
+ src/testdir/commondumps.vim \
src/testdir/gui_init.vim \
src/testdir/gui_preinit.vim \
src/testdir/mouse.vim \
@@ -198,6 +199,7 @@ SRC_ALL = \
src/testdir/summarize.vim \
src/testdir/term_util.vim \
src/testdir/view_util.vim \
+ src/testdir/viewdumps.vim \
src/testdir/test[0-9]*.ok \
src/testdir/test77a.ok \
src/testdir/test77a.com \
@@ -214,13 +216,17 @@ SRC_ALL = \
src/testdir/pyxfile/*.py \
src/testdir/dumps/*.dump \
src/testdir/dumps/*.vim \
+ src/testdir/samples/*.html \
src/testdir/samples/*.txt \
src/testdir/samples/*.vim \
src/testdir/samples/test000 \
+ src/testdir/samples/test.zip \
+ src/testdir/samples/testa.zip \
src/testdir/color_ramp.vim \
src/testdir/silent.wav \
src/testdir/popupbounce.vim \
src/testdir/crash/* \
+ src/testdir/ru_RU/LC_MESSAGES/__PACKAGE__.mo \
src/proto.h \
src/protodef.h \
src/proto/alloc.pro \
@@ -782,6 +788,7 @@ RT_ALL = \
runtime/pack/dist/opt/matchit/doc/matchit.txt \
runtime/pack/dist/opt/matchit/doc/tags \
runtime/pack/dist/opt/matchit/autoload/*.vim \
+ runtime/pack/dist/opt/nohlsearch/plugin/nohlsearch.vim \
runtime/pack/dist/opt/shellmenu/plugin/shellmenu.vim \
runtime/pack/dist/opt/swapmouse/plugin/swapmouse.vim \
runtime/pack/dist/opt/termdebug/plugin/termdebug.vim \
@@ -832,8 +839,10 @@ RT_SCRIPTS = \
runtime/syntax/Makefile \
runtime/syntax/testdir/README.txt \
runtime/syntax/testdir/runtest.vim \
+ runtime/syntax/testdir/viewdumps.vim \
runtime/syntax/testdir/ftplugin/*.* \
runtime/syntax/testdir/input/*.* \
+ runtime/syntax/testdir/input/selftestdir/* \
runtime/syntax/testdir/input/setup/*.* \
runtime/syntax/testdir/dumps/*.dump \
runtime/syntax/testdir/dumps/*.vim \
diff --git a/Makefile b/Makefile
index f4db80f..ad07376 100644
--- a/Makefile
+++ b/Makefile
@@ -56,7 +56,7 @@ VIM_FOR_INDENTTEST = ../../src/vim
indenttest:
cd runtime/indent && \
$(MAKE) clean && \
- $(MAKE) test VIM="$(VIM_FOR_INDENTTEST)"
+ $(MAKE) test VIMPROG="$(VIM_FOR_INDENTTEST)"
# Executable used for running the syntax tests.
VIM_FOR_SYNTAXTEST = ../../src/vim
@@ -249,9 +249,6 @@ VERSION = $(MAJOR)$(MINOR)
VDOT = $(MAJOR).$(MINOR)
VIMRTDIR = vim$(VERSION)
-# Vim used for conversion from "unix" to "dos"
-VIM = vim
-
# How to include Filelist depends on the version of "make" you have.
# If the current choice doesn't work, try the other one.
diff --git a/ci/appveyor.bat b/ci/appveyor.bat
index 5498769..c77cee1 100644
--- a/ci/appveyor.bat
+++ b/ci/appveyor.bat
@@ -1,15 +1,20 @@
@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
+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"
@@ -43,6 +48,18 @@ if not exist %PYTHON3_DIR% (
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
@@ -92,7 +109,7 @@ goto :eof
@echo on
cd src/testdir
:: Testing with MSVC gvim
-path %PYTHON3_DIR%;%PATH%
+path %PYTHON3_DIR%;%GETTEXT_PATH%;%PATH%
nmake -f Make_mvc.mak VIMPROG=..\gvim
nmake -f Make_mvc.mak clean
:: Testing with MSVC console version
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index bf9e32e..c8942eb 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -9,6 +9,8 @@ vim9script
# These functions are moved here from runtime/filetype.vim to make startup
# faster.
+var prolog_pattern = '^\s*\(:-\|%\+\(\s\|$\)\|\/\*\)\|\.\s*$'
+
export def Check_inp()
if getline(1) =~ '%%'
setf tex
@@ -402,18 +404,38 @@ export def FTharedoc()
endif
enddef
-# Distinguish between HTML, XHTML and Django
+# Distinguish between HTML, XHTML, Django and Angular
export def FThtml()
var n = 1
- while n < 10 && n <= line("$")
+
+ # Test if the filename follows the Angular component template convention
+ # Disabled for the reasons mentioned here: #13594
+ # if expand('%:t') =~ '^.*\.component\.html$'
+ # setf htmlangular
+ # return
+ # endif
+
+ while n < 40 && n <= line("$")
+ # Check for Angular
+ if getline(n) =~ '@\(if\|for\|defer\|switch\)\|\*\(ngIf\|ngFor\|ngSwitch\|ngTemplateOutlet\)\|ng-template\|ng-content\|{{.*}}'
+ setf htmlangular
+ return
+ endif
+ # Check for XHTML
if getline(n) =~ '\<DTD\s\+XHTML\s'
setf xhtml
return
endif
- if getline(n) =~ '{%\s*\(extends\|block\|load\)\>\|{#\s\+'
+ # Check for Django
+ if getline(n) =~ '{%\s*\(autoescape\|block\|comment\|csrf_token\|cycle\|debug\|extends\|filter\|firstof\|for\|if\|ifchanged\|include\|load\|lorem\|now\|query_string\|regroup\|resetcycle\|spaceless\|templatetag\|url\|verbatim\|widthratio\|with\)\>\|{#\s\+'
setf htmldjango
return
endif
+ # Check for SuperHTML
+ if getline(n) =~ '<extend\|<super>'
+ setf superhtml
+ return
+ endif
n += 1
endwhile
setf FALLBACK html
@@ -449,7 +471,7 @@ export def ProtoCheck(default: string)
# recognize Prolog by specific text in the first non-empty line
# require a blank after the '%' because Perl uses "%list" and "%translate"
var lnum = getline(nextnonblank(1))
- if lnum =~ '\<prolog\>' || lnum =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || lnum =~ ':-'
+ if lnum =~ '\<prolog\>' || lnum =~ prolog_pattern
setf prolog
else
exe 'setf ' .. default
@@ -514,6 +536,25 @@ export def FTm()
endif
enddef
+export def FTmake()
+ # Check if it is a Microsoft Makefile
+ unlet! b:make_microsoft
+ var n = 1
+ while n < 1000 && n <= line('$')
+ var line = getline(n)
+ if line =~? '^\s*!\s*\(ifn\=\(def\)\=\|include\|message\|error\)\>'
+ b:make_microsoft = 1
+ break
+ elseif line =~ '^ *ifn\=\(eq\|def\)\>' || line =~ '^ *[-s]\=include\s'
+ break
+ elseif line =~ '^ *\w\+\s*[!?:+]='
+ break
+ endif
+ n += 1
+ endwhile
+ setf make
+enddef
+
export def FTmms()
var n = 1
while n < 20
@@ -628,7 +669,7 @@ export def FTpl()
# recognize Prolog by specific text in the first non-empty line
# require a blank after the '%' because Perl uses "%list" and "%translate"
var line = getline(nextnonblank(1))
- if line =~ '\<prolog\>' || line =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || line =~ ':-'
+ if line =~ '\<prolog\>' || line =~ prolog_pattern
setf prolog
else
setf perl
@@ -1265,6 +1306,56 @@ export def FTtyp()
setf typst
enddef
+# Detect Microsoft Developer Studio Project files (Makefile) or Faust DSP
+# files.
+export def FTdsp()
+ if exists("g:filetype_dsp")
+ exe "setf " .. g:filetype_dsp
+ return
+ endif
+
+ # Test the filename
+ if expand('%:t') =~ '^[mM]akefile.*$'
+ setf make
+ return
+ endif
+
+ # Test the file contents
+ for line in getline(1, 200)
+ # Chech for comment style
+ if line =~ '^#.*'
+ setf make
+ return
+ endif
+
+ # Check for common lines
+ if line =~ '^.*Microsoft Developer Studio Project File.*$'
+ setf make
+ return
+ endif
+
+ if line =~ '^!MESSAGE This is not a valid makefile\..+$'
+ setf make
+ return
+ endif
+
+ # Check for keywords
+ if line =~ '^!(IF,ELSEIF,ENDIF).*$'
+ setf make
+ return
+ endif
+
+ # Check for common assignments
+ if line =~ '^SOURCE=.*$'
+ setf make
+ return
+ endif
+ endfor
+
+ # Otherwise, assume we have a Faust file
+ setf faust
+enddef
+
# Set the filetype of a *.v file to Verilog, V or Cog based on the first 200
# lines.
export def FTv()
diff --git a/runtime/autoload/dist/man.vim b/runtime/autoload/dist/man.vim
index 708e106..d9dbaf4 100644
--- a/runtime/autoload/dist/man.vim
+++ b/runtime/autoload/dist/man.vim
@@ -4,6 +4,7 @@
" Maintainer: SungHyun Nam <goweol@gmail.com>
" Autoload Split: Bram Moolenaar
" Last Change: 2024 Jan 17 (make it work on AIX, see #13847)
+" 2024 Jul 06 (honor command modifiers, #15117)
let s:cpo_save = &cpo
set cpo-=C
@@ -165,7 +166,9 @@ func dist#man#GetPage(cmdmods, ...)
endwhile
endif
if &filetype != "man"
- if exists("g:ft_man_open_mode")
+ if a:cmdmods =~ '\<\(tab\|vertical\|horizontal\)\>'
+ let open_cmd = a:cmdmods . ' split'
+ elseif exists("g:ft_man_open_mode")
if g:ft_man_open_mode == 'vert'
let open_cmd = 'vsplit'
elseif g:ft_man_open_mode == 'tab'
@@ -174,7 +177,7 @@ func dist#man#GetPage(cmdmods, ...)
let open_cmd = 'split'
endif
else
- let open_cmd = a:cmdmods . ' split'
+ let open_cmd = 'split'
endif
endif
endif
diff --git a/runtime/autoload/dist/vim.vim b/runtime/autoload/dist/vim.vim
index 021244c..d519406 100644
--- a/runtime/autoload/dist/vim.vim
+++ b/runtime/autoload/dist/vim.vim
@@ -18,6 +18,10 @@ endif
if !has('vim9script')
function dist#vim#IsSafeExecutable(filetype, executable)
let cwd = getcwd()
+ if empty(exepath(a:executable))
+ echomsg a:executable .. " not found in $PATH"
+ return v:false
+ endif
return get(g:, a:filetype .. '_exec', get(g:, 'plugin_exec', 0)) &&
\ (fnamemodify(exepath(a:executable), ':p:h') !=# cwd
\ || (split($PATH, has('win32') ? ';' : ':')->index(cwd) != -1 &&
diff --git a/runtime/autoload/dist/vim9.vim b/runtime/autoload/dist/vim9.vim
index 807140d..8fa9380 100644
--- a/runtime/autoload/dist/vim9.vim
+++ b/runtime/autoload/dist/vim9.vim
@@ -6,6 +6,10 @@ vim9script
# Last Change: 2023 Oct 25
export def IsSafeExecutable(filetype: string, executable: string): bool
+ if empty(exepath(executable))
+ echomsg executable .. " not found in $PATH"
+ return v:false
+ endif
var cwd = getcwd()
return get(g:, filetype .. '_exec', get(g:, 'plugin_exec', 0))
&& (fnamemodify(exepath(executable), ':p:h') !=# cwd
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index d8de432..e747ce2 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -3,7 +3,7 @@
" Maintainer: This runtime file is looking for a new maintainer.
" Date: May 03, 2023
" Version: 173a
-" Last Change:
+" Last Change: {{{1
" 2023 Nov 21 by Vim Project: ignore wildignore when expanding $COMSPEC (v173a)
" 2023 Nov 22 by Vim Project: fix handling of very long filename on longlist style (v173a)
" 2024 Feb 19 by Vim Project: (announce adoption)
@@ -15,6 +15,15 @@
" 2024 May 13 by Vim Project: prefer scp over pscp
" 2024 Jun 04 by Vim Project: set bufhidden if buffer changed, nohidden is set and buffer shall be switched (#14915)
" 2024 Jun 13 by Vim Project: glob() on Windows fails when a directory name contains [] (#14952)
+" 2024 Jun 23 by Vim Project: save ad restore registers when liststyle = WIDELIST (#15077, #15114)
+" 2024 Jul 22 by Vim Project: avoid endless recursion (#15318)
+" 2024 Jul 23 by Vim Project: escape filename before trying to delete it (#15330)
+" 2024 Jul 30 by Vim Project: handle mark-copy to same target directory (#12112)
+" 2024 Aug 02 by Vim Project: honor g:netrw_alt{o,v} for :{S,H,V}explore (#15417)
+" 2024 Aug 15 by Vim Project: style changes, prevent E121 (#15501)
+" 2024 Aug 22 by Vim Project: fix mf-selection highlight (#15551)
+" 2024 Aug 22 by Vim Project: adjust echo output of mx command (#15550)
+" }}}
" Former Maintainer: Charles E Campbell
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright: Copyright (C) 2016 Charles E. Campbell {{{1
@@ -57,11 +66,6 @@ if exists("s:needspatches")
endif
let g:loaded_netrw = "v173"
-if !exists("s:NOTE")
- let s:NOTE = 0
- let s:WARNING = 1
- let s:ERROR = 2
-endif
let s:keepcpo= &cpo
setl cpo&vim
@@ -99,7 +103,7 @@ fun! netrw#ErrorMsg(level,msg,errnum)
endif
" call Decho("level=".level,'~'.expand("<slnum>"))
- if g:netrw_use_errorwindow == 2 && (v:version > 802 || (v:version == 802 && has("patch486")))
+ if g:netrw_use_errorwindow == 2 && exists("*popup_atcursor")
" use popup window
if type(a:msg) == 3
let msg = [level]+a:msg
@@ -215,6 +219,11 @@ if !exists("s:LONGLIST")
call s:NetrwInit("s:MAXLIST" ,4)
endif
+let s:NOTE = 0
+let s:WARNING = 1
+let s:ERROR = 2
+call s:NetrwInit("g:netrw_errorlvl", s:NOTE)
+
" ---------------------------------------------------------------------
" Default option values: {{{2
let g:netrw_localcopycmdopt = ""
@@ -224,7 +233,10 @@ let g:netrw_localmovecmdopt = ""
" ---------------------------------------------------------------------
" Default values for netrw's global protocol variables {{{2
-if (v:version > 802 || (v:version == 802 && has("patch486"))) && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on") && has("mouse")
+if exists("*popup_atcursor")
+\ && has("syntax")
+\ && exists("g:syntax_on")
+\ && has("mouse")
call s:NetrwInit("g:netrw_use_errorwindow",2)
else
call s:NetrwInit("g:netrw_use_errorwindow",1)
@@ -342,7 +354,6 @@ call s:NetrwInit("s:didstarstar",0)
call s:NetrwInit("g:netrw_dirhistcnt" , 0)
call s:NetrwInit("g:netrw_decompress" , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" }')
call s:NetrwInit("g:netrw_dirhistmax" , 10)
-call s:NetrwInit("g:netrw_errorlvl" , s:NOTE)
call s:NetrwInit("g:netrw_fastbrowse" , 1)
call s:NetrwInit("g:netrw_ftp_browse_reject", '^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$')
if !exists("g:netrw_ftp_list_cmd")
@@ -693,12 +704,11 @@ fun! netrw#Explore(indx,dosplit,style,...)
\ ((isdirectory(s:NetrwFile(a:1))))? 'is a directory' : 'is not a directory',
\ '~'.expand("<slnum>"))
if a:1 =~ "\\\s" && !filereadable(s:NetrwFile(a:1)) && !isdirectory(s:NetrwFile(a:1))
-" call Decho("re-trying Explore with <".substitute(a:1,'\\\(\s\)','\1','g').">",'~'.expand("<slnum>"))
- call netrw#Explore(a:indx,a:dosplit,a:style,substitute(a:1,'\\\(\s\)','\1','g'))
-" call Dret("netrw#Explore : returning from retry")
- return
-" else " Decho
-" call Decho("retry not needed",'~'.expand("<slnum>"))
+ let a1 = substitute(a:1, '\\\(\s\)', '\1', 'g')
+ if a1 != a:1
+ call netrw#Explore(a:indx, a:dosplit, a:style, a1)
+ return
+ endif
endif
endif
@@ -714,7 +724,6 @@ fun! netrw#Explore(indx,dosplit,style,...)
" -or- file has been modified AND file not hidden when abandoned
" -or- Texplore used
if a:dosplit || (&modified && &hidden == 0 && &bufhidden != "hide") || a:style == 6
-" call Decho("case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified",'~'.expand("<slnum>"))
call s:SaveWinVars()
let winsz= g:netrw_winsize
if a:indx > 0
@@ -722,57 +731,41 @@ fun! netrw#Explore(indx,dosplit,style,...)
endif
if a:style == 0 " Explore, Sexplore
-" call Decho("style=0: Explore or Sexplore",'~'.expand("<slnum>"))
let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
if winsz == 0|let winsz= ""|endif
- exe "noswapfile ".winsz."wincmd s"
-" call Decho("exe noswapfile ".winsz."wincmd s",'~'.expand("<slnum>"))
+ exe "noswapfile ".(g:netrw_alto ? "below " : "above ").winsz."wincmd s"
- elseif a:style == 1 "Explore!, Sexplore!
-" call Decho("style=1: Explore! or Sexplore!",'~'.expand("<slnum>"))
+ elseif a:style == 1 " Explore!, Sexplore!
let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
if winsz == 0|let winsz= ""|endif
- exe "keepalt noswapfile ".winsz."wincmd v"
-" call Decho("exe keepalt noswapfile ".winsz."wincmd v",'~'.expand("<slnum>"))
+ exe "keepalt noswapfile ".(g:netrw_altv ? "rightbelow " : "leftabove ").winsz."wincmd v"
elseif a:style == 2 " Hexplore
-" call Decho("style=2: Hexplore",'~'.expand("<slnum>"))
let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
if winsz == 0|let winsz= ""|endif
- exe "keepalt noswapfile bel ".winsz."wincmd s"
-" call Decho("exe keepalt noswapfile bel ".winsz."wincmd s",'~'.expand("<slnum>"))
+ exe "keepalt noswapfile ".(g:netrw_alto ? "below " : "above ").winsz."wincmd s"
elseif a:style == 3 " Hexplore!
-" call Decho("style=3: Hexplore!",'~'.expand("<slnum>"))
let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
if winsz == 0|let winsz= ""|endif
- exe "keepalt noswapfile abo ".winsz."wincmd s"
-" call Decho("exe keepalt noswapfile abo ".winsz."wincmd s",'~'.expand("<slnum>"))
+ exe "keepalt noswapfile ".(!g:netrw_alto ? "below " : "above ").winsz."wincmd s"
elseif a:style == 4 " Vexplore
-" call Decho("style=4: Vexplore",'~'.expand("<slnum>"))
let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
if winsz == 0|let winsz= ""|endif
- exe "keepalt noswapfile lefta ".winsz."wincmd v"
-" call Decho("exe keepalt noswapfile lefta ".winsz."wincmd v",'~'.expand("<slnum>"))
+ exe "keepalt noswapfile ".(g:netrw_altv ? "rightbelow " : "leftabove ").winsz."wincmd v"
elseif a:style == 5 " Vexplore!
-" call Decho("style=5: Vexplore!",'~'.expand("<slnum>"))
let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
if winsz == 0|let winsz= ""|endif
- exe "keepalt noswapfile rightb ".winsz."wincmd v"
-" call Decho("exe keepalt noswapfile rightb ".winsz."wincmd v",'~'.expand("<slnum>"))
+ exe "keepalt noswapfile ".(!g:netrw_altv ? "rightbelow " : "leftabove ").winsz."wincmd v"
elseif a:style == 6 " Texplore
call s:SaveBufVars()
-" call Decho("style = 6: Texplore",'~'.expand("<slnum>"))
exe "keepalt tabnew ".fnameescape(curdir)
-" call Decho("exe keepalt tabnew ".fnameescape(curdir),'~'.expand("<slnum>"))
call s:RestoreBufVars()
endif
call s:RestoreWinVars()
-" else " Decho
-" call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6",'~'.expand("<slnum>"))
endif
NetrwKeepj norm! 0
@@ -4496,7 +4489,15 @@ fun! s:NetrwGetWord()
call cursor(line("."),filestart+1)
NetrwKeepj norm! ma
endif
- let rega= @a
+
+ let dict={}
+ " save the unnamed register and register 0-9 and a
+ let dict.a=[getreg('a'), getregtype('a')]
+ for i in range(0, 9)
+ let dict[i] = [getreg(i), getregtype(i)]
+ endfor
+ let dict.unnamed = [getreg(''), getregtype('')]
+
let eofname= filestart + b:netrw_cpf + 1
if eofname <= col("$")
call cursor(line("."),filestart+b:netrw_cpf+1)
@@ -4504,8 +4505,10 @@ fun! s:NetrwGetWord()
else
NetrwKeepj norm! "ay$
endif
+
let dirname = @a
- let @a = rega
+ call s:RestoreRegister(dict)
+
" call Decho("2: dirname<".dirname.">",'~'.expand("<slnum>"))
let dirname= substitute(dirname,'\s\+$','','e')
" call Decho("3: dirname<".dirname.">",'~'.expand("<slnum>"))
@@ -5573,13 +5576,12 @@ endfun
" ---------------------------------------------------------------------
" netrw#BrowseXVis: used by gx in visual mode to select a file for browsing {{{2
fun! netrw#BrowseXVis()
-" call Dfunc("netrw#BrowseXVis()")
- let akeep = @a
+ let dict={}
+ let dict.a=[getreg('a'), getregtype('a')]
norm! gv"ay
let gxfile= @a
- let @a = akeep
+ call s:RestoreRegister(dict)
call netrw#BrowseX(gxfile,netrw#CheckIfRemote(gxfile))
-" call Dret("netrw#BrowseXVis")
endfun
" ---------------------------------------------------------------------
@@ -6887,11 +6889,7 @@ fun! s:NetrwMarkFile(islocal,fname)
let ykeep = @@
let curbufnr= bufnr("%")
- if a:fname =~ '^\a'
- let leader= '\<'
- else
- let leader= ''
- endif
+ let leader= '\(^\|\s\)\zs'
if a:fname =~ '\a$'
let trailer = '\>[@=|\/\*]\=\ze\%( \|\t\|$\)'
else
@@ -7154,7 +7152,7 @@ fun! s:NetrwMarkFileCopy(islocal,...)
endif
" copy marked files while within the same directory (ie. allow renaming)
- if simplify(s:netrwmftgt) == simplify(b:netrw_curdir)
+ if s:StripTrailingSlash(simplify(s:netrwmftgt)) == s:StripTrailingSlash(simplify(b:netrw_curdir))
if len(s:netrwmarkfilelist_{bufnr('%')}) == 1
" only one marked file
" call Decho("case: only one marked file",'~'.expand("<slnum>"))
@@ -7231,7 +7229,7 @@ fun! s:NetrwMarkFileCopy(islocal,...)
" call Decho("system(".copycmd." '".args."' '".tgt."')",'~'.expand("<slnum>"))
call system(copycmd.g:netrw_localcopycmdopt." '".args."' '".tgt."'")
if v:shell_error != 0
- if exists("b:netrw_curdir") && b:netrw_curdir != getcwd() && !g:netrw_keepdir
+ if exists("b:netrw_curdir") && b:netrw_curdir != getcwd() && g:netrw_keepdir
call netrw#ErrorMsg(s:ERROR,"copy failed; perhaps due to vim's current directory<".getcwd()."> not matching netrw's (".b:netrw_curdir.") (see :help netrw-cd)",101)
else
call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localcopycmd<".g:netrw_localcopycmd.">; it doesn't work!",80)
@@ -7500,7 +7498,13 @@ fun! s:NetrwMarkFileExe(islocal,enbloc)
NetrwKeepj call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
break
else
- echo ret
+ if ret !=# ''
+ echo "\n"
+ " skip trailing new line
+ echo ret[0:-2]
+ else
+ echo ret
+ endif
endif
endfor
@@ -9779,7 +9783,13 @@ fun! s:NetrwWideListing()
" fpl: filenames per line
" fpc: filenames per column
setl ma noro
- let keepa= @a
+ let dict={}
+ " save the unnamed register and register 0-9 and a
+ let dict.a=[getreg('a'), getregtype('a')]
+ for i in range(0, 9)
+ let dict[i] = [getreg(i), getregtype(i)]
+ endfor
+ let dict.unnamed = [getreg(''), getregtype('')]
" call Decho("setl ma noro",'~'.expand("<slnum>"))
let b:netrw_cpf= 0
if line("$") >= w:netrw_bannercnt
@@ -9787,7 +9797,8 @@ fun! s:NetrwWideListing()
exe 'sil NetrwKeepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
NetrwKeepj call histdel("/",-1)
else
- let @a= keepa
+ " restore stored registers
+ call s:RestoreRegister(dict)
" call Dret("NetrwWideListing")
return
endif
@@ -9839,7 +9850,7 @@ fun! s:NetrwWideListing()
exe 'nno <buffer> <silent> b :call search(''^.\\|\s\s\zs\S'',''bW'')'."\<cr>"
" call Decho("NetrwWideListing) setl noma nomod ro",'~'.expand("<slnum>"))
exe "setl ".g:netrw_bufsettings
- let @a= keepa
+ call s:RestoreRegister(dict)
" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)",'~'.expand("<slnum>"))
" call Dret("NetrwWideListing")
return
@@ -9851,7 +9862,6 @@ fun! s:NetrwWideListing()
sil! nunmap <buffer> b
endif
endif
-
endfun
" ---------------------------------------------------------------------
@@ -10172,7 +10182,8 @@ fun! s:SetupNetrwStatusLine(statline)
endif
" set up User9 highlighting as needed
- let keepa= @a
+ let dict={}
+ let dict.a=[getreg('a'), getregtype('a')]
redir @a
try
hi User9
@@ -10184,7 +10195,7 @@ fun! s:SetupNetrwStatusLine(statline)
endif
endtry
redir END
- let @a= keepa
+ call s:RestoreRegister(dict)
endif
" set up status line (may use User9 highlighting)
@@ -11435,7 +11446,7 @@ fun! s:NetrwLocalRmFile(path,fname,all)
let all= a:all
let ok = ""
NetrwKeepj norm! 0
- let rmfile= s:NetrwFile(s:ComposePath(a:path,a:fname))
+ let rmfile= s:NetrwFile(s:ComposePath(a:path,escape(a:fname, '\\')))
" call Decho("rmfile<".rmfile.">",'~'.expand("<slnum>"))
if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
@@ -11444,7 +11455,7 @@ fun! s:NetrwLocalRmFile(path,fname,all)
if !all
echohl Statement
call inputsave()
- let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+ let ok= input("Confirm deletion of file <".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
call inputrestore()
echohl NONE
if ok == ""
@@ -11468,7 +11479,7 @@ fun! s:NetrwLocalRmFile(path,fname,all)
if !all
echohl Statement
call inputsave()
- let ok= input("Confirm *recursive* deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+ let ok= input("Confirm *recursive* deletion of directory <".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
call inputrestore()
let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
if ok == ""
@@ -11628,6 +11639,13 @@ fun! netrw#WinPath(path)
endfun
" ---------------------------------------------------------------------
+" s:StripTrailingSlash: removes trailing slashes from a path {{{2
+fun! s:StripTrailingSlash(path)
+ " remove trailing slash
+ return substitute(a:path, '[/\\]$', '', 'g')
+endfun
+
+" ---------------------------------------------------------------------
" s:NetrwBadd: adds marked files to buffer list or vice versa {{{2
" cb : bl2mf=0 add marked files to buffer list
" cB : bl2mf=1 use bufferlist to mark files
@@ -11994,6 +12012,16 @@ fun! s:RestoreCursorline()
" call Dret("s:RestoreCursorline : restored cul=".&l:cursorline." cuc=".&l:cursorcolumn)
endfun
+" s:RestoreRegister: restores all registers given in the dict {{{2
+fun! s:RestoreRegister(dict)
+ for [key, val] in items(a:dict)
+ if key == 'unnamed'
+ let key = ''
+ endif
+ call setreg(key, val[0], val[1])
+ endfor
+endfun
+
" ---------------------------------------------------------------------
" s:NetrwDelete: Deletes a file. {{{2
" Uses Steve Hall's idea to insure that Windows paths stay
@@ -12801,54 +12829,3 @@ unlet s:keepcpo
" Modelines: {{{1
" ===============
" vim:ts=8 fdm=marker
-" doing autoload/netrw.vim version v172g ~57
-" varname<g:netrw_dirhistcnt> value=0 ~1
-" varname<s:THINLIST> value=0 ~1
-" varname<s:LONGLIST> value=1 ~1
-" varname<s:WIDELIST> value=2 ~1
-" varname<s:TREELIST> value=3 ~1
-" varname<s:MAXLIST> value=4 ~1
-" varname<g:netrw_use_errorwindow> value=2 ~1
-" varname<g:netrw_http_xcmd> value=-q -O ~1
-" varname<g:netrw_http_put_cmd> value=curl -T ~1
-" varname<g:netrw_keepj> value=keepj ~1
-" varname<g:netrw_rcp_cmd> value=rcp ~1
-" varname<g:netrw_rsync_cmd> value=rsync ~1
-" varname<g:netrw_rsync_sep> value=/ ~1
-" varname<g:netrw_scp_cmd> value=scp -q ~1
-" varname<g:netrw_sftp_cmd> value=sftp ~1
-" varname<g:netrw_ssh_cmd> value=ssh ~1
-" varname<g:netrw_alto> value=0 ~1
-" varname<g:netrw_altv> value=1 ~1
-" varname<g:netrw_banner> value=1 ~1
-" varname<g:netrw_browse_split> value=0 ~1
-" varname<g:netrw_bufsettings> value=noma nomod nonu nobl nowrap ro nornu ~1
-" varname<g:netrw_chgwin> value=-1 ~1
-" varname<g:netrw_clipboard> value=1 ~1
-" varname<g:netrw_compress> value=gzip ~1
-" varname<g:netrw_ctags> value=ctags ~1
-" varname<g:netrw_cursor> value=2 ~1
-" (netrw) COMBAK: cuc=0 cul=0 initialization of s:netrw_cu[cl]
-" varname<g:netrw_cygdrive> value=/cygdrive ~1
-" varname<s:didstarstar> value=0 ~1
-" varname<g:netrw_dirhistcnt> value=0 ~1
-" varname<g:netrw_decompress> value={ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" } ~1
-" varname<g:netrw_dirhistmax> value=10 ~1
-" varname<g:netrw_errorlvl> value=0 ~1
-" varname<g:netrw_fastbrowse> value=1 ~1
-" varname<g:netrw_ftp_browse_reject> value=^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$ ~1
-" varname<g:netrw_ftpmode> value=binary ~1
-" varname<g:netrw_hide> value=1 ~1
-" varname<g:netrw_keepdir> value=1 ~1
-" varname<g:netrw_list_hide> value= ~1
-" varname<g:netrw_localmkdir> value=mkdir ~1
-" varname<g:netrw_remote_mkdir> value=mkdir ~1
-" varname<g:netrw_liststyle> value=0 ~1
-" varname<g:netrw_markfileesc> value=*./[\~ ~1
-" varname<g:netrw_maxfilenamelen> value=32 ~1
-" varname<g:netrw_menu> value=1 ~1
-" varname<g:netrw_mkdir_cmd> value=ssh USEPORT HOSTNAME mkdir ~1
-" varname<g:netrw_mousemaps> value=1 ~1
-" varname<g:netrw_retmap> value=0 ~1
-" varname<g:netrw_chgperm> value=chmod PERM FILENAME ~1
-" varname<g:netrw_preview> value=0 ~1
diff --git a/runtime/autoload/typst.vim b/runtime/autoload/typst.vim
new file mode 100644
index 0000000..55edd23
--- /dev/null
+++ b/runtime/autoload/typst.vim
@@ -0,0 +1,50 @@
+" Language: Typst
+" Maintainer: Gregory Anders
+" Last Change: 2024-07-14
+" Based on: https://github.com/kaarmu/typst.vim
+
+function! typst#indentexpr() abort
+ let l:lnum = v:lnum
+ let s:sw = shiftwidth()
+
+ let [l:plnum, l:pline] = s:get_prev_nonblank(l:lnum - 1)
+ if l:plnum == 0 | return 0 | endif
+
+ let l:line = getline(l:lnum)
+ let l:ind = indent(l:plnum)
+
+ let l:synname = synIDattr(synID(l:lnum, 1, 1), 'name')
+
+ " Use last indent for block comments
+ if l:synname == 'typstCommentBlock'
+ return l:ind
+ endif
+
+ if l:pline =~ '\v[{[(]\s*$'
+ let l:ind += s:sw
+ endif
+
+ if l:line =~ '\v^\s*[}\])]'
+ let l:ind -= s:sw
+ endif
+
+ return l:ind
+endfunction
+
+" Gets the previous non-blank line that is not a comment.
+function! s:get_prev_nonblank(lnum) abort
+ let l:lnum = prevnonblank(a:lnum)
+ let l:line = getline(l:lnum)
+
+ while l:lnum > 0 && l:line =~ '^\s*//'
+ let l:lnum = prevnonblank(l:lnum - 1)
+ let l:line = getline(l:lnum)
+ endwhile
+
+ return [l:lnum, s:remove_comments(l:line)]
+endfunction
+
+" Removes comments from the given line.
+function! s:remove_comments(line) abort
+ return substitute(a:line, '\s*//.*', '', '')
+endfunction
diff --git a/runtime/autoload/zip.vim b/runtime/autoload/zip.vim
index d0e706e..4a53fc5 100644
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,11 +1,19 @@
" zip.vim: Handles browsing zipfiles
-" AUTOLOAD PORTION
-" Date: Mar 12, 2023
-" Version: 33
+" AUTOLOAD PORTION
+" Date: 2024 Aug 21
+" Version: 34
" Maintainer: This runtime file is looking for a new maintainer.
" Former Maintainer: Charles E Campbell
" Last Change:
-" 2024 Jun 16 by Vim Project: handle whitespace on Windows properly (#14998)
+" 2024 Jun 16 by Vim Project: handle whitespace on Windows properly (#14998)
+" 2024 Jul 23 by Vim Project: fix 'x' command
+" 2024 Jul 24 by Vim Project: use delete() function
+" 2024 Jul 30 by Vim Project: fix opening remote zipfile
+" 2024 Aug 04 by Vim Project: escape '[' in name of file to be extracted
+" 2024 Aug 05 by Vim Project: workaround for the FreeBSD's unzip
+" 2024 Aug 05 by Vim Project: clean-up and make it work with shellslash on Windows
+" 2024 Aug 18 by Vim Project: correctly handle special globbing chars
+" 2024 Aug 21 by Vim Project: simplify condition to detect MS-Windows
" 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,
@@ -22,16 +30,9 @@
if &cp || exists("g:loaded_zip")
finish
endif
-let g:loaded_zip= "v33"
-if v:version < 702
- echohl WarningMsg
- echo "***warning*** this version of zip needs vim 7.2 or later"
- echohl Normal
- finish
-endif
+let g:loaded_zip= "v34"
let s:keepcpo= &cpo
set cpo&vim
-"DechoTabOn
let s:zipfile_escape = ' ?&;\'
let s:ERROR = 2
@@ -59,8 +60,28 @@ if !exists("g:zip_extractcmd")
let g:zip_extractcmd= g:zip_unzipcmd
endif
+" ---------------------------------------------------------------------
+" required early
+" s:Mess: {{{2
+fun! s:Mess(group, msg)
+ redraw!
+ exe "echohl " . a:group
+ echomsg a:msg
+ echohl Normal
+endfun
+
+if v:version < 901
+ " required for defer
+ call s:Mess('WarningMsg', "***warning*** this version of zip needs vim 9.1 or later")
+ finish
+endif
+" sanity checks
+if !executable(g:zip_unzipcmd)
+ call s:Mess('Error', "***error*** (zip#Browse) unzip not available on your system")
+ finish
+endif
if !dist#vim#IsSafeExecutable('zip', g:zip_unzipcmd)
- echoerr "Warning: NOT executing " .. g:zip_unzipcmd .. " from current directory!"
+ call s:Mess('Error', "Warning: NOT executing " .. g:zip_unzipcmd .. " from current directory!")
finish
endif
@@ -71,47 +92,28 @@ endif
" ---------------------------------------------------------------------
" zip#Browse: {{{2
fun! zip#Browse(zipfile)
-" call Dfunc("zip#Browse(zipfile<".a:zipfile.">)")
- " sanity check: insure that the zipfile has "PK" as its first two letters
- " (zipped files have a leading PK as a "magic cookie")
- if !filereadable(a:zipfile) || readfile(a:zipfile, "", 1)[0] !~ '^PK'
- exe "noswapfile noautocmd noswapfile e ".fnameescape(a:zipfile)
-" call Dret("zip#Browse : not a zipfile<".a:zipfile.">")
+ " sanity check: ensure that the zipfile has "PK" as its first two letters
+ " (zip files have a leading PK as a "magic cookie")
+ if filereadable(a:zipfile) && readblob(a:zipfile, 0, 2) != 0z50.4B
+ exe "noswapfile noautocmd e " .. fnameescape(a:zipfile)
return
-" else " Decho
-" call Decho("zip#Browse: a:zipfile<".a:zipfile."> passed PK test - it's a zip file")
endif
- let repkeep= &report
- set report=10
+ let dict = s:SetSaneOpts()
+ defer s:RestoreOpts(dict)
" sanity checks
- if !exists("*fnameescape")
- if &verbose > 1
- echoerr "the zip plugin is not available (your vim doesn't support fnameescape())"
- endif
- return
- endif
if !executable(g:zip_unzipcmd)
- redraw!
- echohl Error | echo "***error*** (zip#Browse) unzip not available on your system"
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
- let &report= repkeep
-" call Dret("zip#Browse")
+ call s:Mess('Error', "***error*** (zip#Browse) unzip not available on your system")
return
endif
if !filereadable(a:zipfile)
if a:zipfile !~# '^\a\+://'
" if it's an url, don't complain, let url-handlers such as vim do its thing
- redraw!
- echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+ call s:Mess('Error', "***error*** (zip#Browse) File not readable <".a:zipfile.">")
endif
- let &report= repkeep
-" call Dret("zip#Browse : file<".a:zipfile."> not readable")
return
endif
-" call Decho("passed sanity checks")
if &ma != 1
set ma
endif
@@ -136,19 +138,15 @@ fun! zip#Browse(zipfile)
\ '" Select a file with cursor and press ENTER'])
keepj $
-" call Decho("exe silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1))
- exe "keepj sil! r! ".g:zip_unzipcmd." -Z -1 -- ".s:Escape(a:zipfile,1)
+ exe $"keepj sil r! {g:zip_unzipcmd} -Z1 -- {s:Escape(a:zipfile, 1)}"
if v:shell_error != 0
- redraw!
- echohl WarningMsg | echo "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file" | echohl None
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+ call s:Mess('WarningMsg', "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file")
keepj sil! %d
let eikeep= &ei
set ei=BufReadCmd,FileReadCmd
exe "keepj r ".fnameescape(a:zipfile)
let &ei= eikeep
keepj 1d
-" call Dret("zip#Browse")
return
endif
@@ -160,63 +158,46 @@ fun! zip#Browse(zipfile)
noremap <silent> <buffer> <leftmouse> <leftmouse>:call <SID>ZipBrowseSelect()<cr>
endif
- let &report= repkeep
-" call Dret("zip#Browse")
endfun
" ---------------------------------------------------------------------
" ZipBrowseSelect: {{{2
fun! s:ZipBrowseSelect()
- " call Dfunc("ZipBrowseSelect() zipfile<".((exists("b:zipfile"))? b:zipfile : "n/a")."> curfile<".expand("%").">")
- let repkeep= &report
- set report=10
+ let dict = s:SetSaneOpts()
+ defer s:RestoreOpts(dict)
let fname= getline(".")
if !exists("b:zipfile")
-" call Dret("ZipBrowseSelect : b:zipfile doesn't exist!")
return
endif
" sanity check
if fname =~ '^"'
- let &report= repkeep
-" call Dret("ZipBrowseSelect")
return
endif
if fname =~ '/$'
- redraw!
- echohl Error | echo "***error*** (zip#Browse) Please specify a file, not a directory" | echohl None
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
- let &report= repkeep
-" call Dret("ZipBrowseSelect")
+ call s:Mess('Error', "***error*** (zip#Browse) Please specify a file, not a directory")
return
endif
-" call Decho("fname<".fname.">")
-
" get zipfile to the new-window
let zipfile = b:zipfile
let curfile = expand("%")
-" call Decho("zipfile<".zipfile.">")
-" call Decho("curfile<".curfile.">")
noswapfile new
if !exists("g:zip_nomax") || g:zip_nomax == 0
wincmd _
endif
let s:zipfile_{winnr()}= curfile
-" call Decho("exe e ".fnameescape("zipfile://".zipfile.'::'.fname))
exe "noswapfile e ".fnameescape("zipfile://".zipfile.'::'.fname)
filetype detect
- let &report= repkeep
-" call Dret("ZipBrowseSelect : s:zipfile_".winnr()."<".s:zipfile_{winnr()}.">")
endfun
" ---------------------------------------------------------------------
" zip#Read: {{{2
fun! zip#Read(fname,mode)
- let repkeep= &report
- set report=10
+ let dict = s:SetSaneOpts()
+ defer s:RestoreOpts(dict)
if has("unix")
let zipfile = substitute(a:fname,'zipfile://\(.\{-}\)::[^\\].*$','\1','')
@@ -224,23 +205,20 @@ fun! zip#Read(fname,mode)
else
let zipfile = substitute(a:fname,'^.\{-}zipfile://\(.\{-}\)::[^\\].*$','\1','')
let fname = substitute(a:fname,'^.\{-}zipfile://.\{-}::\([^\\].*\)$','\1','')
- let fname = substitute(fname, '[', '[[]', 'g')
endif
+ let fname = fname->substitute('[', '[[]', 'g')->escape('?*\\')
" sanity check
if !executable(substitute(g:zip_unzipcmd,'\s\+.*$','',''))
- redraw!
- echohl Error | echo "***error*** (zip#Read) sorry, your system doesn't appear to have the ".g:zip_unzipcmd." program" | echohl None
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
- let &report= repkeep
+ call s:Mess('Error', "***error*** (zip#Read) sorry, your system doesn't appear to have the ".g:zip_unzipcmd." program")
return
endif
" the following code does much the same thing as
- " exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1)
+ " exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1)
" but allows zipfile://... entries in quickfix lists
let temp = tempname()
let fn = expand('%:p')
- exe "sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1).' > '.temp
+ exe "sil !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1).' > '.temp
sil exe 'keepalt file '.temp
sil keepj e!
sil exe 'keepalt file '.fnameescape(fn)
@@ -251,58 +229,42 @@ fun! zip#Read(fname,mode)
" cleanup
set nomod
- let &report= repkeep
endfun
" ---------------------------------------------------------------------
" zip#Write: {{{2
fun! zip#Write(fname)
-" call Dfunc("zip#Write(fname<".a:fname.">) zipfile_".winnr()."<".s:zipfile_{winnr()}.">")
- let repkeep= &report
- set report=10
+ let dict = s:SetSaneOpts()
+ defer s:RestoreOpts(dict)
" sanity checks
if !executable(substitute(g:zip_zipcmd,'\s\+.*$','',''))
- redraw!
- echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the ".g:zip_zipcmd." program" | echohl None
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
- let &report= repkeep
-" call Dret("zip#Write")
+ call s:Mess('Error', "***error*** (zip#Write) sorry, your system doesn't appear to have the ".g:zip_zipcmd." program")
return
endif
if !exists("*mkdir")
- redraw!
- echohl Error | echo "***error*** (zip#Write) sorry, mkdir() doesn't work on your system" | echohl None
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
- let &report= repkeep
-" call Dret("zip#Write")
+ call s:Mess('Error', "***error*** (zip#Write) sorry, mkdir() doesn't work on your system")
return
endif
let curdir= getcwd()
let tmpdir= tempname()
-" call Decho("orig tempname<".tmpdir.">")
if tmpdir =~ '\.'
let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
endif
-" call Decho("tmpdir<".tmpdir.">")
call mkdir(tmpdir,"p")
" attempt to change to the indicated directory
if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot cd to temporary directory")
- let &report= repkeep
-" call Dret("zip#Write")
return
endif
-" call Decho("current directory now: ".getcwd())
" place temporary files under .../_ZIPVIM_/
if isdirectory("_ZIPVIM_")
- call s:Rmdir("_ZIPVIM_")
+ call delete("_ZIPVIM_", "rf")
endif
call mkdir("_ZIPVIM_")
cd _ZIPVIM_
-" call Decho("current directory now: ".getcwd())
if has("unix")
let zipfile = substitute(a:fname,'zipfile://\(.\{-}\)::[^\\].*$','\1','')
@@ -311,21 +273,17 @@ fun! zip#Write(fname)
let zipfile = substitute(a:fname,'^.\{-}zipfile://\(.\{-}\)::[^\\].*$','\1','')
let fname = substitute(a:fname,'^.\{-}zipfile://.\{-}::\([^\\].*\)$','\1','')
endif
-" call Decho("zipfile<".zipfile.">")
-" call Decho("fname <".fname.">")
if fname =~ '/'
let dirpath = substitute(fname,'/[^/]\+$','','e')
if has("win32unix") && executable("cygpath")
let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e')
endif
-" call Decho("mkdir(dirpath<".dirpath.">,p)")
call mkdir(dirpath,"p")
endif
if zipfile !~ '/'
let zipfile= curdir.'/'.zipfile
endif
-" call Decho("zipfile<".zipfile."> fname<".fname.">")
exe "w! ".fnameescape(fname)
if has("win32unix") && executable("cygpath")
@@ -336,17 +294,13 @@ fun! zip#Write(fname)
let fname = substitute(fname, '[', '[[]', 'g')
endif
-" call Decho(g:zip_zipcmd." -u ".s:Escape(fnamemodify(zipfile,":p"),0)." ".s:Escape(fname,0))
call system(g:zip_zipcmd." -u ".s:Escape(fnamemodify(zipfile,":p"),0)." ".s:Escape(fname,0))
if v:shell_error != 0
- redraw!
- echohl Error | echo "***error*** (zip#Write) sorry, unable to update ".zipfile." with ".fname | echohl None
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+ call s:Mess('Error', "***error*** (zip#Write) sorry, unable to update ".zipfile." with ".fname)
elseif s:zipfile_{winnr()} =~ '^\a\+://'
" support writing zipfiles across a network
let netzipfile= s:zipfile_{winnr()}
-" call Decho("handle writing <".zipfile."> across network as <".netzipfile.">")
1split|enew
let binkeep= &binary
let eikeep = &ei
@@ -358,58 +312,58 @@ fun! zip#Write(fname)
q!
unlet s:zipfile_{winnr()}
endif
-
+
" cleanup and restore current directory
cd ..
- call s:Rmdir("_ZIPVIM_")
+ call delete("_ZIPVIM_", "rf")
call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
- call s:Rmdir(tmpdir)
+ call delete(tmpdir, "rf")
setlocal nomod
- let &report= repkeep
-" call Dret("zip#Write")
endfun
" ---------------------------------------------------------------------
" zip#Extract: extract a file from a zip archive {{{2
fun! zip#Extract()
-" call Dfunc("zip#Extract()")
- let repkeep= &report
- set report=10
+ let dict = s:SetSaneOpts()
+ defer s:RestoreOpts(dict)
let fname= getline(".")
-" call Decho("fname<".fname.">")
" sanity check
if fname =~ '^"'
- let &report= repkeep
-" call Dret("zip#Extract")
return
endif
if fname =~ '/$'
- redraw!
- echohl Error | echo "***error*** (zip#Extract) Please specify a file, not a directory" | echohl None
- let &report= repkeep
-" call Dret("zip#Extract")
+ call s:Mess('Error', "***error*** (zip#Extract) Please specify a file, not a directory")
+ return
+ endif
+ if filereadable(fname)
+ call s:Mess('Error', "***error*** (zip#Extract) <" .. fname .."> already exists in directory, not overwriting!")
return
endif
+ let target = fname->substitute('\[', '[[]', 'g')
+ if &shell =~ 'cmd' && has("win32")
+ let target = target
+ \ ->substitute('[?*]', '[&]', 'g')
+ \ ->substitute('[\\]', '?', 'g')
+ \ ->shellescape()
+ " there cannot be a file name with '\' in its name, unzip replaces it by _
+ let fname = fname->substitute('[\\?*]', '_', 'g')
+ else
+ let target = target->escape('*?\\')->shellescape()
+ endif
" extract the file mentioned under the cursor
-" call Decho("system(".g:zip_extractcmd." ".shellescape(b:zipfile)." ".shellescape(shell).")")
- call system(g:zip_extractcmd." ".shellescape(b:zipfile)." ".shellescape(shell))
-" call Decho("zipfile<".b:zipfile.">")
+ call system($"{g:zip_extractcmd} -o {shellescape(b:zipfile)} {target}")
if v:shell_error != 0
- echohl Error | echo "***error*** ".g:zip_extractcmd." ".b:zipfile." ".fname.": failed!" | echohl NONE
+ call s:Mess('Error', "***error*** ".g:zip_extractcmd." ".b:zipfile." ".fname.": failed!")
elseif !filereadable(fname)
- echohl Error | echo "***error*** attempted to extract ".fname." but it doesn't appear to be present!"
+ call s:Mess('Error', "***error*** attempted to extract ".fname." but it doesn't appear to be present!")
else
- echo "***note*** successfully extracted ".fname
+ echomsg "***note*** successfully extracted ".fname
endif
- " restore option
- let &report= repkeep
-
-" call Dret("zip#Extract")
endfun
" ---------------------------------------------------------------------
@@ -424,48 +378,48 @@ fun! s:Escape(fname,isfilt)
else
let qnameq= g:zip_shq.escape(a:fname,g:zip_shq).g:zip_shq
endif
- if exists("+shellslash") && &shellslash && &shell =~ "cmd.exe"
- " renormalize directory separator on Windows
- let qnameq=substitute(qnameq, '/', '\\', 'g')
- endif
return qnameq
endfun
" ---------------------------------------------------------------------
-" ChgDir: {{{2
+" s:ChgDir: {{{2
fun! s:ChgDir(newdir,errlvl,errmsg)
-" call Dfunc("ChgDir(newdir<".a:newdir."> errlvl=".a:errlvl." errmsg<".a:errmsg.">)")
-
try
exe "cd ".fnameescape(a:newdir)
catch /^Vim\%((\a\+)\)\=:E344/
redraw!
if a:errlvl == s:NOTE
- echo "***note*** ".a:errmsg
+ echomsg "***note*** ".a:errmsg
elseif a:errlvl == s:WARNING
- echohl WarningMsg | echo "***warning*** ".a:errmsg | echohl NONE
+ call s:Mess("WarningMsg", "***warning*** ".a:errmsg)
elseif a:errlvl == s:ERROR
- echohl Error | echo "***error*** ".a:errmsg | echohl NONE
+ call s:Mess("Error", "***error*** ".a:errmsg)
endif
-" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-" call Dret("ChgDir 1")
return 1
endtry
-" call Dret("ChgDir 0")
return 0
endfun
" ---------------------------------------------------------------------
-" s:Rmdir: {{{2
-fun! s:Rmdir(fname)
-" call Dfunc("Rmdir(fname<".a:fname.">)")
- if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
- call system("rmdir /S/Q ".s:Escape(a:fname,0))
- else
- call system("/bin/rm -rf ".s:Escape(a:fname,0))
- endif
-" call Dret("Rmdir")
+" s:SetSaneOpts: {{{2
+fun! s:SetSaneOpts()
+ let dict = {}
+ let dict.report = &report
+ let dict.shellslash = &shellslash
+
+ let &report = 10
+ let &shellslash = 0
+
+ return dict
+endfun
+
+" ---------------------------------------------------------------------
+" s:RestoreOpts: {{{2
+fun! s:RestoreOpts(dict)
+ for [key, val] in items(a:dict)
+ exe $"let &{key} = {val}"
+ endfor
endfun
" ------------------------------------------------------------------------
diff --git a/runtime/colors/blue.vim b/runtime/colors/blue.vim
index f95cf27..aafa8e9 100644
--- a/runtime/colors/blue.vim
+++ b/runtime/colors/blue.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Steven Vertigan <steven@vertigan.wattle.id.au>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Mon 08 Jan 2024 09:42:49 AM AEDT
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -22,9 +22,11 @@ hi Normal guifg=#ffd700 guibg=#000087 gui=NONE cterm=NONE
hi CursorLine guifg=NONE guibg=#005faf gui=NONE cterm=NONE
hi Pmenu guifg=#ffffff guibg=#008787 gui=NONE cterm=NONE
hi PmenuSel guifg=#008787 guibg=#ffffff gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ffd700 guibg=#008787 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff7f50 guibg=#ffffff gui=NONE cterm=NONE
hi QuickFixLine guifg=#000000 guibg=#d787d7 gui=NONE cterm=NONE
hi ColorColumn guifg=NONE guibg=#870087 gui=NONE cterm=NONE
-hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+hi Conceal guifg=#008787 guibg=NONE gui=NONE cterm=NONE
hi Cursor guifg=#000000 guibg=#00ff00 gui=NONE cterm=NONE
hi CursorColumn guifg=NONE guibg=#005faf gui=NONE cterm=NONE
hi CursorIM guifg=#000000 guibg=#ffd700 gui=NONE cterm=NONE
@@ -132,9 +134,11 @@ if s:t_Co >= 256
hi CursorLine ctermfg=NONE ctermbg=25 cterm=NONE
hi Pmenu ctermfg=231 ctermbg=30 cterm=NONE
hi PmenuSel ctermfg=30 ctermbg=231 cterm=NONE
+ hi PmenuMatch ctermfg=220 ctermbg=30 cterm=NONE
+ hi PmenuMatchSel ctermfg=209 ctermbg=231 cterm=NONE
hi QuickFixLine ctermfg=16 ctermbg=176 cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=90 cterm=NONE
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=30 ctermbg=NONE cterm=NONE
hi Cursor ctermfg=16 ctermbg=46 cterm=NONE
hi CursorColumn ctermfg=NONE ctermbg=25 cterm=NONE
hi CursorIM ctermfg=16 ctermbg=220 cterm=NONE
@@ -245,9 +249,11 @@ if s:t_Co >= 16
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi Pmenu ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuSel ctermfg=black ctermbg=white cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=white cterm=bold
hi QuickFixLine ctermfg=black ctermbg=magenta cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=darkmagenta cterm=NONE
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Cursor ctermfg=black ctermbg=green cterm=NONE
hi CursorColumn ctermfg=NONE ctermbg=blue cterm=NONE
hi CursorIM ctermfg=black ctermbg=yellow cterm=NONE
@@ -358,6 +364,8 @@ if s:t_Co >= 8
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi Pmenu ctermfg=black ctermbg=cyan cterm=NONE
hi PmenuSel ctermfg=black ctermbg=gray cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=cyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=gray cterm=bold
hi QuickFixLine ctermfg=black ctermbg=magenta cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=magenta cterm=NONE
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/darkblue.vim b/runtime/colors/darkblue.vim
index b792b90..3a0a218 100644
--- a/runtime/colors/darkblue.vim
+++ b/runtime/colors/darkblue.vim
@@ -4,7 +4,7 @@
" Maintainer: Original author Bohdan Vlasyuk <bohdan@vstu.edu.ua>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Mon 08 Jan 2024 09:43:03 AM AEDT
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -68,7 +68,7 @@ hi! link CurSearch Search
hi! link MessageWindow Pmenu
hi! link PopupNotification Todo
hi Normal guifg=#c0c0c0 guibg=#000040 gui=NONE cterm=NONE
-hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+hi Conceal guifg=#008b8b guibg=NONE gui=NONE cterm=NONE
hi ColorColumn guifg=#c0c0c0 guibg=#8b0000 gui=NONE cterm=NONE
hi Cursor guifg=#000000 guibg=#ffff60 gui=NONE cterm=NONE
hi QuickFixLine guifg=#000000 guibg=#ff80ff gui=NONE cterm=NONE
@@ -85,6 +85,8 @@ hi Pmenu guifg=#ffffff guibg=#0030ff gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel guifg=#0030ff guibg=#ffffff gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#ffffff gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ff80ff guibg=#0030ff gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff00ff guibg=#ffffff gui=NONE cterm=NONE
hi Question guifg=#90f020 guibg=NONE gui=NONE cterm=NONE
hi SignColumn guifg=#808080 guibg=NONE gui=NONE cterm=NONE
hi SpecialKey guifg=#008b8b guibg=NONE gui=NONE cterm=NONE
@@ -176,7 +178,7 @@ if s:t_Co >= 256
hi! link MessageWindow Pmenu
hi! link PopupNotification Todo
hi Normal ctermfg=252 ctermbg=17 cterm=NONE
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=30 ctermbg=NONE cterm=NONE
hi ColorColumn ctermfg=252 ctermbg=88 cterm=NONE
hi Cursor ctermfg=16 ctermbg=227 cterm=NONE
hi QuickFixLine ctermfg=16 ctermbg=213 cterm=NONE
@@ -193,6 +195,8 @@ if s:t_Co >= 256
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=27 ctermbg=231 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=231 cterm=NONE
+ hi PmenuMatch ctermfg=213 ctermbg=27 cterm=NONE
+ hi PmenuMatchSel ctermfg=201 ctermbg=231 cterm=NONE
hi Question ctermfg=118 ctermbg=NONE cterm=NONE
hi SignColumn ctermfg=102 ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=30 ctermbg=NONE cterm=NONE
@@ -238,7 +242,7 @@ endif
if s:t_Co >= 16
hi Normal ctermfg=grey ctermbg=black cterm=NONE
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi ColorColumn ctermfg=grey ctermbg=darkred cterm=NONE
hi Cursor ctermfg=black ctermbg=yellow cterm=NONE
hi QuickFixLine ctermfg=black ctermbg=magenta cterm=NONE
@@ -255,6 +259,8 @@ if s:t_Co >= 16
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=blue ctermbg=white cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=white cterm=NONE
+ hi PmenuMatch ctermfg=magenta ctermbg=blue cterm=NONE
+ hi PmenuMatchSel ctermfg=darkmagenta ctermbg=white cterm=NONE
hi Question ctermfg=green ctermbg=NONE cterm=NONE
hi SignColumn ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=darkcyan ctermbg=NONE cterm=NONE
@@ -318,6 +324,8 @@ if s:t_Co >= 8
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=blue ctermbg=grey cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=grey cterm=NONE
+ hi PmenuMatch ctermfg=grey ctermbg=blue cterm=bold
+ hi PmenuMatchSel ctermfg=blue ctermbg=grey cterm=bold
hi Question ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Search ctermfg=darkcyan ctermbg=blue cterm=NONE
hi SignColumn ctermfg=grey ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/delek.vim b/runtime/colors/delek.vim
index 16de514..c06fda2 100644
--- a/runtime/colors/delek.vim
+++ b/runtime/colors/delek.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer David Schweikert <david@schweikert.ch>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:34
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -38,6 +38,8 @@ hi Pmenu guifg=#000000 guibg=#add8e6 gui=NONE cterm=NONE
hi PmenuSel guifg=#ffffff guibg=#00008b gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#ffffff gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#008b8b gui=NONE cterm=NONE
+hi PmenuMatch guifg=#cd00cd guibg=#add8e6 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff87ff guibg=#00008b gui=NONE cterm=NONE
hi TabLine guifg=#000000 guibg=#e4e4e4 gui=NONE cterm=NONE
hi TabLineFill guifg=NONE guibg=#bcbcbc gui=NONE cterm=NONE
hi TabLineSel guifg=#000000 guibg=#ffffff gui=bold cterm=bold
@@ -45,6 +47,7 @@ hi ToolbarLine guifg=NONE guibg=#e4e4e4 gui=NONE cterm=NONE
hi ToolbarButton guifg=#ffffff guibg=#bcbcbc gui=bold cterm=bold
hi NonText guifg=#bcbcbc guibg=NONE gui=NONE cterm=NONE
hi SpecialKey guifg=#bcbcbc guibg=NONE gui=NONE cterm=NONE
+hi Conceal guifg=#bcbcbc guibg=NONE gui=NONE cterm=NONE
hi Folded guifg=#00008b guibg=#e4e4e4 gui=NONE cterm=NONE
hi Visual guifg=#000000 guibg=#d0d0d0 gui=NONE cterm=NONE
hi VisualNOS guifg=NONE guibg=#ee0000 gui=NONE cterm=NONE
@@ -82,7 +85,6 @@ hi PreProc guifg=#cd00cd guibg=NONE gui=NONE cterm=NONE
hi Type guifg=#0000ff guibg=NONE gui=bold cterm=bold
hi Special guifg=#ff1493 guibg=NONE gui=NONE cterm=NONE
hi Directory guifg=#008b8b guibg=NONE gui=bold cterm=bold
-hi Conceal guifg=#ee0000 guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title guifg=#cd00cd guibg=NONE gui=bold cterm=bold
hi CursorLine guifg=NONE guibg=#e4e4e4 gui=NONE cterm=NONE
@@ -112,6 +114,8 @@ if s:t_Co >= 256
hi PmenuSel ctermfg=231 ctermbg=18 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=231 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=30 cterm=NONE
+ hi PmenuMatch ctermfg=164 ctermbg=152 cterm=NONE
+ hi PmenuMatchSel ctermfg=213 ctermbg=18 cterm=NONE
hi TabLine ctermfg=16 ctermbg=254 cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=250 cterm=NONE
hi TabLineSel ctermfg=16 ctermbg=231 cterm=bold
@@ -119,6 +123,7 @@ if s:t_Co >= 256
hi ToolbarButton ctermfg=231 ctermbg=250 cterm=bold
hi NonText ctermfg=250 ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=250 ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=250 ctermbg=NONE cterm=NONE
hi Folded ctermfg=18 ctermbg=254 cterm=NONE
hi Visual ctermfg=16 ctermbg=252 cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=196 cterm=NONE
@@ -156,7 +161,6 @@ if s:t_Co >= 256
hi Type ctermfg=21 ctermbg=NONE cterm=bold
hi Special ctermfg=198 ctermbg=NONE cterm=NONE
hi Directory ctermfg=30 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=196 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title ctermfg=164 ctermbg=NONE cterm=bold
hi CursorLine ctermfg=NONE ctermbg=254 cterm=NONE
@@ -180,6 +184,8 @@ if s:t_Co >= 16
hi PmenuSel ctermfg=white ctermbg=darkblue cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=white cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkcyan cterm=NONE
+ hi PmenuMatch ctermfg=darkmagenta ctermbg=grey cterm=NONE
+ hi PmenuMatchSel ctermfg=magenta ctermbg=darkblue cterm=NONE
hi TabLine ctermfg=black ctermbg=grey cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=darkgrey cterm=NONE
hi TabLineSel ctermfg=black ctermbg=white cterm=bold
@@ -187,6 +193,7 @@ if s:t_Co >= 16
hi ToolbarButton ctermfg=white ctermbg=darkgrey cterm=bold
hi NonText ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=darkgrey ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Folded ctermfg=darkblue ctermbg=grey cterm=NONE
hi Visual ctermfg=black ctermbg=darkgrey cterm=NONE
hi VisualNOS ctermfg=NONE ctermbg=darkred cterm=NONE
@@ -224,7 +231,6 @@ if s:t_Co >= 16
hi Type ctermfg=blue ctermbg=NONE cterm=bold
hi Special ctermfg=magenta ctermbg=NONE cterm=NONE
hi Directory ctermfg=darkcyan ctermbg=NONE cterm=bold
- hi Conceal ctermfg=darkred ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title ctermfg=darkmagenta ctermbg=NONE cterm=bold
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
@@ -249,6 +255,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkgreen cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLine ctermfg=gray ctermbg=black cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=black cterm=NONE
hi TabLineSel ctermfg=black ctermbg=gray cterm=NONE
@@ -256,6 +264,7 @@ if s:t_Co >= 8
hi ToolbarButton ctermfg=black ctermbg=gray cterm=bold,reverse
hi NonText ctermfg=darkblue ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=darkblue ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Folded ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Visual ctermfg=NONE ctermbg=NONE cterm=reverse
hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=underline
@@ -291,7 +300,6 @@ if s:t_Co >= 8
hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
hi Special ctermfg=darkmagenta ctermbg=NONE cterm=bold
hi Directory ctermfg=darkcyan ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title ctermfg=darkmagenta ctermbg=NONE cterm=bold
hi DiffAdd ctermfg=white ctermbg=darkgreen cterm=NONE
@@ -398,6 +406,7 @@ endif
" Color: darkmagenta #870087 18 darkmagenta
" Color: darkcyan #008787 30 darkcyan
" Color: gray #878787 102 gray
+" Color: magenta #ff87ff 213 magenta
" Term colors: bg0 statement constant preproc identifier type special bg1
" Term colors: comment statement constant preproc identifier type special fg0
" Color: bgDiffA #5F875F 65 darkgreen
diff --git a/runtime/colors/desert.vim b/runtime/colors/desert.vim
index e639653..4c34468 100644
--- a/runtime/colors/desert.vim
+++ b/runtime/colors/desert.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Hans Fugal <hans@fugal.net>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:34
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -37,6 +37,8 @@ hi Pmenu guifg=#ffffff guibg=#666666 gui=NONE cterm=NONE
hi PmenuSel guifg=#333333 guibg=#f0e68c gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#333333 gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#c2bfa5 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ffa0a0 guibg=#666666 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#cd5c5c guibg=#f0e68c gui=NONE cterm=NONE
hi TabLine guifg=#333333 guibg=#c2bfa5 gui=NONE cterm=NONE
hi TabLineFill guifg=NONE guibg=#c2bfa5 gui=NONE cterm=NONE
hi TabLineSel guifg=#333333 guibg=#f0e68c gui=NONE cterm=NONE
@@ -111,6 +113,8 @@ if s:t_Co >= 256
hi PmenuSel ctermfg=236 ctermbg=186 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=236 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=144 cterm=NONE
+ hi PmenuMatch ctermfg=217 ctermbg=241 cterm=NONE
+ hi PmenuMatchSel ctermfg=167 ctermbg=186 cterm=NONE
hi TabLine ctermfg=236 ctermbg=144 cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=144 cterm=NONE
hi TabLineSel ctermfg=236 ctermbg=186 cterm=NONE
@@ -177,6 +181,8 @@ if s:t_Co >= 16
hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=white cterm=NONE
+ hi PmenuMatch ctermfg=NONE ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=yellow cterm=bold
hi TabLine ctermfg=black ctermbg=grey cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=white cterm=NONE
hi TabLineSel ctermfg=white ctermbg=black cterm=NONE
@@ -243,6 +249,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=grey cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLine ctermfg=black ctermbg=grey cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=grey cterm=NONE
hi TabLineSel ctermfg=grey ctermbg=black cterm=NONE
diff --git a/runtime/colors/elflord.vim b/runtime/colors/elflord.vim
index 3a72dfb..9dc5a11 100644
--- a/runtime/colors/elflord.vim
+++ b/runtime/colors/elflord.vim
@@ -3,7 +3,7 @@
" Maintainer: original maintainer Ron Aaron <ron@ronware.org>
" Website: https://www.github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:35
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -72,6 +72,8 @@ hi Pmenu guifg=#ffffff guibg=#444444 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#bebebe gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#00cdcd gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#ffffff gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ff00ff guibg=#444444 gui=bold cterm=bold
+hi PmenuMatchSel guifg=#ff00ff guibg=#00cdcd gui=bold cterm=bold
hi Question guifg=#00ff00 guibg=NONE gui=bold cterm=bold
hi Search guifg=#000000 guibg=#ffff00 gui=NONE cterm=NONE
hi SignColumn guifg=#00ffff guibg=NONE gui=NONE cterm=NONE
@@ -140,6 +142,8 @@ if s:t_Co >= 256
hi PmenuSbar ctermfg=NONE ctermbg=250 cterm=NONE
hi PmenuSel ctermfg=16 ctermbg=44 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=231 cterm=NONE
+ hi PmenuMatch ctermfg=201 ctermbg=238 cterm=bold
+ hi PmenuMatchSel ctermfg=201 ctermbg=44 cterm=bold
hi Question ctermfg=46 ctermbg=NONE cterm=bold
hi Search ctermfg=16 ctermbg=226 cterm=NONE
hi SignColumn ctermfg=51 ctermbg=NONE cterm=NONE
@@ -211,6 +215,8 @@ if s:t_Co >= 16
hi PmenuSbar ctermfg=NONE ctermbg=grey cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=white cterm=NONE
+ hi PmenuMatch ctermfg=magenta ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=magenta ctermbg=darkcyan cterm=bold
hi Question ctermfg=green ctermbg=NONE cterm=bold
hi Search ctermfg=black ctermbg=yellow cterm=NONE
hi SignColumn ctermfg=cyan ctermbg=NONE cterm=NONE
@@ -281,6 +287,8 @@ if s:t_Co >= 8
hi PmenuSbar ctermfg=grey ctermbg=grey cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkcyan cterm=NONE
+ hi PmenuMatch ctermfg=grey ctermbg=NONE cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkcyan cterm=bold
hi Question ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Search ctermfg=black ctermbg=darkyellow cterm=NONE
hi SignColumn ctermfg=darkcyan ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/evening.vim b/runtime/colors/evening.vim
index 2753daa..7ea265d 100644
--- a/runtime/colors/evening.vim
+++ b/runtime/colors/evening.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Steven Vertigan <steven@vertigan.wattle.id.au>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Mon 08 Jan 2024 09:43:27 AM AEDT
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -75,6 +75,8 @@ hi StatusLine guifg=#333333 guibg=#ffffff gui=bold cterm=bold
hi StatusLineNC guifg=#333333 guibg=#d3d3d3 gui=NONE cterm=NONE
hi TabLineSel guifg=#333333 guibg=#ffffff gui=bold cterm=bold
hi TabLine guifg=#333333 guibg=#d3d3d3 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ff80ff guibg=#4d4d4d gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#8b008b guibg=#bebebe gui=NONE cterm=NONE
hi Pmenu guifg=#ffffff guibg=#4d4d4d gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#bebebe gui=NONE cterm=NONE
@@ -84,7 +86,7 @@ hi Cursor guifg=#000000 guibg=#00ff00 gui=NONE cterm=NONE
hi Error guifg=#ff0000 guibg=#ffffff gui=reverse cterm=reverse
hi ErrorMsg guifg=#ffffff guibg=#ff0000 gui=NONE cterm=NONE
hi LineNr guifg=#ffff00 guibg=NONE gui=NONE cterm=NONE
-hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+hi Conceal guifg=#666666 guibg=NONE gui=NONE cterm=NONE
hi FoldColumn guifg=#add8e6 guibg=NONE gui=NONE cterm=NONE
hi Folded guifg=#00008b guibg=#d3d3d3 gui=bold cterm=bold
hi IncSearch guifg=#00ff00 guibg=NONE gui=reverse cterm=reverse
@@ -183,6 +185,8 @@ if s:t_Co >= 256
hi StatusLineNC ctermfg=236 ctermbg=252 cterm=NONE
hi TabLineSel ctermfg=236 ctermbg=231 cterm=bold
hi TabLine ctermfg=236 ctermbg=252 cterm=NONE
+ hi PmenuMatch ctermfg=201 ctermbg=239 cterm=NONE
+ hi PmenuMatchSel ctermfg=90 ctermbg=250 cterm=NONE
hi Pmenu ctermfg=231 ctermbg=239 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=16 ctermbg=250 cterm=NONE
@@ -192,7 +196,7 @@ if s:t_Co >= 256
hi Error ctermfg=196 ctermbg=231 cterm=reverse
hi ErrorMsg ctermfg=231 ctermbg=196 cterm=NONE
hi LineNr ctermfg=226 ctermbg=NONE cterm=NONE
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=241 ctermbg=NONE cterm=NONE
hi FoldColumn ctermfg=153 ctermbg=NONE cterm=NONE
hi Folded ctermfg=18 ctermbg=252 cterm=bold
hi IncSearch ctermfg=46 ctermbg=NONE cterm=reverse
@@ -294,6 +298,8 @@ if s:t_Co >= 16
hi StatusLineNC ctermfg=black ctermbg=gray cterm=NONE
hi TabLineSel ctermfg=black ctermbg=white cterm=NONE
hi TabLine ctermfg=black ctermbg=gray cterm=NONE
+ hi PmenuMatch ctermfg=white ctermbg=darkgray cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=gray cterm=bold
hi Pmenu ctermfg=white ctermbg=darkgray cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=black ctermbg=gray cterm=NONE
@@ -303,7 +309,7 @@ if s:t_Co >= 16
hi Error ctermfg=red ctermbg=white cterm=reverse
hi ErrorMsg ctermfg=white ctermbg=red cterm=NONE
hi LineNr ctermfg=darkyellow ctermbg=NONE cterm=NONE
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=darkgray ctermbg=NONE cterm=NONE
hi FoldColumn ctermfg=lightblue ctermbg=NONE cterm=NONE
hi Folded ctermfg=darkblue ctermbg=gray cterm=bold
hi IncSearch ctermfg=green ctermbg=NONE cterm=reverse
@@ -361,6 +367,8 @@ if s:t_Co >= 8
hi PmenuSbar ctermfg=NONE ctermbg=gray cterm=NONE
hi PmenuSel ctermfg=black ctermbg=gray cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=black cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=gray cterm=bold
hi QuickFixLine ctermfg=gray ctermbg=darkmagenta cterm=NONE
hi Error ctermfg=red ctermbg=gray cterm=reverse
hi ErrorMsg ctermfg=gray ctermbg=red cterm=NONE
diff --git a/runtime/colors/habamax.vim b/runtime/colors/habamax.vim
index f32a549..a9cbf52 100644
--- a/runtime/colors/habamax.vim
+++ b/runtime/colors/habamax.vim
@@ -4,7 +4,7 @@
" Maintainer: Maxim Kim <habamax@gmail.com>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Mon 08 Jan 2024 09:39:53 AM AEDT
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -16,13 +16,12 @@ let g:colors_name = 'habamax'
let s:t_Co = has('gui_running') ? -1 : (&t_Co ?? 0)
if (has('termguicolors') && &termguicolors) || has('gui_running')
- let g:terminal_ansi_colors = ['#1c1c1c', '#d75f5f', '#87af87', '#afaf87', '#5f87af', '#af87af', '#5f8787', '#9e9e9e', '#767676', '#d7875f', '#afd7af', '#d7d787', '#87afd7', '#d7afd7', '#87afaf', '#bcbcbc']
+ let g:terminal_ansi_colors = ['#1c1c1c', '#af5f5f', '#5faf5f', '#af875f', '#5f87af', '#af87af', '#5f8787', '#9e9e9e', '#767676', '#d75f87', '#87d787', '#d7af87', '#5fafd7', '#d787d7', '#87afaf', '#bcbcbc']
endif
hi! link Terminal Normal
hi! link StatuslineTerm Statusline
hi! link StatuslineTermNC StatuslineNC
hi! link MessageWindow Pmenu
-hi! link PopupNotification Todo
hi! link javaScriptFunction Statement
hi! link javaScriptIdentifier Statement
hi! link sqlKeyword Statement
@@ -34,7 +33,6 @@ hi! link vimOper Normal
hi! link vimSep Normal
hi! link vimParenSep Normal
hi! link vimCommentString Comment
-hi! link gitCommitSummary Title
hi! link markdownUrl String
hi Normal guifg=#bcbcbc guibg=#1c1c1c gui=NONE cterm=NONE
hi Statusline guifg=#1c1c1c guibg=#9e9e9e gui=NONE cterm=NONE
@@ -42,11 +40,11 @@ hi StatuslineNC guifg=#1c1c1c guibg=#767676 gui=NONE cterm=NONE
hi VertSplit guifg=#767676 guibg=#767676 gui=NONE cterm=NONE
hi TabLine guifg=#1c1c1c guibg=#767676 gui=NONE cterm=NONE
hi TabLineFill guifg=#1c1c1c guibg=#767676 gui=NONE cterm=NONE
-hi TabLineSel guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
+hi TabLineSel guifg=#1c1c1c guibg=#9e9e9e gui=bold cterm=bold
hi ToolbarLine guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
-hi ToolbarButton guifg=#9e9e9e guibg=#1c1c1c gui=bold,reverse cterm=bold,reverse
+hi ToolbarButton guifg=#767676 guibg=#1c1c1c gui=bold,reverse cterm=bold,reverse
hi QuickFixLine guifg=#1c1c1c guibg=#5f87af gui=NONE cterm=NONE
-hi CursorLineNr guifg=#ffaf5f guibg=NONE gui=bold cterm=bold
+hi CursorLineNr guifg=#dadada guibg=NONE gui=bold cterm=bold
hi LineNr guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi LineNrAbove guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi LineNrBelow guifg=#585858 guibg=NONE gui=NONE cterm=NONE
@@ -54,71 +52,71 @@ hi NonText guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi EndOfBuffer guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi SpecialKey guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi FoldColumn guifg=#585858 guibg=NONE gui=NONE cterm=NONE
-hi Visual guifg=#1c1c1c guibg=#87afaf gui=NONE cterm=NONE
+hi Visual guifg=#87afaf guibg=#1c1c1c gui=reverse cterm=reverse
hi VisualNOS guifg=#1c1c1c guibg=#5f8787 gui=NONE cterm=NONE
hi Pmenu guifg=NONE guibg=#3a3a3a gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#767676 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
-hi PmenuSel guifg=#1c1c1c guibg=#afaf87 gui=NONE cterm=NONE
-hi PmenuKind guifg=#d7875f guibg=#3a3a3a gui=NONE cterm=NONE
-hi PmenuKindSel guifg=#d75f5f guibg=#afaf87 gui=NONE cterm=NONE
+hi PmenuSel guifg=NONE guibg=#585858 gui=NONE cterm=NONE
+hi PmenuKind guifg=#5f8787 guibg=#3a3a3a gui=NONE cterm=NONE
+hi PmenuKindSel guifg=#5f8787 guibg=#585858 gui=NONE cterm=NONE
hi PmenuExtra guifg=#767676 guibg=#3a3a3a gui=NONE cterm=NONE
-hi PmenuExtraSel guifg=#1c1c1c guibg=#afaf87 gui=NONE cterm=NONE
+hi PmenuExtraSel guifg=#9e9e9e guibg=#585858 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ffaf5f guibg=#3a3a3a gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ffaf5f guibg=#585858 gui=NONE cterm=NONE
hi SignColumn guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
-hi Error guifg=#d75f5f guibg=#1c1c1c gui=reverse cterm=reverse
-hi ErrorMsg guifg=#d75f5f guibg=#1c1c1c gui=reverse cterm=reverse
-hi ModeMsg guifg=#1c1c1c guibg=#d7d787 gui=NONE cterm=NONE
-hi MoreMsg guifg=#87af87 guibg=NONE gui=NONE cterm=NONE
-hi Question guifg=#afaf87 guibg=NONE gui=NONE cterm=NONE
-hi WarningMsg guifg=#d7875f guibg=NONE gui=NONE cterm=NONE
-hi Todo guifg=#d7d787 guibg=#1c1c1c gui=reverse cterm=reverse
+hi Error guifg=#af5f5f guibg=#1c1c1c gui=reverse cterm=reverse
+hi ErrorMsg guifg=#af5f5f guibg=#1c1c1c gui=reverse cterm=reverse
+hi ModeMsg guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
+hi MoreMsg guifg=#5faf5f guibg=NONE gui=NONE cterm=NONE
+hi Question guifg=#d7af87 guibg=NONE gui=NONE cterm=NONE
+hi WarningMsg guifg=#d75f87 guibg=NONE gui=NONE cterm=NONE
+hi Todo guifg=#dadada guibg=NONE gui=bold cterm=bold
hi MatchParen guifg=#ff00af guibg=NONE gui=bold cterm=bold
-hi Search guifg=#1c1c1c guibg=#87af87 gui=NONE cterm=NONE
-hi IncSearch guifg=#1c1c1c guibg=#ffaf5f gui=NONE cterm=NONE
-hi CurSearch guifg=#1c1c1c guibg=#afaf87 gui=NONE cterm=NONE
-hi WildMenu guifg=#1c1c1c guibg=#d7d787 gui=NONE cterm=NONE
+hi Search guifg=#5fafd7 guibg=#1c1c1c gui=reverse cterm=reverse
+hi IncSearch guifg=#ffaf5f guibg=#1c1c1c gui=reverse cterm=reverse
+hi CurSearch guifg=#ffaf5f guibg=#1c1c1c gui=reverse cterm=reverse
+hi WildMenu guifg=#1c1c1c guibg=#d7af87 gui=bold cterm=bold
hi debugPC guifg=#1c1c1c guibg=#5f87af gui=NONE cterm=NONE
-hi debugBreakpoint guifg=#1c1c1c guibg=#d7875f gui=NONE cterm=NONE
-hi Cursor guifg=#1c1c1c guibg=#ffaf5f gui=NONE cterm=NONE
+hi debugBreakpoint guifg=#1c1c1c guibg=#d75f87 gui=NONE cterm=NONE
+hi Cursor guifg=#000000 guibg=#dadada gui=NONE cterm=NONE
hi lCursor guifg=#1c1c1c guibg=#5fff00 gui=NONE cterm=NONE
hi CursorLine guifg=NONE guibg=#303030 gui=NONE cterm=NONE
hi CursorColumn guifg=NONE guibg=#303030 gui=NONE cterm=NONE
hi Folded guifg=#9e9e9e guibg=#262626 gui=NONE cterm=NONE
hi ColorColumn guifg=NONE guibg=#3a3a3a gui=NONE cterm=NONE
hi SpellBad guifg=NONE guibg=NONE guisp=#d75f5f gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline
-hi SpellCap guifg=NONE guibg=NONE guisp=#5f87af gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline
-hi SpellLocal guifg=NONE guibg=NONE guisp=#87af87 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline
-hi SpellRare guifg=NONE guibg=NONE guisp=#d7afd7 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline
+hi SpellCap guifg=NONE guibg=NONE guisp=#ffaf5f gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline
+hi SpellLocal guifg=NONE guibg=NONE guisp=#5fd75f gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline
+hi SpellRare guifg=NONE guibg=NONE guisp=#d787d7 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline
hi Comment guifg=#767676 guibg=NONE gui=NONE cterm=NONE
-hi Constant guifg=#d7875f guibg=NONE gui=NONE cterm=NONE
-hi String guifg=#87af87 guibg=NONE gui=NONE cterm=NONE
-hi Character guifg=#afd7af guibg=NONE gui=NONE cterm=NONE
+hi Constant guifg=#d75f87 guibg=NONE gui=NONE cterm=NONE
+hi String guifg=#5faf5f guibg=NONE gui=NONE cterm=NONE
+hi Character guifg=#87d787 guibg=NONE gui=NONE cterm=NONE
hi Identifier guifg=#87afaf guibg=NONE gui=NONE cterm=NONE
hi Statement guifg=#af87af guibg=NONE gui=NONE cterm=NONE
-hi PreProc guifg=#afaf87 guibg=NONE gui=NONE cterm=NONE
-hi Type guifg=#87afd7 guibg=NONE gui=NONE cterm=NONE
+hi PreProc guifg=#af875f guibg=NONE gui=NONE cterm=NONE
+hi Type guifg=#5f87af guibg=NONE gui=NONE cterm=NONE
hi Special guifg=#5f8787 guibg=NONE gui=NONE cterm=NONE
hi Underlined guifg=NONE guibg=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline
-hi Title guifg=#d7d787 guibg=NONE gui=bold cterm=bold
+hi Title guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory guifg=#87afaf guibg=NONE gui=bold cterm=bold
-hi Conceal guifg=#767676 guibg=NONE gui=NONE cterm=NONE
+hi Conceal guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Debug guifg=#5f8787 guibg=NONE gui=NONE cterm=NONE
-hi DiffAdd guifg=#dadada guibg=#5f875f gui=NONE cterm=NONE
-hi DiffDelete guifg=#af875f guibg=NONE gui=NONE cterm=NONE
-hi Added guifg=#87af87 guibg=NONE gui=NONE cterm=NONE
-hi Changed guifg=#5f8787 guibg=NONE gui=NONE cterm=NONE
+hi DiffAdd guifg=#5faf5f guibg=NONE gui=reverse cterm=reverse
+hi DiffChange guifg=#5f87af guibg=NONE gui=reverse cterm=reverse
+hi DiffText guifg=#af87af guibg=NONE gui=reverse cterm=reverse
+hi DiffDelete guifg=#af5f5f guibg=NONE gui=reverse cterm=reverse
+hi Added guifg=#5fd75f guibg=NONE gui=NONE cterm=NONE
+hi Changed guifg=#ffaf5f guibg=NONE gui=NONE cterm=NONE
hi Removed guifg=#d75f5f guibg=NONE gui=NONE cterm=NONE
-hi diffSubname guifg=#af87af guibg=NONE gui=NONE cterm=NONE
-hi DiffText guifg=#dadada guibg=#878787 gui=NONE cterm=NONE
-hi DiffChange guifg=#bcbcbc guibg=#5f5f5f gui=NONE cterm=NONE
if s:t_Co >= 256
hi! link Terminal Normal
hi! link StatuslineTerm Statusline
hi! link StatuslineTermNC StatuslineNC
hi! link MessageWindow Pmenu
- hi! link PopupNotification Todo
hi! link javaScriptFunction Statement
hi! link javaScriptIdentifier Statement
hi! link sqlKeyword Statement
@@ -130,7 +128,6 @@ if s:t_Co >= 256
hi! link vimSep Normal
hi! link vimParenSep Normal
hi! link vimCommentString Comment
- hi! link gitCommitSummary Title
hi! link markdownUrl String
hi Normal ctermfg=250 ctermbg=234 cterm=NONE
hi Statusline ctermfg=234 ctermbg=247 cterm=NONE
@@ -138,11 +135,11 @@ if s:t_Co >= 256
hi VertSplit ctermfg=243 ctermbg=243 cterm=NONE
hi TabLine ctermfg=234 ctermbg=243 cterm=NONE
hi TabLineFill ctermfg=234 ctermbg=243 cterm=NONE
- hi TabLineSel ctermfg=NONE ctermbg=NONE cterm=bold
+ hi TabLineSel ctermfg=234 ctermbg=247 cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton ctermfg=247 ctermbg=234 cterm=bold,reverse
+ hi ToolbarButton ctermfg=243 ctermbg=234 cterm=bold,reverse
hi QuickFixLine ctermfg=234 ctermbg=67 cterm=NONE
- hi CursorLineNr ctermfg=215 ctermbg=NONE cterm=bold
+ hi CursorLineNr ctermfg=253 ctermbg=NONE cterm=bold
hi LineNr ctermfg=240 ctermbg=NONE cterm=NONE
hi LineNrAbove ctermfg=240 ctermbg=NONE cterm=NONE
hi LineNrBelow ctermfg=240 ctermbg=NONE cterm=NONE
@@ -150,62 +147,63 @@ if s:t_Co >= 256
hi EndOfBuffer ctermfg=240 ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=240 ctermbg=NONE cterm=NONE
hi FoldColumn ctermfg=240 ctermbg=NONE cterm=NONE
- hi Visual ctermfg=234 ctermbg=109 cterm=NONE
+ hi Visual ctermfg=109 ctermbg=234 cterm=reverse
hi VisualNOS ctermfg=234 ctermbg=66 cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=237 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=243 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
- hi PmenuSel ctermfg=234 ctermbg=144 cterm=NONE
- hi PmenuKind ctermfg=173 ctermbg=237 cterm=NONE
- hi PmenuKindSel ctermfg=167 ctermbg=144 cterm=NONE
+ hi PmenuSel ctermfg=NONE ctermbg=240 cterm=NONE
+ hi PmenuKind ctermfg=66 ctermbg=237 cterm=NONE
+ hi PmenuKindSel ctermfg=66 ctermbg=240 cterm=NONE
hi PmenuExtra ctermfg=243 ctermbg=237 cterm=NONE
- hi PmenuExtraSel ctermfg=234 ctermbg=144 cterm=NONE
+ hi PmenuExtraSel ctermfg=247 ctermbg=240 cterm=NONE
+ hi PmenuMatch ctermfg=215 ctermbg=237 cterm=NONE
+ hi PmenuMatchSel ctermfg=215 ctermbg=240 cterm=NONE
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Error ctermfg=167 ctermbg=234 cterm=reverse
- hi ErrorMsg ctermfg=167 ctermbg=234 cterm=reverse
- hi ModeMsg ctermfg=234 ctermbg=186 cterm=NONE
- hi MoreMsg ctermfg=108 ctermbg=NONE cterm=NONE
- hi Question ctermfg=144 ctermbg=NONE cterm=NONE
- hi WarningMsg ctermfg=173 ctermbg=NONE cterm=NONE
- hi Todo ctermfg=186 ctermbg=234 cterm=reverse
+ hi Error ctermfg=131 ctermbg=234 cterm=reverse
+ hi ErrorMsg ctermfg=131 ctermbg=234 cterm=reverse
+ hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
+ hi MoreMsg ctermfg=71 ctermbg=NONE cterm=NONE
+ hi Question ctermfg=180 ctermbg=NONE cterm=NONE
+ hi WarningMsg ctermfg=168 ctermbg=NONE cterm=NONE
+ hi Todo ctermfg=253 ctermbg=NONE cterm=bold
hi MatchParen ctermfg=199 ctermbg=NONE cterm=bold
- hi Search ctermfg=234 ctermbg=108 cterm=NONE
- hi IncSearch ctermfg=234 ctermbg=215 cterm=NONE
- hi CurSearch ctermfg=234 ctermbg=144 cterm=NONE
- hi WildMenu ctermfg=234 ctermbg=186 cterm=NONE
+ hi Search ctermfg=74 ctermbg=234 cterm=reverse
+ hi IncSearch ctermfg=215 ctermbg=234 cterm=reverse
+ hi CurSearch ctermfg=215 ctermbg=234 cterm=reverse
+ hi WildMenu ctermfg=234 ctermbg=180 cterm=bold
hi debugPC ctermfg=234 ctermbg=67 cterm=NONE
- hi debugBreakpoint ctermfg=234 ctermbg=173 cterm=NONE
+ hi debugBreakpoint ctermfg=234 ctermbg=168 cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=236 cterm=NONE
hi CursorColumn ctermfg=NONE ctermbg=236 cterm=NONE
hi Folded ctermfg=247 ctermbg=235 cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=237 cterm=NONE
hi SpellBad ctermfg=167 ctermbg=NONE cterm=underline
- hi SpellCap ctermfg=67 ctermbg=NONE cterm=underline
- hi SpellLocal ctermfg=108 ctermbg=NONE cterm=underline
- hi SpellRare ctermfg=182 ctermbg=NONE cterm=underline
+ hi SpellCap ctermfg=215 ctermbg=NONE cterm=underline
+ hi SpellLocal ctermfg=77 ctermbg=NONE cterm=underline
+ hi SpellRare ctermfg=176 ctermbg=NONE cterm=underline
hi Comment ctermfg=243 ctermbg=NONE cterm=NONE
- hi Constant ctermfg=173 ctermbg=NONE cterm=NONE
- hi String ctermfg=108 ctermbg=NONE cterm=NONE
- hi Character ctermfg=151 ctermbg=NONE cterm=NONE
+ hi Constant ctermfg=168 ctermbg=NONE cterm=NONE
+ hi String ctermfg=71 ctermbg=NONE cterm=NONE
+ hi Character ctermfg=114 ctermbg=NONE cterm=NONE
hi Identifier ctermfg=109 ctermbg=NONE cterm=NONE
hi Statement ctermfg=139 ctermbg=NONE cterm=NONE
- hi PreProc ctermfg=144 ctermbg=NONE cterm=NONE
- hi Type ctermfg=110 ctermbg=NONE cterm=NONE
+ hi PreProc ctermfg=137 ctermbg=NONE cterm=NONE
+ hi Type ctermfg=67 ctermbg=NONE cterm=NONE
hi Special ctermfg=66 ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
- hi Title ctermfg=186 ctermbg=NONE cterm=bold
+ hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=109 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=243 ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=240 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Debug ctermfg=66 ctermbg=NONE cterm=NONE
- hi DiffAdd ctermfg=253 ctermbg=65 cterm=NONE
- hi DiffDelete ctermfg=137 ctermbg=NONE cterm=NONE
- hi Added ctermfg=108 ctermbg=NONE cterm=NONE
- hi Changed ctermfg=66 ctermbg=NONE cterm=NONE
+ hi DiffAdd ctermfg=71 ctermbg=NONE cterm=reverse
+ hi DiffChange ctermfg=67 ctermbg=NONE cterm=reverse
+ hi DiffText ctermfg=139 ctermbg=NONE cterm=reverse
+ hi DiffDelete ctermfg=131 ctermbg=NONE cterm=reverse
+ hi Added ctermfg=77 ctermbg=NONE cterm=NONE
+ hi Changed ctermfg=215 ctermbg=NONE cterm=NONE
hi Removed ctermfg=167 ctermbg=NONE cterm=NONE
- hi diffSubname ctermfg=139 ctermbg=NONE cterm=NONE
- hi DiffText ctermfg=253 ctermbg=102 cterm=NONE
- hi DiffChange ctermfg=250 ctermbg=59 cterm=NONE
unlet s:t_Co
finish
endif
@@ -217,11 +215,11 @@ if s:t_Co >= 16
hi VertSplit ctermfg=darkgray ctermbg=darkgray cterm=NONE
hi TabLine ctermfg=black ctermbg=darkgray cterm=NONE
hi TabLineFill ctermfg=black ctermbg=darkgray cterm=NONE
- hi TabLineSel ctermfg=NONE ctermbg=NONE cterm=bold
+ hi TabLineSel ctermfg=black ctermbg=gray cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton ctermfg=gray ctermbg=black cterm=bold,reverse
- hi QuickFixLine ctermfg=black ctermbg=blue cterm=NONE
- hi CursorLineNr ctermfg=red ctermbg=NONE cterm=bold
+ hi ToolbarButton ctermfg=darkgray ctermbg=black cterm=bold,reverse
+ hi QuickFixLine ctermfg=black ctermbg=darkblue cterm=NONE
+ hi CursorLineNr ctermfg=white ctermbg=NONE cterm=bold
hi LineNr ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi LineNrAbove ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi LineNrBelow ctermfg=darkgrey ctermbg=NONE cterm=NONE
@@ -229,7 +227,7 @@ if s:t_Co >= 16
hi EndOfBuffer ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi FoldColumn ctermfg=darkgrey ctermbg=NONE cterm=NONE
- hi Visual ctermfg=black ctermbg=cyan cterm=NONE
+ hi Visual ctermfg=cyan ctermbg=black cterm=reverse
hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE
hi Pmenu ctermfg=black ctermbg=gray cterm=NONE
hi PmenuThumb ctermfg=gray ctermbg=black cterm=NONE
@@ -239,27 +237,29 @@ if s:t_Co >= 16
hi PmenuKindSel ctermfg=darkred ctermbg=darkyellow cterm=NONE
hi PmenuExtra ctermfg=darkgray ctermbg=gray cterm=NONE
hi PmenuExtraSel ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=gray cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=darkred ctermbg=black cterm=reverse
hi ErrorMsg ctermfg=darkred ctermbg=black cterm=reverse
- hi ModeMsg ctermfg=black ctermbg=yellow cterm=NONE
+ hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
hi MoreMsg ctermfg=darkgreen ctermbg=NONE cterm=NONE
- hi Question ctermfg=darkyellow ctermbg=NONE cterm=NONE
+ hi Question ctermfg=yellow ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE
- hi Todo ctermfg=yellow ctermbg=black cterm=reverse
+ hi Todo ctermfg=white ctermbg=NONE cterm=bold
hi MatchParen ctermfg=magenta ctermbg=NONE cterm=bold
- hi Search ctermfg=black ctermbg=darkgreen cterm=NONE
- hi IncSearch ctermfg=black ctermbg=red cterm=NONE
- hi CurSearch ctermfg=black ctermbg=darkyellow cterm=NONE
- hi WildMenu ctermfg=black ctermbg=yellow cterm=NONE
- hi debugPC ctermfg=black ctermbg=blue cterm=NONE
+ hi Search ctermfg=blue ctermbg=black cterm=reverse
+ hi IncSearch ctermfg=red ctermbg=black cterm=reverse
+ hi CurSearch ctermfg=red ctermbg=black cterm=reverse
+ hi WildMenu ctermfg=black ctermbg=yellow cterm=bold
+ hi debugPC ctermfg=black ctermbg=darkblue cterm=NONE
hi debugBreakpoint ctermfg=black ctermbg=red cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi CursorColumn ctermfg=black ctermbg=darkyellow cterm=NONE
hi Folded ctermfg=black ctermbg=darkyellow cterm=NONE
hi ColorColumn ctermfg=black ctermbg=darkyellow cterm=NONE
hi SpellBad ctermfg=darkred ctermbg=NONE cterm=underline
- hi SpellCap ctermfg=blue ctermbg=NONE cterm=underline
+ hi SpellCap ctermfg=darkyellow ctermbg=NONE cterm=underline
hi SpellLocal ctermfg=darkgreen ctermbg=NONE cterm=underline
hi SpellRare ctermfg=magenta ctermbg=NONE cterm=underline
hi Comment ctermfg=darkgray ctermbg=NONE cterm=NONE
@@ -269,22 +269,21 @@ if s:t_Co >= 16
hi Identifier ctermfg=cyan ctermbg=NONE cterm=NONE
hi Statement ctermfg=darkmagenta ctermbg=NONE cterm=NONE
hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
- hi Type ctermfg=blue ctermbg=NONE cterm=NONE
+ hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
hi Special ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
- hi Title ctermfg=yellow ctermbg=NONE cterm=bold
+ hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=cyan ctermbg=NONE cterm=bold
- hi Conceal ctermfg=darkgray ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Debug ctermfg=darkcyan ctermbg=NONE cterm=NONE
- hi DiffAdd ctermfg=white ctermbg=darkgreen cterm=NONE
- hi DiffDelete ctermfg=darkyellow ctermbg=NONE cterm=NONE
+ hi DiffAdd ctermfg=darkgreen ctermbg=NONE cterm=reverse
+ hi DiffChange ctermfg=darkblue ctermbg=NONE cterm=reverse
+ hi DiffText ctermfg=darkmagenta ctermbg=NONE cterm=reverse
+ hi DiffDelete ctermfg=darkred ctermbg=NONE cterm=reverse
hi Added ctermfg=darkgreen ctermbg=NONE cterm=NONE
- hi Changed ctermfg=darkcyan ctermbg=NONE cterm=NONE
+ hi Changed ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Removed ctermfg=darkred ctermbg=NONE cterm=NONE
- hi diffSubname ctermfg=darkmagenta ctermbg=NONE cterm=NONE
- hi DiffText ctermfg=white ctermbg=lightgrey cterm=NONE
- hi DiffChange ctermfg=white ctermbg=darkgray cterm=NONE
unlet s:t_Co
finish
endif
@@ -293,13 +292,13 @@ if s:t_Co >= 8
hi Normal ctermfg=gray ctermbg=black cterm=NONE
hi Statusline ctermfg=gray ctermbg=black cterm=bold,reverse
hi StatuslineNC ctermfg=gray ctermbg=black cterm=reverse
- hi VertSplit ctermfg=gray ctermbg=black cterm=reverse
+ hi VertSplit ctermfg=gray ctermbg=gray cterm=NONE
hi TabLine ctermfg=black ctermbg=gray cterm=NONE
- hi TabLineFill ctermfg=black ctermbg=gray cterm=NONE
- hi TabLineSel ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi TabLineFill ctermfg=gray ctermbg=gray cterm=NONE
+ hi TabLineSel ctermfg=black ctermbg=gray cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton ctermfg=gray ctermbg=black cterm=bold,reverse
- hi QuickFixLine ctermfg=black ctermbg=blue cterm=NONE
+ hi ToolbarButton ctermfg=gray ctermbg=black cterm=reverse
+ hi QuickFixLine ctermfg=black ctermbg=darkblue cterm=NONE
hi CursorLineNr ctermfg=darkyellow ctermbg=NONE cterm=bold
hi LineNr ctermfg=gray ctermbg=NONE cterm=bold
hi LineNrAbove ctermfg=gray ctermbg=NONE cterm=bold
@@ -318,52 +317,53 @@ if s:t_Co >= 8
hi PmenuKindSel ctermfg=darkred ctermbg=darkyellow cterm=NONE
hi PmenuExtra ctermfg=black ctermbg=gray cterm=NONE
hi PmenuExtraSel ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=gray cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=darkred ctermbg=gray cterm=bold,reverse
hi ErrorMsg ctermfg=darkred ctermbg=gray cterm=bold,reverse
- hi ModeMsg ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
hi MoreMsg ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Question ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=darkred ctermbg=NONE cterm=NONE
- hi Todo ctermfg=darkyellow ctermbg=black cterm=reverse
+ hi Todo ctermfg=gray ctermbg=NONE cterm=bold
hi MatchParen ctermfg=magenta ctermbg=NONE cterm=bold
- hi Search ctermfg=black ctermbg=darkgreen cterm=NONE
+ hi Search ctermfg=black ctermbg=darkblue cterm=NONE
hi IncSearch ctermfg=black ctermbg=darkyellow cterm=NONE
hi CurSearch ctermfg=black ctermbg=darkyellow cterm=NONE
hi WildMenu ctermfg=black ctermbg=darkyellow cterm=NONE
- hi debugPC ctermfg=black ctermbg=blue cterm=NONE
+ hi debugPC ctermfg=black ctermbg=darkblue cterm=NONE
hi debugBreakpoint ctermfg=black ctermbg=darkcyan cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi CursorColumn ctermfg=black ctermbg=darkyellow cterm=NONE
hi Folded ctermfg=black ctermbg=darkyellow cterm=NONE
hi ColorColumn ctermfg=black ctermbg=darkyellow cterm=NONE
hi SpellBad ctermfg=darkred ctermbg=gray cterm=reverse
- hi SpellCap ctermfg=blue ctermbg=gray cterm=reverse
+ hi SpellCap ctermfg=darkblue ctermbg=gray cterm=reverse
hi SpellLocal ctermfg=darkgreen ctermbg=black cterm=reverse
hi SpellRare ctermfg=darkmagenta ctermbg=gray cterm=reverse
hi Comment ctermfg=gray ctermbg=NONE cterm=bold
- hi Constant ctermfg=darkgreen ctermbg=NONE cterm=NONE
+ hi Constant ctermfg=darkred ctermbg=NONE cterm=NONE
hi String ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Character ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Identifier ctermfg=gray ctermbg=NONE cterm=NONE
hi Statement ctermfg=darkmagenta ctermbg=NONE cterm=NONE
hi PreProc ctermfg=darkyellow ctermbg=NONE cterm=NONE
- hi Type ctermfg=blue ctermbg=NONE cterm=NONE
+ hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE
hi Special ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
- hi Title ctermfg=darkyellow ctermbg=NONE cterm=bold
+ hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=darkcyan ctermbg=NONE cterm=bold
hi Conceal ctermfg=gray ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Debug ctermfg=darkcyan ctermbg=NONE cterm=NONE
- hi DiffAdd ctermfg=white ctermbg=darkgreen cterm=NONE
- hi DiffDelete ctermfg=darkyellow ctermbg=NONE cterm=NONE
+ hi DiffAdd ctermfg=darkgreen ctermbg=NONE cterm=reverse
+ hi DiffChange ctermfg=darkblue ctermbg=NONE cterm=reverse
+ hi DiffText ctermfg=darkmagenta ctermbg=NONE cterm=reverse
+ hi DiffDelete ctermfg=darkred ctermbg=NONE cterm=reverse
hi Added ctermfg=darkgreen ctermbg=NONE cterm=NONE
- hi Changed ctermfg=darkcyan ctermbg=NONE cterm=NONE
+ hi Changed ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi Removed ctermfg=darkred ctermbg=NONE cterm=NONE
- hi diffSubname ctermfg=darkmagenta ctermbg=NONE cterm=NONE
- hi DiffText ctermfg=white ctermbg=black cterm=bold,reverse
- hi DiffChange ctermfg=black ctermbg=white cterm=NONE
unlet s:t_Co
finish
endif
@@ -437,36 +437,39 @@ if s:t_Co >= 0
endif
" Background: dark
-" Color: color00 #1C1C1C 234 black
+" Color: color00 #1c1c1c 234 black
" Color: color08 #767676 243 darkgray
-" Color: color01 #D75F5F 167 darkred
-" Color: color09 #D7875F 173 red
-" Color: color02 #87AF87 108 darkgreen
-" Color: color10 #AFD7AF 151 green
-" Color: color03 #AFAF87 144 darkyellow
-" Color: color11 #D7D787 186 yellow
-" Color: color04 #5F87AF 67 blue
-" Color: color12 #87AFD7 110 blue
-" Color: color05 #AF87AF 139 darkmagenta
-" Color: color13 #D7AFD7 182 magenta
-" Color: color06 #5F8787 66 darkcyan
-" Color: color14 #87AFAF 109 cyan
-" Color: color07 #9E9E9E 247 gray
-" Color: color15 #BCBCBC 250 white
+" Color: color01 #af5f5f 131 darkred
+" Color: color09 #d75f87 168 red
+" Color: color02 #5faf5f 71 darkgreen
+" Color: color10 #87d787 114 green
+" Color: color03 #af875f 137 darkyellow
+" Color: color11 #d7af87 180 yellow
+" Color: color04 #5f87af 67 darkblue
+" Color: color12 #5fafd7 74 blue
+" Color: color05 #af87af 139 darkmagenta
+" Color: color13 #d787d7 176 magenta
+" Color: color06 #5f8787 66 darkcyan
+" Color: color14 #87afaf 109 cyan
+" Color: color07 #9e9e9e 247 gray
+" Color: color15 #bcbcbc 250 white
" Color: colorLine #303030 236 darkgrey
" Color: colorB #3a3a3a 237 darkgrey
" Color: colorF #262626 235 darkgrey
" Color: colorNonT #585858 240 darkgrey
-" Color: colorC #FFAF5F 215 red
-" Color: colorlC #5FFF00 82 green
-" Color: colorV #1F3F5F 109 cyan
+" Color: colorC #ffaf5f 215 red
+" Color: colorlC #5fff00 82 green
+" Color: colorV #1f3f5f 109 cyan
" Color: colorMP #ff00af 199 magenta
-" Color: diffAdd #5f875f 65 darkgreen
-" Color: diffDelete #af875f 137 darkyellow
-" Color: diffChange #5f5f5f 59 darkgray
-" Color: diffText #878787 102 lightgrey
+" Color: diffAdd #5faf5f 71 darkgreen
+" Color: diffDelete #af5f5f 131 darkred
+" Color: diffChange #5f87af 67 darkblue
+" Color: diffText #af87af 139 darkmagenta
" Color: black #000000 16 black
" Color: white #dadada 253 white
+" Color: Added #5fd75f 77 darkgreen
+" Color: Changed #ffaf5f 215 darkyellow
+" Color: Removed #d75f5f 167 darkred
" Term colors: color00 color01 color02 color03 color04 color05 color06 color07
" Term colors: color08 color09 color10 color11 color12 color13 color14 color15
" vim: et ts=8 sw=2 sts=2
diff --git a/runtime/colors/industry.vim b/runtime/colors/industry.vim
index dd40f34..71ef4ce 100644
--- a/runtime/colors/industry.vim
+++ b/runtime/colors/industry.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Shian Lee.
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:36
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -29,6 +29,8 @@ hi Pmenu guifg=#dadada guibg=#444444 gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#ffff00 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#000000 gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#6c6c6c gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ff00ff guibg=#444444 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff00ff guibg=#ffff00 gui=NONE cterm=NONE
hi TabLine guifg=#dadada guibg=#444444 gui=NONE cterm=NONE
hi TabLineFill guifg=NONE guibg=#6c6c6c gui=NONE cterm=NONE
hi TabLineSel guifg=#ffffff guibg=#000000 gui=bold cterm=bold
@@ -103,6 +105,8 @@ if s:t_Co >= 256
hi PmenuSel ctermfg=16 ctermbg=226 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=16 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=242 cterm=NONE
+ hi PmenuMatch ctermfg=201 ctermbg=238 cterm=NONE
+ hi PmenuMatchSel ctermfg=201 ctermbg=226 cterm=NONE
hi TabLine ctermfg=253 ctermbg=238 cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=242 cterm=NONE
hi TabLineSel ctermfg=231 ctermbg=16 cterm=bold
@@ -180,6 +184,8 @@ if s:t_Co >= 16
hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=grey cterm=NONE
+ hi PmenuMatch ctermfg=white ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=yellow cterm=bold
hi TabLine ctermfg=white ctermbg=darkgrey cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=grey cterm=NONE
hi TabLineSel ctermfg=white ctermbg=black cterm=bold
@@ -257,6 +263,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLine ctermfg=black ctermbg=grey cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=grey cterm=NONE
hi TabLineSel ctermfg=grey ctermbg=black cterm=NONE
diff --git a/runtime/colors/koehler.vim b/runtime/colors/koehler.vim
index 71858f0..f2883fb 100644
--- a/runtime/colors/koehler.vim
+++ b/runtime/colors/koehler.vim
@@ -3,7 +3,7 @@
" Maintainer: original maintainer Ron Aaron <ron@ronware.org>
" Website: https://www.github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:36
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -62,7 +62,7 @@ hi CursorLine guifg=NONE guibg=#555555 gui=NONE cterm=NONE
hi CursorLineNr guifg=#ffff00 guibg=NONE gui=bold cterm=bold
hi Folded guifg=#00cdcd guibg=#666666 gui=NONE cterm=NONE
hi QuickFixLine guifg=#000000 guibg=#ffff00 gui=NONE cterm=NONE
-hi Conceal guifg=#e5e5e5 guibg=#a9a9a9 gui=NONE cterm=NONE
+hi Conceal guifg=#666666 guibg=NONE gui=NONE cterm=NONE
hi Cursor guifg=#000000 guibg=#00ff00 gui=NONE cterm=NONE
hi Directory guifg=#cc8000 guibg=NONE gui=NONE cterm=NONE
hi EndOfBuffer guifg=#cd0000 guibg=NONE gui=bold cterm=bold
@@ -77,6 +77,8 @@ hi Pmenu guifg=#ffffff guibg=#444444 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#00cdcd gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#ffffff gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ff00ff guibg=#444444 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff0000 guibg=#00cdcd gui=NONE cterm=NONE
hi Question guifg=#5c5cff guibg=NONE gui=bold cterm=bold
hi Search guifg=#ffffff guibg=#ff0000 gui=NONE cterm=NONE
hi SignColumn guifg=#00ffff guibg=NONE gui=NONE cterm=NONE
@@ -123,7 +125,7 @@ if s:t_Co >= 256
hi CursorLineNr ctermfg=226 ctermbg=NONE cterm=bold
hi Folded ctermfg=44 ctermbg=59 cterm=NONE
hi QuickFixLine ctermfg=16 ctermbg=226 cterm=NONE
- hi Conceal ctermfg=254 ctermbg=145 cterm=NONE
+ hi Conceal ctermfg=59 ctermbg=NONE cterm=NONE
hi Cursor ctermfg=16 ctermbg=46 cterm=NONE
hi Directory ctermfg=172 ctermbg=NONE cterm=NONE
hi EndOfBuffer ctermfg=160 ctermbg=NONE cterm=bold
@@ -138,6 +140,8 @@ if s:t_Co >= 256
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=16 ctermbg=44 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=231 cterm=NONE
+ hi PmenuMatch ctermfg=201 ctermbg=238 cterm=NONE
+ hi PmenuMatchSel ctermfg=196 ctermbg=44 cterm=NONE
hi Question ctermfg=63 ctermbg=NONE cterm=bold
hi Search ctermfg=231 ctermbg=196 cterm=NONE
hi SignColumn ctermfg=51 ctermbg=NONE cterm=NONE
@@ -187,7 +191,7 @@ if s:t_Co >= 16
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi Folded ctermfg=darkblue ctermbg=NONE cterm=NONE
hi QuickFixLine ctermfg=black ctermbg=yellow cterm=NONE
- hi Conceal ctermfg=grey ctermbg=grey cterm=NONE
+ hi Conceal ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Cursor ctermfg=black ctermbg=green cterm=NONE
hi Directory ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi EndOfBuffer ctermfg=darkred ctermbg=NONE cterm=bold
@@ -202,6 +206,8 @@ if s:t_Co >= 16
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=white cterm=NONE
+ hi PmenuMatch ctermfg=white ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkcyan cterm=bold
hi Question ctermfg=blue ctermbg=NONE cterm=bold
hi Search ctermfg=white ctermbg=red cterm=NONE
hi SignColumn ctermfg=cyan ctermbg=NONE cterm=NONE
@@ -265,6 +271,8 @@ if s:t_Co >= 8
hi PmenuSbar ctermfg=NONE ctermbg=grey cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkcyan cterm=NONE
+ hi PmenuMatch ctermfg=grey ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkcyan cterm=bold
hi Question ctermfg=darkblue ctermbg=NONE cterm=bold
hi Search ctermfg=grey ctermbg=darkred cterm=NONE
hi SignColumn ctermfg=darkcyan ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/lunaperche.vim b/runtime/colors/lunaperche.vim
index 3546710..5ccba2d 100644
--- a/runtime/colors/lunaperche.vim
+++ b/runtime/colors/lunaperche.vim
@@ -4,7 +4,7 @@
" Maintainer: Maxim Kim <habamax@gmail.com>
" Website: https://www.github.com/vim/colorschemes
" License: Vim License (see `:help license`)
-" Last Updated: Mon 08 Jan 2024 09:41:03 AM AEDT
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -120,6 +120,8 @@ if &background ==# 'dark'
hi PmenuKindSel guifg=#ff5f5f guibg=#4e4e4e gui=NONE cterm=NONE
hi PmenuExtra guifg=#767676 guibg=#303030 gui=NONE cterm=NONE
hi PmenuExtraSel guifg=#767676 guibg=#4e4e4e gui=NONE cterm=NONE
+ hi PmenuMatch guifg=#d787d7 guibg=#303030 gui=NONE cterm=NONE
+ hi PmenuMatchSel guifg=#d787d7 guibg=#4e4e4e gui=NONE cterm=NONE
hi SignColumn guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error guifg=#ffffff guibg=#ff5f5f gui=NONE cterm=NONE
hi ErrorMsg guifg=#ffffff guibg=#ff5f5f gui=NONE cterm=NONE
@@ -158,7 +160,7 @@ if &background ==# 'dark'
hi Underlined guifg=NONE guibg=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline
hi Title guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory guifg=#5fafff guibg=NONE gui=bold cterm=bold
- hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd guifg=#c6c6c6 guibg=#875f87 gui=NONE cterm=NONE
hi DiffChange guifg=#c6c6c6 guibg=#5f5f5f gui=NONE cterm=NONE
@@ -211,6 +213,8 @@ else
hi PmenuKindSel guifg=#af0000 guibg=#c6c6c6 gui=NONE cterm=NONE
hi PmenuExtra guifg=#767676 guibg=#e4e4e4 gui=NONE cterm=NONE
hi PmenuExtraSel guifg=#767676 guibg=#c6c6c6 gui=NONE cterm=NONE
+ hi PmenuMatch guifg=#af00af guibg=#e4e4e4 gui=NONE cterm=NONE
+ hi PmenuMatchSel guifg=#af00af guibg=#c6c6c6 gui=NONE cterm=NONE
hi SignColumn guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error guifg=#ffffff guibg=#d70000 gui=NONE cterm=NONE
hi ErrorMsg guifg=#ffffff guibg=#d70000 gui=NONE cterm=NONE
@@ -249,7 +253,7 @@ else
hi Underlined guifg=NONE guibg=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline
hi Title guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory guifg=#005fd7 guibg=NONE gui=bold cterm=bold
- hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal guifg=#9e9e9e guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd guifg=#000000 guibg=#d7afd7 gui=NONE cterm=NONE
hi DiffChange guifg=#000000 guibg=#d0d0d0 gui=NONE cterm=NONE
@@ -381,6 +385,8 @@ if s:t_Co >= 256
hi PmenuKindSel ctermfg=203 ctermbg=239 cterm=NONE
hi PmenuExtra ctermfg=243 ctermbg=236 cterm=NONE
hi PmenuExtraSel ctermfg=243 ctermbg=239 cterm=NONE
+ hi PmenuMatch ctermfg=176 ctermbg=236 cterm=NONE
+ hi PmenuMatchSel ctermfg=176 ctermbg=239 cterm=NONE
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=231 ctermbg=203 cterm=NONE
hi ErrorMsg ctermfg=231 ctermbg=203 cterm=NONE
@@ -417,7 +423,7 @@ if s:t_Co >= 256
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=75 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=240 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=251 ctermbg=96 cterm=NONE
hi DiffChange ctermfg=251 ctermbg=59 cterm=NONE
@@ -467,6 +473,8 @@ if s:t_Co >= 256
hi PmenuKindSel ctermfg=124 ctermbg=251 cterm=NONE
hi PmenuExtra ctermfg=243 ctermbg=254 cterm=NONE
hi PmenuExtraSel ctermfg=243 ctermbg=251 cterm=NONE
+ hi PmenuMatch ctermfg=127 ctermbg=254 cterm=NONE
+ hi PmenuMatchSel ctermfg=127 ctermbg=251 cterm=NONE
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=231 ctermbg=160 cterm=NONE
hi ErrorMsg ctermfg=231 ctermbg=160 cterm=NONE
@@ -503,7 +511,7 @@ if s:t_Co >= 256
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=26 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=247 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=16 ctermbg=182 cterm=NONE
hi DiffChange ctermfg=16 ctermbg=252 cterm=NONE
@@ -559,6 +567,8 @@ if s:t_Co >= 16
hi PmenuKindSel ctermfg=darkred ctermbg=darkcyan cterm=NONE
hi PmenuExtra ctermfg=black ctermbg=grey cterm=NONE
hi PmenuExtraSel ctermfg=black ctermbg=darkcyan cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkcyan cterm=bold
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=white ctermbg=red cterm=NONE
hi ErrorMsg ctermfg=white ctermbg=red cterm=NONE
@@ -594,7 +604,7 @@ if s:t_Co >= 16
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=blue ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=grey ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=white ctermbg=darkmagenta cterm=NONE
hi DiffChange ctermfg=white ctermbg=darkgreen cterm=NONE
@@ -680,7 +690,7 @@ if s:t_Co >= 16
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=darkblue ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=black ctermbg=darkmagenta cterm=NONE
hi DiffChange ctermfg=black ctermbg=lightgray cterm=NONE
@@ -736,6 +746,8 @@ if s:t_Co >= 8
hi PmenuKindSel ctermfg=darkred ctermbg=darkcyan cterm=NONE
hi PmenuExtra ctermfg=black ctermbg=grey cterm=NONE
hi PmenuExtraSel ctermfg=black ctermbg=darkcyan cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkcyan cterm=bold
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=grey ctermbg=darkred cterm=NONE
hi ErrorMsg ctermfg=grey ctermbg=darkred cterm=NONE
diff --git a/runtime/colors/morning.vim b/runtime/colors/morning.vim
index 1644b04..bd62d0c 100644
--- a/runtime/colors/morning.vim
+++ b/runtime/colors/morning.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Bram Moolenaar <Bram@vim.org>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:37
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -42,6 +42,8 @@ hi Pmenu guifg=#000000 guibg=#b2b2b2 gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#ffff00 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#e4e4e4 gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#000000 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#a52a2a guibg=#b2b2b2 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#a52a2a guibg=#ffff00 gui=NONE cterm=NONE
hi TabLine guifg=#000000 guibg=#bcbcbc gui=underline cterm=underline
hi TabLineFill guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel guifg=#000000 guibg=#e4e4e4 gui=bold cterm=bold
@@ -82,7 +84,7 @@ hi Type guifg=#2e8b57 guibg=NONE gui=bold cterm=bold
hi Special guifg=#6a5acd guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Directory guifg=#008787 guibg=NONE gui=bold cterm=bold
-hi Conceal guifg=#0000ff guibg=NONE gui=NONE cterm=NONE
+hi Conceal guifg=#878787 guibg=NONE gui=NONE cterm=NONE
hi Title guifg=#a52a2a guibg=NONE gui=bold cterm=bold
hi DiffAdd guifg=#ffffff guibg=#5f875f gui=NONE cterm=NONE
hi DiffChange guifg=#ffffff guibg=#5f87af gui=NONE cterm=NONE
@@ -114,6 +116,8 @@ if s:t_Co >= 256
hi PmenuSel ctermfg=16 ctermbg=226 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=254 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=16 cterm=NONE
+ hi PmenuMatch ctermfg=124 ctermbg=249 cterm=NONE
+ hi PmenuMatchSel ctermfg=124 ctermbg=226 cterm=NONE
hi TabLine ctermfg=16 ctermbg=250 cterm=underline
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=16 ctermbg=254 cterm=bold
@@ -154,7 +158,7 @@ if s:t_Co >= 256
hi Special ctermfg=62 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Directory ctermfg=30 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=21 ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=102 ctermbg=NONE cterm=NONE
hi Title ctermfg=124 ctermbg=NONE cterm=bold
hi DiffAdd ctermfg=231 ctermbg=65 cterm=NONE
hi DiffChange ctermfg=231 ctermbg=67 cterm=NONE
@@ -179,6 +183,8 @@ if s:t_Co >= 16
hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=grey cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=black cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=white cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=yellow cterm=bold
hi TabLine ctermfg=black ctermbg=white cterm=underline
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=black ctermbg=grey cterm=bold
@@ -219,7 +225,7 @@ if s:t_Co >= 16
hi Special ctermfg=darkblue ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Directory ctermfg=darkcyan ctermbg=NONE cterm=bold
- hi Conceal ctermfg=blue ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=gray ctermbg=NONE cterm=NONE
hi Title ctermfg=darkred ctermbg=NONE cterm=bold
hi DiffAdd ctermfg=white ctermbg=darkgreen cterm=NONE
hi DiffChange ctermfg=white ctermbg=blue cterm=NONE
@@ -244,6 +250,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkgreen cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLine ctermfg=gray ctermbg=black cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=black ctermbg=gray cterm=NONE
diff --git a/runtime/colors/murphy.vim b/runtime/colors/murphy.vim
index a6a08ed..6cdbd6e 100644
--- a/runtime/colors/murphy.vim
+++ b/runtime/colors/murphy.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Ron Aaron <ron@ronware.org>.
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Mon 08 Jan 2024 09:50:15 AM AEDT
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -38,6 +38,8 @@ hi Pmenu guifg=#ffffff guibg=#444444 gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#ffff00 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#303030 gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#bcbcbc gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ff00ff guibg=#444444 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff00ff guibg=#ffff00 gui=NONE cterm=NONE
hi TabLineFill guifg=NONE guibg=#303030 gui=NONE cterm=NONE
hi TabLine guifg=#87ff87 guibg=#444444 gui=NONE cterm=NONE
hi TabLineSel guifg=#ffffff guibg=#000000 gui=NONE cterm=NONE
@@ -111,6 +113,8 @@ if s:t_Co >= 256
hi PmenuSel ctermfg=16 ctermbg=226 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=236 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=250 cterm=NONE
+ hi PmenuMatch ctermfg=201 ctermbg=238 cterm=NONE
+ hi PmenuMatchSel ctermfg=201 ctermbg=226 cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=236 cterm=NONE
hi TabLine ctermfg=120 ctermbg=238 cterm=NONE
hi TabLineSel ctermfg=231 ctermbg=16 cterm=NONE
@@ -176,6 +180,8 @@ if s:t_Co >= 16
hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=grey cterm=NONE
+ hi PmenuMatch ctermfg=white ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=yellow cterm=bold
hi TabLineFill ctermfg=NONE ctermbg=grey cterm=NONE
hi TabLine ctermfg=green ctermbg=darkgrey cterm=NONE
hi TabLineSel ctermfg=white ctermbg=black cterm=NONE
@@ -241,6 +247,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=grey cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLineFill ctermfg=NONE ctermbg=grey cterm=NONE
hi TabLine ctermfg=grey ctermbg=black cterm=reverse
hi TabLineSel ctermfg=grey ctermbg=black cterm=NONE
diff --git a/runtime/colors/pablo.vim b/runtime/colors/pablo.vim
index bd5693e..22bf377 100644
--- a/runtime/colors/pablo.vim
+++ b/runtime/colors/pablo.vim
@@ -3,7 +3,7 @@
" Maintainer: Original maintainerRon Aaron <ron@ronware.org>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:38
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -37,7 +37,7 @@ hi Underlined guifg=#80a0ff guibg=NONE gui=underline cterm=underline
hi Ignore guifg=#000000 guibg=#000000 gui=NONE cterm=NONE
hi Error guifg=#ffffff guibg=#ff0000 gui=NONE cterm=NONE
hi Todo guifg=#000000 guibg=#c0c000 gui=NONE cterm=NONE
-hi Conceal guifg=#e5e5e5 guibg=#a9a9a9 gui=NONE cterm=NONE
+hi Conceal guifg=#666666 guibg=NONE gui=NONE cterm=NONE
hi Cursor guifg=#000000 guibg=#ffffff gui=NONE cterm=NONE
hi lCursor guifg=#000000 guibg=#ffffff gui=NONE cterm=NONE
hi CursorIM guifg=NONE guibg=fg gui=NONE cterm=NONE
@@ -80,6 +80,8 @@ hi TabLineFill guifg=NONE guibg=#000000 gui=reverse cterm=reverse
hi TabLineSel guifg=#ffffff guibg=#000000 gui=bold cterm=bold
hi ToolbarLine guifg=NONE guibg=#000000 gui=NONE cterm=NONE
hi ToolbarButton guifg=#000000 guibg=#e5e5e5 gui=bold cterm=bold
+hi PmenuMatch guifg=#ff00ff guibg=#303030 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff00ff guibg=#e5e5e5 gui=NONE cterm=NONE
hi Pmenu guifg=fg guibg=#303030 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#e5e5e5 gui=NONE cterm=NONE
@@ -110,7 +112,7 @@ if s:t_Co >= 256
hi Ignore ctermfg=16 ctermbg=16 cterm=NONE
hi Error ctermfg=231 ctermbg=196 cterm=NONE
hi Todo ctermfg=16 ctermbg=142 cterm=NONE
- hi Conceal ctermfg=254 ctermbg=248 cterm=NONE
+ hi Conceal ctermfg=241 ctermbg=NONE cterm=NONE
hi Cursor ctermfg=16 ctermbg=231 cterm=NONE
hi lCursor ctermfg=16 ctermbg=231 cterm=NONE
hi CursorIM ctermfg=NONE ctermbg=fg cterm=NONE
@@ -153,6 +155,8 @@ if s:t_Co >= 256
hi TabLineSel ctermfg=231 ctermbg=16 cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=16 cterm=NONE
hi ToolbarButton ctermfg=16 ctermbg=254 cterm=bold
+ hi PmenuMatch ctermfg=201 ctermbg=236 cterm=NONE
+ hi PmenuMatchSel ctermfg=201 ctermbg=254 cterm=NONE
hi Pmenu ctermfg=fg ctermbg=236 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=16 ctermbg=254 cterm=NONE
@@ -178,7 +182,7 @@ if s:t_Co >= 16
hi Ignore ctermfg=black ctermbg=black cterm=NONE
hi Error ctermfg=white ctermbg=red cterm=NONE
hi Todo ctermfg=black ctermbg=darkyellow cterm=NONE
- hi Conceal ctermfg=grey ctermbg=grey cterm=NONE
+ hi Conceal ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Cursor ctermfg=black ctermbg=white cterm=NONE
hi lCursor ctermfg=black ctermbg=white cterm=NONE
hi CursorIM ctermfg=NONE ctermbg=fg cterm=NONE
@@ -221,6 +225,8 @@ if s:t_Co >= 16
hi TabLineSel ctermfg=white ctermbg=black cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
hi ToolbarButton ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatch ctermfg=fg ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=grey cterm=bold
hi Pmenu ctermfg=fg ctermbg=darkgrey cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=black ctermbg=grey cterm=NONE
@@ -245,6 +251,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLine ctermfg=black ctermbg=grey cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=grey cterm=NONE
hi TabLineSel ctermfg=grey ctermbg=black cterm=NONE
diff --git a/runtime/colors/peachpuff.vim b/runtime/colors/peachpuff.vim
index 392945a..bc485c4 100644
--- a/runtime/colors/peachpuff.vim
+++ b/runtime/colors/peachpuff.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:39
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -39,9 +39,11 @@ hi StatusLineTerm guifg=#ffffff guibg=#2e8b57 gui=bold cterm=bold
hi StatusLineTermNC guifg=#ffdab9 guibg=#008b8b gui=bold cterm=bold
hi VertSplit guifg=#ffdab9 guibg=#737373 gui=NONE cterm=NONE
hi Pmenu guifg=#000000 guibg=#ffaf87 gui=NONE cterm=NONE
-hi PmenuSel guifg=#000000 guibg=#f5c195 gui=bold cterm=bold
hi PmenuSbar guifg=NONE guibg=#ffdab9 gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#737373 gui=NONE cterm=NONE
+hi PmenuSel guifg=#000000 guibg=#f5c195 gui=bold cterm=bold
+hi PmenuMatch guifg=#a52a2a guibg=#ffaf87 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#a52a2a guibg=#f5c195 gui=bold cterm=bold
hi TabLine guifg=#ffdab9 guibg=#737373 gui=underline cterm=underline
hi TabLineFill guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel guifg=#000000 guibg=#ffdab9 gui=bold cterm=bold
@@ -81,7 +83,7 @@ hi PreProc guifg=#cd00cd guibg=NONE gui=NONE cterm=NONE
hi Type guifg=#2e8b57 guibg=NONE gui=bold cterm=bold
hi Special guifg=#6a5acd guibg=NONE gui=NONE cterm=NONE
hi Directory guifg=#008b8b guibg=NONE gui=bold cterm=bold
-hi Conceal guifg=#406090 guibg=NONE gui=NONE cterm=NONE
+hi Conceal guifg=#737373 guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title guifg=#cd00cd guibg=NONE gui=bold cterm=bold
hi DiffAdd guifg=#ffffff guibg=#5f875f gui=NONE cterm=NONE
@@ -111,9 +113,11 @@ if s:t_Co >= 256
hi StatusLineTermNC ctermfg=223 ctermbg=30 cterm=bold
hi VertSplit ctermfg=223 ctermbg=243 cterm=NONE
hi Pmenu ctermfg=16 ctermbg=216 cterm=NONE
- hi PmenuSel ctermfg=16 ctermbg=180 cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=223 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=243 cterm=NONE
+ hi PmenuSel ctermfg=16 ctermbg=180 cterm=bold
+ hi PmenuMatch ctermfg=124 ctermbg=216 cterm=NONE
+ hi PmenuMatchSel ctermfg=124 ctermbg=180 cterm=bold
hi TabLine ctermfg=223 ctermbg=243 cterm=underline
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=16 ctermbg=223 cterm=bold
@@ -153,7 +157,7 @@ if s:t_Co >= 256
hi Type ctermfg=29 ctermbg=NONE cterm=bold
hi Special ctermfg=62 ctermbg=NONE cterm=NONE
hi Directory ctermfg=30 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=25 ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=243 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title ctermfg=164 ctermbg=NONE cterm=bold
hi DiffAdd ctermfg=231 ctermbg=65 cterm=NONE
@@ -178,9 +182,11 @@ if s:t_Co >= 16
hi StatusLineTermNC ctermfg=white ctermbg=darkcyan cterm=bold
hi VertSplit ctermfg=white ctermbg=darkgrey cterm=NONE
hi Pmenu ctermfg=black ctermbg=grey cterm=NONE
- hi PmenuSel ctermfg=black ctermbg=yellow cterm=bold
hi PmenuSbar ctermfg=NONE ctermbg=white cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkgrey cterm=NONE
+ hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=yellow cterm=bold
hi TabLine ctermfg=white ctermbg=darkgrey cterm=underline
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=black ctermbg=white cterm=bold
@@ -248,6 +254,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkgreen cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLine ctermfg=gray ctermbg=black cterm=NONE
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=black ctermbg=white cterm=NONE
diff --git a/runtime/colors/quiet.vim b/runtime/colors/quiet.vim
index 1a8603a..83ef067 100644
--- a/runtime/colors/quiet.vim
+++ b/runtime/colors/quiet.vim
@@ -4,7 +4,7 @@
" Maintainer: Maxence Weynans <neutaaaaan@gmail.com>
" Website: https://github.com/vim/colorschemes
" License: Vim License (see `:help license`)`
-" Last Updated: Fri 15 Dec 2023 20:05:39
+" Last Change: 2024 Aug 05
" Generated by Colortemplate v2.2.3
@@ -13,6 +13,9 @@ let g:colors_name = 'quiet'
let s:t_Co = has('gui_running') ? -1 : (&t_Co ?? 0)
+hi! link Added Normal
+hi! link Changed Normal
+hi! link Removed Normal
hi! link Terminal Normal
hi! link StatusLineTerm StatusLine
hi! link StatusLineTermNC StatusLineNC
@@ -74,10 +77,12 @@ if &background ==# 'dark'
hi MoreMsg guifg=#dadada guibg=NONE gui=NONE cterm=NONE
hi NonText guifg=#707070 guibg=NONE gui=NONE cterm=NONE
hi Pmenu guifg=#000000 guibg=#a8a8a8 gui=NONE cterm=NONE
+ hi PmenuMatch guifg=#d7005f guibg=#a8a8a8 gui=NONE cterm=NONE
hi PmenuExtra guifg=#000000 guibg=#a8a8a8 gui=NONE cterm=NONE
hi PmenuKind guifg=#000000 guibg=#a8a8a8 gui=bold cterm=bold
hi PmenuSbar guifg=#707070 guibg=#585858 gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#dadada gui=NONE cterm=NONE
+ hi PmenuMatchSel guifg=#d7005f guibg=#dadada gui=bold cterm=bold
hi PmenuExtraSel guifg=#000000 guibg=#dadada gui=NONE cterm=NONE
hi PmenuKindSel guifg=#000000 guibg=#dadada gui=bold cterm=bold
hi PmenuThumb guifg=#dadada guibg=#dadada gui=NONE cterm=NONE
@@ -144,10 +149,12 @@ else
hi MoreMsg guifg=#000000 guibg=NONE gui=NONE cterm=NONE
hi NonText guifg=#626262 guibg=NONE gui=NONE cterm=NONE
hi Pmenu guifg=#000000 guibg=#a8a8a8 gui=NONE cterm=NONE
+ hi PmenuMatch guifg=#d70000 guibg=#a8a8a8 gui=NONE cterm=NONE
hi PmenuExtra guifg=#000000 guibg=#a8a8a8 gui=NONE cterm=NONE
hi PmenuKind guifg=#000000 guibg=#a8a8a8 gui=bold cterm=bold
hi PmenuSbar guifg=#000000 guibg=#e4e4e4 gui=NONE cterm=NONE
hi PmenuSel guifg=#d7d7d7 guibg=#000000 gui=NONE cterm=NONE
+ hi PmenuMatchSel guifg=#d70000 guibg=#000000 gui=bold cterm=bold
hi PmenuExtraSel guifg=#d7d7d7 guibg=#000000 gui=NONE cterm=NONE
hi PmenuKindSel guifg=#d7d7d7 guibg=#000000 gui=bold cterm=bold
hi PmenuThumb guifg=#000000 guibg=#000000 gui=NONE cterm=NONE
@@ -213,10 +220,12 @@ if s:t_Co >= 256
hi MoreMsg ctermfg=253 ctermbg=NONE cterm=NONE
hi NonText ctermfg=242 ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=16 ctermbg=248 cterm=NONE
+ hi PmenuMatch ctermfg=161 ctermbg=248 cterm=NONE
hi PmenuExtra ctermfg=16 ctermbg=248 cterm=NONE
hi PmenuKind ctermfg=16 ctermbg=248 cterm=bold
hi PmenuSbar ctermfg=242 ctermbg=240 cterm=NONE
hi PmenuSel ctermfg=16 ctermbg=253 cterm=NONE
+ hi PmenuMatchSel ctermfg=161 ctermbg=253 cterm=bold
hi PmenuExtraSel ctermfg=16 ctermbg=253 cterm=NONE
hi PmenuKindSel ctermfg=16 ctermbg=253 cterm=bold
hi PmenuThumb ctermfg=253 ctermbg=253 cterm=NONE
@@ -280,10 +289,12 @@ if s:t_Co >= 256
hi MoreMsg ctermfg=16 ctermbg=NONE cterm=NONE
hi NonText ctermfg=241 ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=16 ctermbg=248 cterm=NONE
+ hi PmenuMatch ctermfg=160 ctermbg=248 cterm=NONE
hi PmenuExtra ctermfg=16 ctermbg=248 cterm=NONE
hi PmenuKind ctermfg=16 ctermbg=248 cterm=bold
hi PmenuSbar ctermfg=16 ctermbg=254 cterm=NONE
hi PmenuSel ctermfg=188 ctermbg=16 cterm=NONE
+ hi PmenuMatchSel ctermfg=160 ctermbg=16 cterm=bold
hi PmenuExtraSel ctermfg=188 ctermbg=16 cterm=NONE
hi PmenuKindSel ctermfg=188 ctermbg=16 cterm=bold
hi PmenuThumb ctermfg=16 ctermbg=16 cterm=NONE
@@ -359,9 +370,11 @@ if s:t_Co >= 16
hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
hi PmenuExtra ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
+ hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
@@ -425,9 +438,11 @@ if s:t_Co >= 16
hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
hi PmenuExtra ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
+ hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
@@ -498,9 +513,11 @@ if s:t_Co >= 8
hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
hi PmenuExtra ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
+ hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
@@ -564,9 +581,11 @@ if s:t_Co >= 8
hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
hi PmenuExtra ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
+ hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/retrobox.vim b/runtime/colors/retrobox.vim
index 46d269f..fb982c2 100644
--- a/runtime/colors/retrobox.vim
+++ b/runtime/colors/retrobox.vim
@@ -4,7 +4,7 @@
" Maintainer: Maxim Kim <habamax@gmail.com>, ported from gruvbox8 of Lifepillar <lifepillar@lifepillar.me>
" Website: https://www.github.com/vim/colorschemes
" License: Vim License (see `:help license`)
-" Last Updated: Fri 15 Dec 2023 20:05:40
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -21,14 +21,15 @@ hi! link Tag Special
hi! link lCursor Cursor
hi! link MessageWindow PMenu
hi! link PopupNotification Todo
-hi! link CurSearch Search
+hi! link CurSearch IncSearch
+hi! link Terminal Normal
if &background ==# 'dark'
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#1c1c1c', '#cc241d', '#98971a', '#d79921', '#458588', '#b16286', '#689d6a', '#a89984', '#928374', '#fb4934', '#b8bb26', '#fabd2f', '#83a598', '#d3869b', '#8ec07c', '#ebdbb2']
endif
hi Normal guifg=#ebdbb2 guibg=#1c1c1c gui=NONE cterm=NONE
- hi CursorLineNr guifg=#fabd2f guibg=#303030 gui=NONE cterm=NONE
+ hi CursorLineNr guifg=#fabd2f guibg=#1c1c1c gui=bold cterm=bold
hi FoldColumn guifg=#928374 guibg=#1c1c1c gui=NONE cterm=NONE
hi SignColumn guifg=#928374 guibg=#1c1c1c gui=NONE cterm=NONE
hi VertSplit guifg=#303030 guibg=#1c1c1c gui=NONE cterm=NONE
@@ -49,6 +50,8 @@ if &background ==# 'dark'
hi PmenuKindSel guifg=#fb4934 guibg=#83a598 gui=NONE cterm=NONE
hi PmenuExtra guifg=#a89984 guibg=#3c3836 gui=NONE cterm=NONE
hi PmenuExtraSel guifg=#303030 guibg=#83a598 gui=NONE cterm=NONE
+ hi PmenuMatch guifg=#b16286 guibg=#3c3836 gui=NONE cterm=NONE
+ hi PmenuMatchSel guifg=#b16286 guibg=#83a598 gui=bold cterm=bold
hi SpecialKey guifg=#928374 guibg=NONE gui=NONE cterm=NONE
hi StatusLine guifg=#504945 guibg=#ebdbb2 gui=bold,reverse cterm=bold,reverse
hi StatusLineNC guifg=#3c3836 guibg=#a89984 gui=reverse cterm=reverse
@@ -60,7 +63,7 @@ if &background ==# 'dark'
hi Visual guifg=#1c1c1c guibg=#83a598 gui=NONE cterm=NONE
hi WildMenu guifg=#83a598 guibg=#504945 gui=bold cterm=bold
hi EndOfBuffer guifg=#504945 guibg=NONE gui=NONE cterm=NONE
- hi Conceal guifg=#83a598 guibg=NONE gui=NONE cterm=NONE
+ hi Conceal guifg=#504945 guibg=NONE gui=NONE cterm=NONE
hi Cursor guifg=#1c1c1c guibg=#fbf1c7 gui=NONE cterm=NONE
hi DiffAdd guifg=#b8bb26 guibg=#1c1c1c gui=reverse cterm=reverse
hi DiffChange guifg=#8ec07c guibg=#1c1c1c gui=reverse cterm=reverse
@@ -119,7 +122,7 @@ else
let g:terminal_ansi_colors = ['#3c3836', '#cc241d', '#98971a', '#d79921', '#458588', '#b16286', '#689d6a', '#7c6f64', '#928374', '#9d0006', '#79740e', '#b57614', '#076678', '#8f3f71', '#427b58', '#fbf1c7']
endif
hi Normal guifg=#3c3836 guibg=#fbf1c7 gui=NONE cterm=NONE
- hi CursorLineNr guifg=#b57614 guibg=#e5d4b1 gui=NONE cterm=NONE
+ hi CursorLineNr guifg=#b57614 guibg=#fbf1c7 gui=bold cterm=bold
hi FoldColumn guifg=#928374 guibg=#fbf1c7 gui=NONE cterm=NONE
hi SignColumn guifg=#3c3836 guibg=#fbf1c7 gui=NONE cterm=NONE
hi VertSplit guifg=#bdae93 guibg=#fbf1c7 gui=NONE cterm=NONE
@@ -140,6 +143,8 @@ else
hi PmenuKindSel guifg=#9d0006 guibg=#076678 gui=NONE cterm=NONE
hi PmenuExtra guifg=#7c6f64 guibg=#e5d4b1 gui=NONE cterm=NONE
hi PmenuExtraSel guifg=#bdae93 guibg=#076678 gui=NONE cterm=NONE
+ hi PmenuMatch guifg=#8f3f71 guibg=#e5d4b1 gui=NONE cterm=NONE
+ hi PmenuMatchSel guifg=#d3869b guibg=#076678 gui=bold cterm=bold
hi SpecialKey guifg=#928374 guibg=NONE gui=NONE cterm=NONE
hi StatusLine guifg=#bdae93 guibg=#3c3836 gui=bold,reverse cterm=bold,reverse
hi StatusLineNC guifg=#ebdbb2 guibg=#3c3836 gui=reverse cterm=reverse
@@ -151,7 +156,7 @@ else
hi Visual guifg=#fbf1c7 guibg=#076678 gui=NONE cterm=NONE
hi WildMenu guifg=#076678 guibg=#e5d4b1 gui=bold cterm=bold
hi EndOfBuffer guifg=#e5d4b1 guibg=NONE gui=NONE cterm=NONE
- hi Conceal guifg=#076678 guibg=NONE gui=NONE cterm=NONE
+ hi Conceal guifg=#a89984 guibg=NONE gui=NONE cterm=NONE
hi Cursor guifg=#fbf1c7 guibg=#282828 gui=NONE cterm=NONE
hi DiffAdd guifg=#79740e guibg=#fbf1c7 gui=reverse cterm=reverse
hi DiffChange guifg=#427b58 guibg=#fbf1c7 gui=reverse cterm=reverse
@@ -209,7 +214,7 @@ endif
if s:t_Co >= 256
if &background ==# 'dark'
hi Normal ctermfg=187 ctermbg=234 cterm=NONE
- hi CursorLineNr ctermfg=214 ctermbg=236 cterm=NONE
+ hi CursorLineNr ctermfg=214 ctermbg=234 cterm=bold
hi FoldColumn ctermfg=102 ctermbg=234 cterm=NONE
hi SignColumn ctermfg=102 ctermbg=234 cterm=NONE
hi VertSplit ctermfg=236 ctermbg=234 cterm=NONE
@@ -230,6 +235,8 @@ if s:t_Co >= 256
hi PmenuKindSel ctermfg=203 ctermbg=109 cterm=NONE
hi PmenuExtra ctermfg=102 ctermbg=237 cterm=NONE
hi PmenuExtraSel ctermfg=236 ctermbg=109 cterm=NONE
+ hi PmenuMatch ctermfg=132 ctermbg=237 cterm=NONE
+ hi PmenuMatchSel ctermfg=132 ctermbg=109 cterm=bold
hi SpecialKey ctermfg=102 ctermbg=NONE cterm=NONE
hi StatusLine ctermfg=239 ctermbg=187 cterm=bold,reverse
hi StatusLineNC ctermfg=237 ctermbg=102 cterm=reverse
@@ -241,7 +248,7 @@ if s:t_Co >= 256
hi Visual ctermfg=234 ctermbg=109 cterm=NONE
hi WildMenu ctermfg=109 ctermbg=239 cterm=bold
hi EndOfBuffer ctermfg=239 ctermbg=NONE cterm=NONE
- hi Conceal ctermfg=109 ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=239 ctermbg=NONE cterm=NONE
hi Cursor ctermfg=234 ctermbg=230 cterm=NONE
hi DiffAdd ctermfg=142 ctermbg=234 cterm=reverse
hi DiffChange ctermfg=107 ctermbg=234 cterm=reverse
@@ -297,7 +304,7 @@ if s:t_Co >= 256
else
" Light background
hi Normal ctermfg=237 ctermbg=230 cterm=NONE
- hi CursorLineNr ctermfg=172 ctermbg=188 cterm=NONE
+ hi CursorLineNr ctermfg=172 ctermbg=230 cterm=bold
hi FoldColumn ctermfg=102 ctermbg=230 cterm=NONE
hi SignColumn ctermfg=237 ctermbg=230 cterm=NONE
hi VertSplit ctermfg=144 ctermbg=230 cterm=NONE
@@ -318,6 +325,8 @@ if s:t_Co >= 256
hi PmenuKindSel ctermfg=124 ctermbg=23 cterm=NONE
hi PmenuExtra ctermfg=243 ctermbg=188 cterm=NONE
hi PmenuExtraSel ctermfg=144 ctermbg=23 cterm=NONE
+ hi PmenuMatch ctermfg=126 ctermbg=188 cterm=NONE
+ hi PmenuMatchSel ctermfg=175 ctermbg=23 cterm=bold
hi SpecialKey ctermfg=102 ctermbg=NONE cterm=NONE
hi StatusLine ctermfg=144 ctermbg=237 cterm=bold,reverse
hi StatusLineNC ctermfg=187 ctermbg=237 cterm=reverse
@@ -329,7 +338,7 @@ if s:t_Co >= 256
hi Visual ctermfg=230 ctermbg=23 cterm=NONE
hi WildMenu ctermfg=23 ctermbg=188 cterm=bold
hi EndOfBuffer ctermfg=188 ctermbg=NONE cterm=NONE
- hi Conceal ctermfg=23 ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=137 ctermbg=NONE cterm=NONE
hi Cursor ctermfg=230 ctermbg=235 cterm=NONE
hi DiffAdd ctermfg=64 ctermbg=230 cterm=reverse
hi DiffChange ctermfg=29 ctermbg=230 cterm=reverse
@@ -409,6 +418,8 @@ if s:t_Co >= 16
hi PmenuKindSel ctermfg=DarkRed ctermbg=Blue cterm=NONE
hi PmenuExtra ctermfg=gray ctermbg=DarkGray cterm=NONE
hi PmenuExtraSel ctermfg=Black ctermbg=Blue cterm=NONE
+ hi PmenuMatch ctermfg=White ctermbg=DarkGray cterm=bold
+ hi PmenuMatchSel ctermfg=Black ctermbg=Blue cterm=bold
hi SignColumn ctermfg=DarkGray ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=DarkGray ctermbg=NONE cterm=NONE
hi StatusLine ctermfg=gray ctermbg=Black cterm=bold,reverse
@@ -422,7 +433,7 @@ if s:t_Co >= 16
hi Visual ctermfg=Black ctermbg=Blue cterm=NONE
hi WildMenu ctermfg=White ctermbg=Black cterm=bold
hi EndOfBuffer ctermfg=DarkGray ctermbg=NONE cterm=NONE
- hi Conceal ctermfg=Blue ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=DarkGray ctermbg=NONE cterm=NONE
hi Cursor ctermfg=Black ctermbg=White cterm=NONE
hi DiffAdd ctermfg=Green ctermbg=Black cterm=reverse
hi DiffChange ctermfg=Cyan ctermbg=Black cterm=reverse
@@ -497,6 +508,8 @@ if s:t_Co >= 16
hi PmenuKindSel ctermfg=DarkRed ctermbg=Blue cterm=NONE
hi PmenuExtra ctermfg=DarkGray ctermbg=Grey cterm=NONE
hi PmenuExtraSel ctermfg=White ctermbg=Blue cterm=NONE
+ hi PmenuMatch ctermfg=Black ctermbg=Grey cterm=bold
+ hi PmenuMatchSel ctermfg=White ctermbg=Blue cterm=bold
hi SignColumn ctermfg=Grey ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=Grey ctermbg=NONE cterm=NONE
hi StatusLine ctermfg=DarkGray ctermbg=White cterm=bold,reverse
@@ -510,7 +523,7 @@ if s:t_Co >= 16
hi Visual ctermfg=White ctermbg=Blue cterm=NONE
hi WildMenu ctermfg=Black ctermbg=White cterm=bold
hi EndOfBuffer ctermfg=Grey ctermbg=NONE cterm=NONE
- hi Conceal ctermfg=Blue ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=Grey ctermbg=NONE cterm=NONE
hi Cursor ctermfg=White ctermbg=DarkGray cterm=NONE
hi DiffAdd ctermfg=Green ctermbg=White cterm=reverse
hi DiffChange ctermfg=Cyan ctermbg=White cterm=reverse
@@ -590,6 +603,8 @@ if s:t_Co >= 8
hi PmenuKindSel ctermfg=Red ctermbg=Blue cterm=NONE
hi PmenuExtra ctermfg=DarkGray ctermbg=White cterm=NONE
hi PmenuExtraSel ctermfg=DarkGray ctermbg=Blue cterm=NONE
+ hi PmenuMatch ctermfg=DarkGray ctermbg=White cterm=bold
+ hi PmenuMatchSel ctermfg=Black ctermbg=Blue cterm=bold
hi SignColumn ctermfg=gray ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=gray ctermbg=NONE cterm=NONE
hi StatusLine ctermfg=gray ctermbg=Black cterm=bold,reverse
@@ -603,7 +618,7 @@ if s:t_Co >= 8
hi Visual ctermfg=Black ctermbg=Blue cterm=NONE
hi WildMenu ctermfg=Blue ctermbg=DarkGray cterm=bold
hi EndOfBuffer ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Conceal ctermfg=Blue ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=DarkGray ctermbg=NONE cterm=NONE
hi Cursor ctermfg=Black ctermbg=White cterm=NONE
hi DiffAdd ctermfg=Green ctermbg=Black cterm=reverse
hi DiffChange ctermfg=Cyan ctermbg=Black cterm=reverse
@@ -678,6 +693,8 @@ if s:t_Co >= 8
hi PmenuKindSel ctermfg=Red ctermbg=Blue cterm=NONE
hi PmenuExtra ctermfg=Grey ctermbg=Black cterm=NONE
hi PmenuExtraSel ctermfg=Grey ctermbg=Blue cterm=NONE
+ hi PmenuMatch ctermfg=Grey ctermbg=Black cterm=bold
+ hi PmenuMatchSel ctermfg=White ctermbg=Blue cterm=bold
hi SignColumn ctermfg=Black ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=Black ctermbg=NONE cterm=NONE
hi StatusLine ctermfg=Black ctermbg=White cterm=bold,reverse
@@ -691,7 +708,7 @@ if s:t_Co >= 8
hi Visual ctermfg=White ctermbg=Blue cterm=NONE
hi WildMenu ctermfg=Blue ctermbg=Grey cterm=bold
hi EndOfBuffer ctermfg=NONE ctermbg=NONE cterm=NONE
- hi Conceal ctermfg=Blue ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=Grey ctermbg=NONE cterm=NONE
hi Cursor ctermfg=White ctermbg=DarkGray cterm=NONE
hi DiffAdd ctermfg=Green ctermbg=White cterm=reverse
hi DiffChange ctermfg=Cyan ctermbg=White cterm=reverse
@@ -852,7 +869,7 @@ endif
" Color: bg1 #ebdbb2 187 Grey
" Color: bg2 #e5d4b1 188 Grey
" Color: bg3 #bdae93 144
-" Color: bg4 #a89984 137
+" Color: bg4 #a89984 137 Grey
" Color: bg5 #ebe1b7 229 Grey
" Color: bg6 #ffffd7 231 Grey
" Color: fg0 #282828 235 DarkGray
@@ -866,6 +883,7 @@ endif
" Color: yellow #b57614 172 Yellow
" Color: blue #076678 23 Blue
" Color: purple #8f3f71 126 Magenta
+" Color: lightpurple #d3869b 175 Magenta
" Color: aqua #427b58 29 Cyan
" Color: orange #ff5f00 202 Magenta
" Term colors: fg1 neutralred neutralgreen neutralyellow neutralblue neutralpurple neutralaqua fg4
diff --git a/runtime/colors/ron.vim b/runtime/colors/ron.vim
index 684b485..4376418 100644
--- a/runtime/colors/ron.vim
+++ b/runtime/colors/ron.vim
@@ -3,7 +3,7 @@
" Maintainer: original maintainer Ron Aaron <ron@ronware.org>
" Website: https://www.github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:41
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -58,7 +58,7 @@ hi CursorColumn guifg=NONE guibg=#666666 gui=NONE cterm=NONE
hi CursorLine guifg=NONE guibg=#666666 gui=NONE cterm=NONE
hi CursorLineNr guifg=#ffff00 guibg=NONE gui=bold cterm=NONE
hi QuickFixLine guifg=#000000 guibg=#00cdcd gui=NONE cterm=NONE
-hi Conceal guifg=#e5e5e5 guibg=#a9a9a9 gui=NONE cterm=NONE
+hi Conceal guifg=#666666 guibg=NONE gui=NONE cterm=NONE
hi Cursor guifg=#ffffff guibg=#60a060 gui=NONE cterm=NONE
hi Directory guifg=#00ffff guibg=NONE gui=NONE cterm=NONE
hi EndOfBuffer guifg=#ffff00 guibg=#303030 gui=NONE cterm=NONE
@@ -75,6 +75,8 @@ hi Pmenu guifg=#ffffff guibg=#444444 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#000000 gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#00cdcd gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#e5e5e5 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ff00ff guibg=#444444 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff00ff guibg=#00cdcd gui=NONE cterm=NONE
hi Question guifg=#00ff00 guibg=#000000 gui=bold cterm=NONE
hi Search guifg=#000000 guibg=#a9a9a9 gui=bold cterm=NONE
hi SignColumn guifg=#00ffff guibg=NONE gui=NONE cterm=NONE
@@ -123,7 +125,7 @@ if s:t_Co >= 256
hi CursorLine ctermfg=NONE ctermbg=59 cterm=NONE
hi CursorLineNr ctermfg=226 ctermbg=NONE cterm=NONE
hi QuickFixLine ctermfg=16 ctermbg=44 cterm=NONE
- hi Conceal ctermfg=254 ctermbg=145 cterm=NONE
+ hi Conceal ctermfg=59 ctermbg=NONE cterm=NONE
hi Cursor ctermfg=231 ctermbg=71 cterm=NONE
hi Directory ctermfg=51 ctermbg=NONE cterm=NONE
hi EndOfBuffer ctermfg=226 ctermbg=236 cterm=NONE
@@ -140,6 +142,8 @@ if s:t_Co >= 256
hi PmenuSbar ctermfg=NONE ctermbg=16 cterm=NONE
hi PmenuSel ctermfg=16 ctermbg=44 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=254 cterm=NONE
+ hi PmenuMatch ctermfg=201 ctermbg=238 cterm=NONE
+ hi PmenuMatchSel ctermfg=201 ctermbg=44 cterm=NONE
hi Question ctermfg=46 ctermbg=16 cterm=NONE
hi Search ctermfg=16 ctermbg=145 cterm=NONE
hi SignColumn ctermfg=51 ctermbg=NONE cterm=NONE
@@ -191,7 +195,7 @@ if s:t_Co >= 16
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi CursorLineNr ctermfg=yellow ctermbg=NONE cterm=underline
hi QuickFixLine ctermfg=black ctermbg=darkcyan cterm=NONE
- hi Conceal ctermfg=grey ctermbg=grey cterm=NONE
+ hi Conceal ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Cursor ctermfg=white ctermbg=green cterm=NONE
hi Directory ctermfg=cyan ctermbg=NONE cterm=NONE
hi EndOfBuffer ctermfg=yellow ctermbg=darkgrey cterm=NONE
@@ -208,6 +212,8 @@ if s:t_Co >= 16
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=grey cterm=NONE
+ hi PmenuMatch ctermfg=white ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkcyan cterm=bold
hi Question ctermfg=green ctermbg=black cterm=NONE
hi Search ctermfg=black ctermbg=grey cterm=NONE
hi SignColumn ctermfg=cyan ctermbg=NONE cterm=NONE
@@ -275,6 +281,8 @@ if s:t_Co >= 8
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkcyan cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=grey cterm=NONE
+ hi PmenuMatch ctermfg=grey ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkcyan cterm=bold
hi Question ctermfg=darkgreen ctermbg=black cterm=bold
hi Search ctermfg=black ctermbg=grey cterm=NONE
hi SignColumn ctermfg=darkcyan ctermbg=NONE cterm=NONE
diff --git a/runtime/colors/shine.vim b/runtime/colors/shine.vim
index ec7da8c..58e7378 100644
--- a/runtime/colors/shine.vim
+++ b/runtime/colors/shine.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer is Yasuhiro Matsumoto <mattn@mail.goo.ne.jp>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:41
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -45,6 +45,8 @@ hi Pmenu guifg=#000000 guibg=#a8a8a8 gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#ffff60 gui=NONE cterm=NONE
hi PmenuSbar guifg=#ffffff guibg=#ffffff gui=NONE cterm=NONE
hi PmenuThumb guifg=#767676 guibg=#767676 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#ff0000 guibg=#a8a8a8 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff0000 guibg=#ffff60 gui=NONE cterm=NONE
hi TabLine guifg=#000000 guibg=#dadada gui=underline cterm=underline
hi TabLineFill guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel guifg=#000000 guibg=#ffffff gui=bold cterm=bold
@@ -79,7 +81,7 @@ hi Statement guifg=#2e8b57 guibg=NONE gui=bold cterm=bold
hi Type guifg=#2e8b57 guibg=NONE gui=bold cterm=bold
hi Comment guifg=#a8a8a8 guibg=NONE gui=bold cterm=NONE
hi StorageClass guifg=#ff0000 guibg=NONE gui=bold cterm=bold
-hi Conceal guifg=#dadada guibg=#767676 gui=NONE cterm=NONE
+hi Conceal guifg=#add8e6 guibg=NONE gui=NONE cterm=NONE
hi Identifier guifg=#008b8b guibg=NONE gui=NONE cterm=NONE
hi Constant guifg=#a07070 guibg=NONE gui=NONE cterm=NONE
hi Number guifg=#a07070 guibg=NONE gui=bold cterm=bold
@@ -123,6 +125,8 @@ if s:t_Co >= 256
hi PmenuSel ctermfg=16 ctermbg=228 cterm=NONE
hi PmenuSbar ctermfg=231 ctermbg=231 cterm=NONE
hi PmenuThumb ctermfg=243 ctermbg=243 cterm=NONE
+ hi PmenuMatch ctermfg=196 ctermbg=248 cterm=NONE
+ hi PmenuMatchSel ctermfg=196 ctermbg=228 cterm=NONE
hi TabLine ctermfg=16 ctermbg=253 cterm=underline
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=16 ctermbg=231 cterm=bold
@@ -157,7 +161,7 @@ if s:t_Co >= 256
hi Type ctermfg=29 ctermbg=NONE cterm=bold
hi Comment ctermfg=248 ctermbg=NONE cterm=NONE
hi StorageClass ctermfg=196 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=253 ctermbg=243 cterm=NONE
+ hi Conceal ctermfg=153 ctermbg=NONE cterm=NONE
hi Identifier ctermfg=30 ctermbg=NONE cterm=NONE
hi Constant ctermfg=95 ctermbg=NONE cterm=NONE
hi Number ctermfg=95 ctermbg=NONE cterm=bold
@@ -192,6 +196,8 @@ if s:t_Co >= 16
hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE
hi PmenuSbar ctermfg=white ctermbg=white cterm=NONE
hi PmenuThumb ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=yellow cterm=bold
hi TabLine ctermfg=black ctermbg=grey cterm=underline
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=black ctermbg=white cterm=bold
@@ -226,7 +232,7 @@ if s:t_Co >= 16
hi Type ctermfg=darkgreen ctermbg=NONE cterm=bold
hi Comment ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi StorageClass ctermfg=red ctermbg=NONE cterm=bold
- hi Conceal ctermfg=grey ctermbg=darkgrey cterm=NONE
+ hi Conceal ctermfg=blue ctermbg=NONE cterm=NONE
hi Identifier ctermfg=darkcyan ctermbg=NONE cterm=NONE
hi Constant ctermfg=darkred ctermbg=NONE cterm=NONE
hi Number ctermfg=darkred ctermbg=NONE cterm=bold
@@ -261,6 +267,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=grey ctermbg=grey cterm=NONE
hi PmenuThumb ctermfg=black ctermbg=black cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLine ctermfg=black ctermbg=grey cterm=reverse
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=grey ctermbg=black cterm=reverse
diff --git a/runtime/colors/slate.vim b/runtime/colors/slate.vim
index d58d078..b63a5fb 100644
--- a/runtime/colors/slate.vim
+++ b/runtime/colors/slate.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Ralph Amissah <ralph@amissah.com>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:41
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -33,10 +33,12 @@ hi StatusLineNC guifg=#666666 guibg=#afaf87 gui=NONE cterm=NONE
hi StatusLineTerm guifg=#000000 guibg=#afaf87 gui=NONE cterm=NONE
hi StatusLineTermNC guifg=#666666 guibg=#afaf87 gui=NONE cterm=NONE
hi VertSplit guifg=#666666 guibg=#afaf87 gui=NONE cterm=NONE
-hi PmenuSel guifg=#262626 guibg=#d7d787 gui=NONE cterm=NONE
hi Pmenu guifg=NONE guibg=#4a4a4a gui=NONE cterm=NONE
+hi PmenuSel guifg=#262626 guibg=#d7d787 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#262626 gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#ffd700 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#d7875f guibg=#4a4a4a gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#d7875f guibg=#d7d787 gui=NONE cterm=NONE
hi TabLineSel guifg=#000000 guibg=#afaf87 gui=NONE cterm=NONE
hi TabLine guifg=#666666 guibg=#333333 gui=NONE cterm=NONE
hi TabLineFill guifg=#ff8787 guibg=#333333 gui=NONE cterm=NONE
@@ -110,10 +112,12 @@ if s:t_Co >= 256
hi StatusLineTerm ctermfg=16 ctermbg=144 cterm=NONE
hi StatusLineTermNC ctermfg=241 ctermbg=144 cterm=NONE
hi VertSplit ctermfg=241 ctermbg=144 cterm=NONE
- hi PmenuSel ctermfg=235 ctermbg=186 cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=239 cterm=NONE
+ hi PmenuSel ctermfg=235 ctermbg=186 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=235 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=220 cterm=NONE
+ hi PmenuMatch ctermfg=173 ctermbg=239 cterm=NONE
+ hi PmenuMatchSel ctermfg=173 ctermbg=186 cterm=NONE
hi TabLineSel ctermfg=16 ctermbg=144 cterm=NONE
hi TabLine ctermfg=241 ctermbg=236 cterm=NONE
hi TabLineFill ctermfg=210 ctermbg=236 cterm=NONE
@@ -180,10 +184,12 @@ if s:t_Co >= 16
hi StatusLineTerm ctermfg=white ctermbg=black cterm=bold,reverse
hi StatusLineTermNC ctermfg=black ctermbg=grey cterm=NONE
hi VertSplit ctermfg=darkgrey ctermbg=grey cterm=NONE
- hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=darkgrey cterm=NONE
+ hi PmenuSel ctermfg=black ctermbg=darkmagenta cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=yellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkmagenta cterm=bold
hi TabLineSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi TabLine ctermfg=grey ctermbg=darkgrey cterm=NONE
hi TabLineFill ctermfg=cyan ctermbg=darkgrey cterm=NONE
@@ -250,10 +256,12 @@ if s:t_Co >= 8
hi StatusLineTerm ctermfg=grey ctermbg=black cterm=bold,reverse
hi StatusLineTermNC ctermfg=grey ctermbg=black cterm=reverse
hi VertSplit ctermfg=grey ctermbg=black cterm=reverse
- hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi Pmenu ctermfg=black ctermbg=darkcyan cterm=NONE
+ hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLineSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi TabLine ctermfg=grey ctermbg=black cterm=reverse
hi TabLineFill ctermfg=grey ctermbg=black cterm=reverse
diff --git a/runtime/colors/sorbet.vim b/runtime/colors/sorbet.vim
index a762dfb..eca239e 100644
--- a/runtime/colors/sorbet.vim
+++ b/runtime/colors/sorbet.vim
@@ -4,7 +4,7 @@
" Maintainer: Maxence Weynans <neutaaaaan@gmail.com>
" Website: https://github.com/vim/colorschemes
" License: Vim License (see `:help license`)`
-" Last Updated: Fri 15 Dec 2023 20:05:42
+" Last Change: 2024 Aug 05
" Generated by Colortemplate v2.2.3
@@ -51,6 +51,9 @@ if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#000000', '#d75f5f', '#87d75f', '#d7af5f', '#87afd7', '#af87d7', '#5fafaf', '#dadada', '#707070', '#ff5f5f', '#87ff5f', '#ffd75f', '#87d7ff', '#d787ff', '#5fd7d7', '#ffffff']
endif
hi Normal guifg=#dadada guibg=#161821 gui=NONE cterm=NONE
+hi Added guifg=#87d75f guibg=NONE gui=NONE cterm=NONE
+hi Changed guifg=#87afd7 guibg=NONE gui=NONE cterm=NONE
+hi Removed guifg=#d75f5f guibg=NONE gui=NONE cterm=NONE
hi ColorColumn guifg=NONE guibg=#262831 gui=NONE cterm=NONE
hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi CurSearch guifg=#ff5fff guibg=#000000 gui=reverse cterm=reverse
@@ -73,10 +76,12 @@ hi ModeMsg guifg=#dadada guibg=NONE gui=bold cterm=bold
hi MoreMsg guifg=#dadada guibg=NONE gui=NONE cterm=NONE
hi NonText guifg=#707070 guibg=NONE gui=NONE cterm=NONE
hi Pmenu guifg=#000000 guibg=#a6a8b1 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#d7005f guibg=#a6a8b1 gui=NONE cterm=NONE
hi PmenuExtra guifg=#000000 guibg=#a6a8b1 gui=NONE cterm=NONE
hi PmenuKind guifg=#000000 guibg=#a6a8b1 gui=bold cterm=bold
hi PmenuSbar guifg=#707070 guibg=#5f5f87 gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#d7d7ff gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#d7005f guibg=#d7d7ff gui=bold cterm=bold
hi PmenuExtraSel guifg=#000000 guibg=#d7d7ff gui=NONE cterm=NONE
hi PmenuKindSel guifg=#000000 guibg=#d7d7ff gui=bold cterm=bold
hi PmenuThumb guifg=#dadada guibg=#d7d7ff gui=NONE cterm=NONE
@@ -115,11 +120,13 @@ hi Underlined guifg=#dadada guibg=NONE gui=underline cterm=underline
hi CursorIM guifg=#000000 guibg=#afff00 gui=NONE cterm=NONE
hi ToolbarLine guifg=NONE guibg=#000000 gui=NONE cterm=NONE
hi ToolbarButton guifg=#dadada guibg=#000000 gui=bold cterm=bold
-hi DiffRemoved guifg=#d75f5f guibg=NONE gui=NONE cterm=NONE
hi debugBreakpoint guifg=#8787af guibg=#000000 gui=bold,reverse cterm=bold,reverse
if s:t_Co >= 256
hi Normal ctermfg=253 ctermbg=233 cterm=NONE
+ hi Added ctermfg=113 ctermbg=NONE cterm=NONE
+ hi Changed ctermfg=110 ctermbg=NONE cterm=NONE
+ hi Removed ctermfg=167 ctermbg=NONE cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=235 cterm=NONE
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi CurSearch ctermfg=207 ctermbg=16 cterm=reverse
@@ -142,10 +149,12 @@ if s:t_Co >= 256
hi MoreMsg ctermfg=253 ctermbg=NONE cterm=NONE
hi NonText ctermfg=242 ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=16 ctermbg=248 cterm=NONE
+ hi PmenuMatch ctermfg=161 ctermbg=248 cterm=NONE
hi PmenuExtra ctermfg=16 ctermbg=248 cterm=NONE
hi PmenuKind ctermfg=16 ctermbg=248 cterm=bold
hi PmenuSbar ctermfg=242 ctermbg=60 cterm=NONE
hi PmenuSel ctermfg=16 ctermbg=189 cterm=NONE
+ hi PmenuMatchSel ctermfg=161 ctermbg=189 cterm=bold
hi PmenuExtraSel ctermfg=16 ctermbg=189 cterm=NONE
hi PmenuKindSel ctermfg=16 ctermbg=189 cterm=bold
hi PmenuThumb ctermfg=253 ctermbg=189 cterm=NONE
@@ -184,7 +193,6 @@ if s:t_Co >= 256
hi CursorIM ctermfg=16 ctermbg=154 cterm=NONE
hi ToolbarLine ctermfg=NONE ctermbg=16 cterm=NONE
hi ToolbarButton ctermfg=253 ctermbg=16 cterm=bold
- hi DiffRemoved ctermfg=167 ctermbg=NONE cterm=NONE
hi debugBreakpoint ctermfg=103 ctermbg=16 cterm=bold,reverse
unlet s:t_Co
finish
@@ -204,6 +212,9 @@ if s:t_Co >= 16
hi TabLine ctermfg=darkgrey ctermbg=NONE cterm=reverse
hi VertSplit ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Normal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Added ctermfg=darkgreen ctermbg=NONE cterm=NONE
+ hi Changed ctermfg=darkblue ctermbg=NONE cterm=NONE
+ hi Removed ctermfg=darkred ctermbg=NONE cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=NONE cterm=reverse
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Cursor ctermfg=NONE ctermbg=NONE cterm=reverse
@@ -220,9 +231,11 @@ if s:t_Co >= 16
hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
hi PmenuExtra ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
+ hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
@@ -256,7 +269,6 @@ if s:t_Co >= 16
hi CursorIM ctermfg=NONE ctermbg=NONE cterm=NONE
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=reverse
hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=bold,reverse
- hi DiffRemoved ctermfg=darkred ctermbg=NONE cterm=NONE
hi debugBreakpoint ctermfg=NONE ctermbg=NONE cterm=bold,reverse
unlet s:t_Co
finish
@@ -276,6 +288,9 @@ if s:t_Co >= 8
hi TabLine ctermfg=NONE ctermbg=NONE cterm=bold,underline
hi VertSplit ctermfg=NONE ctermbg=NONE cterm=NONE
hi Normal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Added ctermfg=darkgreen ctermbg=NONE cterm=NONE
+ hi Changed ctermfg=darkblue ctermbg=NONE cterm=NONE
+ hi Removed ctermfg=darkred ctermbg=NONE cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=NONE cterm=reverse
hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Cursor ctermfg=NONE ctermbg=NONE cterm=reverse
@@ -292,9 +307,11 @@ if s:t_Co >= 8
hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=bold
hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=NONE ctermbg=NONE cterm=reverse
+ hi PmenuMatch ctermfg=NONE ctermbg=darkred cterm=reverse
hi PmenuExtra ctermfg=NONE ctermbg=NONE cterm=reverse
hi PmenuKind ctermfg=NONE ctermbg=NONE cterm=bold,reverse
hi PmenuSel ctermfg=NONE ctermbg=NONE cterm=bold
+ hi PmenuMatchSel ctermfg=darkred ctermbg=NONE cterm=bold
hi PmenuExtraSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuKindSel ctermfg=NONE ctermbg=NONE cterm=bold
hi PmenuThumb ctermfg=NONE ctermbg=NONE cterm=NONE
@@ -328,7 +345,6 @@ if s:t_Co >= 8
hi CursorIM ctermfg=NONE ctermbg=NONE cterm=NONE
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=reverse
hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=bold,reverse
- hi DiffRemoved ctermfg=darkred ctermbg=NONE cterm=NONE
hi debugBreakpoint ctermfg=NONE ctermbg=NONE cterm=bold,reverse
unlet s:t_Co
finish
diff --git a/runtime/colors/torte.vim b/runtime/colors/torte.vim
index 2ad17b0..516f916 100644
--- a/runtime/colors/torte.vim
+++ b/runtime/colors/torte.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Thorsten Maerz <info@netztorte.de>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:42
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -48,7 +48,7 @@ hi CursorLineNr guifg=#ffff00 guibg=#666666 gui=NONE cterm=NONE
hi SignColumn guifg=#00ffff guibg=NONE gui=NONE cterm=NONE
hi FoldColumn guifg=#00ffff guibg=NONE gui=NONE cterm=NONE
hi ColorColumn guifg=#cccccc guibg=#8b0000 gui=NONE cterm=NONE
-hi Conceal guifg=#e5e5e5 guibg=#a9a9a9 gui=NONE cterm=NONE
+hi Conceal guifg=#666666 guibg=NONE gui=NONE cterm=NONE
hi Cursor guifg=#000000 guibg=#00ff00 gui=bold cterm=NONE
hi lCursor guifg=#000000 guibg=#e5e5e5 gui=NONE cterm=NONE
hi CursorIM guifg=NONE guibg=fg gui=NONE cterm=NONE
@@ -81,6 +81,8 @@ hi TabLineFill guifg=NONE guibg=#000000 gui=reverse cterm=reverse
hi TabLineSel guifg=#cccccc guibg=#000000 gui=bold cterm=bold
hi ToolbarLine guifg=NONE guibg=#000000 gui=NONE cterm=NONE
hi ToolbarButton guifg=#000000 guibg=#e5e5e5 gui=bold cterm=bold
+hi PmenuMatch guifg=#ff00ff guibg=#303030 gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#ff00ff guibg=#ffff00 gui=NONE cterm=NONE
hi Pmenu guifg=fg guibg=#303030 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#ffff00 gui=NONE cterm=NONE
@@ -121,7 +123,7 @@ if s:t_Co >= 256
hi SignColumn ctermfg=51 ctermbg=NONE cterm=NONE
hi FoldColumn ctermfg=51 ctermbg=NONE cterm=NONE
hi ColorColumn ctermfg=251 ctermbg=88 cterm=NONE
- hi Conceal ctermfg=254 ctermbg=248 cterm=NONE
+ hi Conceal ctermfg=242 ctermbg=NONE cterm=NONE
hi Cursor ctermfg=16 ctermbg=46 cterm=NONE
hi lCursor ctermfg=16 ctermbg=254 cterm=NONE
hi CursorIM ctermfg=NONE ctermbg=fg cterm=NONE
@@ -154,6 +156,8 @@ if s:t_Co >= 256
hi TabLineSel ctermfg=251 ctermbg=16 cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=16 cterm=NONE
hi ToolbarButton ctermfg=16 ctermbg=254 cterm=bold
+ hi PmenuMatch ctermfg=201 ctermbg=236 cterm=NONE
+ hi PmenuMatchSel ctermfg=201 ctermbg=226 cterm=NONE
hi Pmenu ctermfg=fg ctermbg=236 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=16 ctermbg=226 cterm=NONE
@@ -187,7 +191,7 @@ if s:t_Co >= 16
hi SignColumn ctermfg=cyan ctermbg=NONE cterm=NONE
hi FoldColumn ctermfg=cyan ctermbg=NONE cterm=NONE
hi ColorColumn ctermfg=white ctermbg=darkred cterm=NONE
- hi Conceal ctermfg=grey ctermbg=grey cterm=NONE
+ hi Conceal ctermfg=grey ctermbg=NONE cterm=NONE
hi Cursor ctermfg=black ctermbg=green cterm=NONE
hi lCursor ctermfg=black ctermbg=grey cterm=NONE
hi CursorIM ctermfg=NONE ctermbg=fg cterm=NONE
@@ -220,6 +224,8 @@ if s:t_Co >= 16
hi TabLineSel ctermfg=white ctermbg=black cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=black cterm=NONE
hi ToolbarButton ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatch ctermfg=fg ctermbg=darkgrey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=yellow cterm=bold
hi Pmenu ctermfg=fg ctermbg=darkgrey cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE
@@ -287,6 +293,8 @@ if s:t_Co >= 8
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkmagenta cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi DiffAdd ctermfg=white ctermbg=darkgreen cterm=NONE
hi DiffChange ctermfg=white ctermbg=darkblue cterm=NONE
hi DiffText ctermfg=black ctermbg=grey cterm=NONE
diff --git a/runtime/colors/wildcharm.vim b/runtime/colors/wildcharm.vim
index ee1f376..15f3eda 100644
--- a/runtime/colors/wildcharm.vim
+++ b/runtime/colors/wildcharm.vim
@@ -4,7 +4,7 @@
" Maintainer: Maxim Kim <habamax@gmail.com>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Mon 08 Jan 2024 09:40:36 AM AEDT
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -26,14 +26,14 @@ if &background ==# 'dark'
let g:terminal_ansi_colors = ['#000000', '#d7005f', '#00af5f', '#d78700', '#0087d7', '#d787d7', '#00afaf', '#d0d0d0', '#767676', '#ff5f87', '#00d75f', '#ffaf00', '#00afff', '#ff87ff', '#00d7d7', '#ffffff']
endif
hi Normal guifg=#d0d0d0 guibg=#000000 gui=NONE cterm=NONE
- hi Statusline guifg=#d0d0d0 guibg=#000000 gui=reverse cterm=reverse
+ hi Statusline guifg=#9e9e9e guibg=#000000 gui=bold,reverse cterm=bold,reverse
hi StatuslineNC guifg=#767676 guibg=#000000 gui=reverse cterm=reverse
- hi VertSplit guifg=#767676 guibg=#767676 gui=NONE cterm=NONE
- hi TabLine guifg=#000000 guibg=#d0d0d0 gui=NONE cterm=NONE
- hi TabLineFill guifg=NONE guibg=#767676 gui=NONE cterm=NONE
- hi TabLineSel guifg=#ffffff guibg=#000000 gui=NONE cterm=NONE
+ hi VertSplit guifg=#767676 guibg=NONE gui=NONE cterm=NONE
+ hi TabLine guifg=#000000 guibg=#767676 gui=NONE cterm=NONE
+ hi TabLineFill guifg=NONE guibg=#000000 gui=NONE cterm=NONE
+ hi TabLineSel guifg=#000000 guibg=#9e9e9e gui=bold cterm=bold
hi ToolbarLine guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton guifg=#000000 guibg=#ffffff gui=NONE cterm=NONE
+ hi ToolbarButton guifg=#000000 guibg=#d0d0d0 gui=NONE cterm=NONE
hi QuickFixLine guifg=#000000 guibg=#ff87ff gui=NONE cterm=NONE
hi CursorLineNr guifg=#ffffff guibg=NONE gui=bold cterm=bold
hi LineNr guifg=#585858 guibg=NONE gui=NONE cterm=NONE
@@ -43,13 +43,15 @@ if &background ==# 'dark'
hi EndOfBuffer guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi EndOfBuffer guifg=#767676 guibg=NONE gui=NONE cterm=NONE
hi Pmenu guifg=#d0d0d0 guibg=#303030 gui=NONE cterm=NONE
- hi PmenuSel guifg=#000000 guibg=#ffaf00 gui=NONE cterm=NONE
+ hi PmenuSel guifg=#d0d0d0 guibg=#585858 gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#d0d0d0 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuKind guifg=#ff5f87 guibg=#303030 gui=NONE cterm=NONE
- hi PmenuKindSel guifg=#d7005f guibg=#ffaf00 gui=NONE cterm=NONE
+ hi PmenuKindSel guifg=#ff5f87 guibg=#585858 gui=NONE cterm=NONE
hi PmenuExtra guifg=#767676 guibg=#303030 gui=NONE cterm=NONE
- hi PmenuExtraSel guifg=#000000 guibg=#ffaf00 gui=NONE cterm=NONE
+ hi PmenuExtraSel guifg=#767676 guibg=#585858 gui=NONE cterm=NONE
+ hi PmenuMatch guifg=#d787d7 guibg=#303030 gui=NONE cterm=NONE
+ hi PmenuMatchSel guifg=#d787d7 guibg=#585858 gui=NONE cterm=NONE
hi SignColumn guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error guifg=#d7005f guibg=#ffffff gui=reverse cterm=reverse
hi ErrorMsg guifg=#d7005f guibg=#ffffff gui=reverse cterm=reverse
@@ -65,7 +67,7 @@ if &background ==# 'dark'
hi debugBreakpoint guifg=#00afaf guibg=NONE gui=reverse cterm=reverse
hi Cursor guifg=#000000 guibg=#ffffff gui=NONE cterm=NONE
hi lCursor guifg=#000000 guibg=#ff5fff gui=NONE cterm=NONE
- hi Visual guifg=#0087d7 guibg=#000000 gui=reverse cterm=reverse
+ hi Visual guifg=#5fd7ff guibg=#000000 gui=reverse cterm=reverse
hi VisualNOS guifg=#000000 guibg=#00afff gui=NONE cterm=NONE
hi CursorLine guifg=NONE guibg=#262626 gui=NONE cterm=NONE
hi CursorColumn guifg=NONE guibg=#262626 gui=NONE cterm=NONE
@@ -87,7 +89,7 @@ if &background ==# 'dark'
hi Underlined guifg=NONE guibg=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline
hi Title guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory guifg=#00afff guibg=NONE gui=bold cterm=bold
- hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal guifg=#585858 guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd guifg=#afffaf guibg=#5f875f gui=NONE cterm=NONE
hi DiffChange guifg=#d0d0d0 guibg=#5f5f5f gui=NONE cterm=NONE
@@ -102,14 +104,14 @@ else
let g:terminal_ansi_colors = ['#000000', '#af0000', '#008700', '#af5f00', '#005faf', '#870087', '#008787', '#8a8a8a', '#808080', '#d70000', '#5faf5f', '#d78700', '#0087d7', '#af00af', '#00afaf', '#ffffff']
endif
hi Normal guifg=#000000 guibg=#ffffff gui=NONE cterm=NONE
- hi Statusline guifg=#ffffff guibg=#5f5f5f gui=NONE cterm=NONE
+ hi Statusline guifg=#ffffff guibg=#5f5f5f gui=bold cterm=bold
hi StatuslineNC guifg=#000000 guibg=#d0d0d0 gui=NONE cterm=NONE
- hi VertSplit guifg=#d0d0d0 guibg=#d0d0d0 gui=NONE cterm=NONE
+ hi VertSplit guifg=#5f5f5f guibg=NONE gui=NONE cterm=NONE
hi TabLine guifg=#000000 guibg=#d0d0d0 gui=NONE cterm=NONE
- hi TabLineFill guifg=NONE guibg=#808080 gui=NONE cterm=NONE
- hi TabLineSel guifg=#ffffff guibg=#000000 gui=reverse cterm=reverse
+ hi TabLineFill guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi TabLineSel guifg=#5f5f5f guibg=#ffffff gui=bold,reverse cterm=bold,reverse
hi ToolbarLine guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton guifg=#ffffff guibg=#000000 gui=NONE cterm=NONE
+ hi ToolbarButton guifg=#ffffff guibg=#5f5f5f gui=NONE cterm=NONE
hi QuickFixLine guifg=#ffffff guibg=#870087 gui=NONE cterm=NONE
hi CursorLineNr guifg=#000000 guibg=NONE gui=bold cterm=bold
hi LineNr guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE
@@ -118,13 +120,15 @@ else
hi EndOfBuffer guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE
hi SpecialKey guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE
hi Pmenu guifg=#000000 guibg=#e4e4e4 gui=NONE cterm=NONE
- hi PmenuSel guifg=#ffffff guibg=#d78700 gui=NONE cterm=NONE
+ hi PmenuSel guifg=#000000 guibg=#b2b2b2 gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#808080 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuKind guifg=#d70000 guibg=#e4e4e4 gui=NONE cterm=NONE
- hi PmenuKindSel guifg=#af0000 guibg=#d78700 gui=NONE cterm=NONE
+ hi PmenuKindSel guifg=#d70000 guibg=#b2b2b2 gui=NONE cterm=NONE
hi PmenuExtra guifg=#808080 guibg=#e4e4e4 gui=NONE cterm=NONE
- hi PmenuExtraSel guifg=#ffffff guibg=#d78700 gui=NONE cterm=NONE
+ hi PmenuExtraSel guifg=#808080 guibg=#b2b2b2 gui=NONE cterm=NONE
+ hi PmenuMatch guifg=#870087 guibg=#e4e4e4 gui=NONE cterm=NONE
+ hi PmenuMatchSel guifg=#870087 guibg=#b2b2b2 gui=NONE cterm=NONE
hi SignColumn guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error guifg=#d70000 guibg=#ffffff gui=reverse cterm=reverse
hi ErrorMsg guifg=#d70000 guibg=#ffffff gui=reverse cterm=reverse
@@ -132,7 +136,7 @@ else
hi MoreMsg guifg=#008700 guibg=NONE gui=NONE cterm=NONE
hi Question guifg=#870087 guibg=NONE gui=NONE cterm=NONE
hi WarningMsg guifg=#af5f00 guibg=NONE gui=NONE cterm=NONE
- hi Todo guifg=#8700ff guibg=#ffffff gui=reverse cterm=reverse
+ hi Todo guifg=#5f00d7 guibg=#ffffff gui=reverse cterm=reverse
hi Search guifg=#ffffff guibg=#008700 gui=NONE cterm=NONE
hi IncSearch guifg=#ffffff guibg=#d78700 gui=NONE cterm=NONE
hi WildMenu guifg=#ffffff guibg=#d78700 gui=NONE cterm=NONE
@@ -158,11 +162,11 @@ else
hi Statement guifg=#005faf guibg=NONE gui=NONE cterm=NONE
hi Type guifg=#af5f00 guibg=NONE gui=NONE cterm=NONE
hi PreProc guifg=#008787 guibg=NONE gui=NONE cterm=NONE
- hi Special guifg=#8700ff guibg=NONE gui=NONE cterm=NONE
+ hi Special guifg=#5f00d7 guibg=NONE gui=NONE cterm=NONE
hi Underlined guifg=NONE guibg=NONE gui=underline ctermfg=NONE ctermbg=NONE cterm=underline
hi Title guifg=NONE guibg=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory guifg=#005faf guibg=NONE gui=bold cterm=bold
- hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd guifg=#005f00 guibg=#afd7af gui=NONE cterm=NONE
hi DiffChange guifg=#262626 guibg=#dadada gui=NONE cterm=NONE
@@ -184,14 +188,14 @@ if s:t_Co >= 256
hi! link CurSearch IncSearch
if &background ==# 'dark'
hi Normal ctermfg=252 ctermbg=16 cterm=NONE
- hi Statusline ctermfg=252 ctermbg=16 cterm=reverse
+ hi Statusline ctermfg=247 ctermbg=16 cterm=bold,reverse
hi StatuslineNC ctermfg=243 ctermbg=16 cterm=reverse
- hi VertSplit ctermfg=243 ctermbg=243 cterm=NONE
- hi TabLine ctermfg=16 ctermbg=252 cterm=NONE
- hi TabLineFill ctermfg=NONE ctermbg=243 cterm=NONE
- hi TabLineSel ctermfg=231 ctermbg=16 cterm=NONE
+ hi VertSplit ctermfg=243 ctermbg=NONE cterm=NONE
+ hi TabLine ctermfg=16 ctermbg=243 cterm=NONE
+ hi TabLineFill ctermfg=NONE ctermbg=16 cterm=NONE
+ hi TabLineSel ctermfg=16 ctermbg=247 cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton ctermfg=16 ctermbg=231 cterm=NONE
+ hi ToolbarButton ctermfg=16 ctermbg=252 cterm=NONE
hi QuickFixLine ctermfg=16 ctermbg=213 cterm=NONE
hi CursorLineNr ctermfg=231 ctermbg=NONE cterm=bold
hi LineNr ctermfg=240 ctermbg=NONE cterm=NONE
@@ -201,13 +205,15 @@ if s:t_Co >= 256
hi EndOfBuffer ctermfg=240 ctermbg=NONE cterm=NONE
hi EndOfBuffer ctermfg=243 ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=252 ctermbg=236 cterm=NONE
- hi PmenuSel ctermfg=16 ctermbg=214 cterm=NONE
+ hi PmenuSel ctermfg=252 ctermbg=240 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=252 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuKind ctermfg=204 ctermbg=236 cterm=NONE
- hi PmenuKindSel ctermfg=161 ctermbg=214 cterm=NONE
+ hi PmenuKindSel ctermfg=204 ctermbg=240 cterm=NONE
hi PmenuExtra ctermfg=243 ctermbg=236 cterm=NONE
- hi PmenuExtraSel ctermfg=16 ctermbg=214 cterm=NONE
+ hi PmenuExtraSel ctermfg=243 ctermbg=240 cterm=NONE
+ hi PmenuMatch ctermfg=176 ctermbg=236 cterm=NONE
+ hi PmenuMatchSel ctermfg=176 ctermbg=240 cterm=NONE
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=161 ctermbg=231 cterm=reverse
hi ErrorMsg ctermfg=161 ctermbg=231 cterm=reverse
@@ -221,17 +227,17 @@ if s:t_Co >= 256
hi WildMenu ctermfg=16 ctermbg=214 cterm=NONE
hi debugPC ctermfg=32 ctermbg=NONE cterm=reverse
hi debugBreakpoint ctermfg=37 ctermbg=NONE cterm=reverse
- hi Visual ctermfg=32 ctermbg=16 cterm=reverse
+ hi Visual ctermfg=81 ctermbg=16 cterm=reverse
hi VisualNOS ctermfg=16 ctermbg=39 cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=235 cterm=NONE
hi CursorColumn ctermfg=NONE ctermbg=235 cterm=NONE
hi Folded ctermfg=243 ctermbg=236 cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=236 cterm=NONE
hi MatchParen ctermfg=199 ctermbg=NONE cterm=bold
- hi SpellBad ctermfg=161 ctermbg=231 cterm=reverse
- hi SpellCap ctermfg=37 ctermbg=16 cterm=reverse
- hi SpellLocal ctermfg=41 ctermbg=16 cterm=reverse
- hi SpellRare ctermfg=213 ctermbg=16 cterm=reverse
+ hi SpellBad ctermfg=161 ctermbg=NONE cterm=underline
+ hi SpellCap ctermfg=37 ctermbg=NONE cterm=underline
+ hi SpellLocal ctermfg=41 ctermbg=NONE cterm=underline
+ hi SpellRare ctermfg=213 ctermbg=NONE cterm=underline
hi Comment ctermfg=243 ctermbg=NONE cterm=NONE
hi Constant ctermfg=204 ctermbg=NONE cterm=NONE
hi String ctermfg=41 ctermbg=NONE cterm=NONE
@@ -243,7 +249,7 @@ if s:t_Co >= 256
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=39 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=240 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=157 ctermbg=65 cterm=NONE
hi DiffChange ctermfg=252 ctermbg=59 cterm=NONE
@@ -255,14 +261,14 @@ if s:t_Co >= 256
else
" Light background
hi Normal ctermfg=16 ctermbg=231 cterm=NONE
- hi Statusline ctermfg=231 ctermbg=59 cterm=NONE
+ hi Statusline ctermfg=231 ctermbg=59 cterm=bold
hi StatuslineNC ctermfg=16 ctermbg=252 cterm=NONE
- hi VertSplit ctermfg=252 ctermbg=252 cterm=NONE
+ hi VertSplit ctermfg=59 ctermbg=NONE cterm=NONE
hi TabLine ctermfg=16 ctermbg=252 cterm=NONE
- hi TabLineFill ctermfg=NONE ctermbg=240 cterm=NONE
- hi TabLineSel ctermfg=231 ctermbg=16 cterm=reverse
+ hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi TabLineSel ctermfg=59 ctermbg=231 cterm=bold,reverse
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton ctermfg=231 ctermbg=16 cterm=NONE
+ hi ToolbarButton ctermfg=231 ctermbg=59 cterm=NONE
hi QuickFixLine ctermfg=231 ctermbg=90 cterm=NONE
hi CursorLineNr ctermfg=16 ctermbg=NONE cterm=bold
hi LineNr ctermfg=249 ctermbg=NONE cterm=NONE
@@ -271,13 +277,15 @@ if s:t_Co >= 256
hi EndOfBuffer ctermfg=249 ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=249 ctermbg=NONE cterm=NONE
hi Pmenu ctermfg=16 ctermbg=254 cterm=NONE
- hi PmenuSel ctermfg=231 ctermbg=172 cterm=NONE
+ hi PmenuSel ctermfg=16 ctermbg=249 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=240 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE
hi PmenuKind ctermfg=160 ctermbg=254 cterm=NONE
- hi PmenuKindSel ctermfg=124 ctermbg=172 cterm=NONE
+ hi PmenuKindSel ctermfg=160 ctermbg=249 cterm=NONE
hi PmenuExtra ctermfg=240 ctermbg=254 cterm=NONE
- hi PmenuExtraSel ctermfg=231 ctermbg=172 cterm=NONE
+ hi PmenuExtraSel ctermfg=240 ctermbg=249 cterm=NONE
+ hi PmenuMatch ctermfg=90 ctermbg=254 cterm=NONE
+ hi PmenuMatchSel ctermfg=90 ctermbg=249 cterm=NONE
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=160 ctermbg=231 cterm=reverse
hi ErrorMsg ctermfg=160 ctermbg=231 cterm=reverse
@@ -285,7 +293,7 @@ if s:t_Co >= 256
hi MoreMsg ctermfg=28 ctermbg=NONE cterm=NONE
hi Question ctermfg=90 ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=130 ctermbg=NONE cterm=NONE
- hi Todo ctermfg=93 ctermbg=231 cterm=reverse
+ hi Todo ctermfg=56 ctermbg=231 cterm=reverse
hi Search ctermfg=231 ctermbg=28 cterm=NONE
hi IncSearch ctermfg=231 ctermbg=172 cterm=NONE
hi WildMenu ctermfg=231 ctermbg=172 cterm=NONE
@@ -298,10 +306,10 @@ if s:t_Co >= 256
hi Folded ctermfg=240 ctermbg=254 cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=254 cterm=NONE
hi MatchParen ctermfg=199 ctermbg=NONE cterm=bold
- hi SpellBad ctermfg=160 ctermbg=231 cterm=reverse
- hi SpellCap ctermfg=30 ctermbg=231 cterm=reverse
- hi SpellLocal ctermfg=28 ctermbg=231 cterm=reverse
- hi SpellRare ctermfg=127 ctermbg=231 cterm=reverse
+ hi SpellBad ctermfg=160 ctermbg=NONE cterm=underline
+ hi SpellCap ctermfg=30 ctermbg=NONE cterm=underline
+ hi SpellLocal ctermfg=28 ctermbg=NONE cterm=underline
+ hi SpellRare ctermfg=127 ctermbg=NONE cterm=underline
hi Comment ctermfg=245 ctermbg=NONE cterm=NONE
hi Constant ctermfg=124 ctermbg=NONE cterm=NONE
hi String ctermfg=28 ctermbg=NONE cterm=NONE
@@ -309,11 +317,11 @@ if s:t_Co >= 256
hi Statement ctermfg=25 ctermbg=NONE cterm=NONE
hi Type ctermfg=130 ctermbg=NONE cterm=NONE
hi PreProc ctermfg=30 ctermbg=NONE cterm=NONE
- hi Special ctermfg=93 ctermbg=NONE cterm=NONE
+ hi Special ctermfg=56 ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=25 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=249 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=22 ctermbg=151 cterm=NONE
hi DiffChange ctermfg=235 ctermbg=253 cterm=NONE
@@ -330,14 +338,14 @@ endif
if s:t_Co >= 16
if &background ==# 'dark'
hi Normal ctermfg=grey ctermbg=black cterm=NONE
- hi Statusline ctermfg=grey ctermbg=black cterm=reverse
+ hi Statusline ctermfg=grey ctermbg=black cterm=bold,reverse
hi StatuslineNC ctermfg=darkgrey ctermbg=black cterm=reverse
- hi VertSplit ctermfg=darkgrey ctermbg=darkgrey cterm=NONE
- hi TabLine ctermfg=black ctermbg=grey cterm=NONE
- hi TabLineFill ctermfg=NONE ctermbg=darkgrey cterm=NONE
- hi TabLineSel ctermfg=white ctermbg=black cterm=NONE
+ hi VertSplit ctermfg=darkgrey ctermbg=NONE cterm=NONE
+ hi TabLine ctermfg=black ctermbg=darkgrey cterm=NONE
+ hi TabLineFill ctermfg=NONE ctermbg=black cterm=NONE
+ hi TabLineSel ctermfg=black ctermbg=grey cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton ctermfg=black ctermbg=white cterm=NONE
+ hi ToolbarButton ctermfg=black ctermbg=grey cterm=NONE
hi QuickFixLine ctermfg=black ctermbg=magenta cterm=NONE
hi CursorLineNr ctermfg=white ctermbg=NONE cterm=bold
hi LineNr ctermfg=grey ctermbg=NONE cterm=NONE
@@ -353,6 +361,8 @@ if s:t_Co >= 16
hi PmenuKindSel ctermfg=darkred ctermbg=darkyellow cterm=NONE
hi PmenuExtra ctermfg=darkgrey ctermbg=grey cterm=NONE
hi PmenuExtraSel ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=darkred ctermbg=white cterm=reverse
hi ErrorMsg ctermfg=darkred ctermbg=white cterm=reverse
@@ -366,17 +376,17 @@ if s:t_Co >= 16
hi WildMenu ctermfg=black ctermbg=yellow cterm=NONE
hi debugPC ctermfg=darkblue ctermbg=NONE cterm=reverse
hi debugBreakpoint ctermfg=darkcyan ctermbg=NONE cterm=reverse
- hi Visual ctermfg=darkblue ctermbg=black cterm=reverse
+ hi Visual ctermfg=cyan ctermbg=black cterm=reverse
hi VisualNOS ctermfg=black ctermbg=blue cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi CursorColumn ctermfg=black ctermbg=yellow cterm=NONE
hi Folded ctermfg=black ctermbg=NONE cterm=bold
hi ColorColumn ctermfg=black ctermbg=darkyellow cterm=NONE
hi MatchParen ctermfg=NONE ctermbg=NONE cterm=bold,underline
- hi SpellBad ctermfg=darkred ctermbg=white cterm=reverse
- hi SpellCap ctermfg=darkcyan ctermbg=black cterm=reverse
- hi SpellLocal ctermfg=green ctermbg=black cterm=reverse
- hi SpellRare ctermfg=magenta ctermbg=black cterm=reverse
+ hi SpellBad ctermfg=darkred ctermbg=NONE cterm=underline
+ hi SpellCap ctermfg=darkcyan ctermbg=NONE cterm=underline
+ hi SpellLocal ctermfg=green ctermbg=NONE cterm=underline
+ hi SpellRare ctermfg=magenta ctermbg=NONE cterm=underline
hi Comment ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Constant ctermfg=red ctermbg=NONE cterm=NONE
hi String ctermfg=green ctermbg=NONE cterm=NONE
@@ -388,7 +398,7 @@ if s:t_Co >= 16
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=blue ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=grey ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=black ctermbg=darkgreen cterm=NONE
hi DiffChange ctermfg=black ctermbg=lightgray cterm=NONE
@@ -400,14 +410,14 @@ if s:t_Co >= 16
else
" Light background
hi Normal ctermfg=black ctermbg=white cterm=NONE
- hi Statusline ctermfg=white ctermbg=darkgrey cterm=NONE
+ hi Statusline ctermfg=white ctermbg=darkgrey cterm=bold
hi StatuslineNC ctermfg=black ctermbg=lightgrey cterm=NONE
- hi VertSplit ctermfg=lightgrey ctermbg=lightgrey cterm=NONE
+ hi VertSplit ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi TabLine ctermfg=black ctermbg=lightgrey cterm=NONE
- hi TabLineFill ctermfg=NONE ctermbg=darkgrey cterm=NONE
- hi TabLineSel ctermfg=white ctermbg=black cterm=reverse
+ hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi TabLineSel ctermfg=darkgrey ctermbg=white cterm=bold,reverse
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
- hi ToolbarButton ctermfg=white ctermbg=black cterm=NONE
+ hi ToolbarButton ctermfg=white ctermbg=darkgrey cterm=NONE
hi QuickFixLine ctermfg=white ctermbg=darkmagenta cterm=NONE
hi CursorLineNr ctermfg=black ctermbg=NONE cterm=bold
hi LineNr ctermfg=darkgrey ctermbg=NONE cterm=NONE
@@ -423,6 +433,8 @@ if s:t_Co >= 16
hi PmenuKindSel ctermfg=darkred ctermbg=darkyellow cterm=NONE
hi PmenuExtra ctermfg=darkgrey ctermbg=grey cterm=NONE
hi PmenuExtraSel ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=red ctermbg=white cterm=reverse
hi ErrorMsg ctermfg=red ctermbg=white cterm=reverse
@@ -430,7 +442,7 @@ if s:t_Co >= 16
hi MoreMsg ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Question ctermfg=darkmagenta ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=darkyellow ctermbg=NONE cterm=NONE
- hi Todo ctermfg=darkred ctermbg=white cterm=reverse
+ hi Todo ctermfg=blue ctermbg=white cterm=reverse
hi Search ctermfg=white ctermbg=darkgreen cterm=NONE
hi IncSearch ctermfg=white ctermbg=yellow cterm=NONE
hi WildMenu ctermfg=white ctermbg=yellow cterm=NONE
@@ -443,10 +455,10 @@ if s:t_Co >= 16
hi Folded ctermfg=black ctermbg=NONE cterm=bold
hi ColorColumn ctermfg=black ctermbg=darkyellow cterm=NONE
hi MatchParen ctermfg=NONE ctermbg=NONE cterm=bold,underline
- hi SpellBad ctermfg=red ctermbg=white cterm=reverse
- hi SpellCap ctermfg=darkcyan ctermbg=white cterm=reverse
- hi SpellLocal ctermfg=darkgreen ctermbg=white cterm=reverse
- hi SpellRare ctermfg=magenta ctermbg=white cterm=reverse
+ hi SpellBad ctermfg=red ctermbg=NONE cterm=underline
+ hi SpellCap ctermfg=darkcyan ctermbg=NONE cterm=underline
+ hi SpellLocal ctermfg=darkgreen ctermbg=NONE cterm=underline
+ hi SpellRare ctermfg=magenta ctermbg=NONE cterm=underline
hi Comment ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Constant ctermfg=darkred ctermbg=NONE cterm=NONE
hi String ctermfg=darkgreen ctermbg=NONE cterm=NONE
@@ -454,11 +466,11 @@ if s:t_Co >= 16
hi Statement ctermfg=darkblue ctermbg=NONE cterm=NONE
hi Type ctermfg=darkyellow ctermbg=NONE cterm=NONE
hi PreProc ctermfg=darkcyan ctermbg=NONE cterm=NONE
- hi Special ctermfg=darkred ctermbg=NONE cterm=NONE
+ hi Special ctermfg=blue ctermbg=NONE cterm=NONE
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi Title ctermfg=NONE ctermbg=NONE cterm=bold
hi Directory ctermfg=darkblue ctermbg=NONE cterm=bold
- hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=darkgrey ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi DiffAdd ctermfg=black ctermbg=darkgreen cterm=NONE
hi DiffChange ctermfg=black ctermbg=lightgray cterm=NONE
@@ -477,10 +489,10 @@ if s:t_Co >= 8
hi Normal ctermfg=grey ctermbg=black cterm=NONE
hi Statusline ctermfg=grey ctermbg=black cterm=bold,reverse
hi StatuslineNC ctermfg=black ctermbg=grey cterm=NONE
- hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE
- hi TabLine ctermfg=grey ctermbg=black cterm=reverse
- hi TabLineFill ctermfg=NONE ctermbg=grey cterm=NONE
- hi TabLineSel ctermfg=grey ctermbg=black cterm=NONE
+ hi VertSplit ctermfg=grey ctermbg=NONE cterm=NONE
+ hi TabLine ctermfg=grey ctermbg=black cterm=NONE
+ hi TabLineFill ctermfg=grey ctermbg=NONE cterm=NONE
+ hi TabLineSel ctermfg=grey ctermbg=black cterm=bold,reverse
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi ToolbarButton ctermfg=grey ctermbg=black cterm=bold,reverse
hi QuickFixLine ctermfg=black ctermbg=darkmagenta cterm=NONE
@@ -498,6 +510,8 @@ if s:t_Co >= 8
hi PmenuKindSel ctermfg=darkred ctermbg=darkyellow cterm=NONE
hi PmenuExtra ctermfg=black ctermbg=grey cterm=NONE
hi PmenuExtraSel ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=grey ctermbg=darkred cterm=NONE
hi ErrorMsg ctermfg=grey ctermbg=darkred cterm=NONE
@@ -544,10 +558,10 @@ if s:t_Co >= 8
hi Normal ctermfg=black ctermbg=grey cterm=NONE
hi Statusline ctermfg=grey ctermbg=black cterm=bold
hi StatuslineNC ctermfg=grey ctermbg=darkgrey cterm=NONE
- hi VertSplit ctermfg=black ctermbg=black cterm=NONE
- hi TabLine ctermfg=black ctermbg=grey cterm=reverse
- hi TabLineFill ctermfg=NONE ctermbg=darkgrey cterm=NONE
- hi TabLineSel ctermfg=black ctermbg=grey cterm=NONE
+ hi VertSplit ctermfg=black ctermbg=NONE cterm=NONE
+ hi TabLine ctermfg=black ctermbg=grey cterm=NONE
+ hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=NONE
+ hi TabLineSel ctermfg=grey ctermbg=black cterm=bold
hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi ToolbarButton ctermfg=grey ctermbg=black cterm=bold
hi QuickFixLine ctermfg=black ctermbg=darkmagenta cterm=NONE
@@ -565,6 +579,8 @@ if s:t_Co >= 8
hi PmenuKindSel ctermfg=darkred ctermbg=darkyellow cterm=NONE
hi PmenuExtra ctermfg=grey ctermbg=black cterm=NONE
hi PmenuExtraSel ctermfg=black ctermbg=darkyellow cterm=NONE
+ hi PmenuMatch ctermfg=grey ctermbg=black cterm=bold
+ hi PmenuMatchSel ctermfg=NONE ctermbg=darkyellow cterm=bold
hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE
hi Error ctermfg=white ctermbg=darkred cterm=NONE
hi ErrorMsg ctermfg=white ctermbg=darkred cterm=NONE
@@ -572,7 +588,7 @@ if s:t_Co >= 8
hi MoreMsg ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Question ctermfg=darkmagenta ctermbg=NONE cterm=NONE
hi WarningMsg ctermfg=darkyellow ctermbg=NONE cterm=NONE
- hi Todo ctermfg=darkred ctermbg=black cterm=reverse
+ hi Todo ctermfg=blue ctermbg=black cterm=reverse
hi Search ctermfg=darkgreen ctermbg=black cterm=reverse
hi IncSearch ctermfg=darkyellow ctermbg=black cterm=reverse
hi WildMenu ctermfg=black ctermbg=darkyellow cterm=NONE
@@ -706,6 +722,8 @@ endif
" Color: colorlC #ff5fff 207 magenta
" Color: colorDim #878787 102 grey
" Color: colorMP #ff00af 199 magenta
+" Color: colorV #5fd7ff 81 cyan
+" Color: colorSt #9e9e9e 247 grey
" Color: diffAdd #5f875f 65 darkgreen
" Color: diffAddFg #afffaf 157 black
" Color: diffDelete #875f5f 95 darkred
@@ -733,7 +751,7 @@ endif
" Color: color14 #00afaf 37 cyan
" Color: color07 #8a8a8a 245 grey
" Color: color15 #ffffff 231 white
-" Color: color16 #8700ff 93 darkred
+" Color: color16 #5f00d7 56 blue
" Color: colorCm #8a8a8a 245 darkgrey
" Color: colorLine #EEEEEE 255 grey
" Color: colorB #E4E4E4 254 grey
@@ -741,7 +759,7 @@ endif
" Color: colorTab #d0d0d0 252 lightgrey
" Color: colorC #000000 16 black
" Color: colorlC #FF00FF 201 magenta
-" Color: colorV #5F87AF 67 darkblue
+" Color: colorV #0087af 31 darkcyan
" Color: colorDim #626262 241 darkgrey
" Color: colorSt #5f5f5f 59 darkgrey
" Color: colorMP #ff00af 199 magenta
diff --git a/runtime/colors/zaibatsu.vim b/runtime/colors/zaibatsu.vim
index dba8603..02997c8 100644
--- a/runtime/colors/zaibatsu.vim
+++ b/runtime/colors/zaibatsu.vim
@@ -4,7 +4,7 @@
" Maintainer: Romain Lafourcade <romainlafourcade@gmail.com>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:43
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -35,6 +35,8 @@ hi PmenuExtra guifg=#878092 guibg=#ffffff gui=NONE cterm=NONE
hi! link PmenuExtraSel PmenuSel
hi PmenuKind guifg=#878092 guibg=#ffffff gui=NONE cterm=NONE
hi! link PmenuKindSel PmenuSel
+hi PmenuMatch guifg=#d700ff guibg=#ffffff gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#d700ff guibg=#afafff gui=NONE cterm=NONE
hi ColorColumn guifg=NONE guibg=#510039 gui=NONE cterm=NONE
hi CursorLine guifg=NONE guibg=#362b49 gui=NONE cterm=NONE
hi CursorColumn guifg=NONE guibg=#362b49 gui=NONE cterm=NONE
@@ -138,6 +140,8 @@ if s:t_Co >= 256
hi! link PmenuExtraSel PmenuSel
hi PmenuKind ctermfg=103 ctermbg=231 cterm=NONE
hi! link PmenuKindSel PmenuSel
+ hi PmenuMatch ctermfg=165 ctermbg=231 cterm=NONE
+ hi PmenuMatchSel ctermfg=165 ctermbg=147 cterm=NONE
hi ColorColumn ctermfg=NONE ctermbg=52 cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=237 cterm=NONE
hi CursorColumn ctermfg=NONE ctermbg=237 cterm=NONE
@@ -244,6 +248,8 @@ if s:t_Co >= 16
hi! link PmenuExtraSel PmenuSel
hi PmenuKind ctermfg=darkgray ctermbg=white cterm=NONE
hi! link PmenuKindSel PmenuSel
+ hi PmenuMatch ctermfg=black ctermbg=white cterm=bold
+ hi PmenuMatchSel ctermfg=white ctermbg=blue cterm=bold
hi ColorColumn ctermfg=white ctermbg=darkred cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi CursorColumn ctermfg=NONE ctermbg=blue cterm=NONE
@@ -350,6 +356,8 @@ if s:t_Co >= 8
hi! link PmenuExtraSel PmenuSel
hi! link PmenuKind Pmenu
hi! link PmenuKindSel PmenuSel
+ hi PmenuMatch ctermfg=black ctermbg=white cterm=bold
+ hi PmenuMatchSel ctermfg=white ctermbg=blue cterm=bold
hi ColorColumn ctermfg=white ctermbg=darkred cterm=NONE
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline
hi CursorColumn ctermfg=NONE ctermbg=blue cterm=NONE
diff --git a/runtime/colors/zellner.vim b/runtime/colors/zellner.vim
index 8a15004..7f11fbb 100644
--- a/runtime/colors/zellner.vim
+++ b/runtime/colors/zellner.vim
@@ -4,7 +4,7 @@
" Maintainer: Original maintainer Ron Aaron <ron@ronware.org>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
-" Last Updated: Fri 15 Dec 2023 20:05:44
+" Last Change: 2024 Aug 15
" Generated by Colortemplate v2.2.3
@@ -42,6 +42,8 @@ hi Pmenu guifg=#000000 guibg=#dadada gui=NONE cterm=NONE
hi PmenuSel guifg=#000000 guibg=#ffff00 gui=NONE cterm=NONE
hi PmenuSbar guifg=NONE guibg=#ffffff gui=NONE cterm=NONE
hi PmenuThumb guifg=NONE guibg=#a9a9a9 gui=NONE cterm=NONE
+hi PmenuMatch guifg=#a52a2a guibg=#dadada gui=NONE cterm=NONE
+hi PmenuMatchSel guifg=#a52a2a guibg=#ffff00 gui=NONE cterm=NONE
hi TabLine guifg=#000000 guibg=#a9a9a9 gui=underline cterm=underline
hi TabLineFill guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel guifg=#000000 guibg=#ffffff gui=bold cterm=bold
@@ -82,7 +84,7 @@ hi Type guifg=#0000ff guibg=NONE gui=NONE cterm=NONE
hi Special guifg=#ff00ff guibg=NONE gui=NONE cterm=NONE
hi Tag guifg=#006400 guibg=NONE gui=NONE cterm=NONE
hi Directory guifg=#0000ff guibg=NONE gui=bold cterm=bold
-hi Conceal guifg=#ff0000 guibg=NONE gui=NONE cterm=NONE
+hi Conceal guifg=#a9a9a9 guibg=NONE gui=NONE cterm=NONE
hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title guifg=#a020f0 guibg=NONE gui=bold cterm=bold
hi DiffAdd guifg=#ffffff guibg=#5f875f gui=NONE cterm=NONE
@@ -115,6 +117,8 @@ if s:t_Co >= 256
hi PmenuSel ctermfg=16 ctermbg=226 cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=231 cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=248 cterm=NONE
+ hi PmenuMatch ctermfg=124 ctermbg=253 cterm=NONE
+ hi PmenuMatchSel ctermfg=124 ctermbg=226 cterm=NONE
hi TabLine ctermfg=16 ctermbg=248 cterm=underline
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=16 ctermbg=231 cterm=bold
@@ -155,7 +159,7 @@ if s:t_Co >= 256
hi Special ctermfg=201 ctermbg=NONE cterm=NONE
hi Tag ctermfg=22 ctermbg=NONE cterm=NONE
hi Directory ctermfg=21 ctermbg=NONE cterm=bold
- hi Conceal ctermfg=196 ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=248 ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title ctermfg=129 ctermbg=NONE cterm=bold
hi DiffAdd ctermfg=231 ctermbg=65 cterm=NONE
@@ -183,6 +187,8 @@ if s:t_Co >= 16
hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=white cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkgrey cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=grey cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=yellow cterm=bold
hi TabLine ctermfg=black ctermbg=grey cterm=underline
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=black ctermbg=white cterm=bold
@@ -223,7 +229,7 @@ if s:t_Co >= 16
hi Special ctermfg=magenta ctermbg=NONE cterm=NONE
hi Tag ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Directory ctermfg=blue ctermbg=NONE cterm=bold
- hi Conceal ctermfg=red ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=grey ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title ctermfg=darkmagenta ctermbg=NONE cterm=bold
hi DiffAdd ctermfg=white ctermbg=darkgreen cterm=NONE
@@ -251,6 +257,8 @@ if s:t_Co >= 8
hi PmenuSel ctermfg=black ctermbg=darkyellow cterm=NONE
hi PmenuSbar ctermfg=NONE ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=NONE ctermbg=darkmagenta cterm=NONE
+ hi PmenuMatch ctermfg=black ctermbg=darkcyan cterm=bold
+ hi PmenuMatchSel ctermfg=black ctermbg=darkyellow cterm=bold
hi TabLine ctermfg=black ctermbg=gray cterm=reverse
hi TabLineFill ctermfg=NONE ctermbg=NONE cterm=reverse
hi TabLineSel ctermfg=gray ctermbg=black cterm=bold,reverse
@@ -288,7 +296,7 @@ if s:t_Co >= 8
hi Type ctermfg=darkblue ctermbg=NONE cterm=bold
hi Special ctermfg=darkgreen ctermbg=NONE cterm=NONE
hi Directory ctermfg=darkblue ctermbg=NONE cterm=bold
- hi Conceal ctermfg=darkred ctermbg=NONE cterm=NONE
+ hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE
hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE
hi Title ctermfg=darkmagenta ctermbg=NONE cterm=bold
hi DiffAdd ctermfg=white ctermbg=darkgreen cterm=NONE
diff --git a/runtime/compiler/pandoc.vim b/runtime/compiler/pandoc.vim
index 6c15193..ecc935a 100644
--- a/runtime/compiler/pandoc.vim
+++ b/runtime/compiler/pandoc.vim
@@ -1,6 +1,7 @@
" Vim compiler file
" Compiler: Pandoc
" Maintainer: Konfekt
+" Last Change: 2024 Aug 20
"
" Expects output file extension, say `:make html` or `:make pdf`.
" Passes additional arguments to pandoc, say `:make html --self-contained`.
@@ -25,31 +26,33 @@ let s:supported_filetypes =
silent! function s:PandocFiletype(filetype) abort
let ft = a:filetype
- if ft ==# 'pandoc'
- return 'markdown'
- elseif ft ==# 'tex'
- return 'latex'
- elseif ft ==# 'xml'
- " Pandoc does not support XML as a generic input format, but it does support
- " EndNote XML and Jats XML out of which the latter seems more universal.
- return 'jats'
- elseif ft ==# 'text' || empty(ft)
- return 'markdown'
- elseif index(s:supported_filetypes, &ft) >= 0
- return ft
+
+ if ft ==# 'pandoc' | return 'markdown'
+ elseif ft ==# 'tex' | return 'latex'
+ " Pandoc does not support XML as a generic input format, but it does support
+ " EndNote XML and Jats XML out of which the latter seems more universal.
+ elseif ft ==# 'xml' | return 'jats'
+ elseif ft ==# 'text' || empty(ft) | return 'markdown'
+ elseif index(s:supported_filetypes, &ft) >= 0 | return ft
else
- echomsg 'Unsupported filetype: ' . ft . ', falling back to Markdown as input format!'
+ echomsg 'Unsupported filetype: '..ft..', falling back to Markdown as input format!'
return 'markdown'
endif
endfunction
-execute 'CompilerSet makeprg=pandoc\ --standalone' .
- \ '\ --metadata\ title=%:t:r:S' .
- \ '\ --metadata\ lang=' . matchstr(&spelllang, '^\a\a') .
- \ '\ --from=' . s:PandocFiletype(&filetype) .
- \ '\ ' . escape(get(b:, 'pandoc_compiler_args', get(g:, 'pandoc_compiler_args', '')), ' ') .
- \ '\ --output\ %:r:S.$*\ %:S'
-
-CompilerSet errorformat="%f",\ line\ %l:\ %m
+
+let b:pandoc_compiler_from = get(b:, 'pandoc_compiler_from', s:PandocFiletype(&filetype))
+let b:pandoc_compiler_lang = get(b:, 'pandoc_compiler_lang', &spell ? matchstr(&spelllang, '^\a\a') : '')
+
+execute 'CompilerSet makeprg=pandoc'..escape(
+ \ ' --standalone' .
+ \ (b:pandoc_compiler_from ==# 'markdown' && (getline(1) =~# '^%\s\+\S\+' || (search('^title:\s+\S+', 'cnw') > 0)) ?
+ \ '' : ' --metadata title=%:t:r:S') .
+ \ (empty(b:pandoc_compiler_lang) ?
+ \ '' : ' --metadata lang='..b:pandoc_compiler_lang) .
+ \ ' --from='..b:pandoc_compiler_from .
+ \ ' '..get(b:, 'pandoc_compiler_args', get(g:, 'pandoc_compiler_args', '')) .
+ \ ' --output %:r:S.$* -- %:S', ' ')
+CompilerSet errorformat=\"%f\",\ line\ %l:\ %m
let &cpo = s:keepcpo
unlet s:keepcpo
diff --git a/runtime/compiler/typst.vim b/runtime/compiler/typst.vim
new file mode 100644
index 0000000..33e5581
--- /dev/null
+++ b/runtime/compiler/typst.vim
@@ -0,0 +1,15 @@
+" Vim compiler file
+" Language: Typst
+" Maintainer: Gregory Anders
+" Last Change: 2024-07-14
+" Based on: https://github.com/kaarmu/typst.vim
+
+if exists('current_compiler')
+ finish
+endif
+let current_compiler = get(g:, 'typst_cmd', 'typst')
+
+" With `--diagnostic-format` we can use the default errorformat
+let s:makeprg = [current_compiler, 'compile', '--diagnostic-format', 'short', '%:S']
+
+execute 'CompilerSet makeprg=' . join(s:makeprg, '\ ')
diff --git a/runtime/doc/Make_mvc.mak b/runtime/doc/Make_mvc.mak
index f2fbc52..c387ef8 100644
--- a/runtime/doc/Make_mvc.mak
+++ b/runtime/doc/Make_mvc.mak
@@ -12,7 +12,7 @@
# Correct the following line for the where executeable file vim is installed.
# Please do not put the path in quotes.
-VIMEXE = D:\Programs\Vim\vim90\vim.exe
+VIMPROG = D:\Programs\Vim\vim90\vim.exe
# Correct the following line for the directory where iconv installed.
# Please do not put the path in quotes.
@@ -63,7 +63,7 @@ doctags : doctags.c
# Use Vim to generate the tags file. Can only be used when Vim has been
# compiled and installed. Supports multiple languages.
vimtags : $(DOCS)
- @"$(VIMEXE)" --clean -esX -V1 -u doctags.vim
+ @"$(VIMPROG)" --clean -esX -V1 -u doctags.vim
uganda.nsis.txt : uganda.???
@@ -105,7 +105,7 @@ perlhtml : tags $(DOCS)
# Check URLs in the help with "curl" or "powershell".
test_urls :
- "$(VIMEXE)" --clean -S test_urls.vim
+ "$(VIMPROG)" --clean -S test_urls.vim
clean :
$(RM) doctags.exe doctags.obj
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index 30a4f08..785128e 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -6,8 +6,7 @@
AWK = awk
-# Set to $(VIMTARGET) when executed from src/Makefile.
-VIMEXE = vim
+VIMPROG = ../../src/vim
# include the config.mk from the source directory. It's only needed to set
# AWK, used for "make html". Comment this out if the include gives problems.
@@ -23,9 +22,9 @@ include Make_all.mak
all: tags vim.man evim.man vimdiff.man vimtutor.man xxd.man $(CONVERTED)
# Use Vim to generate the tags file. Can only be used when Vim has been
-# compiled and installed. Supports multiple languages.
+# compiled. Supports multiple languages.
vimtags: $(DOCS)
- @$(VIMEXE) --clean -esX -V1 -u doctags.vim
+ @$(VIMPROG) --clean -esX -V1 -u doctags.vim
# Use "doctags" to generate the tags file. Only works for English!
tags: doctags $(DOCS)
@@ -36,19 +35,19 @@ doctags: doctags.c
$(CC) doctags.c -o doctags
vim.man: vim.1
- nroff -man $< | sed -e s/.//g > $@
+ nroff -man $? | sed -e s/.//g > $@
evim.man: evim.1
- nroff -man $< | sed -e s/.//g > $@
+ nroff -man $? | sed -e s/.//g > $@
vimdiff.man: vimdiff.1
- nroff -man $< | sed -e s/.//g > $@
+ nroff -man $? | sed -e s/.//g > $@
vimtutor.man: vimtutor.1
- nroff -man $< | sed -e s/.//g > $@
+ nroff -man $? | sed -e s/.//g > $@
xxd.man: xxd.1
- nroff -man $< | sed -e s/.//g > $@
+ nroff -man $? | sed -e s/.//g > $@
uganda.nsis.txt : uganda.???
for dpn in $?; do \
@@ -57,7 +56,7 @@ uganda.nsis.txt : uganda.???
$${dpn} | uniq > $${trg%txt}$${dpn##*.}; \
done
# This files needs to be in dos fileformat for NSIS.
- $(VIMEXE) -e -X -u NONE --cmd "set notitle noicon nocp noml viminfo=" \
+ $(VIMPROG) -e -X -u NONE --cmd "set notitle noicon nocp noml viminfo=" \
-c "argdo write ++ff=dos" -c "qa" uganda.nsis.???
# Awk version of .txt to .html conversion.
@@ -75,10 +74,10 @@ $(HTMLS): tags.ref
# index.html is the starting point for HTML, but for the help files it is
# help.txt. Therefore use vimindex.html for index.txt.
index.html: help.txt
- $(AWK) -f makehtml.awk $< >$@
+ $(AWK) -f makehtml.awk $? >$@
vimindex.html: index.txt
- $(AWK) -f makehtml.awk $< >$@
+ $(AWK) -f makehtml.awk $? >$@
tags.ref tags.html: tags
$(AWK) -f maketags.awk tags >tags.html
@@ -91,7 +90,7 @@ perlhtml: tags $(DOCS)
# Check URLs in the help with "curl".
test_urls:
- $(VIMEXE) --clean -S test_urls.vim
+ $(VIMPROG) --clean -S test_urls.vim
clean:
-rm -f doctags *.html tags.ref
@@ -152,88 +151,91 @@ os_risc.txt:
os_win32.txt:
touch $@
-# Note that $< works with GNU make while $> works for BSD make.
-# Is there a solution that works for both??
+# In *BSD, the variable '$<' is used in suffix-transformation rules (in GNU this
+# is called "implicit rules", and in MS Windows it is called "inference rules").
+# For code portability, it is better to use the '$?' variable for explicit rules.
+# Especially since there is only one dependency and it should presumably always
+# be newer than the target file.
vim-da.UTF-8.1: vim-da.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vimdiff-da.UTF-8.1: vimdiff-da.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vimtutor-da.UTF-8.1: vimtutor-da.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vim-de.UTF-8.1: vim-de.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vim-fr.UTF-8.1: vim-fr.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
evim-fr.UTF-8.1: evim-fr.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vimdiff-fr.UTF-8.1: vimdiff-fr.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vimtutor-fr.UTF-8.1: vimtutor-fr.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
xxd-fr.UTF-8.1: xxd-fr.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vim-it.UTF-8.1: vim-it.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
evim-it.UTF-8.1: evim-it.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vimdiff-it.UTF-8.1: vimdiff-it.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vimtutor-it.UTF-8.1: vimtutor-it.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
xxd-it.UTF-8.1: xxd-it.1
- iconv -f latin1 -t utf-8 $< >$@
+ iconv -f latin1 -t UTF-8 $? >$@
vim-pl.UTF-8.1: vim-pl.1
- iconv -f latin2 -t utf-8 $< >$@
+ iconv -f latin2 -t UTF-8 $? >$@
evim-pl.UTF-8.1: evim-pl.1
- iconv -f latin2 -t utf-8 $< >$@
+ iconv -f latin2 -t UTF-8 $? >$@
vimdiff-pl.UTF-8.1: vimdiff-pl.1
- iconv -f latin2 -t utf-8 $< >$@
+ iconv -f latin2 -t UTF-8 $? >$@
vimtutor-pl.UTF-8.1: vimtutor-pl.1
- iconv -f latin2 -t utf-8 $< >$@
+ iconv -f latin2 -t UTF-8 $? >$@
xxd-pl.UTF-8.1: xxd-pl.1
- iconv -f latin2 -t utf-8 $< >$@
+ iconv -f latin2 -t UTF-8 $? >$@
vim-ru.UTF-8.1: vim-ru.1
- iconv -f KOI8-R -t utf-8 $< >$@
+ iconv -f KOI8-R -t UTF-8 $? >$@
evim-ru.UTF-8.1: evim-ru.1
- iconv -f KOI8-R -t utf-8 $< >$@
+ iconv -f KOI8-R -t UTF-8 $? >$@
vimdiff-ru.UTF-8.1: vimdiff-ru.1
- iconv -f KOI8-R -t utf-8 $< >$@
+ iconv -f KOI8-R -t UTF-8 $? >$@
vimtutor-ru.UTF-8.1: vimtutor-ru.1
- iconv -f KOI8-R -t utf-8 $< >$@
+ iconv -f KOI8-R -t UTF-8 $? >$@
xxd-ru.UTF-8.1: xxd-ru.1
- iconv -f KOI8-R -t utf-8 $< >$@
+ iconv -f KOI8-R -t UTF-8 $? >$@
vim-tr.UTF-8.1: vim-tr.1
- iconv -f latin5 -t utf-8 $< >$@
+ iconv -f latin5 -t UTF-8 $? >$@
evim-tr.UTF-8.1: evim-tr.1
- iconv -f latin5 -t utf-8 $< >$@
+ iconv -f latin5 -t UTF-8 $? >$@
vimdiff-tr.UTF-8.1: vimdiff-tr.1
- iconv -f latin5 -t utf-8 $< >$@
+ iconv -f latin5 -t UTF-8 $? >$@
vimtutor-tr.UTF-8.1: vimtutor-tr.1
- iconv -f latin5 -t utf-8 $< >$@
+ iconv -f latin5 -t UTF-8 $? >$@
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 037f89c..f200a30 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt* For Vim version 9.1. Last change: 2024 May 05
+*autocmd.txt* For Vim version 9.1. Last change: 2024 Aug 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -54,20 +54,20 @@ Recommended use:
without the autocommand being repeated.
Example in Vim9 script: >
- autocmd_add({replace: true,
+ autocmd_add([{replace: true,
group: 'DemoGroup',
event: 'BufEnter',
pattern: '*.txt',
cmd: 'call DemoBufEnter()'
- })
+ }])
In legacy script: >
- call autocmd_add(#{replace: v:true,
+ call autocmd_add([#{replace: v:true,
\ group: 'DemoGroup',
\ event: 'BufEnter',
\ pattern: '*.txt',
\ cmd: 'call DemoBufEnter()'
- \ })
+ \ }])
==============================================================================
2. Defining autocommands *autocmd-define*
@@ -379,6 +379,7 @@ Name triggered by ~
|CursorHold| the user doesn't press a key for a while
|CursorHoldI| the user doesn't press a key for a while in Insert mode
|CursorMoved| the cursor was moved in Normal mode
+|CursorMovedC| the cursor was moved in the |Command-line|
|CursorMovedI| the cursor was moved in Insert mode
|WinNewPre| before creating a new window
@@ -438,6 +439,8 @@ Name triggered by ~
|CompleteDone| after Insert mode completion is done, after clearing
info
+|KeyInputPre| just before a key is processed
+
|User| to be used in combination with ":doautocmd"
|SigUSR1| after the SIGUSR1 signal has been detected
@@ -748,6 +751,13 @@ CursorMoved After the cursor was moved in Normal or Visual
Careful: This is triggered very often, don't
do anything that the user does not expect or
that is slow.
+ *CursorMovedC*
+CursorMovedC After the cursor was moved in the command
+ line. Be careful not to mess up the command
+ line, it may cause Vim to lock up.
+ <afile> is set to a single character,
+ indicating the type of command-line.
+ |cmdwin-char|
*CursorMovedI*
CursorMovedI After the cursor was moved in Insert mode.
Not triggered when the popup menu is visible.
@@ -906,12 +916,12 @@ FilterWritePre Before writing a file for a filter command or
*FocusGained*
FocusGained When Vim got input focus. Only for the GUI
version and a few console versions where this
- can be detected.
+ can be detected. |xterm-focus-event|
*FocusLost*
FocusLost When Vim lost input focus. Only for the GUI
version and a few console versions where this
- can be detected. May also happen when a
- dialog pops up.
+ can be detected. |xterm-focus-event|
+ May also happen when a dialog pops up.
*FuncUndefined*
FuncUndefined When a user function is used but it isn't
defined. Useful for defining a function only
@@ -969,6 +979,26 @@ InsertLeavePre Just before leaving Insert mode. Also when
*InsertLeave*
InsertLeave Just after leaving Insert mode. Also when
using CTRL-O |i_CTRL-O|. But not for |i_CTRL-C|.
+ *KeyInputPre*
+KeyInputPre Just before a key is processed after mappings
+ have been applied. The pattern is matched
+ against a string that indicates the current
+ mode, which is the same as what is returned by
+ `mode(1)`.
+ The |v:char| variable indicates the key typed
+ and can be changed during the event to process
+ a different key. When |v:char| is not a
+ single character or a special key, the first
+ character is used.
+ The following values of |v:event| are set:
+ typed The key is typed or not.
+ typedchar The (actual) typed key since
+ the last |KeyInputPre| call.
+ Note: "typedchar" may be empty if successive
+ |KeyInputPre| autocmds are processed.
+ It is not allowed to change the text
+ |textlock| or the current mode.
+ {only with the +eval feature}
*MenuPopup*
MenuPopup Just before showing the popup menu (under the
right mouse button). Useful for adjusting the
@@ -1400,8 +1430,10 @@ WinLeave Before leaving a window. If the window to be
*WinNewPre*
WinNewPre Before creating a new window. Triggered
before commands that modify window layout by
- creating a split or new tab page. Not done for
- the first window, when Vim has just started.
+ creating a split.
+ Not done when creating tab pages and for the
+ first window, as the window structure is not
+ initialized yet and so is generally not safe.
It is not allowed to modify window layout
while executing commands for the WinNewPre
event.
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index a824531..4192b81 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt* For Vim version 9.1. Last change: 2024 Jun 17
+*builtin.txt* For Vim version 9.1. Last change: 2024 Aug 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -28,9 +28,9 @@ acos({expr}) Float arc cosine of {expr}
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({expr}, {lnum}, {text})
+appendbufline({buf}, {lnum}, {text})
Number append {text} below line {lnum}
- in buffer {expr}
+ 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
@@ -67,6 +67,8 @@ autocmd_get([{opts}]) List return a list of autocmds
balloon_gettext() String current text in the balloon
balloon_show({expr}) none show {expr} inside the balloon
balloon_split({msg}) List split {msg} as used for a balloon
+bindtextdomain({package}, {path})
+ Bool bind text domain to specified path
blob2list({blob}) List convert {blob} into a list of numbers
browse({save}, {title}, {initdir}, {default})
String put up a file requester
@@ -153,8 +155,8 @@ diff_filler({lnum}) Number diff filler lines about {lnum}
diff_hlID({lnum}, {col}) Number diff highlighting at {lnum}/{col}
digraph_get({chars}) String get the |digraph| of {chars}
digraph_getlist([{listall}]) List get all |digraph|s
-digraph_set({chars}, {digraph}) Boolean register |digraph|
-digraph_setlist({digraphlist}) Boolean register multiple |digraph|s
+digraph_set({chars}, {digraph}) Bool register |digraph|
+digraph_setlist({digraphlist}) Bool register multiple |digraph|s
echoraw({expr}) none output {expr} as-is
empty({expr}) Number |TRUE| if {expr} is empty
environ() Dict return environment variables
@@ -277,7 +279,7 @@ gettabvar({nr}, {varname} [, {def}])
gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
any {name} in {winnr} in tab page {tabnr}
gettagstack([{nr}]) Dict get the tag stack of window {nr}
-gettext({text}) String lookup translation of {text}
+gettext({text} [, {package}]) String lookup translation of {text}
getwininfo([{winid}]) List list of info about each window
getwinpos([{timeout}]) List X and Y coord in pixels of Vim window
getwinposx() Number X coord in pixels of the Vim window
@@ -306,6 +308,7 @@ hlget([{name} [, {resolve}]]) List get highlight group attributes
hlset({list}) Number set highlight group attributes
hostname() String name of the machine Vim is running on
iconv({expr}, {from}, {to}) String convert encoding of {expr}
+id({item}) String get unique identity string of item
indent({lnum}) Number indent of line {lnum}
index({object}, {expr} [, {start} [, {ic}]])
Number index in {object} where {expr} appears
@@ -429,6 +432,7 @@ 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_setoptions({id}, {options})
none set options for popup window {id}
popup_settext({id}, {text}) none set the text of popup window {id}
@@ -525,9 +529,9 @@ searchpos({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
server2client({clientid}, {string})
Number send reply string
serverlist() String get a list of available servers
-setbufline({expr}, {lnum}, {text})
+setbufline({buf}, {lnum}, {text})
Number set line {lnum} to {text} in buffer
- {expr}
+ {buf}
setbufvar({buf}, {varname}, {val})
none set {varname} in buffer {buf} to {val}
setcellwidths({list}) none set character cell width overrides
@@ -1217,6 +1221,16 @@ balloon_split({msg}) *balloon_split()*
Return type: list<any> or list<string>
+bindtextdomain({package}, {path}) *bindtextdomain()*
+ Bind a specific {package} to a {path} so that the
+ |gettext()| function can be used to get language-specific
+ translations for a package. {path} is the directory name
+ for the translations. See |package-translation|.
+
+ Returns v:true on success and v:false on failure (out of
+ memory).
+
+ Return type: |vim9-boolean|
blob2list({blob}) *blob2list()*
Return a List containing the number value of each byte in Blob
@@ -2518,8 +2532,10 @@ executable({expr}) *executable()*
This function checks if an executable with the name {expr}
exists. {expr} must be the name of the program without any
arguments.
+
executable() uses the value of $PATH and/or the normal
- searchpath for programs. *PATHEXT*
+ searchpath for programs.
+ *PATHEXT*
On MS-Windows the ".exe", ".bat", etc. can optionally be
included. Then the extensions in $PATHEXT are tried. Thus if
"foo.exe" does not exist, "foo.exe.bat" can be found. If
@@ -2529,11 +2545,14 @@ 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 Vim is
- normally found. Since this directory is added to $PATH it
- should also work to execute it |win32-PATH|. This can be
- disabled by setting the $NoDefaultCurrentDirectoryInExePath
- environment variable. *NoDefaultCurrentDirectoryInExePath*
+ 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.
+
The result is a Number:
1 exists
0 does not exist
@@ -2579,7 +2598,7 @@ execute({command} [, {silent}]) *execute()*
Can also be used as a |method|: >
GetCommand()->execute()
<
- Return type: |Number|
+ Return type: |String|
exepath({expr}) *exepath()*
@@ -3563,7 +3582,7 @@ garbagecollect([{atexit}]) *garbagecollect()*
Return type: |String|
-get({list}, {idx} [, {default}]) *get()*
+get({list}, {idx} [, {default}]) *get()* *get()-list*
Get item {idx} from |List| {list}. When this item is not
available return {default}. Return zero when {default} is
omitted.
@@ -3572,7 +3591,7 @@ get({list}, {idx} [, {default}]) *get()*
<
Return type: any, depending on {list}
-get({blob}, {idx} [, {default}])
+get({blob}, {idx} [, {default}]) *get()-blob*
Get byte {idx} from |Blob| {blob}. When this byte is not
available return {default}. Return -1 when {default} is
omitted.
@@ -3581,7 +3600,7 @@ get({blob}, {idx} [, {default}])
<
Return type: |Number|
-get({dict}, {key} [, {default}])
+get({dict}, {key} [, {default}]) *get()-dict*
Get item with key {key} from |Dictionary| {dict}. When this
item is not available return {default}. Return zero when
{default} is omitted. Useful example: >
@@ -3593,18 +3612,32 @@ get({dict}, {key} [, {default}])
<
Return type: any, depending on {dict}
-get({func}, {what})
- Get item {what} from Funcref {func}. Possible values for
+get({func}, {what}) *get()-func*
+ Get item {what} from |Funcref| {func}. Possible values for
{what} are:
- "name" The function name
- "func" The function
- "dict" The dictionary
- "args" The list with arguments
+ "name" The function name
+ "func" The function
+ "dict" The dictionary
+ "args" The list with arguments
+ "arity" A dictionary with information about the number of
+ arguments accepted by the function (minus the
+ {arglist}) with the following fields:
+ required the number of positional arguments
+ optional the number of optional arguments,
+ in addition to the required ones
+ varargs |TRUE| if the function accepts a
+ variable number of arguments |...|
+
+ Note: There is no error, if the {arglist} of
+ the Funcref contains more arguments than the
+ Funcref expects, it's not validated.
+
Returns zero on error.
+
Preferably used as a |method|: >
myfunc->get(what)
<
- Return type: any, depending on {func}
+ Return type: any, depending on {func} and {what}
*getbufinfo()*
getbufinfo([{buf}])
@@ -4036,6 +4069,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
customlist,{func} custom completion, defined via {func}
diff_buffer |:diffget| and |:diffput| completion
dir directory names
+ dir_in_path directory names in |'cdpath'|
environment environment variable names
event autocommand events
expression Vim expression
@@ -4774,6 +4808,8 @@ getregion({pos1}, {pos2} [, {opts}]) *getregion()*
<
Can also be used as a |method|: >
getpos('.')->getregion(getpos("'a"))
+<
+ Return type: list<string>
<
getregionpos({pos1}, {pos2} [, {opts}]) *getregionpos()*
@@ -4811,7 +4847,7 @@ getregionpos({pos1}, {pos2} [, {opts}]) *getregionpos()*
Can also be used as a |method|: >
getpos('.')->getregionpos(getpos("'a"))
<
- Return type: list<string>
+ Return type: list<list<list<number>>>
getregtype([{regname}]) *getregtype()*
@@ -4977,16 +5013,20 @@ gettagstack([{winnr}]) *gettagstack()*
Return type: dict<any>
-gettext({text}) *gettext()*
+gettext({text} [, {package}]) *gettext()*
Translate String {text} if possible.
- This is mainly for use in the distributed Vim scripts. When
- generating message translations the {text} is extracted by
- xgettext, the translator can add the translated message in the
- .po file and Vim will lookup the translation when gettext() is
- called.
+ This is intended for use in Vim scripts. When generating
+ message translations the {text} is extracted by `xgettext`,
+ the translator can add translated messages into the .po file
+ and Vim will lookup the translation when gettext() is called.
For {text} double quoted strings are preferred, because
- xgettext does not understand escaping in single quoted
- strings.
+ `xgettext` does not support single quoted escaped text.
+
+ When the {package} is specified, the translation is looked up
+ for that specific package. This is mainly required for
+ third-party Vim scripts. You need to specify a path to the
+ translations with the |bindtextdomain()| function before
+ using the gettext() function.
Return type: |String|
@@ -5590,6 +5630,34 @@ iconv({string}, {from}, {to}) *iconv()*
Return type: |String|
+id({item}) *id()*
+ The result is a unique String associated with the {item} and
+ not with the {item}'s contents. It is only valid while the
+ {item} exists and is referenced. It is valid only in the
+ instance of vim that produces the result. The whole idea is
+ that `id({item})` does not change if the contents of {item}
+ changes. This is useful as a `key` for creating an identity
+ dictionary, rather than one based on equals.
+
+ This operation does not reference {item} and there is no
+ function to convert the `id` to the {item}. It may be useful to
+ have a map of `id` to {item}. The following >
+ var referenceMap: dict<any>
+ var id = item->id()
+ referenceMap[id] = item
+< prevents {item} from being garbage collected and provides a
+ way to get the {item} from the `id`.
+
+ {item} may be a List, Dictionary, Object, Job, Channel or
+ Blob. If the item is not a permitted type, or it is a null
+ value, then an empty String is returned.
+
+ Can also be used as a |method|: >
+ GetItem()->id()
+<
+ Return type: |String|
+
+
indent({lnum}) *indent()*
The result is a Number, which is indent of line {lnum} in the
current buffer. The indent is counted in spaces, the value
@@ -6883,10 +6951,10 @@ matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
Same as |matchadd()|, but requires a list of positions {pos}
instead of a pattern. This command is faster than |matchadd()|
- because it does not require to handle regular expressions and
- sets buffer line boundaries to redraw screen. It is supposed
- to be used when fast match additions and deletions are
- required, for example to highlight matching parentheses.
+ because it does not handle regular expressions and it sets
+ buffer line boundaries to redraw screen. It is supposed to be
+ used when fast match additions and deletions are required, for
+ example to highlight matching parentheses.
{pos} is a list of positions. Each position can be one of
these:
@@ -8078,7 +8146,7 @@ pyxeval({expr}) *pyxeval()*
See also: |pyeval()|, |py3eval()|
Can also be used as a |method|: >
- < GetExpr()->pyxeval()
+ GetExpr()->pyxeval()
<
Return type: any, depending on {expr}
@@ -9486,7 +9554,8 @@ setline({lnum}, {text}) *setline()*
Set line {lnum} of the current buffer to {text}. To insert
lines use |append()|. To set lines in another buffer use
|setbufline()|.
- Any text properties in {lnum} are cleared |text-prop-cleared|.
+ Any text properties in {lnum} are cleared. See
+ |text-prop-cleared|
{lnum} is used like with |getline()|.
When {lnum} is just below the last line the {text} will be
@@ -10270,8 +10339,8 @@ spellsuggest({word} [, {max} [, {capital}]]) *spellsuggest()*
split({string} [, {pattern} [, {keepempty}]]) *split()*
Make a |List| out of {string}. When {pattern} is omitted or
- empty each white-separated sequence of characters becomes an
- item.
+ empty each white space separated sequence of characters
+ becomes an item.
Otherwise the string is split where {pattern} matches,
removing the matched characters. 'ignorecase' is not used
here, add \c to ignore case. |/\c|
@@ -11039,7 +11108,7 @@ synconcealed({lnum}, {col}) *synconcealed()*
Note: Doesn't consider |matchadd()| highlighting items,
since syntax and matching highlighting are two different
mechanisms |syntax-vs-match|.
-<
+
Return type: list<any>
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index 50ff4ec..2304712 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt* For Vim version 9.1. Last change: 2024 May 18
+*change.txt* For Vim version 9.1. Last change: 2024 Jul 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -95,13 +95,14 @@ For inserting text see |insert.txt|.
These commands delete text. You can repeat them with the `.` command
(except `:d`) and undo them. Use Visual mode to delete blocks of text. See
|registers| for an explanation of registers.
-
+ *d-special*
An exception for the d{motion} command: If the motion is not linewise, the
start and end of the motion are not in the same line, and there are only
blanks before the start and there are no non-blanks after the end of the
motion, the delete becomes linewise. This means that the delete also removes
the line of blanks that you might expect to remain. Use the |o_v| operator to
-force the motion to be characterwise.
+force the motion to be characterwise or remove the "z" flag from 'cpoptions'
+(see |cpo-z|) to disable this peculiarity.
Trying to delete an empty region of text (e.g., "d0" in the first column)
is an error when 'cpoptions' includes the 'E' flag.
@@ -251,7 +252,7 @@ blank; this is probably a bug, because "dw" deletes all the blanks; use the
If you prefer "cw" to include the space after a word, use this mapping: >
:map cw dwi
-Or use "caw" (see |aw|).
+Alternatively use "caw" (see also |aw| and |cpo-z|).
*:c* *:ch* *:change*
:{range}c[hange][!] Replace lines of text with some different text.
@@ -1272,13 +1273,13 @@ Vim fills these registers with text from yank and delete commands.
Numbered register 0 contains the text from the most recent yank command,
unless the command specified another register with ["x].
Numbered register 1 contains the text deleted by the most recent delete or
-change command, unless the command specified another register or the text is
-less than one line (the small delete register is used then). An exception is
-made for the delete operator with these movement commands: |%|, |(|, |)|, |`|,
-|/|, |?|, |n|, |N|, |{| and |}|. Register "1 is always used then (this is Vi
-compatible). The "- register is used as well if the delete is within a line.
-Note that these characters may be mapped. E.g. |%| is mapped by the matchit
-plugin.
+change command (even when the command specified another register), unless the
+text is less than one line (the small delete register is used then). An
+exception is made for the delete operator with these movement commands: |%|,
+|(|, |)|, |`|, |/|, |?|, |n|, |N|, |{| and |}|.
+Register "1 is always used then (this is Vi compatible). The "- register is
+used as well if the delete is within a line. Note that these characters may be
+mapped. E.g. |%| is mapped by the matchit plugin.
With each successive deletion or change, Vim shifts the previous contents
of register 1 into register 2, 2 into 3, and so forth, losing the previous
contents of register 9.
@@ -1413,7 +1414,7 @@ The next three commands always work on whole lines.
:[range]m[ove] {address} *:m* *:mo* *:move* *E134*
Move the lines given by [range] to below the line
given by {address}.
- Any text properties in [range] are cleared
+ Any text properties in [range] are cleared. See
|text-prop-cleared|.
==============================================================================
diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt
index f294679..c1fae51 100644
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -1,4 +1,4 @@
-*channel.txt* For Vim version 9.1. Last change: 2024 Jun 13
+*channel.txt* For Vim version 9.1. Last change: 2024 Jul 17
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -981,8 +981,9 @@ job_start({command} [, {options}]) *job_start()*
invoked.
{command} can be a String. This works best on MS-Windows. On
- Unix it is split up in white-separated parts to be passed to
- execvp(). Arguments in double quotes can contain white space.
+ Unix it is split up in white space separated parts to be
+ passed to execvp(). Arguments in double quotes can contain
+ white space.
{command} can be a List, where the first item is the executable
and further items are the arguments. All items are converted
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index 214571f..d1ef7ba 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt* For Vim version 9.1. Last change: 2024 Apr 27
+*cmdline.txt* For Vim version 9.1. Last change: 2024 Aug 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -379,7 +379,8 @@ terminals)
:keepp[atterns] {command} *:keepp* *:keeppatterns*
Execute {command}, without adding anything to the search
- history
+ history and, in case of |:s| or |:&|, without modifying the
+ last substitute pattern or substitute string.
==============================================================================
2. Command-line completion *cmdline-completion*
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index ca8f0ae..4d477cf 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,4 +1,4 @@
-*editing.txt* For Vim version 9.1. Last change: 2024 Apr 12
+*editing.txt* For Vim version 9.1. Last change: 2024 Jul 10
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1804,7 +1804,7 @@ There are three different types of searching:
stop-directories are appended to the path (for the 'path' option) or to
the filename (for the 'tags' option) with a ';'. If you want several
stop-directories separate them with ';'. If you want no stop-directory
- ("search upward till the root directory) just use ';'. >
+ ("search upward till the root directory") just use ';'. >
/usr/include/sys;/usr
< will search in: >
/usr/include/sys
@@ -1817,7 +1817,7 @@ There are three different types of searching:
If Vim's current path is /u/user_x/work/release and you do >
:set path=include;/u/user_x
-< and then search for a file with |gf| the file is searched in: >
+< and then search for a file with |gf| the file is searched in: >
/u/user_x/work/release/include
/u/user_x/work/include
/u/user_x/include
@@ -1829,7 +1829,7 @@ There are three different types of searching:
3) Combined up/downward search:
If Vim's current path is /u/user_x/work/release and you do >
set path=**;/u/user_x
-< and then search for a file with |gf| the file is searched in: >
+< and then search for a file with |gf| the file is searched in: >
/u/user_x/work/release/**
/u/user_x/work/**
/u/user_x/**
@@ -1841,10 +1841,10 @@ There are three different types of searching:
In the above example you might want to set path to: >
:set path=**,/u/user_x/**
-< This searches:
- /u/user_x/work/release/** ~
- /u/user_x/** ~
- This searches the same directories, but in a different order.
+< This searches: >
+ /u/user_x/work/release/**
+ /u/user_x/**
+< This searches the same directories, but in a different order.
Note that completion for ":find", ":sfind", and ":tabfind" commands do not
currently work with 'path' items that contain a URL or use the double star
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 18cd2c1..e2c6967 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 9.1. Last change: 2024 Jun 01
+*eval.txt* For Vim version 9.1. Last change: 2024 Jul 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1995,7 +1995,8 @@ v:beval_winid The |window-ID| of the window, over which the mouse pointer
*v:char* *char-variable*
v:char Argument for evaluating 'formatexpr' and used for the typed
character when using <expr> in an abbreviation |:map-<expr>|.
- It is also used by the |InsertCharPre| and |InsertEnter| events.
+ It is also used by the |InsertCharPre|, |InsertEnter| and
+ |KeyInputPre| events.
*v:charconvert_from* *charconvert_from-variable*
v:charconvert_from
@@ -3123,9 +3124,10 @@ text...
let lconst[0] = 2 " Error!
let lconst[1][0] = 'b' " OK
< *E995*
- |:const| does not allow to for changing a variable: >
+ It is an error to specify an existing variable with
+ |:const|. >
:let x = 1
- :const x = 2 " Error!
+ :const x = 1 " Error!
< *E996*
Note that environment variables, option values and
register values cannot be used here, since they cannot
diff --git a/runtime/doc/evim-it.1 b/runtime/doc/evim-it.1
index 75be4e8..778b54d 100644
--- a/runtime/doc/evim-it.1
+++ b/runtime/doc/evim-it.1
@@ -1,4 +1,4 @@
-.TH EVIM 1 "16 febbraio 2002 "
+.TH EVIM 1 "12 agosto 2024"
.SH NOME
evim \- Vim "facile", impostato in modo da poter essere usato come editore non-modale
.SH SINTASSI
@@ -34,8 +34,12 @@ Occorre usare CTRL-Q per ottenere il comportamenti di CTRL-V in Vim nativo.
Vedere vim(1).
.SH FILE
.TP 15
-/usr/local/lib/vim/evim.vim
+/usr/local/share/vim??/evim.vim
Lo script caricato per inizializzare eVim.
+.br
+.I vim??
+è il numero breve di versione, p.es. vim91 per
+.B Vim 9.1
.SH AKA
[Also Known As] noto anche come "Vim per semplici".
Quando is usa evim si suppone che si prenda un fazzoletto,
diff --git a/runtime/doc/evim-it.UTF-8.1 b/runtime/doc/evim-it.UTF-8.1
index 04bec41..914bec5 100644
--- a/runtime/doc/evim-it.UTF-8.1
+++ b/runtime/doc/evim-it.UTF-8.1
@@ -1,4 +1,4 @@
-.TH EVIM 1 "16 febbraio 2002 "
+.TH EVIM 1 "12 agosto 2024"
.SH NOME
evim \- Vim "facile", impostato in modo da poter essere usato come editore non-modale
.SH SINTASSI
@@ -34,8 +34,12 @@ Occorre usare CTRL-Q per ottenere il comportamenti di CTRL-V in Vim nativo.
Vedere vim(1).
.SH FILE
.TP 15
-/usr/local/lib/vim/evim.vim
+/usr/local/share/vim??/evim.vim
Lo script caricato per inizializzare eVim.
+.br
+.I vim??
+è il numero breve di versione, p.es. vim91 per
+.B Vim 9.1
.SH AKA
[Also Known As] noto anche come "Vim per semplici".
Quando is usa evim si suppone che si prenda un fazzoletto,
diff --git a/runtime/doc/evim-ru.1 b/runtime/doc/evim-ru.1
index 6d6f5de..dab75ce 100644
--- a/runtime/doc/evim-ru.1
+++ b/runtime/doc/evim-ru.1
@@ -1,59 +1,69 @@
-.TH EVIM 1 "2002 February 16"
-.SH éíñ
-evim \- ÐÒÏÓÔÏÊ Vim, ÐÏÚ×ÏÌÑÅÔ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÆÁÊÌ Ó ÐÏÍÏÝØÀ Vim × ÂÅÚÒÅÖÉÍÎÏÍ ÒÅÖÉÍÅ
-.SH ëïíáîäîáñ óôòïëá
+.TH EVIM 1 "12 Á×ÇÕÓÔÁ 2024"
+.SH îáúîáþåîéå
+ðÒÏÇÒÁÍÍÁ evim \[em] ÜÔÏ ÕÐÒÏÝ£ÎÎÙÊ Vim, ËÏÔÏÒÁÑ ÐÒÏÉÚ×ÏÄÉÔ ÚÁÐÕÓË ÒÅÄÁËÔÏÒÁ Vim
+× ÂÅÚÒÅÖÉÍÎÏÍ ×ÁÒÉÁÎÔÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÆÁÊÌÏ×.
+.SH ëòáôëéê ïâúïò
.br
.B evim
-[ËÌÀÞÉ] [ÆÁÊÌ ..]
+[ÁÒÇÕÍÅÎÔÙ] [ÆÁÊÌ ...]
.br
.B eview
.SH ïðéóáîéå
-ëÏÍÁÎÄÁ
+ðÏ ËÏÍÁÎÄÅ
.B evim
-ÚÁÐÕÓËÁÅÔ
+ÚÁÐÕÓËÁÅÔÓÑ ÒÅÄÁËÔÏÒ
.B Vim
-É ÎÁÓÔÒÁÉ×ÁÅÔ ÒÑÄ ÏÐÃÉÊ ÔÁËÉÍ ÏÂÒÁÚÏÍ, ÞÔÏ ÏÎ ÎÁÞÉÎÁÅÔ ×ÅÓÔÉ ÓÅÂÑ
-ËÁË ÏÂÙÞÎÙÊ ÂÅÚÒÅÖÉÍÎÙÊ ÒÅÄÁËÔÏÒ. ÷ ÜÔÏÍ ÒÅÖÉÍÅ Vim ÎÁÐÏÍÉÎÁÅÔ
-Notepad ÉÚ MS-Windows.
+É ×ÙÐÏÌÎÑÅÔÓÑ ÎÁÓÔÒÏÊËÁ ÒÑÄÁ ÐÁÒÁÍÅÔÒÏ× ÔÁËÉÍ ÏÂÒÁÚÏÍ, ÞÔÏÂÙ ÅÇÏ ÒÁÂÏÔÁ ÂÙÌÁ ËÁË
+Õ ÐÒÏÓÔÙÈ ÂÅÚÒÅÖÉÍÎÙÈ ÒÅÄÁËÔÏÒÏ×. ÷ ÜÔÏÍ ÒÅÖÉÍÅ ÒÅÄÁËÔÏÒ Vim ÎÁÐÏÍÉÎÁÅÔ
+ÒÅÄÁËÔÏÒ Notepad ÉÚ MS Windows.
+÷ÁÒÉÁÎÔ ÒÅÄÁËÔÏÒÁ
.B eVim
-×ÓÅÇÄÁ ÚÁÐÕÓËÁÅÔÓÑ Ó ÐÏÄÄÅÒÖËÏÊ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ, ÞÔÏÂÙ ÏÂÅÓÐÅÞÉÔØ
-ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÍÅÎÀ É ÉÎÓÔÒÕÍÅÎÔÁÌØÎÏÊ ÐÁÎÅÌÉ.
+×ÓÅÇÄÁ ÚÁÐÕÓËÁÅÔÓÑ Ó ÐÏÄÄÅÒÖËÏÊ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ, ÞÔÏÂÙ ÂÙÌÁ ×ÏÚÍÏÖÎÏÓÔØ
+×ÚÁÉÍÏÄÅÊÓÔ×ÉÑ Ó ÐÒÏÇÒÁÍÍÏÊ ÞÅÒÅÚ ÍÅÎÀ É ÐÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×.
.PP
-üÔÁ ËÏÍÁÎÄÁ ÓÏÚÄÁÎÁ ÄÌÑ ÔÅÈ, ËÔÏ ÐÏ ËÁËÉÍ-ÔÏ ÐÒÉÞÉÎÁÍ ÎÅ × ÓÏÓÔÏÑÎÉÉ
-ÒÁÂÏÔÁÔØ Ó Vim × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ. òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÆÁÊÌÏ× ÐÒÉ ÜÔÏÍ ÐÒÏÉÓÈÏÄÉÔ
-ÇÏÒÁÚÄÏ ÍÅÎÅÅ ÜÆÆÅËÔÉ×ÎÏ, ÞÅÍ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÏÂÙÞÎÏÇÏ Vim.
+üÔÏÔ ×ÁÒÉÁÎÔ ÒÅÄÁËÔÏÒÁ ÓÄÅÌÁÎ ÄÌÑ ÔÅÈ, ËÔÏ ÐÏ ËÁËÉÍ-ÔÏ ÐÒÉÞÉÎÁÍ ÎÅ × ÓÏÓÔÏÑÎÉÉ
+ÒÁÂÏÔÁÔØ Ó ÏÂÙÞÎÙÍ ÒÅÄÁËÔÏÒÏÍ Vim. òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÆÁÊÌÏ× ÐÒÉ ÜÔÏÍ ÐÒÏÉÓÈÏÄÉÔ
+ÇÏÒÁÚÄÏ ÍÅÎÅÅ ÜÆÆÅËÔÉ×ÎÏ, ÞÅÍ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÓÔÁÎÄÁÒÔÎÏÇÏ ×ÁÒÉÁÎÔÁ ÒÅÄÁËÔÏÒÁ.
.PP
-ëÏÍÁÎÄÁ
+ðÏ ËÏÍÁÎÄÅ
.B eview
-×ÙÐÏÌÎÑÅÔ ÐÏÞÔÉ ÔÕ ÖÅ ÓÁÍÕÀ ÚÁÄÁÞÕ, ÎÏ ÆÁÊÌ ÏÔËÒÙ×ÁÅÔÓÑ × ÒÅÖÉÍÅ "ÔÏÌØËÏ
-ÄÌÑ ÞÔÅÎÉÑ". éÓÐÏÌØÚÏ×ÁÎÉÅ ÜÔÏÊ ËÏÍÁÎÄÙ ÐÏÌÎÏÓÔØÀ ÉÄÅÎÔÉÞÎÏ ÉÓÐÏÌØÚÏ×ÁÎÉÀ
-evim \-R.
+×ÙÐÏÌÎÑÀÔÓÑ ÐÏÞÔÉ ÔÅ ÖÅ ÓÁÍÙÅ ÄÅÊÓÔ×ÉÑ, ÎÏ ÆÁÊÌ ÂÕÄÅÔ ÏÔËÒÙÔ "ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ".
+éÓÐÏÌØÚÏ×ÁÎÉÅ ÜÔÏÊ ËÏÍÁÎÄÙ ÐÏÌÎÏÓÔØÀ ÉÄÅÎÔÉÞÎÏ ËÏÍÁÎÄÅ evim \-R.
.PP
-ðÏÄÒÏÂÎÅÅ Ï Vim, ËÌÀÞÁÈ ÚÁÐÕÓËÁ É Ô.Ð. ÓÍÏÔÒÉÔÅ ÎÁ ÓÔÒÁÎÉÃÅ ÓÐÒÁ×ÏÞÎÉËÁ
+ðÏÄÒÏÂÎÅÅ Ï ÒÅÄÁËÔÏÒÅ Vim, ÁÒÇÕÍÅÎÔÁÈ ÚÁÐÕÓËÁ É Ô. Ð. ÓÍÏÔÒÉÔÅ × ÓÐÒÁ×ÏÞÎÉËÅ
vim(1).
.PP
-ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ
+ðÏ ËÏÍÁÎÄÅ
.B evim
-×ËÌÀÞÁÅÔÓÑ ÏÐÃÉÑ 'insertmode', ÞÔÏ ÐÏÚ×ÏÌÑÅÔ ××ÏÄÉÔØ ÔÅËÓÔ ÎÁÐÒÑÍÕÀ.
+ÂÕÄÅÔ ÕÓÔÁÎÏ×ÌÅÎ ÐÁÒÁÍÅÔÒ 'insertmode', ÞÔÏ ÏÂÅÓÐÅÞÉ×ÁÅÔ ××ÏÄ ÔÅËÓÔÁ ÎÁÐÒÑÍÕÀ ×
+ÂÕÆÅÒ.
.br
-ëÒÏÍÅ ÔÏÇÏ, ÎÁÓÔÒÁÉ×ÁÀÔÓÑ ÐÒÉ×ÑÚËÉ, ÐÏÚ×ÏÌÑÀÝÉÅ ÉÓÐÏÌØÚÏ×ÁÔØ ËÎÏÐËÉ MS-Windows
-ÄÌÑ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄ ËÏÐÉÒÏ×ÁÎÉÑ É ×ËÌÅÊËÉ. CTRL-X ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ×ÙÒÅÚÁÎÉÑ
-ÔÅËÓÔÁ, CTRL-C ÄÌÑ ËÏÐÉÒÏ×ÁÎÉÑ É CTRL-V ÄÌÑ ×ËÌÅÊËÉ. þÔÏÂÙ ×ÏÓÐÏÌØÚÏ×ÁÔØÓÑ
-ÉÚÎÁÞÁÌØÎÙÍ ÚÎÁÞÅÎÉÅÍ ËÎÏÐËÉ CTRL-V, ÉÓÐÏÌØÚÕÊÔÅ CTRL-Q.
-.SH ðáòáíåôòù úáðõóëá
-óÍ. vim(1).
+ëÒÏÍÅ ÔÏÇÏ, ÎÁÓÔÒÁÉ×ÁÀÔÓÑ ËÌÁ×ÉÁÔÕÒÎÙÅ ËÏÍÁÎÄÙ, ÐÏÚ×ÏÌÑÀÝÉÅ ×ÙÐÏÌÎÑÔØ
+ËÏÐÉÒÏ×ÁÎÉÅ É ×ÓÔÁ×ËÕ ÔÅËÓÔÁ, ÉÓÐÏÌØÚÕÑ ÔÁËÉÅ ÖÅ ËÏÍÂÉÎÁÃÉÉ ËÌÁ×ÉÛ,
+ËÁË × MS Windows.
+ëÌÁ×ÉÛÉ CTRL+X ÉÓÐÏÌØÚÕÀÔÓÑ ÄÌÑ ×ÙÒÅÚÁÎÉÑ ÔÅËÓÔÁ, CTRL+C ÄÌÑ ËÏÐÉÒÏ×ÁÎÉÑ
+É CTRL+V ÄÌÑ ×ÓÔÁ×ËÉ.
+þÔÏÂÙ ×ÙÐÏÌÎÉÔØ ÔÕ ÖÅ ËÏÍÁÎÄÕ, ËÏÔÏÒÁÑ ÒÁÎØÛÅ ÂÙÌÁ ÎÁÚÎÁÞÅÎÁ ÎÁ ËÌÁ×ÉÛÉ CTRL+V,
+ÉÓÐÏÌØÚÕÊÔÅ ËÌÁ×ÉÛÉ CTRL+Q.
+.SH áòçõíåîôù ëïíáîäîïê óôòïëé
+óÍ. ÓÐÒÁ×ÏÞÎÉË vim(1).
.SH æáêìù
.TP 15
-/usr/local/lib/vim/evim.vim
+/usr/local/share/vim/vim??/evim.vim
óÃÅÎÁÒÉÊ, ËÏÔÏÒÙÊ ÚÁÇÒÕÖÁÅÔÓÑ ÄÌÑ ÉÎÉÃÉÁÌÉÚÁÃÉÉ eVim.
-.SH AKA
-eVim ÔÁËÖÅ ÉÚ×ÅÓÔÅÎ ËÁË "Vim ÄÌÑ ÞÁÊÎÉËÏ×".
+.br
+úÄÅÓØ
+.I "vim??"
+ÏÚÎÁÞÁÅÔ ÓÏËÒÁÝ£ÎÎÕÀ ÚÁÐÉÓØ ÎÏÍÅÒÁ ×ÅÒÓÉÉ, ÎÁÐÒÉÍÅÒ, vim91 ÄÌÑ ×ÅÒÓÉÉ ÒÅÄÁËÔÏÒÁ
+.B Vim 9.1
+.SH äòõçéíé óìï÷áíé
+÷ÁÒÉÁÎÔ eVim ÔÁËÖÅ ÉÚ×ÅÓÔÅÎ ËÁË "Vim ÄÌÑ ÞÁÊÎÉËÏ×".
äÌÑ ÎÁÉÌÕÞÛÅÇÏ ÜÆÆÅËÔÁ ÒÅËÏÍÅÎÄÕÅÔÓÑ ×Ï ×ÒÅÍÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÐÏ×ÑÚÁÔØ
ÎÁ ÇÏÌÏ×Å ÐÌÁÔÏË, ÐÒÅÄ×ÁÒÉÔÅÌØÎÏ ÚÁ×ÑÚÁ× ÎÁ ËÁÖÄÏÍ ËÏÎÃÅ ÐÏ ÕÚÅÌËÕ.
-.SH óíïôòé ôáëöå
+.SH óíïôòéôå ôáëöå
vim(1)
.SH á÷ôïòù
-âÏÌØÛÁÑ ÞÁÓÔØ
+âÏÌØÛÁÑ ÞÁÓÔØ ÒÅÄÁËÔÏÒÁ
.B Vim
-ÓÏÚÄÁÎÁ âÒÁÍÏÍ íÏÏÌÅÎÁÁÒÏÍ (Bram Moolenaar), ËÏÔÏÒÏÍÕ ÐÏÍÏÇÁÅÔ ÏÇÒÏÍÎÏÅ
-ËÏÌÉÞÅÓÔ×Ï ÌÀÄÅÊ. óÍ. ÍÅÎÀ óÐÒÁ×ËÁ/âÌÁÇÏÄÁÒÎÏÓÔÉ.
+ÂÙÌÁ ÓÏÚÄÁÎÁ âÒÁÍÏÍ íÏÌÅÎÁÒÏÍ (Bram Moolenaar), ËÏÔÏÒÏÍÕ ÐÏÍÏÇÁÌÏ ÏÇÒÏÍÎÏÅ
+ËÏÌÉÞÅÓÔ×Ï ÌÀÄÅÊ. óÍ. ÍÅÎÀ óÐÒÁ×ËÁ ÐÕÎËÔ óÏÁ×ÔÏÒÙ.
diff --git a/runtime/doc/evim-ru.UTF-8.1 b/runtime/doc/evim-ru.UTF-8.1
index 581c364..8ac2669 100644
--- a/runtime/doc/evim-ru.UTF-8.1
+++ b/runtime/doc/evim-ru.UTF-8.1
@@ -1,59 +1,69 @@
-.TH EVIM 1 "2002 February 16"
-.SH ИМЯ
-evim \- проÑтой Vim, позволÑет редактировать файл Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Vim в безрежимном режиме
-.SH КОМÐÐДÐÐЯ СТРОКÐ
+.TH EVIM 1 "12 авгуÑта 2024"
+.SH ÐÐЗÐÐЧЕÐИЕ
+Программа evim \[em] Ñто упрощённый Vim, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ запуÑк редактора Vim
+в безрежимном варианте Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð².
+.SH КРÐТКИЙ ОБЗОР
.br
.B evim
-[ключи] [файл ..]
+[аргументы] [файл ...]
.br
.B eview
.SH ОПИСÐÐИЕ
-Команда
+По команде
.B evim
-запуÑкает
+запуÑкаетÑÑ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€
.B Vim
-и наÑтраивает Ñ€Ñд опций таким образом, что он начинает веÑти ÑебÑ
-как обычный безрежимный редактор. Ð’ Ñтом режиме Vim напоминает
-Notepad из MS-Windows.
+и выполнÑетÑÑ Ð½Ð°Ñтройка Ñ€Ñда параметров таким образом, чтобы его работа была как
+у проÑÑ‚Ñ‹Ñ… безрежимных редакторов. Ð’ Ñтом режиме редактор Vim напоминает
+редактор Notepad из MS Windows.
+Вариант редактора
.B eVim
-вÑегда запуÑкаетÑÑ Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ графичеÑкого интерфейÑа, чтобы обеÑпечить
-иÑпользование меню и инÑтрументальной панели.
+вÑегда запуÑкаетÑÑ Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ графичеÑкого интерфейÑа, чтобы была возможноÑÑ‚ÑŒ
+взаимодейÑÑ‚Ð²Ð¸Ñ Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹ через меню и панель инÑтрументов.
.PP
-Эта команда Ñоздана Ð´Ð»Ñ Ñ‚ÐµÑ…, кто по каким-то причинам не в ÑоÑтоÑнии
-работать Ñ Vim в обычном режиме. Редактирование файлов при Ñтом проиÑходит
-гораздо менее Ñффективно, чем при иÑпользовании обычного Vim.
+Этот вариант редактора Ñделан Ð´Ð»Ñ Ñ‚ÐµÑ…, кто по каким-то причинам не в ÑоÑтоÑнии
+работать Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ редактором Vim. Редактирование файлов при Ñтом проиÑходит
+гораздо менее Ñффективно, чем при иÑпользовании Ñтандартного варианта редактора.
.PP
-Команда
+По команде
.B eview
-выполнÑет почти ту же Ñамую задачу, но файл открываетÑÑ Ð² режиме "только
-Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ". ИÑпользование Ñтой команды полноÑтью идентично иÑпользованию
-evim \-R.
+выполнÑÑŽÑ‚ÑÑ Ð¿Ð¾Ñ‡Ñ‚Ð¸ те же Ñамые дейÑтвиÑ, но файл будет открыт "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ".
+ИÑпользование Ñтой команды полноÑтью идентично команде evim \-R.
.PP
-Подробнее о Vim, ключах запуÑка и Ñ‚.п. Ñмотрите на Ñтранице Ñправочника
+Подробнее о редакторе Vim, аргументах запуÑка и Ñ‚. п. Ñмотрите в Ñправочнике
vim(1).
.PP
-При иÑпользовании
+По команде
.B evim
-включаетÑÑ Ð¾Ð¿Ñ†Ð¸Ñ 'insertmode', что позволÑет вводить текÑÑ‚ напрÑмую.
+будет уÑтановлен параметр 'insertmode', что обеÑпечивает ввод текÑта напрÑмую в
+буфер.
.br
-Кроме того, наÑтраиваютÑÑ Ð¿Ñ€Ð¸Ð²Ñзки, позволÑющие иÑпользовать кнопки MS-Windows
-Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ вклейки. CTRL-X иÑпользуетÑÑ Ð´Ð»Ñ Ð²Ñ‹Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ
-текÑта, CTRL-C Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ CTRL-V Ð´Ð»Ñ Ð²ÐºÐ»ÐµÐ¹ÐºÐ¸. Чтобы воÑпользоватьÑÑ
-изначальным значением кнопки CTRL-V, иÑпользуйте CTRL-Q.
-.SH ПÐРÐМЕТРЫ ЗÐПУСКÐ
-См. vim(1).
+Кроме того, наÑтраиваютÑÑ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð½Ñ‹Ðµ команды, позволÑющие выполнÑÑ‚ÑŒ
+копирование и вÑтавку текÑта, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ‚Ð°ÐºÐ¸Ðµ же комбинации клавиш,
+как в MS Windows.
+Клавиши CTRL+X иÑпользуютÑÑ Ð´Ð»Ñ Ð²Ñ‹Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта, CTRL+C Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ
+и CTRL+V Ð´Ð»Ñ Ð²Ñтавки.
+Чтобы выполнить ту же команду, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ€Ð°Ð½ÑŒÑˆÐµ была назначена на клавиши CTRL+V,
+иÑпользуйте клавиши CTRL+Q.
+.SH ÐРГУМЕÐТЫ КОМÐÐДÐОЙ СТРОКИ
+См. Ñправочник vim(1).
.SH ФÐЙЛЫ
.TP 15
-/usr/local/lib/vim/evim.vim
+/usr/local/share/vim/vim??/evim.vim
Сценарий, который загружаетÑÑ Ð´Ð»Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ eVim.
-.SH AKA
-eVim также извеÑтен как "Vim Ð´Ð»Ñ Ñ‡Ð°Ð¹Ð½Ð¸ÐºÐ¾Ð²".
+.br
+ЗдеÑÑŒ
+.I "vim??"
+означает Ñокращённую запиÑÑŒ номера верÑии, например, vim91 Ð´Ð»Ñ Ð²ÐµÑ€Ñии редактора
+.B Vim 9.1
+.SH ДРУГИМИ СЛОВÐМИ
+Вариант eVim также извеÑтен как "Vim Ð´Ð»Ñ Ñ‡Ð°Ð¹Ð½Ð¸ÐºÐ¾Ð²".
Ð”Ð»Ñ Ð½Ð°Ð¸Ð»ÑƒÑ‡ÑˆÐµÐ³Ð¾ Ñффекта рекомендуетÑÑ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð²Ñзать
на голове платок, предварительно завÑзав на каждом конце по узелку.
-.SH СМОТРИ ТÐКЖЕ
+.SH СМОТРИТЕ ТÐКЖЕ
vim(1)
.SH ÐВТОРЫ
-Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ
+Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ редактора
.B Vim
-Ñоздана Брамом Мооленааром (Bram Moolenaar), которому помогает огромное
-количеÑтво людей. См. меню Справка/БлагодарноÑти.
+была Ñоздана Брамом Моленаром (Bram Moolenaar), которому помогало огромное
+количеÑтво людей. См. меню Справка пункт Соавторы.
diff --git a/runtime/doc/evim.1 b/runtime/doc/evim.1
index bb859ce..a67bda3 100644
--- a/runtime/doc/evim.1
+++ b/runtime/doc/evim.1
@@ -1,4 +1,4 @@
-.TH EVIM 1 "2002 February 16"
+.TH EVIM 1 "2024 August 12"
.SH NAME
evim \- easy Vim, edit a file with Vim and setup for modeless editing
.SH SYNOPSIS
@@ -34,8 +34,12 @@ Use CTRL-Q to obtain the original meaning of CTRL-V.
See vim(1).
.SH FILES
.TP 15
-/usr/local/lib/vim/evim.vim
+/usr/local/share/vim/vim??/evim.vim
The script loaded to initialize eVim.
+.br
+.I vim??
+is short version number, like vim91 for
+.B Vim 9.1
.SH AKA
Also Known As "Vim for gumbies".
When using evim you are expected to take a handkerchief,
diff --git a/runtime/doc/evim.man b/runtime/doc/evim.man
index 8b8db81..f966f82 100644
--- a/runtime/doc/evim.man
+++ b/runtime/doc/evim.man
@@ -1,4 +1,4 @@
-EVIM(1) EVIM(1)
+EVIM(1) General Commands Manual EVIM(1)
@@ -10,7 +10,7 @@ SYNOPSIS
eview
DESCRIPTION
- eVim starts Vim and sets options to make it behave like a modeless edi-
+ eVim starts Vim and sets options to make it behave like a modeless ediâ€
tor. This is still Vim but used as a point-and-click editor. This
feels a lot like using Notepad on MS-Windows. eVim will always run in
the GUI, to enable the use of menus and toolbar.
@@ -32,8 +32,9 @@ OPTIONS
See vim(1).
FILES
- /usr/local/lib/vim/evim.vim
+ /usr/local/share/vim/vim??/evim.vim
The script loaded to initialize eVim.
+ vim?? is short version number, like vim91 for Vim 9.1
AKA
Also Known As "Vim for gumbies". When using evim you are expected to
@@ -49,4 +50,4 @@ AUTHOR
- 2002 February 16 EVIM(1)
+ 2024 August 12 EVIM(1)
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 927b75c..a7ed928 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -1,4 +1,4 @@
-*filetype.txt* For Vim version 9.1. Last change: 2024 May 23
+*filetype.txt* For Vim version 9.1. Last change: 2024 Aug 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -149,6 +149,7 @@ variables can be used to overrule the filetype used for certain extensions:
*.csh g:filetype_csh |ft-csh-syntax|
*.dat g:filetype_dat
*.def g:filetype_def
+ *.dsp g:filetype_dsp
*.f g:filetype_f |ft-forth-syntax|
*.frm g:filetype_frm |ft-form-syntax|
*.fs g:filetype_fs |ft-forth-syntax|
@@ -622,6 +623,17 @@ any #lang directive overrides, use the following command: >
let g:freebasic_lang = "fblite"
+GDSCRIPT *ft-gdscript-plugin*
+
+By default the following options are set, based on Godot official docs: >
+
+ setlocal noexpandtab softtabstop=0 shiftwidth=0
+
+To disable this behavior, set the following variable in your vimrc: >
+
+ let g:gdscript_recommended_style = 0
+
+
GIT COMMIT *ft-gitcommit-plugin*
One command, :DiffGitCached, is provided to show a diff of the current commit
@@ -629,6 +641,17 @@ in the preview window. It is equivalent to calling "git diff --cached" plus
any arguments given to the command.
+GO *ft-go-plugin*
+
+By default the following options are set, based on Golang official docs: >
+
+ setlocal noexpandtab softtabstop=0 shiftwidth=0
+
+To disable this behavior, set the following variable in your vimrc: >
+
+ let g:go_recommended_style = 0
+
+
GPROF *ft-gprof-plugin*
The gprof filetype plugin defines a mapping <C-]> to jump from a function
@@ -730,9 +753,13 @@ Global mapping:
nmap <F1> <Plug>ManPreGetPage
Local mappings:
+<Plug>ManBS
+<LocalLeader>h Clear backspace <BS> characters from the buffer
CTRL-] Jump to the manual page for the word under the cursor.
CTRL-T Jump back to the previous manual page.
-q Same as the |:quit| command.
+
+The mappings can be disabled with: >
+ let g:no_man_maps = 1
To use a vertical split instead of horizontal: >
let g:ft_man_open_mode = 'vert'
@@ -741,8 +768,8 @@ To use a new tab: >
To enable |folding|, use this: >
let g:ft_man_folding_enable = 1
-If you do not like the default folding, use an |autocommand| to add your desired
-folding style instead. For example: >
+If you do not like the default folding, use an |autocommand| to add your
+desired folding style instead. For example: >
autocmd FileType man setlocal foldmethod=indent foldenable
If you would like :Man {number} {name} to behave like man {number} {name} by
@@ -885,6 +912,10 @@ You can change the default by defining the variable g:tex_flavor to the format
let g:tex_flavor = "latex"
Currently no other formats are recognized.
+TYPST *ft-typst-plugin*
+
+ *g:typst_conceal*
+When |TRUE| the Typst filetype plugin will set the 'conceallevel' option to 2.
VIM *ft-vim-plugin*
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index 3b55919..071de9c 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt* For Vim version 9.1. Last change: 2024 May 11
+*gui.txt* For Vim version 9.1. Last change: 2024 Jul 17
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -970,7 +970,7 @@ name and all existing submenus below it are affected.
5.7 Examples for Menus *menu-examples*
-Here is an example on how to add menu items with menu's! You can add a menu
+Here is an example on how to add menu items with menus. You can add a menu
item for the keyword under the cursor. The register "z" is used. >
:nmenu Words.Add\ Var wb"zye:menu! Words.<C-R>z <C-R>z<CR>
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index d26592a..c595d9d 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt* For Vim version 9.1. Last change: 2023 Jan 09
+*index.txt* For Vim version 9.1. Last change: 2023 Jul 14
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -213,10 +213,12 @@ tag char note action in Normal mode ~
|<Tab>| <Tab> 1 go to N newer entry in jump list
|CTRL-I| CTRL-I 1 same as <Tab>
|<NL>| <NL> 1 same as "j"
+|<S-NL>| <S-NL> 1 same as CTRL-F
|CTRL-J| CTRL-J 1 same as "j"
CTRL-K not used
|CTRL-L| CTRL-L redraw screen
|<CR>| <CR> 1 cursor to the first CHAR N lines lower
+|<S-CR>| <S-CR> 1 same as CTRL-F
|CTRL-M| CTRL-M 1 same as <CR>
|CTRL-N| CTRL-N 1 same as "j"
|CTRL-O| CTRL-O 1 go to N older entry in jump list
@@ -287,9 +289,11 @@ tag char note action in Normal mode ~
|star| * 1 search forward for the Nth occurrence of
the ident under the cursor
|+| + 1 same as <CR>
+|<S-Plus>| <S-+> 1 same as CTRL-F
|,| , 1 repeat latest f, t, F or T in opposite
direction N times
|-| - 1 cursor to the first CHAR N lines higher
+|<S-Minus>| <S--> 1 same as CTRL-B
|.| . 2 repeat last change with count replaced with
N
|/| /{pattern}<CR> 1 search forward for the Nth occurrence of
@@ -753,7 +757,7 @@ tag char note action in Normal mode ~
search pattern and Visually select it
|gP| ["x]gP 2 put the text [from register x] before the
cursor N times, leave the cursor after it
-|gQ| gQ switch to "Ex" mode with Vim editing
+|gQ| gQ switch to "Ex" mode with Vim editing
|gR| gR 2 enter Virtual Replace mode
|gT| gT go to the previous tab page
|gU| gU{motion} 2 make Nmove text uppercase
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
index 6ebd83e..3894e5c 100644
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt* For Vim version 9.1. Last change: 2024 Jan 04
+*insert.txt* For Vim version 9.1. Last change: 2024 Aug 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1183,6 +1183,18 @@ items:
user_data custom data which is associated with the item and
available in |v:completed_item|; it can be any type;
defaults to an empty string
+ hl_group an additional highlight group whose attributes are
+ combined with |hl-PmenuSel| and |hl-Pmenu| or
+ |hl-PmenuMatchSel| and |hl-PmenuMatch| highlight
+ attributes in the popup menu to apply cterm and gui
+ properties (with higher priority) like strikethrough
+ to the completion items
+ kind_hlgroup an additional highlight group specifically for setting
+ the highlight attributes of the completion kind. When
+ this field is present, it will override the
+ |hl-PmenuKind| highlight group, allowing for the
+ customization of ctermfg and guifg properties for the
+ completion kind
All of these except "icase", "equal", "dup" and "empty" must be a string. If
an item does not meet these requirements then an error message is given and
@@ -1995,13 +2007,25 @@ These two commands will keep on asking for lines, until you type a line
containing only a ".". Watch out for lines starting with a backslash, see
|line-continuation|.
-When in Ex mode (see |-e|) a backslash at the end of the line can be used to
-insert a NUL character. To be able to have a line ending in a backslash use
-two backslashes. This means that the number of backslashes is halved, but
-only at the end of the line.
-
-NOTE: These commands cannot be used with |:global| or |:vglobal|.
-":append" and ":insert" don't work properly in between ":if" and
+Text typed after a "|" command separator is used first. So the following
+command in ex mode: >
+ :a|one
+ two
+ .
+ :visual
+appends the following text, after the cursor line: >
+ one
+ two
+<
+In |Ex-mode|, when these commands are used with |:global| or |:vglobal| then
+the lines are obtained from the text following the command. Separate lines
+with a NL escaped with a backslash: >
+ :global/abc/insert\
+ one line\
+ another line
+The final "." is not needed then.
+
+NOTE: ":append" and ":insert" don't work properly in between ":if" and
":endif", ":for" and ":endfor", ":while" and ":endwhile".
*:start* *:startinsert*
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 365f49a..432a986 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt* For Vim version 9.1. Last change: 2024 May 05
+*map.txt* For Vim version 9.1. Last change: 2024 Jul 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1631,6 +1631,7 @@ completion can be enabled:
-complete=compiler compilers
-complete=cscope |:cscope| suboptions
-complete=dir directory names
+ -complete=dir_in_path directory names in |'cdpath'|
-complete=environment environment variable names
-complete=event autocommand events
-complete=expression Vim expression
diff --git a/runtime/doc/mbyte.txt b/runtime/doc/mbyte.txt
index 3bb2bfb..f02092b 100644
--- a/runtime/doc/mbyte.txt
+++ b/runtime/doc/mbyte.txt
@@ -1,4 +1,4 @@
-*mbyte.txt* For Vim version 9.1. Last change: 2024 Jun 09
+*mbyte.txt* For Vim version 9.1. Last change: 2024 Jul 17
VIM REFERENCE MANUAL by Bram Moolenaar et al.
@@ -493,7 +493,7 @@ The GUI fully supports multibyte characters. It is also possible in a
terminal, if the terminal supports the same encoding that Vim uses. Thus this
is less flexible.
-For example, you can run Vim in a xterm with added multibyte support and/or
+For example, you can run Vim in an xterm with added multibyte support and/or
|XIM|. Examples are kterm (Kanji term) and hanterm (for Korean), Eterm
(Enlightened terminal) and rxvt.
@@ -1379,7 +1379,7 @@ Motif. Use the ":hi Menu font={fontname}" command for this. |:highlight|
TYPING UTF-8 *utf-8-typing*
If you are using X-Windows, you should find an input method that supports
-UTF-8.
+the UTF-8 encoding.
If your system does not provide support for typing UTF-8, you can use the
'keymap' feature. This allows writing a keymap file, which defines a UTF-8
diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt
index 82c9772..9a15bdf 100644
--- a/runtime/doc/mlang.txt
+++ b/runtime/doc/mlang.txt
@@ -1,4 +1,4 @@
-*mlang.txt* For Vim version 9.1. Last change: 2022 Sep 17
+*mlang.txt* For Vim version 9.1. Last change: 2024 Jul 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -59,7 +59,9 @@ use of "-" and "_".
:lan[guage] tim[e] {name}
:lan[guage] col[late] {name}
Set the current language (aka locale) to {name}.
- The locale {name} must be a valid locale on your
+ The POSIX format of {name} is: >
+ language[_territory][.encoding]
+< The locale {name} must be a valid locale on your
system. Some systems accept aliases like "en" or
"en_US", but some only accept the full specification
like "en_US.ISO_8859-1". On Unix systems you can use
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
index 8c07fbf..3e45884 100644
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -1,4 +1,4 @@
-*motion.txt* For Vim version 9.1. Last change: 2023 Dec 27
+*motion.txt* For Vim version 9.1. Last change: 2024 Jul 14
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -351,6 +351,7 @@ gg Goto line [count], default first line, on the first
*:[range]*
:[range] Set the cursor on the last line number in [range].
+ In Ex mode, print the lines in [range].
[range] can also be just one line number, e.g., ":1"
or ":'m".
In contrast with |G| this command does not modify the
@@ -433,7 +434,7 @@ WORD before the fold.
Special case: "cw" and "cW" are treated like "ce" and "cE" if the cursor is
on a non-blank. This is because "cw" is interpreted as change-word, and a
-word does not include the following white space.
+word does not include the following white space (see also |cw|).
Another special case: When using the "w" motion in combination with an
operator and the last word moved over is at the end of a line, the end of
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 6ec4031..3ec8a3a 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt* For Vim version 9.1. Last change: 2024 Jun 17
+*options.txt* For Vim version 9.1. Last change: 2024 Aug 12
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -76,7 +76,8 @@ achieve special effects. These options come in three forms:
:se[t] {option}:{value}
Set string or number option to {value}.
For numeric options the value can be given in decimal,
- hex (preceded with 0x) or octal (preceded with '0').
+ hex (preceded with 0x) or octal (preceded with '0' or
+ '0o').
The old value can be inserted by typing 'wildchar' (by
default this is a <Tab> or CTRL-E if 'compatible' is
set). Many string options with fixed syntax and names
@@ -1476,7 +1477,7 @@ A jump table for the options with a short description can be found at |Q_op|.
applying 'breakindent', even if the resulting
text should normally be narrower. This prevents
text indented almost to the right window border
- occupying lot of vertical space when broken.
+ occupying lots of vertical space when broken.
(default: 20)
shift:{n} After applying 'breakindent', the wrapped line's
beginning will be shifted by the given number of
@@ -2257,8 +2258,9 @@ A jump table for the options with a short description can be found at |Q_op|.
Also see 'preserveindent'.
*'cpoptions'* *'cpo'* *cpo*
-'cpoptions' 'cpo' string (Vim default: "aABceFs",
- Vi default: all flags)
+'cpoptions' 'cpo' string (Vim default: "aABceFsz",
+ Vi default: all flags, except "#{|&/\."
+ |$VIM_POSIX|: all flags)
global
A sequence of single character flags. When a character is present
this indicates Vi-compatible behavior. This is used for things where
@@ -2486,6 +2488,9 @@ A jump table for the options with a short description can be found at |Q_op|.
*cpo-Z*
Z When using "w!" while the 'readonly' option is set,
don't reset 'readonly'.
+ *cpo-z*
+ z Special casing the "cw" and "d" command (see |cw| and
+ |d-special|).
*cpo-!*
! When redoing a filter command, use the last used
external command, whatever it was. Otherwise the last
@@ -4727,7 +4732,7 @@ A jump table for the options with a short description can be found at |Q_op|.
in Insert mode as specified with the 'indentkeys' option.
When this option is not empty, it overrules the 'cindent' and
'smartindent' indenting. When 'lisp' is set, this option is
- is only used when 'lispoptions' contains "expr:1".
+ only used when 'lispoptions' contains "expr:1".
When 'paste' is set this option is not used for indenting.
The expression is evaluated with |v:lnum| set to the line number for
which the indent is to be computed. The cursor is also in this line
@@ -5090,7 +5095,7 @@ A jump table for the options with a short description can be found at |Q_op|.
part can be in one of two forms:
1. A list of pairs. Each pair is a "from" character immediately
followed by the "to" character. Examples: "aA", "aAbBcC".
- 2. A list of "from" characters, a semi-colon and a list of "to"
+ 2. A list of "from" characters, a semicolon and a list of "to"
characters. Example: "abc;ABC"
Example: "aA,fgh;FGH,cCdDeE"
Special characters need to be preceded with a backslash. These are
@@ -5172,7 +5177,7 @@ A jump table for the options with a short description can be found at |Q_op|.
update use |:redraw|.
This may occasionally cause display errors. It is only meant to be set
temporarily when performing an operation where redrawing may cause
- flickering or cause a slow down.
+ flickering or cause a slowdown.
*'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
'linebreak' 'lbr' boolean (default off)
@@ -5913,6 +5918,20 @@ A jump table for the options with a short description can be found at |Q_op|.
(without "unsigned" it would become "9-2019").
Using CTRL-X on "0" or CTRL-A on "18446744073709551615"
(2^64 - 1) has no effect, overflow is prevented.
+ blank If included, treat numbers as signed or unsigned based on
+ preceding whitespace. If a number with a leading dash has its
+ dash immediately preceded by a non-whitespace character (i.e.,
+ not a tab or a " "), the negative sign won't be considered as
+ part of the number. For example:
+ Using CTRL-A on "14" in "Carbon-14" results in "Carbon-15"
+ (without "blank" it would become "Carbon-13").
+ Using CTRL-X on "8" in "Carbon -8" results in "Carbon -9"
+ (because -8 is preceded by whitespace. If "unsigned" was
+ set, it would result in "Carbon -7").
+ If this format is included, overflow is prevented as if
+ "unsigned" were set. If both this format and "unsigned" are
+ included, "unsigned" will take precedence.
+
Numbers which simply begin with a digit in the range 1-9 are always
considered decimal. This also happens for numbers that are not
recognized as octal or hex.
@@ -6160,7 +6179,7 @@ A jump table for the options with a short description can be found at |Q_op|.
:set path+=
< To use an environment variable, you probably need to replace the
separator. Here is an example to append $INCL, in which directory
- names are separated with a semi-colon: >
+ names are separated with a semicolon: >
:let &path = &path .. "," .. substitute($INCL, ';', ',', 'g')
< Replace the ';' with a ':' or whatever separator is used. Note that
this doesn't work when $INCL contains a comma or white space.
@@ -6739,7 +6758,7 @@ A jump table for the options with a short description can be found at |Q_op|.
import/ files that are found by `:import`
indent/ indent scripts |indent-expression|
keymap/ key mapping files |mbyte-keymap|
- lang/ menu translations |:menutrans|
+ lang/ message translations |:menutrans| and |multi-lang|
menu.vim GUI menus |menu.vim|
pack/ packages |:packadd|
plugin/ plugin scripts |write-plugin|
@@ -7227,7 +7246,7 @@ A jump table for the options with a short description can be found at |Q_op|.
POSIX default: "AS")
global *E1336*
This option helps to avoid all the |hit-enter| prompts caused by file
- messages, for example with CTRL-G, and to avoid some other messages.
+ messages, for example with CTRL-G, and to avoid some other messages.
It is a list of flags:
flag meaning when present ~
f use "(3 of 5)" instead of "(file 3 of 5)" *shm-f*
@@ -7684,7 +7703,7 @@ A jump table for the options with a short description can be found at |Q_op|.
minus two.
timeout:{millisec} Limit the time searching for suggestions to
- {millisec} milli seconds. Applies to the following
+ {millisec} milliseconds. Applies to the following
methods. When omitted the limit is 5000. When
negative there is no limit. {only works when built
with the |+reltime| feature}
@@ -8086,6 +8105,19 @@ A jump table for the options with a short description can be found at |Q_op|.
'S' flag in 'cpoptions'.
Only normal file name characters can be used, "/\*?[|<>" are illegal.
+ *'tabclose'* *'tcl'*
+'tabclose' 'tcl' string (default "")
+ global
+ This option controls the behavior when closing tab pages (e.g., using
+ |:tabclose|). When empty Vim goes to the next (right) tab page.
+
+ Possible values (comma-separated list):
+ left If included, go to the previous tab page instead of
+ the next one.
+ uselast If included, go to the previously used tab page if
+ possible. This option takes precedence over the
+ others.
+
*'tabline'* *'tal'*
'tabline' 'tal' string (default empty)
global
diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt
index 183806a..4351944 100644
--- a/runtime/doc/pattern.txt
+++ b/runtime/doc/pattern.txt
@@ -1,4 +1,4 @@
-*pattern.txt* For Vim version 9.1. Last change: 2024 Jun 03
+*pattern.txt* For Vim version 9.1. Last change: 2024 Jun 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -151,13 +151,17 @@ CTRL-C Interrupt current (search) command. Use CTRL-Break on
executing autocommands |autocmd-searchpat|.
Same thing for when invoking a user function.
+
While typing the search pattern the current match will be shown if the
'incsearch' option is on. Remember that you still have to finish the search
command with <CR> to actually position the cursor at the displayed match. Or
use <Esc> to abandon the search.
+ *nohlsearch-auto*
All matches for the last used search pattern will be highlighted if you set
-the 'hlsearch' option. This can be suspended with the |:nohlsearch| command.
+the 'hlsearch' option. This can be suspended with the |:nohlsearch| command
+or auto suspended with nohlsearch plugin. See |nohlsearch-install|.
+
When 'shortmess' does not include the "S" flag, Vim will automatically show an
index, on which the cursor is. This can look like this: >
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
index aeaca0b..a4dee26 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt* For Vim version 9.1. Last change: 2024 May 11
+*pi_netrw.txt* For Vim version 9.1. Last change: 2024 Jul 13
------------------------------------------------
NETRW REFERENCE MANUAL by Charles E. Campbell
@@ -15,7 +15,7 @@ Copyright: Copyright (C) 2017 Charles E Campbell *netrw-copyright*
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!
+ software. Use at your own risk! For bug reports, see |bugs|.
*netrw*
*dav* *ftp* *netrw-file* *rcp* *scp*
@@ -3859,12 +3859,7 @@ netrw:
thereby making it easier to associate which part of the
debugging trace is due to which command.
- Please send that information to <netrw.vim>'s maintainer along
- with the o/s you're using and the vim version that you're using
- (see |:version|) (remove the embedded NOSPAM first) >
-
- NcampObell@SdrPchip.AorgM-NOSPAM
-<
+ For bug reports, please see |bugs|.
==============================================================================
12. History *netrw-history* {{{1
diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt
index 1ad4fb9..b9e992b 100644
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -1,4 +1,4 @@
-*popup.txt* For Vim version 9.1. Last change: 2024 Jun 08
+*popup.txt* For Vim version 9.1. Last change: 2024 Jun 16
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -186,6 +186,7 @@ Manipulating a popup window:
|popup_move()| change the position and size of a popup
|popup_setoptions()| override options of a popup
|popup_settext()| replace the popup buffer contents
+ |popup_setbuf()| set the buffer for the popup window
Closing popup windows:
|popup_close()| close one popup
@@ -574,6 +575,18 @@ popup_notification({what}, {options}) *popup_notification()*
Return type: |Number|
+popup_setbuf({id}, {buf}) *popup_setbuf()*
+ Set buffer {buf} to be displayed in popup win {id}. For the
+ use of {buf}, see |bufname()| function.
+ May change window size or position to adjust for the size
+ of the buffer text.
+
+ Can also be used as a |method|: >
+ GetPopup()->popup_setbuf(bufnr('foobar'))
+<
+ Return type: |vim9-boolean|
+
+
popup_setoptions({id}, {options}) *popup_setoptions()*
Override options in popup {id} with entries in {options}.
These options can be set:
@@ -613,9 +626,8 @@ popup_setoptions({id}, {options}) *popup_setoptions()*
popup_settext({id}, {text}) *popup_settext()*
- Set the text of the buffer in popup win {id}. {text} is the
- same as supplied to |popup_create()|, except that a buffer
- number is not allowed.
+ Set the text of the buffer in popup win {id}. {text} is
+ a string or a list of strings to be displayed in the popup.
Does not change the window size or position, other than caused
by the different text.
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index e2aef24..e44c5d5 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,4 +1,4 @@
-*quickfix.txt* For Vim version 9.1. Last change: 2024 Jun 16
+*quickfix.txt* For Vim version 9.1. Last change: 2024 Aug 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1006,7 +1006,7 @@ Another option is using 'makeencoding'.
==============================================================================
5. Using :vimgrep and :grep *grep* *lid*
-Vim has two ways to find matches for a pattern: Internal and external. The
+Vim has two ways to find matches for a pattern: internal and external. The
advantage of the internal grep is that it works on all systems and uses the
powerful Vim search patterns. An external grep program can be used when the
Vim grep does not do what you want.
@@ -1035,7 +1035,7 @@ commands can be combined to create a NewGrep command: >
command! -nargs=+ NewGrep execute 'silent grep! <args>' | copen 42
-5.1 using Vim's internal grep
+5.1 Using Vim's internal grep
*:vim* *:vimgrep* *E682* *E683*
:vim[grep][!] /{pattern}/[g][j][f] {file} ...
@@ -1092,8 +1092,8 @@ commands can be combined to create a NewGrep command: >
:vim[grep][!] {pattern} {file} ...
Like above, but instead of enclosing the pattern in a
- non-ID character use a white-separated pattern. The
- pattern must start with an ID character.
+ non-ID character use a white space separated pattern.
+ The pattern must start with an ID character.
Example: >
:vimgrep Error *.c
<
@@ -1345,6 +1345,13 @@ Additional arguments can be passed to pandoc:
- either by appending them to make, say `:make html --self-contained` .
- or setting them in `b:pandoc_compiler_args` or `g:pandoc_compiler_args`.
+The `--from` argument is an educated guess using the buffer file type;
+it can be overridden by setting `b:pandoc_compiler_from`.
+Likewise the `--metadata lang` argument is set using `&spelllang`;
+it can be overridden by setting `b:pandoc_compiler_lang`.
+If `--from=markdown` is assumed and no title set in a title header or
+YAML block, then the filename (without extension) is used as the title.
+
PERL *quickfix-perl* *compiler-perl*
The Perl compiler plugin doesn't actually compile, but invokes Perl's internal
@@ -1414,6 +1421,17 @@ shells and OSes and also does not allow to use other available TeX options,
if any. If your TeX doesn't support "-interaction=nonstopmode", please
report it with different means to express \nonstopmode from the command line.
+TYPST COMPILER *compiler-typst*
+
+Vim includes a compiler plugin for Typst files. This compiler is enabled
+automatically in Typst buffers by the Typst filetype plugin |ft-typst-plugin|.
+Run |:make| to compile the current Typst file.
+
+ *g:typst_cmd*
+By default Vim will use "typst" as the command to run the Typst compiler. This
+can be changed by setting the |g:typst_cmd| variable: >
+ let g:typst_cmd = "/path/to/other/command"
+
=============================================================================
7. The error format *error-file-format*
diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt
index 517fa30..42b5228 100644
--- a/runtime/doc/quickref.txt
+++ b/runtime/doc/quickref.txt
@@ -935,6 +935,7 @@ Short explanation of each option: *option-list*
'switchbuf' 'swb' sets behavior when switching to another buffer
'synmaxcol' 'smc' maximum column to find syntax items
'syntax' 'syn' syntax to be loaded for current buffer
+'tabclose' 'tcl' which tab page to focus when closing a tab
'tabline' 'tal' custom format for the console tab pages line
'tabpagemax' 'tpm' maximum number of tab pages for |-p| and "tab all"
'tabstop' 'ts' number of spaces that <Tab> in file uses
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index e95b6a1..726aec3 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -1,4 +1,4 @@
-*repeat.txt* For Vim version 9.1. Last change: 2023 May 26
+*repeat.txt* For Vim version 9.1. Last change: 2024 Aug 12
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -735,6 +735,10 @@ Your directory layout would be like this:
start/foobar/autoload/foo.vim " loaded when foo command used
start/foobar/doc/foo.txt " help for foo.vim
start/foobar/doc/tags " help tags
+ start/foobar/lang/<lang_id>/LC_MESSAGES/foobar.mo
+ " messages for the plugin in the
+ " <lang_id> language. These files are
+ " optional.
opt/fooextra/plugin/extra.vim " optional plugin, defines commands
opt/fooextra/autoload/extra.vim " loaded when extra command used
opt/fooextra/doc/extra.txt " help for extra.vim
@@ -744,24 +748,346 @@ This allows for the user to do: >
mkdir ~/.vim/pack
cd ~/.vim/pack
git clone https://github.com/you/foobar.git myfoobar
-
+<
Here "myfoobar" is a name that the user can choose, the only condition is that
it differs from other packages.
In your documentation you explain what the plugins do, and tell the user how
to load the optional plugin: >
:packadd! fooextra
-
+<
You could add this packadd command in one of your plugins, to be executed when
the optional plugin is needed.
+ *package-doc* *package-documentation*
Run the `:helptags` command to generate the doc/tags file. Including this
generated file in the package means that the user can drop the package in the
pack directory and the help command works right away. Don't forget to re-run
the command after changing the plugin help: >
:helptags path/start/foobar/doc
:helptags path/opt/fooextra/doc
-
+<
+ *package-translation*
+In order for a plugin to display translated messages, a few steps are
+required.
+The author of the plugin who likes to translate messages must define the name
+of the package and the location of the directory where the translations can be
+found using the |bindtextdomain()| function: >
+ :call bindtextdomain("foobar",
+ \ fnamemodify(expand("<script>"), ':p:h') .. '/../lang/')
+<
+Where:
+ "foobar" is the unique package identifier by which the |gettext()|
+ function will later search for translation strings for this
+ plugin.
+ "lang/" is the relative or absolute path to the directory structure
+ where the translation file is located.
+
+The directory structure where the message translation files should be placed
+is (from the top-level directory of the package):
+"lang/<lang_id>/LC_MESSAGES". For the format of <lang_id> see |multi-lang|.
+This function needs to be called only once during the initialization of the
+plugin.
+Once this is done, the |gettext()| function can be used to retrieve translated
+messages: >
+ :echo gettext("Hello", "foobar")
+<
+Where:
+ "Hello" the message "Hello" to be translated into the user's language
+ |:lang|
+ "foobar" the package identifier, which was previously defined using the
+ |bindtextdomain()| function.
+
+After that you need to create a template file for translation - POT-file.
+To do this, execute the following commands (using the Vim repository): >
+ cd ~/forkvim/src/po
+ make -f Makefile "PLUGPACKAGE={package}" \
+ "PO_PLUG_INPUTLIST={path/to/scripts-that-need-translations.vim}" \
+ ["POT_PLUGPACKAGE_PATH={path/where/to/write/{package}.pot}" \]
+ ["VIMPROG={path/to/vim} \]
+ {package}.pot
+<
+Where:
+PLUGPACKAGE A variable containing the name of the package that we
+ specified in the |bindtextdomain()| and
+ |gettext()| functions, for example, "foobar".
+PO_PLUG_INPUTLIST A variable containing scripts that have strings
+ to translate, i.e. where we specified the |gettext()|
+ function. Scripts are specified with an absolute
+ or relative path. Example: start/foobar/plugin/bar.vim
+ use blanks to separate scripts.
+POT_PLUGPACKAGE_PATH A variable containing the directory where the prepared
+ POT file will be saved. This is not a required variable,
+ if no directory is specified, then the POT file will
+ be placed in the "src/po" directory.
+VIMPROG A variable containing a directory with a working Vim.
+ If the Vim editor is already built and installed, and
+ is contained in the $PATH environment variable,
+ then you can specify just the name of the vim
+ executable.
+{package}.pot This is the Target. It is specified as the name of
+ the package, for example, "foobar" with the addition
+ of the .pot extension.
+Once a POT file is created, its contents are copied into separate PO files for
+each language for which the translation will be prepared.
+
+When the translation is finished, it is necessary to convert the PO files into
+binary MO-files format and place these MO-files into the "lang/" directory, the
+structure of which we created earlier.
+To do this, run the following commands:
+>
+ cd ~/forkvim/src/po
+ make -f Makefile "PLUGPACKAGE={package}" \
+ "PO_PLUGPACKAGE={path/to/{lang}.po}" \
+ ["MO_PLUGPACKAGE_PATH={path/to/lang/<lang_id>/LC_MESSAGES}" \]
+ {package}.mo
+<
+Where:
+PLUGPACKAGE A variable containing the name of the package that we
+ specified in the |bindtextdomain()| and |gettext()|
+ functions, for example, "foobar".
+PO_PLUGPACKAGE A variable containing a PO file. The file is specified
+ with an absolute or relative path. For example,
+ "~/myproject/translate/en.po"
+MO_PLUGPACKAGE_PATH A variable containing the structure of the "lang/"
+ directory, where the file with translations will be
+ placed, for example, "foobar.mo". This is not
+ a required variable, if the directory is not specified,
+ the MO file will be saved in the "src/po" directory.
+{package}.mo This is the Target. It is specified as the name of
+ the package, for example, "foobar" with the addition
+ of the .mo extension.
+
+ *package-translate_example*
+Let's show it all on some concrete example and translate the
+"ftplugin/aap.vim" file into Russian and German.
+
+First, let's prepare the "aap.vim" file, specifying |bindtextdomain()| and
+|gettext()| function calls in it.
+>
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+ finish
+ endif
+
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin = 1
+ call bindtextdomain("aap", fnamemodify(expand("<script>"), ':p:h') .. '/../lang/')
+
+ " Reset 'formatoptions', 'comments', 'commentstring' and 'expandtab' to undo
+ " this plugin.
+ let b:undo_ftplugin = "setl fo< com< cms< et<"
+
+ " Set 'formatoptions' to break comment lines but not other lines,
+ " and insert the comment leader when hitting <CR> or using "o".
+ setlocal fo-=t fo+=croql
+
+ " Set 'comments' to format dashed lists in comments.
+ setlocal comments=s:#\ -,m:#\ \ ,e:#,n:#,fb:-
+ setlocal commentstring=#\ %s
+
+ " Expand tabs to spaces to avoid trouble.
+ setlocal expandtab
+
+ if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+ let b:browsefilter = gettext("Aap Recipe Files (*.aap)\t*.aap\n", "aap")
+ if has("win32")
+ let b:browsefilter ..= gettext("All Files (*.*)\t*\n", "aap")
+ else
+ let b:browsefilter ..= gettext("All Files (*)\t*\n", "aap")
+ endif
+ let b:undo_ftplugin ..= " | unlet! b:browsefilter"
+ endif
+<
+Now let's create a POT file for it (example uses Windows paths):
+>
+ cd /d f:\forkvim\src\po
+ (the following command must be entered in one line, here it is separated for example)
+ nmake.exe -f Make_mvc.mak "PLUGPACKAGE=aap"
+ "PO_PLUG_INPUTLIST=d:\Programs\vim\vim91\ftplugin\aap.vim"
+ "POT_PLUGPACKAGE_PATH=e:\project\translate\plugins"
+ "VIMPROG=d:\Programs\vim\vim91\vim.exe"
+ aap.pot
+<
+After the POT file of our package is created, go to the directory where we
+saved it and perform the translation.
+>
+ cd /d e:\project\translate\plugins
+ copy aap.pot ru.po
+ copy aap.pot de.po
+<
+We have prepared a PO file with a translation into Russian:
+ # Test plugins translate ~
+ # ~
+ msgid "" ~
+ msgstr "" ~
+ "Project-Id-Version: aap\n" ~
+ "Report-Msgid-Bugs-To: \n" ~
+ "POT-Creation-Date: 2024-06-23 14:58+0300\n" ~
+ "PO-Revision-Date: 2024-06-23 14:58+0300\n" ~
+ "Last-Translator: Restorer\n" ~
+ "Language-Team: RuVim\n" ~
+ "Language: ru\n" ~
+ "MIME-Version: 1.0\n" ~
+ "Content-Type: text/plain; charset=UTF-8\n" ~
+ "Content-Transfer-Encoding: 8bit\n" ~
+
+ #: ../../runtime/ftplugin/aap.vim:32 ~
+ msgid "Aap Recipe Files (*.aap)\t*.aap\n" ~
+ msgstr "Файлы инÑтрукций Aap (*.aap)\t*.aap\n" ~
+
+ #: ../../runtime/ftplugin/aap.vim:34 ~
+ msgid "All Files (*.*)\t*\n" ~
+ msgstr "Ð’Ñе файлы (*.*)\t*\n" ~
+
+ #: ../../runtime/ftplugin/aap.vim:36 ~
+ msgid "All Files (*)\t*\n" ~
+ msgstr "Ð’Ñе файлы (*)\t*\n" ~
+
+And the PO file in German:
+ # Test plugins translate~
+ #~
+ msgid ""~
+ msgstr ""~
+ "Project-Id-Version: aap\n"~
+ "Report-Msgid-Bugs-To: \n"~
+ "POT-Creation-Date: 2024-06-23 14:58+0300\n"~
+ "PO-Revision-Date: 2024-06-24 13:11+0300\n"~
+ "Last-Translator: Restorer\n"~
+ "Language-Team: German\n"~
+ "Language: de\n"~
+ "MIME-Version: 1.0\n"~
+ "Content-Type: text/plain; charset=UTF-8\n"~
+ "Content-Transfer-Encoding: 8bit\n"~
+
+ #: ../../runtime/ftplugin/aap.vim:32~
+ msgid "Aap Recipe Files (*.aap)\t*.aap\n"~
+ msgstr "Aap-Rezeptdateien (*.aap)\t*.aap\n"~
+
+ #: ../../runtime/ftplugin/aap.vim:34~
+ msgid "All Files (*.*)\t*\n"~
+ msgstr "Alle Dateien (*.*)\t*.*\n"~
+
+ #: ../../runtime/ftplugin/aap.vim:36~
+ msgid "All Files (*)\t*\n"~
+ msgstr "Alle Dateien (*)\t*\n"~
+
+Now convert these files into MO files so that |gettext()| can display message
+translations. Note that since this is not a specialized plugin package, we
+will put the MO files in the "lang/" directory of the Vim editor.
+Type the following commands:
+>
+ cd /d f:\forkvim\src\po
+ (the following command must be entered in one line, here it is separated for example)
+ For Russian:
+ nmake.exe -f Make_mvc.mak "PLUGPACKAGE=aap"
+ "PO_PLUGPACKAGE=e:\project\translate\plugins\ru.po"
+ "MO_PLUGPACKAGE_PATH=d:\Programs\vim\vim91\lang\ru\LC_MESSAGES"
+ aap.mo
+ For German:
+ nmake.exe -f Make_mvc.mak "PLUGPACKAGE=aap"
+ "PO_PLUGPACKAGE=e:\project\translate\plugins\de.po"
+ "MO_PLUGPACKAGE_PATH=d:\Programs\vim\vim91\lang\de\LC_MESSAGES"
+ aap.mo
+<
+That's it, the translations are ready and you can see the plugin's messages
+in your native language.
+
+Let's also try to translate a plugin package. For example, when a package
+contains several scripts containing strings that need to be translated.
+For example, let's translate the "netrw" package into Japanese.
+For this example, we will translate only a few lines from this package.
+Let's prepare the scripts where we need to translate the message strings.
+
+The file "autoload\netrw.vim":
+>
+ " Load Once:
+ if &cp || exists("g:loaded_netrw")
+ finish
+ endif
+ call bindtextdomain("netrw", fnamemodify(expand("<script>"), ':p:h') .. '/../lang/')
+
+ " Check that vim has patches that netrw requires.
+ " Patches needed for v7.4: 1557, and 213.
+ " (netrw will benefit from vim's having patch#656, too)
+ let s:needspatches=[1557,213]
+ if exists("s:needspatches")
+ for ptch in s:needspatches
+ if v:version < 704 || (v:version == 704 && !has("patch".ptch))
+ if !exists("s:needpatch{ptch}")
+ unsilent echomsg gettext("***sorry*** this version of netrw requires vim v7.4 with patch#", "netrw") .. ptch
+ endif
+ let s:needpatch{ptch}= 1
+ finish
+ endif
+ endfor
+ endif
+<
+The file "autoload\netrwSettings.vim":
+>
+ " Load Once:
+ if exists("g:loaded_netrwSettings") || &cp
+ finish
+ endif
+ call bindtextdomain("netrw", fnamemodify(expand("<script>"), ':p:h') .. '/../lang/')
+ let g:loaded_netrwSettings = "v18"
+ if v:version < 700
+ echohl WarningMsg
+ echo gettext("***warning*** this version of netrwSettings needs vim 7.0", "netrw")
+ echohl Normal
+ finish
+ endif
+<
+Now we will prepare a POT file for further translation of messages.
+Execute the following commands:
+>
+ cd ~/forkvim/src/po
+ make -f Makefile "VIMPROG=/usr/local/bin/vim" "PLUGPACKAGE=netrw" \
+ "POT_PLUGPACKAGE_PATH=~/project/translate/plugins" \
+ "PO_PLUG_INPUTLIST=../../runtime/autoload/netrw.vim
+ ../../runtime/autoload/netrwSettings.vim" \
+ netrw.pot
+<
+Go to the directory with the POT file and make the translation:
+>
+ cd ~/project/translate/plugins
+ cp ./netrw.pot ja.po
+<
+When we have the translation ready in the "ja.po" file:
+ # Test plugins translate ~
+ # ~
+ msgid "" ~
+ msgstr "" ~
+ "Project-Id-Version: netrw\n" ~
+ "Report-Msgid-Bugs-To: \n" ~
+ "POT-Creation-Date: 2024-06-23 17:14+0300\n" ~
+ "PO-Revision-Date: 2024-06-23 17:14+0300\n" ~
+ "Last-Translator: Restorer\n" ~
+ "Language-Team: Japanese\n" ~
+ "Language: ja\n" ~
+ "MIME-Version: 1.0\n" ~
+ "Content-Type: text/plain; charset=UTF-8\n" ~
+ "Content-Transfer-Encoding: 8bit\n" ~
+
+ #: ../../runtime/autoload/netrw.vim:51 ~
+ msgid "***sorry*** this version of netrw requires vim v7.4 with patch#" ~
+ msgstr "" ~
+ "***申ã—訳ã‚ã‚Šã¾ã›ã‚“***ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®netrwã«ã¯ã€ãƒ‘ッãƒä»˜ãã®vim v7.4ãŒå¿…è¦ã§ã™#" ~
+
+ #: ../../runtime/autoload/netrwSettings.vim:28 ~
+ msgid "***warning*** this version of netrwSettings needs vim 7.0" ~
+ msgstr "***警告***ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®netrwSettingsã«ã¯vim7.0ãŒå¿…è¦ã§ã™" ~
+
+Convert ja.po to a MO file:
+>
+ cd ~/forkvim/src/po
+ make -f Makefile "PLUGPACKAGE=netrw" \
+ "PO_PLUGPACKAGE=~/project/translate/plugins/ja.po" \
+ "MO_PLUGPACKAGE_PATH=/usr/local/share/vim/vim91/lang/ja/LC_MESSAGES" \
+ netrw.mo
+<
+Executing those steps will allow you to get translation of any third-party
+plug-in packages.
Dependencies between plugins ~
*packload-two-steps*
diff --git a/runtime/doc/scroll.txt b/runtime/doc/scroll.txt
index cf79353..f0ec16b 100644
--- a/runtime/doc/scroll.txt
+++ b/runtime/doc/scroll.txt
@@ -1,4 +1,4 @@
-*scroll.txt* For Vim version 9.1. Last change: 2022 Oct 17
+*scroll.txt* For Vim version 9.1. Last change: 2024 Jul 06
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -48,6 +48,8 @@ CTRL-D Scroll window Downwards in the buffer. The number of
<S-Down> or *<S-Down>* *<kPageDown>*
<PageDown> or *<PageDown>* *CTRL-F*
+<S-CR> or *<S-CR>* *<S-NL>*
+<S-+> or *SHIFT-+* *<S-Plus>*
CTRL-F Scroll window [count] pages Forwards (downwards) in
the buffer. See also 'startofline' option.
When there is only one window the 'window' option
@@ -85,6 +87,7 @@ CTRL-U Scroll window Upwards in the buffer. The number of
<S-Up> or *<S-Up>* *<kPageUp>*
<PageUp> or *<PageUp>* *CTRL-B*
+<S--> or *<S-Minus>* *SHIFT-MINUS*
CTRL-B Scroll window [count] pages Backwards (upwards) in the
buffer. See also 'startofline' option.
When there is only one window the 'window' option
diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt
index dac3a57..679099c 100644
--- a/runtime/doc/sign.txt
+++ b/runtime/doc/sign.txt
@@ -1,4 +1,4 @@
-*sign.txt* For Vim version 9.1. Last change: 2024 Jun 08
+*sign.txt* For Vim version 9.1. Last change: 2024 Jul 07
VIM REFERENCE MANUAL by Gordon Prieur
@@ -80,8 +80,9 @@ used by popup windows where 'cursorline' is set.
*sign-priority*
Each placed sign is assigned a priority value. When multiple signs are placed
on the same line, the attributes of the sign with the highest priority is used
-independently of the sign group. The default priority for a sign is 10. The
-priority is assigned at the time of placing a sign.
+independently of the sign group. The default priority for a sign is 10, this
+value can be changed for different signs by specifying a different value at
+definition time. The priority is assigned at the time of placing a sign.
When two signs with the same priority are present, and one has an icon or text
in the signcolumn while the other has line highlighting, then both are
@@ -135,6 +136,8 @@ See |sign_define()| for the equivalent Vim script function.
Motif pixmap (.xpm)
Win32 .bmp, .ico, .cur
pixmap (.xpm) |+xpm_w32|
+ priority={prio}
+ Default priority for the sign, see |sign-priority|.
linehl={group}
Highlighting group used for the whole line the sign is placed
@@ -209,11 +212,11 @@ See |sign_place()| for the equivalent Vim script function.
By default, the sign is placed in the global sign group.
- By default, the sign is assigned a default priority of 10. To
- assign a different priority value, use "priority={prio}" to
- specify a value. The priority is used to determine the sign
- that is displayed when multiple signs are placed on the same
- line.
+ By default, the sign is assigned a default priority of 10,
+ unless specified otherwise by the sign definition. To assign a
+ different priority value, use "priority={prio}" to specify a
+ value. The priority is used to determine the sign that is
+ displayed when multiple signs are placed on the same line.
Examples: >
:sign place 5 line=3 name=sign1 file=a.py
@@ -401,6 +404,7 @@ sign_define({list})
icon full path to the bitmap file for the sign.
linehl highlight group used for the whole line the
sign is placed in.
+ priority default priority value of the sign
numhl highlight group used for the line number where
the sign is placed.
text text that is displayed when there is no icon
@@ -453,6 +457,7 @@ sign_getdefined([{name}]) *sign_getdefined()*
linehl highlight group used for the whole line the
sign is placed in; not present if not set
name name of the sign
+ priority default priority value of the sign
numhl highlight group used for the line number where
the sign is placed; not present if not set
text text that is displayed when there is no icon
@@ -646,7 +651,8 @@ sign_placelist({list}) *sign_placelist()*
priority Priority of the sign. When multiple signs are
placed on a line, the sign with the highest
priority is used. If not specified, the
- default value of 10 is used. See
+ default value of 10 is used, unless specified
+ otherwise by the sign definition. See
|sign-priority| for more information.
If {id} refers to an existing sign, then the existing sign is
diff --git a/runtime/doc/sponsor.txt b/runtime/doc/sponsor.txt
index 1698168..6df14eb 100644
--- a/runtime/doc/sponsor.txt
+++ b/runtime/doc/sponsor.txt
@@ -1,4 +1,4 @@
-*sponsor.txt* For Vim version 9.1. Last change: 2024 Apr 22
+*sponsor.txt* For Vim version 9.1. Last change: 2024 Aug 14
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -76,16 +76,14 @@ 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. Send at least 10 euro to be
-able to vote for features.
+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 activate voting on your Vim
-account. You will then get an extra page where you can vote for features and
+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.
@@ -127,8 +125,7 @@ the developer |maillist|, for reporting bugs see |bugs|.
How about Charityware?
Currently the Vim donations go to |uganda| anyway. Thus it doesn't matter if
-you sponsor Vim or ICCF. Except that Vim sponsoring will allow you to vote
-for features.
+you sponsor Vim or ICCF.
I donated $$$, now please add feature XYZ!
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index 30e85ed..cdc0f16 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -1,4 +1,4 @@
-*starting.txt* For Vim version 9.1. Last change: 2024 Jun 04
+*starting.txt* For Vim version 9.1. Last change: 2024 Aug 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -540,6 +540,7 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
not needed when reading a file, because there is a check if
the file that is being read has been encrypted, and Vim asks
for a key automatically. |encryption|
+ {only available when compiled with the |+cryptv| feature}
*-X*
-X Do not try connecting to the X server to get the current
@@ -854,16 +855,16 @@ accordingly. Vim proceeds in this order:
I The environment variable VIMINIT (see also |compatible-default|) (*)
The value of $VIMINIT is used as an Ex command line.
II The user vimrc file(s):
- "$HOME/.vimrc" (for Unix) (*)
- "$HOME/.vim/vimrc" (for Unix) (*)
- "$HOME/.config/vim/vimrc" (for Unix) (*)
- "s:.vimrc" (for Amiga) (*)
- "home:.vimrc" (for Amiga) (*)
- "home:vimfiles:vimrc" (for Amiga) (*)
- "$VIM/.vimrc" (for Amiga) (*)
- "$HOME/_vimrc" (for Win32) (*)
- "$HOME/vimfiles/vimrc" (for Win32) (*)
- "$VIM/_vimrc" (for Win32) (*)
+ "$HOME/.vimrc" (for Unix) (*)
+ "$HOME/.vim/vimrc" (for Unix) (*)
+ "$XDG_CONFIG_HOME/vim/vimrc" (for Unix) (*)
+ "s:.vimrc" (for Amiga) (*)
+ "home:.vimrc" (for Amiga) (*)
+ "home:vimfiles:vimrc" (for Amiga) (*)
+ "$VIM/.vimrc" (for Amiga) (*)
+ "$HOME/_vimrc" (for Win32) (*)
+ "$HOME/vimfiles/vimrc" (for Win32) (*)
+ "$VIM/_vimrc" (for Win32) (*)
"$HOME/config/settings/vim/vimrc" (for Haiku) (*)
Note: For Unix and Amiga, when ".vimrc" does not exist,
@@ -1257,7 +1258,7 @@ To change it later, use a ":let" command like this: >
In case you need the value of $VIMRUNTIME in a shell (e.g., for a script that
greps in the help files) you might be able to use this: >
- VIMRUNTIME=`vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '\015' `
+ VIMRUNTIME=$(vim -es '+put=$VIMRUNTIME|print|quit!')
Don't set $VIMRUNTIME to an empty value, some things may stop working.
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index c07c3a4..736e664 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt* For Vim version 9.1. Last change: 2024 Jun 17
+*syntax.txt* For Vim version 9.1. Last change: 2024 Aug 22
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -958,6 +958,25 @@ For Visual Basic use: >
:let g:filetype_asa = "aspvbs"
:let g:filetype_asp = "aspvbs"
+ASYMPTOTE *asy.vim* *ft-asy-syntax*
+
+By default, only basic Asymptote keywords are highlighted. To highlight
+extended geometry keywords: >
+
+ :let g:asy_syn_plain = 1
+
+and for highlighting keywords related to 3D constructions: >
+
+ :let g:asy_syn_three = 1
+
+By default, Asymptote-defined colors (e.g: lightblue) are highlighted. To
+highlight TeX-defined colors (e.g: BlueViolet) use: >
+
+ :let g:asy_syn_texcolors = 1
+
+or for Xorg colors (e.g: AliceBlue): >
+
+ :let g:asy_syn_x11colors = 1
BAAN *baan.vim* *baan-syntax*
@@ -1221,6 +1240,21 @@ will be classified as tcsh, UNLESS the "filetype_csh" variable exists. If the
"filetype_csh" variable exists, the filetype will be set to the value of the
variable.
+CSV *ft-csv-syntax*
+
+If you change the delimiter of a CSV file, its syntax highlighting will no
+longer match the changed file content. You will need to unlet the following
+variable: >
+
+ :unlet b:csv_delimiter
+
+And afterwards save and reload the file: >
+
+ :w
+ :e
+
+Now the syntax engine should determine the newly changed CSV delimiter.
+
CYNLIB *cynlib.vim* *ft-cynlib-syntax*
@@ -1874,6 +1908,10 @@ You can also disable this rendering by adding the following line to your
vimrc file: >
:let html_no_rendering=1
+By default Vim synchronises the syntax to 250 lines before the first displayed
+line. This can be configured using: >
+ :let html_minlines = 500
+<
HTML comments are rather special (see an HTML reference document for the
details), and the syntax coloring scheme will highlight all errors.
However, if you prefer to use the wrong style (starts with <!-- and
@@ -1993,102 +2031,142 @@ idlsyntax_showerror_soft Use softer colours by default for errors
JAVA *java.vim* *ft-java-syntax*
-The java.vim syntax highlighting file offers several options:
+The java.vim syntax highlighting file offers several options.
-In Java 1.0.2 it was never possible to have braces inside parens, so this was
-flagged as an error. Since Java 1.1 this is possible (with anonymous
-classes), and therefore is no longer marked as an error. If you prefer the
-old way, put the following line into your vim startup file: >
- :let java_mark_braces_in_parens_as_errors=1
+In Java 1.0.2, it was never possible to have braces inside parens, so this was
+flagged as an error. Since Java 1.1, this is possible (with anonymous
+classes); and, therefore, is no longer marked as an error. If you prefer the
+old way, put the following line into your Vim startup file: >
+ :let g:java_mark_braces_in_parens_as_errors = 1
-All identifiers in java.lang.* are always visible in all classes. To
-highlight them use: >
- :let java_highlight_java_lang_ids=1
+All (exported) public types declared in `java.lang` are always automatically
+imported and available as simple names. To highlight them, use: >
+ :let g:java_highlight_java_lang_ids = 1
-You can also highlight identifiers of most standard Java packages if you
-download the javaid.vim script at http://www.fleiner.com/vim/download.html.
-If you prefer to only highlight identifiers of a certain package, say java.io
-use the following: >
- :let java_highlight_java_io=1
+You can also highlight types of most standard Java packages if you download
+the javaid.vim script at http://www.fleiner.com/vim/download.html. If you
+prefer to only highlight types of a certain package, say `java.io`, use the
+following: >
+ :let g:java_highlight_java_io = 1
Check the javaid.vim file for a list of all the packages that are supported.
-Function names are not highlighted, as the way to find functions depends on
-how you write Java code. The syntax file knows two possible ways to highlight
-functions:
-
-If you write function declarations that are consistently indented by either
-a tab, or a space . . . or eight space character(s), you may want to set >
- :let java_highlight_functions="indent"
- :let java_highlight_functions="indent1"
- :let java_highlight_functions="indent2"
- :let java_highlight_functions="indent3"
- :let java_highlight_functions="indent4"
- :let java_highlight_functions="indent5"
- :let java_highlight_functions="indent6"
- :let java_highlight_functions="indent7"
- :let java_highlight_functions="indent8"
+Headers of indented function declarations can be highlighted (along with parts
+of lambda expressions and method reference expressions), but it depends on how
+you write Java code. Two formats are recognized:
+
+1) If you write function declarations that are consistently indented by either
+a tab, or a space . . . or eight space character(s), you may want to set one
+of >
+ :let g:java_highlight_functions = "indent"
+ :let g:java_highlight_functions = "indent1"
+ :let g:java_highlight_functions = "indent2"
+ :let g:java_highlight_functions = "indent3"
+ :let g:java_highlight_functions = "indent4"
+ :let g:java_highlight_functions = "indent5"
+ :let g:java_highlight_functions = "indent6"
+ :let g:java_highlight_functions = "indent7"
+ :let g:java_highlight_functions = "indent8"
Note that in terms of 'shiftwidth', this is the leftmost step of indentation.
-However, if you follow the Java guidelines about how functions and classes are
-supposed to be named (with respect to upper- and lowercase) and there is any
-amount of indentation, you may want to set >
- :let java_highlight_functions="style"
-If neither setting does work for you, but you would still want function
-declarations to be highlighted, create your own definitions by changing the
-definitions in java.vim or by creating your own java.vim that includes the
-original one and then adds the code to highlight functions.
-
-In Java 1.1 the functions System.out.println() and System.err.println() should
-only be used for debugging. Therefore it is possible to highlight debugging
-statements differently. To do this you must add the following definition in
-your startup file: >
- :let java_highlight_debug=1
-The result will be that those statements are highlighted as 'Special'
-characters. If you prefer to have them highlighted differently you must define
-new highlightings for the following groups.:
- Debug, DebugSpecial, DebugString, DebugBoolean, DebugType
-which are used for the statement itself, special characters used in debug
-strings, strings, boolean constants and types (this, super) respectively. I
-have opted to choose another background for those statements.
+
+2) However, if you follow the Java guidelines about how functions and types
+are supposed to be named (with respect to upper- and lowercase) and there is
+any amount of indentation, you may want to set >
+ :let g:java_highlight_functions = "style"
+
+In addition, you can combine any value of "g:java_highlight_functions" with >
+ :let g:java_highlight_signature = 1
+to have the name of a function with its parameter list parens distinctly
+highlighted from its type parameters, return type, and formal parameters; and
+to have the parameter list parens of a lambda expression with its arrow
+distinctly highlighted from its formal parameters or identifiers.
+
+If neither setting does work for you, but you would still want headers of
+function declarations to be highlighted, modify the current syntax definitions
+or compose new ones.
+
+Higher-order function types can be hard to parse by eye, so uniformly toning
+down some of their components may be of value. Provided that such type names
+conform to the Java naming guidelines, you may arrange it with >
+ :let g:java_highlight_generics = 1
+
+In Java 1.1, the functions `System.out.println()` and `System.err.println()`
+should only be used for debugging. Consider adding the following definition
+in your startup file: >
+ :let g:java_highlight_debug = 1
+to have the bulk of those statements colored as
+ *Debug debugging statements,
+and to make some of their own items further grouped and linked:
+ *Special as DebugSpecial,
+ *String as DebugString,
+ *Boolean as DebugBoolean,
+ *Type as DebugType,
+which are used for special characters appearing in strings, strings proper,
+boolean literals, and special instance references (`super`, `this`, `null`),
+respectively.
Javadoc is a program that takes special comments out of Java program files and
creates HTML pages. The standard configuration will highlight this HTML code
-similarly to HTML files (see |html.vim|). You can even add Javascript
-and CSS inside this code (see below). There are four differences however:
- 1. The title (all characters up to the first '.' which is followed by
- some white space or up to the first '@') is colored differently (to change
- the color change the group CommentTitle).
- 2. The text is colored as 'Comment'.
- 3. HTML comments are colored as 'Special'
- 4. The special Javadoc tags (@see, @param, ...) are highlighted as specials
- and the argument (for @see, @param, @exception) as Function.
-To turn this feature off add the following line to your startup file: >
- :let java_ignore_javadoc=1
-
-If you use the special Javadoc comment highlighting described above you
-can also turn on special highlighting for Javascript, visual basic
-scripts and embedded CSS (stylesheets). This makes only sense if you
-actually have Javadoc comments that include either Javascript or embedded
-CSS. The options to use are >
- :let java_javascript=1
- :let java_css=1
- :let java_vb=1
-
-In order to highlight nested parens with different colors define colors
-for javaParen, javaParen1 and javaParen2, for example with >
+similarly to HTML files (see |html.vim|). You can even add JavaScript and CSS
+inside this code (see below). The HTML rendering diverges as follows:
+ 1. The first sentence (all characters up to the first period `.`, which is
+ followed by a whitespace character or a line terminator, or up to the
+ first block tag, e.g. `@param`, `@return`) is colored as
+ *SpecialComment special comments.
+ 2. The text is colored as
+ *Comment comments.
+ 3. HTML comments are colored as
+ *Special special symbols.
+ 4. The standard Javadoc tags (`@code`, `@see`, etc.) are colored as
+ *Special special symbols
+ and some of their arguments are colored as
+ *Function function names.
+To turn this feature off, add the following line to your startup file: >
+ :let g:java_ignore_javadoc = 1
+
+If you use the special Javadoc comment highlighting described above, you can
+also turn on special highlighting for JavaScript, Visual Basic scripts, and
+embedded CSS (stylesheets). This only makes sense if any of these languages
+actually appear in Javadoc comments. The variables to use are >
+ :let g:java_javascript = 1
+ :let g:java_css = 1
+ :let g:java_vb = 1
+Note that these three variables are maintained in the HTML syntax file.
+
+Numbers and strings can be recognized in non-Javadoc comments with >
+ :let g:java_comment_strings = 1
+
+When 'foldmethod' is set to "syntax", blocks of code and multi-line comments
+will be folded. No text is usually written in the first line of a multi-line
+comment, making folded contents of Javadoc comments less informative with the
+default 'foldtext' value; you may opt for showing the contents of a second
+line for any comments written in this way, and showing the contents of a first
+line otherwise, with >
+ :let g:java_foldtext_show_first_or_second_line = 1
+
+Trailing whitespace characters or a run of space characters before a tab
+character can be marked as an error with >
+ :let g:java_space_errors = 1
+but either kind of an error can be suppressed by also defining one of >
+ :let g:java_no_trail_space_error = 1
+ :let g:java_no_tab_space_error = 1
+
+In order to highlight nested parens with different colors, define colors for
+`javaParen`, `javaParen1`, and `javaParen2`. For example, >
:hi link javaParen Comment
or >
:hi javaParen ctermfg=blue guifg=#0000ff
If you notice highlighting errors while scrolling backwards, which are fixed
-when redrawing with CTRL-L, try setting the "java_minlines" internal variable
-to a larger number: >
- :let java_minlines = 50
+when redrawing with CTRL-L, try setting the "g:java_minlines" variable to
+a larger number: >
+ :let g:java_minlines = 50
This will make the syntax synchronization start 50 lines before the first
displayed line. The default value is 10. The disadvantage of using a larger
number is that redrawing can become slow.
-JSON *json.vim* *ft-json-syntax*
+JSON *json.vim* *ft-json-syntax* *g:vim_json_conceal*
+ *g:vim_json_warnings*
The json syntax file provides syntax highlighting with conceal support by
default. To disable concealment: >
@@ -2231,7 +2309,7 @@ By default mail.vim synchronises syntax to 100 lines before the first
displayed line. If you have a slow machine, and generally deal with emails
with short headers, you can change this to a smaller value: >
- :let mail_minlines = 30
+ :let mail_minlines = 30
MAKE *make.vim* *ft-make-syntax*
@@ -2242,6 +2320,16 @@ feature off by using: >
:let make_no_commands = 1
+Comments are also highlighted by default. You can turn this off by using: >
+
+ :let make_no_comments = 1
+
+Microsoft Makefile handles variable expansion and comments differently
+(backslashes are not used for escape). If you see any wrong highlights
+because of this, you can try this: >
+
+ :let make_microsoft = 1
+
MAPLE *maple.vim* *ft-maple-syntax*
@@ -2268,7 +2356,8 @@ $VIMRUNTIME/syntax/syntax.vim).
mv_finance mv_logic mv_powseries
-MARKDOWN *ft-markdown-syntax*
+MARKDOWN *ft-markdown-syntax* *g:markdown_minlines*
+ *g:markdown_fenced_languages* *g:markdown_syntax_conceal*
If you have long regions there might be wrong highlighting. At the cost of
slowing down displaying, you can have the engine look further back to sync on
@@ -2293,6 +2382,17 @@ have the following in your .vimrc: >
let filetype_m = "mma"
+MEDIAWIKI *ft-mediawiki-syntax*
+
+By default, syntax highlighting includes basic HTML tags like style and
+headers |html.vim|. For strict Mediawiki syntax highlighting: >
+
+ let g:html_no_rendering = 1
+
+If HTML highlighting is desired, terminal-based text formatting such as bold
+and italic is possible by: >
+
+ let g:html_style_rendering = 1
MODULA2 *modula2.vim* *ft-modula2-syntax*
@@ -2507,9 +2607,9 @@ PANDOC *ft-pandoc-syntax*
By default, markdown files will be detected as filetype "markdown".
Alternatively, you may want them to be detected as filetype "pandoc" instead.
-To do so, set the following: >
+To do so, set the *g:filetype_md* var: >
- :let g:markdown_md = 'pandoc'
+ :let g:filetype_md = 'pandoc'
The pandoc syntax plugin uses |conceal| for pretty highlighting. Default is 1 >
@@ -3784,6 +3884,15 @@ are highlighted. To disable set it to zero in your .vimrc: >
<
The default value is 1.
+TYPST *ft-typst-syntax*
+
+ *g:typst_embedded_languages*
+Typst files can embed syntax highlighting for other languages by setting the
+|g:typst_embedded_languages| variable. This variable is a list of language
+names whose syntax definitions will be included in Typst files. Example: >
+
+ let g:typst_embedded_languages = ['python', 'r']
+
VIM *vim.vim* *ft-vim-syntax*
*g:vimsyn_minlines* *g:vimsyn_maxlines*
There is a trade-off between more accurate syntax highlighting versus screen
@@ -5044,7 +5153,7 @@ matches, nextgroup, etc. But there are a few differences:
line (or group of continued lines).
- When a match with a sync pattern is found, the rest of the line (or group of
continued lines) is searched for another match. The last match is used.
- This is used when a line can contain both the start end the end of a region
+ This is used when a line can contain both the start and the end of a region
(e.g., in a C-comment like /* this */, the last "*/" is used).
There are two ways how a match with a sync pattern can be used:
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt
index abbc778..afc2512 100644
--- a/runtime/doc/tabpage.txt
+++ b/runtime/doc/tabpage.txt
@@ -1,4 +1,4 @@
-*tabpage.txt* For Vim version 9.1. Last change: 2024 May 15
+*tabpage.txt* For Vim version 9.1. Last change: 2024 Jul 12
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -142,7 +142,8 @@ something else.
:tabclose $ " close the last tab page
:tabclose # " close the last accessed tab page
-When a tab is closed the next tab page will become the current one.
+When a tab is closed the next tab page will become the current one. This
+behaviour can be customized using the 'tabclose' option.
*:tabo* *:tabonly*
:tabo[nly][!] Close all other tab pages.
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 794fa0c..9cd6702 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1161,6 +1161,7 @@ $quote eval.txt /*$quote*
't_xo' term.txt /*'t_xo'*
't_xs' term.txt /*'t_xs'*
'ta' options.txt /*'ta'*
+'tabclose' options.txt /*'tabclose'*
'tabline' options.txt /*'tabline'*
'tabpagemax' options.txt /*'tabpagemax'*
'tabstop' options.txt /*'tabstop'*
@@ -1179,6 +1180,7 @@ $quote eval.txt /*$quote*
'tbis' options.txt /*'tbis'*
'tbs' options.txt /*'tbs'*
'tc' options.txt /*'tc'*
+'tcl' options.txt /*'tcl'*
'tcldll' options.txt /*'tcldll'*
'tenc' options.txt /*'tenc'*
'term' options.txt /*'term'*
@@ -3742,6 +3744,7 @@ $quote eval.txt /*$quote*
<RightMouse> visual.txt /*<RightMouse>*
<RightRelease> term.txt /*<RightRelease>*
<S- intro.txt /*<S-*
+<S-CR> scroll.txt /*<S-CR>*
<S-Del> os_dos.txt /*<S-Del>*
<S-Down> scroll.txt /*<S-Down>*
<S-End> term.txt /*<S-End>*
@@ -3761,6 +3764,9 @@ $quote eval.txt /*$quote*
<S-Insert> os_dos.txt /*<S-Insert>*
<S-Left> motion.txt /*<S-Left>*
<S-LeftMouse> term.txt /*<S-LeftMouse>*
+<S-Minus> scroll.txt /*<S-Minus>*
+<S-NL> scroll.txt /*<S-NL>*
+<S-Plus> scroll.txt /*<S-Plus>*
<S-Right> motion.txt /*<S-Right>*
<S-RightMouse> term.txt /*<S-RightMouse>*
<S-ScrollWheelDown> scroll.txt /*<S-ScrollWheelDown>*
@@ -4063,6 +4069,7 @@ CursorHold-example windows.txt /*CursorHold-example*
CursorHoldI autocmd.txt /*CursorHoldI*
CursorIM mbyte.txt /*CursorIM*
CursorMoved autocmd.txt /*CursorMoved*
+CursorMovedC autocmd.txt /*CursorMovedC*
CursorMovedI autocmd.txt /*CursorMovedI*
D change.txt /*D*
DOS os_dos.txt /*DOS*
@@ -5549,6 +5556,7 @@ Jobs eval.txt /*Jobs*
K various.txt /*K*
KDE gui_x11.txt /*KDE*
KVim gui_x11.txt /*KVim*
+KeyInputPre autocmd.txt /*KeyInputPre*
Kibaale uganda.txt /*Kibaale*
Korean mbyte.txt /*Korean*
L motion.txt /*L*
@@ -5689,6 +5697,8 @@ Ruby if_ruby.txt /*Ruby*
Russian russian.txt /*Russian*
S change.txt /*S*
SHELL starting.txt /*SHELL*
+SHIFT-+ scroll.txt /*SHIFT-+*
+SHIFT-MINUS scroll.txt /*SHIFT-MINUS*
SQLGetType ft_sql.txt /*SQLGetType*
SQLSetType ft_sql.txt /*SQLSetType*
SafeState autocmd.txt /*SafeState*
@@ -6055,6 +6065,7 @@ assert_notmatch() testing.txt /*assert_notmatch()*
assert_report() testing.txt /*assert_report()*
assert_true() testing.txt /*assert_true()*
astro.vim syntax.txt /*astro.vim*
+asy.vim syntax.txt /*asy.vim*
at motion.txt /*at*
atan() builtin.txt /*atan()*
atan2() builtin.txt /*atan2()*
@@ -6147,6 +6158,7 @@ beval_text-variable eval.txt /*beval_text-variable*
beval_winid-variable eval.txt /*beval_winid-variable*
beval_winnr-variable eval.txt /*beval_winnr-variable*
binary-number eval.txt /*binary-number*
+bindtextdomain() builtin.txt /*bindtextdomain()*
bitwise-function usr_41.txt /*bitwise-function*
bitwise-shift eval.txt /*bitwise-shift*
blob eval.txt /*blob*
@@ -6539,6 +6551,7 @@ compiler-perl quickfix.txt /*compiler-perl*
compiler-pyunit quickfix.txt /*compiler-pyunit*
compiler-select quickfix.txt /*compiler-select*
compiler-tex quickfix.txt /*compiler-tex*
+compiler-typst quickfix.txt /*compiler-typst*
compiler-vaxada ft_ada.txt /*compiler-vaxada*
compl-current insert.txt /*compl-current*
compl-define insert.txt /*compl-define*
@@ -6660,6 +6673,7 @@ cpo-v options.txt /*cpo-v*
cpo-w options.txt /*cpo-w*
cpo-x options.txt /*cpo-x*
cpo-y options.txt /*cpo-y*
+cpo-z options.txt /*cpo-z*
cpo-{ options.txt /*cpo-{*
cpp.vim syntax.txt /*cpp.vim*
crash-recovery recover.txt /*crash-recovery*
@@ -6722,6 +6736,7 @@ cw change.txt /*cw*
cweb.vim syntax.txt /*cweb.vim*
cynlib.vim syntax.txt /*cynlib.vim*
d change.txt /*d*
+d-special change.txt /*d-special*
daB motion.txt /*daB*
daW motion.txt /*daW*
dab motion.txt /*dab*
@@ -7239,6 +7254,7 @@ ft-asmh8300-syntax syntax.txt /*ft-asmh8300-syntax*
ft-aspperl-syntax syntax.txt /*ft-aspperl-syntax*
ft-aspvbs-syntax syntax.txt /*ft-aspvbs-syntax*
ft-astro-syntax syntax.txt /*ft-astro-syntax*
+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*
@@ -7260,6 +7276,7 @@ ft-context-settings ft_context.txt /*ft-context-settings*
ft-cpp-syntax syntax.txt /*ft-cpp-syntax*
ft-csh-syntax syntax.txt /*ft-csh-syntax*
ft-css-omni insert.txt /*ft-css-omni*
+ft-csv-syntax syntax.txt /*ft-csv-syntax*
ft-cweb-syntax syntax.txt /*ft-cweb-syntax*
ft-cynlib-syntax syntax.txt /*ft-cynlib-syntax*
ft-dart-syntax syntax.txt /*ft-dart-syntax*
@@ -7284,7 +7301,9 @@ 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-gdscript-plugin filetype.txt /*ft-gdscript-plugin*
ft-gitcommit-plugin filetype.txt /*ft-gitcommit-plugin*
+ft-go-plugin filetype.txt /*ft-go-plugin*
ft-gprof-plugin filetype.txt /*ft-gprof-plugin*
ft-groff-syntax syntax.txt /*ft-groff-syntax*
ft-gsp-syntax syntax.txt /*ft-gsp-syntax*
@@ -7320,6 +7339,7 @@ ft-markdown-syntax syntax.txt /*ft-markdown-syntax*
ft-masm-syntax syntax.txt /*ft-masm-syntax*
ft-mathematica-syntax syntax.txt /*ft-mathematica-syntax*
ft-matlab-indent indent.txt /*ft-matlab-indent*
+ft-mediawiki-syntax syntax.txt /*ft-mediawiki-syntax*
ft-metafont ft_mp.txt /*ft-metafont*
ft-metafont-intro ft_mp.txt /*ft-metafont-intro*
ft-metafont-mappings ft_mp.txt /*ft-metafont-mappings*
@@ -7398,6 +7418,8 @@ ft-tex-syntax syntax.txt /*ft-tex-syntax*
ft-tf-syntax syntax.txt /*ft-tf-syntax*
ft-typescript-syntax syntax.txt /*ft-typescript-syntax*
ft-typescriptreact-syntax syntax.txt /*ft-typescriptreact-syntax*
+ft-typst-plugin filetype.txt /*ft-typst-plugin*
+ft-typst-syntax syntax.txt /*ft-typst-syntax*
ft-vb-syntax syntax.txt /*ft-vb-syntax*
ft-verilog-indent indent.txt /*ft-verilog-indent*
ft-vhdl-indent indent.txt /*ft-vhdl-indent*
@@ -7505,6 +7527,7 @@ g:decada.Unit_Name() ft_ada.txt /*g:decada.Unit_Name()*
g:do_no_lazyload_menus gui.txt /*g:do_no_lazyload_menus*
g:filetype_csh syntax.txt /*g:filetype_csh*
g:filetype_haredoc ft_hare.txt /*g:filetype_haredoc*
+g:filetype_md syntax.txt /*g:filetype_md*
g:filetype_r syntax.txt /*g:filetype_r*
g:ftplugin_rust_source_path ft_rust.txt /*g:ftplugin_rust_source_path*
g:gnat ft_ada.txt /*g:gnat*
@@ -7551,6 +7574,9 @@ g:html_use_encoding syntax.txt /*g:html_use_encoding*
g:html_use_input_for_pc syntax.txt /*g:html_use_input_for_pc*
g:html_use_xhtml syntax.txt /*g:html_use_xhtml*
g:html_whole_filler syntax.txt /*g:html_whole_filler*
+g:markdown_fenced_languages syntax.txt /*g:markdown_fenced_languages*
+g:markdown_minlines syntax.txt /*g:markdown_minlines*
+g:markdown_syntax_conceal syntax.txt /*g:markdown_syntax_conceal*
g:netrw_altfile pi_netrw.txt /*g:netrw_altfile*
g:netrw_alto pi_netrw.txt /*g:netrw_alto*
g:netrw_altv pi_netrw.txt /*g:netrw_altv*
@@ -7705,9 +7731,14 @@ g:tex_subscripts syntax.txt /*g:tex_subscripts*
g:tex_superscripts syntax.txt /*g:tex_superscripts*
g:tex_verbspell syntax.txt /*g:tex_verbspell*
g:typescript_host_keyword syntax.txt /*g:typescript_host_keyword*
+g:typst_cmd quickfix.txt /*g:typst_cmd*
+g:typst_conceal filetype.txt /*g:typst_conceal*
+g:typst_embedded_languages syntax.txt /*g:typst_embedded_languages*
g:var eval.txt /*g:var*
g:vim_indent indent.txt /*g:vim_indent*
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*
@@ -7773,6 +7804,10 @@ gdb-version terminal.txt /*gdb-version*
ge motion.txt /*ge*
gender-neutral helphelp.txt /*gender-neutral*
get() builtin.txt /*get()*
+get()-blob builtin.txt /*get()-blob*
+get()-dict builtin.txt /*get()-dict*
+get()-func builtin.txt /*get()-func*
+get()-list builtin.txt /*get()-list*
get-ms-debuggers debug.txt /*get-ms-debuggers*
getbufinfo() builtin.txt /*getbufinfo()*
getbufline() builtin.txt /*getbufline()*
@@ -8288,6 +8323,7 @@ iconise starting.txt /*iconise*
iconize starting.txt /*iconize*
iconv() builtin.txt /*iconv()*
iconv-dynamic mbyte.txt /*iconv-dynamic*
+id() builtin.txt /*id()*
ident-search tips.txt /*ident-search*
idl-syntax syntax.txt /*idl-syntax*
idl.vim syntax.txt /*idl.vim*
@@ -9178,6 +9214,8 @@ no_buffers_menu gui.txt /*no_buffers_menu*
no_mail_maps filetype.txt /*no_mail_maps*
no_plugin_maps filetype.txt /*no_plugin_maps*
nocombine syntax.txt /*nocombine*
+nohlsearch-auto pattern.txt /*nohlsearch-auto*
+nohlsearch-install usr_05.txt /*nohlsearch-install*
non-greedy pattern.txt /*non-greedy*
non-zero-arg eval.txt /*non-zero-arg*
none-function_argument userfunc.txt /*none-function_argument*
@@ -9291,6 +9329,10 @@ out_timeout channel.txt /*out_timeout*
p change.txt /*p*
pack-add repeat.txt /*pack-add*
package-create repeat.txt /*package-create*
+package-doc repeat.txt /*package-doc*
+package-documentation repeat.txt /*package-documentation*
+package-translate_example repeat.txt /*package-translate_example*
+package-translation repeat.txt /*package-translation*
packages repeat.txt /*packages*
packload-two-steps repeat.txt /*packload-two-steps*
page-down intro.txt /*page-down*
@@ -9431,6 +9473,7 @@ popup_menu() popup.txt /*popup_menu()*
popup_menu-shortcut-example popup.txt /*popup_menu-shortcut-example*
popup_move() popup.txt /*popup_move()*
popup_notification() popup.txt /*popup_notification()*
+popup_setbuf() popup.txt /*popup_setbuf()*
popup_setoptions() popup.txt /*popup_setoptions()*
popup_settext() popup.txt /*popup_settext()*
popup_show() popup.txt /*popup_show()*
@@ -10594,6 +10637,7 @@ termdebug-mappings terminal.txt /*termdebug-mappings*
termdebug-prompt terminal.txt /*termdebug-prompt*
termdebug-starting terminal.txt /*termdebug-starting*
termdebug-stepping terminal.txt /*termdebug-stepping*
+termdebug-timeout terminal.txt /*termdebug-timeout*
termdebug-variables terminal.txt /*termdebug-variables*
termdebug_disasm_window terminal.txt /*termdebug_disasm_window*
termdebug_map_K terminal.txt /*termdebug_map_K*
diff --git a/runtime/doc/tagsrch.txt b/runtime/doc/tagsrch.txt
index 7091f83..858309a 100644
--- a/runtime/doc/tagsrch.txt
+++ b/runtime/doc/tagsrch.txt
@@ -1,4 +1,4 @@
-*tagsrch.txt* For Vim version 9.1. Last change: 2024 Mar 16
+*tagsrch.txt* For Vim version 9.1. Last change: 2024 Aug 01
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -588,12 +588,12 @@ ctags).
{term} ;" The two characters semicolon and double quote. This is
interpreted by Vi as the start of a comment, which makes the
following be ignored. This is for backwards compatibility
- with Vi, it ignores the following fields. Example:
+ with Vi, it ignores the following fields. Example: >
APP file /^static int APP;$/;" v
- When {tagaddress} is not a line number or search pattern, then
+< When {tagaddress} is not a line number or search pattern, then
{term} must be |;". Here the bar ends the command (excluding
the bar) and ;" is used to have Vi ignore the rest of the
- line. Example:
+ line. Example: >
APP file.c call cursor(3, 4)|;" v
{field} .. A list of optional fields. Each field has the form:
@@ -611,7 +611,9 @@ ctags).
There is one field that doesn't have a ':'. This is the kind
of the tag. It is handled like it was preceded with "kind:".
- See the documentation of ctags for the kinds it produces.
+ In the above example, this was "kind:v" (typically variable).
+ See the documentation of ctags for the kinds it produces, with
+ ctags you can use `ctags --list-kinds` .
The only other field currently recognized by Vim is "file:"
(with an empty value). It is used for a static tag.
@@ -656,14 +658,14 @@ If the command is a normal search command (it starts and ends with "/" or
The direction of the search is forward for "/", backward for "?".
Note that 'wrapscan' does not matter, the whole file is always searched.
- If the search fails, another try is done ignoring case. If that fails too,
- a search is done for:
+ a search is done for: >
"^tagname[ \t]*("
- (the tag with '^' prepended and "[ \t]*(" appended). When using function
+< (the tag with '^' prepended and "[ \t]*(" appended). When using function
names, this will find the function name when it is in column 0. This will
help when the arguments to the function have changed since the tags file was
- made. If this search also fails another search is done with:
+ made. If this search also fails another search is done with: >
"^[#a-zA-Z_].*\<tagname[ \t]*("
- This means: A line starting with '#' or an identifier and containing the tag
+< This means: A line starting with '#' or an identifier and containing the tag
followed by white space and a '('. This will find macro names and function
names with a type prepended.
diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt
index e918394..5020ed5 100644
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -1,4 +1,4 @@
-*terminal.txt* For Vim version 9.1. Last change: 2024 Jun 17
+*terminal.txt* For Vim version 9.1. Last change: 2024 Jul 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1253,6 +1253,8 @@ Starting ~
*termdebug-starting*
Load the plugin with this command: >
packadd termdebug
+When loading the plugin from the |.vimrc| file, add the "!" attribute: >
+ packadd! termdebug
< *:Termdebug*
To start debugging use `:Termdebug` or `:TermdebugCommand` followed by the
command name, for example: >
@@ -1283,6 +1285,15 @@ When the debugger ends, typically by typing "quit" in the gdb window, the two
opened windows are closed.
Only one debugger can be active at a time.
+
+ *termdebug-timeout*
+Depending on how gdb is launched, termdebug startup time may vary.
+To avoid termdebug to get stuck if the startup process of gdb takes too long,
+a configurable timeout is included. Such time out is configurable in terms of
+multiple of 10ms: >
+ let g:termdebug_config['timeout'] = 500 # 500 * 10ms = 5 seconds.
+
+The default timeout is 3000 ms.
*:TermdebugCommand*
If you want to give specific commands to the command being debugged, you can
use the `:TermdebugCommand` command followed by the command name and
@@ -1519,35 +1530,46 @@ in a buffer with 'buftype' set to "prompt". This works slightly differently:
*termdebug_use_prompt*
Prompt mode can be used even when the |+terminal| feature is present with: >
- let g:termdebug_config['use_prompt'] = 1
+ let g:termdebug_config['use_prompt'] = v:true
If there is no g:termdebug_config you can use: >
- let g:termdebug_use_prompt = 1
+ let g:termdebug_use_prompt = v:true
+
<
+However, the latter form will be deprecated in future releases.
+
Mappings ~
+The termdebug plugin enables a few default mappings. All those mappings
+are reset to their original values once the termdebug session concludes.
+
*termdebug_map_K* *termdebug-mappings*
The K key is normally mapped to |:Evaluate| unless a buffer local (|:map-local|)
mapping to K already exists. If you do not want this use: >
- let g:termdebug_config['map_K'] = 0
+ let g:termdebug_config['map_K'] = v:false
If there is no g:termdebug_config you can use: >
- let g:termdebug_map_K = 0
+ let g:termdebug_map_K = v:false
<
+However, the latter form will be deprecated in future releases.
+
*termdebug_map_minus*
The - key is normally mapped to |:Down| unless a buffer local mapping to the -
key already exists. If you do not want this use: >
- let g:termdebug_config['map_minus'] = 0
+ let g:termdebug_config['map_minus'] = v:false
<
*termdebug_map_plus*
The + key is normally mapped to |:Up| unless a buffer local mapping to the +
key already exists. If you do not want this use: >
- let g:termdebug_config['map_plus'] = 0
+ let g:termdebug_config['map_plus'] = v:false
<
*termdebug_disasm_window*
If you want the Asm window shown by default, set the "disasm_window" flag to
1. The "disasm_window_height" entry can be used to set the window height: >
- let g:termdebug_config['disasm_window'] = 1
+ let g:termdebug_config['disasm_window'] = v:true
let g:termdebug_config['disasm_window_height'] = 15
If there is no g:termdebug_config you can use: >
let g:termdebug_disasm_window = 15
+
+However, the latter form will be deprecated in future releases.
+
Any value greater than 1 will set the Asm window height to that value.
If the current window has enough horizontal space, it will be vertically split
and the Asm window will be shown side by side with the source code window (and
@@ -1557,10 +1579,13 @@ the height option won't be used).
If you want the Var window shown by default, set the "variables_window" flag
to 1. The "variables_window_height" entry can be used to set the window
height: >
- let g:termdebug_config['variables_window'] = 1
+ let g:termdebug_config['variables_window'] = v:true
let g:termdebug_config['variables_window_height'] = 15
If there is no g:termdebug_config you can use: >
let g:termdebug_variables_window = 15
+
+However, the latter form will be deprecated in future releases.
+
Any value greater than 1 will set the Var window height to that value.
If the current window has enough horizontal space, it will be vertically split
and the Var window will be shown side by side with the source code window (and
@@ -1589,6 +1614,8 @@ g:termdebug_config or the "g:termdebugger" variable before invoking
If there is no g:termdebug_config you can use: >
let g:termdebugger = "mygdb"
+However, the latter form will be deprecated in future releases.
+
If the command needs an argument use a List: >
let g:termdebug_config['command'] = ['rr', 'replay', '--']
If there is no g:termdebug_config you can use: >
@@ -1646,6 +1673,7 @@ If you don't want this then disable it with: >
If there is no g:termdebug_config you can use: >
let g:termdebug_popup = 0
+However, the latter form will be deprecated in future releases.
Change default signs ~
*termdebug_signs*
@@ -1676,6 +1704,8 @@ split: >
If there is no g:termdebug_config you can use: >
let g:termdebug_wide = 163
+However, the latter form will be deprecated in future releases.
+
This will set 'columns' to 163 when `:Termdebug` is used. The value is
restored when quitting the debugger.
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index ebf562b..7d0402c 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -1,4 +1,4 @@
-*testing.txt* For Vim version 9.1. Last change: 2024 Jun 17
+*testing.txt* For Vim version 9.1. Last change: 2024 Jul 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -506,16 +506,17 @@ assert_equal({expected}, {actual} [, {msg}])
added to |v:errors| and 1 is returned. Otherwise zero is
returned. |assert-return|
The error is in the form "Expected {expected} but got
- {actual}". When {msg} is present it is prefixed to that.
+ {actual}". When {msg} is present it is prefixed to that,
+ along with the location of the assert when run from a script.
There is no automatic conversion, the String "4" is different
from the Number 4. And the number 4 is different from the
Float 4.0. The value of 'ignorecase' is not used here, case
always matters.
Example: >
- assert_equal('foo', 'bar')
-< Will result in a string to be added to |v:errors|:
- test.vim line 12: Expected 'foo' but got 'bar' ~
+ call assert_equal('foo', 'bar', 'baz')
+< Will add the following to |v:errors|:
+ test.vim line 12: baz: Expected 'foo' but got 'bar' ~
Can also be used as a |method|, the base is passed as the
second argument: >
@@ -561,19 +562,19 @@ assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
When {error} is a string it must be found literally in the
first reported error. Most often this will be the error code,
including the colon, e.g. "E123:". >
- assert_fails('bad cmd', 'E987:')
+ call assert_fails('bad cmd', 'E987:')
<
When {error} is a |List| with one or two strings, these are
used as patterns. The first pattern is matched against the
first reported error: >
- assert_fails('cmd', ['E987:.*expected bool'])
+ call assert_fails('cmd', ['E987:.*expected bool'])
< The second pattern, if present, is matched against the last
reported error.
If there is only one error then both patterns must match. This
can be used to check that there is only one error.
To only match the last error use an empty string for the first
error: >
- assert_fails('cmd', ['', 'E987:'])
+ call assert_fails('cmd', ['', 'E987:'])
<
If {msg} is empty then it is not used. Do this to get the
default message when passing the {lnum} argument.
@@ -599,7 +600,8 @@ assert_false({actual} [, {msg}]) *assert_false()*
When {actual} is not false an error message is added to
|v:errors|, like with |assert_equal()|.
The error is in the form "Expected False but got {actual}".
- When {msg} is present it is prepended to that.
+ When {msg} is present it is prefixed to that, along with the
+ location of the assert when run from a script.
Also see |assert-return|.
A value is false when it is zero. When {actual} is not a
@@ -625,7 +627,8 @@ assert_match({pattern}, {actual} [, {msg}])
When {pattern} does not match {actual} an error message is
added to |v:errors|. Also see |assert-return|.
The error is in the form "Pattern {pattern} does not match
- {actual}". When {msg} is present it is prefixed to that.
+ {actual}". When {msg} is present it is prefixed to that,
+ along with the location of the assert when run from a script.
{pattern} is used as with |=~|: The matching is always done
like 'magic' was set and 'cpoptions' is empty, no matter what
@@ -636,9 +639,9 @@ assert_match({pattern}, {actual} [, {msg}])
Use both to match the whole text.
Example: >
- assert_match('^f.*o$', 'foobar')
+ call assert_match('^f.*o$', 'foobar')
< Will result in a string to be added to |v:errors|:
- test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~
+ test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~
Can also be used as a |method|: >
getFile()->assert_match('foo.*')
@@ -693,7 +696,8 @@ assert_true({actual} [, {msg}]) *assert_true()*
Also see |assert-return|.
A value is TRUE when it is a non-zero number. When {actual}
is not a number the assert fails.
- When {msg} is given it precedes the default message.
+ When {msg} is given it is prefixed to the default message,
+ along with the location of the assert when run from a script.
Can also be used as a |method|: >
GetResult()->assert_true()
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index c37a1d4..e0ebe7e 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt* For Vim version 9.1. Last change: 2024 Jun 03
+*todo.txt* For Vim version 9.1. Last change: 2024 Jul 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -512,10 +512,6 @@ 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.
-Problem that a previous silent ":throw" causes a following try/catch not to
-work. (ZyX, 2013 Sep 28) With examples: (Malcolm Rowe, 2015 Dec 24)
-Also see #8487 for an example.
-
Request to use "." for the cursor column in search pattern \%<.c and \%<.v.
(#8179)
@@ -543,7 +539,6 @@ SpellCap doesn't show below a closed fold. #12420
- 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.
(2006 Jul 26, Gary Johnson)
-- Completion of ":cd" doesn't use 'cdpath'. #374.
Make "g>" and "g<" in Visual mode move the text right or left.
Also for a block selection. #8558
diff --git a/runtime/doc/uganda.rux b/runtime/doc/uganda.rux
index 783c6d5..6f0f205 100644
--- a/runtime/doc/uganda.rux
+++ b/runtime/doc/uganda.rux
@@ -1,4 +1,4 @@
-*uganda.txt* Ð´Ð»Ñ Vim version 9.1 Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð¾Ñ‚ 02 марта 2022 г.
+*uganda.txt* Ð´Ð»Ñ Vim version 9.1 Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð¾Ñ‚ 14 авг 2024 г.
СПРÐВОЧÐИК ПО РЕДÐКТОРУ VIM
@@ -18,10 +18,8 @@
https://www.vim.org/iccf/
https://www.iccf.nl/
-Также возможно оказание финанÑовой помощи Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ программы Vim.
-Люди, пожертвовавшие на развитие программы, получают право голоÑовать за
-внедрение в редактор функциональных возможноÑтей. См. раздел |sponsor|.
-Ð’ любом Ñлучае деньги направлÑÑŽÑ‚ÑÑ Ð² Уганду.
+Также возможно оказание финанÑовой помощи Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ программы Vim,
+Ñм. раздел |sponsor|. Ð’ любом Ñлучае деньги направлÑÑŽÑ‚ÑÑ Ð² Уганду.
ДокументациÑ, поÑтавлÑÐµÐ¼Ð°Ñ Ð² ÑоÑтаве программы Vim, раÑпроÑтранÑетÑÑ Ð½Ð°
уÑловиÑÑ… лицензии на Открытые публикации, Ñм. раздел |manual-copyright|.
@@ -58,7 +56,7 @@ II) Изменённую (или дополненную) верÑию прогр
ÑоглаÑованы. ЕÑли ÑоглаÑование не проводилоÑÑŒ, Ñделанные изменениÑ
будут раÑпроÑтранÑÑ‚ÑŒÑÑ Ð½Ð° уÑловиÑÑ… наÑтоÑщей лицензии или более
поздней её верÑии. Лица, в данное Ð²Ñ€ÐµÐ¼Ñ ÑвлÑющиеÑÑ Ð¾Ñ‚Ð²ÐµÑ‚Ñтвенными
- за рабзработку, указаны в перечне по Ñледующему адреÑу:
+ за разработку, указаны в перечне, размещённом по Ñледующему адреÑу:
https://github.com/orgs/vim/people. Ð’ Ñлучае Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтой
информации, актуальные данные будут опубликованы на
ÑоответÑтвующих реÑурÑах (вероÑтнее вÑего по интернетâ€Ð°Ð´Ñ€ÐµÑам
@@ -288,9 +286,7 @@ KCC предоÑтавлÑет школам помощь по улучшению
помощи детÑм в гор. Кибаале. Команда Kuwasha переводит 100%
ÑредÑтв, поÑтупивших в пользу проекта в Уганде.
Единовременное пожертвование может быть отправлено им
- напрÑмую. При Ñтом прошу отправлÑÑ‚ÑŒ мне Ñообщение, Ð´Ð»Ñ ÑƒÑ‡Ñ‘Ñ‚Ð°
- информации о количеÑтве ÑредÑтв, пожертвованных благодарÑ
- программе Vim.
+ напрÑмую.
Ðа их веб-Ñайте также можно ознакомитьÑÑ Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ по
оказанию финанÑовой поддержки https://www.kuwasha.net/
При отправке пожертвований через Kuwasha вы получите
@@ -309,7 +305,7 @@ KCC предоÑтавлÑет школам помощь по улучшению
https://iccf-holland.org/germany.html
Европа
- БанковÑкий перевод. См. далее рубрику «Другие варианты»,
+ БанковÑкий перевод. См. далее «Другие варианты»,
где указан код Swift и номер IBAN.
Любые другие платёжные методы также должны работать.
ПроконÑультируйтеÑÑŒ по вопроÑу отправки ÑредÑтв на
@@ -334,7 +330,8 @@ KCC предоÑтавлÑет школам помощь по улучшению
Чеки не принимаютÑÑ.
=============================================================================
+
© Казорин Сергей, перевод на руÑÑкий Ñзык, 2022, <kazorin@basealt.ru>
-© Restorer, редакторÑÐºÐ°Ñ Ð¿Ñ€Ð°Ð²ÐºÐ°, 2022, <restorer@mail2k.ru>
+© Restorer, редакторÑÐºÐ°Ñ Ð¿Ñ€Ð°Ð²ÐºÐ°, 2024, <restorer@mail2k.ru>
vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/uganda.txt b/runtime/doc/uganda.txt
index 513759f..17590e5 100644
--- a/runtime/doc/uganda.txt
+++ b/runtime/doc/uganda.txt
@@ -1,4 +1,4 @@
-*uganda.txt* For Vim version 9.1. Last change: 2024 Apr 22
+*uganda.txt* For Vim version 9.1. Last change: 2024 Aug 14
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -15,8 +15,8 @@ below or visit the ICCF web site, available at these URLs:
https://www.vim.org/iccf/
https://www.iccf.nl/
-You can also sponsor the development of Vim. Vim sponsors can vote for
-features. See |sponsor|. The money goes to Uganda anyway.
+You can also sponsor the development of Vim, see |sponsor|. The money goes to
+Uganda anyway.
The Open Publication License applies to the Vim documentation, see
|manual-copyright|.
diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt
index a9e8fb9..21629e3 100644
--- a/runtime/doc/usr_05.txt
+++ b/runtime/doc/usr_05.txt
@@ -1,4 +1,4 @@
-*usr_05.txt* For Vim version 9.1. Last change: 2024 May 17
+*usr_05.txt* For Vim version 9.1. Last change: 2024 Jun 28
VIM USER MANUAL - by Bram Moolenaar
@@ -440,7 +440,7 @@ After restarting your Vim, the plugin is active and you can read about it at: >
Adding comment package *comment-install*
Load the plugin with this command: >
- packadd comment
+ packadd comment
<
This way you can use the plugin with the default key bindings `gc` and similar
for commenting (which is a well-established mapping in the Vim community).
@@ -449,6 +449,22 @@ If you add this line to your vimrc file, then you need to restart Vim to have
the package loaded. Once the package is loaded, read about it at: >
:h comment.txt
+
+Adding nohlsearch package *nohlsearch-install*
+
+Load the plugin with this command: >
+ packadd nohlsearch
+<
+Automatically execute |:nohlsearch| after 'updatetime' or getting into
+|Insert| mode.
+Thus assuming default updatetime, hlsearch would be suspended/turned off after
+4 seconds of idle time.
+
+To disable the effect of the plugin after it has been loaded: >
+ au! nohlsearch
+<
+
+
More information about packages can be found here: |packages|.
==============================================================================
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 60d0d1e..765eab5 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -798,6 +798,7 @@ String manipulation: *string-functions*
execute() execute an Ex command and get the output
win_execute() like execute() but in a specified window
trim() trim characters from a string
+ bindtextdomain() set message lookup translation base path
gettext() lookup message translation
List manipulation: *list-functions*
@@ -1319,6 +1320,7 @@ Popup window: *popup-window-functions*
popup_move() change the position and size of a popup
popup_setoptions() override options of a popup
popup_settext() replace the popup buffer contents
+ popup_setbuf() set the popup buffer
popup_close() close one popup
popup_clear() close all popups
popup_filter_menu() select from a list of items
@@ -1406,6 +1408,8 @@ Various: *various-functions*
wordcount() get byte/word/char count of buffer
+ id() get unique string for item to use as a key
+
luaeval() evaluate |Lua| expression
mzeval() evaluate |MzScheme| expression
perleval() evaluate Perl expression (|+perl|)
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index 1ce8927..acd7991 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -1,4 +1,4 @@
-*various.txt* For Vim version 9.1. Last change: 2024 Jun 17
+*various.txt* For Vim version 9.1. Last change: 2024 Jul 17
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -19,9 +19,8 @@ CTRL-L Clear and redraw the screen. The redraw may happen
*:redr* *:redraw*
:redr[aw][!] Redraw the screen right now. When ! is included it is
cleared first.
- Useful to update the screen halfway executing a script
- or function. Also when halfway a mapping and
- 'lazyredraw' is set.
+ It can be used to redraw the screen in a script
+ or function (or a mapping if |'lazyredraw'| is set).
*:redraws* *:redrawstatus*
:redraws[tatus][!] Redraw the status line of the current window. When !
diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index 5b5bded..fc07dc4 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -1,4 +1,4 @@
-*version9.txt* For Vim version 9.1. Last change: 2024 Jun 17
+*version9.txt* For Vim version 9.1. Last change: 2024 Aug 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -41554,7 +41554,7 @@ Enum support for Vim9 script |:enum|
*new-other-9.2*
Other new features ~
------------------
-The comment plugin |comment-install| is included.
+The new plugins |comment-install| and |nohlsearch-install| are included.
Support for Wayland UI.
@@ -41563,6 +41563,12 @@ Support for the XDG Desktop Specification |xdg-base-dir|
Support highlighting the matched text for insert-mode completion and
command-line completion in |ins-completion-menu|.
+Support highlighting the completion kind in |ins-completion-menu|, see
+|complete-items|.
+
+Support for translating messages in Vim script plugins using the |gettext()|
+and |bindtextdomain()| functions.
+
*changed-9.2*
Changed~
-------
@@ -41571,6 +41577,25 @@ Changed~
- the default for 'commentstring' contains whitespace padding to have
automatic comments look nicer |comment-install|
- 'completeopt' is now a |global-local| option.
+- 'nrformat' accepts the new "blank" suboption, to determine a signed or
+ unsigned number based on whitespace in front of a minus sign.
+- allow to specify a priority when defining a new sign |:sign-define|
+- provide information about function arguments using the get(func, "arity")
+ function |get()-func|
+- |:bwipe| also wipes jumplist and tagstack data
+- moving in the buffer list using |:bnext| and similar commands, behaves as
+ documented and skips help buffers (if not run from a help buffer, else
+ moves to the next/previous help buffer).
+- allow to complete directories from 'cdpath' for |:cd| and similar commands,
+ add the "cd_in_path" completion type for e.g. |:command-complete| and
+ |getcompletion()|
+- add 'cpoptions' flag "z" |cpo-z|, to disable some (traditional) vi
+ behaviour/inconsistency (see |d-special| and |cw|).
+- allow to specify additional attributes in the completion menu (allows to
+ mark deprecated attributes from LSP server) |complete-items|
+- the regex engines match correctly case-insensitive multi-byte characters
+ (and apply proper case folding)
+- |:keeppatterns| preserves the last substitute pattern when used with |:s|
*added-9.2*
Added ~
@@ -41579,17 +41604,23 @@ Various syntax, indent and other plugins were added.
Functions: ~
+|bindtextdomain()| set message lookup translation base path
|diff()| diff two Lists of strings
|filecopy()| copy a file {from} to {to}
|foreach()| apply function to List items
|getregion()| get a region of text from a buffer
|getregionpos()| get a list of positions for a region
+|id()| get unique identifier for a Dict, List, Object,
+ Channel or Blob variable
|matchbufline()| all the matches of a pattern in a buffer
|matchstrlist()| all the matches of a pattern in a List of strings
+|popup_setbuf()| switch to a different buffer in a popup
Autocommands: ~
+|CursorMovedC| after the cursor was moved in the comamnd-line
+|KeyInputPre| before processing any key event in any mode
|SessionWritePost| after writing the session file |:mksession|
|TermResponseAll| after the terminal response to |t_RV| and others is
received
@@ -41611,6 +41642,7 @@ Commands: ~
Options: ~
'winfixbuf' Keep buffer focused in a window
+'tabclose' Which tab page to focus after closing a tab page
't_xo' Terminal uses XON/XOFF handshaking (e.g. vt420)
't_CF' Support for alternate font highlighting terminal code
@@ -41633,7 +41665,8 @@ Improved visual highlighting.
Python3 support in OpenVMS.
-Support |fuzzy-matching| during |ins-completion| with "fuzzy" item for 'completeopt'
+Support for |fuzzy-matching| during |ins-completion| with the "fuzzy"
+values of the 'completeopt' setting
==============================================================================
COMPILE TIME CHANGES *compile-changes-9.2*
@@ -41642,6 +41675,8 @@ Support for building with Ruby 3.3.
Support for building Vim 9 in z/OS (MVS).
+Clean-up old MS-Windows code.
+
==============================================================================
PATCHES *patches-9.2* *bug-fixes-9.2*
*patches-after-9.1*
diff --git a/runtime/doc/vim-it.1 b/runtime/doc/vim-it.1
index 7ecd9f4..66e17dc 100644
--- a/runtime/doc/vim-it.1
+++ b/runtime/doc/vim-it.1
@@ -1,4 +1,4 @@
-.TH VIM 1 "4 giugno 2024"
+.TH VIM 1 "12 agosto 2024"
.SH NOME
vim \- VI Migliorato, un editor di testi per programmatori
.SH SINTASSI
@@ -31,7 +31,7 @@ vim \- VI Migliorato, un editor di testi per programmatori
.B rgview
.SH DESCRIZIONE
.B Vim
-Un editore di testi, compatibile con, e migliore di, Vi.
+è un editore di testi, compatibile con, e migliore di, Vi.
Può essere usato per editare qualsiasi file di testo.
Particolarmente utile per editare programmi.
.PP
@@ -150,18 +150,6 @@ Esempio: vim "+set si" main.c
.br
Note: Si possono avere fino a 10 comandi "+" o "\-c".
.TP
-\-S {file}
-I comandi contenuti in {file} sono eseguiti dopo la lettura del primo file.
-Equivalente a \-c "source {file}".
-{file} non può avere un nome che inizia per '\-'.
-Se {file} è omesso si usa "Session.vim" (funziona solo se \-S è l'ultimo
-argomento specificato).
-.TP
-\-\-cmd {comando}
-Come "\-c", ma il comando è eseguito PRIMA
-di eseguire qualsiasi file vimrc.
-Si possono usare fino a 10 di questi comandi, indipendentemente dai comandi "\-c".
-.TP
\-A
Se
.B Vim
@@ -224,11 +212,6 @@ Opzione da usare quando
sessione di edit (p.es., mail).
Sull'Amiga i comandi ":sh" e ":!" non sono disponibili.
.TP
-\-\-nofork
-Direttamente [Foreground]. Per la versione GUI,
-.B Vim
-non crea [fork] una nuova finestra, indipendente dalla shell di invocazione.
-.TP
\-F
Se
.B Vim
@@ -239,6 +222,8 @@ in Modo Farsi, cioè impostando 'fkmap' e 'rightleft'.
Altrimenti viene dato un messaggio di errore e
.B Vim
termina in modo anormale.
+.br
+Nota: Il supporto Farsi è stato rimosso a partire dalla patch 8.1.0932.
.TP
\-g
Se
@@ -248,19 +233,6 @@ Se Vim è stato compilato senza supporto GUI viene dato un messaggio di errore e
.B Vim
termina in modo anormale.
.TP
-\-\-gui-dialog-file {nome}
-Quando si usa la GUI, invece di visualizzare un dialogo, il titolo e il
-messaggio del dialogo sono scritti sul file {nome}. Il file viene creato o,
-se già esistente, viene esteso. Quest'opzione serve solo in fase di test,
-per evitare di restare bloccati da un dialogo che non si riesce a visualizzare.
-Se si sta lavorando senza la GUI l'argomento viene ignorato.
-.TP
-\-\-help, \-h, \-?
-Un po' di aiuto su opzioni e argomenti che si possono dare invocando Vim.
-Subito dopo
-.B Vim
-esce.
-.TP
\-H
Se
.B Vim
@@ -278,13 +250,13 @@ del file da usare invece di quello predefinito "~/.viminfo".
Si può anche evitare l'uso di un file .viminfo, dando come nome
"NONE".
.TP
-\-L
-Equivalente a \-r.
-.TP
\-l
Modo Lisp.
Imposta le opzioni 'lisp' e 'showmatch'.
.TP
+\-L
+Equivalente a \-r.
+.TP
\-m
Inibisce modifica file.
Inibisce l'opzione 'write'.
@@ -295,6 +267,13 @@ Modifiche non permesse. Le opzioni 'modifiable' e 'write' sono annullate,
in modo da impedire sia modifiche che riscritture. Da notare che queste
opzioni possono essere abilitate in seguito, permettendo così modifiche.
.TP
+\-n
+Inibisce l'uso di un file di swap.
+Il recupero dopo una caduta di macchina sarà impossibile.
+Utile per editare un file su un supporto molto lento (p.es., floppy).
+Il comando ":set uc=0" ha lo stesso effetto.
+Per abilitare il recupero usare ":set uc=200".
+.TP
\-N
Modo "Non-compatibile". Annulla l'opzione 'compatible'.
Così
@@ -302,13 +281,6 @@ Così
si comporta un po' meglio, ma è meno compatibile con Vi, anche in assenza di un
file .vimrc.
.TP
-\-n
-Inibisce l'uso di un file di swap.
-Il recupero dopo una caduta di macchina diventa impossibile.
-Utile per editare un file su un supporto molto lento (p.es., floppy).
-Il comando ":set uc=0" ha lo stesso effetto.
-Per abilitare il recupero usare ":set uc=200".
-.TP
\-nb
Diviene un Editor server per NetBeans. Vedere la documentazione per dettagli.
.TP
@@ -331,6 +303,16 @@ Vim viene eseguito in una finestra MDI (Multiple-Document Interface).
che sia sufficientemente esplicativo. Notare che l'implementazione è ancora
rudimentale. Non funziona per tutte le applicazioni, e il menù non funziona.
.TP
+\-r
+Lista file di swap, e informazioni su come usarli per ripristinare file.
+.TP
+\-r {file}
+Modo Recovery (ripristino).
+Il file di swap è usato per recuperare una sessione di edit finita male.
+Il file di swap è un file con lo stesso nome file del file di testo
+editato, col suffisso ".swp".
+Vedere ":help recovery".
+.TP
\-R
Modo Read-only (Sola Lettura).
Imposta l'opzione 'readonly'.
@@ -342,16 +324,6 @@ L'opzione \-R implica anche l'opzione \-n (vedere sopra).
L'opzione 'readonly' può essere annullata con ":set noro".
Vedere ":help 'readonly'".
.TP
-\-r
-Lista file di swap, e informazioni su come usarli per ripristinare file.
-.TP
-\-r {file}
-Modo Recovery (ripristino).
-Il file di swap è usato per recuperare una sessione di edit finita male.
-Il file di swap è un file con lo stesso nome file del file di testo
-editato, col suffisso ".swp".
-Vedere ":help recovery".
-.TP
\-s
Modo silenzioso. Solo quando invocato come "Ex" o quando l'opzione
"\-e" è stata data prima dell'opzione "\-s".
@@ -363,6 +335,13 @@ Lo stesso risultato si può ottenere col comando ":source! {script_in_input}".
Se la fine del file di input viene raggiunta prima che Vim termini,
l'ulteriore input verrà preso dalla tastiera.
.TP
+\-S {file}
+I comandi contenuti in {file} sono eseguiti dopo la lettura del primo file.
+Equivalente a \-c "source {file}".
+{file} non può avere un nome che inizia per '\-'.
+Se {file} è omesso si usa "Session.vim" (funziona solo se \-S è l'ultimo
+argomento specificato).
+.TP
\-T {terminale}
Dice a
.B Vim
@@ -372,16 +351,6 @@ Dovrebbe essere un terminale noto a
.B Vim
(predefinito) o definito nei file termcap o terminfo.
.TP
-\-\-not-a-term
-Da usare per specifica a
-.B Vim
-che l'utente è consapevole che l'input e l'output non avvengono con un terminale
-vero e proprio. Ciò serve per evitare il messaggio di avvertimento e il ritardo
-di due secondi che avverrebbero in assenza di questo argomento.
-.TP
-\-\-ttyfail
-Quando stdin o stdout non sono un terminale (tty) esci subito da Vim.
-.TP
\-u {vimrc}
Usa i comandi nel file {vimrc} per inizializzazioni.
Tutte le altre inizializzazioni non sono eseguite.
@@ -393,7 +362,13 @@ Vedere ":help initialization" da vim per ulteriori dettagli.
Usa i comandi nel file {gvimrc} per inizializzazioni GUI.
Tutte le altre inizializzazioni GUI non sono eseguite.
Si possono anche omettere tutte le inizializzazioni GUI dando come nome "NONE".
-Vedere ":help gui-init" da vim per ulteriori dettagli.
+Vedere ":help gui\-init" da vim per ulteriori dettagli.
+.TP
+\-v
+Inizia
+.B Vim
+in Modo Vi, come se il programma eseguibile fosse "vi". Questo ha
+effetto solo quando Vim viene invocato con il nome "ex".
.TP
\-V[N]
Verboso. Vim manda messaggi relativi ai file di script che esegue
@@ -401,24 +376,10 @@ e quando legge o scrive un file viminfo. Il numero opzionale N è il valore
dell'opzione 'verbose'. Il valore predefinito è 10.
.TP
\-V[N]{nome_file}
-Comw \-V imposta 'verbosefile' a {nome_file}. Il risultato è che i messaggi
+Come \-V imposta 'verbosefile' a {nome_file}. Il risultato è che i messaggi
non sono visualizzati, ma scritti sul file {nome_file}. Il {nome_file} non
deve iniziare con un numero.
.TP
-\-\-log {nome_file}
-Se
-.B Vim
-è stato compilato con le funzionalità eval e channel, inizia a registrare
-e scrive le registrazioni a {nome_file}. Ciò equivale a chiamare
-.I ch_logfile({nome_file}, 'ao')
-in una fase molto iniziale dell'avvio del programma.
-.TP
-\-v
-Inizia
-.B Vim
-in Modo Vi, come se il programma eseguibile fosse "vi". Questo ha
-effetto solo quando Vim viene invocato con il nome "ex".
-.TP
\-w{numero}
Imposta l'opzione 'window' a {numero}.
.TP
@@ -434,7 +395,10 @@ Se il file {script_file} esiste, il testo immesso viene aggiunto in fondo.
Come \-w, ma uno script file esistente viene sovrascritto.
.TP
\-x
-Uso di cifratura nella scrittura dei file. Verrà chiesta una chiave di cifratura.
+Se
+.B Vim
+è stato compilato con il supporto per la cifratura, usare cifratura
+nella scrittura dei file. Verrà chiesta una chiave di cifratura.
.TP
\-X
Non connettersi al server X. Vim parte più rapidamente,
@@ -460,16 +424,54 @@ Si può usare per editare un file il cui nome inizi per '-'.
Richiede di non usare alcun file di personalizzazione (vimrc, plugin, etc.).
Utile per verificare se un problema persiste invocando Vim "originale".
.TP
+\-\-cmd {comando}
+Come "\-c", ma il comando è eseguito subito PRIMA
+di eseguire qualsiasi file vimrc.
+Si possono usare fino a 10 di questi comandi, indipendentemente dai comandi "\-c".
+.TP
\-\-echo\-wid
Solo per GUI GTK: Visualizza ID di Window su stdout.
.TP
+\-\-gui-dialog-file {nome}
+Quando si usa la GUI, invece di visualizzare un dialogo, il titolo e il
+messaggio del dialogo sono scritti sul file {nome}. Il file viene creato o,
+se già esistente, viene esteso. Quest'opzione serve solo in fase di test,
+per evitare di restare bloccati da un dialogo che non si riesce a visualizzare.
+Se si sta lavorando senza la GUI l'argomento viene ignorato.
+.TP
+\-\-help, \-h, \-?
+Un po' di aiuto su opzioni e argomenti che si possono dare invocando Vim.
+Subito dopo
+.B Vim
+esce.
+.TP
\-\-literal
Considera i nomi passati come argomenti letterali, senza espandere metacaratteri.
Non ha effetto in Unix, dove la shell espande comunque i metacaratteri.
.TP
+\-\-log {nome_file}
+Se
+.B Vim
+è stato compilato con le funzionalità eval e channel, inizia a registrare
+e scrive le registrazioni a {nome_file}. Ciò equivale a chiamare
+.I ch_logfile({nome_file}, 'ao')
+in una fase molto iniziale dell'avvio del programma.
+.TP
+\-\-nofork
+Direttamente [Foreground]. Per la versione GUI,
+.B Vim
+non crea [fork] una nuova finestra, indipendente dalla shell di invocazione.
+.TP
\-\-noplugin
Non caricare plugin. Implicito se si specifica \-u NONE.
.TP
+\-\-not\-a\-term
+Da usare per specificare a
+.B Vim
+che l'utente è consapevole che l'input e l'output non avvengono con un terminale
+vero e proprio. Ciò serve per evitare il messaggio di avvertimento e il ritardo
+di due secondi che avverrebbero in assenza di questo argomento.
+.TP
\-\-remote
Connettersi a un server Vim e chiedere di editare i file elencati come altri
argomenti. Se non si trova un server viene dato un messaggio e i file sono
@@ -498,16 +500,19 @@ Usa {nome} come nome server. Usato per il Vim corrente, a meno che sia usato
con l'argomento \-\-remote, nel qual caso indica il server a cui connettersi.
.TP
\-\-socketid {id}
-Solo per GUI GTK: Usa meccanismo GtkPlug per eseguire gvim in un'altra finestra.
+Solo per GUI GTK: Usa meccanismo GtkPlug per eseguire gVim in un'altra finestra.
.TP
\-\-startuptime {nome_file}
Durante la fase iniziale, scrive messaggi di log al file {nome_file}.
.TP
+\-\-ttyfail
+Quando stdin o stdout non sono un terminale (tty) esce subito da Vim.
+.TP
\-\-version
Stampa la versione di Vim ed esce.
.TP
\-\-windowid {id}
-Solo per GUI Win32: Chiede a gvim di provare a user l'ID di window {id}
+Solo per GUI Win32: Chiede a gVim di provare a user l'ID di window {id}
come padre, in modo da venir eseguito all'interno della finestra specificata.
.SH AIUTO ONLINE
Battere ":help" in
@@ -555,13 +560,17 @@ Inizializzazioni personali di
Inizializzazioni gvim a livello di sistema.
.TP
~/.gvimrc, ~/.vim/gvimrc, $XDG_CONFIG_HOME/vim/gvimrc
-Inizializzazioni personali di gvim (viene utilizzata la prima trovata).
+Inizializzazioni personali di
+.B gVim
+(viene utilizzata la prima trovata).
.TP
/usr/local/share/vim/optwin.vim
Script Vim usato dal comando ":options", maniera elegante per visualizzare e impostare opzioni.
.TP
/usr/local/share/vim/vim??/menu.vim
-Inizializzazioni del menù gvim a livello di sistema.
+Inizializzazioni del menù
+.B gVim
+a livello di sistema.
.TP
/usr/local/share/vim/vim??/bugreport.vim
Script Vim per generare una segnalazione di errore. Vedere ":help bugs".
diff --git a/runtime/doc/vim-it.UTF-8.1 b/runtime/doc/vim-it.UTF-8.1
index c9b5835..76e3db2 100644
--- a/runtime/doc/vim-it.UTF-8.1
+++ b/runtime/doc/vim-it.UTF-8.1
@@ -1,4 +1,4 @@
-.TH VIM 1 "4 giugno 2024"
+.TH VIM 1 "12 agosto 2024"
.SH NOME
vim \- VI Migliorato, un editor di testi per programmatori
.SH SINTASSI
@@ -31,7 +31,7 @@ vim \- VI Migliorato, un editor di testi per programmatori
.B rgview
.SH DESCRIZIONE
.B Vim
-Un editore di testi, compatibile con, e migliore di, Vi.
+è un editore di testi, compatibile con, e migliore di, Vi.
Può essere usato per editare qualsiasi file di testo.
Particolarmente utile per editare programmi.
.PP
@@ -150,18 +150,6 @@ Esempio: vim "+set si" main.c
.br
Note: Si possono avere fino a 10 comandi "+" o "\-c".
.TP
-\-S {file}
-I comandi contenuti in {file} sono eseguiti dopo la lettura del primo file.
-Equivalente a \-c "source {file}".
-{file} non può avere un nome che inizia per '\-'.
-Se {file} è omesso si usa "Session.vim" (funziona solo se \-S è l'ultimo
-argomento specificato).
-.TP
-\-\-cmd {comando}
-Come "\-c", ma il comando è eseguito PRIMA
-di eseguire qualsiasi file vimrc.
-Si possono usare fino a 10 di questi comandi, indipendentemente dai comandi "\-c".
-.TP
\-A
Se
.B Vim
@@ -224,11 +212,6 @@ Opzione da usare quando
sessione di edit (p.es., mail).
Sull'Amiga i comandi ":sh" e ":!" non sono disponibili.
.TP
-\-\-nofork
-Direttamente [Foreground]. Per la versione GUI,
-.B Vim
-non crea [fork] una nuova finestra, indipendente dalla shell di invocazione.
-.TP
\-F
Se
.B Vim
@@ -239,6 +222,8 @@ in Modo Farsi, cioè impostando 'fkmap' e 'rightleft'.
Altrimenti viene dato un messaggio di errore e
.B Vim
termina in modo anormale.
+.br
+Nota: Il supporto Farsi è stato rimosso a partire dalla patch 8.1.0932.
.TP
\-g
Se
@@ -248,19 +233,6 @@ Se Vim è stato compilato senza supporto GUI viene dato un messaggio di errore e
.B Vim
termina in modo anormale.
.TP
-\-\-gui-dialog-file {nome}
-Quando si usa la GUI, invece di visualizzare un dialogo, il titolo e il
-messaggio del dialogo sono scritti sul file {nome}. Il file viene creato o,
-se già esistente, viene esteso. Quest'opzione serve solo in fase di test,
-per evitare di restare bloccati da un dialogo che non si riesce a visualizzare.
-Se si sta lavorando senza la GUI l'argomento viene ignorato.
-.TP
-\-\-help, \-h, \-?
-Un po' di aiuto su opzioni e argomenti che si possono dare invocando Vim.
-Subito dopo
-.B Vim
-esce.
-.TP
\-H
Se
.B Vim
@@ -278,13 +250,13 @@ del file da usare invece di quello predefinito "~/.viminfo".
Si può anche evitare l'uso di un file .viminfo, dando come nome
"NONE".
.TP
-\-L
-Equivalente a \-r.
-.TP
\-l
Modo Lisp.
Imposta le opzioni 'lisp' e 'showmatch'.
.TP
+\-L
+Equivalente a \-r.
+.TP
\-m
Inibisce modifica file.
Inibisce l'opzione 'write'.
@@ -295,6 +267,13 @@ Modifiche non permesse. Le opzioni 'modifiable' e 'write' sono annullate,
in modo da impedire sia modifiche che riscritture. Da notare che queste
opzioni possono essere abilitate in seguito, permettendo così modifiche.
.TP
+\-n
+Inibisce l'uso di un file di swap.
+Il recupero dopo una caduta di macchina sarà impossibile.
+Utile per editare un file su un supporto molto lento (p.es., floppy).
+Il comando ":set uc=0" ha lo stesso effetto.
+Per abilitare il recupero usare ":set uc=200".
+.TP
\-N
Modo "Non-compatibile". Annulla l'opzione 'compatible'.
Così
@@ -302,13 +281,6 @@ Così
si comporta un po' meglio, ma è meno compatibile con Vi, anche in assenza di un
file .vimrc.
.TP
-\-n
-Inibisce l'uso di un file di swap.
-Il recupero dopo una caduta di macchina diventa impossibile.
-Utile per editare un file su un supporto molto lento (p.es., floppy).
-Il comando ":set uc=0" ha lo stesso effetto.
-Per abilitare il recupero usare ":set uc=200".
-.TP
\-nb
Diviene un Editor server per NetBeans. Vedere la documentazione per dettagli.
.TP
@@ -331,6 +303,16 @@ Vim viene eseguito in una finestra MDI (Multiple-Document Interface).
che sia sufficientemente esplicativo. Notare che l'implementazione è ancora
rudimentale. Non funziona per tutte le applicazioni, e il menù non funziona.
.TP
+\-r
+Lista file di swap, e informazioni su come usarli per ripristinare file.
+.TP
+\-r {file}
+Modo Recovery (ripristino).
+Il file di swap è usato per recuperare una sessione di edit finita male.
+Il file di swap è un file con lo stesso nome file del file di testo
+editato, col suffisso ".swp".
+Vedere ":help recovery".
+.TP
\-R
Modo Read-only (Sola Lettura).
Imposta l'opzione 'readonly'.
@@ -342,16 +324,6 @@ L'opzione \-R implica anche l'opzione \-n (vedere sopra).
L'opzione 'readonly' può essere annullata con ":set noro".
Vedere ":help 'readonly'".
.TP
-\-r
-Lista file di swap, e informazioni su come usarli per ripristinare file.
-.TP
-\-r {file}
-Modo Recovery (ripristino).
-Il file di swap è usato per recuperare una sessione di edit finita male.
-Il file di swap è un file con lo stesso nome file del file di testo
-editato, col suffisso ".swp".
-Vedere ":help recovery".
-.TP
\-s
Modo silenzioso. Solo quando invocato come "Ex" o quando l'opzione
"\-e" è stata data prima dell'opzione "\-s".
@@ -363,6 +335,13 @@ Lo stesso risultato si può ottenere col comando ":source! {script_in_input}".
Se la fine del file di input viene raggiunta prima che Vim termini,
l'ulteriore input verrà preso dalla tastiera.
.TP
+\-S {file}
+I comandi contenuti in {file} sono eseguiti dopo la lettura del primo file.
+Equivalente a \-c "source {file}".
+{file} non può avere un nome che inizia per '\-'.
+Se {file} è omesso si usa "Session.vim" (funziona solo se \-S è l'ultimo
+argomento specificato).
+.TP
\-T {terminale}
Dice a
.B Vim
@@ -372,16 +351,6 @@ Dovrebbe essere un terminale noto a
.B Vim
(predefinito) o definito nei file termcap o terminfo.
.TP
-\-\-not-a-term
-Da usare per specifica a
-.B Vim
-che l'utente è consapevole che l'input e l'output non avvengono con un terminale
-vero e proprio. Ciò serve per evitare il messaggio di avvertimento e il ritardo
-di due secondi che avverrebbero in assenza di questo argomento.
-.TP
-\-\-ttyfail
-Quando stdin o stdout non sono un terminale (tty) esci subito da Vim.
-.TP
\-u {vimrc}
Usa i comandi nel file {vimrc} per inizializzazioni.
Tutte le altre inizializzazioni non sono eseguite.
@@ -393,7 +362,13 @@ Vedere ":help initialization" da vim per ulteriori dettagli.
Usa i comandi nel file {gvimrc} per inizializzazioni GUI.
Tutte le altre inizializzazioni GUI non sono eseguite.
Si possono anche omettere tutte le inizializzazioni GUI dando come nome "NONE".
-Vedere ":help gui-init" da vim per ulteriori dettagli.
+Vedere ":help gui\-init" da vim per ulteriori dettagli.
+.TP
+\-v
+Inizia
+.B Vim
+in Modo Vi, come se il programma eseguibile fosse "vi". Questo ha
+effetto solo quando Vim viene invocato con il nome "ex".
.TP
\-V[N]
Verboso. Vim manda messaggi relativi ai file di script che esegue
@@ -401,24 +376,10 @@ e quando legge o scrive un file viminfo. Il numero opzionale N è il valore
dell'opzione 'verbose'. Il valore predefinito è 10.
.TP
\-V[N]{nome_file}
-Comw \-V imposta 'verbosefile' a {nome_file}. Il risultato è che i messaggi
+Come \-V imposta 'verbosefile' a {nome_file}. Il risultato è che i messaggi
non sono visualizzati, ma scritti sul file {nome_file}. Il {nome_file} non
deve iniziare con un numero.
.TP
-\-\-log {nome_file}
-Se
-.B Vim
-è stato compilato con le funzionalità eval e channel, inizia a registrare
-e scrive le registrazioni a {nome_file}. Ciò equivale a chiamare
-.I ch_logfile({nome_file}, 'ao')
-in una fase molto iniziale dell'avvio del programma.
-.TP
-\-v
-Inizia
-.B Vim
-in Modo Vi, come se il programma eseguibile fosse "vi". Questo ha
-effetto solo quando Vim viene invocato con il nome "ex".
-.TP
\-w{numero}
Imposta l'opzione 'window' a {numero}.
.TP
@@ -434,7 +395,10 @@ Se il file {script_file} esiste, il testo immesso viene aggiunto in fondo.
Come \-w, ma uno script file esistente viene sovrascritto.
.TP
\-x
-Uso di cifratura nella scrittura dei file. Verrà chiesta una chiave di cifratura.
+Se
+.B Vim
+è stato compilato con il supporto per la cifratura, usare cifratura
+nella scrittura dei file. Verrà chiesta una chiave di cifratura.
.TP
\-X
Non connettersi al server X. Vim parte più rapidamente,
@@ -460,16 +424,54 @@ Si può usare per editare un file il cui nome inizi per '-'.
Richiede di non usare alcun file di personalizzazione (vimrc, plugin, etc.).
Utile per verificare se un problema persiste invocando Vim "originale".
.TP
+\-\-cmd {comando}
+Come "\-c", ma il comando è eseguito subito PRIMA
+di eseguire qualsiasi file vimrc.
+Si possono usare fino a 10 di questi comandi, indipendentemente dai comandi "\-c".
+.TP
\-\-echo\-wid
Solo per GUI GTK: Visualizza ID di Window su stdout.
.TP
+\-\-gui-dialog-file {nome}
+Quando si usa la GUI, invece di visualizzare un dialogo, il titolo e il
+messaggio del dialogo sono scritti sul file {nome}. Il file viene creato o,
+se già esistente, viene esteso. Quest'opzione serve solo in fase di test,
+per evitare di restare bloccati da un dialogo che non si riesce a visualizzare.
+Se si sta lavorando senza la GUI l'argomento viene ignorato.
+.TP
+\-\-help, \-h, \-?
+Un po' di aiuto su opzioni e argomenti che si possono dare invocando Vim.
+Subito dopo
+.B Vim
+esce.
+.TP
\-\-literal
Considera i nomi passati come argomenti letterali, senza espandere metacaratteri.
Non ha effetto in Unix, dove la shell espande comunque i metacaratteri.
.TP
+\-\-log {nome_file}
+Se
+.B Vim
+è stato compilato con le funzionalità eval e channel, inizia a registrare
+e scrive le registrazioni a {nome_file}. Ciò equivale a chiamare
+.I ch_logfile({nome_file}, 'ao')
+in una fase molto iniziale dell'avvio del programma.
+.TP
+\-\-nofork
+Direttamente [Foreground]. Per la versione GUI,
+.B Vim
+non crea [fork] una nuova finestra, indipendente dalla shell di invocazione.
+.TP
\-\-noplugin
Non caricare plugin. Implicito se si specifica \-u NONE.
.TP
+\-\-not\-a\-term
+Da usare per specificare a
+.B Vim
+che l'utente è consapevole che l'input e l'output non avvengono con un terminale
+vero e proprio. Ciò serve per evitare il messaggio di avvertimento e il ritardo
+di due secondi che avverrebbero in assenza di questo argomento.
+.TP
\-\-remote
Connettersi a un server Vim e chiedere di editare i file elencati come altri
argomenti. Se non si trova un server viene dato un messaggio e i file sono
@@ -498,16 +500,19 @@ Usa {nome} come nome server. Usato per il Vim corrente, a meno che sia usato
con l'argomento \-\-remote, nel qual caso indica il server a cui connettersi.
.TP
\-\-socketid {id}
-Solo per GUI GTK: Usa meccanismo GtkPlug per eseguire gvim in un'altra finestra.
+Solo per GUI GTK: Usa meccanismo GtkPlug per eseguire gVim in un'altra finestra.
.TP
\-\-startuptime {nome_file}
Durante la fase iniziale, scrive messaggi di log al file {nome_file}.
.TP
+\-\-ttyfail
+Quando stdin o stdout non sono un terminale (tty) esce subito da Vim.
+.TP
\-\-version
Stampa la versione di Vim ed esce.
.TP
\-\-windowid {id}
-Solo per GUI Win32: Chiede a gvim di provare a user l'ID di window {id}
+Solo per GUI Win32: Chiede a gVim di provare a user l'ID di window {id}
come padre, in modo da venir eseguito all'interno della finestra specificata.
.SH AIUTO ONLINE
Battere ":help" in
@@ -555,13 +560,17 @@ Inizializzazioni personali di
Inizializzazioni gvim a livello di sistema.
.TP
~/.gvimrc, ~/.vim/gvimrc, $XDG_CONFIG_HOME/vim/gvimrc
-Inizializzazioni personali di gvim (viene utilizzata la prima trovata).
+Inizializzazioni personali di
+.B gVim
+(viene utilizzata la prima trovata).
.TP
/usr/local/share/vim/optwin.vim
Script Vim usato dal comando ":options", maniera elegante per visualizzare e impostare opzioni.
.TP
/usr/local/share/vim/vim??/menu.vim
-Inizializzazioni del menù gvim a livello di sistema.
+Inizializzazioni del menù
+.B gVim
+a livello di sistema.
.TP
/usr/local/share/vim/vim??/bugreport.vim
Script Vim per generare una segnalazione di errore. Vedere ":help bugs".
diff --git a/runtime/doc/vim-ja.UTF-8.1 b/runtime/doc/vim-ja.UTF-8.1
index e18211e..2a6db2f 100644
--- a/runtime/doc/vim-ja.UTF-8.1
+++ b/runtime/doc/vim-ja.UTF-8.1
@@ -1,4 +1,4 @@
-.TH VIM 1 "2021 Jun 13"
+.TH VIM 1 "2024 Aug 03"
.SH åå‰
vim \- Vi IMproved, プログラマã®ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿
.SH 書å¼
@@ -170,7 +170,7 @@ Note: "+" 㨠"\-c" ã¯åˆã‚ã›ã¦ 10 個ã¾ã§æŒ‡å®šã§ãã¾ã™ã€‚
指定ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ãŒé–‹ã‹ã‚Œã€ãれらã®ãƒ•ã‚¡ã‚¤ãƒ«ã®å·®åˆ†ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
vimdiff(1) ã¨åŒæ§˜ã®å‹•ä½œã§ã™ã€‚
.TP
-\-d {device}
+\-d {device}, \-dev {device}
{device} を端末ã¨ã—ã¦é–‹ãã¾ã™ã€‚
Amiga ã§ã®ã¿ä½¿ã„ã¾ã™ã€‚
例:
@@ -208,7 +208,13 @@ Amiga ã§ã¯ã€":sh" 㨠"!" コマンドã¯æ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚
GUI ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€GUI ã§èµ·å‹•ã—ã¾ã™ã€‚
サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
.TP
-\-h
+\-\-gui-dialog-file {name}
+GUI ã®ä½¿ç”¨æ™‚ã€ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’表示ã™ã‚‹ä»£ã‚ã‚Šã¨ã—ã¦ã€ãƒ•ã‚¡ã‚¤ãƒ« {name} ã¸ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®ã‚¿ã‚¤ãƒˆãƒ«ã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’書ãè¾¼ã¿ã¾ã™ã€‚
+ファイルã¯ä½œæˆã•ã‚Œã‚‹ã‹è¿½è¨˜ã•ã‚Œã¾ã™ã€‚
+テストã«ã¿æœ‰ç”¨ã§ã€è¦‹ã‚‹ã“ã¨ãŒã§ããªã„ダイアログã«ã‚ˆã£ã¦ãƒ†ã‚¹ãƒˆãŒä¸­æ–­ã•ã‚Œã‚‹ã®ã‚’防ãŽã¾ã™ã€‚
+GUI 以外ã§ã¯ã“ã®å¼•æ•°ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚
+.TP
+\-\-help, \-h, \-?
コマンドライン引数やオプションã®ãƒ˜ãƒ«ãƒ—を表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
.TP
\-H
@@ -266,6 +272,12 @@ N ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€å¼•æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’個別ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã§
N 個ã®ã‚¿ãƒ–ページを開ãã¾ã™ã€‚
N ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€å¼•æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’個別ã®ã‚¿ãƒ–ページã§é–‹ãã¾ã™ã€‚
.TP
+\-P {parent-title}
+Win32 ã®ã¿ã€‚親ã«ãªã‚‹ã‚¢ãƒ—リケーションã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’指定ã—ã¾ã™ã€‚
+å¯èƒ½ã§ã‚れ㰠Vim ã¯ãã® MDI アプリケーションã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦å†…ã§èµ·å‹•ã—ã¾ã™ã€‚
+{parent-title} ãŒè¦ªã‚¢ãƒ—リケーションã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã‚¿ã‚¤ãƒˆãƒ«ã«ä½¿ã‚ã‚Œã¦ã„ã¦ã€æ˜Žç¢ºã«åŒºåˆ¥ã§ãã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+Note: ã¾ã ç°¡å˜ã«å®Ÿè£…ã•ã‚Œã¦ã„ã‚‹ã ã‘ã§ã™ã€‚å…¨ã¦ã®ã‚¢ãƒ—リケーションã§å‹•ãã‚ã‘ã§ã¯ã‚ã‚Šã¾ã›ã‚“。メニューã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。
+.TP
\-R
読ã¿è¾¼ã¿å°‚用モード。
オプション 'readonly' ãŒã‚ªãƒ³ã«ãªã‚Šã¾ã™ã€‚
@@ -301,6 +313,15 @@ N ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€å¼•æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’個別ã®ã‚¿ãƒ–ページã§
ãŒçµ„ã¿è¾¼ã¿ã§ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹åå‰ã‹ã€
termcap ã¾ãŸã¯ terminfo ファイルã§å®šç¾©ã•ã‚Œã¦ã„ã‚‹åå‰ã‚’指定ã—ã¦ãã ã•ã„。
.TP
+\-\-not-a-term
+入力ã¨å‡ºåŠ›(ã‚‚ã—ãã¯ã©ã¡ã‚‰ã‹ä¸€æ–¹)ãŒç«¯æœ«ã«æŽ¥ç¶šã•ã‚Œã¦ã„ãªã„ã“ã¨ã‚’ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŠŠæ¡ã—ã¦ã„ã‚‹ã¨ã„ã†ã“ã¨ã‚’
+.B Vim
+ã«ä¼ãˆã¾ã™ã€‚
+ã“ã‚Œã«ã‚ˆã‚Šè­¦å‘ŠãŒè¡¨ç¤ºã•ã‚Œ 2 秒間ã®é…延ãŒç™ºç”Ÿã™ã‚‹ã®ã‚’é¿ã‘られã¾ã™ã€‚
+.TP
+\-\-ttyfail
+標準入力ã‹æ¨™æº–出力ãŒç«¯æœ« (tty) ã§ãªã„å ´åˆã€ã™ãã«çµ‚了ã—ã¾ã™ã€‚
+.TP
\-u {vimrc}
{vimrc} ファイルを使ã£ã¦åˆæœŸåŒ–ã—ã¾ã™ã€‚
ä»–ã®åˆæœŸåŒ–処ç†ã¯ã‚¹ã‚­ãƒƒãƒ—ã•ã‚Œã¾ã™ã€‚
@@ -320,11 +341,27 @@ termcap ã¾ãŸã¯ terminfo ファイルã§å®šç¾©ã•ã‚Œã¦ã„ã‚‹åå‰ã‚’指定ã
N ã«æŒ‡å®šã—ãŸæ•°å€¤ãŒ 'verbose' ã«è¨­å®šã•ã‚Œã¾ã™ã€‚
çœç•¥ã—ãŸå ´åˆã¯ 10 ã«ãªã‚Šã¾ã™ã€‚
.TP
+\-V[N]{filename}
+-V ã¨åŒæ§˜ã§ã€ã•ã‚‰ã« 'verbosefile' ã‚’ {filename} ã«è¨­å®šã—ã¾ã™ã€‚
+ãã®çµæžœã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯è¡¨ç¤ºã•ã‚Œãšã«ãƒ•ã‚¡ã‚¤ãƒ« {filename} ã«æ›¸ã出ã•ã‚Œã¾ã™ã€‚
+{filename} ã¯æ•°å­—ã§å§‹ã¾ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“。
+.TP
+\-\-log {filename}
+ã‚‚ã—
+.B Vim
+ãŒãƒãƒ£ãƒãƒ«æ©Ÿèƒ½ä»˜ãã§ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãƒ­ã‚°ã®å‡ºåŠ›ã‚’開始ã—ã€ãƒ•ã‚¡ã‚¤ãƒ« {filename} ã«æ›¸ãè¾¼ã¿ã¾ã™ã€‚
+ã“ã‚Œã¯ã€èµ·å‹•æ™‚ã®éžå¸¸ã«æ—©ã„段階ã§
+.I ch_logfile({filename}, 'ao')
+を呼ã³å‡ºã™ã®ã¨åŒæ§˜ãªå‹•ä½œã§ã™ã€‚
+.TP
\-v
Vi モードã§èµ·å‹•ã—ã¾ã™ã€‚
実行ファイルã®åå‰ãŒ "vi" ã®å ´åˆã¨åŒã˜ã§ã™ã€‚
実行ファイルã®åå‰ãŒ "ex" ã®å ´åˆã ã‘効果ãŒã‚ã‚Šã¾ã™ã€‚
.TP
+\-w{number}
+オプション 'window' ã‚’ {number} ã«è¨­å®šã—ã¾ã™ã€‚
+.TP
\-w {scriptout}
入力ã—ãŸæ–‡å­—ã‚’ {scriptout} ã«è¨˜éŒ²ã—ã¾ã™ã€‚
"vim \-s" ã‚„ "source!" ã§å®Ÿè¡Œã™ã‚‹ãŸã‚ã®ã‚¹ã‚¯ãƒªãƒ—トファイルを作æˆã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚
@@ -334,7 +371,9 @@ Vi モードã§èµ·å‹•ã—ã¾ã™ã€‚
\-w ã¨åŒã˜ã§ã™ãŒã€ãƒ•ã‚¡ã‚¤ãƒ«ãŒã™ã§ã«å­˜åœ¨ã—ãŸå ´åˆã¯ä¸Šæ›¸ãã•ã‚Œã¾ã™ã€‚
.TP
\-x
-ファイルを暗å·åŒ–ã—ã¦æ›¸ãè¾¼ã¿ã¾ã™ã€‚æš—å·åŒ–キーã®å…¥åŠ›ãƒ—ロンプトãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+.B Vim
+ãŒæš—å·åŒ–機能付ãã§ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æš—å·åŒ–ã—ã¦æ›¸ãè¾¼ã¿ã¾ã™ã€‚
+æš—å·åŒ–キーã®å…¥åŠ›ãƒ—ロンプトãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
.TP
\-X
X サーãƒãƒ¼ã¨é€šä¿¡ã—ã¾ã›ã‚“。端末ã§ã®èµ·å‹•æ™‚間を短ãã§ãã¾ã™ã€‚
@@ -362,9 +401,6 @@ X サーãƒãƒ¼ã¨é€šä¿¡ã—ã¾ã›ã‚“。端末ã§ã®èµ·å‹•æ™‚間を短ãã§ãã¾
\-\-echo\-wid
GTK GUI ã®ã¿: Window ID を標準出力ã«å‡ºåŠ›ã—ã¾ã™ã€‚
.TP
-\-\-help
-ヘルプを表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚"\-h" ã¨åŒã˜ã§ã™ã€‚
-.TP
\-\-literal
引数ã®ãƒ•ã‚¡ã‚¤ãƒ«åをリテラル文字列ã¨ã—ã¦æ‰±ã„ã¾ã™ã€‚ワイルドカードを展開ã—ã¾ã›ã‚“。
Unix ã®ã‚ˆã†ã«ã€ã‚·ã‚§ãƒ«ãŒãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã‚’展開ã™ã‚‹å ´åˆã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。
@@ -406,6 +442,10 @@ GTK GUI ã®ã¿: GtkPlug メカニズムを使ã£ã¦ gvim を別ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚
.TP
\-\-version
ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報を表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
+.TP
+\-\-windowid {id}
+Win32 GUI ã® Vim ã®ã¿ã€‚ウィンドウ {id} を親ウィンドウã«ã—よã†ã¨è©¦ã¿ã¾ã™ã€‚
+æˆåŠŸã™ã‚‹ã¨ãã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®å†…å´ã§èµ·å‹•ã—ã¾ã™ã€‚
.SH オンラインヘルプ
ヘルプを開ãã«ã¯ã€
.B Vim
@@ -420,53 +460,58 @@ GTK GUI ã®ã¿: GtkPlug メカニズムを使ã£ã¦ gvim を別ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚
例: ":help syntax.txt"。
.SH ファイル
.TP 15
-/usr/local/lib/vim/doc/*.txt
+/usr/local/share/vim/vim??/doc/*.txt
.B Vim
ã®ãƒ˜ãƒ«ãƒ—ファイル。
ファイルã®ä¸€è¦§ã¯ ":help doc\-file\-list" ã«è¨˜è¼‰ã•ã‚Œã¦ã„ã¾ã™ã€‚
+.br
+.I vim??
+ã¯çŸ­ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã§
+.B Vim 9.1
+ã§ã¯ vim91 ã§ã™ã€‚
.TP
-/usr/local/lib/vim/doc/tags
+/usr/local/share/vim/vim??/doc/tags
ヘルプを検索ã™ã‚‹ãŸã‚ã® tags ファイル。
.TP
-/usr/local/lib/vim/syntax/syntax.vim
+/usr/local/share/vim/vim??/syntax/syntax.vim
システムã®æ§‹æ–‡å®šç¾©åˆæœŸåŒ–ファイル。
.TP
-/usr/local/lib/vim/syntax/*.vim
+/usr/local/share/vim/vim??/syntax/*.vim
ã„ã‚ã„ã‚ãªè¨€èªžç”¨ã®æ§‹æ–‡å®šç¾©ãƒ•ã‚¡ã‚¤ãƒ«ã€‚
.TP
-/usr/local/lib/vim/vimrc
+/usr/local/share/vim/vimrc
システムã®
.B Vim
åˆæœŸåŒ–ファイル。
.TP
-~/.vimrc
+~/.vimrc, ~/.vim/vimrc, $XDG_CONFIG_HOME/vim/vimrc
ユーザーã®
.B Vim
-åˆæœŸåŒ–ファイル。
+åˆæœŸåŒ–ファイル。(最åˆã®ã‚‚ã®ãŒä½¿ã‚ã‚Œã¾ã™ã€‚)
.TP
-/usr/local/lib/vim/gvimrc
+/usr/local/share/vim/gvimrc
システム㮠gvim åˆæœŸåŒ–ファイル。
.TP
-~/.gvimrc
-ユーザー㮠gvim åˆæœŸåŒ–ファイル。
+~/.gvimrc, ~/.vim/gvimrc, $XDG_CONFIG_HOME/vim/gvimrc
+ユーザー㮠gvim åˆæœŸåŒ–ファイル。(最åˆã®ã‚‚ã®ãŒä½¿ã‚ã‚Œã¾ã™ã€‚)
.TP
-/usr/local/lib/vim/optwin.vim
+/usr/local/share/vim/vim??/optwin.vim
":options" コマンドã§ä½¿ã‚れるファイル。
オプションを表示ã—ãŸã‚Šè¨­å®šã—ãŸã‚Šã§ãã¾ã™ã€‚
.TP
-/usr/local/lib/vim/menu.vim
+/usr/local/share/vim/vim??/menu.vim
システムã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼åˆæœŸåŒ–ファイル。gvim ã§ä½¿ã„ã¾ã™ã€‚
.TP
-/usr/local/lib/vim/bugreport.vim
+/usr/local/share/vim/vim??/bugreport.vim
ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã‚’生æˆã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—ト。":help bugs" å‚照。
.TP
-/usr/local/lib/vim/filetype.vim
+/usr/local/share/vim/vim??/filetype.vim
ファイルåã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—を判定ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—ト。":help 'filetype'" å‚照。
.TP
-/usr/local/lib/vim/scripts.vim
+/usr/local/share/vim/vim??/scripts.vim
ファイルã®å†…容ã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—を判定ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—ト。":help 'filetype'" å‚照。
.TP
-/usr/local/lib/vim/print/*.ps
+/usr/local/share/vim/vim??/print/*.ps
PostScript å°åˆ·ã«ä½¿ã‚れるファイル。
.PP
最新ã®æƒ…報㯠VIM ã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„:
diff --git a/runtime/doc/vim-ru.1 b/runtime/doc/vim-ru.1
index dfcb3ec..4aa4887 100644
--- a/runtime/doc/vim-ru.1
+++ b/runtime/doc/vim-ru.1
@@ -1,19 +1,20 @@
-.TH VIM 1 "2002 Feb 22"
-.SH éíñ
-vim \- Vi IMproved (õÌÕÞÛÅÎÎÙÊ Vi), ÔÅËÓÔÏ×ÙÊ ÒÅÄÁËÔÏÒ ÄÌÑ ÐÒÏÇÒÁÍÍÉÓÔÏ×
-.SH ëïíáîäîáñ óôòïëá
+.TH VIM 1 "12 Á×ÇÕÓÔÁ 2024"
+.SH îáúîáþåîéå
+ðÒÏÇÒÁÍÍÁ Vim \[em] ÜÔÏ Vi IMproved (õÌÕÞÛÅÎÎÙÊ Vi), ÔÅËÓÔÏ×ÙÊ ÒÅÄÁËÔÏÒ ÄÌÑ
+ÐÒÏÇÒÁÍÍÉÓÔÏ×.
+.SH ëòáôëéê ïâúïò
.br
.B vim
-[ËÌÀÞÉ] [ÆÁÊÌ ..]
+[ÁÒÇÕÍÅÎÔÙ] [ÆÁÊÌ ...]
.br
.B vim
-[ËÌÀÞÉ] \-
+[ÁÒÇÕÍÅÎÔÙ] \-
.br
.B vim
-[ËÌÀÞÉ] \-t ÍÅÔËÁ
+[ÁÒÇÕÍÅÎÔÙ] \-t ÉÎÄÅËÓ
.br
.B vim
-[ËÌÀÞÉ] \-q [ÆÁÊÌ ÏÛÉÂÏË]
+[ÁÒÇÕÍÅÎÔÙ] \-q [ÆÁÊÌ ÒÅÚÕÌØÔÁÔÏ×]
.PP
.br
.B ex
@@ -22,468 +23,669 @@ vim \- Vi IMproved (õÌÕÞÛÅÎÎÙÊ Vi), ÔÅËÓÔÏ×ÙÊ ÒÅÄÁËÔÏÒ ÄÌÑ ÐÒÏÇÒÁÍÍÉÓÔÏ×
.br
.B gvim
.B gview
+.B evim
+.B eview
.br
.B rvim
.B rview
.B rgvim
.B rgview
.SH ïðéóáîéå
+ðÒÏÇÒÁÍÍÁ
.B Vim
--- ÔÅËÓÔÏ×ÙÊ ÒÅÄÁËÔÏÒ, ÏÂÒÁÔÎÏ-ÓÏ×ÍÅÓÔÉÍÙÊ Ó Vi.
-ïÎ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ ÄÌÑ ÐÒÁ×ËÉ ×ÓÅÈ ×ÉÄÏ× ÐÒÏÓÔÏÇÏ ÔÅËÓÔÁ.
-ïÓÏÂÅÎÎÏ ÏÎ ÈÏÒÏÛ ÄÌÑ ÐÒÁ×ËÉ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× ÐÒÏÇÒÁÍÍ.
+\[em] ÜÔÏ ÔÅËÓÔÏ×ÙÊ ÒÅÄÁËÔÏÒ, ÓÏ×ÍÅÓÔÉÍÙÊ Ó ÒÅÄÁËÔÏÒÏÍ Vi.
+ïÎÁ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎÁ ÄÌÑ ÐÒÁ×ËÉ ×ÓÅÈ ×ÉÄÏ× ÏÂÙÞÎÙÈ ÔÅËÓÔÏ×ÙÈ ÄÏËÕÍÅÎÔÏ×.
+ïÓÏÂÅÎÎÏ ÐÏÌÅÚÎÁ ÏÎÁ ÂÕÄÅÔ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× ÐÒÏÇÒÁÍÍ.
.PP
-ðÏ ÓÒÁ×ÎÅÎÉÀ Ó Vi,
+ðÏ ÓÒÁ×ÎÅÎÉÀ Ó ÒÅÄÁËÔÏÒÏÍ Vi, × ÒÅÄÁËÔÏÒÅ
.B Vim
-ÉÍÅÅÔ ÍÎÏÇÏ ÕÓÏ×ÅÒÛÅÎÓÔ×Ï×ÁÎÉÊ: ÍÎÏÇÏËÒÁÔÎÁÑ ÏÔÍÅÎÁ ÏÐÅÒÁÃÉÊ,
+ÐÒÅÄÓÔÁ×ÌÅÎÏ ÍÎÏÇÏ ÕÓÏ×ÅÒÛÅÎÓÔ×Ï×ÁÎÉÊ: ÍÎÏÇÏËÒÁÔÎÁÑ ÏÔÍÅÎÁ ÏÐÅÒÁÃÉÊ,
ÍÎÏÖÅÓÔ×ÅÎÎÏÓÔØ ÏËÏÎ É ÂÕÆÅÒÏ×, ÐÏÄÓ×ÅÔËÁ ÓÉÎÔÁËÓÉÓÁ, ÐÒÁ×ËÁ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ,
-Á×ÔÏÄÏÐÏÌÎÅÎÉÅ ÉͣΠÆÁÊÌÏ×, ×ÓÔÒÏÅÎÎÁÑ ÓÐÒÁ×ËÁ, ×ÉÚÕÁÌØÎÏÅ ×ÙÄÅÌÅÎÉÅ É Ô.Ð.
-óÍ. ":help vi_diff.txt" ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÌÎÏÇÏ ÓÐÉÓËÁ ÒÁÚÌÉÞÉÊ ÍÅÖÄÕ
+ÐÏÄÓÔÁÎÏ×ËÁ ÎÁÉÍÅÎÏ×ÁÎÉÊ ÆÁÊÌÏ×, ×ÓÔÒÏÅÎÎÁÑ ÄÏËÕÍÅÎÔÁÃÉÑ, ×ÉÚÕÁÌØÎÏÅ ×ÙÄÅÌÅÎÉÅ
+É ÐÒÏÞÅÅ.
+óÍ. ":help vi_diff.txt" ÞÔÏÂÙ ÏÚÎÁËÏÍÉÔØÓÑ Ó ÐÏÌÎÙÍ ÐÅÒÅÞÎÅÍ ÒÁÚÌÉÞÉÊ ÍÅÖÄÕ
+ÒÅÄÁËÔÏÒÏÍ
.B Vim
-É Vi.
+É ÒÅÄÁËÔÏÒÏÍ Vi.
.PP
-÷Ï ×ÒÅÍÑ ÒÁÂÏÔÙ ×
-.B Vim
-ÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÓÐÒÁ×ËÕ Ó ÐÏÍÏÝØÀ ÓÉÓÔÅÍÙ ×ÓÔÒÏÅÎÎÏÊ ÓÐÒÁ×ËÉ (ËÏÍÁÎÄÁ ":help").
-óÍ. ÒÁÚÄÅÌ "÷óôòïåîîáñ óðòá÷ëá" ÎÉÖÅ ÐÏ ÔÅËÓÔÕ.
+þÔÏÂÙ ÐÏÌÕÞÉÔØ ÐÏÌÅÚÎÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÒÁÂÏÔÅ Ó ÒÅÄÁËÔÏÒÏÍ
+.B Vim,
+ÍÏÖÎÏ ×ÏÓÐÏÌØÚÏ×ÁÔØÓÑ ×ÓÔÒÏÅÎÎÏÊ × ÐÒÏÇÒÁÍÍÕ ÄÏËÕÍÅÎÔÁÃÉÅÊ, ÎÁÂÒÁ× × ÒÅÄÁËÔÏÒÅ
+ËÏÍÁÎÄÕ ":help".
+óÍ. ÒÁÚÄÅÌ "÷óôòïåîîáñ äïëõíåîôáãéñ" ÄÁÌÅÅ × ÔÅËÓÔÅ.
.PP
-þÁÝÅ ×ÓÅÇÏ
+þÁÝÅ ×ÓÅÇÏ ÒÅÄÁËÔÏÒ
.B Vim
ÚÁÐÕÓËÁÀÔ ÄÌÑ ÐÒÁ×ËÉ ÏÄÎÏÇÏ ÆÁÊÌÁ ÐÒÉ ÐÏÍÏÝÉ ËÏÍÁÎÄÙ
.PP
vim ÆÁÊÌ
.PP
-÷ ÏÂÝÅÍ ×ÉÄÅ ËÏÍÁÎÄÁ ÚÁÐÕÓËÁ
+÷ ÏÂÝÅÍ ×ÉÄÅ ËÏÍÁÎÄÁ ÚÁÐÕÓËÁ ÒÅÄÁËÔÏÒÁ
.B Vim
×ÙÇÌÑÄÉÔ ÔÁË:
.PP
- vim [ËÌÀÞÉ] [ÓÐÉÓÏË ÆÁÊÌÏ×]
+ vim [ÁÒÇÕÍÅÎÔÙ] [ÆÁÊÌÙ]
.PP
-åÓÌÉ ÓÐÉÓÏË ÆÁÊÌÏ× ÏÔÓÕÔÓÔ×ÕÅÔ, ÒÅÄÁËÔÏÒ ÎÁÞÎ£Ô ÒÁÂÏÔÕ Ó ÐÕÓÔÙÍ ÂÕÆÅÒÏÍ.
-÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÉÍÑ ÆÁÊÌÁ ÄÏÌÖÎÏ ÂÙÔØ ÕËÁÚÁÎÏ ÏÄÎÉÍ ÉÚ ÓÌÅÄÕÀÝÉÈ ÞÅÔÙÒ£È ÓÐÏÓÏÂÏ×:
+åÓÌÉ ÆÁÊÌÙ ÎÅ ÕËÁÚÁÎÙ, ÒÅÄÁËÔÏÒ ÂÕÄÅÔ ÚÁÐÕÝÅÎ Ó ÄÏÓÔÕÐÎÙÍ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ
+ÐÕÓÔÙÍ ÂÕÆÅÒÏÍ.
+îÁÉÍÅÎÏ×ÁÎÉÑ ÆÁÊÌÏ× ÍÏÇÕÔ ÂÙÔØ ÕËÁÚÁÎÙ ÏÄÎÉÍ ÉÚ ÓÌÅÄÕÀÝÉÈ ÞÅÔÙÒ£È ÓÐÏÓÏÂÏ×:
.TP 12
-ÆÁÊÌ ..
-óÐÉÓÏË ÉͣΠÆÁÊÌÏ×.
-ðÅÒ×ÙÊ ÆÁÊÌ ÂÕÄÅÔ ÏÂßÑ×ÌÅÎ ÁËÔÉ×ÎÙÍ É ÚÁÇÒÕÖÅÎ × ÂÕÆÅÒ. ëÕÒÓÏÒ ÂÕÄÅÔ ÐÏÍÅÝ£Î
-× ÐÅÒ×ÏÊ ÓÔÒÏËÅ ÂÕÆÅÒÁ. äÏÓÔÕÐ Ë ÄÒÕÇÉÍ ÆÁÊÌÁÍ ÍÏÖÅÔ ÂÙÔØ ÏÓÕÝÅÓÔ×̣ΠÐÒÉ
-ÐÏÍÏÝÉ ËÏÍÁÎÄÙ ":next". þÔÏÂÙ ÐÒÁ×ÉÔØ ÆÁÊÌ, ÉÍÑ ËÏÔÏÒÏÇÏ ÎÁÞÉÎÁÅÔÓÑ Ó ÓÉÍ×ÏÌÁ
-"ÄÅÆÉÓ" (-), ÐÅÒÅÄ ÓÐÉÓËÏÍ ÆÁÊÌÏ× ÎÅÏÂÈÏÄÉÍÏ ÐÏÓÔÁ×ÉÔØ "--".
+ÆÁÊÌ ...
+ðÅÒÅÞÅÎØ ÎÁÉÍÅÎÏ×ÁÎÉÊ ÆÁÊÌÏ×.
+ðÅÒ×ÙÊ ÆÁÊÌ ÉÚ ÐÅÒÅÞÎÑ ÂÕÄÅÔ ÏÂßÑ×ÌÅÎ ÁËÔÉ×ÎÙÍ É ÚÁÇÒÕÖÅÎ × ÂÕÆÅÒ, Á ËÁÒÅÔËÁ
+ÕÓÔÁÎÏ×ÌÅÎÁ ÎÁ ÐÅÒ×ÏÊ ÓÔÒÏËÅ ÜÔÏÇÏ ÂÕÆÅÒÁ. äÏÓÔÕÐ Ë ÄÒÕÇÉÍ ÆÁÊÌÁÍ ÉÚ ÜÔÏÇÏ
+ÐÅÒÅÞÎÑ ÍÏÖÅÔ ÂÙÔØ ÏÓÕÝÅÓÔ×̣ΠÐÒÉ ÐÏÍÏÝÉ ËÏÍÁÎÄÙ ":next". þÔÏÂÙ ÐÒÁ×ÉÔØ ÆÁÊÌ,
+ÎÁÉÍÅÎÏ×ÁÎÉÅ ËÏÔÏÒÏÇÏ ÎÁÞÉÎÁÅÔÓÑ Ó ÓÉÍ×ÏÌÁ "ÄÅÆÉÓ" (\-), ÐÅÒÅÄ ÐÅÒÅÞÎÅÍ ÆÁÊÌÏ×
+ÎÅÏÂÈÏÄÉÍÏ ÕËÁÚÁÔØ ÓÉÍ×ÏÌÙ "\-\-".
.TP
\-
-æÁÊÌ ÂÕÄÅÔ ÐÒÏÞÉÔÁÎ ÉÚ ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ. ëÏÍÁÎÄÙ ÂÕÄÕÔ ÓÞÉÔÙ×ÁÔØÓÑ
-ÉÚ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ÄÉÁÇÎÏÓÔÉËÉ (stderr), ËÏÔÏÒÙÊ ÄÏÌÖÅÎ ÂÙÔØ
-ÔÅÒÍÉÎÁÌÏÍ.
-.TP
-\-t {ÍÅÔËÁ}
-éÍÑ ÆÁÊÌÁ É ÎÁÞÁÌØÎÁÑ ÐÏÚÉÃÉÑ ËÕÒÓÏÒÁ ÚÁ×ÉÓÑÔ ÏÔ "ÍÅÔËÉ", ÐÏÈÏÖÅÊ ÎÁ ÍÅÔËÕ goto.
-{ÍÅÔËÁ} ÉÝÅÔÓÑ × ÆÁÊÌÅ ÍÅÔÏË, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ÆÁÊÌ ÓÔÁÎÏ×ÉÔÓÑ ÁËÔÉ×ÎÙÍ, Á
-ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÁÑ ËÏÍÁÎÄÁ ÉÓÐÏÌÎÑÅÔÓÑ.
-þÁÝÅ ×ÓÅÇÏ ÉÓÐÏÌØÚÕÅÔÓÑ × ÐÒÏÇÒÁÍÍÁÈ ÎÁ ÑÚÙËÅ óÉ, ÇÄÅ {ÍÅÔËÁ} ÍÏÖÅÔ ÂÙÔØ ÉÍÅÎÅÍ
-ÆÕÎËÃÉÉ.
-æÁÊÌ, ÓÏÄÅÒÖÁÝÉÊ ÆÕÎËÃÉÀ, ÓÔÁÎÏ×ÉÔÓÑ ÁËÔÉ×ÎÙÍ, Á ËÕÒÓÏÒ ÐÏÍÅÝÁÅÔÓÑ × ÎÁÞÁÌÏ ÆÕÎËÃÉÉ.
-óÍ. ":help tag-commands".
-.TP
-\-q [ÆÁÊÌ ÏÛÉÂÏË]
-îÁÞÁÔØ ÒÁÂÏÔÕ × ÒÅÖÉÍÅ ÂÙÓÔÒÏÇÏ ÉÓÐÒÁ×ÌÅÎÉÑ.
-ðÒÉ ÜÔÏÍ ÓÞÉÔÙ×ÁÅÔÓÑ [ÆÁÊÌ ÏÛÉÂÏË] É ÐÅÒ×ÁÑ ÏÛÉÂËÁ ×Ù×ÏÄÉÔÓÑ ÎÁ ÜËÒÁÎ.
-åÓÌÉ [ÆÁÊÌ ÏÛÉÂÏË] ÎÅ ÕËÁÚÁÎ, ÉÍÑ ÆÁÊÌÁ ÂÅÒ£ÔÓÑ ÉÚ ÚÎÁÞÅÎÉÑ ÏÐÃÉÉ 'errorfile'
-(ÐÏ ÕÍÏÌÞÁÎÉÀ: "AztecC.Err" ÄÌÑ Amiga, "errors.err" ÄÌÑ ÄÒÕÇÉÈ ÓÉÓÔÅÍ).
-ë ÓÌÅÄÕÀÝÉÍ ÏÛÉÂËÁÍ ÍÏÖÎÏ ÐÅÒÅÊÔÉ ÐÏ ËÏÍÁÎÄÅ ":cn".
+ôÅËÓÔ ÄÌÑ ÐÒÁ×ËÉ ÂÕÄÅÔ ÓÞÉÔÁÎ ÉÚ ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ. ëÏÍÁÎÄÙ ÂÕÄÕÔ
+ÓÞÉÔÙ×ÁÔØÓÑ ÉÚ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ÄÉÁÇÎÏÓÔÉËÉ (stderr), ËÏÔÏÒÙÊ ÄÏÌÖÅÎ
+ÐÒÅÄÏÓÔÁ×ÌÑÔØÓÑ ÔÅÒÍÉÎÁÌÏÍ.
+.TP
+\-t {ÉÎÄÅËÓ}
+æÁÊÌÁ ÄÌÑ ÐÒÁ×ËÉ É ÎÁÞÁÌØÎÁÑ ÐÏÚÉÃÉÑ ËÁÒÅÔËÉ ÚÁ×ÉÓÑÔ ÏÔ ÚÎÁÞÅÎÉÑ "ÉÎÄÅËÓÁ",
+Ñ×ÌÑÀÝÉÊÓÑ Ó×ÏÅÇÏ ÒÏÄÁ ÍÅÔËÏÊ goto. ðÏÉÓË ÓÁÍÏÇÏ {ÉÎÄÅËÓÁ} ×ÙÐÏÌÎÑÅÔÓÑ × ÆÁÊÌÅ
+ÉÎÄÅËÓÏ×, Á ÓÏÐÏÓÔÁ×ÌÅÎÎÙÊ Ó ÎÉÍ ÆÁÊÌ ÂÕÄÅÔ ÏÔËÒÙÔ × ÒÅÄÁËÔÏÒÅ É ×ÙÐÏÌÎÅÎÁ
+Ó×ÑÚÁÎÎÁÑ Ó ÜÔÉÍ {ÉÎÄÅËÓÏÍ} ËÏÍÁÎÄÁ.
+þÁÝÅ ×ÓÅÇÏ ÜÔÏÔ ÓÐÏÓÏÂ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÐÒÏÇÒÁÍÍ ÎÁ ÑÚÙËÅ óÉ, ÇÄÅ {ÉÎÄÅËÓ} ÍÏÖÅÔ
+ÂÙÔØ ÎÁÉÍÅÎÏ×ÁÎÉÅÍ ÆÕÎËÃÉÉ.
+æÁÊÌ, ÓÏÄÅÒÖÁÝÉÊ ÔÁËÕÀ ÆÕÎËÃÉÀ, ÓÔÁÎÏ×ÉÔÓÑ ÁËÔÉ×ÎÙÍ, Á ËÁÒÅÔËÁ ÐÏÍÅÝÁÅÔÓÑ
+× ÎÁÞÁÌÏ ÜÔÏÊ ÆÕÎËÃÉÉ.
+óÍ. ":help tag\-commands".
+.TP
+\-q [ÆÁÊÌ ÒÅÚÕÌØÔÁÔÏ×]
+îÁÞÁÔØ ÒÁÂÏÔÕ ÒÅÄÁËÔÏÒÁ × ÃÉËÌÅ ÂÙÓÔÒÏÇÏ ÉÓÐÒÁ×ÌÅÎÉÑ ÔÅËÓÔÁ ÐÒÏÇÒÁÍÍ.
+âÕÄÅÔ ÓÞÉÔÁÎ [ÆÁÊÌ ÒÅÚÕÌØÔÁÔÏ×] É ÏÔÏÂÒÁÖÅÎÁ ÐÅÒ×ÁÑ ÚÁÐÉÓØ ÉÚ ÜÔÏÇÏ ÆÁÊÌÁ.
+åÓÌÉ [ÆÁÊÌ ÒÅÚÕÌØÔÁÔÏ×] ÎÅ ÕËÁÚÁÎ, ÔÏ ÅÇÏ ÎÁÉÍÅÎÏ×ÁÎÉÅ ÂÅÒ£ÔÓÑ ÉÚ ÚÎÁÞÅÎÉÑ
+ÐÁÒÁÍÅÔÒÁ 'errorfile' (ÐÏ ÕÍÏÌÞÁÎÉÀ ÄÌÑ ïó Amiga ÜÔÏ "AztecC.Err", Á ÄÌÑ ÄÒÕÇÉÈ
+ÓÉÓÔÅÍ \[em] "errors.err").
+ë ÓÌÅÄÕÀÝÅÊ ÚÁÐÉÓÉ × ÆÁÊÌÅ ÒÅÚÕÌØÔÁÔÏ× ÍÏÖÎÏ ÐÅÒÅÊÔÉ ÐÏ ËÏÍÁÎÄÅ ":cn".
óÍ. ":help quickfix".
.PP
+ðÒÏÇÒÁÍÍÁ
.B Vim
-×ÅÄ£Ô ÓÅÂÑ ÐÏ-ÒÁÚÎÏÍÕ × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÉÍÅÎÉ ËÏÍÁÎÄÙ (ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÍÏÖÅÔ
-ÂÙÔØ ÏÄÎÉÍ É ÔÅÍ ÖÅ).
+×ÅÄ£Ô ÓÅÂÑ ÐÏ-ÒÁÚÎÏÍÕ × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÕËÁÚÁÎÎÏÊ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ ËÏÍÁÎÄÙ
+×ÙÚÏ×Á ÒÅÄÁËÔÏÒÁ (ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÐÒÉ ÜÔÏÍ ÍÏÖÅÔ ÂÙÔØ ÏÄÎÉÍ É ÔÅÍ ÖÅ).
.TP 10
vim
-"îÏÒÍÁÌØÎÙÊ" ÚÁÐÕÓË, ×Ó£ ÐÏ ÕÍÏÌÞÁÎÉÀ.
+üÔÏ "ÎÏÒÍÁÌØÎÙÊ" ÚÁÐÕÓË ÒÅÄÁËÔÏÒÁ, ×Ó£ ÐÏ ÕÍÏÌÞÁÎÉÀ.
.TP
ex
-úÁÐÕÓË × ÒÅÖÉÍÅ Ex. äÌÑ ÐÅÒÅÈÏÄÁ × ÎÏÒÍÁÌØÎÙÊ ÒÅÖÉÍ
-ÎÅÏÂÈÏÄÉÍÏ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ":vi". òÅÖÉÍ Ex ×ËÌÀÞÁÅÔ
-ÔÁËÖÅ ËÌÀÞ "\-e".
+úÁÐÕÓË ÒÅÄÁËÔÏÒÁ × Ex-ÒÅÖÉÍÅ. äÌÑ ÐÅÒÅËÌÀÞÅÎÉÑ × ÏÂÙÞÎÙÊ ÒÅÖÉÍ, ÎÅÏÂÈÏÄÉÍÏ
+ÎÁÂÒÁÔØ ËÏÍÁÎÄÕ ":vi".
+Ex-ÒÅÖÉÍ ÔÁËÖÅ ÍÏÖÅÔ ÂÙÔØ ÁËÔÉ×ÉÒÏ×ÁÎ ÞÅÒÅÚ ÁÒÇÕÍÅÎÔ "\-e".
.TP
view
-úÁÐÕÓË × ÒÅÖÉÍÅ "ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ". ÷Ù ÂÕÄÅÔÅ ÚÁÝÉÝÅÎÙ ÏÔ ÓÌÕÞÁÊÎÏÊ ÚÁÐÉÓÉ
-ÆÁÊÌÁ. ôÏ ÖÅ ÓÁÍÏÅ ÍÏÖÎÏ ÓÄÅÌÁÔØ ËÌÀÞÏÍ "\-R".
+úÁÐÕÓË ÒÅÄÁËÔÏÒÁ × ÒÅÖÉÍÅ "ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ". ÷ ÜÔÏÍ ÒÅÖÉÍÅ ÅÓÔØ ÎÅËÏÔÏÒÁÑ
+ÚÁÝÉÔÁ ÏÔ ÓÌÕÞÁÊÎÏÊ ÐÅÒÅÚÁÐÉÓÉ ÆÁÊÌÏ×.
+ôÏ ÖÅ ÓÁÍÏÅ ÍÏÖÎÏ ÓÄÅÌÁÔØ ÞÅÒÅÚ ÕËÁÚÁÎÉÅ ÁÒÇÕÍÅÎÔÁ "\-R".
.TP
gvim gview
-÷ÅÒÓÉÑ Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ. úÁÐÕÓËÁÅÔÓÑ × ÎÏ×ÏÍ ÏËÎÅ.
-ôÏ ÖÅ ÓÁÍÏÅ ÍÏÖÎÏ ÓÄÅÌÁÔØ ÐÒÉ ÚÁÐÕÓËÅ Ó ËÌÀÞÏÍ "\-g".
+úÁÐÕÓË ÒÅÄÁËÔÏÒÁ Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ. äÌÑ ÜÔÏÇÏ ÂÕÄÅÔ ÏÔËÒÙÔÏ ÎÏ×ÏÅ ÏËÎÏ.
+ôÏ ÖÅ ÓÁÍÏÅ ÍÏÖÎÏ ÓÄÅÌÁÔØ ÐÒÉ ÚÁÐÕÓËÅ Ó ÁÒÇÕÍÅÎÔÏÍ "\-g".
+.TP
+evim eview
+õÐÒÏÝ£ÎÎÙÊ ×ÁÒÉÁÎÔ ÒÅÄÁËÔÏÒÁ Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ. úÁÐÕÓËÁÅÔÓÑ × ÎÏ×ÏÍ ÏËÎÅ.
+ôÏ ÖÅ ÓÁÍÏÅ ÍÏÖÎÏ ÓÄÅÌÁÔØ ÞÅÒÅÚ ÁÒÇÕÍÅÎÔ "\-y".
.TP
rvim rview rgvim rgview
-ëÁË É ÐÒÅÄÙÄÕÝÉÅ ËÏÍÁÎÄÙ, ÎÏ Ó ÏÇÒÁÎÉÞÅÎÉÑÍÉ. îÅÌØÚÑ ÚÁÐÕÓËÁÔØ ËÏÍÁÎÄÙ ÏÂÏÌÏÞËÉ
-ÉÌÉ ÐÒÉÏÓÔÁÎÁ×ÌÉ×ÁÔØ ÒÁÂÏÔÕ
+ëÁË É ÐÒÅÄÙÄÕÝÉÅ ËÏÍÁÎÄÙ, ÎÏ Ó ÎÅËÏÔÏÒÙÍÉ ÏÇÒÁÎÉÞÅÎÉÑÍÉ × ÆÕÎËÃÉÏÎÁÌØÎÏÓÔÉ.
+îÅÌØÚÑ ÚÁÐÕÓËÁÔØ ËÏÍÁÎÄÙ ÏÂÏÌÏÞËÉ ÉÌÉ ÐÒÉÏÓÔÁÎÁ×ÌÉ×ÁÔØ ÒÁÂÏÔÕ ÒÅÄÁËÔÏÒÁ
.B Vim.
-÷ÍÅÓÔÏ ÐÒÉÓÔÁ×ËÉ "r" ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÀÞ "\-Z".
-.SH ëìàþé
-ëÌÀÞÉ ÍÏÇÕÔ ÂÙÔØ ÕËÁÚÁÎÙ × ÌÀÂÏÍ ÐÏÒÑÄËÅ, ÄÏ ÉÌÉ ÐÏÓÌÅ ÉÍ£Î
-ÆÁÊÌÏ×. ëÌÀÞÉ ÂÅÚ ÁÒÇÕÍÅÎÔÏ× ÍÏÇÕÔ ÂÙÔØ ÏÂßÅÄÉÎÅÎÙ ÐÏÄ ÏÄÎÉÍ
-ÄÅÆÉÓÏÍ.
+÷ÍÅÓÔÏ ÐÒÉÓÔÁ×ËÉ "r" ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ "\-Z".
+.SH áòçõíåîôù ëïíáîäîïê óôòïëé
+áÒÇÕÍÅÎÔÙ ÍÏÇÕÔ ÂÙÔØ ÕËÁÚÁÎÙ × ÌÀÂÏÍ ÐÏÒÑÄËÅ, ÄÏ ÉÌÉ ÐÏÓÌÅ ÎÁÉÍÅÎÏ×ÁÎÉÊ ÆÁÊÌÏ×.
+áÒÇÕÍÅÎÔÙ, ÎÅ ÔÒÅÂÕÀÝÉÅ ÚÎÁÞÅÎÉÊ, ÍÏÇÕÔ ÂÙÔØ ÏÂßÅÄÉÎÅÎÙ Ó ÕËÁÚÁÎÉÅÍ ÔÏÌØËÏ
+ÏÄÎÏÇÏ ÄÅÆÉÓÁ.
.TP 12
+[ÎÏÍÅÒ]
-÷ ÐÅÒ×ÏÍ ÆÁÊÌÅ ËÕÒÓÏÒ ÂÕÄÅÔ ÐÏÍÅݣΠÎÁ ÓÔÒÏËÕ Ó ÕËÁÚÁÎÎÙÍ ÎÏÍÅÒÏÍ.
-åÓÌÉ "ÎÏÍÅÒ" ÎÅ ÕËÁÚÁÎ, ËÕÒÓÏÒ ÂÕÄÅÔ ÐÏÍÅݣΠÎÁ ÐÏÓÌÅÄÎÀÀ ÓÔÒÏËÕ.
+õÓÔÁÎÏ×ËÁ ËÁÒÅÔËÉ ÎÁ [ÎÏÍÅÒ] ÓÔÒÏËÉ.
+÷ ÐÅÒ×ÏÍ ÏÔËÒÙÔÏÍ ÆÁÊÌÅ ËÁÒÅÔËÁ ÂÕÄÅÔ ÕÓÔÁÎÏ×ÌÅÎÁ ÎÁ ÓÔÒÏËÕ Ó ÕËÁÚÁÎÎÙÍ ÎÏÍÅÒÏÍ.
+åÓÌÉ "ÎÏÍÅÒ" ÎÅ ÚÁÄÁÎ, ËÁÒÅÔËÁ ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÎÁ ÐÏÓÌÅÄÎÅÊ ÓÔÒÏËÅ ÆÁÊÌÁ.
.TP
+/{ÛÁÂÌÏÎ}
-÷ ÐÅÒ×ÏÍ ÆÁÊÌÅ ËÕÒÓÏÒ ÂÕÄÅÔ ÐÏÍÅݣΠÎÁ ÍÅÓÔÏ ÐÅÒ×ÏÇÏ ÓÏ×ÐÁÄÅÎÉÑ
-Ó ÕËÁÚÁÎÎÙÍ ÛÁÂÌÏÎÏÍ. óÍ. ":help search-pattern" ÄÌÑ ÐÏÌÕÞÅÎÉÑ
-ÓÐÉÓËÁ ÄÏÐÕÓÔÉÍÙÈ ÛÁÂÌÏÎÏ×.
+õÓÔÁÎÏ×ËÁ ËÁÒÅÔËÉ ÎÁ ÎÁÊÄÅÎÎÏÊ ÓÔÒÏËÅ.
+÷ ÏÔËÒÙÔÏÍ ÆÁÊÌÅ ËÁÒÅÔËÁ ÂÕÄÅÔ ÕÓÔÁÎÏ×ÌÅÎÁ × ÓÔÒÏËÅ ÐÅÒ×ÏÇÏ ÓÏ×ÐÁÄÅÎÉÑ
+Ó ÕËÁÚÁÎÎÙÍ ÛÁÂÌÏÎÏÍ. óÍ. ":help search\-pattern" ÄÌÑ ÏÚÎÁËÏÍÌÅÎÉÑ Ó ÄÏÐÕÓÔÉÍÙÍÉ
+ÛÁÂÌÏÎÁÍÉ.
.TP
+{ËÏÍÁÎÄÁ}
.TP
\-c {ËÏÍÁÎÄÁ}
-{ËÏÍÁÎÄÁ} ÉÓÐÏÌÎÑÅÔÓÑ ÐÏÓÌÅ ÚÁÇÒÕÚËÉ ÐÅÒ×ÏÇÏ ÆÁÊÌÁ ËÁË ËÏÍÁÎÄÁ Ex.
-åÓÌÉ {ËÏÍÁÎÄÁ} ÓÏÄÅÒÖÉÔ ÐÒÏÂÅÌÙ, ÔÏ ÏÎÁ ÄÏÌÖÎÁ ÂÙÔØ ÚÁËÌÀÞÅÎÁ ×
-Ä×ÏÊÎÙÅ ËÁ×ÙÞËÉ (× ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÉÓÐÏÌØÚÕÅÍÏÊ ÏÂÏÌÏÞËÉ).
-ðÒÉÍÅÒ: vim "+set si" main.c
+éÓÐÏÌÎÅÎÉÅ ÕËÁÚÁÎÎÏÊ {ËÏÍÁÎÄÙ}.
+ðÏÓÌÅ ÚÁÇÒÕÚËÉ ÐÅÒ×ÏÇÏ ÆÁÊÌÁ ÂÕÄÅÔ ÉÓÐÏÌÎÅÎÁ ÕËÁÚÁÎÎÁÑ {ËÏÍÁÎÄÁ} ËÁË Ex-ËÏÍÁÎÄÁ.
+åÓÌÉ × ÔÅËÓÔÅ {ËÏÍÁÎÄÁ} ÅÓÔØ ÐÒÏÂÅÌÙ, ÔÏ ÏÎÁ ÄÏÌÖÎÁ ÂÙÔØ ÚÁËÌÀÞÅÎÁ ×
+Ä×ÏÊÎÙÅ ËÁ×ÙÞËÉ (× ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÉÓÐÏÌØÚÕÅÍÏÊ ËÏÍÁÎÄÎÏÊ ÏÂÏÌÏÞËÉ).
+ðÒÉÍÅÒ:
+vim "+set si" main.c
.br
-ðÒÉÍÅÞÁÎÉÅ: íÏÖÎÏ ÕËÁÚÙ×ÁÔØ ÄÏ ÄÅÓÑÔÉ ËÏÍÁÎÄ "+" ÉÌÉ "\-c".
-.TP
-\-\-cmd {ËÏÍÁÎÄÁ}
-ëÁË "\-c", ÎÏ ËÏÍÁÎÄÁ ÉÓÐÏÌÎÑÅÔÓÑ ÐÅÒÅÄ ÏÂÒÁÂÏÔËÏÊ ÌÀÂÏÇÏ ÆÁÊÌÁ
-ÎÁÓÔÒÏÅË (vimrc).
-íÏÖÎÏ ÕËÁÚÙ×ÁÔØ ÄÏ ÄÅÓÑÔÉ ÔÁËÉÈ ËÏÍÁÎÄ, ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ËÏÌÉÞÅÓÔ×Á
-ËÏÍÁÎÄ "\-c".
+ðÒÉÍÅÞÁÎÉÅ. íÏÖÎÏ ÕËÁÚÙ×ÁÔØ ÄÏ ÄÅÓÑÔÉ ËÏÍÁÎÄ "+" ÉÌÉ "\-c".
.TP
\-A
-åÓÌÉ
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ Ó ÐÏÄÄÅÒÖËÏÊ ÁÒÁÂÓËÏÊ ÐÉÓØÍÅÎÎÏÓÔÉ.
+åÓÌÉ ÐÒÏÇÒÁÍÍÁ
.B Vim
-ÂÙÌ ÓÏÂÒÁÎ Ó ÐÏÄÄÅÒÖËÏÊ ÁÒÁÂÓËÏÇÏ ÑÚÙËÁ ÄÌÑ ÐÒÁ×ËÉ ÆÁÊÌÏ×,
-ÎÁÂÒÁÎÎÙÈ ÓÐÒÁ×Á ÎÁÌÅ×Ï, É Ó ÐÏÄÄÅÒÖËÏÊ ÁÒÁÂÓËÏÊ ËÌÁ×ÉÁÔÕÒÙ,
-ÜÔÏÔ ËÌÀÞ ÚÁÐÕÓËÁÅÔ
+ÂÙÌÁ ÓÏÂÒÁÎÁ Ó ÐÏÄÄÅÒÖËÏÊ ÐÒÁ×ËÉ ÔÅËÓÔÁ Ó ÎÁÐÉÓÁÎÉÅÍ ÓÐÒÁ×Á ÎÁÌÅ×Ï
+É Ó ÐÏÄÄÅÒÖËÏÊ ËÌÁ×ÉÁÔÕÒÙ ÄÌÑ ÁÒÁÂÓËÏÇÏ ÑÚÙËÁ, ÔÏ ÂÕÄÅÔ ×ÙÐÏÌÎÅÎ ÚÁÐÕÓË
+ÒÅÄÁËÔÏÒÁ
.B Vim
-× ÁÒÁÂÓËÏÍ ÒÅÖÉÍÅ, Ó ×ËÌÀÞÅÎÎÏÊ ÏÐÃÉÅÊ 'arabic'. ÷ ÐÒÏÔÉ×ÎÏÍ
-ÓÌÕÞÁÅ
+× ÒÅÖÉÍÅ ÒÁÂÏÔÙ Ó ÁÒÁÂÓËÏÊ ÐÉÓØÍÅÎÎÏÓÔØÀ, Ô. Å. ÕÓÔÁÎÏ×ÌÅÎ ÐÁÒÁÍÅÔÒ 'arabic'.
+÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÒÅÄÁËÔÏÒ
.B Vim
-ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ Ó ÏÛÉÂËÏÊ.
+ÚÁ×ÅÒÛÉÔ ÒÁÂÏÔÕ Ó ÓÏÏÂÝÅÎÉÅÍ Ï ÏÛÉÂËÅ.
.TP
\-b
-ä×ÏÉÞÎÙÊ ÒÅÖÉÍ.
-ðÒÏÉÚ×ÏÄÉÔÓÑ ÎÁÓÔÒÏÊËÁ ÎÅËÏÔÏÒÙÈ ÏÐÃÉÊ, ÄÅÌÁÀÝÉÈ ×ÏÚÍÏÖÎÏÊ ÐÒÁ×ËÕ
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ × ÒÅÖÉÍÅ ÒÁÂÏÔÙ Ó Ä×ÏÉÞÎÙÍÉ ÄÁÎÎÙÍÉ.
+ðÒÏÉÚ×ÏÄÉÔÓÑ ÎÁÓÔÒÏÊËÁ ÎÅËÏÔÏÒÙÈ ÐÁÒÁÍÅÔÒÏ×, ÄÅÌÁÀÝÉÈ ×ÏÚÍÏÖÎÏÊ ÐÒÁ×ËÕ
Ä×ÏÉÞÎÏÇÏ ÉÌÉ ÉÓÐÏÌÎÑÅÍÏÇÏ ÆÁÊÌÁ.
.TP
\-C
-òÅÖÉÍ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ. ÷ËÌÀÞÁÅÔ ÏÐÃÉÀ 'compatible'.
+òÁÂÏÔÁ × ×ÁÒÉÁÎÔÅ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó ÒÅÄÁËÔÏÒÏÍ Vi.
+âÕÄÅÔ ÕÓÔÁÎÏ×ÌÅÎ ÐÁÒÁÍÅÔÒ 'compatible', É ÒÅÄÁËÔÏÒ
.B Vim
-ÂÕÄÅÔ ÒÁÂÏÔÁÔØ ÐÏÞÔÉ ËÁË Vi, ÄÁÖÅ ÅÓÌÉ ÓÕÝÅÓÔ×ÕÅÔ ÆÁÊÌ .vimrc.
+ÂÕÄÅÔ ÒÁÂÏÔÁÔØ ÐÏÞÔÉ ËÁË ÒÅÄÁËÔÏÒ Vi, ÄÁÖÅ ÅÓÌÉ ÓÕÝÅÓÔ×ÕÅÔ ÆÁÊÌ ".vimrc".
.TP
\-d
-òÅÖÉÍ ÐÏÉÓËÁ ÒÁÚÌÉÞÉÊ.
-äÏÌÖÎÏ ÂÙÔØ ÕËÁÚÁÎÏ Ä×Á ÉÌÉ ÔÒÉ ÉÍÅÎÉ ÆÁÊÌÁ.
+òÅÖÉÍ ÓÒÁ×ÎÅÎÉÑ ÒÁÚÌÉÞÉÊ.
+íÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎÏ ÏÔ Ä×ÕÈ ÄÏ ×ÏÓØÍÉ ÎÁÉÍÅÎÏ×ÁÎÉÊ ÆÁÊÌÏ×. ÷ ÒÅÄÁËÔÏÒÅ
.B Vim
-ÏÔËÒÏÅÔ ×ÓÅ ÆÁÊÌÙ É ÐÏËÁÖÅÔ ÒÁÚÌÉÞÉÑ ÍÅÖÄÕ ÎÉÍÉ
-(ËÁË vimdiff(1)).
+ÂÕÄÕÔ ÏÔËÒÙÔÙ ×ÓÅ ÆÁÊÌÙ É ÐÏËÁÚÁÎÙ ÒÁÚÌÉÞÉÑ ÍÅÖÄÕ ÎÉÍÉ (ËÁË vimdiff(1)).
.TP
-\-d {ÕÓÔÒÏÊÓÔ×Ï}
-ïÔËÒÙÔØ {ÕÓÔÒÏÊÓÔ×Ï} ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × ËÁÞÅÓÔ×Å ÔÅÒÍÉÎÁÌÁ (ÔÏÌØËÏ ÎÁ Amiga).
+\-d {ÕÓÔÒÏÊÓÔ×Ï}, \-dev {ÕÓÔÒÏÊÓÔ×Ï}
+éÓÐÏÌØÚÏ×ÁÔØ {ÕÓÔÒÏÊÓÔ×Ï} ÄÌÑ ÏÐÅÒÁÃÉÊ ××ÏÄÁ-×Ù×ÏÄÁ.
+ïÔËÒÙÔØ {ÕÓÔÒÏÊÓÔ×Ï} ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × ËÁÞÅÓÔ×Å ÔÅÒÍÉÎÁÌÁ (ÔÏÌØËÏ × ïó Amiga).
ðÒÉÍÅÒ:
"\-d con:20/30/600/150".
.TP
+\-D
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ × ÒÅÖÉÍÅ ÄÉÁÇÎÏÓÔÉËÉ.
+ðÅÒÅËÌÀÞÅÎÉÅ × ÒÅÖÉÍ ÏÔÌÁÄËÉ ÐÒÉ ÉÓÐÏÌÎÅÎÉÉ ÐÅÒ×ÏÊ ËÏÍÁÎÄÙ ÉÚ ËÏÍÁÎÄÎÏÇÏ ÆÁÊÌÁ.
+.TP
\-e
-úÁÐÕÓÔÉÔØ
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ × Ex-ÒÅÖÉÍÅ.
+òÅÄÁËÔÏÒ
+.B Vim
+ÂÕÄÅÔ ÒÁÂÏÔÏÁÔØ × Ex-ÒÅÖÉÍÅ, ÔÏÖÅ, ÞÔÏ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ ÏÂÏÌÏÞËÉ ÎÁÂÒÁÔØ
+ËÏÍÁÎÄÕ "ex".
+.TP
+\-E
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ × ÕÌÕÞÛÅÎÎÏÍ Ex-ÒÅÖÉÍÅ.
+òÅÄÁËÔÏÒ
.B Vim
-× ÒÅÖÉÍÅ Ex, ËÁË ÂÕÄÔÏ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÉÍÅÅÔ ÉÍÑ "ex".
+ÂÕÄÅÔ ÒÁÂÏÔÁÔØ × ÕÌÕÞÛÅÎÎÏÍ Ex-ÒÅÖÉÍÅ, ÜÔÏ ÁÎÁÌÏÇÉÞÎÏ ÎÁÂÏÒÕ × ËÏÍÁÎÄÎÏÊ
+ÏÂÏÌÏÞËÅ ËÏÍÁÎÄÙ "exim".
.TP
\-f
-òÅÖÉÍ ÁËÔÉ×ÎÏÇÏ ÐÒÉÌÏÖÅÎÉÑ. ÷ÅÒÓÉÑ
+òÅÖÉÍ ÁËÔÉ×ÎÏÇÏ ÐÒÉÌÏÖÅÎÉÑ.
+òÅÄÁËÔÏÒ
.B Vim
-Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ ÎÅ ÂÕÄÅÔ ×ÅÔ×ÉÔØÓÑ É ÏÔËÌÀÞÁÔØÓÑ
-ÏÔ ÚÁÐÕÓÔÉ×ÛÅÊ Å£ ÏÂÏÌÏÞËÉ. îÁ ÐÌÁÔÆÏÒÍÅ Amiga
+Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ ÎÅ ÂÕÄÅÔ ÎÁÓÌÅÄÏ×ÁÔØÓÑ É ÏÔËÌÀÞÁÔØÓÑ ÏÔ ËÏÍÁÎÄÎÏÊ
+ÏÂÏÌÏÞËÉ, × ËÏÔÏÒÏÊ ×ÙÐÏÌÎÅÎÁ ËÏÍÁÎÄÁ ÅÇÏ ÚÁÐÕÓËÁ.
+îÁ ÐÌÁÔÆÏÒÍÅ Amiga ÒÅÄÁËÔÏÒ
.B Vim
-ÎÅ ÂÕÄÅÔ ÓÏÚÄÁ×ÁÔØ ÎÏ×ÏÅ ÏËÎÏ. üÔÏÔ ËÌÀÞ ÎÕÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ,
-ËÏÇÄÁ
+ÎÅ ÂÕÄÅÔ ÐÅÒÅÚÁÐÕÓËÁÔØÓÑ ÄÌÑ ÓÏÚÄÁÎÉÑ ÎÏ×ÏÇÏ ÏËÎÁ. üÔÏÔ ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÎÏÊ
+ÓÔÒÏËÉ ÎÕÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ, ËÏÇÄÁ ÒÅÄÁËÔÏÒ
.B Vim
ÚÁÐÕÓËÁÅÔÓÑ ÐÒÏÇÒÁÍÍÏÊ, ËÏÔÏÒÁÑ ÄÏÌÖÎÁ ÖÄÁÔØ ÚÁ×ÅÒÛÅÎÉÑ
ÓÅÁÎÓÁ ÐÒÁ×ËÉ (ÎÁÐÒÉÍÅÒ, ÐÒÏÇÒÁÍÍÁ ÄÌÑ ÒÁÂÏÔÙ Ó ÜÌÅËÔÒÏÎÎÏÊ ÐÏÞÔÏÊ).
-îÁ ÐÌÁÔÆÏÒÍÅ Amiga ËÏÍÁÎÄÙ ":sh" É ":!" ÎÅ ÂÕÄÕÔ ÒÁÂÏÔÁÔØ.
-.TP
-\-\-nofork
-òÅÖÉÍ ÁËÔÉ×ÎÏÇÏ ÐÒÉÌÏÖÅÎÉÑ. ÷ÅÒÓÉÑ
-.B Vim
-Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ ÎÅ ÂÕÄÅÔ ×ÅÔ×ÉÔØÓÑ É ÏÔËÌÀÞÁÔØÓÑ
-ÏÔ ÚÁÐÕÓÔÉ×ÛÅÊ Å£ ÏÂÏÌÏÞËÉ.
+îÁ ÐÌÁÔÆÏÒÍÅ Amiga × ÜÔÏÍ ÓÌÕÞÁÅ ËÏÍÁÎÄÙ ":sh" É ":!" ÎÅ ÂÕÄÕÔ ÒÁÂÏÔÁÔØ.
.TP
\-F
-åÓÌÉ
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ Ó ÐÏÄÄÅÒÖËÏÊ ÐÅÒÓÉÄÓËÏÊ ÐÉÓØÍÅÎÎÏÓÔÉ.
+åÓÌÉ ÐÒÏÇÒÁÍÍÁ
.B Vim
-ÂÙÌ ÓÏÂÒÁÎ Ó ÐÏÄÄÅÒÖËÏÊ FKMAP ÄÌÑ ÐÒÁ×ËÉ ÔÅËÓÔÁ ÓÐÒÁ×Á ÎÁÌÅ×Ï
-É ÎÁÓÔÒÏÅË ËÌÁ×ÉÁÔÕÒÙ ÄÌÑ ÑÚÙËÁ ÆÁÒÓÉ, ÜÔÏÔ ËÌÀÞ ÚÁÐÕÓËÁÅÔ
+ÂÙÌÁ ÓÏÂÒÁÎÁ Ó ÐÏÄÄÅÒÖËÏÊ ÐÒÁ×ËÉ ÔÅËÓÔÁ Ó ÎÁÐÉÓÁÎÉÅÍ ÓÐÒÁ×Á ÎÁÌÅ×Ï
+É Ó ÐÏÄÄÅÒÖËÏÊ ËÌÁ×ÉÁÔÕÒÙ ÄÌÑ ÐÅÒÓÉÄÓËÏÇÏ ÑÚÙËÁ, ÔÏ ÂÕÄÅÔ ×ÙÐÏÌÎÅÎ ÚÁÐÕÓË
+ÒÅÄÁËÔÏÒÁ
.B Vim
-× ÒÅÖÉÍÅ ÆÁÒÓÉ, ÉÎÁÞÅ ÇÏ×ÏÒÑ, Ó ×ËÌÀÞ£ÎÎÙÍÉ ÏÐÃÉÑÍÉ
-\&'fkmap' É 'rightleft'.
-÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ
+× ÒÅÖÉÍÅ ÒÁÂÏÔÙ Ó ÐÅÒÓÉÄÓËÏÊ ÐÉÓØÍÅÎÎÏÓÔØÀ, Ô. Å. ÕÓÔÁÎÏ×ÌÅÎÙ ÐÁÒÁÍÅÔÒÙ 'fkmap'
+É 'rightleft'.
+÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÒÅÄÁËÔÏÒ
.B Vim
-ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ Ó ÓÏÏÂÝÅÎÉÅÍ Ï ÏÛÉÂËÅ.
+ÚÁ×ÅÒÛÉÔ ÒÁÂÏÔÕ Ó ÓÏÏÂÝÅÎÉÅÍ Ï ÏÛÉÂËÅ.
+.br
+ðÒÉÍÅÞÁÎÉÅ. ðÏÄÄÅÒÖËÁ ÐÅÒÓÉÄÓËÏÊ ÐÉÓØÍÅÎÎÏÓÔÉ ÂÙÌÁ ÕÄÁÌÅÎÁ × ×ÅÒÓÉÉ 8.1.0932.
.TP
\-g
-åÓÌÉ
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ.
+åÓÌÉ ÐÒÏÇÒÁÍÍÁ
.B Vim
-ÂÙÌ ÓÏÂÒÁÎ Ó ÐÏÄÄÅÒÖËÏÊ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ, ÜÔÏÔ ËÌÀÞ
-×ËÌÀÞÁÅÔ ÇÒÁÆÉÞÅÓËÉÊ ÉÎÔÅÒÆÅÊÓ. ÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ
+ÂÙÌÁ ÓÏÂÒÁÎÁ Ó ÐÏÄÄÅÒÖËÏÊ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ, ÔÏ ÂÕÄÅÔ ×ÙÐÏÌÎÅÎ ÚÁÐÕÓË
+ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ ÐÏÌØÚÏ×ÁÔÅÌÑ.
+÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÒÅÄÁËÔÏÒ
.B Vim
-ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ Ó ÓÏÏÂÝÅÎÉÅÍ Ï ÏÛÉÂËÅ.
-.TP
-\-h
-÷Ù×ÏÄÉÔ ËÒÁÔËÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÁÒÇÕÍÅÎÔÁÈ É ËÌÀÞÁÈ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ.
-ðÏÓÌÅ ÜÔÏÇÏ
-.B Vim
-ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ.
+ÚÁ×ÅÒÛÉÔ ÒÁÂÏÔÕ Ó ÓÏÏÂÝÅÎÉÅÍ Ï ÏÛÉÂËÅ.
.TP
\-H
-åÓÌÉ
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ Ó ÐÏÄÄÅÒÖËÏÊ Å×ÒÅÊÓËÏÊ ÐÉÓØÍÅÎÎÏÓÔÉ.
+åÓÌÉ ÐÒÏÇÒÁÍÍÁ
.B Vim
-ÂÙÌ ÓÏÂÒÁÎ Ó ÐÏÄÄÅÒÖËÏÊ ÐÒÁ×ËÉ ÔÅËÓÔÁ ÓÐÒÁ×Á ÎÁÌÅ×Ï
-É ÎÁÓÔÒÏÅË ËÌÁ×ÉÁÔÕÒÙ ÄÌÑ É×ÒÉÔÁ, ÜÔÏÔ ËÌÀÞ ÚÁÐÕÓËÁÅÔ
+ÂÙÌÁ ÓÏÂÒÁÎÁ Ó ÐÏÄÄÅÒÖËÏÊ ÐÒÁ×ËÉ ÔÅËÓÔÁ Ó ÎÁÐÉÓÁÎÉÅÍ ÓÐÒÁ×Á ÎÁÌÅ×Ï
+É Ó ÐÏÄÄÅÒÖËÏÊ ËÌÁ×ÉÁÔÕÒÙ ÄÌÑ Å×ÒÅÊÓËÏÇÏ ÑÚÙËÁ, ÔÏ ÂÕÄÅÔ ×ÙÐÏÌÎÅÎ ÚÁÐÕÓË
+ÒÅÄÁËÔÏÒÁ
.B Vim
-× ÒÅÖÉÍÅ É×ÒÉÔÁ, ÉÎÁÞÅ ÇÏ×ÏÒÑ, Ó ×ËÌÀÞ£ÎÎÙÍÉ ÏÐÃÉÑÍÉ 'hkmap' É 'rightleft'.
-÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ
+× ÒÅÖÉÍÅ ÒÁÂÏÔÙ Ó Å×ÒÅÊÓËÏÊ ÐÉÓØÍÅÎÎÏÓÔØÀ, Ô. Å. ÕÓÔÁÎÏ×ÌÅÎÙ ÐÁÒÁÍÅÔÒÙ 'hkmap'
+É 'rightleft'.
+÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÒÅÄÁËÔÏÒ
.B Vim
-ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ Ó ÓÏÏÂÝÅÎÉÅÍ Ï ÏÛÉÂËÅ.
+ÚÁ×ÅÒÛÉÔ ÒÁÂÏÔÕ Ó ÓÏÏÂÝÅÎÉÅÍ Ï ÏÛÉÂËÅ.
.TP
-\-i {viminfo}
-åÓÌÉ ÉÓÐÏÌØÚÕÅÔÓÑ ÆÁÊÌ viminfo, ÔÏ ÜÔÏÔ ËÌÀÞ ÚÁÄÁ£Ô ÉÍÑ ÔÁËÏÇÏ ÆÁÊÌÁ (×ÍÅÓÔÏ
-"~/.viminfo" ÐÏ ÕÍÏÌÞÁÎÉÀ). íÏÖÎÏ ÔÁËÖÅ ÉÚÂÅÖÁÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÆÁÊÌÁ viminfo
-ÐÕÔ£Í ÕËÁÚÁÎÉÑ ÉÍÅÎÉ "NONE".
-.TP
-\-L
-ôÏ ÖÅ, ÞÔÏ É \-r.
+\-i {ÆÁÊÌ}
+éÓÐÏÌØÚÏ×ÁÔØ × ËÁÞÅÓÔ×Å ÆÁÊÌÁ ÐÏÄËÁÞËÉ ÕËÁÚÁÎÎÙÊ {ÆÁÊÌ}.
+þÅÒÅÚ ÜÔÏÔ ÁÒÇÕÍÅÎÔ ÚÁÄÁ£ÔÓÑ ÎÁÉÍÅÎÏ×ÁÎÉÅ viminfo-ÆÁÊÌÁ (×ÍÅÓÔÏ ÐÒÉÎÑÔÏÇÏ
+ÐÏ ÕÍÏÌÞÁÎÉÀ ".viminfo"). úÄÅÓØ ÖÅ ÍÏÖÎÏ ÏÔËÌÀÞÉÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ viminfo-ÆÁÊÌÁ
+ÞÅÒÅÚ ÕËÁÚÁÎÉÅ ÓÌÏ×Á "NONE" (ÐÒÏÐÉÓÎÙÍÉ ÂÕË×ÁÍÉ).
.TP
\-l
-òÅÖÉÍ Lisp. ÷ËÌÀÞÁÀÔÓÑ ÏÐÃÉÉ 'lisp' É 'showmatch'.
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ × ÒÅÖÉÍÅ Lisp.
+÷ÙÐÏÌÎÑÅÔÓÑ ÕÓÔÁÎÏ×ËÁ ÐÁÒÁÍÅÔÒÏ× 'lisp' É 'showmatch'.
+.TP
+\-L
+ôÏ ÖÅ, ÞÔÏ É ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ \-r.
.TP
\-m
-éÚÍÅÎÅÎÉÅ ÆÁÊÌÏ× ÚÁÐÒÅÝÅÎÏ. ðÒÉ ÜÔÏÍ ÏÔËÌÀÞÁÅÔÓÑ ÏÐÃÉÑ 'write', ÐÏÜÔÏÍÕ
-ÚÁÐÉÓØ ÆÁÊÌÏ× ÓÔÁÎÏ×ÉÔÓÑ ÎÅ×ÏÚÍÏÖÎÏÊ.
+òÁÂÏÔÁ ÂÅÚ ×ÏÚÍÏÖÎÏÓÔÉ ÓÏÈÒÁÎÅÎÉÑ ÉÚÍÅÎÅÎÉÊ.
+÷ÙÐÏÌÎÑÅÔÓÑ ÓÂÒÏÓ ÐÁÒÁÍÅÔÒÁ 'write', ÐÏÜÔÏÍÕ ÓÔÁÎÏ×ÉÔÓÑ ÎÅ×ÏÚÍÏÖÎÙÍ ÚÁÐÉÓÁÔØ
+× ÆÁÊÌ ÉÚÍÅÎÅÎÉÑ, ×ÎÅÓ£ÎÎÙÅ × ÂÕÆÅÒ.
.TP
-\-N
-òÅÖÉÍ ÎÅÐÏÌÎÏÊ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ. ïÔËÌÀÞÁÅÔÓÑ 'compatible'.
-.B Vim
-ÂÕÄÅÔ ÒÁÂÏÔÁÔØ ÌÕÞÛÅ, ÎÏ ÎÅ ÂÕÄÅÔ ÐÏÌÎÏÓÔØÀ ÓÏ×ÍÅÓÔÉÍ Ó Vi, ÄÁÖÅ ÅÓÌÉ
-ÏÔÓÕÔÓÔ×ÕÅÔ ÆÁÊÌ ÓÃÅÎÁÒÉÑ ÎÁÓÔÒÏÅË (.vimrc).
+\-M
+òÁÂÏÔÁ ÂÅÚ ×ÏÚÍÏÖÎÏÓÔÉ ×ÎÅÓÅÎÉÑ ÉÚÍÅÎÅÎÉÊ × ÔÅËÓÔ.
+ðÁÒÁÍÅÔÒÙ 'modifiable' É 'write' ÂÕÄÕÔ ÏÔËÌÀÞÅÎÙ, ÔÁË ÞÔÏ ÉÚÍÅÎÅÎÉÑ ÂÕÄÕÔ
+ÚÁÐÒÅÝÅÎÙ, É ÆÁÊÌÙ ÎÅ ÓÍÏÇÕÔ ÂÙÔØ ÚÁÐÉÓÁÎÙ.
+ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÐÏÓÌÅ ÎÁÞÁÌÁ ÒÁÂÏÔÙ ÒÅÄÁËÔÏÒÁ, ÜÔÉ ÐÁÒÁÍÅÔÒÙ ÍÏÖÎÏ
+×ËÌÀÞÉÔØ, ÞÔÏÂÙ ÒÁÚÒÅÛÉÔØ ×ÎÅÓÅÎÉÅ ÉÚÍÅÎÅÎÉÊ.
.TP
\-n
-îÅ ÉÓÐÏÌØÚÏ×ÁÔØ Ó×ÏÐ-ÆÁÊÌ. ÷ÏÓÓÔÁÎÏ×ÌÅÎÉÅ ÐÒÉ ÓÂÏÅ × ÒÁÂÏÔÅ ÂÕÄÅÔ ÎÅ×ÏÚÍÏÖÎÏ.
+òÁÂÏÔÁ ÂÅÚ ÓÏÚÄÁÎÉÑ ÆÁÊÌÁ ÐÏÄËÁÞËÉ.
+÷ ÜÔÏÍ ÓÌÕÞÁÅ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÅ ÐÒÉ ÓÂÏÅ × ÒÁÂÏÔÅ ÒÅÄÁËÔÏÒÁ ÂÕÄÅÔ ÎÅ×ÏÚÍÏÖÎÏ.
õÄÏÂÎÏ ÄÌÑ ÐÒÁ×ËÉ ÆÁÊÌÁ ÎÁ ÏÞÅÎØ ÍÅÄÌÅÎÎÏÍ ÎÏÓÉÔÅÌÅ (ÎÁÐÒÉÍÅÒ, ÇÉÂËÏÍ ÄÉÓËÅ).
-ôÏ ÖÅ ÓÁÍÏÅ ÍÏÖÎÏ ÓÄÅÌÁÔØ ËÏÍÁÎÄÏÊ ":set uc=0". ïÔÍÅÎÁ -- ":set uc=200".
+ôÏ ÖÅ ÓÁÍÏÅ ÍÏÖÎÏ ÓÄÅÌÁÔØ ËÏÍÁÎÄÏÊ ":set uc=0". ÷ËÌÀÞÅÎÉÅ ÆÁÊÌÁ ÐÏÄËÁÞËÉ \[em]
+":set uc=200".
+.TP
+\-N
+òÁÂÏÔÁ × ×ÁÒÉÁÎÔÅ ÎÅÐÏÌÎÏÊ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó ÒÅÄÁËÔÏÒÏÍ Vi.
+âÕÄÅÔ ÓÂÒÏÛÅÎ ÐÁÒÁÍÅÔÒ 'compatible'.
+òÅÄÁËÔÏÒ
+.B Vim
+ÂÕÄÅÔ ÒÁÂÏÔÁÔØ ÌÕÞÛÅ, ÎÏ ÎÅ ÂÕÄÅÔ ÐÏÌÎÏÓÔØÀ ÓÏ×ÍÅÓÔÉÍ Ó ÒÅÄÁËÔÏÒÏÍ Vi, ÄÁÖÅ ÅÓÌÉ
+ÏÔÓÕÔÓÔ×ÕÅÔ ÆÁÊÌ ÎÁÞÁÌØÎÙÈ ÎÁÓÔÒÏÅË (".vimrc").
+.TP
+\-nb
+îÁÚÎÁÞÉÔØ ÐÒÏÇÒÁÍÍÕ Vim ÓÅÒ×ÅÒÏÍ ÒÅÄÁËÔÏÒÁ ÄÌÑ éóò NetBeans. ðÏÄÒÏÂÎÏÓÔÉ
+ÓÍÏÔÒÉÔÅ × ÄÏËÕÍÅÎÔÁÃÉÉ.
.TP
\-o[N]
-ïÔËÒÙÔØ N ÏËÏÎ, ÒÁÚÄÅÌ£ÎÎÙÈ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ. åÓÌÉ N ÎÅ ÕËÁÚÁÎÏ, ÔÏ ÏÔËÒÙ×ÁÅÔÓÑ
-ÐÏ ÏÄÎÏÍÕ ÏËÎÕ ÎÁ ËÁÖÄÙÊ ÆÁÊÌ.
+óÏÚÄÁÔØ ÄÌÑ N ÆÁÊÌÏ× ÏÔÄÅÌØÎÙÅ ÏËÎÁ, ÒÁÓÐÏÌÏÖÅÎÎÙÅ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ.
+åÓÌÉ N ÎÅ ÕËÁÚÁÎÏ, ÔÏ ÓÏÚÄÁ£ÔÓÑ ÐÏ ÏÄÎÏÍÕ ÏËÎÕ ÎÁ ËÁÖÄÙÊ ÆÁÊÌ.
.TP
\-O[N]
-ïÔËÒÙÔØ N ÏËÏÎ, ÒÁÚÄÅÌ£ÎÎÙÈ ÐÏ ×ÅÒÔÉËÁÌÉ. åÓÌÉ N ÎÅ ÕËÁÚÁÎÏ, ÔÏ ÏÔËÒÙ×ÁÅÔÓÑ
-ÐÏ ÏÄÎÏÍÕ ÏËÎÕ ÎÁ ËÁÖÄÙÊ ÆÁÊÌ.
-.TP
-\-R
-òÅÖÉÍ "ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ". ÷ËÌÀÞÁÅÔÓÑ ÏÐÃÉÑ 'readonly'.
-æÁÊÌ × ÂÕÆÅÒÅ ÄÏÓÔÕÐÅÎ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ, ÎÏ ÅÇÏ ËÏÐÉÀ ÎÁ ÄÉÓËÅ ÎÅÌØÚÑ
-ÓÌÕÞÁÊÎÏ ÐÅÒÅÚÁÐÉÓÁÔØ. äÌÑ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ ÎÅÏÂÈÏÄÉÍÏ ÄÏÂÁ×ÉÔØ ×ÏÓËÌÉÃÁÔÅÌØÎÙÊ
-ÚÎÁË Ë ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ ËÏÍÁÎÄÅ Ex (ÎÁÐÒÉÍÅÒ, ":w!").
-ëÌÀÞ "\-R" ÐÏÄÒÁÚÕÍÅ×ÁÅÔ ÔÁËÖÅ, ÞÔÏ ÉÓÐÏÌØÚÕÅÔÓÑ É ËÌÀÞ "\-n" (ÓÍ. ×ÙÛÅ).
-ïÐÃÉÑ 'readonly' ÍÏÖÅÔ ÂÙÔØ ×ÙËÌÀÞÅÎÁ ÐÏ ËÏÍÁÎÄÅ ":set noro".
-óÍ. ":help 'readonly'".
+óÏÚÄÁÔØ ÄÌÑ N ÆÁÊÌÏ× ÏÔÄÅÌØÎÙÅ ÏËÎÁ, ÒÁÓÐÏÌÏÖÅÎÎÙÅ ÐÏ ×ÅÒÔÉËÁÌÉ.
+åÓÌÉ N ÎÅ ÕËÁÚÁÎÏ, ÔÏ ÓÏÚÄÁ£ÔÓÑ ÐÏ ÏÄÎÏÍÕ ÏËÎÕ ÎÁ ËÁÖÄÙÊ ÆÁÊÌ.
+.TP
+\-p[N]
+óÏÚÄÁÔØ ÄÌÑ N ÆÁÊÌÏ× ÏÔÄÅÌØÎÙÅ ×ËÌÁÄËÉ.
+åÓÌÉ N ÎÅ ÕËÁÚÁÎÏ, ÔÏ ÓÏÚÄÁ£ÔÓÑ ÐÏ ÏÄÎÏÊ ×ËÌÁÄËÅ ÎÁ ËÁÖÄÙÊ ÆÁÊÌ.
+.TP
+\-P {ÚÁÇÏÌÏ×ÏË ÏËÎÁ}
+ïÔËÒÙÔØ ÐÒÏÇÒÁÍÍÕ × ÍÎÏÇÏÄÏËÕÍÅÎÔÎÏÍ ÐÒÉÌÏÖÅÎÉÉ.
+ôÏÌØËÏ ÄÌÑ çéð × MS Windows. úÁÄÁ£Ô ÚÁÇÏÌÏ×ÏË ÏËÎÁ ÒÏÄÉÔÅÌØÓËÏÇÏ ÐÒÉÌÏÖÅÎÉÑ.
+åÓÌÉ ×ÏÚÍÏÖÎÏ, ÔÏ ÐÒÏÇÒÁÍÍÁ Vim ÂÕÄÅÔ ÚÁÐÕÝÅÎÁ ×ÎÕÔÒÉ ÏËÎÁ ÍÎÏÇÏÄÏËÕÍÅÎÔÎÏÇÏ
+ÐÒÉÌÏÖÅÎÉÑ. íÎÏÇÏÄÏËÕÍÅÎÔÎÏÅ ÐÒÉÌÏÖÅÎÉÅ ÄÏÌÖÎÏ ÉÍÅÔØ ÕËÁÚÁÎÎÙÊ {ÚÁÇÏÌÏ×ÏË ÏËÎÁ}.
+õÂÅÄÉÔÅÓØ, ÞÔÏ ÜÔÏÔ {ÚÁÇÏÌÏ×ÏË ÏËÎÁ} ÕÎÉËÁÌÅÎ ÄÌÑ ÐÒÉÌÏÖÅÎÉÑ. ïÂÒÁÝÁÅÍ ×ÎÉÍÁÎÉÅ,
+ÞÔÏ ÒÅÁÌÉÚÁÃÉÑ ÄÁÎÎÏÇÏ ÆÕÎËÃÉÏÎÁÌÁ ×Ó£ ÅÝ£ ÎÅ ÄÏ ËÏÎÃÁ ÏÔÒÁÂÏÔÁÎÁ. ÷ÎÅÄÒÅÎÉÅ
+ÐÒÏÇÒÁÍÍÙ ×ÏÚÍÏÖÎÏ ÎÅ ×Ï ×ÓÅ ÐÒÉÌÏÖÅÎÉÑ É ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÍÅÎÀ ÏËÎÁ.
.TP
\-r
-÷Ù×ÅÓÔÉ ÓÐÉÓÏË Ó×ÏÐ-ÆÁÊÌÏ× É ÉÎÆÏÒÍÁÃÉÀ Ï ÉÈ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÐÏÓÌÅ ÓÂÏÑ.
+÷Ù×ÏÄ ÐÅÒÅÞÎÑ ÆÁÊÌÏ× ÐÏÄËÁÞËÉ É ÚÁ×ÅÒÛÅÎÉÅ ÒÁÂÏÔÙ.
+âÕÄÕÔ ÐÏËÁÚÁÎÙ ÄÏÓÔÕÐÎÙÅ ÆÁÊÌÙ ÐÏÄËÁÞËÉ É ÉÎÆÏÒÍÁÃÉÑ Ï ÉÈ ÉÓÐÏÌØÚÏ×ÁÎÉÉ
+ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ × ÓÌÕÞÁÅ ÓÂÏÑ.
.TP
\-r {ÆÁÊÌ}
-òÅÖÉÍ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ.
-äÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÐÏÓÌÅ ÓÂÏÑ ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎ Ó×ÏÐ-ÆÁÊÌ.
-ó×ÏÐ-ÆÁÊÌ ÉÍÅÅÔ ÔÏ ÖÅ ÉÍÑ, ÞÔÏ É ÔÅËÓÔÏ×ÙÊ ÆÁÊÌ, ÎÏ Ó ÄÏÂÁ×ÌÅÎÉÅÍ ÒÁÓÛÉÒÅÎÉÑ ".swp".
+÷ÏÓÓÔÁÎÏ×ÌÅÎÉÅ Á×ÁÒÉÊÎÏ ÚÁ×ÅÒÛ£ÎÎÏÇÏ ÓÅÁÎÓÁ.
+äÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÐÏÓÌÅ ÓÂÏÑ × ÒÁÂÏÔÅ ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎ ÕËÁÚÁÎÎÙÊ ÆÁÊÌ ÐÏÄËÁÞËÉ.
+æÁÊÌ ÐÏÄËÁÞËÉ ÉÍÅÅÔ ÔÏ ÖÅ ÎÁÉÍÅÎÏ×ÁÎÉÅ, ÞÔÏ É ÒÅÄÁËÔÉÒÕÅÍÙÊ ÔÅËÓÔÏ×ÙÊ ÆÁÊÌ,
+ÎÏ Ó ÄÏÂÁ×ÌÅÎÉÅÍ ÒÁÓÛÉÒÅÎÉÑ ".swp".
óÍ. ":help recovery".
.TP
+\-R
+òÁÂÏÔÁ × ×ÁÒÉÁÎÔÅ ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ.
+âÕÄÅÔ ÕÓÔÁÎÏ×ÌÅÎ ÐÁÒÁÍÅÔÒ 'readonly'.
+æÁÊÌ × ÂÕÆÅÒÅ ÄÏÓÔÕÐÅÎ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ, ÎÏ ÅÇÏ ËÏÐÉÀ ÎÁ ÄÉÓËÅ ÎÅÌØÚÑ
+ÓÌÕÞÁÊÎÏ ÐÅÒÅÚÁÐÉÓÁÔØ. äÌÑ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ ÎÅÏÂÈÏÄÉÍÏ ÄÏÂÁ×ÉÔØ ×ÏÓËÌÉÃÁÔÅÌØÎÙÊ
+ÚÎÁË Ë ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ Ex-ËÏÍÁÎÄÅ (ÎÁÐÒÉÍÅÒ, ":w!").
+ðÒÉ ÚÁÄÁÎÉÉ ÁÒÇÕÍÅÎÔÁ "\-R" ÔÁËÖÅ ÐÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ, ÞÔÏ ÉÓÐÏÌØÚÕÅÔÓÑ É ÁÒÇÕÍÅÎÔ
+"\-n" (ÓÍ. ×ÙÛÅ).
+ðÁÒÁÍÅÔÒ 'readonly' ÍÏÖÅÔ ÂÙÔØ ÓÂÒÏÛÅÎ ÐÏ ËÏÍÁÎÄÅ ":set noro".
+óÍ. ":help 'readonly'".
+.TP
\-s
-ôÉÈÉÊ ÒÅÖÉÍ. ôÏÌØËÏ ÐÒÉ ÚÁÐÕÓËÅ ËÁË "Ex" ÉÌÉ ÅÓÌÉ ÐÅÒÅÄ "\-s" ÕËÁÚÁÎ ËÌÀÞ "\-e".
+ôÉÈÉÊ ÒÅÖÉÍ.
+ôÏÌØËÏ ÐÒÉ ÚÁÐÕÓËÅ × ËÏÍÁÎÄÎÏÊ ÏÂÏÌÏÞËÅ ËÁË ÐÒÏÇÒÁÍÍÙ "ex" ÉÌÉ ÅÓÌÉ ÐÅÒÅÄ
+ÁÒÇÕÍÅÎÔÏÍ "\-s" ÕËÁÚÁÎ ÁÒÇÕÍÅÎÔ "\-e".
+.TP
+\-s {ËÏÍÁÎÄÎÙÊ ÆÁÊÌ}
+óÞÉÔÙ×ÁÎÉÅ ËÏÍÁÎÄ ÒÅÖÉÍÁ ËÏÍÁÎÄ ÉÚ {ËÏÍÁÎÄÎÏÇÏ ÆÁÊÌÁ}.
+óÏÄÅÒÖÉÍÏÅ ÆÁÊÌÁ ×ÏÓÐÒÉÎÉÍÁÅÔÓÑ × ×ÉÄÅ ËÏÍÁÎÄ, ËÁË ÅÓÌÉ ÂÙ ÏÎÉ ÂÙÌÉ ÎÁÂÒÁÎÙ
+ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ × ÒÅÄÁËÔÏÒÅ.
+ôÏ ÖÅ ÓÁÍÏÅ ÄÏÓÔÉÇÁÅÔÓÑ ËÏÍÁÎÄÏÊ ":source! {ËÏÍÁÎÄÎÙÊ ÆÁÊÌ}".
+åÓÌÉ ÐÏÓÌÅ ÉÓÐÏÌÎÅÎÉÑ ×ÓÅÈ ËÏÍÁÎÄ ÉÚ {ËÏÍÁÎÄÎÏÇÏ ÆÁÊÌÁ} ÒÁÂÏÔÁ ÒÅÄÁËÔÏÒÁ
+ÐÒÏÄÏÌÖÁÅÔÓÑ, ÔÏ ÄÁÌØÎÅÊÛÉÊ ××ÏÄ ËÏÍÁÎÄ É ÔÅËÓÔÁ ÏÖÉÄÁÅÔÓÑ Ó ËÌÁ×ÉÁÔÕÒÙ.
+.TP
+\-S {ÆÁÊÌ}
+éÓÐÏÌÎÅÎÉÅ ÕËÁÚÁÎÎÏÇÏ {ÆÁÊÌÁ}.
+ðÏÓÌÅ ÚÁÇÒÕÚËÉ × ÂÕÆÅÒ ÐÅÒ×ÏÇÏ ÆÁÊÌÁ, ÂÕÄÅÔ ÉÓÐÏÌÎÅÎ ÕËÁÚÁÎÎÙÊ ËÏÍÁÎÄÎÙÊ {ÆÁÊÌ}.
+üÔÏ ÁÎÁÌÏÇÉÞÎÏ ËÏÍÁÎÄÅ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ \-c "source {ÆÁÊÌ}".
+îÁÉÍÅÎÏ×ÁÎÉÅ {ÆÁÊÌÁ} ÎÅ ÍÏÖÅÔ ÎÁÞÉÎÁÔØÓÑ Ó ÓÉÍ×ÏÌÁ '\-'.
+åÓÌÉ ÎÅ ÕËÁÚÁÎ {ÆÁÊÌ}, ÔÏ ÂÕÄÅÔ ÉÓÐÏÌÎÅÎ ÆÁÊÌ "Session.vim" (ÜÔÏ ÂÕÄÅÔ ÒÁÂÏÔÁÔØ
+ÔÏÌØËÏ ÅÓÌÉ ÁÒÇÕÍÅÎÔ \-S Ñ×ÌÑÅÔÓÑ ÐÏÓÌÅÄÎÉÍ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ).
+.TP
+\-T {ÔÅÒÍÉÎÁÌ}
+îÁÚÎÁÞÉÔØ ÕËÁÚÁÎÎÙÊ ÔÉÐ {ÔÅÒÍÉÎÁÌÁ}.
+òÅÄÁËÔÏÒÕ
+.B Vim
+ÂÕÄÅÔ ÐÅÒÅÄÁÎ ÔÉÐ ÉÓÐÏÌØÚÕÅÍÏÇÏ ÔÅÒÍÉÎÁÌÁ.
+îÅÏÂÈÏÄÉÍÏ ÔÏÌØËÏ × ÔÅÈ ÓÉÔÕÁÃÉÑÈ, ËÏÇÄÁ Á×ÔÏÍÁÔÉÞÅÓËÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÔÅÒÍÉÎÁÌÁ
+ÎÅ ÒÁÂÏÔÁÅÔ. îÁÉÍÅÎÏ×ÁÎÉÅ ÔÅÒÍÉÎÁÌÁ ÄÏÌÖÎÏ ÂÙÔØ ÉÚ×ÅÓÔÎÏ ÒÅÄÁËÔÏÒÕ
+.B Vim
+(ÐÒÅÄÏÐÒÅÄÅÌÅÎÏ × ÒÅÄÁËÔÏÒÅ) ÌÉÂÏ ÕËÁÚÁÎÏ × ÂÁÚÅ termcap ÉÌÉ terminfo.
+.TP
+\-u {ÆÁÊÌ}
+éÓÐÏÌØÚÏ×ÁÔØ ÄÌÑ ÎÁÞÁÌØÎÏÊ ÎÁÓÔÒÏÊËÉ ÕËÁÚÁÎÎÙÊ ËÏÍÁÎÄÎÙÊ {ÆÁÊÌ}.
+÷ÓÅ ÏÓÔÁÌØÎÙÅ ÆÁÊÌÙ ÎÁÓÔÒÏÅË ÉÇÎÏÒÉÒÕÀÔÓÑ.
+õÄÏÂÎÏ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÓÐÅÃÉÁÌØÎÙÈ ÔÉÐÏ× ÆÁÊÌÏ×.
+þÅÒÅÚ ÜÔÏÔ ÁÒÇÕÍÅÎÔ ÍÏÖÎÏ ÔÁËÖÅ ÏÔËÌÀÞÉÔØ ÏÂÒÁÂÏÔËÕ ×ÓÅÈ ÆÁÊÌÏ× ÎÁÞÁÌØÎÏÊ
+ÎÁÓÔÒÏÊËÉ, ÉÓÐÏÌØÚÕÊÔÅ ÄÌÑ ÜÔÏÇÏ ÓÌÏ×Ï "NONE" (ÐÒÏÐÉÓÎÙÍÉ ÂÕË×ÁÍÉ).
+óÍ. ":help initialization".
+.TP
+\-U {ÆÁÊÌ}
+éÓÐÏÌØÚÏ×ÁÔØ ÄÌÑ ÎÁÞÁÌØÎÏÊ ÎÁÓÔÒÏÊËÉ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ ÕËÁÚÁÎÎÙÊ
+ËÏÍÁÎÄÎÙÊ {ÆÁÊÌ}.
+÷ÓÅ ÏÓÔÁÌØÎÙÅ ÆÁÊÌÙ ÎÁÓÔÒÏÅË ÄÌÑ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ ÉÇÎÏÒÉÒÕÀÔÓÑ.
+þÅÒÅÚ ÜÔÏÔ ÁÒÇÕÍÅÎÔ ÍÏÖÎÏ ÔÁËÖÅ ÏÔËÌÀÞÉÔØ ÏÂÒÁÂÏÔËÕ ×ÓÅÈ ÆÁÊÌÏ× ÎÁÓÔÒÏÊËÉ
+ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ, ÉÓÐÏÌØÚÕÊÔÅ ÄÌÑ ÜÔÏÇÏ ÓÌÏ×Ï "NONE" (ÐÒÏÐÉÓÎÙÍÉ ÂÕË×ÁÍÉ).
+óÍ. ":help gui\-init".
.TP
-\-s {scriptin}
-óÞÉÔÙ×ÁÅÔÓÑ ÆÁÊÌ ÓÃÅÎÁÒÉÑ {scriptin}. ðÒÉ ÜÔÏÍ, ÓÏÄÅÒÖÉÍÏÅ ÆÁÊÌÁ ×ÏÓÐÒÉÎÉÍÁÅÔÓÑ
-× ×ÉÄÅ ËÏÍÁÎÄ, ËÁË ÅÓÌÉ ÂÙ ÏÎÉ ÂÙÌÉ ÎÁÂÒÁÎÙ ÎÁ ËÏÎÓÏÌÉ.
-ôÏ ÖÅ ÓÁÍÏÅ ÄÏÓÔÉÇÁÅÔÓÑ ËÏÍÁÎÄÏÊ ":source! {scriptin}".
-åÓÌÉ ËÏÎÅà ÆÁÊÌÁ ÓÞÉÔÙ×ÁÅÔÓÑ ÄÏ ÚÁ×ÅÒÛÅÎÉÑ ÒÁÂÏÔÙ ÒÅÄÁËÔÏÒÁ, ÔÏ × ÄÁÌØÎÅÊÛÅÍ
-××ÏÄ ÏÓÕÝÅÓÔ×ÌÑÅÔÓÑ Ó ËÌÁ×ÉÁÔÕÒÙ.
+\-v
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ × ÒÅÖÉÍÅ Vi.
+òÅÄÁËÔÏÒ
+.B Vim
+ÂÕÄÅÔ ÒÁÂÏÔÁÔØ × ÒÅÖÉÍÅ ÒÅÄÁËÔÏÒÁ Vi, ËÁË ÂÕÄÔÏ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÎÁÚÙ×ÁÅÔÓÑ "vi".
+éÍÅÅÔ ÓÍÙÓÌ ÔÏÌØËÏ ÅÓÌÉ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÎÁÚÙ×ÁÅÔÓÑ "ex".
+.TP
+\-V[N]
+òÅÖÉÍ ÐÏÄÒÏÂÎÏÇÏ ×Ù×ÏÄÁ.
+âÕÄÕÔ ×Ù×ÏÄÉÔØÓÑ ÓÏÏÂÝÅÎÉÑ Ï ÔÏÍ, ËÁËÉÅ ËÏÍÁÎÄÎÙÅ ÆÁÊÌÙ ÉÓÐÏÌÎÑÀÔÓÑ, É ËÁËÁÑ
+ÉÎÆÏÒÍÁÃÉÑ ÓÞÉÔÙ×ÁÅÔÓÑ É ÚÁÐÉÓÙ×ÁÅÔÓÑ × viminfo-ÆÁÊÌÅ. îÅÏÂÑÚÁÔÅÌØÎÏÅ ÞÉÓÌÏ N
+ÚÁÄÁ£Ô ÕÒÏ×ÅÎØ ÄÅÔÁÌÉÚÁÃÉÉ ÉÎÆÏÒÍÁÃÉÉ. ðÏ ÕÍÏÌÞÁÎÉÀ ÜÔÏ ÚÎÁÞÅÎÉÅ ÕÓÔÁÎÏ×ÌÅÎÏ
+ÒÁ×ÎÙÍ 10.
+.TP
+\-V[N]{ÆÁÊÌ}
+áÎÁÌÏÇÉÞÎÏ ÁÒÇÕÍÅÎÔÕ \-V, Á ÔÁËÖÅ ×ÙÐÏÌÎÑÅÔÓÑ ÕÓÔÁÎÏ×ËÁ ÐÁÒÁÍÅÔÒÕ 'verbosefile'
+ÚÎÁÞÅÎÉÅ {ÆÁÊÌ}. ëÁË ÒÅÚÕÌØÔÁÔ, ÓÏÏÂÝÅÎÉÑ ÂÕÄÕÔ ÚÁÐÉÓÙ×ÁÔØÓÑ × {ÆÁÊÌ}, Á ÎÅ
+ÏÔÏÂÒÁÖÁÔØÓÑ ÎÁ ÜËÒÁÎÅ. îÁÉÍÅÎÏ×ÁÎÉÅ {ÆÁÊÌÁ} ÎÅ ÍÏÖÅÔ ÎÁÞÉÎÁÔØÓÑ Ó ËÁËÏÊ-ÌÉÂÏ
+ÃÉÆÒÙ.
+.TP
+\-w{ÞÉÓÌÏ}
+äÌÑ ÐÁÒÁÍÅÔÒÁ 'window' ÂÕÄÅÔ ÕÓÔÁÎÏ×ÌÅÎÏ ÚÎÁÞÅÎÉÅ, ÒÁ×ÎÏÅ ÕËÁÚÁÎÎÏÍÕ {ÞÉÓÌÕ}.
+.TP
+\-w {ÆÁÊÌ}
+äÏÂÁ×ÌÅÎÉÅ ×ÓÅÈ ××ÅÄ£ÎÎÙÈ ËÏÍÁÎÄ × {ÆÁÊÌ}.
+÷ÓÅ ÓÉÍ×ÏÌÙ, ××ÅÄ£ÎÎÙÅ Ó ËÌÁ×ÉÁÔÕÒÙ ×ÐÌÏÔØ ÄÏ ÍÏÍÅÎÔÁ ÚÁ×ÅÒÛÅÎÉÑ ÒÁÂÏÔÙ
+ÒÅÄÁËÔÏÒÁ, ÚÁÐÉÓÙ×ÁÀÔÓÑ × {ÆÁÊÌ}.
+õÄÏÂÎÏ × ÔÏÍ ÓÌÕÞÁÅ, ËÏÇÄÁ ×Ù ÈÏÔÉÔÅ ÓÏÚÄÁÔØ ËÏÍÁÎÄÎÙÊ ÆÁÊÌ ÄÌÑ ÐÏÓÌÅÄÕÀÝÅÇÏ
+ÅÇÏ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ "vim \-s" ÉÌÉ × ËÏÍÁÎÄÅ ":source!".
+åÓÌÉ {ÆÁÊÌ} ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ, ÔÏ ÎÁÂÒÁÎÎÙÊ ÔÅËÓÔ ÂÕÄÅÔ ÄÏÂÁ×ÌÑÀÔÓÑ × ËÏÎÅà ÆÁÊÌÁ.
+.TP
+\-W {ÆÁÊÌ}
+úÁÐÉÓØ ×ÓÅÈ ××ÅÄ£ÎÎÙÈ ËÏÍÁÎÄ × {ÆÁÊÌ}.
+ëÁË ÁÒÇÕÍÅÎÔ "\-w", ÎÏ ÓÕÝÅÓÔ×ÕÀÝÉÊ {ÆÁÊÌ} ÂÕÄÅÔ ÐÅÒÅÚÁÐÉÓÁÎ.
.TP
-\-T {terminal}
-óÏÏÂÝÁÅÔ
-.B Vim
-ÔÉÐ ÉÓÐÏÌØÚÕÅÍÏÇÏ ÔÅÒÍÉÎÁÌÁ. îÅÏÂÈÏÄÉÍÏ ÔÏÌØËÏ × ÔÅÈ ÓÉÔÕÁÃÉÑÈ, ËÏÇÄÁ
-Á×ÔÏÍÁÔÉÞÅÓËÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÔÅÒÍÉÎÁÌÁ ÎÅ ÒÁÂÏÔÁÅÔ. éÍÑ ÔÅÒÍÉÎÁÌÁ ÄÏÌÖÎÏ ÂÙÔØ
-ÉÚ×ÅÓÔÎÏ
+\-x
+òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÛÉÆÒÏ×ÁÎÎÙÈ ÆÁÊÌÏ×.
+åÓÌÉ ÒÅÄÁËÔÏÒ
.B Vim
-(×ÓÔÒÏÅÎÏ × ÎÅÇÏ) ÉÌÉ ÏÐÒÅÄÅÌÅÎÏ × ÆÁÊÌÁÈ termcap ÉÌÉ terminfo.
-.TP
-\-u {vimrc}
-éÓÐÏÌØÚÏ×ÁÔØ ËÏÍÁÎÄÙ ÉÚ ÆÁÊÌÁ ÓÃÅÎÁÒÉÑ {vimrc} ÄÌÑ ÎÁÓÔÒÏÊËÉ.
-÷ÓÅ ÏÓÔÁÌØÎÙÅ ÆÁÊÌÙ ÎÁÓÔÒÏÅË ÐÒÏÐÕÓËÁÀÔÓÑ.
-õÄÏÂÎÏ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÓÐÅÃÉÁÌØÎÙÈ ÔÉÐÏ× ÆÁÊÌÏ×.
-þÔÏÂÙ ÉÚÂÅÖÁÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÃÅÎÁÒÉÅ× ÎÁÓÔÒÏÅË ×ÏÏÂÝÅ, ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ
-ÉÍÑ "NONE". óÍ. ":help initialization".
+ÂÙÌ ÓÏÂÒÁÎ Ó ÐÏÄÄÅÒÖËÏÊ ÛÉÆÒÏ×ÁÎÉÑ, ÔÏ ×ÙÐÏÌÎÑÔØ ÛÉÆÒÏ×ÁÎÉÅ ÐÒÉ ÚÁÐÉÓÉ ÆÁÊÌÏ×.
+âÕÄÅÔ ×ÙÄÁÎÏ ÐÒÉÇÌÁÛÅÎÉÅ ××ÅÓÔÉ ÐÁÒÏÌØ.
.TP
-\-U {gvimrc}
-éÓÐÏÌØÚÏ×ÁÔØ ËÏÍÁÎÄÙ ÉÚ ÆÁÊÌÁ ÓÃÅÎÁÒÉÑ {gvimrc} ÄÌÑ ÎÁÓÔÒÏÊËÉ ÇÒÁÆÉÞÅÓËÏÇÏ
-ÉÎÔÅÒÆÅÊÓÁ.
-÷ÓÅ ÏÓÔÁÌØÎÙÅ ÆÁÊÌÙ ÎÁÓÔÒÏÅË ÄÌÑ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ ÐÒÏÐÕÓËÁÀÔÓÑ.
-þÔÏÂÙ ÉÚÂÅÖÁÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÃÅÎÁÒÉÅ× ÎÁÓÔÒÏÅË ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ ×ÏÏÂÝÅ,
-ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÉÍÑ "NONE". óÍ. ":help gui-init".
-.TP
-\-V
-"âÏÌÔÌÉ×ÙÊ" ÒÅÖÉÍ. ÷Ù×ÏÄÉÔØ ÓÏÏÂÝÅÎÉÑ Ï ÔÏÍ, ËÁËÉÅ ÆÁÊÌÙ ÞÉÔÁÀÔÓÑ, É Ï
-ÞÔÅÎÉÉ-ÚÁÐÉÓÉ ÆÁÊÌÁ viminfo.
+\-X
+úÁÐÕÓË ÐÒÏÇÒÁÍÍÙ ÂÅÚ ÐÏÄËÌÀÞÅÎÉÑ Ë X-ÓÅÒ×ÅÒÕ.
+õÓËÏÒÑÅÔ ÚÁÇÒÕÚËÕ × ËÏÎÓÏÌÉ, ÎÏ ÄÅÌÁÅÔ ÎÅ×ÏÚÍÏÖÎÙÍ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÚÁÇÏÌÏ×ËÁ ÏËÎÁ
+É ÂÕÆÅÒÁ ÏÂÍÅÎÁ.
.TP
-\-v
-úÁÐÕÓÔÉÔØ
+\-y
+òÁÂÏÔÁ × ÕÐÒÏÝ£ÎÎÏÍ ×ÁÒÉÁÎÔÅ.
+òÅÄÁËÔÏÒ
+.B Vim
+ÂÕÄÅÔ ÒÁÂÏÔÁÔØ × ÕÐÒÏÝ£ÎÎÏÍ ×ÁÒÉÁÎÔÅ, ËÁË ÂÕÄÔÏ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÉÍÅÅÔ ÎÁÚ×ÁÎÉÅ
+"evim" ÉÌÉ "eview".
+ðÏ×ÅÄÅÎÉÅ ÒÅÄÁËÔÏÒÁ
.B Vim
-× ÒÅÖÉÍÅ Vi, ËÁË ÂÕÄÔÏ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÉÍÅÅÔ ÉÍÑ "vi". éÍÅÅÔ ÓÍÙÓÌ ÔÏÌØËÏ ÅÓÌÉ
-ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ ÉÍÅÅÔ ÉÍÑ "ex".
+ÂÕÄÅÔ ÐÏÈÏÄÉÔØ ÎÁ ÒÅÄÁËÔÏÒÙ, ÓÏÚÄÁÎÎÙÅ ÐÏ ÂÅÚÒÅÖÉÍÎÏÍÕ ÐÒÉÎÃÉÐÕ ÒÁÂÏÔÙ.
.TP
-\-w {scriptout}
-÷ÓÅ ÓÉÍ×ÏÌÙ, ××ÅÄ£ÎÎÙÅ Ó ËÌÁ×ÉÁÔÕÒÙ ×ÐÌÏÔØ ÄÏ ÍÏÍÅÎÔÁ ÚÁ×ÅÒÛÅÎÉÑ ÒÁÂÏÔÙ,
-ÚÁÐÉÓÙ×ÁÀÔÓÑ × ÆÁÊÌ {scriptout}.
-õÄÏÂÎÏ × ÔÏÍ ÓÌÕÞÁÅ, ËÏÇÄÁ ×Ù ÈÏÔÉÔÅ ÓÏÚÄÁÔØ ÆÁÊÌ ÓÃÅÎÁÒÉÑ ÄÌÑ ÐÏÓÌÅÄÕÀÝÅÇÏ
-ÉÓÐÏÌØÚÏ×ÁÎÉÑ Ó "vim \-s" ÉÌÉ ":source!". åÓÌÉ ÆÁÊÌ {scriptout} ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ,
-ÔÏ ÎÏ×ÙÅ ÓÉÍ×ÏÌÙ ÂÕÄÕÔ ÄÏÂÁ×ÌÑÀÔÓÑ × ËÏÎÅà ÆÁÊÌÁ.
+\-Z
+òÁÂÏÔÁ Ó ÏÇÒÁÎÉÞÅÎÉÅÍ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔÉ.
+òÁÂÏÔÁÅÔ ÔÁË ÖÅ, ËÁË É ÚÁÐÕÓË ÉÓÐÏÌÎÑÅÍÏÇÏ ÆÁÊÌÁ, ÎÁÉÍÅÎÏ×ÁÎÉÅ ËÏÔÏÒÏÇÏ
+ÎÁÞÉÎÁÅÔÓÑ Ó ÂÕË×Ù "r".
.TP
-\-W {scriptout}
-ëÁË "\-w", ÎÏ ÕÖÅ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÆÁÊÌ ÂÕÄÅÔ ÐÅÒÅÚÁÐÉÓÁÎ.
+\-\-
+ïÚÎÁÞÁÅÔ ÏËÏÎÞÁÎÉÅ ××ÏÄÁ ÁÒÇÕÍÅÎÔÏ×.
+÷ÓÅ ÞÔÏ ÕËÁÚÁÎÏ ÐÏÓÌÅ ÜÔÏÇÏ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ, ÓÞÉÔÁÅÔÓÑ ÎÁÉÍÅÎÏ×ÁÎÉÑÍÉ ÆÁÊÌÏ×.
+íÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎÏ ÄÌÑ ÐÒÁ×ËÉ ÆÁÊÌÏ×, ÎÁÉÍÅÎÏ×ÁÎÉÑ ËÏÔÏÒÙÈ ÎÁÞÉÎÁÀÔÓÑ Ó
+ÄÅÆÉÓÁ.
.TP
-\-x
-ûÉÆÒÏ×ÁÔØ ÚÁÐÉÓÙ×ÁÅÍÙÅ ÆÁÊÌÙ. âÕÄÅÔ ×ÙÄÁÎÏ ÐÒÉÇÌÁÛÅÎÉÅ ××ÅÓÔÉ ÐÁÒÏÌØ.
+\-\-clean
+ðÒÉ ÒÁÂÏÔÅ ÒÅÄÁËÔÏÒÁ ÎÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÏÌØÚÏ×ÁÔÅÌØÓËÕÀ ËÏÎÆÉÇÕÒÁÃÉÀ (ÆÁÊÌÙ vimrc,
+ÐÏÄËÌÀÞÁÅÍÙÅ ÍÏÄÕÌÉ É Ô. Ð.). ðÏÌÅÚÎÏ ÄÌÑ ÐÒÏ×ÅÒËÉ, ÞÔÏ ÐÒÏÂÌÅÍÁ × ÒÁÂÏÔÅ
+ÒÅÄÁËÔÏÒÁ ÎÅ ×ÏÚÎÉËÎÅÔ Ó ÐÒÅÄÕÓÔÁÎÏ×ÌÅÎÎÙÍÉ ÎÁÓÔÒÏÊËÁÍÉ ÐÒÏÇÒÁÍÍÙ Vim.
.TP
-\-X
-îÅ ÐÏÄËÌÀÞÁÔØÓÑ Ë X-ÓÅÒ×ÅÒÕ. õÓËÏÒÑÅÔ ÚÁÇÒÕÚËÕ ÎÁ ËÏÎÓÏÌÉ, ÎÏ ÄÅÌÁÅÔ ÎÅ×ÏÚÍÏÖÎÙÍ
-ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÚÁÇÏÌÏ×ËÁ ÏËÎÁ É ÂÕÆÅÒÁ ÏÂÍÅÎÁ.
+\-\-cmd {ËÏÍÁÎÄÁ}
+ëÁË ÁÒÇÕÍÅÎÔ "\-c", ÎÏ ËÏÍÁÎÄÁ ÉÓÐÏÌÎÑÅÔÓÑ ÐÅÒÅÄ ÏÂÒÁÂÏÔËÏÊ ÌÀÂÏÇÏ ÆÁÊÌÁ
+ÎÁÓÔÒÏÅË (vimrc).
+íÏÖÎÏ ÕËÁÚÙ×ÁÔØ ÄÏ ÄÅÓÑÔÉ ÔÁËÉÈ ËÏÍÁÎÄ, ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ËÏÌÉÞÅÓÔ×Á ËÏÍÁÎÄ "\-c".
.TP
-\-Z
-ïÇÒÁÎÉÞÅÎÎÙÊ ÒÅÖÉÍ. òÁÂÏÔÁÅÔ ÔÁË ÖÅ, ËÁË É ÐÒÏÇÒÁÍÍÙ, ÎÁÞÉÎÁÀÝÉÅÓÑ Ó "r".
+\-\-echo\-wid
+ôÏÌØËÏ ÄÌÑ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ GTK. ïÔÏÂÒÁÚÉÔØ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÏËÎÁ
+(Window ID) × ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ×Ù×ÏÄÁ (stdout).
+.TP
+\-\-gui\-dialog\-file {ÆÁÊÌ}
+ðÒÉ ÒÁÂÏÔÅ ÒÅÄÁËÔÏÒÁ × ÇÒÁÆÉÞÅÓËÏÍ ÉÎÔÅÒÆÅÊÓÅ ÐÏÌØÚÏ×ÁÔÅÌÑ, ÚÁÇÏÌÏ×ÏË
+É ÓÏÏÂÝÅÎÉÅ ÄÉÁÌÏÇÏ×ÏÇÏ ÏËÎÁ ÂÕÄÕÔ ÚÁÐÉÓÁÎÙ × {ÆÁÊÌ} ÂÅÚ ÏÔÏÂÒÁÖÅÎÉÑ ÎÁ ÜËÒÁÎÅ.
+åÓÌÉ ÕËÁÚÁÎÎÙÊ {ÆÁÊÌ} ÎÅ ÓÕÝÅÓÔ×ÕÅÔ, ÔÏ ÏÎ ÂÕÄÅÔ ÓÏÚÄÁÎ, Á ÐÒÉ ÅÇÏ ÎÁÌÉÞÉÉ
+ÓÏÏÂÝÅÎÉÑ ÂÕÄÕÔ ÄÏÐÉÓÙ×ÁÔØÓÑ × ÜÔÏÔ {ÆÁÊÌ}. äÁÎÎÙÊ ÁÒÇÕÍÅÎÔ ÐÏÌÅÚÅÎ ÔÏÌØËÏ ÄÌÑ
+ÔÅÓÔÉÒÏ×ÁÎÉÑ ÒÁÂÏÔÙ ÒÅÄÁËÔÏÒÁ, ÞÔÏÂÙ ÉÚÂÅÖÁÔØ ÏÓÔÁÎÏ×ËÉ ÐÒÏÇÒÁÍÍÙ, ÔÁË ËÁË
+ÏÔÏÂÒÁÖÁÅÍÏÅ ÄÉÁÌÏÇÏ×ÏÅ ÏËÎÏ ÍÏÖÅÔ ÂÙÔØ ÓËÒÙÔÏ. åÓÌÉ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ
+ÇÒÁÆÉÞÅÓËÉÊ ÉÎÔÅÒÆÅÊÓ ÐÏÌØÚÏ×ÁÔÅÌÑ, ÔÏ ÜÔÏÔ ÁÒÇÕÍÅÎÔ ÉÇÎÏÒÉÒÕÅÔÓÑ ÐÒÏÇÒÁÍÍÏÊ.
+.TP
+\-\-help, \-h, \-?
+âÕÄÅÔ ÐÏËÁÚÁÎÁ ËÒÁÔËÁÑ ÉÎÆÏÒÍÁÃÉÑ ÏÂ ÁÒÇÕÍÅÎÔÁÈ É ÐÁÒÁÍÅÔÒÁÈ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ.
+ðÏÓÌÅ ÜÔÏÇÏ ÒÅÄÁËÔÏÒ
+.B Vim
+ÚÁ×ÅÒÛÉÔ ÒÁÂÏÔÕ.
+.TP
+\-\-literal
+äÁÎÎÙÊ ÁÒÇÕÍÅÎÔ ÕËÁÚÙ×ÁÅÔ, ÞÔÏ ÔÒÅÂÕÅÔÓÑ ×ÏÓÐÒÉÎÉÍÁÔØ ÎÁÉÍÅÎÏ×ÁÎÉÑ ÆÁÊÌÏ×
+ÂÕË×ÁÌØÎÏ, É ÎÅ ×ÙÐÏÌÎÑÔØ ÒÁÚÂÏÒ ÐÏÄÓÔÁÎÏ×ÏÞÎÙÈ ÓÉÍ×ÏÌÏ×.
+üÔÏÔ ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ ÎÅÐÒÉÍÅÎÉÍ × Unix-ÐÏÄÏÂÎÙÈ ÓÉÓÔÅÍÁÈ, ÇÄÅ ÒÁÚÂÏÒ
+ÐÏÄÓÔÁÎÏ×ÏÞÎÙÈ ÓÉÍ×ÏÌÏ× ×ÙÐÏÌÎÑÅÔÓÑ ËÏÍÁÎÄÎÏÊ ÏÂÏÌÏÞËÏÊ.
+.TP
+\-\-log {ÆÁÊÌ}
+âÕÄÅÔ ×ÙÐÏÌÎÅÎÁ ÚÁÐÉÓØ ÐÒÏÔÏËÏÌÁ ÒÁÂÏÔÙ Ó ÜÔÁÐÁ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ÐÒÏÇÒÁÍÍÙ.
+åÓÌÉ ÐÒÉ ÓÂÏÒËÅ ÐÒÏÇÒÁÍÍÙ
+.B Vim
+ÂÙÌÉ ×ËÌÀÞÅÎÙ ËÏÍÐÏÎÅÎÔÙ "eval" É "channel", ÂÕÄÅÔ ×ÙÐÏÌÎÑÔØÓÑ ÐÒÏÔÏËÏÌÉÒÏ×ÁÎÉÅ
+ÒÁÂÏÔÙ Ó ÓÁÍÏÊ ÒÁÎÎÅÊ ÓÔÁÄÉÉ ÚÁÐÕÓËÁ ÐÒÏÇÒÁÍÍÙ, Á ÖÕÒÎÁÌ ÚÁÐÉÓÙ×ÁÔØÓÑ × {ÆÁÊÌ}.
+üÔÏ ÒÁÂÏÔÁÅÔ ÁÎÁÌÏÇÉÞÎÏ ×ÙÚÏ×Õ ÆÕÎËÃÉÉ
+.I ch_logfile({filename}, 'ao')
.TP
-\-\-
-ëÏÎÅà ËÌÀÞÅÊ. ÷ÓÅ ÏÓÔÁÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÒÁÓÓÍÁÔÒÉ×ÁÀÔÓÑ ËÁË ÉÍÅÎÁ ÆÁÊÌÏ×.
-íÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎÏ ÄÌÑ ÐÒÁ×ËÉ ÆÁÊÌÏ×, ÉÍÅÎÁ ËÏÔÏÒÙÈ ÎÁÞÉÎÁÀÔÓÑ Ó ÄÅÆÉÓÁ.
+\-\-nofork
+òÅÖÉÍ ÁËÔÉ×ÎÏÇÏ ÐÒÉÌÏÖÅÎÉÑ.
+òÅÄÁËÔÏÒ
+.B Vim
+Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ ÎÅ ÂÕÄÅÔ ÎÁÓÌÅÄÏ×ÁÔØÓÑ É ÏÔËÌÀÞÁÔØÓÑ
+ÏÔ ËÏÍÁÎÄÎÏÊ ÏÂÏÌÏÞËÉ, × ËÏÔÏÒÏÊ ×ÙÐÏÌÎÅÎÁ ËÏÍÁÎÄÁ ÅÇÏ ÚÁÐÕÓËÁ.
.TP
-\-\-help
-÷Ù×ÅÓÔÉ ËÒÁÔËÕÀ ÓÐÒÁ×ËÕ É ÚÁ×ÅÒÛÉÔØ ÒÁÂÏÔÕ. ôÏ ÖÅ, ÞÔÏ É "\-h".
+\-\-noplugin
+âÕÄÅÔ ×ÙÐÏÌÎÅÎ ÚÁÐÕÓË ÐÒÏÇÒÁÍÍÙ ÂÅÚ ÚÁÇÒÕÚËÉ ×ÎÅÛÎÉÈ ÐÏÄËÌÀÞÁÅÍÙÈ ÍÏÄÕÌÅÊ.
+üÔÏ ÖÅ ÐÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ ÐÒÉ ÕËÁÚÁÎÉÉ ÁÒÇÕÍÅÎÔÁ \-u NONE.
.TP
-\-\-version
-÷Ù×ÅÓÔÉ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ É ÚÁ×ÅÒÛÉÔØ ÒÁÂÏÔÕ.
+\-\-not\-a\-term
+îÅ ÓÏÏÂÝÁÔØ Ï ÏÔÓÕÔÓÔ×ÉÉ ÔÅÒÍÉÎÁÌÁ ÄÌÑ ××ÏÄÁ-×Ù×ÏÄÁ.
+þÅÒÅÚ ÜÔÏÔ ÁÒÇÕÍÅÎÔ ÕËÁÚÙ×ÁÅÔÓÑ, ÞÔÏ ÏÐÅÒÁÃÉÉ ××ÏÄÁ-×Ù×ÏÄÁ ÏÓÕÝÅÓÔ×ÌÑÀÔÓÑ ÎÅ
+ÎÁ ÔÅÒÍÉÎÁÌ. üÔÏ ÐÏÚ×ÏÌÑÅÔ ÉÚÂÅÖÁÔØ ÐÒÅÄÕÐÒÅÖÄÁÀÝÅÇÏ ÓÏÏÂÝÅÎÉÑ É Ä×ÕÈÓÅËÕÎÄÎÏÊ
+ÚÁÄÅÒÖËÉ, ËÏÔÏÒÙÅ ÍÏÇÌÉ ÂÙ ×ÏÚÎÉËÎÕÔØ.
.TP
\-\-remote
-ðÏÄËÌÀÞÉÔØÓÑ Ë ÓÅÒ×ÅÒÕ Vim É ÚÁÓÔÁ×ÉÔØ ÅÇÏ ÐÒÁ×ÉÔØ ÆÁÊÌÙ, ÕËÁÚÁÎÎÙÅ ×
-ÐÏÓÌÅÄÕÀÝÉÈ ÁÒÇÕÍÅÎÔÁÈ. åÓÌÉ ÓÅÒ×ÅÒ ÎÅ ÎÁÊÄÅÎ, ×Ù×ÏÄÉÔÓÑ ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ,
-Á ÆÁÊÌÙ ÐÒÁ×ÑÔÓÑ × ÍÅÓÔÎÏÊ ËÏÐÉÉ Vim.
+âÕÄÅÔ ×ÙÐÏÌÎÅÎÏ ÐÏÄËÌÀÞÅÎÉÅ Ë Vim-ÓÅÒ×ÅÒÕ É ÐÅÒÅÄÁÞÁ ÄÌÑ ÐÒÁ×ËÉ ÆÁÊÌÏ×,
+ÕËÁÚÁÎÎÙÈ × ÐÏÓÌÅÄÕÀÝÉÈ ÁÒÇÕÍÅÎÔÁÈ. åÓÌÉ ÓÅÒ×ÅÒ ÎÅ ÎÁÊÄÅÎ, ×Ù×ÏÄÉÔÓÑ
+ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ, Á ÐÒÁ×ËÁ ÆÁÊÌÏ× ×ÙÐÏÌÎÑÅÔÓÑ × ÔÅËÕÝÅÊ ËÏÐÉÉ ÒÅÄÁËÔÏÒÁ Vim.
.TP
\-\-remote\-expr {×ÙÒÁÖÅÎÉÅ}
-ðÏÄËÌÀÞÉÔØÓÑ Ë ÓÅÒ×ÅÒÕ Vim É ×ÙÞÉÓÌÉÔØ ÎÁ Î£Í ÕËÁÚÁÎÎÏÅ {×ÙÒÁÖÅÎÉÅ}.
+âÕÄÅÔ ×ÙÐÏÌÎÅÎÏ ÐÏÄËÌÀÞÅÎÉÅ Ë Vim-ÓÅÒ×ÅÒÕ É ÐÅÒÅÄÁÞÁ ÕËÁÚÁÎÎÏÇÏ {×ÙÒÁÖÅÎÉÅ} ÄÌÑ
+×ÙÞÉÓÌÅÎÉÑ.
òÅÚÕÌØÔÁÔ ×ÙÞÉÓÌÅÎÉÑ ÂÕÄÅÔ ×Ù×ÅÄÅÎ × ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ×Ù×ÏÄÁ (stdout).
.TP
-\-\-remote\-send {ËÌÀÞÉ}
-ðÏÄËÌÀÞÉÔØÓÑ Ë ÓÅÒ×ÅÒÕ Vim É ÐÅÒÅÄÁÔØ ÅÍÕ ÕËÁÚÁÎÎÙÅ {ËÌÀÞÉ}.
+\-\-remote\-send {ËÏÄ ËÌÁ×ÉÛÉ}
+âÕÄÅÔ ×ÙÐÏÌÎÅÎÏ ÐÏÄËÌÀÞÅÎÉÅ Ë Vim-ÓÅÒ×ÅÒÕ É ÐÅÒÅÄÁÞÁ ÕËÁÚÁÎÎÙÈ {ËÏÄÏ× ËÌÁ×ÉÛ}.
.TP
\-\-remote\-silent
ëÁË "\-\-remote", ÎÏ ÂÅÚ ×Ù×ÏÄÁ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ, ÅÓÌÉ ÓÅÒ×ÅÒ ÎÅ ÎÁÊÄÅÎ.
.TP
\-\-remote\-wait
-ëÁË "\-\-remote", ÎÏ Vim ÎÅ ÂÕÄÅÔ ÚÁ×ÅÒÛÁÔØ ÒÁÂÏÔÕ ÄÏ ÔÅÈ ÐÏÒ, ÐÏËÁ ÎÅ ÂÕÄÅÔ
-×ÙÐÏÌÎÅÎÁ ÐÒÁ×ËÁ ×ÓÅÈ ÆÁÊÌÏ×.
+ëÁË "\-\-remote", ÎÏ ÒÅÄÁËÔÏÒ Vim ÎÅ ÂÕÄÅÔ ÚÁ×ÅÒÛÁÔØ ÒÁÂÏÔÕ ÄÏ ÔÅÈ ÐÏÒ,
+ÐÏËÁ ÎÅ ÂÕÄÅÔ ×ÙÐÏÌÎÅÎÁ ÐÒÁ×ËÁ ×ÓÅÈ ÆÁÊÌÏ×.
.TP
\-\-remote\-wait\-silent
ëÁË "\-\-remote\-wait", ÎÏ ÂÅÚ ×Ù×ÏÄÁ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ, ÅÓÌÉ ÓÅÒ×ÅÒ ÎÅ ÎÁÊÄÅÎ.
.TP
\-\-serverlist
-÷Ù×ÅÓÔÉ ÓÐÉÓÏË ×ÓÅÈ ÄÏÓÔÕÐÎÙÈ ÓÅÒ×ÅÒÏ× Vim.
+âÕÄÅÔ ×Ù×ÅÄÅÎ ÐÅÒÅÞÅÎØ ×ÓÅÈ ÄÏÓÔÕÐÎÙÈ Vim-ÓÅÒ×ÅÒÏ×.
.TP
-\-\-servername {ÉÍÑ}
-éÓÐÏÌØÚÏ×ÁÔØ ÕËÁÚÁÎÎÏÅ {ÉÍÑ} × ËÁÞÅÓÔ×Å ÉÍÅÎÉ ÓÅÒ×ÅÒÁ. åÓÌÉ ËÌÀÞ
-"\-\-remote" ÎÅ ÕËÁÚÁÎ, ÔÏ {ÉÍÑ} ÐÒÉÓ×ÁÉ×ÁÅÔÓÑ ÄÁÎÎÏÊ ËÏÐÉÉ Vim,
-× ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÕËÁÚÙ×ÁÅÔ ÎÁ ÉÍÑ ÓÅÒ×ÅÒÁ, Ë ËÏÔÏÒÏÍÕ ÓÌÅÄÕÅÔ
-ÐÏÄËÌÀÞÉÔØÓÑ.
+\-\-servername {ÎÁÚ×ÁÎÉÅ}
+éÓÐÏÌØÚÏ×ÁÔØ ÕËÁÚÁÎÎÏÅ {ÎÁÚ×ÁÎÉÅ} × ËÁÞÅÓÔ×Å ÎÁÉÍÅÎÏ×ÁÎÉÑ ÓÅÒ×ÅÒÁ. åÓÌÉ ÁÒÇÕÍÅÎÔ
+"\-\-remote" ÎÅ ÕËÁÚÁÎ, ÔÏ {ÎÁÚ×ÁÎÉÅ} ÐÒÉÓ×ÁÉ×ÁÅÔÓÑ ÄÁÎÎÏÊ ËÏÐÉÉ ÒÅÄÁËÔÏÒÁ Vim,
+× ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÕËÁÚÙ×ÁÅÔ ÎÁ ÓÅÒ×ÅÒ, Ë ËÏÔÏÒÏÍÕ ÓÌÅÄÕÅÔ ÐÏÄËÌÀÞÉÔØÓÑ.
.TP
\-\-socketid {id}
-ôÏÌØËÏ ÄÌÑ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ GTK: ÉÓÐÏÌØÚÏ×ÁÔØ ÍÅÈÁÎÉÚÍ GtkPlug ÄÌÑ
-ÚÁÐÕÓËÁ gvim × ÏÔÄÅÌØÎÏÍ ÏËÎÅ.
+ôÏÌØËÏ ÄÌÑ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ GTK. âÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎ ÍÅÈÁÎÉÚÍ GtkPlug ÄÌÑ
+ÚÁÐÕÓËÁ ÒÅÄÁËÔÏÒÁ gVim × ÏÔÄÅÌØÎÏÍ ÏËÎÅ.
.TP
-\-\-echo\-wid
-ôÏÌØËÏ ÄÌÑ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ GTK: ×Ù×ÅÓÔÉ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÏËÎÁ (Window ID)
-× ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ×Ù×ÏÄÁ (stdout).
-.SH ÷óôòïåîîáñ óðòá÷ëá
-äÌÑ ÎÁÞÁÌÁ, ÎÁÂÅÒÉÔÅ ËÏÍÁÎÄÕ ":help".
-÷×ÅÄÉÔÅ ":help ÔÅÍÁ", ÞÔÏÂÙ ÐÏÌÕÞÉÔØ ÓÐÒÁ×ËÕ ÐÏ ËÏÎËÒÅÔÎÏÊ ÔÅÍÅ.
-îÁÐÒÉÍÅÒ, ËÏÍÁÎÄÁ ":help ZZ" ×Ù×ÅÄÅÔ ÉÎÆÏÒÍÁÃÉÀ Ï ËÏÍÁÎÄÅ "ZZ".
-éÓÐÏÌØÚÕÊÔÅ <Tab> É CTRL-D ÄÌÑ Á×ÔÏÍÁÔÉÞÅÓËÏÇÏ ÄÏÐÏÌÎÅÎÉÑ
-ÎÁÚ×ÁÎÉÊ ÔÅÍ (":help cmdline-completion").
-äÌÑ ÂÙÓÔÒÏÇÏ ÐÅÒÅÍÅÝÅÎÉÑ ÐÏ ÓÐÒÁ×ÏÞÎÉËÕ ÉÓÐÏÌØÚÕÀÔÓÑ ÍÅÔËÉ (ÞÔÏ-ÔÏ
+\-\-startuptime {ÆÁÊÌ}
+âÕÄÅÔ ×ÙÐÏÌÎÅÎÁ ÚÁÐÉÓØ ÈÒÏÎÏÍÅÔÒÁÖÁ ÚÁÐÕÓËÁ ÐÒÏÇÒÁÍÍÙ × {ÆÁÊÌ}.
+.TP
+\-\-ttyfail
+âÕÄÔ ÓÒÁÚÕ ÖÅ ÚÁ×ÅÒÛÅÎÁ ÒÁÂÏÔÁ, ÅÓÌÉ ××ÏÄ-×Ù×ÏÄ ÐÏÌÕÞÅÎ ÎÅ Ó ÔÅÒÍÉÎÁÌÁ (tty).
+.TP
+\-\-version
+âÕÄÅÔ ×Ù×ÅÄÅÎÁ ÉÎÆÏÒÍÁÃÉÑ Ï ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ É ÚÁ×ÅÒÛÅÎÁ ÒÁÂÏÔÁ.
+.TP
+\-\-windowid {éä}
+ôÏÌØËÏ ÄÌÑ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ × MS Windows. òÅÄÁËÔÏÒ gVim ÂÕÄÅÔ
+ÉÓÐÏÌØÚÏ×ÁÔØ ÏËÎÏ Ó ÕËÁÚÁÎÎÙÍ {éä} × ËÁÞÅÓÔ×Å ÒÏÄÉÔÅÌØÓËÏÇÏ, ÞÔÏÂÙ ÐÏÐÙÔÁÔØÓÑ
+×ÙÐÏÌÎÉÔØ ÚÁÐÕÓË ×ÎÕÔÒÉ ÜÔÏÇÏ ÏËÎÁ.
+.SH ÷óôòïåîîáñ äïëõíåîôáãéñ
+äÌÑ ÎÁÞÁÌÁ ÒÁÂÏÔÙ Ó ÄÏËÕÍÅÎÔÁÃÉÅÊ, ÎÁÂÅÒÉÔÅ × ÒÅÄÁËÔÏÒÅ
+.B Vim
+ËÏÍÁÎÄÕ ":help".
+÷×ÅÄÉÔÅ ":help ÔÅÍÁ", ÞÔÏÂÙ ÐÏÌÕÞÉÔØ ÓÐÒÁ×ËÕ ÐÏ ÉÎÔÅÒÅÓÕÀÝÅÊ ÔÅÍÅ.
+îÁÐÒÉÍÅÒ, ÐÏ ËÏÍÁÎÄÅ ":help ZZ" ÂÕÄÅÔ ×Ù×ÅÄÅÎÁ ÉÎÆÏÒÍÁÃÉÑ Ï ËÏÍÁÎÄÅ "ZZ".
+éÓÐÏÌØÚÕÊÔÅ ËÌÁ×ÉÛÉ <TAB> É CTRL+D ÄÌÑ ÐÏÄÓÔÁÎÏ×ËÉ ÎÕÖÎÏÇÏ ÎÁÚ×ÁÎÉÑ ÔÅÍÙ
+(ÓÍ. ":help cmdline\-completion").
+äÌÑ ÂÙÓÔÒÏÇÏ ÐÅÒÅÍÅÝÅÎÉÑ ÐÏ ÄÏËÕÍÅÎÔÁÃÉÉ ÉÓÐÏÌØÚÕÀÔÓÑ ÉÎÄÅËÓÙ (ÞÔÏ-ÔÏ
×ÒÏÄÅ ÇÉÐÅÒÔÅËÓÔÏ×ÙÈ ÓÓÙÌÏË, ÓÍ. ":help"). ôÁËÉÍ ÏÂÒÁÚÏÍ ÍÏÖÎÏ
-ÐÒÏÓÍÁÔÒÉ×ÁÔØ ×ÓÅ ÆÁÊÌÙ ÓÐÒÁ×ËÉ, ÎÁÐÒÉÍÅÒ ":help syntax.txt".
+ÐÅÒÅÈÏÄÉÔØ ÏÔ ÏÄÎÏÇÏ ÆÁÊÌÁ ÄÏËÕÍÅÎÔÁÃÉÉ Ë ÄÒÕÇÏÍÕ, ÎÁÐÒÉÍÅÒ, ":help syntax.txt".
.SH æáêìù
.TP 15
-/usr/local/lib/vim/doc/*.txt
-æÁÊÌÙ ÓÐÒÁ×ÏÞÎÉËÁ
+/usr/local/share/vim/vim??/doc/*.txt
+æÁÊÌÙ ÄÏËÕÍÅÎÔÁÃÉÉ ÒÅÄÁËÔÏÒÁ
.B Vim.
-óÍ. ":help doc-file-list" ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÌÎÏÇÏ ÓÐÉÓËÁ.
+óÍ. ":help doc\-file\-list" ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÌÎÏÇÏ ÐÅÒÅÞÎÑ ÆÁÊÌÏ×.
+.br
+úÄÅÓØ É ÄÁÌÅÅ
+.I "vim??"
+ÏÚÎÁÞÁÅÔ ÓÏËÒÁÝ£ÎÎÕÀ ÚÁÐÉÓØ ÎÏÍÅÒÁ ×ÅÒÓÉÉ, ÎÁÐÒÉÍÅÒ, vim91 ÄÌÑ ×ÅÒÓÉÉ ÒÅÄÁËÔÏÒÁ
+.B Vim 9.1
.TP
-/usr/local/lib/vim/doc/tags
-æÁÊÌ ÍÅÔÏË, ÉÓÐÏÌØÚÕÅÍÙÊ ÄÌÑ ÐÏÉÓËÁ ÉÎÆÏÒÍÁÃÉÉ × ÆÁÊÌÁÈ ÓÐÒÁ×ËÉ.
+/usr/local/share/vim/vim??/doc/tags
+æÁÊÌ ÉÎÄÅËÓÏ×, ÉÓÐÏÌØÚÕÅÍÙÊ ÄÌÑ ÐÏÉÓËÁ ÉÎÆÏÒÍÁÃÉÉ × ÆÁÊÌÁÈ ÄÏËÕÍÅÎÔÁÃÉÉ.
.TP
-/usr/local/lib/vim/syntax/syntax.vim
-óÉÓÔÅÍÎÙÅ ÎÁÓÔÒÏÊËÉ ÓÉÎÔÁËÓÉÓÁ.
+/usr/local/share/vim/vim??/syntax/syntax.vim
+ïÂÝÅÓÉÓÔÅÍÎÙÅ ÎÁÓÔÒÏÊËÉ ÒÁÓÐÏÚÎÁ×ÁÎÉÑ É ÐÏÄÓ×ÅÔËÉ ÓÉÎÔÁËÓÉÓÁ.
.TP
-/usr/local/lib/vim/syntax/*.vim
-æÁÊÌÙ ÓÉÎÔÁËÓÉÓÁ ÄÌÑ ÒÁÚÎÙÈ ÑÚÙËÏ×.
+/usr/local/share/vim/vim??/syntax/*.vim
+æÁÊÌÙ ÒÁÓÐÏÚÎÁ×ÁÎÉÑ É ÐÏÄÓ×ÅÔËÉ ÓÉÎÔÁËÓÉÓÁ ÄÌÑ ÒÁÚÌÉÞÎÙÈ ÑÚÙËÏ× ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ.
.TP
-/usr/local/lib/vim/vimrc
-óÉÓÔÅÍÎÙÅ ÎÁÓÔÒÏÊËÉ
+/usr/local/share/vim/vimrc
+ïÂÝÅÓÉÓÔÅÍÎÙÊ ÆÁÊÌ ÎÁÞÁÌØÎÏÊ ÎÁÓÔÒÏÊËÉ ÄÌÑ ËÏÎÓÏÌØÎÏÇÏ ÒÅÄÁËÔÏÒÁ
.B Vim.
.TP
-/usr/local/lib/vim/gvimrc
-óÉÓÔÅÍÎÙÊ ÎÁÓÔÒÏÊËÉ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ.
+~/.vimrc, ~/.vim/vimrc, $XDG_CONFIG_HOME/vim/vimrc
+ðÏÌØÚÏ×ÁÔÅÌØÓËÉÅ ÆÁÊÌÙ ÎÁÞÁÌØÎÏÊ ÎÁÓÔÒÏÊËÉ ÄÌÑ ËÏÎÓÏÌØÎÏÇÏ ÒÅÄÁËÔÏÒÁ
+.B Vim
+(ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎ ÐÅÒ×ÙÊ ÎÁÊÄÅÎÎÙÊ ÆÁÊÌ ÉÚ ÕËÁÚÁÎÎÙÈ).
+.TP
+/usr/local/share/vim/gvimrc
+ïÂÝÅÓÉÓÔÅÍÎÙÊ ÆÁÊÌ ÎÁÞÁÌØÎÏÊ ÎÁÓÔÒÏÊËÉ ÄÌÑ ÒÅÄÁËÔÏÒÁ Ó ÇÒÁÆÉÞÅÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ
+.B gVim.
+.TP
+~/.gvimrc, ~/.vim/gvimrc, $XDG_CONFIG_HOME/vim/gvimrc
+ðÏÌØÚÏ×ÁÔÅÌØÓËÉÅ ÆÁÊÌÙ ÎÁÞÁÌØÎÏÊ ÎÁÓÔÒÏÊËÉ ÄÌÑ ÒÅÄÁËÔÏÒÁ Ó ÇÒÁÆÉÞÅÓËÉÍ
+ÉÎÔÅÒÆÅÊÓÏÍ
+.B gVim
+(ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎ ÐÅÒ×ÙÊ ÎÁÊÄÅÎÎÙÊ ÆÁÊÌ ÉÚ ÕËÁÚÁÎÎÙÈ).
.TP
-/usr/local/lib/vim/optwin.vim
-óÃÅÎÁÒÉÊ, ÉÓÐÏÌØÚÕÅÍÙÊ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ ËÏÍÁÎÄÙ ":options".
-èÏÒÏÛÉÊ ÓÐÏÓÏ ÐÒÏÓÍÁÔÒÉ×ÁÔØ É ÉÚÍÅÎÑÔØ ÎÁÓÔÒÏÊËÉ.
+/usr/local/share/vim/vim??/optwin.vim
+ëÏÍÁÎÄÎÙÊ ÆÁÊÌ, ÉÓÐÏÌØÚÕÅÍÙÊ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ ËÏÍÁÎÄÙ ":options".
+ðÏ ÜÔÏÊ ËÏÍÁÎÄÅ ÐÒÅÄÏÓÔÁ×ÌÑÅÔÓÑ ÕÄÏÂÎÙÊ ÓÐÏÓÏ ÐÒÏÓÍÏÔÒÁ É ÉÚÍÅÎÅÎÉÑ ÎÁÓÔÒÏÅË.
.TP
-/usr/local/lib/vim/menu.vim
-óÉÓÔÅÍÎÙÅ ÎÁÓÔÒÏÊËÉ ÍÅÎÀ ÄÌÑ gvim.
+/usr/local/share/vim/vim??/menu.vim
+óÉÓÔÅÍÎÙÅ ÎÁÓÔÒÏÊËÉ ÍÅÎÀ ÄÌÑ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ ÒÅÄÁËÔÏÒÁ
+.B gVim.
.TP
-/usr/local/lib/vim/bugreport.vim
-óÃÅÎÁÒÉÊ ÄÌÑ ÓÏÚÄÁÎÉÑ ÏÔÞ£ÔÁ ÏÂ ÏÂÎÁÒÕÖÅÎÎÙÈ ÇÌÀËÁÈ. óÍ. ":help bugs".
+/usr/local/share/vim/vim??/bugreport.vim
+ëÏÍÁÎÄÎÙÊ ÆÁÊÌ ÄÌÑ ÓÏÚÄÁÎÉÑ ÏÔÞ£ÔÁ Ï ÏÂÎÁÒÕÖÅÎÎÙÈ ÏÛÉÂËÁÈ. óÍ. ":help bugs".
.TP
-/usr/local/lib/vim/filetype.vim
-óÃÅÎÁÒÉÊ ÄÌÑ ÏÐÒÅÄÅÌÅÎÉÑ ÔÉÐÁ ÆÁÊÌÁ ÐÏ ÉÍÅÎÉ. óÍ. ":help 'filetype'".
+/usr/local/share/vim/vim??/filetype.vim
+ëÏÍÁÎÄÎÙÊ ÆÁÊÌ ÄÌÑ ÒÁÓÐÏÚÎÁ×ÁÎÉÑ ÔÉÐÏ× ÆÁÊÌÏ× ÐÏ ÎÁÉÍÅÎÏ×ÁÎÉÀ.
+óÍ. ":help 'filetype'".
.TP
-/usr/local/lib/vim/scripts.vim
-óÃÅÎÁÒÉÊ ÄÌÑ ÏÐÒÅÄÅÌÅÎÉÑ ÔÉÐÁ ÆÁÊÌÁ ÐÏ ÓÏÄÅÒÖÉÍÏÍÕ. óÍ. ":help 'filetype'".
+/usr/local/share/vim/vim??/scripts.vim
+ëÏÍÁÎÄÎÙÊ ÆÁÊÌ ÄÌÑ ÒÁÓÐÏÚÎÁ×ÁÎÉÑ ÔÉÐÏ× ÆÁÊÌÏ× ÐÏ ÓÏÄÅÒÖÉÍÏÍÕ.
+óÍ. ":help 'filetype'".
.TP
-/usr/local/lib/vim/print/*.ps
-æÁÊÌÙ ÄÌÑ ÐÅÞÁÔÉ PostScript.
+/usr/local/share/vim/vim??/print/*.ps
+æÁÊÌÙ, ÉÓÐÏÌØÚÕÅÍÙÅ ÄÌÑ ÐÅÞÁÔÉ ÞÅÒÅÚ ÉÎÔÅÒÆÅÊÓ PostScript.
.PP
-âÏÌÅÅ Ó×ÅÖÁÑ ÉÎÆÏÒÍÁÃÉÑ -- ÎÁ ÓÁÊÔÅ VIM:
+÷ÓÀ ÐÏÓÌÅÄÎÀÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÒÅÄÁËÔÏÒÅ ÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÎÁ ×ÅÂ-ÓÔÒÁÎÉÃÅ VIM:
.br
<URL:http://www.vim.org/>
-.SH óíïôòé ôáëöå
+.SH óíïôòéôå ôáëöå
vimtutor(1)
.SH á÷ôïòù
-âÏÌØÛÁÑ ÞÁÓÔØ
+âÏÌØÛÁÑ ÞÁÓÔØ ÒÅÄÁËÔÏÒÁ
.B Vim
-ÓÏÚÄÁÎÁ âÒÁÍÏÍ íÏÏÌÅÎÁÁÒÏÍ (Bram Moolenaar), ËÏÔÏÒÏÍÕ ÐÏÍÏÇÁÅÔ ÏÇÒÏÍÎÏÅ
-ËÏÌÉÞÅÓÔ×Ï ÌÀÄÅÊ. óÍ. ":help credits" ×
+ÂÙÌÁ ÓÏÚÄÁÎÁ âÒÁÍÏÍ íÏÌÅÎÁÒÏÍ (Bram Moolenaar), ËÏÔÏÒÏÍÕ ÐÏÍÏÇÁÌÏ ÏÇÒÏÍÎÏÅ
+ËÏÌÉÞÅÓÔ×Ï ÌÀÄÅÊ. óÍ. ":help credits" × ÒÅÄÁËÔÏÒÅ
.B Vim.
.br
+òÅÄÁËÔÏÒ
.B Vim
ÂÁÚÉÒÕÅÔÓÑ ÎÁ ËÏÄÅ ÒÅÄÁËÔÏÒÁ Stevie, ÎÁÐÉÓÁÎÎÏÇÏ ôÉÍÏÍ ôÏÍÐÓÏÎÏÍ (Tim Thompson),
ôÏÎÉ üÎÄÒÀÓÏÍ (Tony Andrews) É ç. ò. (æÒÅÄÏÍ) õÏÌÔÅÒÏÍ (G.R. (Fred) Walter).
-ïÄÎÁËÏ, × ÎÁÓÔÏÑÝÅÅ ×ÒÅÍÑ × Vim ÐÏÞÔÉ ÎÅ ÏÓÔÁÌÏÓØ ÎÉÞÅÇÏ ÏÔ ÉÓÔÏÒÉÞÅÓËÏÇÏ ËÏÄÁ
-ÅÇÏ ÐÒÅÄÛÅÓÔ×ÅÎÎÉËÁ.
+ïÄÎÁËÏ, × ÎÁÓÔÏÑÝÅÅ ×ÒÅÍÑ × ÐÒÏÇÒÁÍÍÅ Vim ÐÏÞÔÉ ÎÉÞÅÇÏ ÎÅ ÏÓÔÁÌÏÓØ
+ÏÔ ÉÓÔÏÒÉÞÅÓËÏÇÏ ËÏÄÁ ÅÇÏ ÐÒÅÄÛÅÓÔ×ÅÎÎÉËÁ.
.br
-òÕÓÓËÁÑ ÌÏËÁÌÉÚÁÃÉÑ
+òÕÓÓËÁÑ ÌÏËÁÌÉÚÁÃÉÑ ÒÅÄÁËÔÏÒÁ
.B Vim
×ÙÐÏÌÎÑÅÔÓÑ × ÒÁÍËÁÈ ÐÒÏÅËÔÁ "òÕ÷ÉÍ",
-ÓÍ. <URL:http://sourceforge.net/projects/ruvim/>.
-.SH çìàëé
+ÓÍ. <URL:https://github.com/restorerz/ruvim/>.
+.SH ïûéâëé
óËÏÒÅÅ ×ÓÅÇÏ ÅÓÔØ.
-óÍ. ":help todo" -- ÓÐÉÓÏË ÉÚ×ÅÓÔÎÙÈ ÐÒÏÂÌÅÍ.
+óÍ. ":help todo" \[em] ÐÅÒÅÞÅÎØ ÉÚ×ÅÓÔÎÙÈ ÏÛÉÂÏË × ÒÁÂÏÔÅ.
.PP
-úÁÍÅÔÉÍ, ÞÔÏ ÍÎÏÇÉÅ ×ÅÝÉ, ËÏÔÏÒÙÅ ÓÞÉÔÁÀÔÓÑ ÇÌÀËÁÍÉ, ÎÁ ÓÁÍÏÍ ÄÅÌÅ
-Ñ×ÌÑÀÔÓÑ ÒÅÚÕÌØÔÁÔÏÍ ÓÌÉÛËÏÍ ÐÏÌÎÏÇÏ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÑ ÐÏ×ÅÄÅÎÉÑ Vi.
+úÁÍÅÔÉÍ, ÞÔÏ ÍÎÏÇÉÅ ×ÅÝÉ, ËÏÔÏÒÙÅ ÓÞÉÔÁÀÔÓÑ ÏÛÉÂËÁÍÉ, ÎÁ ÓÁÍÏÍ ÄÅÌÅ
+Ñ×ÌÑÀÔÓÑ ÒÅÚÕÌØÔÁÔÏÍ ÓÌÉÛËÏÍ ÐÏÌÎÏÇÏ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÑ ÐÏ×ÅÄÅÎÉÑ ÒÅÄÁËÔÏÒÁ Vi.
åÓÌÉ ×Ù ÄÕÍÁÅÔÅ, ÞÔÏ ÞÔÏ-ÔÏ Ñ×ÌÑÅÔÓÑ ÏÛÉÂËÏÊ ÔÏÌØËÏ ÐÏÔÏÍÕ, ÞÔÏ
"Vi ÄÅÌÁÅÔ ÜÔÏ ÐÏ-ÄÒÕÇÏÍÕ", ×ÎÉÍÁÔÅÌØÎÏ ÐÒÏÞÉÔÁÊÔÅ ÆÁÊÌ vi_diff.txt
-(ÉÌÉ ÎÁÂÅÒÉÔÅ ":help vi_diff.txt" × Vim) É ÉÓÐÏÌØÚÕÊÔÅ ÏÐÃÉÉ 'compatible'
-É 'cpoptions'.
+(ÉÌÉ ÎÁÂÅÒÉÔÅ ":help vi_diff.txt" × ÒÅÄÁËÔÏÒÅ Vim) É ÐÏÓÍÏÔÒÉÔÅ ÐÁÒÁÍÅÔÒÙ
+ 'compatible' É 'cpoptions'.
diff --git a/runtime/doc/vim-ru.UTF-8.1 b/runtime/doc/vim-ru.UTF-8.1
index ef52721..e2308e3 100644
--- a/runtime/doc/vim-ru.UTF-8.1
+++ b/runtime/doc/vim-ru.UTF-8.1
@@ -1,19 +1,20 @@
-.TH VIM 1 "2002 Feb 22"
-.SH ИМЯ
-vim \- Vi IMproved (Улучшенный Vi), текÑтовый редактор Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов
-.SH КОМÐÐДÐÐЯ СТРОКÐ
+.TH VIM 1 "12 авгуÑта 2024"
+.SH ÐÐЗÐÐЧЕÐИЕ
+Программа Vim \[em] Ñто Vi IMproved (Улучшенный Vi), текÑтовый редактор длÑ
+программиÑтов.
+.SH КРÐТКИЙ ОБЗОР
.br
.B vim
-[ключи] [файл ..]
+[аргументы] [файл ...]
.br
.B vim
-[ключи] \-
+[аргументы] \-
.br
.B vim
-[ключи] \-t метка
+[аргументы] \-t индекÑ
.br
.B vim
-[ключи] \-q [файл ошибок]
+[аргументы] \-q [файл результатов]
.PP
.br
.B ex
@@ -22,468 +23,669 @@ vim \- Vi IMproved (Улучшенный Vi), текÑтовый редактоÑ
.br
.B gvim
.B gview
+.B evim
+.B eview
.br
.B rvim
.B rview
.B rgvim
.B rgview
.SH ОПИСÐÐИЕ
+Программа
.B Vim
--- текÑтовый редактор, обратно-ÑовмеÑтимый Ñ Vi.
-Он может быть иÑпользован Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ вÑех видов проÑтого текÑта.
-ОÑобенно он хорош Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ иÑходных текÑтов программ.
+\[em] Ñто текÑтовый редактор, ÑовмеÑтимый Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi.
+Она может быть иÑпользована Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ вÑех видов обычных текÑтовых документов.
+ОÑобенно полезна она будет Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñходных текÑтов программ.
.PP
-По Ñравнению Ñ Vi,
+По Ñравнению Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi, в редакторе
.B Vim
-имеет много уÑовершенÑтвований: Ð¼Ð½Ð¾Ð³Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð°Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð° операций,
+предÑтавлено много уÑовершенÑтвований: Ð¼Ð½Ð¾Ð³Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð°Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð° операций,
множеÑтвенноÑÑ‚ÑŒ окон и буферов, подÑветка ÑинтакÑиÑа, правка командной Ñтроки,
-автодополнение имён файлов, вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ñправка, визуальное выделение и Ñ‚.п.
-См. ":help vi_diff.txt" Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ ÑпиÑка различий между
+подÑтановка наименований файлов, вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ, визуальное выделение
+и прочее.
+См. ":help vi_diff.txt" чтобы ознакомитьÑÑ Ñ Ð¿Ð¾Ð»Ð½Ñ‹Ð¼ перечнем различий между
+редактором
.B Vim
-и Vi.
+и редактором Vi.
.PP
-Во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ в
-.B Vim
-можно получить Ñправку Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑиÑтемы вÑтроенной Ñправки (команда ":help").
-См. раздел "ВСТРОЕÐÐÐЯ СПРÐВКÐ" ниже по текÑту.
+Чтобы получить полезную информацию о работе Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼
+.B Vim,
+можно воÑпользоватьÑÑ Ð²Ñтроенной в программу документацией, набрав в редакторе
+команду ":help".
+См. раздел "ВСТРОЕÐÐÐЯ ДОКУМЕÐТÐЦИЯ" далее в текÑте.
.PP
-Чаще вÑего
+Чаще вÑего редактор
.B Vim
запуÑкают Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ одного файла при помощи команды
.PP
vim файл
.PP
-Ð’ общем виде команда запуÑка
+Ð’ общем виде команда запуÑка редактора
.B Vim
выглÑдит так:
.PP
- vim [ключи] [ÑпиÑок файлов]
+ vim [аргументы] [файлы]
.PP
-ЕÑли ÑпиÑок файлов отÑутÑтвует, редактор начнёт работу Ñ Ð¿ÑƒÑтым буфером.
-Ð’ противном Ñлучае Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° должно быть указано одним из Ñледующих четырёх ÑпоÑобов:
+ЕÑли файлы не указаны, редактор будет запущен Ñ Ð´Ð¾Ñтупным Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ
+пуÑтым буфером.
+ÐÐ°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² могут быть указаны одним из Ñледующих четырёх ÑпоÑобов:
.TP 12
-файл ..
-СпиÑок имён файлов.
-Первый файл будет объÑвлен активным и загружен в буфер. КурÑор будет помещён
-в первой Ñтроке буфера. ДоÑтуп к другим файлам может быть оÑущеÑтвлён при
-помощи команды ":next". Чтобы править файл, Ð¸Ð¼Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ начинаетÑÑ Ñ Ñимвола
-"дефиÑ" (-), перед ÑпиÑком файлов необходимо поÑтавить "--".
+файл ...
+Перечень наименований файлов.
+Первый файл из Ð¿ÐµÑ€ÐµÑ‡Ð½Ñ Ð±ÑƒÐ´ÐµÑ‚ объÑвлен активным и загружен в буфер, а каретка
+уÑтановлена на первой Ñтроке Ñтого буфера. ДоÑтуп к другим файлам из Ñтого
+Ð¿ÐµÑ€ÐµÑ‡Ð½Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть оÑущеÑтвлён при помощи команды ":next". Чтобы править файл,
+наименование которого начинаетÑÑ Ñ Ñимвола "дефиÑ" (\-), перед перечнем файлов
+необходимо указать Ñимволы "\-\-".
.TP
\-
-Файл будет прочитан из потока Ñтандартного ввода. Команды будут ÑчитыватьÑÑ
-из Ñтандартного потока диагноÑтики (stderr), который должен быть
-терминалом.
-.TP
-\-t {метка}
-Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° и Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ ÐºÑƒÑ€Ñора завиÑÑÑ‚ от "метки", похожей на метку goto.
-{метка} ищетÑÑ Ð² файле меток, ÑоответÑтвующий файл ÑтановитÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼, а
-ÑоответÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° иÑполнÑетÑÑ.
-Чаще вÑего иÑпользуетÑÑ Ð² программах на Ñзыке Си, где {метка} может быть именем
-функции.
-Файл, Ñодержащий функцию, ÑтановитÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼, а курÑор помещаетÑÑ Ð² начало функции.
-См. ":help tag-commands".
-.TP
-\-q [файл ошибок]
-Ðачать работу в режиме быÑтрого иÑправлениÑ.
-При Ñтом ÑчитываетÑÑ [файл ошибок] и Ð¿ÐµÑ€Ð²Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° выводитÑÑ Ð½Ð° Ñкран.
-ЕÑли [файл ошибок] не указан, Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° берётÑÑ Ð¸Ð· Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ†Ð¸Ð¸ 'errorfile'
-(по умолчанию: "AztecC.Err" Ð´Ð»Ñ Amiga, "errors.err" Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… ÑиÑтем).
-К Ñледующим ошибкам можно перейти по команде ":cn".
+ТекÑÑ‚ Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ будет Ñчитан из потока Ñтандартного ввода. Команды будут
+ÑчитыватьÑÑ Ð¸Ð· Ñтандартного потока диагноÑтики (stderr), который должен
+предоÑтавлÑÑ‚ÑŒÑÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð¾Ð¼.
+.TP
+\-t {индекÑ}
+Файла Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ и Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ ÐºÐ°Ñ€ÐµÑ‚ÐºÐ¸ завиÑÑÑ‚ от Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ "индекÑа",
+ÑвлÑющийÑÑ Ñвоего рода меткой goto. ПоиÑк Ñамого {индекÑа} выполнÑетÑÑ Ð² файле
+индекÑов, а ÑопоÑтавленный Ñ Ð½Ð¸Ð¼ файл будет открыт в редакторе и выполнена
+ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ Ñтим {индекÑом} команда.
+Чаще вÑего Ñтот ÑпоÑоб иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼ на Ñзыке Си, где {индекÑ} может
+быть наименованием функции.
+Файл, Ñодержащий такую функцию, ÑтановитÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼, а каретка помещаетÑÑ
+в начало Ñтой функции.
+См. ":help tag\-commands".
+.TP
+\-q [файл результатов]
+Ðачать работу редактора в цикле быÑтрого иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта программ.
+Будет Ñчитан [файл результатов] и отображена Ð¿ÐµÑ€Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ из Ñтого файла.
+ЕÑли [файл результатов] не указан, то его наименование берётÑÑ Ð¸Ð· значениÑ
+параметра 'errorfile' (по умолчанию Ð´Ð»Ñ ÐžÐ¡ Amiga Ñто "AztecC.Err", а Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…
+ÑиÑтем \[em] "errors.err").
+К Ñледующей запиÑи в файле результатов можно перейти по команде ":cn".
См. ":help quickfix".
.PP
+Программа
.B Vim
-ведёт ÑÐµÐ±Ñ Ð¿Ð¾-разному в завиÑимоÑти от имени команды (иÑполнÑемый файл может
-быть одним и тем же).
+ведёт ÑÐµÐ±Ñ Ð¿Ð¾-разному в завиÑимоÑти от указанной в командной Ñтроке команды
+вызова редактора (иÑполнÑемый файл при Ñтом может быть одним и тем же).
.TP 10
vim
-"Ðормальный" запуÑк, вÑÑ‘ по умолчанию.
+Это "нормальный" запуÑк редактора, вÑÑ‘ по умолчанию.
.TP
ex
-ЗапуÑк в режиме Ex. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в нормальный режим
-необходимо выполнить команду ":vi". Режим Ex включает
-также ключ "\-e".
+ЗапуÑк редактора в Ex-режиме. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² обычный режим, необходимо
+набрать команду ":vi".
+Ex-режим также может быть активирован через аргумент "\-e".
.TP
view
-ЗапуÑк в режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ". Ð’Ñ‹ будете защищены от Ñлучайной запиÑи
-файла. То же Ñамое можно Ñделать ключом "\-R".
+ЗапуÑк редактора в режиме "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ". Ð’ Ñтом режиме еÑÑ‚ÑŒ некотораÑ
+защита от Ñлучайной перезапиÑи файлов.
+То же Ñамое можно Ñделать через указание аргумента "\-R".
.TP
gvim gview
-ВерÑÐ¸Ñ Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом. ЗапуÑкаетÑÑ Ð² новом окне.
-То же Ñамое можно Ñделать при запуÑке Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ "\-g".
+ЗапуÑк редактора Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом. Ð”Ð»Ñ Ñтого будет открыто новое окно.
+То же Ñамое можно Ñделать при запуÑке Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ "\-g".
+.TP
+evim eview
+Упрощённый вариант редактора Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом. ЗапуÑкаетÑÑ Ð² новом окне.
+То же Ñамое можно Ñделать через аргумент "\-y".
.TP
rvim rview rgvim rgview
-Как и предыдущие команды, но Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñми. ÐÐµÐ»ÑŒÐ·Ñ Ð·Ð°Ð¿ÑƒÑкать команды оболочки
-или приоÑтанавливать работу
+Как и предыдущие команды, но Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ ограничениÑми в функциональноÑти.
+ÐÐµÐ»ÑŒÐ·Ñ Ð·Ð°Ð¿ÑƒÑкать команды оболочки или приоÑтанавливать работу редактора
.B Vim.
-ВмеÑто приÑтавки "r" можно иÑпользовать ключ "\-Z".
-.SH КЛЮЧИ
-Ключи могут быть указаны в любом порÑдке, до или поÑле имён
-файлов. Ключи без аргументов могут быть объединены под одним
-дефиÑом.
+ВмеÑто приÑтавки "r" можно иÑпользовать аргумент командной Ñтроки "\-Z".
+.SH ÐРГУМЕÐТЫ КОМÐÐДÐОЙ СТРОКИ
+Ðргументы могут быть указаны в любом порÑдке, до или поÑле наименований файлов.
+Ðргументы, не требующие значений, могут быть объединены Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ только
+одного дефиÑа.
.TP 12
+[номер]
-Ð’ первом файле курÑор будет помещён на Ñтроку Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ номером.
-ЕÑли "номер" не указан, курÑор будет помещён на поÑледнюю Ñтроку.
+УÑтановка каретки на [номер] Ñтроки.
+Ð’ первом открытом файле каретка будет уÑтановлена на Ñтроку Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ номером.
+ЕÑли "номер" не задан, каретка уÑтанавливаетÑÑ Ð½Ð° поÑледней Ñтроке файла.
.TP
+/{шаблон}
-Ð’ первом файле курÑор будет помещён на меÑто первого ÑовпадениÑ
-Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ шаблоном. См. ":help search-pattern" Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ
-ÑпиÑка допуÑтимых шаблонов.
+УÑтановка каретки на найденной Ñтроке.
+Ð’ открытом файле каретка будет уÑтановлена в Ñтроке первого ÑовпадениÑ
+Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ шаблоном. См. ":help search\-pattern" Ð´Ð»Ñ Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ Ð´Ð¾Ð¿ÑƒÑтимыми
+шаблонами.
.TP
+{команда}
.TP
\-c {команда}
-{команда} иÑполнÑетÑÑ Ð¿Ð¾Ñле загрузки первого файла как команда Ex.
-ЕÑли {команда} Ñодержит пробелы, то она должна быть заключена в
-двойные кавычки (в завиÑимоÑти от иÑпользуемой оболочки).
-Пример: vim "+set si" main.c
+ИÑполнение указанной {команды}.
+ПоÑле загрузки первого файла будет иÑполнена ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ {команда} как Ex-команда.
+ЕÑли в текÑте {команда} еÑÑ‚ÑŒ пробелы, то она должна быть заключена в
+двойные кавычки (в завиÑимоÑти от иÑпользуемой командной оболочки).
+Пример:
+vim "+set si" main.c
.br
-Примечание: Можно указывать до деÑÑти команд "+" или "\-c".
-.TP
-\-\-cmd {команда}
-Как "\-c", но команда иÑполнÑетÑÑ Ð¿ÐµÑ€ÐµÐ´ обработкой любого файла
-наÑтроек (vimrc).
-Можно указывать до деÑÑти таких команд, незавиÑимо от количеÑтва
-команд "\-c".
+Примечание. Можно указывать до деÑÑти команд "+" или "\-c".
.TP
\-A
-ЕÑли
+ЗапуÑк программы Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ арабÑкой пиÑьменноÑти.
+ЕÑли программа
.B Vim
-был Ñобран Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ арабÑкого Ñзыка Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ файлов,
-набранных Ñправа налево, и Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ арабÑкой клавиатуры,
-Ñтот ключ запуÑкает
+была Ñобрана Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ правки текÑта Ñ Ð½Ð°Ð¿Ð¸Ñанием Ñправа налево
+и Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ клавиатуры Ð´Ð»Ñ Ð°Ñ€Ð°Ð±Ñкого Ñзыка, то будет выполнен запуÑк
+редактора
.B Vim
-в арабÑком режиме, Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹ опцией 'arabic'. Ð’ противном
-Ñлучае
+в режиме работы Ñ Ð°Ñ€Ð°Ð±Ñкой пиÑьменноÑтью, Ñ‚. е. уÑтановлен параметр 'arabic'.
+Ð’ противном Ñлучае редактор
.B Vim
-завершает работу Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹.
+завершит работу Ñ Ñообщением об ошибке.
.TP
\-b
-Двоичный режим.
-ПроизводитÑÑ Ð½Ð°Ñтройка некоторых опций, делающих возможной правку
+ЗапуÑк программы в режиме работы Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ данными.
+ПроизводитÑÑ Ð½Ð°Ñтройка некоторых параметров, делающих возможной правку
двоичного или иÑполнÑемого файла.
.TP
\-C
-Режим ÑовмеÑтимоÑти. Включает опцию 'compatible'.
+Работа в варианте ÑовмеÑтимоÑти Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi.
+Будет уÑтановлен параметр 'compatible', и редактор
.B Vim
-будет работать почти как Vi, даже еÑли ÑущеÑтвует файл .vimrc.
+будет работать почти как редактор Vi, даже еÑли ÑущеÑтвует файл ".vimrc".
.TP
\-d
-Режим поиÑка различий.
-Должно быть указано два или три имени файла.
+Режим ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ð¹.
+Может быть указано от двух до воÑьми наименований файлов. Ð’ редакторе
.B Vim
-откроет вÑе файлы и покажет Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ ними
-(как vimdiff(1)).
+будут открыты вÑе файлы и показаны Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ ними (как vimdiff(1)).
.TP
-\-d {уÑтройÑтво}
-Открыть {уÑтройÑтво} Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² качеÑтве терминала (только на Amiga).
+\-d {уÑтройÑтво}, \-dev {уÑтройÑтво}
+ИÑпользовать {уÑтройÑтво} Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ ввода-вывода.
+Открыть {уÑтройÑтво} Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² качеÑтве терминала (только в ОС Amiga).
Пример:
"\-d con:20/30/600/150".
.TP
+\-D
+ЗапуÑк программы в режиме диагноÑтики.
+Переключение в режим отладки при иÑполнении первой команды из командного файла.
+.TP
\-e
-ЗапуÑтить
+ЗапуÑк программы в Ex-режиме.
+Редактор
+.B Vim
+будет работоать в Ex-режиме, тоже, что в командной Ñтроке оболочки набрать
+команду "ex".
+.TP
+\-E
+ЗапуÑк программы в улучшенном Ex-режиме.
+Редактор
.B Vim
-в режиме Ex, как будто иÑполнÑемый файл имеет Ð¸Ð¼Ñ "ex".
+будет работать в улучшенном Ex-режиме, Ñто аналогично набору в командной
+оболочке команды "exim".
.TP
\-f
-Режим активного приложениÑ. ВерÑиÑ
+Режим активного приложениÑ.
+Редактор
.B Vim
-Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом не будет ветвитьÑÑ Ð¸ отключатьÑÑ
-от запуÑтившей её оболочки. Ðа платформе Amiga
+Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом не будет наÑледоватьÑÑ Ð¸ отключатьÑÑ Ð¾Ñ‚ командной
+оболочки, в которой выполнена команда его запуÑка.
+Ðа платформе Amiga редактор
.B Vim
-не будет Ñоздавать новое окно. Этот ключ нужно иÑпользовать,
-когда
+не будет перезапуÑкатьÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ окна. Этот аргумент командной
+Ñтроки нужно иÑпользовать, когда редактор
.B Vim
запуÑкаетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ждать завершениÑ
ÑеанÑа правки (например, программа Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñлектронной почтой).
-Ðа платформе Amiga команды ":sh" и ":!" не будут работать.
-.TP
-\-\-nofork
-Режим активного приложениÑ. ВерÑиÑ
-.B Vim
-Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом не будет ветвитьÑÑ Ð¸ отключатьÑÑ
-от запуÑтившей её оболочки.
+Ðа платформе Amiga в Ñтом Ñлучае команды ":sh" и ":!" не будут работать.
.TP
\-F
-ЕÑли
+ЗапуÑк программы Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ перÑидÑкой пиÑьменноÑти.
+ЕÑли программа
.B Vim
-был Ñобран Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ FKMAP Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ текÑта Ñправа налево
-и наÑтроек клавиатуры Ð´Ð»Ñ Ñзыка фарÑи, Ñтот ключ запуÑкает
+была Ñобрана Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ правки текÑта Ñ Ð½Ð°Ð¿Ð¸Ñанием Ñправа налево
+и Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ клавиатуры Ð´Ð»Ñ Ð¿ÐµÑ€ÑидÑкого Ñзыка, то будет выполнен запуÑк
+редактора
.B Vim
-в режиме фарÑи, иначе говорÑ, Ñ Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ опциÑми
-\&'fkmap' и 'rightleft'.
-Ð’ противном Ñлучае
+в режиме работы Ñ Ð¿ÐµÑ€ÑидÑкой пиÑьменноÑтью, Ñ‚. е. уÑтановлены параметры 'fkmap'
+и 'rightleft'.
+Ð’ противном Ñлучае редактор
.B Vim
-завершает работу Ñ Ñообщением об ошибке.
+завершит работу Ñ Ñообщением об ошибке.
+.br
+Примечание. Поддержка перÑидÑкой пиÑьменноÑти была удалена в верÑии 8.1.0932.
.TP
\-g
-ЕÑли
+ЗапуÑк программы Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом.
+ЕÑли программа
.B Vim
-был Ñобран Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ графичеÑкого интерфейÑа, Ñтот ключ
-включает графичеÑкий интерфейÑ. Ð’ противном Ñлучае
+была Ñобрана Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ графичеÑкого интерфейÑа, то будет выполнен запуÑк
+графичеÑкого интерфейÑа пользователÑ.
+Ð’ противном Ñлучае редактор
.B Vim
-завершает работу Ñ Ñообщением об ошибке.
-.TP
-\-h
-Выводит краткую информацию об аргументах и ключах командной Ñтроки.
-ПоÑле Ñтого
-.B Vim
-завершает работу.
+завершит работу Ñ Ñообщением об ошибке.
.TP
\-H
-ЕÑли
+ЗапуÑк программы Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ еврейÑкой пиÑьменноÑти.
+ЕÑли программа
.B Vim
-был Ñобран Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ правки текÑта Ñправа налево
-и наÑтроек клавиатуры Ð´Ð»Ñ Ð¸Ð²Ñ€Ð¸Ñ‚Ð°, Ñтот ключ запуÑкает
+была Ñобрана Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ правки текÑта Ñ Ð½Ð°Ð¿Ð¸Ñанием Ñправа налево
+и Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ клавиатуры Ð´Ð»Ñ ÐµÐ²Ñ€ÐµÐ¹Ñкого Ñзыка, то будет выполнен запуÑк
+редактора
.B Vim
-в режиме иврита, иначе говорÑ, Ñ Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ опциÑми 'hkmap' и 'rightleft'.
-Ð’ противном Ñлучае
+в режиме работы Ñ ÐµÐ²Ñ€ÐµÐ¹Ñкой пиÑьменноÑтью, Ñ‚. е. уÑтановлены параметры 'hkmap'
+и 'rightleft'.
+Ð’ противном Ñлучае редактор
.B Vim
-завершает работу Ñ Ñообщением об ошибке.
+завершит работу Ñ Ñообщением об ошибке.
.TP
-\-i {viminfo}
-ЕÑли иÑпользуетÑÑ Ñ„Ð°Ð¹Ð» viminfo, то Ñтот ключ задаёт Ð¸Ð¼Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ файла (вмеÑто
-"~/.viminfo" по умолчанию). Можно также избежать иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° viminfo
-путём ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ "NONE".
-.TP
-\-L
-То же, что и \-r.
+\-i {файл}
+ИÑпользовать в качеÑтве файла подкачки указанный {файл}.
+Через Ñтот аргумент задаётÑÑ Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ðµ viminfo-файла (вмеÑто принÑтого
+по умолчанию ".viminfo"). ЗдеÑÑŒ же можно отключить иÑпользование viminfo-файла
+через указание Ñлова "NONE" (пропиÑными буквами).
.TP
\-l
-Режим Lisp. ВключаютÑÑ Ð¾Ð¿Ñ†Ð¸Ð¸ 'lisp' и 'showmatch'.
+ЗапуÑк программы в режиме Lisp.
+ВыполнÑетÑÑ ÑƒÑтановка параметров 'lisp' и 'showmatch'.
+.TP
+\-L
+То же, что и аргумент командной Ñтроки \-r.
.TP
\-m
-Изменение файлов запрещено. При Ñтом отключаетÑÑ Ð¾Ð¿Ñ†Ð¸Ñ 'write', поÑтому
-запиÑÑŒ файлов ÑтановитÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ð¹.
+Работа без возможноÑти ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹.
+ВыполнÑетÑÑ ÑÐ±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° 'write', поÑтому ÑтановитÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ð¼ запиÑать
+в файл изменениÑ, внеÑённые в буфер.
.TP
-\-N
-Режим неполной ÑовмеÑтимоÑти. ОтключаетÑÑ 'compatible'.
-.B Vim
-будет работать лучше, но не будет полноÑтью ÑовмеÑтим Ñ Vi, даже еÑли
-отÑутÑтвует файл ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð½Ð°Ñтроек (.vimrc).
+\-M
+Работа без возможноÑти внеÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в текÑÑ‚.
+Параметры 'modifiable' и 'write' будут отключены, так что Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚
+запрещены, и файлы не Ñмогут быть запиÑаны.
+Обратите внимание, что поÑле начала работы редактора, Ñти параметры можно
+включить, чтобы разрешить внеÑение изменений.
.TP
\-n
-Ðе иÑпользовать Ñвоп-файл. ВоÑÑтановление при Ñбое в работе будет невозможно.
+Работа без ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° подкачки.
+Ð’ Ñтом Ñлучае воÑÑтановление при Ñбое в работе редактора будет невозможно.
Удобно Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ файла на очень медленном ноÑителе (например, гибком диÑке).
-То же Ñамое можно Ñделать командой ":set uc=0". Отмена -- ":set uc=200".
+То же Ñамое можно Ñделать командой ":set uc=0". Включение файла подкачки \[em]
+":set uc=200".
+.TP
+\-N
+Работа в варианте неполной ÑовмеÑтимоÑти Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi.
+Будет Ñброшен параметр 'compatible'.
+Редактор
+.B Vim
+будет работать лучше, но не будет полноÑтью ÑовмеÑтим Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi, даже еÑли
+отÑутÑтвует файл начальных наÑтроек (".vimrc").
+.TP
+\-nb
+Ðазначить программу Vim Ñервером редактора Ð´Ð»Ñ Ð˜Ð¡Ð  NetBeans. ПодробноÑти
+Ñмотрите в документации.
.TP
\-o[N]
-Открыть N окон, разделённых по горизонтали. ЕÑли N не указано, то открываетÑÑ
-по одному окну на каждый файл.
+Создать Ð´Ð»Ñ N файлов отдельные окна, раÑположенные по горизонтали.
+ЕÑли N не указано, то ÑоздаётÑÑ Ð¿Ð¾ одному окну на каждый файл.
.TP
\-O[N]
-Открыть N окон, разделённых по вертикали. ЕÑли N не указано, то открываетÑÑ
-по одному окну на каждый файл.
-.TP
-\-R
-Режим "только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ". ВключаетÑÑ Ð¾Ð¿Ñ†Ð¸Ñ 'readonly'.
-Файл в буфере доÑтупен Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, но его копию на диÑке нельзÑ
-Ñлучайно перезапиÑать. Ð”Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° необходимо добавить воÑклицательный
-знак к ÑоответÑтвующей команде Ex (например, ":w!").
-Ключ "\-R" подразумевает также, что иÑпользуетÑÑ Ð¸ ключ "\-n" (Ñм. выше).
-ÐžÐ¿Ñ†Ð¸Ñ 'readonly' может быть выключена по команде ":set noro".
-См. ":help 'readonly'".
+Создать Ð´Ð»Ñ N файлов отдельные окна, раÑположенные по вертикали.
+ЕÑли N не указано, то ÑоздаётÑÑ Ð¿Ð¾ одному окну на каждый файл.
+.TP
+\-p[N]
+Создать Ð´Ð»Ñ N файлов отдельные вкладки.
+ЕÑли N не указано, то ÑоздаётÑÑ Ð¿Ð¾ одной вкладке на каждый файл.
+.TP
+\-P {заголовок окна}
+Открыть программу в многодокументном приложении.
+Только Ð´Ð»Ñ Ð“Ð˜ÐŸ в MS Windows. Задаёт заголовок окна родительÑкого приложениÑ.
+ЕÑли возможно, то программа Vim будет запущена внутри окна многодокументного
+приложениÑ. Многодокументное приложение должно иметь указанный {заголовок окна}.
+УбедитеÑÑŒ, что Ñтот {заголовок окна} уникален Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ. Обращаем внимание,
+что Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ функционала вÑÑ‘ ещё не до конца отработана. Внедрение
+программы возможно не во вÑе Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ не поддерживаетÑÑ Ð¼ÐµÐ½ÑŽ окна.
.TP
\-r
-ВывеÑти ÑпиÑок Ñвоп-файлов и информацию об их иÑпользовании Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле ÑбоÑ.
+Вывод Ð¿ÐµÑ€ÐµÑ‡Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² подкачки и завершение работы.
+Будут показаны доÑтупные файлы подкачки и Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± их иÑпользовании
+Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð² Ñлучае ÑбоÑ.
.TP
\-r {файл}
-Режим воÑÑтановлениÑ.
-Ð”Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле ÑÐ±Ð¾Ñ Ð±ÑƒÐ´ÐµÑ‚ иÑпользован Ñвоп-файл.
-Своп-файл имеет то же имÑ, что и текÑтовый файл, но Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ ".swp".
+ВоÑÑтановление аварийно завершённого ÑеанÑа.
+Ð”Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле ÑÐ±Ð¾Ñ Ð² работе будет иÑпользован указанный файл подкачки.
+Файл подкачки имеет то же наименование, что и редактируемый текÑтовый файл,
+но Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ ".swp".
См. ":help recovery".
.TP
+\-R
+Работа в варианте только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ.
+Будет уÑтановлен параметр 'readonly'.
+Файл в буфере доÑтупен Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, но его копию на диÑке нельзÑ
+Ñлучайно перезапиÑать. Ð”Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° необходимо добавить воÑклицательный
+знак к ÑоответÑтвующей Ex-команде (например, ":w!").
+При задании аргумента "\-R" также подразумеваетÑÑ, что иÑпользуетÑÑ Ð¸ аргумент
+"\-n" (Ñм. выше).
+Параметр 'readonly' может быть Ñброшен по команде ":set noro".
+См. ":help 'readonly'".
+.TP
\-s
-Тихий режим. Только при запуÑке как "Ex" или еÑли перед "\-s" указан ключ "\-e".
+Тихий режим.
+Только при запуÑке в командной оболочке как программы "ex" или еÑли перед
+аргументом "\-s" указан аргумент "\-e".
+.TP
+\-s {командный файл}
+Считывание команд режима команд из {командного файла}.
+Содержимое файла воÑпринимаетÑÑ Ð² виде команд, как еÑли бы они были набраны
+непоÑредÑтвенно в редакторе.
+То же Ñамое доÑтигаетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ":source! {командный файл}".
+ЕÑли поÑле иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ñех команд из {командного файла} работа редактора
+продолжаетÑÑ, то дальнейший ввод команд и текÑта ожидаетÑÑ Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹.
+.TP
+\-S {файл}
+ИÑполнение указанного {файла}.
+ПоÑле загрузки в буфер первого файла, будет иÑполнен указанный командный {файл}.
+Это аналогично команде в командной Ñтроке \-c "source {файл}".
+Ðаименование {файла} не может начинатьÑÑ Ñ Ñимвола '\-'.
+ЕÑли не указан {файл}, то будет иÑполнен файл "Session.vim" (Ñто будет работать
+только еÑли аргумент \-S ÑвлÑетÑÑ Ð¿Ð¾Ñледним в командной Ñтроке).
+.TP
+\-T {терминал}
+Ðазначить указанный тип {терминала}.
+Редактору
+.B Vim
+будет передан тип иÑпользуемого терминала.
+Ðеобходимо только в тех ÑитуациÑÑ…, когда автоматичеÑкое определение терминала
+не работает. Ðаименование терминала должно быть извеÑтно редактору
+.B Vim
+(предопределено в редакторе) либо указано в базе termcap или terminfo.
+.TP
+\-u {файл}
+ИÑпользовать Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð¹ наÑтройки указанный командный {файл}.
+Ð’Ñе оÑтальные файлы наÑтроек игнорируютÑÑ.
+Удобно Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñпециальных типов файлов.
+Через Ñтот аргумент можно также отключить обработку вÑех файлов начальной
+наÑтройки, иÑпользуйте Ð´Ð»Ñ Ñтого Ñлово "NONE" (пропиÑными буквами).
+См. ":help initialization".
+.TP
+\-U {файл}
+ИÑпользовать Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð¹ наÑтройки графичеÑкого интерфейÑа указанный
+командный {файл}.
+Ð’Ñе оÑтальные файлы наÑтроек Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа игнорируютÑÑ.
+Через Ñтот аргумент можно также отключить обработку вÑех файлов наÑтройки
+графичеÑкого интерфейÑа, иÑпользуйте Ð´Ð»Ñ Ñтого Ñлово "NONE" (пропиÑными буквами).
+См. ":help gui\-init".
.TP
-\-s {scriptin}
-СчитываетÑÑ Ñ„Ð°Ð¹Ð» ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ {scriptin}. При Ñтом, Ñодержимое файла воÑпринимаетÑÑ
-в виде команд, как еÑли бы они были набраны на конÑоли.
-То же Ñамое доÑтигаетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ":source! {scriptin}".
-ЕÑли конец файла ÑчитываетÑÑ Ð´Ð¾ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ редактора, то в дальнейшем
-ввод оÑущеÑтвлÑетÑÑ Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹.
+\-v
+ЗапуÑк программы в режиме Vi.
+Редактор
+.B Vim
+будет работать в режиме редактора Vi, как будто иÑполнÑемый файл называетÑÑ "vi".
+Имеет ÑмыÑл только еÑли иÑполнÑемый файл называетÑÑ "ex".
+.TP
+\-V[N]
+Режим подробного вывода.
+Будут выводитьÑÑ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾ том, какие командные файлы иÑполнÑÑŽÑ‚ÑÑ, и какаÑ
+Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÑчитываетÑÑ Ð¸ запиÑываетÑÑ Ð² viminfo-файле. ÐеобÑзательное чиÑло N
+задаёт уровень детализации информации. По умолчанию Ñто значение уÑтановлено
+равным 10.
+.TP
+\-V[N]{файл}
+Ðналогично аргументу \-V, а также выполнÑетÑÑ ÑƒÑтановка параметру 'verbosefile'
+значение {файл}. Как результат, ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ запиÑыватьÑÑ Ð² {файл}, а не
+отображатьÑÑ Ð½Ð° Ñкране. Ðаименование {файла} не может начинатьÑÑ Ñ ÐºÐ°ÐºÐ¾Ð¹-либо
+цифры.
+.TP
+\-w{чиÑло}
+Ð”Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° 'window' будет уÑтановлено значение, равное указанному {чиÑлу}.
+.TP
+\-w {файл}
+Добавление вÑех введённых команд в {файл}.
+Ð’Ñе Ñимволы, введённые Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹ вплоть до момента Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹
+редактора, запиÑываютÑÑ Ð² {файл}.
+Удобно в том Ñлучае, когда вы хотите Ñоздать командный файл Ð´Ð»Ñ Ð¿Ð¾Ñледующего
+его иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² командной Ñтроке "vim \-s" или в команде ":source!".
+ЕÑли {файл} уже ÑущеÑтвует, то набранный текÑÑ‚ будет добавлÑÑŽÑ‚ÑÑ Ð² конец файла.
+.TP
+\-W {файл}
+ЗапиÑÑŒ вÑех введённых команд в {файл}.
+Как аргумент "\-w", но ÑущеÑтвующий {файл} будет перезапиÑан.
.TP
-\-T {terminal}
-Сообщает
-.B Vim
-тип иÑпользуемого терминала. Ðеобходимо только в тех ÑитуациÑÑ…, когда
-автоматичеÑкое определение терминала не работает. Ð˜Ð¼Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð° должно быть
-извеÑтно
+\-x
+Редактирование шифрованных файлов.
+ЕÑли редактор
.B Vim
-(вÑтроено в него) или определено в файлах termcap или terminfo.
-.TP
-\-u {vimrc}
-ИÑпользовать команды из файла ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ {vimrc} Ð´Ð»Ñ Ð½Ð°Ñтройки.
-Ð’Ñе оÑтальные файлы наÑтроек пропуÑкаютÑÑ.
-Удобно Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñпециальных типов файлов.
-Чтобы избежать иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñценариев наÑтроек вообще, можно иÑпользовать
-Ð¸Ð¼Ñ "NONE". См. ":help initialization".
+был Ñобран Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ шифрованиÑ, то выполнÑÑ‚ÑŒ шифрование при запиÑи файлов.
+Будет выдано приглашение ввеÑти пароль.
.TP
-\-U {gvimrc}
-ИÑпользовать команды из файла ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ {gvimrc} Ð´Ð»Ñ Ð½Ð°Ñтройки графичеÑкого
-интерфейÑа.
-Ð’Ñе оÑтальные файлы наÑтроек Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа пропуÑкаютÑÑ.
-Чтобы избежать иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñценариев наÑтроек графичеÑкого интерфейÑа вообще,
-можно иÑпользовать Ð¸Ð¼Ñ "NONE". См. ":help gui-init".
-.TP
-\-V
-"Болтливый" режим. Выводить ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾ том, какие файлы читаютÑÑ, и о
-чтении-запиÑи файла viminfo.
+\-X
+ЗапуÑк программы без Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº X-Ñерверу.
+УÑкорÑет загрузку в конÑоли, но делает невозможным иÑпользование заголовка окна
+и буфера обмена.
.TP
-\-v
-ЗапуÑтить
+\-y
+Работа в упрощённом варианте.
+Редактор
+.B Vim
+будет работать в упрощённом варианте, как будто иÑполнÑемый файл имеет название
+"evim" или "eview".
+Поведение редактора
.B Vim
-в режиме Vi, как будто иÑполнÑемый файл имеет Ð¸Ð¼Ñ "vi". Имеет ÑмыÑл только еÑли
-иÑполнÑемый файл имеет Ð¸Ð¼Ñ "ex".
+будет походить на редакторы, Ñозданные по безрежимному принципу работы.
.TP
-\-w {scriptout}
-Ð’Ñе Ñимволы, введённые Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹ вплоть до момента Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹,
-запиÑываютÑÑ Ð² файл {scriptout}.
-Удобно в том Ñлучае, когда вы хотите Ñоздать файл ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ñледующего
-иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ "vim \-s" или ":source!". ЕÑли файл {scriptout} уже ÑущеÑтвует,
-то новые Ñимволы будут добавлÑÑŽÑ‚ÑÑ Ð² конец файла.
+\-Z
+Работа Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸ÐµÐ¼ функциональноÑти.
+Работает так же, как и запуÑк иÑполнÑемого файла, наименование которого
+начинаетÑÑ Ñ Ð±ÑƒÐºÐ²Ñ‹ "r".
.TP
-\-W {scriptout}
-Как "\-w", но уже ÑущеÑтвующий файл будет перезапиÑан.
+\-\-
+Означает окончание ввода аргументов.
+Ð’Ñе что указано поÑле Ñтого в командной Ñтроке, ÑчитаетÑÑ Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñми файлов.
+Может быть иÑпользовано Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ файлов, Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… начинаютÑÑ Ñ
+дефиÑа.
.TP
-\-x
-Шифровать запиÑываемые файлы. Будет выдано приглашение ввеÑти пароль.
+\-\-clean
+При работе редактора не иÑпользовать пользовательÑкую конфигурацию (файлы vimrc,
+подключаемые модули и Ñ‚. п.). Полезно Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸, что проблема в работе
+редактора не возникнет Ñ Ð¿Ñ€ÐµÐ´ÑƒÑтановленными наÑтройками программы Vim.
.TP
-\-X
-Ðе подключатьÑÑ Ðº X-Ñерверу. УÑкорÑет загрузку на конÑоли, но делает невозможным
-иÑпользование заголовка окна и буфера обмена.
+\-\-cmd {команда}
+Как аргумент "\-c", но команда иÑполнÑетÑÑ Ð¿ÐµÑ€ÐµÐ´ обработкой любого файла
+наÑтроек (vimrc).
+Можно указывать до деÑÑти таких команд, незавиÑимо от количеÑтва команд "\-c".
.TP
-\-Z
-Ограниченный режим. Работает так же, как и программы, начинающиеÑÑ Ñ "r".
+\-\-echo\-wid
+Только Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа GTK. Отобразить идентификатор окна
+(Window ID) в поток Ñтандартного вывода (stdout).
+.TP
+\-\-gui\-dialog\-file {файл}
+При работе редактора в графичеÑком интерфейÑе пользователÑ, заголовок
+и Ñообщение диалогового окна будут запиÑаны в {файл} без Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° Ñкране.
+ЕÑли указанный {файл} не ÑущеÑтвует, то он будет Ñоздан, а при его наличии
+ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ допиÑыватьÑÑ Ð² Ñтот {файл}. Данный аргумент полезен только длÑ
+теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ редактора, чтобы избежать оÑтановки программы, так как
+отображаемое диалоговое окно может быть Ñкрыто. ЕÑли не поддерживаетÑÑ
+графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, то Ñтот аргумент игнорируетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹.
+.TP
+\-\-help, \-h, \-?
+Будет показана ÐºÑ€Ð°Ñ‚ÐºÐ°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± аргументах и параметрах командной Ñтроки.
+ПоÑле Ñтого редактор
+.B Vim
+завершит работу.
+.TP
+\-\-literal
+Данный аргумент указывает, что требуетÑÑ Ð²Ð¾Ñпринимать Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²
+буквально, и не выполнÑÑ‚ÑŒ разбор подÑтановочных Ñимволов.
+Этот аргумент командной Ñтроки неприменим в Unix-подобных ÑиÑтемах, где разбор
+подÑтановочных Ñимволов выполнÑетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочкой.
+.TP
+\-\-log {файл}
+Будет выполнена запиÑÑŒ протокола работы Ñ Ñтапа инициализации программы.
+ЕÑли при Ñборке программы
+.B Vim
+были включены компоненты "eval" и "channel", будет выполнÑÑ‚ÑŒÑÑ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ
+работы Ñ Ñамой ранней Ñтадии запуÑка программы, а журнал запиÑыватьÑÑ Ð² {файл}.
+Это работает аналогично вызову функции
+.I ch_logfile({filename}, 'ao')
.TP
-\-\-
-Конец ключей. Ð’Ñе оÑтальные аргументы раÑÑматриваютÑÑ ÐºÐ°Ðº имена файлов.
-Может быть иÑпользовано Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ файлов, имена которых начинаютÑÑ Ñ Ð´ÐµÑ„Ð¸Ñа.
+\-\-nofork
+Режим активного приложениÑ.
+Редактор
+.B Vim
+Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом не будет наÑледоватьÑÑ Ð¸ отключатьÑÑ
+от командной оболочки, в которой выполнена команда его запуÑка.
.TP
-\-\-help
-ВывеÑти краткую Ñправку и завершить работу. То же, что и "\-h".
+\-\-noplugin
+Будет выполнен запуÑк программы без загрузки внешних подключаемых модулей.
+Это же подразумеваетÑÑ Ð¿Ñ€Ð¸ указании аргумента \-u NONE.
.TP
-\-\-version
-ВывеÑти информацию о верÑии программы и завершить работу.
+\-\-not\-a\-term
+Ðе Ñообщать об отÑутÑтвии терминала Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð°-вывода.
+Через Ñтот аргумент указываетÑÑ, что операции ввода-вывода оÑущеÑтвлÑÑŽÑ‚ÑÑ Ð½Ðµ
+на терминал. Это позволÑет избежать предупреждающего ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ двухÑекундной
+задержки, которые могли бы возникнуть.
.TP
\-\-remote
-ПодключитьÑÑ Ðº Ñерверу Vim и заÑтавить его править файлы, указанные в
-поÑледующих аргументах. ЕÑли Ñервер не найден, выводитÑÑ Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ,
-а файлы правÑÑ‚ÑÑ Ð² меÑтной копии Vim.
+Будет выполнено подключение к Vim-Ñерверу и передача Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ файлов,
+указанных в поÑледующих аргументах. ЕÑли Ñервер не найден, выводитÑÑ
+предупреждение, а правка файлов выполнÑетÑÑ Ð² текущей копии редактора Vim.
.TP
\-\-remote\-expr {выражение}
-ПодключитьÑÑ Ðº Ñерверу Vim и вычиÑлить на нём указанное {выражение}.
+Будет выполнено подключение к Vim-Ñерверу и передача указанного {выражение} длÑ
+вычиÑлениÑ.
Результат вычиÑÐ»ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ выведен в поток Ñтандартного вывода (stdout).
.TP
-\-\-remote\-send {ключи}
-ПодключитьÑÑ Ðº Ñерверу Vim и передать ему указанные {ключи}.
+\-\-remote\-send {код клавиши}
+Будет выполнено подключение к Vim-Ñерверу и передача указанных {кодов клавиш}.
.TP
\-\-remote\-silent
Как "\-\-remote", но без вывода предупреждениÑ, еÑли Ñервер не найден.
.TP
\-\-remote\-wait
-Как "\-\-remote", но Vim не будет завершать работу до тех пор, пока не будет
-выполнена правка вÑех файлов.
+Как "\-\-remote", но редактор Vim не будет завершать работу до тех пор,
+пока не будет выполнена правка вÑех файлов.
.TP
\-\-remote\-wait\-silent
Как "\-\-remote\-wait", но без вывода предупреждениÑ, еÑли Ñервер не найден.
.TP
\-\-serverlist
-ВывеÑти ÑпиÑок вÑех доÑтупных Ñерверов Vim.
+Будет выведен перечень вÑех доÑтупных Vim-Ñерверов.
.TP
-\-\-servername {имÑ}
-ИÑпользовать указанное {имÑ} в качеÑтве имени Ñервера. ЕÑли ключ
-"\-\-remote" не указан, то {имÑ} приÑваиваетÑÑ Ð´Ð°Ð½Ð½Ð¾Ð¹ копии Vim,
-в противном Ñлучае указывает на Ð¸Ð¼Ñ Ñервера, к которому Ñледует
-подключитьÑÑ.
+\-\-servername {название}
+ИÑпользовать указанное {название} в качеÑтве Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ñервера. ЕÑли аргумент
+"\-\-remote" не указан, то {название} приÑваиваетÑÑ Ð´Ð°Ð½Ð½Ð¾Ð¹ копии редактора Vim,
+в противном Ñлучае указывает на Ñервер, к которому Ñледует подключитьÑÑ.
.TP
\-\-socketid {id}
-Только Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа GTK: иÑпользовать механизм GtkPlug длÑ
-запуÑка gvim в отдельном окне.
+Только Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа GTK. Будет иÑпользован механизм GtkPlug длÑ
+запуÑка редактора gVim в отдельном окне.
.TP
-\-\-echo\-wid
-Только Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа GTK: вывеÑти идентификатор окна (Window ID)
-в поток Ñтандартного вывода (stdout).
-.SH ВСТРОЕÐÐÐЯ СПРÐВКÐ
-Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, наберите команду ":help".
-Введите ":help тема", чтобы получить Ñправку по конкретной теме.
-Ðапример, команда ":help ZZ" выведет информацию о команде "ZZ".
-ИÑпользуйте <Tab> и CTRL-D Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого дополнениÑ
-названий тем (":help cmdline-completion").
-Ð”Ð»Ñ Ð±Ñ‹Ñтрого Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñправочнику иÑпользуютÑÑ Ð¼ÐµÑ‚ÐºÐ¸ (что-то
+\-\-startuptime {файл}
+Будет выполнена запиÑÑŒ хронометража запуÑка программы в {файл}.
+.TP
+\-\-ttyfail
+Будт Ñразу же завершена работа, еÑли ввод-вывод получен не Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð° (tty).
+.TP
+\-\-version
+Будет выведена Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ верÑии программы и завершена работа.
+.TP
+\-\-windowid {ИД}
+Только Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа в MS Windows. Редактор gVim будет
+иÑпользовать окно Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ {ИД} в качеÑтве родительÑкого, чтобы попытатьÑÑ
+выполнить запуÑк внутри Ñтого окна.
+.SH ВСТРОЕÐÐÐЯ ДОКУМЕÐТÐЦИЯ
+Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° работы Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸ÐµÐ¹, наберите в редакторе
+.B Vim
+команду ":help".
+Введите ":help тема", чтобы получить Ñправку по интереÑующей теме.
+Ðапример, по команде ":help ZZ" будет выведена Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ команде "ZZ".
+ИÑпользуйте клавиши <TAB> и CTRL+D Ð´Ð»Ñ Ð¿Ð¾Ð´Ñтановки нужного Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐ¼Ñ‹
+(Ñм. ":help cmdline\-completion").
+Ð”Ð»Ñ Ð±Ñ‹Ñтрого Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ документации иÑпользуютÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ‹ (что-то
вроде гипертекÑтовых ÑÑылок, Ñм. ":help"). Таким образом можно
-проÑматривать вÑе файлы Ñправки, например ":help syntax.txt".
+переходить от одного файла документации к другому, например, ":help syntax.txt".
.SH ФÐЙЛЫ
.TP 15
-/usr/local/lib/vim/doc/*.txt
-Файлы Ñправочника
+/usr/local/share/vim/vim??/doc/*.txt
+Файлы документации редактора
.B Vim.
-См. ":help doc-file-list" Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ ÑпиÑка.
+См. ":help doc\-file\-list" Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ‡Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð².
+.br
+ЗдеÑÑŒ и далее
+.I "vim??"
+означает Ñокращённую запиÑÑŒ номера верÑии, например, vim91 Ð´Ð»Ñ Ð²ÐµÑ€Ñии редактора
+.B Vim 9.1
.TP
-/usr/local/lib/vim/doc/tags
-Файл меток, иÑпользуемый Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка информации в файлах Ñправки.
+/usr/local/share/vim/vim??/doc/tags
+Файл индекÑов, иÑпользуемый Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка информации в файлах документации.
.TP
-/usr/local/lib/vim/syntax/syntax.vim
-СиÑтемные наÑтройки ÑинтакÑиÑа.
+/usr/local/share/vim/vim??/syntax/syntax.vim
+ОбщеÑиÑтемные наÑтройки раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¸ подÑветки ÑинтакÑиÑа.
.TP
-/usr/local/lib/vim/syntax/*.vim
-Файлы ÑинтакÑиÑа Ð´Ð»Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñзыков.
+/usr/local/share/vim/vim??/syntax/*.vim
+Файлы раÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¸ подÑветки ÑинтакÑиÑа Ð´Ð»Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… Ñзыков программированиÑ.
.TP
-/usr/local/lib/vim/vimrc
-СиÑтемные наÑтройки
+/usr/local/share/vim/vimrc
+ОбщеÑиÑтемный файл начальной наÑтройки Ð´Ð»Ñ ÐºÐ¾Ð½Ñольного редактора
.B Vim.
.TP
-/usr/local/lib/vim/gvimrc
-СиÑтемный наÑтройки графичеÑкого интерфейÑа.
+~/.vimrc, ~/.vim/vimrc, $XDG_CONFIG_HOME/vim/vimrc
+ПользовательÑкие файлы начальной наÑтройки Ð´Ð»Ñ ÐºÐ¾Ð½Ñольного редактора
+.B Vim
+(будет иÑпользован первый найденный файл из указанных).
+.TP
+/usr/local/share/vim/gvimrc
+ОбщеÑиÑтемный файл начальной наÑтройки Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом
+.B gVim.
+.TP
+~/.gvimrc, ~/.vim/gvimrc, $XDG_CONFIG_HOME/vim/gvimrc
+ПользовательÑкие файлы начальной наÑтройки Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким
+интерфейÑом
+.B gVim
+(будет иÑпользован первый найденный файл из указанных).
.TP
-/usr/local/lib/vim/optwin.vim
-Сценарий, иÑпользуемый при выполнении команды ":options".
-Хороший ÑпоÑоб проÑматривать и изменÑÑ‚ÑŒ наÑтройки.
+/usr/local/share/vim/vim??/optwin.vim
+Командный файл, иÑпользуемый при выполнении команды ":options".
+По Ñтой команде предоÑтавлÑетÑÑ ÑƒÐ´Ð¾Ð±Ð½Ñ‹Ð¹ ÑпоÑоб проÑмотра и Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð°Ñтроек.
.TP
-/usr/local/lib/vim/menu.vim
-СиÑтемные наÑтройки меню Ð´Ð»Ñ gvim.
+/usr/local/share/vim/vim??/menu.vim
+СиÑтемные наÑтройки меню Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа редактора
+.B gVim.
.TP
-/usr/local/lib/vim/bugreport.vim
-Сценарий Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð° об обнаруженных глюках. См. ":help bugs".
+/usr/local/share/vim/vim??/bugreport.vim
+Командный файл Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð° об обнаруженных ошибках. См. ":help bugs".
.TP
-/usr/local/lib/vim/filetype.vim
-Сценарий Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° файла по имени. См. ":help 'filetype'".
+/usr/local/share/vim/vim??/filetype.vim
+Командный файл Ð´Ð»Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² файлов по наименованию.
+См. ":help 'filetype'".
.TP
-/usr/local/lib/vim/scripts.vim
-Сценарий Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° файла по Ñодержимому. См. ":help 'filetype'".
+/usr/local/share/vim/vim??/scripts.vim
+Командный файл Ð´Ð»Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² файлов по Ñодержимому.
+См. ":help 'filetype'".
.TP
-/usr/local/lib/vim/print/*.ps
-Файлы Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ PostScript.
+/usr/local/share/vim/vim??/print/*.ps
+Файлы, иÑпользуемые Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸ через Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ PostScript.
.PP
-Более ÑÐ²ÐµÐ¶Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ -- на Ñайте VIM:
+Ð’ÑÑŽ поÑледнюю информацию о редакторе можно получить на веб-Ñтранице VIM:
.br
<URL:http://www.vim.org/>
-.SH СМОТРИ ТÐКЖЕ
+.SH СМОТРИТЕ ТÐКЖЕ
vimtutor(1)
.SH ÐВТОРЫ
-Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ
+Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ редактора
.B Vim
-Ñоздана Брамом Мооленааром (Bram Moolenaar), которому помогает огромное
-количеÑтво людей. См. ":help credits" в
+была Ñоздана Брамом Моленаром (Bram Moolenaar), которому помогало огромное
+количеÑтво людей. См. ":help credits" в редакторе
.B Vim.
.br
+Редактор
.B Vim
базируетÑÑ Ð½Ð° коде редактора Stevie, напиÑанного Тимом ТомпÑоном (Tim Thompson),
Тони ЭндрюÑом (Tony Andrews) и Г. Р. (Фредом) Уолтером (G.R. (Fred) Walter).
-Однако, в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð² Vim почти не оÑталоÑÑŒ ничего от иÑторичеÑкого кода
-его предшеÑтвенника.
+Однако, в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð² программе Vim почти ничего не оÑталоÑÑŒ
+от иÑторичеÑкого кода его предшеÑтвенника.
.br
-РуÑÑÐºÐ°Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ
+РуÑÑÐºÐ°Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð°
.B Vim
выполнÑетÑÑ Ð² рамках проекта "РуВим",
-Ñм. <URL:http://sourceforge.net/projects/ruvim/>.
-.SH ГЛЮКИ
+Ñм. <URL:https://github.com/restorerz/ruvim/>.
+.SH ОШИБКИ
Скорее вÑего еÑÑ‚ÑŒ.
-См. ":help todo" -- ÑпиÑок извеÑтных проблем.
+См. ":help todo" \[em] перечень извеÑтных ошибок в работе.
.PP
-Заметим, что многие вещи, которые ÑчитаютÑÑ Ð³Ð»ÑŽÐºÐ°Ð¼Ð¸, на Ñамом деле
-ÑвлÑÑŽÑ‚ÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð¼ Ñлишком полного воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Vi.
+Заметим, что многие вещи, которые ÑчитаютÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð¼Ð¸, на Ñамом деле
+ÑвлÑÑŽÑ‚ÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð¼ Ñлишком полного воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° Vi.
ЕÑли вы думаете, что что-то ÑвлÑетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ только потому, что
"Vi делает Ñто по-другому", внимательно прочитайте файл vi_diff.txt
-(или наберите ":help vi_diff.txt" в Vim) и иÑпользуйте опции 'compatible'
-и 'cpoptions'.
+(или наберите ":help vi_diff.txt" в редакторе Vim) и поÑмотрите параметры
+ 'compatible' и 'cpoptions'.
diff --git a/runtime/doc/vim.1 b/runtime/doc/vim.1
index a180a62..efef7bb 100644
--- a/runtime/doc/vim.1
+++ b/runtime/doc/vim.1
@@ -1,4 +1,4 @@
-.TH VIM 1 "2024 Jun 04"
+.TH VIM 1 "2024 Aug 12"
.SH NAME
vim \- Vi IMproved, a programmer's text editor
.SH SYNOPSIS
@@ -150,18 +150,6 @@ Example: vim "+set si" main.c
.br
Note: You can use up to 10 "+" or "\-c" commands.
.TP
-\-S {file}
-{file} will be sourced after the first file has been read.
-This is equivalent to \-c "source {file}".
-{file} cannot start with '\-'.
-If {file} is omitted "Session.vim" is used (only works when \-S is the last
-argument).
-.TP
-\-\-cmd {command}
-Like using "\-c", but the command is executed just before
-processing any vimrc file.
-You can use up to 10 of these commands, independently from "\-c" commands.
-.TP
\-A
If
.B Vim
@@ -224,11 +212,6 @@ is executed by a program that will wait for the edit
session to finish (e.g. mail).
On the Amiga the ":sh" and ":!" commands will not work.
.TP
-\-\-nofork
-Foreground. For the GUI version,
-.B Vim
-will not fork and detach from the shell it was started in.
-.TP
\-F
If
.B Vim
@@ -239,6 +222,8 @@ in Farsi mode, i.e. 'fkmap' and 'rightleft' are set.
Otherwise an error message is given and
.B Vim
aborts.
+.br
+Note: Farsi support has been removed in patch 8.1.0932.
.TP
\-g
If
@@ -248,18 +233,6 @@ If no GUI support was compiled in, an error message is given and
.B Vim
aborts.
.TP
-\-\-gui-dialog-file {name}
-When using the GUI, instead of showing a dialog, write the title and message of
-the dialog to file {name}. The file is created or appended to. Only useful
-for testing, to avoid that the test gets stuck on a dialog that can't be seen.
-Without the GUI the argument is ignored.
-.TP
-\-\-help, \-h, \-?
-Give a bit of help about the command line arguments and options.
-After this
-.B Vim
-exits.
-.TP
\-H
If
.B Vim
@@ -277,13 +250,13 @@ instead of the default "~/.viminfo".
This can also be used to skip the use of the .viminfo file, by giving the name
"NONE".
.TP
-\-L
-Same as \-r.
-.TP
\-l
Lisp mode.
Sets the 'lisp' and 'showmatch' options on.
.TP
+\-L
+Same as \-r.
+.TP
\-m
Modifying files is disabled.
Resets the 'write' option.
@@ -294,13 +267,6 @@ Modifications not allowed. The 'modifiable' and 'write' options will be unset,
so that changes are not allowed and files can not be written. Note that these
options can be set to enable making modifications.
.TP
-\-N
-No-compatible mode. Resets the 'compatible' option.
-This will make
-.B Vim
-behave a bit better, but less Vi compatible, even though a .vimrc file does
-not exist.
-.TP
\-n
No swap file will be used.
Recovery after a crash will be impossible.
@@ -308,6 +274,13 @@ Handy if you want to edit a file on a very slow medium (e.g. floppy).
Can also be done with ":set uc=0".
Can be undone with ":set uc=200".
.TP
+\-N
+No-compatible mode. Resets the 'compatible' option.
+This will make
+.B Vim
+behave a bit better, but less Vi compatible, even though a .vimrc file does
+not exist.
+.TP
\-nb
Become an editor server for NetBeans. See the docs for details.
.TP
@@ -330,6 +303,16 @@ the window title of the parent application. Make sure that it is specific
enough. Note that the implementation is still primitive. It won't work with
all applications and the menu doesn't work.
.TP
+\-r
+List swap files, with information about using them for recovery.
+.TP
+\-r {file}
+Recovery mode.
+The swap file is used to recover a crashed editing session.
+The swap file is a file with the same filename as the text file with ".swp"
+appended.
+See ":help recovery".
+.TP
\-R
Read-only mode.
The 'readonly' option will be set.
@@ -341,16 +324,6 @@ The \-R option also implies the \-n option (see above).
The 'readonly' option can be reset with ":set noro".
See ":help 'readonly'".
.TP
-\-r
-List swap files, with information about using them for recovery.
-.TP
-\-r {file}
-Recovery mode.
-The swap file is used to recover a crashed editing session.
-The swap file is a file with the same filename as the text file with ".swp"
-appended.
-See ":help recovery".
-.TP
\-s
Silent mode. Only when started as "Ex" or when the "\-e" option was given
before the "\-s" option.
@@ -362,6 +335,13 @@ The same can be done with the command ":source! {scriptin}".
If the end of the file is reached before the editor exits, further characters
are read from the keyboard.
.TP
+\-S {file}
+{file} will be sourced after the first file has been read.
+This is equivalent to \-c "source {file}".
+{file} cannot start with '\-'.
+If {file} is omitted "Session.vim" is used (only works when \-S is the last
+argument).
+.TP
\-T {terminal}
Tells
.B Vim
@@ -371,16 +351,6 @@ Should be a terminal known to
.B Vim
(builtin) or defined in the termcap or terminfo file.
.TP
-\-\-not-a-term
-Tells
-.B Vim
-that the user knows that the input and/or output is not connected to a
-terminal. This will avoid the warning and the two second delay that would
-happen.
-.TP
-\-\-ttyfail
-When stdin or stdout is not a a terminal (tty) then exit right away.
-.TP
\-u {vimrc}
Use the commands in the file {vimrc} for initializations.
All the other initializations are skipped.
@@ -394,6 +364,12 @@ All the other GUI initializations are skipped.
It can also be used to skip all GUI initializations by giving the name "NONE".
See ":help gui\-init" within vim for more details.
.TP
+\-v
+Start
+.B Vim
+in Vi mode, just like the executable was called "vi". This only has effect
+when the executable is called "ex".
+.TP
\-V[N]
Verbose. Give messages about which files are sourced and for reading and
writing a viminfo file. The optional number N is the value for 'verbose'.
@@ -404,20 +380,6 @@ Like \-V and set 'verbosefile' to {filename}. The result is that messages are
not displayed but written to the file {filename}. {filename} must not start
with a digit.
.TP
-\-\-log {filename}
-If
-.B Vim
-has been compiled with eval and channel feature, start logging and write
-entries to {filename}. This works like calling
-.I ch_logfile({filename}, 'ao')
-very early during startup.
-.TP
-\-v
-Start
-.B Vim
-in Vi mode, just like the executable was called "vi". This only has effect
-when the executable is called "ex".
-.TP
\-w{number}
Set the 'window' option to {number}.
.TP
@@ -433,7 +395,10 @@ If the {scriptout} file exists, characters are appended.
Like \-w, but an existing file is overwritten.
.TP
\-x
-Use encryption when writing files. Will prompt for a crypt key.
+If
+.B Vim
+has been compiled with encryption support, use encryption when writing files.
+Will prompt for a crypt key.
.TP
\-X
Don't connect to the X server. Shortens startup time in a terminal, but the
@@ -459,16 +424,53 @@ This can be used to edit a filename that starts with a '\-'.
Do not use any personal configuration (vimrc, plugins, etc.). Useful to see if
a problem reproduces with a clean Vim setup.
.TP
+\-\-cmd {command}
+Like using "\-c", but the command is executed just before
+processing any vimrc file.
+You can use up to 10 of these commands, independently from "\-c" commands.
+.TP
\-\-echo\-wid
GTK GUI only: Echo the Window ID on stdout.
.TP
+\-\-gui\-dialog\-file {name}
+When using the GUI, instead of showing a dialog, write the title and message of
+the dialog to file {name}. The file is created or appended to. Only useful
+for testing, to avoid that the test gets stuck on a dialog that can't be seen.
+Without the GUI the argument is ignored.
+.TP
+\-\-help, \-h, \-?
+Give a bit of help about the command line arguments and options.
+After this
+.B Vim
+exits.
+.TP
\-\-literal
Take file name arguments literally, do not expand wildcards. This has no
effect on Unix where the shell expands wildcards.
.TP
+\-\-log {filename}
+If
+.B Vim
+has been compiled with eval and channel feature, start logging and write
+entries to {filename}. This works like calling
+.I ch_logfile({filename}, 'ao')
+very early during startup.
+.TP
+\-\-nofork
+Foreground. For the GUI version,
+.B Vim
+will not fork and detach from the shell it was started in.
+.TP
\-\-noplugin
Skip loading plugins. Implied by \-u NONE.
.TP
+\-\-not\-a\-term
+Tells
+.B Vim
+that the user knows that the input and/or output is not connected to a
+terminal. This will avoid the warning and the two second delay that would
+happen.
+.TP
\-\-remote
Connect to a Vim server and make it edit the files given in the rest of the
arguments. If no server is found a warning is given and the files are edited
@@ -497,16 +499,19 @@ Use {name} as the server name. Used for the current Vim, unless used with a
\-\-remote argument, then it's the name of the server to connect to.
.TP
\-\-socketid {id}
-GTK GUI only: Use the GtkPlug mechanism to run gvim in another window.
+GTK GUI only: Use the GtkPlug mechanism to run gVim in another window.
.TP
\-\-startuptime {file}
During startup write timing messages to the file {fname}.
.TP
+\-\-ttyfail
+When stdin or stdout is not a a terminal (tty) then exit right away.
+.TP
\-\-version
Print version information and exit.
.TP
\-\-windowid {id}
-Win32 GUI only: Make gvim try to use the window {id} as a parent, so that it
+Win32 GUI only: Make gVim try to use the window {id} as a parent, so that it
runs inside that window.
.SH ON-LINE HELP
Type ":help" in
@@ -554,13 +559,16 @@ initializations (first one found is used).
System wide gvim initializations.
.TP
~/.gvimrc, ~/.vim/gvimrc, $XDG_CONFIG_HOME/vim/gvimrc
-Your personal gvim initializations (first one found is used).
+Your personal
+.B gVim
+initializations (first one found is used).
.TP
/usr/local/share/vim/vim??/optwin.vim
Script used for the ":options" command, a nice way to view and set options.
.TP
/usr/local/share/vim/vim??/menu.vim
-System wide menu initializations for gvim.
+System wide menu initializations for
+.B gVim.
.TP
/usr/local/share/vim/vim??/bugreport.vim
Script to generate a bug report. See ":help bugs".
diff --git a/runtime/doc/vim.man b/runtime/doc/vim.man
index 4ce444e..ce1cc63 100644
--- a/runtime/doc/vim.man
+++ b/runtime/doc/vim.man
@@ -1,7 +1,5 @@
VIM(1) General Commands Manual VIM(1)
-
-
NAME
vim - Vi IMproved, a programmer's text editor
@@ -113,202 +111,170 @@ OPTIONS
vim "+set si" main.c
Note: You can use up to 10 "+" or "-c" commands.
- -S {file} {file} will be sourced after the first file has been read.
- This is equivalent to -c "source {file}". {file} cannot
- start with '-'. If {file} is omitted "Session.vim" is used
- (only works when -S is the last argument).
-
- --cmd {command}
- Like using "-c", but the command is executed just before
- processing any vimrc file. You can use up to 10 of these
- commands, independently from "-c" commands.
-
- -A If Vim has been compiled with ARABIC support for editing
- right-to-left oriented files and Arabic keyboard mapping,
- this option starts Vim in Arabic mode, i.e. 'arabic' is
+ -A If Vim has been compiled with ARABIC support for editing
+ right-to-left oriented files and Arabic keyboard mapping,
+ this option starts Vim in Arabic mode, i.e. 'arabic' is
set. Otherwise an error message is given and Vim aborts.
- -b Binary mode. A few options will be set that makes it posâ€
+ -b Binary mode. A few options will be set that makes it posâ€
sible to edit a binary or executable file.
- -C Compatible. Set the 'compatible' option. This will make
- Vim behave mostly like Vi, even though a .vimrc file exâ€
+ -C Compatible. Set the 'compatible' option. This will make
+ Vim behave mostly like Vi, even though a .vimrc file exâ€
ists.
-d Start in diff mode. There should between two to eight file
- name arguments. Vim will open all the files and show difâ€
+ name arguments. Vim will open all the files and show difâ€
ferences between them. Works like vimdiff(1).
-d {device}, -dev {device}
- Open {device} for use as a terminal. Only on the Amiga.
+ Open {device} for use as a terminal. Only on the Amiga.
Example: "-d con:20/30/600/150".
- -D Debugging. Go to debugging mode when executing the first
+ -D Debugging. Go to debugging mode when executing the first
command from a script.
- -e Start Vim in Ex mode, just like the executable was called
+ -e Start Vim in Ex mode, just like the executable was called
"ex".
-E Start Vim in improved Ex mode, just like the executable was
called "exim".
-f Foreground. For the GUI version, Vim will not fork and deâ€
- tach from the shell it was started in. On the Amiga, Vim
- is not restarted to open a new window. This option should
- be used when Vim is executed by a program that will wait
- for the edit session to finish (e.g. mail). On the Amiga
+ tach from the shell it was started in. On the Amiga, Vim
+ is not restarted to open a new window. This option should
+ be used when Vim is executed by a program that will wait
+ for the edit session to finish (e.g. mail). On the Amiga
the ":sh" and ":!" commands will not work.
- --nofork Foreground. For the GUI version, Vim will not fork and deâ€
- tach from the shell it was started in.
-
-F If Vim has been compiled with FKMAP support for editing
right-to-left oriented files and Farsi keyboard mapping,
this option starts Vim in Farsi mode, i.e. 'fkmap' and
'rightleft' are set. Otherwise an error message is given
and Vim aborts.
+ Note: Farsi support has been removed in patch 8.1.0932.
-g If Vim has been compiled with GUI support, this option enâ€
ables the GUI. If no GUI support was compiled in, an error
message is given and Vim aborts.
- --gui-dialog-file {name}
- When using the GUI, instead of showing a dialog, write the
- title and message of the dialog to file {name}. The file
- is created or appended to. Only useful for testing, to
- avoid that the test gets stuck on a dialog that can't be
- seen. Without the GUI the argument is ignored.
-
- --help, -h, -?
- Give a bit of help about the command line arguments and opâ€
- tions. After this Vim exits.
-
-H If Vim has been compiled with RIGHTLEFT support for editing
- right-to-left oriented files and Hebrew keyboard mapping,
- this option starts Vim in Hebrew mode, i.e. 'hkmap' and
- 'rightleft' are set. Otherwise an error message is given
+ right-to-left oriented files and Hebrew keyboard mapping,
+ this option starts Vim in Hebrew mode, i.e. 'hkmap' and
+ 'rightleft' are set. Otherwise an error message is given
and Vim aborts.
-i {viminfo}
- Specifies the filename to use when reading or writing the
- viminfo file, instead of the default "~/.viminfo". This
- can also be used to skip the use of the .viminfo file, by
+ Specifies the filename to use when reading or writing the
+ viminfo file, instead of the default "~/.viminfo". This
+ can also be used to skip the use of the .viminfo file, by
giving the name "NONE".
- -L Same as -r.
-
-l Lisp mode. Sets the 'lisp' and 'showmatch' options on.
- -m Modifying files is disabled. Resets the 'write' option.
- You can still modify the buffer, but writing a file is not
+ -L Same as -r.
+
+ -m Modifying files is disabled. Resets the 'write' option.
+ You can still modify the buffer, but writing a file is not
possible.
- -M Modifications not allowed. The 'modifiable' and 'write'
- options will be unset, so that changes are not allowed and
- files can not be written. Note that these options can be
+ -M Modifications not allowed. The 'modifiable' and 'write'
+ options will be unset, so that changes are not allowed and
+ files can not be written. Note that these options can be
set to enable making modifications.
+ -n No swap file will be used. Recovery after a crash will be
+ impossible. Handy if you want to edit a file on a very
+ slow medium (e.g. floppy). Can also be done with ":set
+ uc=0". Can be undone with ":set uc=200".
+
-N No-compatible mode. Resets the 'compatible' option. This
will make Vim behave a bit better, but less Vi compatible,
even though a .vimrc file does not exist.
- -n No swap file will be used. Recovery after a crash will be
- impossible. Handy if you want to edit a file on a very
- slow medium (e.g. floppy). Can also be done with ":set
- uc=0". Can be undone with ":set uc=200".
-
-nb Become an editor server for NetBeans. See the docs for deâ€
tails.
-o[N] Open N windows stacked. When N is omitted, open one window
for each file.
- -O[N] Open N windows side by side. When N is omitted, open one
+ -O[N] Open N windows side by side. When N is omitted, open one
window for each file.
-p[N] Open N tab pages. When N is omitted, open one tab page for
each file.
-P {parent-title}
- Win32 GUI only: Specify the title of the parent applicaâ€
- tion. When possible, Vim will run in an MDI window inside
- the application. {parent-title} must appear in the window
+ Win32 GUI only: Specify the title of the parent applicaâ€
+ tion. When possible, Vim will run in an MDI window inside
+ the application. {parent-title} must appear in the window
title of the parent application. Make sure that it is speâ€
- cific enough. Note that the implementation is still primiâ€
- tive. It won't work with all applications and the menu
+ cific enough. Note that the implementation is still primiâ€
+ tive. It won't work with all applications and the menu
doesn't work.
- -R Read-only mode. The 'readonly' option will be set. You
- can still edit the buffer, but will be prevented from acciâ€
- dentally overwriting a file. If you do want to overwrite a
- file, add an exclamation mark to the Ex command, as in
- ":w!". The -R option also implies the -n option (see
- above). The 'readonly' option can be reset with ":set
- noro". See ":help 'readonly'".
-
- -r List swap files, with information about using them for reâ€
+ -r List swap files, with information about using them for reâ€
covery.
- -r {file} Recovery mode. The swap file is used to recover a crashed
- editing session. The swap file is a file with the same
+ -r {file} Recovery mode. The swap file is used to recover a crashed
+ editing session. The swap file is a file with the same
filename as the text file with ".swp" appended. See ":help
recovery".
- -s Silent mode. Only when started as "Ex" or when the "-e"
+ -R Read-only mode. The 'readonly' option will be set. You
+ can still edit the buffer, but will be prevented from acciâ€
+ dentally overwriting a file. If you do want to overwrite a
+ file, add an exclamation mark to the Ex command, as in
+ ":w!". The -R option also implies the -n option (see
+ above). The 'readonly' option can be reset with ":set
+ noro". See ":help 'readonly'".
+
+ -s Silent mode. Only when started as "Ex" or when the "-e"
option was given before the "-s" option.
-s {scriptin}
- The script file {scriptin} is read. The characters in the
- file are interpreted as if you had typed them. The same
+ The script file {scriptin} is read. The characters in the
+ file are interpreted as if you had typed them. The same
can be done with the command ":source! {scriptin}". If the
end of the file is reached before the editor exits, further
characters are read from the keyboard.
+ -S {file} {file} will be sourced after the first file has been read.
+ This is equivalent to -c "source {file}". {file} cannot
+ start with '-'. If {file} is omitted "Session.vim" is used
+ (only works when -S is the last argument).
+
-T {terminal}
Tells Vim the name of the terminal you are using. Only reâ€
quired when the automatic way doesn't work. Should be a
terminal known to Vim (builtin) or defined in the termcap
or terminfo file.
- --not-a-term
- Tells Vim that the user knows that the input and/or output
- is not connected to a terminal. This will avoid the warnâ€
- ing and the two second delay that would happen.
-
- --ttyfail When stdin or stdout is not a a terminal (tty) then exit
- right away.
-
- -u {vimrc} Use the commands in the file {vimrc} for initializations.
- All the other initializations are skipped. Use this to
- edit a special kind of files. It can also be used to skip
- all initializations by giving the name "NONE". See ":help
+ -u {vimrc} Use the commands in the file {vimrc} for initializations.
+ All the other initializations are skipped. Use this to
+ edit a special kind of files. It can also be used to skip
+ all initializations by giving the name "NONE". See ":help
initialization" within vim for more details.
- -U {gvimrc} Use the commands in the file {gvimrc} for GUI initializaâ€
- tions. All the other GUI initializations are skipped. It
- can also be used to skip all GUI initializations by giving
- the name "NONE". See ":help gui-init" within vim for more
+ -U {gvimrc} Use the commands in the file {gvimrc} for GUI initializaâ€
+ tions. All the other GUI initializations are skipped. It
+ can also be used to skip all GUI initializations by giving
+ the name "NONE". See ":help gui-init" within vim for more
details.
- -V[N] Verbose. Give messages about which files are sourced and
- for reading and writing a viminfo file. The optional numâ€
+ -v Start Vim in Vi mode, just like the executable was called
+ "vi". This only has effect when the executable is called
+ "ex".
+
+ -V[N] Verbose. Give messages about which files are sourced and
+ for reading and writing a viminfo file. The optional numâ€
ber N is the value for 'verbose'. Default is 10.
-V[N]{filename}
Like -V and set 'verbosefile' to {filename}. The result is
- that messages are not displayed but written to the file
+ that messages are not displayed but written to the file
{filename}. {filename} must not start with a digit.
- --log {filename}
- If Vim has been compiled with eval and channel feature,
- start logging and write entries to {filename}. This works
- like calling ch_logfile({filename}, 'ao') very early during
- startup.
-
- -v Start Vim in Vi mode, just like the executable was called
- "vi". This only has effect when the executable is called
- "ex".
-
-w{number} Set the 'window' option to {number}.
-w {scriptout}
@@ -321,8 +287,8 @@ OPTIONS
-W {scriptout}
Like -w, but an existing file is overwritten.
- -x Use encryption when writing files. Will prompt for a crypt
- key.
+ -x If Vim has been compiled with encryption support, use enâ€
+ cryption when writing files. Will prompt for a crypt key.
-X Don't connect to the X server. Shortens startup time in a
terminal, but the window title and clipboard will not be
@@ -343,31 +309,61 @@ OPTIONS
etc.). Useful to see if a problem reproduces with a clean
Vim setup.
+ --cmd {command}
+ Like using "-c", but the command is executed just before
+ processing any vimrc file. You can use up to 10 of these
+ commands, independently from "-c" commands.
+
--echo-wid GTK GUI only: Echo the Window ID on stdout.
- --literal Take file name arguments literally, do not expand wildâ€
- cards. This has no effect on Unix where the shell expands
+ --gui-dialog-file {name}
+ When using the GUI, instead of showing a dialog, write the
+ title and message of the dialog to file {name}. The file
+ is created or appended to. Only useful for testing, to
+ avoid that the test gets stuck on a dialog that can't be
+ seen. Without the GUI the argument is ignored.
+
+ --help, -h, -?
+ Give a bit of help about the command line arguments and opâ€
+ tions. After this Vim exits.
+
+ --literal Take file name arguments literally, do not expand wildâ€
+ cards. This has no effect on Unix where the shell expands
wildcards.
+ --log {filename}
+ If Vim has been compiled with eval and channel feature,
+ start logging and write entries to {filename}. This works
+ like calling ch_logfile({filename}, 'ao') very early during
+ startup.
+
+ --nofork Foreground. For the GUI version, Vim will not fork and deâ€
+ tach from the shell it was started in.
+
--noplugin Skip loading plugins. Implied by -u NONE.
+ --not-a-term
+ Tells Vim that the user knows that the input and/or output
+ is not connected to a terminal. This will avoid the warnâ€
+ ing and the two second delay that would happen.
+
--remote Connect to a Vim server and make it edit the files given in
the rest of the arguments. If no server is found a warning
is given and the files are edited in the current Vim.
--remote-expr {expr}
- Connect to a Vim server, evaluate {expr} in it and print
+ Connect to a Vim server, evaluate {expr} in it and print
the result on stdout.
--remote-send {keys}
Connect to a Vim server and send {keys} to it.
--remote-silent
- As --remote, but without the warning when no server is
+ As --remote, but without the warning when no server is
found.
--remote-wait
- As --remote, but Vim does not exit until the files have
+ As --remote, but Vim does not exit until the files have
been edited.
--remote-wait-silent
@@ -378,21 +374,24 @@ OPTIONS
List the names of all Vim servers that can be found.
--servername {name}
- Use {name} as the server name. Used for the current Vim,
+ Use {name} as the server name. Used for the current Vim,
unless used with a --remote argument, then it's the name of
the server to connect to.
--socketid {id}
- GTK GUI only: Use the GtkPlug mechanism to run gvim in anâ€
+ GTK GUI only: Use the GtkPlug mechanism to run gVim in anâ€
other window.
--startuptime {file}
During startup write timing messages to the file {fname}.
+ --ttyfail When stdin or stdout is not a a terminal (tty) then exit
+ right away.
+
--version Print version information and exit.
--windowid {id}
- Win32 GUI only: Make gvim try to use the window {id} as a
+ Win32 GUI only: Make gVim try to use the window {id} as a
parent, so that it runs inside that window.
ON-LINE HELP
@@ -430,7 +429,7 @@ FILES
System wide gvim initializations.
~/.gvimrc, ~/.vim/gvimrc, $XDG_CONFIG_HOME/vim/gvimrc
- Your personal gvim initializations (first one found is
+ Your personal gVim initializations (first one found is
used).
/usr/local/share/vim/vim??/optwin.vim
@@ -438,7 +437,7 @@ FILES
view and set options.
/usr/local/share/vim/vim??/menu.vim
- System wide menu initializations for gvim.
+ System wide menu initializations for gVim.
/usr/local/share/vim/vim??/bugreport.vim
Script to generate a bug report. See ":help bugs".
@@ -476,6 +475,4 @@ BUGS
vi_diff.txt when in Vim). Also have a look at the 'compatible' and
'cpoptions' options.
-
-
- 2024 Jun 04 VIM(1)
+ 2024 Aug 12 VIM(1)
diff --git a/runtime/doc/vimdiff-it.1 b/runtime/doc/vimdiff-it.1
index 836ccbe..335a799 100644
--- a/runtime/doc/vimdiff-it.1
+++ b/runtime/doc/vimdiff-it.1
@@ -1,4 +1,4 @@
-.TH VIMDIFF 1 "30 marzo 2001"
+.TH VIMDIFF 1 "13 giugno 2021"
.SH NOME
vimdiff \- modifica da due, fino a otto versioni di un file con Vim, visualizzando le differenze
.SH SINTASSI
diff --git a/runtime/doc/vimdiff-it.UTF-8.1 b/runtime/doc/vimdiff-it.UTF-8.1
index ebcf8ac..91e21fe 100644
--- a/runtime/doc/vimdiff-it.UTF-8.1
+++ b/runtime/doc/vimdiff-it.UTF-8.1
@@ -1,4 +1,4 @@
-.TH VIMDIFF 1 "30 marzo 2001"
+.TH VIMDIFF 1 "13 giugno 2021"
.SH NOME
vimdiff \- modifica da due, fino a otto versioni di un file con Vim, visualizzando le differenze
.SH SINTASSI
diff --git a/runtime/doc/vimdiff-ru.1 b/runtime/doc/vimdiff-ru.1
index 3855367..e5121a4 100644
--- a/runtime/doc/vimdiff-ru.1
+++ b/runtime/doc/vimdiff-ru.1
@@ -1,50 +1,51 @@
-.TH VIMDIFF 1 "2001 March 30"
-.SH éíñ
-vimdiff \- ÐÏÚ×ÏÌÑÅÔ ÒÅÄÁËÔÉÒÏ×ÁÔØ Ä×Å ÉÌÉ ÔÒÉ ×ÅÒÓÉÉ ÆÁÊÌÁ Ó ÐÏÍÏÝØÀ Vim
-Ó ÏÔÏÂÒÁÖÅÎÉÅÍ ÒÁÚÌÉÞÉÊ.
-.SH ëïíáîäîáñ óôòïëá
+.TH VIMDIFF 1 "13 ÉÀÎÑ 2021"
+.SH îáúîáþåîéå
+ðÒÏÇÒÁÍÍÁ vimdiff \[em] ÚÁÐÕÓËÁÅÔ ÒÅÄÁËÔÏÒ Vim ÄÌÑ ÓÒÁ×ÎÅÎÉÑ É ÐÒÁ×ËÉ ÏÔ Ä×ÕÈ ÄÏ
+×ÏÓØÍÉ ×ÅÒÓÉÊ ÔÅËÓÔÏ×ÏÇÏ ÆÁÊÌÁ.
+.SH ëáôëéê ïâúïò
.br
.B vimdiff
-[ËÌÀÞÉ] ÆÁÊÌ1 ÆÁÊÌ2 [ÆÁÊÌ3]
+[ÁÒÇÕÍÅÎÔÙ] file1 file2 [file3 [file4 [file5 [file6 [file7 [file8]]]]]]
.PP
.B gvimdiff
.SH ïðéóáîéå
-ëÏÍÁÎÄÁ
+ðÏ ËÏÍÁÎÄÅ
.B vimdiff
-ÚÁÇÒÕÖÁÅÔ ×
+×ÙÐÏÌÎÑÅÔÓÑ ÚÁÇÒÕÚËÁ × ÒÅÄÁËÔÏÒ
.B Vim
-Ä×Á (ÉÌÉ ÔÒÉ) ÆÁÊÌÁ. ëÁÖÄÙÊ ÆÁÊÌ ÏÔËÒÙ×ÁÅÔÓÑ × ÓÏÂÓÔ×ÅÎÎÏÍ ÏËÎÅ.
-òÁÚÌÉÞÉÑ ÍÅÖÄÕ ÆÁÊÌÁÍÉ ÏÔÏÂÒÁÖÁÀÔÓÑ Ó ÐÏÍÏÝØÀ ÐÏÄÓ×ÅÔËÉ ÓÉÎÔÁËÓÉÓÁ.
-üÔÁ ËÏÍÁÎÄÁ ÐÏÚ×ÏÌÑÅÔ ÎÁÇÌÑÄÎÏ ÏÔÏÂÒÁÖÁÔØ ×ÎÅÓ£ÎÎÙÅ ÉÚÍÅÎÅÎÉÑ É ÐÅÒÅÎÏÓÉÔØ
-ÒÁÚÌÉÞÁÀÝÉÅÓÑ ÆÒÁÇÍÅÎÔÙ ÉÚ ÏÄÎÏÊ ×ÅÒÓÉÉ ÆÁÊÌÁ × ÄÒÕÇÕÀ.
+ÏÔ Ä×ÕÈ ÄÏ ×ÏÓØÍÉ ÆÁÊÌÏ×, É ÄÌÑ ËÁÖÄÏÇÏ ÆÁÊÌÁ ÓÏÚÄÁ£ÔÓÑ ÏÔÄÅÌØÎÏÅ ÏËÎÏ.
+òÁÚÌÉÞÉÑ ÍÅÖÄÕ ÆÁÊÌÁÍÉ ×ÙÄÅÌÑÀÔÓÑ Ó ÐÏÍÏÝØÀ ÐÏÄÓ×ÅÔËÉ.
+üÔÏÔ ÓÐÏÓÏ ÏÞÅÎØ ÕÄÏÂÅÎ ÄÌÑ ÎÁÇÌÑÄÎÏÇÏ ÏÔÏÂÒÁÖÅÎÉÑ ×ÎÅÓ£ÎÎÙÈ ÉÚÍÅÎÅÎÉÊ
+É ÐÅÒÅÎÏÓÁ ÒÁÚÌÉÞÁÀÝÉÈÓÑ ÆÒÁÇÍÅÎÔÏ× ÔÅËÓÔÁ ÉÚ ÏÄÎÏÊ ×ÅÒÓÉÉ ÆÁÊÌÁ × ÄÒÕÇÕÀ.
.PP
-ðÏÄÒÏÂÎÅÅ Ï Vim ÓÍ. ÎÁ ÓÔÒÁÎÉÃÅ ÓÐÒÁ×ÏÞÎÉËÁ vim(1).
+ðÏÄÒÏÂÎÅÅ Ï ÒÅÄÁËÔÏÒÅ Vim ÓÍ. × ÓÐÒÁ×ÏÞÎÉËÅ vim(1).
.PP
-ðÒÉ ÚÁÐÕÓËÅ Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ
+ðÒÉ ÚÁÐÕÓËÅ ÒÅÄÁËÔÏÒÁ Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ
.B gvimdiff
-ÒÅÄÁËÔÏÒ ÚÁÐÕÓËÁÅÔÓÑ × ÒÅÖÉÍÅ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ, ÅÓÌÉ ÜÔÏ ×ÏÚÍÏÖÎÏ.
+ÂÕÄÔÅ ×ÙÐÏÌÎÅÎÏ ÐÅÒÅËÌÀÞÅÎÉÅ ÎÁ ÇÒÁÆÉÞÅÓËÉÊ ÉÎÔÅÒÆÅÓ ÐÏÌØÚÏ×ÁÔÅÌÑ, ÅÓÌÉ ÜÔÏ
+×ÏÚÍÏÖÎÏ.
.PP
-÷ ËÁÖÄÏÍ ÏËÎÅ ×ËÌÀÞÁÅÔÓÑ ÏÐÃÉÑ 'diff', ÞÔÏ ÐÏÚ×ÏÌÑÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÏÄÓ×ÅÔËÕ
-ÓÉÎÔÁËÓÉÓÁ ÄÌÑ ÏÔÏÂÒÁÖÅÎÉÑ ÒÁÚÌÉÞÉÊ ÍÅÖÄÕ ÆÁÊÌÁÍÉ.
+äÌÑ ËÁÖÄÏÇÏ ÓÏÚÄÁÎÎÏÇÏ ÏËÎÁ ÂÕÄÅÔ ÕÓÔÁÎÏ×ÌÅÎ ÐÁÒÁÍÅÔÒ 'diff', ÞÔÏ ÐÏÚ×ÏÌÑÅÔ
+ÉÓÐÏÌØÚÏ×ÁÔØ ÐÏÄÓ×ÅÔËÕ ÄÌÑ ÏÔÏÂÒÁÖÅÎÉÑ ÒÁÚÌÉÞÉÊ ÍÅÖÄÕ ÆÁÊÌÁÍÉ.
.br
-äÌÑ ÕÌÕÞÛÅÎÉÑ ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ × ÒÅÖÉÍÅ ÏÔÏÂÒÁÖÅÎÉÑ ÏÔÌÉÞÉÊ ÔÁËÖÅ ×ËÌÀÞÁÀÔÓÑ
-ÏÐÃÉÉ 'wrap' É 'scrollbind'.
+äÌÑ ÕÌÕÞÛÅÎÉÑ ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ × ÒÅÖÉÍÅ ÓÒÁ×ÎÅÎÉÑ ÒÁÚÌÉÞÉÊ ÔÁËÖÅ ÂÕÄÕÔ
+ÕÓÔÁÎÏ×ÌÅÎÙ ÐÁÒÁÍÅÔÒÙ 'wrap' É 'scrollbind'.
.br
-úÎÁÞÅÎÉÅ ÏÐÃÉÉ 'foldmethod' ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÒÁ×ÎÙÍ "diff", ÞÔÏ ÐÏÚ×ÏÌÑÅÔ
-ÐÒÑÔÁÔØ × ÓËÌÁÄËÕ ÏÂÌÁÓÔÉ ÔÅËÓÔÁ, ËÏÔÏÒÙÅ ÎÅ ÏÔÌÉÞÁÀÔÓÑ × ÒÁÚÌÉÞÎÙÈ ×ÅÒÓÉÑÈ ÆÁÊÌÁ.
-úÎÁÞÅÎÉÅ ÏÐÃÉÉ 'foldcolumn' ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÒÁ×ÎÙÍ 2, ÞÔÏÂÙ ÂÙÌÏ ÐÒÏÝÅ
-ÎÁÈÏÄÉÔØ, ÏÔËÒÙ×ÁÔØ É ÚÁËÒÙ×ÁÔØ ÔÁËÉÅ ÓËÌÁÄËÉ.
-.SH ëìàþé úáðõóëá
-äÌÑ ×ÙÒÁ×ÎÉ×ÁÎÉÑ ÓÔÒÏË ÍÅÖÄÕ ÏËÎÁÍÉ ÉÓÐÏÌØÚÕÅÔÓÑ ×ÅÒÔÉËÁÌØÎÏÅ ÒÁÚÄÅÌÅÎÉÅ ÏËÏÎ,
-ËÁË ÅÓÌÉ ÂÙ ÉÓÐÏÌØÚÏ×ÁÌÓÑ ËÌÀÞ "\-O". äÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÉÓÐÏÌØÚÏ×ÁÔØ ÒÁÚÄÅÌÅÎÉÅ
-ÏËÏÎ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ, ÓÌÅÄÕÅÔ ÕËÁÚÁÔØ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ ËÌÀÞ "\-o".
+äÌÑ ÐÁÒÁÍÅÔÒÁ 'foldmethod' ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÚÎÁÞÅÎÉÅ "diff", ÞÔÏ ÐÏÚ×ÏÌÑÅÔ
+Ó×ÏÒÁÞÉ×ÁÔØ ÏÂÌÁÓÔÉ ÔÅËÓÔÁ, ËÏÔÏÒÙÅ ÉÄÅÎÔÉÞÎÙ × ÒÁÚÌÉÞÎÙÈ ×ÅÒÓÉÑÈ ÆÁÊÌÁ.
+úÎÁÞÅÎÉÅ ÐÁÒÁÍÅÔÒÁ 'foldcolumn' ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÒÁ×ÎÙÍ 2, ÞÔÏÂÙ ÂÙÌÏ ÐÒÏÝÅ
+ÎÁÈÏÄÉÔØ, ÏÔËÒÙ×ÁÔØ É ÚÁËÒÙ×ÁÔØ ÔÁËÉÅ ÏÂÌÁÓÔÉ Ó×£ÒÎÕÔÏÇÏ ÔÅËÓÔÁ.
+.SH áòçõíåîôù ëïíáîäîïê óôòïëé
+ðÒÉ ÓÏÐÏÓÔÁ×ÌÅÎÉÉ ÆÁÊÌÏ×, ÉÓÐÏÌØÚÕÅÔÓÑ ×ÅÒÔÉËÁÌØÎÏÅ ÒÁÓÐÏÌÏÖÅÎÉÅ ÏËÏÎ, ËÁË ÅÓÌÉ
+ÂÙ ÂÙÌ ÕËÁÚÁÎ ÁÒÇÕÍÅÎÔ "\-O". äÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÏËÎÁ ÒÁÓÐÏÌÁÇÁÌÉÓØ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ,
+ÓÌÅÄÕÅÔ ÕËÁÚÁÔØ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ ÁÒÇÕÍÅÎÔ "\-o".
.PP
-ïÓÔÁÌØÎÙÅ ËÌÀÞÉ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ ÒÁÓÓÍÁÔÒÉ×ÁÀÔÓÑ ÎÁ ÓÔÒÁÎÉÃÅ ÓÐÒÁ×ÏÞÎÉËÁ vim(1).
-.SH óíïôòé ôáëöå
+ïÓÔÁÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ ÏÐÉÓÁÎÙ × ÓÐÒÁ×ÏÞÎÉËÅ vim(1).
+.SH óíïôòéôå ôáëöå
vim(1)
.SH á÷ôïòù
-âÏÌØÛÁÑ ÞÁÓÔØ
+âÏÌØÛÁÑ ÞÁÓÔØ ÒÅÄÁËÔÏÒÁ
.B Vim
-ÓÏÚÄÁÎÁ âÒÁÍÏÍ íÏÏÌÅÎÁÁÒÏÍ (Bram Moolenaar), ËÏÔÏÒÏÍÕ ÐÏÍÏÇÁÅÔ ÏÇÒÏÍÎÏÅ
-ËÏÌÉÞÅÓÔ×Ï ÌÀÄÅÊ. óÍ. ":help credits" ×
+ÂÙÌÁ ÓÏÚÄÁÎÁ âÒÁÍÏÍ íÏÌÅÎÁÒÏÍ (Bram Moolenaar), ËÏÔÏÒÏÍÕ ÐÏÍÏÇÁÌÏ ÏÇÒÏÍÎÏÅ
+ËÏÌÉÞÅÓÔ×Ï ÌÀÄÅÊ. óÍ. ":help credits" × ÒÅÄÁËÔÏÒÅ
.B Vim.
diff --git a/runtime/doc/vimdiff-ru.UTF-8.1 b/runtime/doc/vimdiff-ru.UTF-8.1
index 2f17e9c..b43c98d 100644
--- a/runtime/doc/vimdiff-ru.UTF-8.1
+++ b/runtime/doc/vimdiff-ru.UTF-8.1
@@ -1,50 +1,51 @@
-.TH VIMDIFF 1 "2001 March 30"
-.SH ИМЯ
-vimdiff \- позволÑет редактировать две или три верÑии файла Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Vim
-Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ различий.
-.SH КОМÐÐДÐÐЯ СТРОКÐ
+.TH VIMDIFF 1 "13 Ð¸ÑŽÐ½Ñ 2021"
+.SH ÐÐЗÐÐЧЕÐИЕ
+Программа vimdiff \[em] запуÑкает редактор Vim Ð´Ð»Ñ ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸ правки от двух до
+воÑьми верÑий текÑтового файла.
+.SH КÐТКИЙ ОБЗОР
.br
.B vimdiff
-[ключи] файл1 файл2 [файл3]
+[аргументы] file1 file2 [file3 [file4 [file5 [file6 [file7 [file8]]]]]]
.PP
.B gvimdiff
.SH ОПИСÐÐИЕ
-Команда
+По команде
.B vimdiff
-загружает в
+выполнÑетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° в редактор
.B Vim
-два (или три) файла. Каждый файл открываетÑÑ Ð² ÑобÑтвенном окне.
-Ð Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ файлами отображаютÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ подÑветки ÑинтакÑиÑа.
-Эта команда позволÑет наглÑдно отображать внеÑённые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ переноÑить
-различающиеÑÑ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ñ‹ из одной верÑии файла в другую.
+от двух до воÑьми файлов, и Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ файла ÑоздаётÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ðµ окно.
+Ð Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ файлами выделÑÑŽÑ‚ÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ подÑветки.
+Этот ÑпоÑоб очень удобен Ð´Ð»Ñ Ð½Ð°Ð³Ð»Ñдного Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑённых изменений
+и переноÑа различающихÑÑ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð¾Ð² текÑта из одной верÑии файла в другую.
.PP
-Подробнее о Vim Ñм. на Ñтранице Ñправочника vim(1).
+Подробнее о редакторе Vim Ñм. в Ñправочнике vim(1).
.PP
-При запуÑке Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды
+При запуÑке редактора Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды
.B gvimdiff
-редактор запуÑкаетÑÑ Ð² режиме графичеÑкого интерфейÑа, еÑли Ñто возможно.
+будте выполнено переключение на графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, еÑли Ñто
+возможно.
.PP
-Ð’ каждом окне включаетÑÑ Ð¾Ð¿Ñ†Ð¸Ñ 'diff', что позволÑет иÑпользовать подÑветку
-ÑинтакÑиÑа Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ð¹ между файлами.
+Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñозданного окна будет уÑтановлен параметр 'diff', что позволÑет
+иÑпользовать подÑветку Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ð¹ между файлами.
.br
-Ð”Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ в режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð»Ð¸Ñ‡Ð¸Ð¹ также включаютÑÑ
-опции 'wrap' и 'scrollbind'.
+Ð”Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ в режиме ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ð¹ также будут
+уÑтановлены параметры 'wrap' и 'scrollbind'.
.br
-Значение опции 'foldmethod' уÑтанавливаетÑÑ Ñ€Ð°Ð²Ð½Ñ‹Ð¼ "diff", что позволÑет
-прÑтать в Ñкладку облаÑти текÑта, которые не отличаютÑÑ Ð² различных верÑиÑÑ… файла.
-Значение опции 'foldcolumn' уÑтанавливаетÑÑ Ñ€Ð°Ð²Ð½Ñ‹Ð¼ 2, чтобы было проще
-находить, открывать и закрывать такие Ñкладки.
-.SH КЛЮЧИ ЗÐПУСКÐ
-Ð”Ð»Ñ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ñтрок между окнами иÑпользуетÑÑ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ разделение окон,
-как еÑли бы иÑпользовалÑÑ ÐºÐ»ÑŽÑ‡ "\-O". Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы иÑпользовать разделение
-окон по горизонтали, Ñледует указать в командной Ñтроке ключ "\-o".
+Ð”Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° 'foldmethod' уÑтанавливаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ "diff", что позволÑет
+Ñворачивать облаÑти текÑта, которые идентичны в различных верÑиÑÑ… файла.
+Значение параметра 'foldcolumn' уÑтанавливаетÑÑ Ñ€Ð°Ð²Ð½Ñ‹Ð¼ 2, чтобы было проще
+находить, открывать и закрывать такие облаÑти Ñвёрнутого текÑта.
+.SH ÐРГУМЕÐТЫ КОМÐÐДÐОЙ СТРОКИ
+При ÑопоÑтавлении файлов, иÑпользуетÑÑ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ раÑположение окон, как еÑли
+бы был указан аргумент "\-O". Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы окна раÑполагалиÑÑŒ по горизонтали,
+Ñледует указать в командной Ñтроке аргумент "\-o".
.PP
-ОÑтальные ключи командной Ñтроки раÑÑматриваютÑÑ Ð½Ð° Ñтранице Ñправочника vim(1).
-.SH СМОТРИ ТÐКЖЕ
+ОÑтальные аргументы командной Ñтроки опиÑаны в Ñправочнике vim(1).
+.SH СМОТРИТЕ ТÐКЖЕ
vim(1)
.SH ÐВТОРЫ
-Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ
+Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ редактора
.B Vim
-Ñоздана Брамом Мооленааром (Bram Moolenaar), которому помогает огромное
-количеÑтво людей. См. ":help credits" в
+была Ñоздана Брамом Моленаром (Bram Moolenaar), которому помогало огромное
+количеÑтво людей. См. ":help credits" в редакторе
.B Vim.
diff --git a/runtime/doc/vimdiff.1 b/runtime/doc/vimdiff.1
index ddcb30f..efbb84a 100644
--- a/runtime/doc/vimdiff.1
+++ b/runtime/doc/vimdiff.1
@@ -1,4 +1,4 @@
-.TH VIMDIFF 1 "2001 March 30"
+.TH VIMDIFF 1 "2021 June 13"
.SH NAME
vimdiff \- edit between two and eight versions of a file with Vim and show differences
.SH SYNOPSIS
diff --git a/runtime/doc/vimdiff.man b/runtime/doc/vimdiff.man
index a053e6a..a1f05bd 100644
--- a/runtime/doc/vimdiff.man
+++ b/runtime/doc/vimdiff.man
@@ -44,4 +44,4 @@ AUTHOR
- 2001 March 30 VIMDIFF(1)
+ 2021 June 13 VIMDIFF(1)
diff --git a/runtime/doc/vimtutor-it.1 b/runtime/doc/vimtutor-it.1
index f521134..36103df 100644
--- a/runtime/doc/vimtutor-it.1
+++ b/runtime/doc/vimtutor-it.1
@@ -1,4 +1,4 @@
-.TH VIMTUTOR 1 "2 aprile 2001"
+.TH VIMTUTOR 1 "12 agosto 2024"
.SH NOME
vimtutor \- Un breve corso introduttivo a Vim
.SH SINTASSI
@@ -19,7 +19,7 @@ Il comando
.
.PP
L'argomento opzionale \-g inizia vimtutor usando gvim invece che vim, se la
-versione GUI di vim è disponibile; altrimenti viene utilizzato Vim.
+versione GUI di vim è disponibile; altrimenti viene utilizzato vim.
.PP
L'argomento opzionale [lingua] è l'abbreviazione di due lettere del nome
di una lingua, per esempio "it" oppure "es".
@@ -32,12 +32,16 @@ verrà usata la versione inglese.
è sempre iniziato in Modo compatibile con Vi.
.SH FILE
.TP 15
-/usr/local/lib/vim/tutor/tutor[.language]
+/usr/local/lib/vim/vim??/tutor/tutor[.lingua]
I file di testo per
.B Vimtutor
.
+.br
+.I vim??
+è il numero di versione corto, p.es., vim91 per indicare
+.B Vim 9.1.
.TP 15
-/usr/local/lib/vim/tutor/tutor.vim
+/usr/local/share/vim/vim??/tutor/tutor.vim
Lo script di Vim usato per copiare il file di testo
.B Vimtutor
.
diff --git a/runtime/doc/vimtutor-it.UTF-8.1 b/runtime/doc/vimtutor-it.UTF-8.1
index 49747d4..ae42b10 100644
--- a/runtime/doc/vimtutor-it.UTF-8.1
+++ b/runtime/doc/vimtutor-it.UTF-8.1
@@ -1,4 +1,4 @@
-.TH VIMTUTOR 1 "2 aprile 2001"
+.TH VIMTUTOR 1 "12 agosto 2024"
.SH NOME
vimtutor \- Un breve corso introduttivo a Vim
.SH SINTASSI
@@ -19,7 +19,7 @@ Il comando
.
.PP
L'argomento opzionale \-g inizia vimtutor usando gvim invece che vim, se la
-versione GUI di vim è disponibile; altrimenti viene utilizzato Vim.
+versione GUI di vim è disponibile; altrimenti viene utilizzato vim.
.PP
L'argomento opzionale [lingua] è l'abbreviazione di due lettere del nome
di una lingua, per esempio "it" oppure "es".
@@ -32,12 +32,16 @@ verrà usata la versione inglese.
è sempre iniziato in Modo compatibile con Vi.
.SH FILE
.TP 15
-/usr/local/lib/vim/tutor/tutor[.language]
+/usr/local/lib/vim/vim??/tutor/tutor[.lingua]
I file di testo per
.B Vimtutor
.
+.br
+.I vim??
+è il numero di versione corto, p.es., vim91 per indicare
+.B Vim 9.1.
.TP 15
-/usr/local/lib/vim/tutor/tutor.vim
+/usr/local/share/vim/vim??/tutor/tutor.vim
Lo script di Vim usato per copiare il file di testo
.B Vimtutor
.
diff --git a/runtime/doc/vimtutor-ru.1 b/runtime/doc/vimtutor-ru.1
index fa3c5d9..ab865f2 100644
--- a/runtime/doc/vimtutor-ru.1
+++ b/runtime/doc/vimtutor-ru.1
@@ -1,51 +1,63 @@
-.TH VIMTUTOR 1 "2001 April 2"
-.SH éíñ
-vimtutor \- ÕÞÅÂÎÉË ÐÏ Vim
-.SH ëïíáîäîáñ óôòïëá
+.TH VIMTUTOR 1 "12 Á×ÇÕÓÔÁ 2024"
+.SH îáúîáþåîéå
+ðÒÏÇÒÁÍÍÁ vimtutor \[em] ×ÙÐÏÌÎÑÅÔ ÚÁÐÕÓË ÕÞÅÂÎÉËÁ ÐÏ ÒÅÄÁËÔÏÒÕ Vim.
+.SH ëòáôëéê ïâúïò
.br
-.B vimtutor [ÑÚÙË]
+.B vimtutor [\-g] [ÑÚÙË]
.SH ïðéóáîéå
-ëÏÍÁÎÄÁ
+ðÏ ËÏÍÁÎÄÅ
.B vimtutor
-ÚÁÐÕÓËÁÅÔ ÕÞÅÂÎÉË ÐÏ
+×ÙÐÏÌÎÑÅÔÓÑ ÚÁÐÕÓË ÒÅÄÁËÔÏÒÁ
.B Vim.
-ðÒÉ ÜÔÏÍ ÓÎÁÞÁÌÁ ÐÒÏÉÓÈÏÄÉÔ ÓÏÚÄÁÎÉÅ ËÏÐÉÉ ÆÁÊÌÁ ÕÞÅÂÎÉËÁ,
-ÞÔÏÂÙ ÅÇÏ ÍÏÖÎÏ ÂÙÌÏ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÂÅÚ ÏÐÁÓÅÎÉÑ ÐÏÔÅÒÑÔØ ÉÓÈÏÄÎÙÊ ÆÁÊÌ.
+Ó ÚÁÇÒÕÖÅÎÎÙÍ ÆÁÊÌÏÍ, ÓÏÄÅÒÖÁÝÅÍ ÔÅËÓÔ ÕÞÅÂÎÉËÁ. îÏ ÐÅÒÅÄ ÜÔÉÍ ÐÒÏÉÓÈÏÄÉÔ
+ÓÏÚÄÁÎÉÅ ËÏÐÉÉ ÆÁÊÌÁ ÕÞÅÂÎÉËÁ, ÞÔÏÂÙ × Î£Í ÍÏÖÎÏ ÂÙÌÏ ×ÙÐÏÌÎÑÔØ ÐÒÁËÔÉÞÅÓËÉÅ
+ÚÁÄÁÎÉÑ ÂÅÚ ÏÐÁÓÅÎÉÑ ÉÓÐÏÒÔÉÔØ ÉÓÈÏÄÎÙÊ ÆÁÊÌ.
.PP
-ðÒÏÇÒÁÍÍÁ
+ðÒÁËÔÉÞÅÓËÉÊ ËÕÒÓ, ËÏÔÏÒÙÊ ÂÕÄÅÔ ÏÔËÒÙÔ ÐÏ ËÏÍÁÎÄÅ
.B vimtutor
-ÐÏÌÅÚÎÁ ÄÌÑ ÎÏ×ÉÞËÏ×, ÖÅÌÁÀÝÉÈ ÎÁÕÞÉÔØÓÑ ÓÁÍÙÍ ÏÓÎÏ×ÎÙÍ ËÏÍÁÎÄÁÍ
+ÐÏÌÅÚÅÎ ÄÌÑ ÎÏ×ÉÞËÏ×, ÖÅÌÁÀÝÉÈ ÎÁÕÞÉÔØÓÑ ÓÁÍÙÍ ÏÓÎÏ×ÎÙÍ ËÏÍÁÎÄÁÍ ÒÅÄÁËÔÏÒÁ
.B Vim.
.PP
-îÅÏÂÑÚÁÔÅÌØÎÙÊ ÐÁÒÁÍÅÔÒ [ÑÚÙË] ÐÒÅÄÓÔÁ×ÌÑÅÔ ÓÏÂÏÊ Ä×ÕÈÓÉÍ×ÏÌØÎÙÊ ËÏÄ ÑÚÙËÁ,
-ÎÁÐÒÉÍÅÒ "ru" ÉÌÉ "it".
-åÓÌÉ ÐÁÒÁÍÅÔÒ [ÑÚÙË] ÎÅ ÕËÁÚÁÎ, ÔÏ ÉÓÐÏÌØÚÕÅÔÓÑ ÑÚÙË ÁËÔÉ×ÎÏÊ × ÎÁÓÔÏÑÝÉÊ
-ÍÏÍÅÎÔ ÌÏËÁÌÉ. åÓÌÉ ÕÞÅÂÎÉË ÎÁ ÜÔÏÍ ÑÚÙËÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ, ÔÏ ÐÏ ÕÍÏÌÞÁÎÉÀ
-ÉÓÐÏÌØÚÕÅÔÓÑ ÕÞÅÂÎÉË ÎÁ ÁÎÇÌÉÊÓËÏÍ ÑÚÙËÅ.
+þÅÒÅÚ ÎÅÏÂÑÚÁÔÅÌØÎÙÊ ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ \-g ÄÁ£ÔÓÑ ÕËÁÚÁÎÉÅ ÎÁ ÚÁÐÕÓË
+ÕÞÅÂÎÉËÁ × ÇÒÁÆÉÞÅÓËÏÍ ÉÎÔÅÒÆÅÊÓÅ ÒÅÄÁËÔÏÒÁ, ÅÓÌÉ ÜÔÏ, ËÏÎÅÞÎÏ, ×ÏÚÍÏÖÎÏ.
+ðÒÉ ÎÅ ×ÏÚÍÏÖÎÏÓÔÉ ×ÙÐÏÌÎÉÔØ ÜÔÏ, ÂÕÄÅÔ ÚÁÐÕÝÅÎ ËÏÎÓÏÌØÎÙÊ ×ÁÒÉÁÎÔ ÒÅÄÁËÔÏÒÁ
+.B Vim.
+.PP
+îÅÏÂÑÚÁÔÅÌØÎÙÊ ÁÒÇÕÍÅÎÔ [ÑÚÙË] ÚÁÄÁ£ÔÓÑ ËÁË Ä×ÕÈÓÉÍ×ÏÌØÎÙÊ ËÏÄ ÑÚÙËÁ, ÎÁÐÒÉÍÅÒ,
+"ru" ÉÌÉ "it".
+åÓÌÉ ÁÒÇÕÍÅÎÔ [ÑÚÙË] ÎÅ ÕËÁÚÁÎ, ÔÏ ÉÓÐÏÌØÚÕÅÔÓÑ ÑÚÙË, ÚÁÄÁÎÎÙÊ × ÄÅÊÓÔ×ÕÀÝÉÈ
+× ÎÁÓÔÏÑÝÉÊ ÍÏÍÅÎÔ ÒÅÇÉÏÎÁÌØÎÙÈ ÎÁÓÔÒÏÊËÁÈ. åÓÌÉ ÕÞÅÂÎÉËÁ ÎÁ ÜÔÏÍ ÑÚÙËÅ ÎÅ
+ÓÕÝÅÓÔ×ÕÅÔ, ÔÏ, ÐÏ ÕÍÏÌÞÁÎÉÀ, ÉÓÐÏÌØÚÕÅÔÓÑ ÕÞÅÂÎÉË ÎÁ ÁÎÇÌÉÊÓËÏÍ ÑÚÙËÅ.
.PP
-ðÒÉ ÒÁÂÏÔÅ Ó ÕÞÅÂÎÉËÏÍ
+ðÒÉ ÒÁÂÏÔÅ Ó ÕÞÅÂÎÉËÏÍ, ÒÅÄÁËÔÏÒ
.B Vim
-×ÓÅÇÄÁ ÚÁÐÕÓËÁÅÔÓÑ × ÒÅÖÉÍÅ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó Vi.
+×ÓÅÇÄÁ ÚÁÐÕÓËÁÅÔÓÑ × ÒÅÖÉÍÅ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó ÒÅÄÁËÔÏÒÏÍ Vi.
.SH æáêìù
+úÄÅÓØ É ÄÁÌÅÅ
+.I "vim??"
+ÏÚÎÁÞÁÅÔ ÓÏËÒÁÝ£ÎÎÕÀ ÚÁÐÉÓØ ÎÏÍÅÒÁ ×ÅÒÓÉÉ, ÎÁÐÒÉÍÅÒ, vim91 ÄÌÑ ×ÅÒÓÉÉ ÒÅÄÁËÔÏÒÁ
+.B Vim 9.1
.TP 15
-/usr/local/lib/vim/tutor/tutor[.ÑÚÙË]
-ôÅËÓÔ ÕÞÅÂÎÉËÁ
-.B vimtutor.
+/usr/local/share/vim/vim??/tutor/tutor[.ÑÚÙË]
+æÁÊÌÙ Ó ÔÅËÓÔÏÍ ÕÞÅÂÎÉËÁ
+.B Vimtutor.
.TP 15
-/usr/local/lib/vim/tutor/tutor.vim
-óÃÅÎÁÒÉÊ Vim, ËÏÔÏÒÙÊ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÓÏÚÄÁÎÉÑ ÒÁÂÏÞÅÊ
-ËÏÐÉÉ ÔÅËÓÔÁ ÕÞÅÂÎÉËÁ
-.B vimtutor.
+/usr/local/share/vim/vim??/tutor/tutor.vim
+ëÏÍÁÎÄÎÙÊ ÆÁÊÌ ÒÅÄÁËÔÏÒÁ
+.B Vim,
+ËÏÔÏÒÙÊ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÓÏÚÄÁÎÉÑ ÒÁÂÏÞÅÊ ËÏÐÉÉ ÔÅËÓÔÁ ÕÞÅÂÎÉËÁ
+.B Vimtutor.
.SH á÷ôïòù
+õÞÅÂÎÉË
.B Vimtutor
-ÂÙÌ ×ÐÅÒ×ÙÅ ÎÁÐÉÓÁÎ ÄÌÑ Vi íÁÊËÌÏÍ ë. ðÉÒÓÏÍ (Michael C. Pierce) É
-òÏÂÅÒÔÏÍ ë. õÜÁ (Robert K. Ware) ÉÚ Colorado School of Mines ÐÏ
-ÉÄÅÅ þÁÒÌØÚÁ óÍÉÔÁ (Charles Smith) ÉÚ Colorado State University.
-E-mail: bware@mines.colorado.edu.
+ÂÙÌ ×ÐÅÒ×ÙÅ ÎÁÐÉÓÁÎ ÄÌÑ Vi íÁÊËÌÏÍ ë. ðÉÒÓÏÍ (Michael C. Pierce) É òÏÂÅÒÔÏÍ ë.
+õÜÁ (Robert K. Ware) ÉÚ Colorado School of Mines ÐÏ ÉÄÅÅ þÁÒÌØÚÁ óÍÉÔÁ (Charles
+Smith) ÉÚ Colorado State University. E-mail: bware@mines.colorado.edu (ÔÅÐÅÒØ
+ÎÅÄÏÓÔÕÐÅÎ).
.br
-÷ÐÏÓÌÅÄÓÔ×ÉÉ ÕÞÅÂÎÉË ÂÙÌ ÄÏÒÁÂÏÔÁÎ ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ×
+÷ÐÏÓÌÅÄÓÔ×ÉÉ ÕÞÅÂÎÉË ÂÙÌ ÄÏÒÁÂÏÔÁÎ ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × ÒÅÄÁËÔÏÒÅ
.B Vim
-âÒÁÍÏÍ íÏÏÌÅÎÁÁÒÏÍ (Bram Moolenaar).
+âÒÁÍÏÍ íÏÌÅÎÁÒÏÍ (Bram Moolenaar).
éÍÅÎÁ ÐÅÒÅ×ÏÄÞÉËÏ× ÕÞÅÂÎÉËÁ ÕÐÏÍÉÎÁÀÔÓÑ × ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ÆÁÊÌÁÈ.
-.SH óíïôòé ôáëöå
+.SH óíïôòéôå ôáëöå
vim(1)
diff --git a/runtime/doc/vimtutor-ru.UTF-8.1 b/runtime/doc/vimtutor-ru.UTF-8.1
index 6b1ba90..27ec882 100644
--- a/runtime/doc/vimtutor-ru.UTF-8.1
+++ b/runtime/doc/vimtutor-ru.UTF-8.1
@@ -1,51 +1,63 @@
-.TH VIMTUTOR 1 "2001 April 2"
-.SH ИМЯ
-vimtutor \- учебник по Vim
-.SH КОМÐÐДÐÐЯ СТРОКÐ
+.TH VIMTUTOR 1 "12 авгуÑта 2024"
+.SH ÐÐЗÐÐЧЕÐИЕ
+Программа vimtutor \[em] выполнÑет запуÑк учебника по редактору Vim.
+.SH КРÐТКИЙ ОБЗОР
.br
-.B vimtutor [Ñзык]
+.B vimtutor [\-g] [Ñзык]
.SH ОПИСÐÐИЕ
-Команда
+По команде
.B vimtutor
-запуÑкает учебник по
+выполнÑетÑÑ Ð·Ð°Ð¿ÑƒÑк редактора
.B Vim.
-При Ñтом Ñначала проиÑходит Ñоздание копии файла учебника,
-чтобы его можно было редактировать без опаÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ‚ÐµÑ€ÑÑ‚ÑŒ иÑходный файл.
+Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ñ‹Ð¼ файлом, Ñодержащем текÑÑ‚ учебника. Ðо перед Ñтим проиÑходит
+Ñоздание копии файла учебника, чтобы в нём можно было выполнÑÑ‚ÑŒ практичеÑкие
+Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð±ÐµÐ· опаÑÐµÐ½Ð¸Ñ Ð¸Ñпортить иÑходный файл.
.PP
-Программа
+ПрактичеÑкий курÑ, который будет открыт по команде
.B vimtutor
-полезна Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ‡ÐºÐ¾Ð², желающих научитьÑÑ Ñамым оÑновным командам
+полезен Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ‡ÐºÐ¾Ð², желающих научитьÑÑ Ñамым оÑновным командам редактора
.B Vim.
.PP
-ÐеобÑзательный параметр [Ñзык] предÑтавлÑет Ñобой двухÑимвольный код Ñзыка,
-например "ru" или "it".
-ЕÑли параметр [Ñзык] не указан, то иÑпользуетÑÑ Ñзык активной в наÑтоÑщий
-момент локали. ЕÑли учебник на Ñтом Ñзыке не ÑущеÑтвует, то по умолчанию
-иÑпользуетÑÑ ÑƒÑ‡ÐµÐ±Ð½Ð¸Ðº на английÑком Ñзыке.
+Через необÑзательный аргумент командной Ñтроки \-g даётÑÑ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ðµ на запуÑк
+учебника в графичеÑком интерфейÑе редактора, еÑли Ñто, конечно, возможно.
+При не возможноÑти выполнить Ñто, будет запущен конÑольный вариант редактора
+.B Vim.
+.PP
+ÐеобÑзательный аргумент [Ñзык] задаётÑÑ ÐºÐ°Ðº двухÑимвольный код Ñзыка, например,
+"ru" или "it".
+ЕÑли аргумент [Ñзык] не указан, то иÑпользуетÑÑ Ñзык, заданный в дейÑтвующих
+в наÑтоÑщий момент региональных наÑтройках. ЕÑли учебника на Ñтом Ñзыке не
+ÑущеÑтвует, то, по умолчанию, иÑпользуетÑÑ ÑƒÑ‡ÐµÐ±Ð½Ð¸Ðº на английÑком Ñзыке.
.PP
-При работе Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¸ÐºÐ¾Ð¼
+При работе Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¸ÐºÐ¾Ð¼, редактор
.B Vim
-вÑегда запуÑкаетÑÑ Ð² режиме ÑовмеÑтимоÑти Ñ Vi.
+вÑегда запуÑкаетÑÑ Ð² режиме ÑовмеÑтимоÑти Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ Vi.
.SH ФÐЙЛЫ
+ЗдеÑÑŒ и далее
+.I "vim??"
+означает Ñокращённую запиÑÑŒ номера верÑии, например, vim91 Ð´Ð»Ñ Ð²ÐµÑ€Ñии редактора
+.B Vim 9.1
.TP 15
-/usr/local/lib/vim/tutor/tutor[.Ñзык]
-ТекÑÑ‚ учебника
-.B vimtutor.
+/usr/local/share/vim/vim??/tutor/tutor[.Ñзык]
+Файлы Ñ Ñ‚ÐµÐºÑтом учебника
+.B Vimtutor.
.TP 15
-/usr/local/lib/vim/tutor/tutor.vim
-Сценарий Vim, который иÑпользуетÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ¹
-копии текÑта учебника
-.B vimtutor.
+/usr/local/share/vim/vim??/tutor/tutor.vim
+Командный файл редактора
+.B Vim,
+который иÑпользуетÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ¹ копии текÑта учебника
+.B Vimtutor.
.SH ÐВТОРЫ
+Учебник
.B Vimtutor
-был впервые напиÑан Ð´Ð»Ñ Vi Майклом К. ПирÑом (Michael C. Pierce) и
-Робертом К. УÑа (Robert K. Ware) из Colorado School of Mines по
-идее Чарльза Смита (Charles Smith) из Colorado State University.
-E-mail: bware@mines.colorado.edu.
+был впервые напиÑан Ð´Ð»Ñ Vi Майклом К. ПирÑом (Michael C. Pierce) и Робертом К.
+УÑа (Robert K. Ware) из Colorado School of Mines по идее Чарльза Смита (Charles
+Smith) из Colorado State University. E-mail: bware@mines.colorado.edu (теперь
+недоÑтупен).
.br
-ВпоÑледÑтвии учебник был доработан Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²
+ВпоÑледÑтвии учебник был доработан Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² редакторе
.B Vim
-Брамом Мооленааром (Bram Moolenaar).
+Брамом Моленаром (Bram Moolenaar).
Имена переводчиков учебника упоминаютÑÑ Ð² ÑоответÑтвующих файлах.
-.SH СМОТРИ ТÐКЖЕ
+.SH СМОТРИТЕ ТÐКЖЕ
vim(1)
diff --git a/runtime/doc/vimtutor.1 b/runtime/doc/vimtutor.1
index ec2d85a..a71bc02 100644
--- a/runtime/doc/vimtutor.1
+++ b/runtime/doc/vimtutor.1
@@ -1,4 +1,4 @@
-.TH VIMTUTOR 1 "2001 April 2"
+.TH VIMTUTOR 1 "2024 August 12"
.SH NAME
vimtutor \- the Vim tutor
.SH SYNOPSIS
@@ -19,7 +19,7 @@ is useful for people that want to learn their first
commands.
.PP
The optional argument \-g starts vimtutor with gvim rather than vim, if the
-GUI version of vim is available, or falls back to Vim if gvim is not found.
+GUI version of Vim is available, or falls back to vim if gvim is not found.
.PP
The optional [language] argument is the two-letter name of a language, like
"it" or "es".
@@ -32,12 +32,16 @@ Otherwise the English version will be used.
is always started in Vi compatible mode.
.SH FILES
.TP 15
-/usr/local/lib/vim/tutor/tutor[.language]
+/usr/local/share/vim/vim??/tutor/tutor[.language]
The
.B Vimtutor
text file(s).
+.br
+.I vim??
+is short version number, like vim91 for
+.B Vim 9.1
.TP 15
-/usr/local/lib/vim/tutor/tutor.vim
+/usr/local/share/vim/vim??/tutor/tutor.vim
The Vim script used to copy the
.B Vimtutor
text file.
diff --git a/runtime/doc/vimtutor.man b/runtime/doc/vimtutor.man
index 76f6471..f1e113e 100644
--- a/runtime/doc/vimtutor.man
+++ b/runtime/doc/vimtutor.man
@@ -16,7 +16,7 @@ DESCRIPTION
commands.
The optional argument -g starts vimtutor with gvim rather than vim, if
- the GUI version of vim is available, or falls back to Vim if gvim is
+ the GUI version of Vim is available, or falls back to vim if gvim is
not found.
The optional [language] argument is the two-letter name of a language,
@@ -28,10 +28,11 @@ DESCRIPTION
Vim is always started in Vi compatible mode.
FILES
- /usr/local/lib/vim/tutor/tutor[.language]
+ /usr/local/share/vim/vim??/tutor/tutor[.language]
The Vimtutor text file(s).
+ vim?? is short version number, like vim91 for Vim 9.1
- /usr/local/lib/vim/tutor/tutor.vim
+ /usr/local/share/vim/vim??/tutor/tutor.vim
The Vim script used to copy the Vimtutor text file.
AUTHOR
@@ -47,4 +48,4 @@ SEE ALSO
- 2001 April 2 VIMTUTOR(1)
+ 2024 August 12 VIMTUTOR(1)
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index e264e51..d3e5f67 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -1,4 +1,4 @@
-*windows.txt* For Vim version 9.1. Last change: 2024 Feb 20
+*windows.txt* For Vim version 9.1. Last change: 2024 Jul 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1223,7 +1223,8 @@ list of buffers. |unlisted-buffer|
:bw[ipeout][!] N1 N2 ...
Like |:bdelete|, but really delete the buffer. Everything
related to the buffer is lost. All marks in this buffer
- become invalid, option settings are lost, etc. Don't use this
+ become invalid, option settings are lost, the jumplist and
+ tagstack data will be purged, etc. Don't use this
unless you know what you are doing. Examples: >
:.+,$bwipeout " wipe out all buffers after the current
" one
diff --git a/runtime/doc/xxd-it.1 b/runtime/doc/xxd-it.1
index a4c1fe4..604d30a 100644
--- a/runtime/doc/xxd-it.1
+++ b/runtime/doc/xxd-it.1
@@ -1,4 +1,4 @@
-.TH XXD 1 "Agosto 1996" "Pagina di manuale per xxd"
+.TH XXD 1 "Maggio 2024" "Pagina di manuale per xxd"
.\"
.\" 21 Maggio 1996
.\" Autore della pagina di manuale:
@@ -190,7 +190,10 @@ Nel modificare immagini esadecimali, si tenga conto che
salta il resto della riga, dopo aver letto i caratteri contenenti dati esadecimali
(vedere opzione \-c). Ciò implica pure che le modifiche alle colonne di caratteri
stampabili ASCII (o EBCDIC) sono sempre ignorate. La ricostruzione da un file immagine
-esadecimale in stile semplice (postscript) con xxd \-r \-p non dipende dal numero corretto di colonne. In questo caso, qualsiasi cosa assomigli a una coppia di cifre esadecimali è interpretata [e utilizzata].
+esadecimale in stile semplice (postscript) con xxd \-r \-p non dipende dal numero
+corretto di colonne.
+In questo caso, qualsiasi cosa assomigli a una coppia di cifre esadecimali è
+interpretata [e utilizzata].
.PP
Notare la differenza fra
.br
@@ -221,10 +224,11 @@ si aggiunge a 1k (1024) dove `dd' si era fermato.
.PP
Immagine esadecimale dalla posizione 0x100 (=1024\-768 ) del file in avanti.
.br
-\fI% sh \-c "dd of=normale bs=1k count=1; xxd \-s +\-768 > esadecimale" < file
+\fI% sh \-c "dd of=normale bs=1k count=1; xxd \-s +\-768 > esadecimale" < file\fR
.PP
Comunque, questo capita raramente, e l'uso del `+' non serve quasi mai.
-L'autore preferisce monitorare il comportamento di xxd con strace(1) o truss(1), quando si usa l'opzione \-s.
+L'autore preferisce monitorare il comportamento di xxd con strace(1) o truss(1),
+quando si usa l'opzione \-s.
.SH ESEMPI
.PP
.br
@@ -237,60 +241,63 @@ Stampa tutto tranne le prime tre righe (0x30 byte in esadecimale) di
Stampa 3 righe (0x30 byte in esadecimale) alla fine di
.BR file .
.br
-\fI% xxd \-s \-0x30 file
+\fI% xxd \-s \-0x30 file\fR
+.PP
+Nota: I risultati degli esempi seguenti sono riferiti alla versione di
+Maggio 2024 della pagina di manuale [quella che state leggendo].
.PP
.br
Stampa 120 byte come immagine esadecimale continua con 20 byte per riga.
.br
-\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
-.br
-2e54482058584420312022417567757374203139
+\fI% xxd \-l 120 \-ps \-c 20 xxd-it.UTF-8.1\fR
.br
-39362220224d616e75616c207061676520666f72
+2e544820585844203120224d616767696f203230
.br
-20787864220a2e5c220a2e5c222032317374204d
+3234222022506167696e61206469206d616e7561
.br
-617920313939360a2e5c22204d616e2070616765
+6c652070657220787864220a2e5c220a2e5c2220
.br
-20617574686f723a0a2e5c2220202020546f6e79
+3231204d616767696f20313939360a2e5c222041
.br
-204e7567656e74203c746f6e79407363746e7567
+75746f72652064656c6c6120706167696e612064
.br
+69206d616e75616c653a0a2e5c2220202020546f
+.PP
.br
-Stampa i primi 120 byte della pagina di manuale xxd.1 a 12 byte per riga.
+Stampa i primi 120 byte di questa pagina di manuale a 12 byte per riga.
.br
-\fI% xxd \-l 120 \-c 12 xxd.1\fR
+\fI% xxd \-l 120 \-c 12 xxd-it.UTF-8.1\fR
.br
-0000000: 2e54 4820 5858 4420 3120 2241 .TH XXD 1 "A
+00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
.br
-000000c: 7567 7573 7420 3139 3936 2220 ugust 1996"
+0000000c: 6167 6769 6f20 3230 3234 2220 aggio 2024"
.br
-0000018: 224d 616e 7561 6c20 7061 6765 "Manual page
+00000018: 2250 6167 696e 6120 6469 206d "Pagina di m
.br
-0000024: 2066 6f72 2078 7864 220a 2e5c for xxd"..\\
+00000024: 616e 7561 6c65 2070 6572 2078 anuale per x
.br
-0000030: 220a 2e5c 2220 3231 7374 204d "..\\" 21st M
+00000030: 7864 220a 2e5c 220a 2e5c 2220 xd"..\"..\"
.br
-000003c: 6179 2031 3939 360a 2e5c 2220 ay 1996..\\"
+0000003c: 3231 204d 6167 6769 6f20 3139 21 Maggio 19
.br
-0000048: 4d61 6e20 7061 6765 2061 7574 Man page aut
+00000048: 3936 0a2e 5c22 2041 7574 6f72 96..\" Autor
.br
-0000054: 686f 723a 0a2e 5c22 2020 2020 hor:..\\"
+00000054: 6520 6465 6c6c 6120 7061 6769 e della pagi
.br
-0000060: 546f 6e79 204e 7567 656e 7420 Tony Nugent
+00000060: 6e61 2064 6920 6d61 6e75 616c na di manual
.br
-000006c: 3c74 6f6e 7940 7363 746e 7567 <tony@sctnug
+0000006c: 653a 0a2e 5c22 2020 2020 546f e:..\" To
.PP
.br
-Visualizza la data dal file xxd.1
+Visualizza la data dal file xxd-it.UTF-8.1
.br
-\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
+\fI% xxd \-s 0x3c \-l 14 \-c 14 xxd-it.UTF-8.1\fR
.br
-0000036: 3231 7374 204d 6179 2031 3939 36 21st May 1996
+0000003c: 3231 204d 6167 6769 6f20 3139 3936 21 Maggio 1996
.PP
.br
-Copiare
+Copia
.B input_file
su
.B output_file
@@ -300,30 +307,30 @@ premettendogli 100 byte a 0x00.
.br
.br
-Modificare (patch) la data nel file xxd.1
+Modifica (patch) la data nel file xxd-it.UTF-8.1
.br
-\fI% echo "0000037: 3574 68" | xxd \-r \- xxd.1\fR
+\fI% echo "000003c: 3331" | xxd \-r \- xxd-it.UTF-8.1\fR
.br
-\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
+\fI% xxd \-s 0x3c \-l 14 \-c 14 xxd-it.UTF-8.1\fR
.br
-0000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996
+0000003c: 3331 204d 6167 6769 6f20 3139 3936 31 Maggio 1996
.PP
.br
-Creare un file di 65537 byte tutto a 0x00,
+Crea un file di 65537 byte tutto a 0x00,
tranne l'ultimo carattere che è una 'A' (esadecimale 0x41).
.br
\fI% echo "010000: 41" | xxd \-r > file\fR
.PP
.br
-Stampa una immagine esadecimale del file di cui sopra con opzione autoskip.
+Stampa un'immagine esadecimale del file di cui sopra con opzione autoskip.
.br
\fI% xxd \-a \-c 12 file\fR
.br
-0000000: 0000 0000 0000 0000 0000 0000 ............
+00000000: 0000 0000 0000 0000 0000 0000 ............
.br
*
.br
-000fffc: 0000 0000 40 ....A
+0000fffc: 0000 0000 41 ....A
.PP
Creare un file di 1 byte che contiene il solo carattere 'A'.
Il numero dopo '\-r \-s' viene aggiunto a quello trovato nel file;
@@ -388,7 +395,7 @@ La stranezza dello strumento rispecchia la mente del suo creatore.
Usate a vostro rischio e pericolo. Copiate i file. Tracciate l'esecuzione. Diventate un mago.
.br
.SH VERSIONE
-Questa pagina di manuale documenta la versione 1.7 di xxd.
+Questa pagina di manuale documenta la versione 1.7 di xxd del maggio 2024.
.SH AUTORE
.br
(c) 1990-1997 Juergen Weigert
diff --git a/runtime/doc/xxd-it.UTF-8.1 b/runtime/doc/xxd-it.UTF-8.1
index 58b9789..9b67643 100644
--- a/runtime/doc/xxd-it.UTF-8.1
+++ b/runtime/doc/xxd-it.UTF-8.1
@@ -1,4 +1,4 @@
-.TH XXD 1 "Agosto 1996" "Pagina di manuale per xxd"
+.TH XXD 1 "Maggio 2024" "Pagina di manuale per xxd"
.\"
.\" 21 Maggio 1996
.\" Autore della pagina di manuale:
@@ -190,7 +190,10 @@ Nel modificare immagini esadecimali, si tenga conto che
salta il resto della riga, dopo aver letto i caratteri contenenti dati esadecimali
(vedere opzione \-c). Ciò implica pure che le modifiche alle colonne di caratteri
stampabili ASCII (o EBCDIC) sono sempre ignorate. La ricostruzione da un file immagine
-esadecimale in stile semplice (postscript) con xxd \-r \-p non dipende dal numero corretto di colonne. In questo caso, qualsiasi cosa assomigli a una coppia di cifre esadecimali è interpretata [e utilizzata].
+esadecimale in stile semplice (postscript) con xxd \-r \-p non dipende dal numero
+corretto di colonne.
+In questo caso, qualsiasi cosa assomigli a una coppia di cifre esadecimali è
+interpretata [e utilizzata].
.PP
Notare la differenza fra
.br
@@ -221,10 +224,11 @@ si aggiunge a 1k (1024) dove `dd' si era fermato.
.PP
Immagine esadecimale dalla posizione 0x100 (=1024\-768 ) del file in avanti.
.br
-\fI% sh \-c "dd of=normale bs=1k count=1; xxd \-s +\-768 > esadecimale" < file
+\fI% sh \-c "dd of=normale bs=1k count=1; xxd \-s +\-768 > esadecimale" < file\fR
.PP
Comunque, questo capita raramente, e l'uso del `+' non serve quasi mai.
-L'autore preferisce monitorare il comportamento di xxd con strace(1) o truss(1), quando si usa l'opzione \-s.
+L'autore preferisce monitorare il comportamento di xxd con strace(1) o truss(1),
+quando si usa l'opzione \-s.
.SH ESEMPI
.PP
.br
@@ -237,60 +241,63 @@ Stampa tutto tranne le prime tre righe (0x30 byte in esadecimale) di
Stampa 3 righe (0x30 byte in esadecimale) alla fine di
.BR file .
.br
-\fI% xxd \-s \-0x30 file
+\fI% xxd \-s \-0x30 file\fR
+.PP
+Nota: I risultati degli esempi seguenti sono riferiti alla versione di
+Maggio 2024 della pagina di manuale [quella che state leggendo].
.PP
.br
Stampa 120 byte come immagine esadecimale continua con 20 byte per riga.
.br
-\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
-.br
-2e54482058584420312022417567757374203139
+\fI% xxd \-l 120 \-ps \-c 20 xxd-it.UTF-8.1\fR
.br
-39362220224d616e75616c207061676520666f72
+2e544820585844203120224d616767696f203230
.br
-20787864220a2e5c220a2e5c222032317374204d
+3234222022506167696e61206469206d616e7561
.br
-617920313939360a2e5c22204d616e2070616765
+6c652070657220787864220a2e5c220a2e5c2220
.br
-20617574686f723a0a2e5c2220202020546f6e79
+3231204d616767696f20313939360a2e5c222041
.br
-204e7567656e74203c746f6e79407363746e7567
+75746f72652064656c6c6120706167696e612064
.br
+69206d616e75616c653a0a2e5c2220202020546f
+.PP
.br
-Stampa i primi 120 byte della pagina di manuale xxd.1 a 12 byte per riga.
+Stampa i primi 120 byte di questa pagina di manuale a 12 byte per riga.
.br
-\fI% xxd \-l 120 \-c 12 xxd.1\fR
+\fI% xxd \-l 120 \-c 12 xxd-it.UTF-8.1\fR
.br
-0000000: 2e54 4820 5858 4420 3120 2241 .TH XXD 1 "A
+00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
.br
-000000c: 7567 7573 7420 3139 3936 2220 ugust 1996"
+0000000c: 6167 6769 6f20 3230 3234 2220 aggio 2024"
.br
-0000018: 224d 616e 7561 6c20 7061 6765 "Manual page
+00000018: 2250 6167 696e 6120 6469 206d "Pagina di m
.br
-0000024: 2066 6f72 2078 7864 220a 2e5c for xxd"..\\
+00000024: 616e 7561 6c65 2070 6572 2078 anuale per x
.br
-0000030: 220a 2e5c 2220 3231 7374 204d "..\\" 21st M
+00000030: 7864 220a 2e5c 220a 2e5c 2220 xd"..\"..\"
.br
-000003c: 6179 2031 3939 360a 2e5c 2220 ay 1996..\\"
+0000003c: 3231 204d 6167 6769 6f20 3139 21 Maggio 19
.br
-0000048: 4d61 6e20 7061 6765 2061 7574 Man page aut
+00000048: 3936 0a2e 5c22 2041 7574 6f72 96..\" Autor
.br
-0000054: 686f 723a 0a2e 5c22 2020 2020 hor:..\\"
+00000054: 6520 6465 6c6c 6120 7061 6769 e della pagi
.br
-0000060: 546f 6e79 204e 7567 656e 7420 Tony Nugent
+00000060: 6e61 2064 6920 6d61 6e75 616c na di manual
.br
-000006c: 3c74 6f6e 7940 7363 746e 7567 <tony@sctnug
+0000006c: 653a 0a2e 5c22 2020 2020 546f e:..\" To
.PP
.br
-Visualizza la data dal file xxd.1
+Visualizza la data dal file xxd-it.UTF-8.1
.br
-\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
+\fI% xxd \-s 0x3c \-l 14 \-c 14 xxd-it.UTF-8.1\fR
.br
-0000036: 3231 7374 204d 6179 2031 3939 36 21st May 1996
+0000003c: 3231 204d 6167 6769 6f20 3139 3936 21 Maggio 1996
.PP
.br
-Copiare
+Copia
.B input_file
su
.B output_file
@@ -300,30 +307,30 @@ premettendogli 100 byte a 0x00.
.br
.br
-Modificare (patch) la data nel file xxd.1
+Modifica (patch) la data nel file xxd-it.UTF-8.1
.br
-\fI% echo "0000037: 3574 68" | xxd \-r \- xxd.1\fR
+\fI% echo "000003c: 3331" | xxd \-r \- xxd-it.UTF-8.1\fR
.br
-\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
+\fI% xxd \-s 0x3c \-l 14 \-c 14 xxd-it.UTF-8.1\fR
.br
-0000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996
+0000003c: 3331 204d 6167 6769 6f20 3139 3936 31 Maggio 1996
.PP
.br
-Creare un file di 65537 byte tutto a 0x00,
+Crea un file di 65537 byte tutto a 0x00,
tranne l'ultimo carattere che è una 'A' (esadecimale 0x41).
.br
\fI% echo "010000: 41" | xxd \-r > file\fR
.PP
.br
-Stampa una immagine esadecimale del file di cui sopra con opzione autoskip.
+Stampa un'immagine esadecimale del file di cui sopra con opzione autoskip.
.br
\fI% xxd \-a \-c 12 file\fR
.br
-0000000: 0000 0000 0000 0000 0000 0000 ............
+00000000: 0000 0000 0000 0000 0000 0000 ............
.br
*
.br
-000fffc: 0000 0000 40 ....A
+0000fffc: 0000 0000 41 ....A
.PP
Creare un file di 1 byte che contiene il solo carattere 'A'.
Il numero dopo '\-r \-s' viene aggiunto a quello trovato nel file;
@@ -388,7 +395,7 @@ La stranezza dello strumento rispecchia la mente del suo creatore.
Usate a vostro rischio e pericolo. Copiate i file. Tracciate l'esecuzione. Diventate un mago.
.br
.SH VERSIONE
-Questa pagina di manuale documenta la versione 1.7 di xxd.
+Questa pagina di manuale documenta la versione 1.7 di xxd del maggio 2024.
.SH AUTORE
.br
(c) 1990-1997 Juergen Weigert
diff --git a/runtime/doc/xxd-ja.UTF-8.1 b/runtime/doc/xxd-ja.UTF-8.1
index dabc477..93928fe 100644
--- a/runtime/doc/xxd-ja.UTF-8.1
+++ b/runtime/doc/xxd-ja.UTF-8.1
@@ -79,6 +79,9 @@
.IR \-C " | " \-capitalize
\-i を使用ã—ãŸéš›ã«ã€C インクルードファイル形å¼ã®å¤‰æ•°åを大文字ã«ã™ã‚‹ã€‚
.TP
+.I \-d
+オフセットを 16 進ã®ä»£ã‚ã‚Šã« 10 進ã§è¡¨ç¤ºã™ã‚‹ã€‚
+.TP
.IR \-E " | " \-EBCDIC
å³ç«¯ã«å‡ºåŠ›ã•ã‚Œã‚‹æ–‡å­—ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’ ASCII ã‹ã‚‰ EBCDIC ã«å¤‰æ›´ã™ã‚‹ã€‚
16 進ダンプã®å‡ºåŠ›å½¢å¼ã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“。
@@ -135,7 +138,7 @@ C インクルードファイル形å¼ã§å‡ºåŠ›ã™ã‚‹ã€‚
ãŸã„ã¦ã„ã¯ã€è¡¨ç¤ºå¯èƒ½æ–‡å­—ã¨éžè¡¨ç¤ºå¯èƒ½æ–‡å­—を区別ã™ã‚‹ã®ã«æœ‰ç”¨ã§ã™ã€‚
.I \fIwhen\fP
ã¯
-.BR never ", " always ", ã‚ã‚‹ã„㯠" auto
+.BR never ", " always ", ã‚ã‚‹ã„㯠" auto " (デフォルト: auto)
ã®ã„ãšã‚Œã‹ã§ã™ã€‚
.BR $NO_COLOR
環境変数ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹ã¨ãã¯ã€ã‚«ãƒ©ãƒ¼è¡¨ç¤ºã¯ç„¡åŠ¹åŒ–ã•ã‚Œã¾ã™ã€‚
diff --git a/runtime/doc/xxd-ru.1 b/runtime/doc/xxd-ru.1
index 8f32432..99b7461 100644
--- a/runtime/doc/xxd-ru.1
+++ b/runtime/doc/xxd-ru.1
@@ -1,57 +1,60 @@
-.TH XXD 1 "August 1996" "óÔÒÁÎÉÃÁ man ÄÌÑ xxd"
+.TH XXD 1 "May 2024" "óÐÒÁ×ÏÞÎÉË ÐÏ ÐÒÏÇÒÁÍÍÅ xxd"
.\"
.\" 21st May 1996
.\" Man page author:
.\" Tony Nugent <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
.\" Changes by Bram Moolenaar <Bram@vim.org>
-.SH éíñ
+.SH îáúîáþåîéå
+ðÒÏÇÒÁÍÍÁ
.I xxd
-\- ÓÏÚÄÁ£Ô ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÆÁÊÌÁ × ×ÉÄÅ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ ËÏÄÏ× ÉÌÉ ×ÙÐÏÌÎÑÅÔ
-ÏÂÒÁÔÎÏÅ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ.
-.SH ëïíáîäîáñ óôòïëá
+\[em] ×ÙÐÏÌÎÑÅÔ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÄÁÎÎÙÈ ÉÌÉ × ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÊ ×ÉÄ, ÉÌÉ ×ÙÐÏÌÎÑÅÔ
+ÏÂÒÁÔÎÏÅ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ËÏÄÁ × ÉÓÈÏÄÎÙÊ ÆÏÒÍÁÔ
+.SH ëòáôëéê ïâúïò
.B xxd
\-h[elp]
.br
.B xxd
-[ËÌÀÞÉ] [×ÈÏÄÎÏÊ_ÆÁÊÌ [×ÙÈÏÄÎÏÊ_ÆÁÊÌ]]
+[ÁÒÇÕÍÅÎÔÙ] [×ÈÏÄÎÏÊ_ÆÁÊÌ [×ÙÈÏÄÎÏÊ_ÆÁÊÌ]]
.br
.B xxd
-\-r[evert] [ËÌÀÞÉ] [×ÈÏÄÎÏÊ_ÆÁÊÌ [×ÙÈÏÄÎÏÊ_ÆÁÊÌ]]
+\-r[evert] [ÁÒÇÕÍÅÎÔÙ] [×ÈÏÄÎÏÊ_ÆÁÊÌ [×ÙÈÏÄÎÏÊ_ÆÁÊÌ]]
.SH ïðéóáîéå
+ðÒÏÇÒÁÍÍÁ
.I xxd
-ÓÏÚÄÁ£Ô ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÕËÁÚÁÎÎÏÇÏ ÆÁÊÌÁ ÉÌÉ ÄÁÎÎÙÈ, ÐÒÏÞÉÔÁÎÎÙÈ ÉÚ ÐÏÔÏËÁ
-ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ, × ×ÉÄÅ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ ËÏÄÏ×. üÔÁ ËÏÍÁÎÄÁ ÔÁËÖÅ ÍÏÖÅÔ
-×ÙÐÏÌÎÉÔØ ÏÂÒÁÔÎÏÅ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÚÁÄÁÎÎÙÈ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÍÉ ËÏÄÁÍÉ ÄÁÎÎÙÈ
-× ÉÓÈÏÄÎÙÊ ÂÉÎÁÒÎÙÊ ÆÏÒÍÁÔ.
-ðÏÄÏÂÎÏ ËÏÍÁÎÄÁÍ
+ÓÏÚÄÁ£Ô ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÕËÁÚÁÎÎÏÇÏ ÆÁÊÌÁ ÉÌÉ ÄÁÎÎÙÈ, ÐÒÏÞÉÔÁÎÎÙÈ ÉÚ ÓÔÁÎÄÁÒÔÎÏÇÏ
+ÐÏÔÏËÁ ××ÏÄÁ, × ×ÉÄÅ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ ËÏÄÏ×. üÔÁ ÐÒÏÇÒÁÍÍÁ ÔÁËÖÅ ÍÏÖÅÔ
+×ÙÐÏÌÎÑÔØ ÏÂÒÁÔÎÏÅ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÚÁÄÁÎÎÙÈ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÍÉ ËÏÄÁÍÉ ÄÁÎÎÙÈ
+× ÉÓÈÏÄÎÙÊ Ä×ÏÉÞÎÙÈ ÆÏÒÍÁÔ.
+ðÏÄÏÂÎÏ ÐÒÏÇÒÁÍÍÁÍ
.BR uuencode(1)
É
-.BR uudecode(1),
-ÏÎÁ ÐÏÚ×ÏÌÑÅÔ ×ÙÐÏÌÎÑÔØ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÂÉÎÁÒÎÙÈ ÄÁÎÎÙÈ × ASCII-ËÏÄ,
-ËÏÔÏÒÙÊ ÍÏÖÎÏ ÐÅÒÅÄÁ×ÁÔØ ÐÏ ÜÌÅËÔÒÏÎÎÏÊ ÐÏÞÔÅ, ÏÄÎÁËÏ, ÐÏÍÉÍÏ ÜÔÏÇÏ, ÐÒÏÇÒÁÍÍÁ
-xxd ÐÏÚ×ÏÌÑÅÔ ×ÙÐÏÌÎÑÔØ ÄÅËÏÄÉÒÏ×ÁÎÉÅ × ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ×Ù×ÏÄÁ,
-Á ÔÁËÖÅ ÍÏÖÅÔ ÐÒÉÍÅÎÑÔØÓÑ ÄÌÑ ÓÏÚÄÁÎÉÑ ÚÁÐÌÁÔÏË ÄÌÑ ÂÉÎÁÒÎÙÈ ÆÁÊÌÏ×.
-.SH ëìàþé úáðõóëá
+.BR uudecode(1)
+, ÏÎÁ ÐÏÚ×ÏÌÑÅÔ ×ÙÐÏÌÎÑÔØ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ Ä×ÏÉÞÎÙÈ ÄÁÎÎÙÈ × ÓÉÍ×ÏÌÙ ËÏÄÉÒÏ×ËÉ
+ASCII, ËÏÔÏÒÙÅ ÍÏÖÎÏ ÐÅÒÅÄÁ×ÁÔØ ÐÏ ÜÌÅËÔÒÏÎÎÏÊ ÐÏÞÔÅ, ÏÄÎÁËÏ, ÐÏÍÉÍÏ ÜÔÏÇÏ,
+ÐÒÏÇÒÁÍÍÁ xxd ÐÏÚ×ÏÌÑÅÔ ×ÙÐÏÌÎÑÔØ ÄÅËÏÄÉÒÏ×ÁÎÉÅ × ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ×Ù×ÏÄÁ,
+Á ÔÁËÖÅ ÍÏÖÅÔ ÐÒÉÍÅÎÑÔØÓÑ ÄÌÑ ÓÏÚÄÁÎÉÑ ÉÓÐÒÁ×ÌÅÎÉÊ ÄÌÑ Ä×ÏÉÞÎÙÈ ÆÁÊÌÏ×.
+.SH áòçõíåîôù ëïíáîäîïê óôòïëé
åÓÌÉ
.I ×ÈÏÄÎÏÊ_ÆÁÊÌ
-ÎÅ ÚÁÄÁÎ, ÔÏ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ ÄÁÎÎÙÅ ÞÉÔÁÀÔÓÑ ÉÚ ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ.
+ÎÅ ÚÁÄÁÎ, ÔÏ ÔÒÅÂÕÅÍÙÅ ÄÁÎÎÙÅ ÓÞÉÔÙ×ÁÀÔÓÑ ÉÚ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ××ÏÄÁ.
÷ ÓÌÕÞÁÅ, ÅÓÌÉ × ËÁÞÅÓÔ×Å
.I ×ÈÏÄÎÏÇÏ_ÆÁÊÌÁ
ÉÓÐÏÌØÚÕÅÔÓÑ ÓÉÍ×ÏÌ
-.RB \` \- ',
-ÉÓÔÏÞÎÉËÏÍ ÄÁÎÎÙÈ ÔÁËÖÅ ×ÙÓÔÕÐÁÅÔ ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ.
+.RB ' \- ',
+ÉÓÔÏÞÎÉËÏÍ ÄÁÎÎÙÈ ÔÁËÖÅ ×ÙÓÔÕÐÁÅÔ ÓÔÁÎÄÁÒÔÎÙÊ ÐÏÔÏË ××ÏÄÁ.
÷ ÔÏÍ ÓÌÕÞÁÅ, ÅÓÌÉ ÎÅ ÕËÁÚÁÎ
.I ×ÙÈÏÄÎÏÊ_ÆÁÊÌ
(ÉÌÉ ×ÍÅÓÔÏ ÎÅÇÏ ÉÓÐÏÌØÚÕÅÔÓÑ ÓÉÍ×ÏÌ
-.RB \` \- '
-), ÒÅÚÕÌØÔÁÔ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÎÁÐÒÁ×ÌÑÅÔÓÑ × ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ×Ù×ÏÄÁ.
-.PP
-ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÉÓÐÏÌØÚÕÅÔÓÑ "ÌÅÎÉ×ÙÊ" ÁÌÇÏÒÉÔÍ ÒÁÚÂÏÒÁ ËÌÀÞÅÊ, ËÏÔÏÒÙÊ ÎÅ
-ÐÒÏ×ÅÒÑÅÔ ÂÏÌÅÅ ÏÄÎÏÊ ÂÕË×Ù ËÌÀÞÁ, ÅÓÌÉ × ÜÔÏÍ ËÌÀÞÅ ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ ÐÁÒÁÍÅÔÒ.
-ðÒÏÂÅÌÙ ÍÅÖÄÕ ÅÄÉÎÓÔ×ÅÎÎÙÍ ÓÉÍ×ÏÌÏÍ ËÌÀÞÁ É ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÍ ÐÁÒÁÍÅÔÒÏÍ ÎÅ Ñ×ÌÑÀÔÓÑ
-ÏÂÑÚÁÔÅÌØÎÙÍÉ. ðÁÒÁÍÅÔÒÙ ËÌÀÞÅÊ ÍÏÇÕÔ ÂÙÔØ ÚÁÄÁÎÙ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÄÅÓÑÔÉÞÎÏÇÏ,
-ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÉÌÉ ×ÏÓØÍÅÒÉÞÎÏÇÏ ÆÏÒÍÁÔÁ.
-ôÁËÉÍ ÏÂÒÁÚÏÍ, ËÌÀÞÉ
+.RB ' \- '
+), ÒÅÚÕÌØÔÁÔ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÎÁÐÒÁ×ÌÑÅÔÓÑ × ÓÔÁÎÄÁÒÔÎÙÊ ÐÏÔÏË ×Ù×ÏÄÁ.
+.PP
+ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÐÒÉÍÅÎÑÅÔÓÑ "ÌÅÎÉ×ÙÊ" ÁÌÇÏÒÉÔÍ ÒÁÚÂÏÒÁ ÁÒÇÕÍÅÎÔÏ×,
+ËÏÔÏÒÙÊ ÐÒÏ×ÅÒÑÅÔ ÔÏÌØËÏ ÐÅÒ×ÕÀ ÂÕË×Õ ÁÒÇÕÍÅÎÔÁ, ÅÓÌÉ, ËÏÎÅÞÎÏ, ÄÌÑ ÜÔÏÇÏ
+ÁÒÇÕÍÅÎÔÁ ÎÅ ÕËÁÚÁÎÏ ËÁËÏÅ-ÔÏ ÚÎÁÞÅÎÉÅ.
+ðÒÏÂÅÌÙ ÍÅÖÄÕ ÏÄÎÏÓÉÍ×ÏÌØÎÙÍ ÁÒÇÕÍÅÎÔÏÍ É ÅÇÏ ÚÎÁÞÅÎÉÅÍ ÎÅ Ñ×ÌÑÀÔÓÑ
+ÏÂÑÚÁÔÅÌØÎÙÍÉ. úÎÁÞÅÎÉÑ ÁÒÇÕÍÅÎÔÏ× ÍÏÇÕÔ ÂÙÔØ ÚÁÄÁÎÙ × ÄÅÓÑÔÉÞÎÏÍ,
+ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÍ ÉÌÉ ×ÏÓØÍÅÒÉÞÎÏÍ ÆÏÒÍÁÔÅ.
+ôÁËÉÍ ÏÂÒÁÚÏÍ, ÁÒÇÕÍÅÎÔÙ
.BR \-c8 ,
.BR "\-c 8" ,
.B \-c 010
@@ -61,118 +64,179 @@ xxd ÐÏÚ×ÏÌÑÅÔ ×ÙÐÏÌÎÑÔØ ÄÅËÏÄÉÒÏ×ÁÎÉÅ × ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ×Ù×ÏÄÁ,
.PP
.TP
.IR \-a " | " \-autoskip
-÷ËÌÀÞÁÅÔ Á×ÔÏÍÁÔÉÞÅÓËÉÊ ÐÒÏÐÕÓË: ×ÍÅÓÔÏ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ
-ÎÕÌÅ×ÙÈ ÓÔÒÏË ÉÓÐÏÌØÚÕÅÔÓÑ ÏÄÉÎÏÞÎÙÊ ÓÉÍ×ÏÌ '*'. ðÏ ÕÍÏÌÞÁÎÉÀ
-ÎÅ ÐÒÉÍÅÎÑÅÔÓÑ.
+÷ËÌÀÞÉÔØ Á×ÔÏÍÁÔÉÞÅÓËÉÊ ÐÒÏÐÕÓË, Ô. Å., ×ÍÅÓÔÏ ÎÅÓËÏÌØËÉÈ ÉÄÕÝÉÈ ÐÏÄÒÑÄ ÓÔÒÏË
+Ó ÎÕÌÅ×ÙÍ ÚÎÁÞÅÎÉÅÍ, ÉÓÐÏÌØÚÕÅÔÓÑ ÏÄÉÎÏÞÎÙÊ ÓÉÍ×ÏÌ '*'.
+ðÏ ÕÍÏÌÞÁÎÉÀ ÎÅ ÐÒÉÍÅÎÑÅÔÓÑ.
.TP
.IR \-b " | " \-bits
-÷ÍÅÓÔÏ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ËÏÄÁ ÉÓÐÏÌØÚÕÀÔÓÑ ÂÉÔÙ (Ä×ÏÉÞÎÙÅ ÃÉÆÒÙ).
-ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÜÔÏÇÏ ËÌÀÞÁ ×ÍÅÓÔÏ ÏÂÙÞÎÏÇÏ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ
-ÏËÔÅÔÏ× ÉÓÐÏÌØÚÕÀÔÓÑ ÎÁÂÏÒÙ ÉÚ ×ÏÓØÍÉ ÓÉÍ×ÏÌÏ× "1" É "0". ëÁÖÄÁÑ ÓÔÒÏËÁ
-ÐÒÅÄ×ÁÒÑÅÔÓÑ ÎÏÍÅÒÏÍ ÓÔÒÏËÉ × ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÍ ×ÉÄÅ, Á ÚÁ×ÅÒÛÁÅÔÓÑ ÓÉÍ×ÏÌØÎÙÍ
-ÐÒÅÄÓÔÁ×ÌÅÎÉÅÍ (× ×ÉÄÅ ascii ÉÌÉ ebcdic). ëÌÀÞÉ \-p, \-i × ÜÔÏÍ ÒÅÖÉÍÅ
-ÎÅ ÒÁÂÏÔÁÀÔ.
+éÓÐÏÌØÚÏ×ÁÔØ ÂÉÔÙ (Ä×ÏÉÞÎÙÊ ËÏÄ), Á ÎÅ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÅ ÃÉÆÒÙ.
+ðÒÉ ÕËÁÚÁÎÉÉ ÜÔÏÇÏ ÁÒÇÕÍÅÎÔÁ, ×ÍÅÓÔÏ ÏÂÙÞÎÏÇÏ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ
+ÏËÔÅÔÏ×, ÂÕÄÅÔ ÏÔÏÂÒÁÖÁÅÔÓÑ ÎÁÂÏÒ ÉÚ ×ÏÓØÍÉ ÃÉÆÒ "1" É "0". ëÁÖÄÁÑ ÓÔÒÏËÁ
+ÐÒÅÄ×ÁÒÑÅÔÓÑ Å£ ÎÏÍÅÒÏÍ × ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÍ ×ÉÄÅ, Á ÚÁ×ÅÒÛÁÅÔÓÑ × ×ÉÄÅ ÓÉÍ×ÏÌÏ×
+× ËÏÄÉÒÏ×ËÅ ASCII (ÉÌÉ × ËÏÄÉÒÏ×ËÅ EBCDIC). áÒÇÕÍÅÎÔÙ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ
+\-p, \-i × ÜÔÏÍ ÒÅÖÉÍÅ ÎÅ ÐÒÉÍÅÎÑÀÔÓÑ.
.TP
.IR "\-c ËÏÌ " | " \-cols ËÏÌ"
úÁÄÁ£Ô ËÏÌÉÞÅÓÔ×Ï ÏËÔÅÔÏ×
.RI < ËÏÌ >,
ËÏÔÏÒÏÅ ×Ù×ÏÄÉÔÓÑ ÎÁ ËÁÖÄÏÊ ÓÔÒÏËÅ. ðÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ ÚÎÁÞÅÎÉÅ 16
-(\-i: 12, \-ps: 30, \-b: 6).
-íÁËÓÉÍÁÌØÎÏ ÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ: 256.
+(ÄÌÑ ÁÒÇÕÍÅÎÔÁ \-i ÉÓÐÏÌØÚÕÅÔÓÑ 12, ÄÌÑ \-ps \[em] 30, ÄÌÑ \-b \[em] 6).
+íÁËÓÉÍÁÌØÎÏ ÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ \[em] 256.
+íÁËÓÉÍÁÌØÎÏÅ ÚÎÁÞÅÎÉÅ ÎÅ ÐÒÉÍÅÎÑÅÔÓÑ Ó ÁÒÇÕÍÅÎÔÏÍ \-ps. åÓÌÉ Ó ÁÒÇÕÍÅÎÔÏÍ \-ps,
+ÕËÁÚÁÎÏ ÚÎÁÞÅÎÉÅ 0, ÔÏ ÂÕÄÅÔ ×Ù×ÅÄÅÎÁ ÐÒÏÓÔÏ ÏÄÎÁ ÄÌÉÎÎÁÑ ÓÔÒÏËÁ.
+.TP
+.IR \-C " | " \-capitalize
+ðÒÅÏÂÒÁÚÏ×ÁÔØ ÎÁÉÍÅÎÏ×ÁÎÉÑ ÐÅÒÅÍÅÎÎÙÈ × ×ÅÒÈÎÉÊ ÒÅÇÉÓÔÒ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÓÔÉÌÑ
+ÏÔÏÂÒÁÖÅÎÉÑ × ×ÉÄÅ ÐÏÄËÌÀÞÁÅÍÙÈ ÆÁÊÌÏ× ÑÚÙËÁ óÉ,
+ËÏÔÏÒÙÊ ×ËÌÀÞÁÅÔÓÑ ÞÅÒÅÚ ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ \-i.
+.TP
+.I \-d
+ïÔÏÂÒÁÖÁÔØ ÓÍÅÝÅÎÉÅ ÎÅ × ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÍ, Á × ÄÅÓÑÔÉÞÎÏÍ ÆÏÒÍÁÔÅ.
.TP
.IR \-E " | " \-EBCDIC
-éÚÍÅÎÑÅÔ ÓÐÏÓÏ ËÏÄÉÒÏ×ÁÎÉÑ ÓÉÍ×ÏÌÏ× × ÐÒÁ×ÏÊ ËÏÌÏÎËÅ Ó ASCII ÎÁ EBCDIC. üÔÏÔ ËÌÀÞ
-ÎÅ ÉÚÍÅÎÑÅÔ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ. äÁÎÎÙÊ ËÌÀÞ ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ,
-ÅÓÌÉ ÉÓÐÏÌØÚÕÀÔÓÑ ËÌÀÞÉ \-r, \-p ÉÌÉ \-i.
+ïÔÏÂÒÁÖÁÔØ ÓÉÍ×ÏÌÙ × ËÒÁÊÎÅ ÐÒÁ×ÏÊ ËÏÌÏÎËÅ ÎÅ × ËÏÄÉÒÏ×ËÅ ASCII,
+Á × ËÏÄÉÒÏ×ËÅ EBCDIC. üÔÏÔ ÁÒÇÕÍÅÎÔ ÎÅ ×ÌÉÑÅÔ ÎÁ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÅ
+ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÄÁÎÎÙÈ. äÁÎÎÙÊ ÁÒÇÕÍÅÎÔ ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ, ÅÓÌÉ ÉÓÐÏÌØÚÕÀÔÓÑ
+ÁÒÇÕÍÅÎÔÙ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ \-r, \-p ÉÌÉ \-i.
+.TP
+.IR \-e
+éÓÐÏÌØÚÏ×ÁÔØ ÏÂÒÁÔÎÙÊ ÐÏÒÑÄÏË ÂÁÊÔ ÐÒÉ ÏÔÏÂÒÁÖÅÎÉÅ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ
+ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÄÁÎÎÙÈ.
+çÒÕÐÐÁ ÂÁÊÔ ÂÕÄÅÔ ÐÏËÁÚÁÎÁ ËÁË Ä×ÏÉÞÎÏÅ ÓÌÏ×Ï ÏÔ ÍÌÁÄÛÉÈ ÒÁÚÒÑÄÏ× Ë ÓÔÁÒÛÉÍ.
+éÓÐÏÌØÚÕÅÍÏÅ ÐÏ ÕÍÏÌÞÁÎÉÀ ÇÒÕÐÐÉÒÏ×ÁÎÉÅ ÐÏ ÞÅÔÙÒÅ ÂÁÊÔÁ ÍÏÖÅÔ ÂÙÔØ ÉÚÍÅÎÅÎÏ
+ÞÅÒÅÚ ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ
+.RI "" \-g .
+äÅÊÓÔ×ÉÅ ÜÔÏÇÏ ÁÒÇÕÍÅÎÔÁ ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ ÔÏÌØËÏ ÎÁ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÅ
+ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÄÁÎÎÙÈ É ÎÅ ÏËÁÚÙ×ÁÅÔ ×ÌÉÑÎÉÅ ÎÁ ÓÉÍ×ÏÌØÎÏÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ
+× ËÏÄÉÒÏ×ËÅ ASCII (ÉÌÉ EBCDIC).
+áÒÇÕÍÅÎÔÙ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ
+\-r, \-p, \-i ÎÅ ÐÒÉÍÅÎÑÀÔÓÑ × ÜÔÏÍ ÒÅÖÉÍÅ.
.TP
.IR "\-g ÂÁÊÔ " | " \-groupsize ÂÁÊÔ"
-ðÏÚ×ÏÌÑÅÔ ×ÙÐÏÌÎÑÔØ ÇÒÕÐÐÉÒÏ×ËÕ ÕËÁÚÁÎÎÏÇÏ ËÏÌÉÞÅÓÔ×Á
-.RI < ÂÁÊÔÏ× >
-(Ä×Å ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÅ ÃÉÆÒÙ ÉÌÉ ×ÏÓÅÍØ ÂÉÔÏ×), ÏÔÄÅÌÑÑ ÇÒÕÐÐÙ ÄÒÕÇ ÏÔ ÄÒÕÇÁ ÐÒÏÂÅÌÁÍÉ.
+÷ÙÐÏÌÎÉÔØ ÇÒÕÐÐÉÒÏ×ÁÎÉÅ ÕËÁÚÁÎÎÏÇÏ ËÏÌÉÞÅÓÔ×Á
+.RI < ÂÁÊÔ >
+(Ä×Å ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÅ ÃÉÆÒÙ ÉÌÉ ×ÏÓÅÍØ Ä×ÏÉÞÎÙÈ ÃÉÆÒ), ÏÔÄÅÌÑÑ ÇÒÕÐÐÙ
+ÄÒÕÇ ÏÔ ÄÒÕÇÁ ÐÒÏÂÅÌÁÍÉ.
úÎÁÞÅÎÉÅ
.I \-g 0
-ÐÒÉÍÅÎÑÅÔÓÑ ÄÌÑ ÏÔËÁÚÁ ÏÔ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÇÒÕÐÐÉÒÏ×ËÉ.
+ÐÒÉÍÅÎÑÅÔÓÑ ÄÌÑ ÏÔËÁÚÁ ÏÔ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÇÒÕÐÐÉÒÏ×ÁÎÉÑ.
ðÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ ÚÎÁÞÅÎÉÅ
-.RI < ÂÁÊÔ "> ÒÁ×ÎÏÅ " 2
-× ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ É \fI1\fP × ÂÉÔÏ×ÏÍ ÒÅÖÉÍÅ. çÒÕÐÐÉÒÏ×ËÁ ÎÅ ÐÒÉÍÅÎÑÅÔÓÑ
-× ÒÅÖÉÍÁÈ postscript É include.
+.RI < ÂÁÊÔ ">, ÒÁ×ÎÏÅ " 2
+ÐÒÉ ÏÔÏÂÒÁÖÅÎÉÉ × ÐÒÑÍÏÍ ÐÏÒÑÄËÅ ÂÁÊÔ, \fI4\fP ÐÒÉ ÏÔÏÂÒÁÖÅÎÉÉ × ÏÂÒÁÔÎÏÍ
+ÐÏÒÑÄËÅ ÂÁÊÔ É \fI1\fP × Ä×ÏÉÞÎÏÍ ÒÅÖÉÍÅ. çÒÕÐÐÉÒÏ×ËÁ ÎÅ ÐÒÉÍÅÎÑÅÔÓÑ
+× ÒÅÖÉÍÅ PostScript ÉÌÉ include.
.TP
.IR \-h " | " \-help
-÷Ù×ÏÄÉÔ ÓÐÒÁ×ËÕ ÐÏ ÄÏÓÔÕÐÎÙÍ ËÌÀÞÁÍ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ É ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ ÐÒÏÇÒÁÍÍÙ.
+ðÏËÁÚÁÔØ ËÒÁÔËÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÁÒÇÕÍÅÎÔÁÈ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ É ÚÁ×ÅÒÛÉÔØ ÒÁÂÏÔÕ
+ÐÒÏÇÒÁÍÍÙ.
óÏÚÄÁÎÉÅ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÎÅ ×ÙÐÏÌÎÑÅÔÓÑ.
.TP
.IR \-i " | " \-include
-ðÏÚ×ÏÌÑÅÔ ÓÏÚÄÁ×ÁÔØ ×Ù×ÏÄ × ÓÔÉÌÅ ÐÏÄËÌÀÞÁÅÍÙÈ ÚÁÇÏÌÏ×ÏÞÎÙÈ ÆÁÊÌÏ× ÑÚÙËÁ C.
-÷Ù×ÏÄ ÓÏÄÅÒÖÉÔ ÐÏÌÎÏÃÅÎÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÓÔÁÔÉÞÅÓËÏÇÏ ÍÁÓÓÉ×Á ÄÁÎÎÙÈ, ÉÍÑ ËÏÔÏÒÏÇÏ
-ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÉÍÅÎÉ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ, ÅÓÌÉ xxd ÎÅ ÓÞÉÔÙ×ÁÅÔ ÄÁÎÎÙÅ ÉÚ ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ
-××ÏÄÁ.
+óÏÚÄÁ×ÁÔØ ×Ù×ÏÄ × ÓÔÉÌÅ ÐÏÄËÌÀÞÁÅÍÙÈ ÚÁÇÏÌÏ×ÏÞÎÙÈ ÆÁÊÌÏ× ÑÚÙËÁ óÉ.
+÷Ù×ÏÄ ÓÏÄÅÒÖÉÔ ÐÏÌÎÏÃÅÎÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÓÔÁÔÉÞÅÓËÏÇÏ ÍÁÓÓÉ×Á ÄÁÎÎÙÈ, ÎÁÚ×ÁÎÉÅ
+ËÏÔÏÒÏÇÏ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÎÁÉÍÅÎÏ×ÁÎÉÀ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ, ÅÓÌÉ ÐÒÏÇÒÁÍÍÁ xxd
+ÎÅ ÓÞÉÔÙ×ÁÅÔ ÄÁÎÎÙÅ ÉÚ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ××ÏÄÁ.
.TP
.IR "\-l ÄÌÉÎÁ " | " \-len ÄÌÉÎÁ"
-úÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ ÐÏÓÌÅ ÚÁÐÉÓÉ ÚÁÄÁÎÎÏÇÏ × ÐÁÒÁÍÅÔÒÅ
+õËÁÚÙ×ÁÅÔ, ÞÔÏ ÐÏÓÌÅ ÚÁÐÉÓÉ ÚÁÄÁÎÎÏÇÏ × ÐÁÒÁÍÅÔÒÅ
.RI < ÄÌÉÎÁ >
-ËÏÌÉÞÅÓÔ×Á ÏËÔÅÔÏ×.
+ËÏÌÉÞÅÓÔ×Á ÏËÔÅÔÏ×, ÒÁÂÏÔÁ ÐÒÏÇÒÁÍÍÙ ÂÕÄÅÔ ÚÁ×ÅÒÛÅÎÁ.
+.TP
+.I "\-n ÎÁÚ×ÁÎÉÅ " | " \-name ÎÁÚ×ÁÎÉÅ"
+éÚÍÅÎÉÔØ ×ÏÚ×ÒÁÝÁÅÍÏÅ ÎÁÉÍÅÎÏ×ÁÎÉÅ ÐÅÒÅÍÅÎÎÏÊ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÁÒÇÕÍÅÎÔÁ \-i.
+ðÒÉÍÅÎÑÅÔÓÑ Ë ÍÁÓÓÉ×Õ ÂÁÊÔ, ËÏÔÏÒÙÊ ÂÕÄÅÔ ÉÍÅÎÏ×ÁÔØÓÑ ËÁË \fIÎÁÚ×ÁÎÉÅ\fP É ÄÌÉÎÁ
+ÆÁÊÌÁ ËÁË \fIÎÁÚ×ÁÎÉÅ\fP_len.
+.TP
+.I \-o ÓÍÅÝÅÎÉÅ
+õËÁÚÙ×ÁÅÔ ÄÏÂÁ×ÉÔØ
+.RI < ÓÍÅÝÅÎÉÅ >
+× ÏÔÏÂÒÁÖÁÅÍÕÀ ÐÏÚÉÃÉÀ ÆÁÊÌÁ.
.TP
.IR \-p " | " \-ps " | " \-postscript " | " \-plain
-éÓÐÏÌØÚÕÅÔ ÎÅÐÒÅÒÙ×ÎÙÊ ÆÏÒÍÁÔ ×Ù×ÏÄÁ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ËÏÄÁ,
-ÉÚ×ÅÓÔÎÙÊ ËÁË "ÐÒÏÓÔÏÊ" ÓÔÉÌØ ÉÌÉ ÓÔÉÌØ "postscript".
+éÓÐÏÌØÚÏ×ÁÔØ ÎÅÐÒÅÒÙ×ÎÙÊ ÆÏÒÍÁÔÁ ×Ù×ÏÄÁ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ËÏÄÁ,
+ÉÚ×ÅÓÔÎÏÇÏ ËÁË "ÐÒÏÓÔÏÊ" ÓÔÉÌØ ÉÌÉ ÓÔÉÌØ "PostScript".
.TP
.IR \-r " | " \-revert
-éÚÍÅÎÑÅÔ ÓÍÙÓÌ ÏÐÅÒÁÃÉÉ ÎÁ ÐÒÏÔÉ×ÏÐÏÌÏÖÎÙÊ: ÐÏÚ×ÏÌÑÅÔ ×ÙÐÏÌÎÑÔØ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ
-ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ × ÂÉÎÁÒÎÙÊ ËÏÄ (ÉÌÉ ÐÒÉÍÅÎÑÔØ ÒÅÚÕÌØÔÁÔ × ËÁÞÅÓÔ×Å ÚÁÐÌÁÔÙ).
-åÓÌÉ ×Ù×ÏÄ ÐÒÏÉÓÈÏÄÉÔ ÎÅ × ÐÏÔÏË ÓÔÁÎÄÁÒÔÎÏÇÏ ×Ù×ÏÄÁ, ÔÏ xxd ×ÙÐÏÌÎÑÅÔ ÄÏÂÁ×ÌÅÎÉÅ ËÏÄÁ
-Ë ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÍÕ ÆÁÊÌÕ. ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ËÏÍÂÉÎÁÃÉÉ ËÌÀÞÅÊ
+÷ÙÐÏÌÎÉÔØ ÏÐÅÒÁÃÉÀ ÏÂÒÁÔÎÏÇÏ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ, Ô. Å. ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ
+ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ × Ä×ÏÉÞÎÙÊ ËÏÄ (ÉÌÉ ÐÒÉÍÅÎÉÔØ ÒÅÚÕÌØÔÁÔ
+× ËÁÞÅÓÔ×Å ÉÓÐÒÁ×ÌÅÎÉÑ).
+åÓÌÉ ×Ù×ÏÄ ÐÒÏÉÓÈÏÄÉÔ ÎÅ × ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏË ×Ù×ÏÄÁ, ÔÏ ÐÒÏÇÒÁÍÍÁ xxd ×ÙÐÏÌÎÑÅÔ
+ÄÏÂÁ×ÌÅÎÉÅ ËÏÄÁ Ë ×ÙÈÏÄÎÏÍÕ ÆÁÊÌÕ. ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ËÏÍÂÉÎÁÃÉÉ ÁÒÇÕÍÅÎÔÏ×
.I \-r \-p
ÐÒÏÉÓÈÏÄÉÔ ÞÔÅÎÉÅ "ÐÒÏÓÔÏÇÏ" ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÂÅÚ ÉÓÐÏÌØÚÏ×ÁÎÉÑ
-ÉÎÆÏÒÍÁÃÉÉ Ï ÎÏÍÅÒÁÈ ÓÔÒÏË É ËÁËÏÇÏ-ÌÉÂÏ ÓÐÅÃÉÁÌØÎÏÇÏ ÒÁÓËÒÏÑ ËÏÌÏÎÏË. ðÒÏÂÅÌÙ
-É ÓÉÍ×ÏÌÙ ÎÏ×ÏÊ ÓÔÒÏËÉ ÍÏÇÕÔ ×ÓÔÒÅÞÁÔØÓÑ × ÌÀÂÏÍ ÍÅÓÔÅ ÉÓÈÏÄÎÙÈ ÄÁÎÎÙÈ.
+ÉÎÆÏÒÍÁÃÉÉ Ï ÎÏÍÅÒÁÈ ÓÔÒÏË É ËÁËÏÇÏ-ÌÉÂÏ ÓÐÅÃÉÁÌØÎÏÇÏ ÒÁÓÐÒÅÄÅÌÅÎÉÑ ËÏÌÏÎÏË.
+ðÒÏÂÅÌÙ É ÓÉÍ×ÏÌÙ ÎÏ×ÏÊ ÓÔÒÏËÉ ÍÏÇÕÔ ×ÓÔÒÅÞÁÔØÓÑ × ÌÀÂÏÍ ÍÅÓÔÅ ÉÓÈÏÄÎÙÈ ÄÁÎÎÙÈ.
+ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ËÏÍÂÉÎÁÃÉÉ ÁÒÇÕÍÅÎÔÏ×
+.I \-r \-b
+ÂÕÄÅÔ ÐÒÏÉÓÈÏÄÉÔØ ÓÞÉÔÙ×ÁÎÉÅ Ä×ÏÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ×ÍÅÓÔÏ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ.
+.TP
+.IR \-R " " ËÏÇÄÁ
+÷ ×ÙÈÏÄÎÙÈ ÄÁÎÎÙÈ ÏÄÎÉ É ÔÅ ÖÅ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÅ ÚÎÁÞÅÎÉÑ É ÓÔÒÏËÏ×ÙÅ ÚÎÁÞÅÎÉÑ
+ÂÕÄÕÔ ÐÏÄÓ×ÅÞÉ×ÁÔØÓÑ ÏÄÎÉÍ É ÔÅÍ ÖÅ Ã×ÅÔÏÍ. ÷ ÏÓÎÏ×ÎÏÍ ÜÔÏ ÐÏÍÏÇÁÅÔ ÒÁÚÌÉÞÁÔØ
+ÐÅÞÁÔÁÅÍÙÅ É ÎÅÐÅÞÁÔÁÅÍÙÅ ÓÉÍ×ÏÌÙ.
+çÄÅ
+.I \fIËÏÇÄÁ\fP
+ÍÏÖÅÔ ÐÒÉÎÉÍÁÔØ ÚÎÁÞÅÎÉÅ
+.BR never " (ÎÉËÏÇÄÁ), " always " (×ÓÅÇÄÁ), ÉÌÉ " auto " (Á×ÔÏ×ÙÂÏÒ, ÐÏ ÕÍÏÌÞÁÎÉÀ).
+åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÁ ÐÅÒÅÍÅÎÎÁÑ ÏËÒÕÖÅÎÉÑ
+.BR $NO_COLOR
+, ÔÏ Ã×ÅÔÏ×ÁÑ ÐÏÄÓ×ÅÔËÁ ÂÕÄÅÔ ÏÔËÌÀÞÅÎÁ.
.TP
.I \-seek ÓÍÅÝÅÎÉÅ
-ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÐÏÓÌÅ ËÌÀÞÁ
+ðÒÉ ÕËÁÚÁÎÉÉ ÐÏÓÌÅ ÁÒÇÕÍÅÎÔÁ
.I \-r
-: ÄÏÂÁ×ÌÑÔØ ÕËÁÚÁÎÎÏÅ
+, ÂÕÄÅÔ ÄÏÂÁ×ÌÑÔØÓÑ ÕËÁÚÁÎÎÏÅ
.RI < ÓÍÅÝÅÎÉÅ >
Ë ÆÁÊÌÏ×ÙÍ ÐÏÚÉÃÉÑÍ, ÏÂÎÁÒÕÖÅÎÎÙÍ × ÉÓÈÏÄÎÙÈ ÄÁÎÎÙÈ.
.TP
-.I \-s [\+][\-]seek
-îÁÞÉÎÁÅÔ ÒÁÂÏÔÕ Ó ÕËÁÚÁÎÎÏÇÏ ÁÂÓÏÌÀÔÎÏÇÏ (ÉÌÉ ÏÔÎÏÓÉÔÅÌØÎÏÇÏ)
+.I \-s [+][\-]seek
+îÁÞÉÎÁÔØ ÏÂÒÁÂÏÔËÕ Ó ÕËÁÚÁÎÎÏÇÏ ÁÂÓÏÌÀÔÎÏÇÏ (ÉÌÉ ÏÔÎÏÓÉÔÅÌØÎÏÇÏ)
.RI < ÓÍÅÝÅÎÉÑ >
× ÂÁÊÔÁÈ ×Ï ×ÈÏÄÎÏÍ_ÆÁÊÌÅ.
-\fI\+ \fRÕËÁÚÙ×ÁÅÔ, ÞÔÏ ÓÍÅÝÅÎÉÅ Ñ×ÌÑÅÔÓÑ ÏÔÎÏÓÉÔÅÌØÎÙÍ ÐÏ ÏÔÎÏÛÅÎÉÀ
-Ë ÔÅËÕÝÅÊ ÆÁÊÌÏ×ÏÊ ÐÏÚÉÃÉÉ × ÐÏÔÏËÅ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ (ÂÅÓÓÍÙÓÌÅÎÎÏ, ÅÓÌÉ ÞÔÅÎÉÅ
-ÐÒÏÉÓÈÏÄÉÔ ÎÅ ÉÚ ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ). \fI\- \fRÕËÁÚÙ×ÁÅÔ, ÞÔÏ ÄÏÌÖÎÏ ÂÙÔØ ÐÒÏÞÉÔÁÎÏ
-ÕËÁÚÁÎÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÓÉÍ×ÏÌÏ× ÏÔ ËÏÎÃÁ ××ÏÄÁ (ÌÉÂÏ, ÅÓÌÉ ÓÏÞÅÔÁÅÔÓÑ Ó \fI \+ \fR:
-ÐÅÒÅÄ ÔÅËÕÝÅÊ ÐÏÚÉÃÉÉ ÆÁÊÌÁ × ÐÏÔÏËÅ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ).
-åÓÌÉ ËÌÀÞ \-s ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ, ÔÏ xxd ÎÁÞÉÎÁÅÔ ÒÁÂÏÔÕ ÏÔ ÔÅËÕÝÅÊ ÐÏÚÉÃÉÉ × ÆÁÊÌÅ.
+çÄÅ \fI+ \fRÕËÁÚÙ×ÁÅÔ, ÞÔÏ ÓÍÅÝÅÎÉÅ Ñ×ÌÑÅÔÓÑ ÏÔÎÏÓÉÔÅÌØÎÙÍ ÐÏ ÏÔÎÏÛÅÎÉÀ
+Ë ÔÅËÕÝÅÊ ÐÏÚÉÃÉÉ ÄÁÎÎÙÈ × ÓÔÁÎÄÁÒÔÎÏÍ ÐÏÔÏËÅ ××ÏÄÁ (ÂÅÓÓÍÙÓÌÅÎÎÏ, ÅÓÌÉ ÞÔÅÎÉÅ
+ÐÒÏÉÓÈÏÄÉÔ ÎÅ ÉÚ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ××ÏÄÁ). á ÐÁÒÁÍÅÔÒ \fI\- \fRÕËÁÚÙ×ÁÅÔ,
+ÞÔÏ ÄÏÌÖÎÏ ÂÙÔØ ÐÒÏÞÉÔÁÎÏ ÕËÁÚÁÎÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÓÉÍ×ÏÌÏ× ÏÔ ËÏÎÃÁ ××ÏÄÁ (ÌÉÂÏ,
+ÅÓÌÉ ÏÄÎÏ×ÒÅÍÅÎÎÏ Ó ÐÁÒÁÍÅÔÒÏÍ \fI+\fR, ÔÏ ÐÅÒÅÄ ÔÅËÕÝÅÊ ÐÏÚÉÃÉÅÊ ÄÁÎÎÙÈ
+× ÓÔÁÎÄÁÒÔÎÏÍ ÐÏÔÏËÅ ××ÏÄÁ).
+åÓÌÉ ÁÒÇÕÍÅÎÔ \-s ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ, ÔÏ ÐÒÏÇÒÁÍÍÁ xxd ÎÁÞÉÎÁÅÔ ÏÂÒÁÂÏÔËÕ
+ÏÔ ÔÅËÕÝÅÊ ÐÏÚÉÃÉÉ × ÆÁÊÌÅ.
.TP
.I \-u
-éÓÐÏÌØÚÕÅÔ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÅ ÃÉÆÒÙ × ×ÅÒÈÎÅÍ ÒÅÇÉÓÔÒÅ. ðÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÀÔÓÑ ÃÉÆÒÙ ×
-ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ ÓÉÍ×ÏÌÏ×.
+õËÁÚÙ×ÁÅÔ, ÞÔÏ × ×Ù×ÏÄÅ ÏÔÏÂÒÁÖÁÔØ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÅ ÃÉÆÒÙ × ×ÅÒÈÎÅÍ ÒÅÇÉÓÔÒÅ.
+ðÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÀÔÓÑ ÓÉÍ×ÏÌÙ × ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ ÓÉÍ×ÏÌÏ×.
.TP
.IR \-v " | " \-version
-ïÔÏÂÒÁÖÁÅÔ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ.
-.SH ðïä÷ïäîùå ëáíîé
+ðÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ É ÚÁ×ÅÒÛÉÔØ ÒÁÂÏÔÕ.
+.SH îåëïôïòùå òáúÿñóîåîéñ
.PP
+ðÒÉ ÕËÁÚÁÎÉÉ ËÏÍÁÎÄÙ
.I xxd \-r
-ÏÂÌÁÄÁÅÔ ×ÓÔÒÏÅÎÎÙÍ ÉÎÔÅÌÌÅËÔÏÍ ÄÌÑ ÒÁÓÐÏÚÎÁ×ÁÎÉÑ ÉÎÆÏÒÍÁÃÉÉ Ï ÎÏÍÅÒÁÈ ÓÔÒÏË.
+ÐÒÉ ÚÁÐÕÓËÅ ÐÒÏÇÒÁÍÍÙ, ÂÕÄÅÔ ÐÒÉÍÅÎÑÔØÓÑ ÎÅËÉÊ ×ÓÔÒÏÅÎÎÙÊ ÁÌÇÏÒÉÔÍ
+ÄÌÑ ÒÁÓÐÏÚÎÁ×ÁÎÉÑ ÉÎÆÏÒÍÁÃÉÉ Ï ÎÏÍÅÒÁÈ ÓÔÒÏË.
åÓÌÉ ×ÏÚÍÏÖÅÎ ÐÏÉÓË ÐÏ ×ÈÏÄÎÏÍÕ ÆÁÊÌÕ, ÔÏ ÎÏÍÅÒÁ ÓÔÒÏË × ÎÁÞÁÌÅ ËÁÖÄÏÊ ÓÔÒÏËÉ
-ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÍÏÇÕÔ ÂÙÔØ ÎÅÕÐÏÒÑÄÏÞÅÎÎÙÍÉ, ÎÅËÏÔÏÒÙÅ ÓÔÒÏËÉ ÍÏÇÕÔ
-ÂÙÔØ ÐÒÏÐÕÝÅÎÙ ÉÌÉ ÐÅÒÅÓÅËÁÔØÓÑ ÄÒÕÇ Ó ÄÒÕÇÏÍ. ÷ ÜÔÉÈ ÓÌÕÞÁÑÈ xxd ÉÓÐÏÌØÚÕÅÔ
-lseek(2) ÄÌÑ ÐÅÒÅÈÏÄÁ Ë ÓÌÅÄÕÀÝÅÊ ÐÏÚÉÃÉÉ. åÓÌÉ ÐÏÉÓË ÐÏ ×ÈÏÄÎÏÍÕ ÆÁÊÌÕ
-ÎÅ×ÏÚÍÏÖÅÎ, ÔÏ ÄÏÐÕÓÔÉÍÙ ÔÏÌØËÏ ÐÒÏÐÕÓËÉ ÓÔÒÏË, ËÏÔÏÒÙÅ ÚÁÐÏÌÎÑÀÔÓÑ ÎÕÌÅ×ÙÍÉ
-ÂÁÊÔÁÍÉ.
+ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÍÏÇÕÔ ÂÙÔØ ÎÅÕÐÏÒÑÄÏÞÅÎÎÙÍÉ, ÎÅËÏÔÏÒÙÅ ÓÔÒÏËÉ
+ÍÏÇÕÔ ÂÙÔØ ÐÒÏÐÕÝÅÎÙ ÉÌÉ ÐÅÒÅÓÅËÁÔØÓÑ ÄÒÕÇ Ó ÄÒÕÇÏÍ. ÷ ÜÔÉÈ ÓÌÕÞÁÑÈ ÐÒÏÇÒÁÍÍÁ
+xxd ÉÓÐÏÌØÚÕÅÔ ÆÕÎËÃÉÀ lseek(2) ÄÌÑ ÐÅÒÅÈÏÄÁ Ë ÓÌÅÄÕÀÝÅÊ ÐÏÚÉÃÉÉ. åÓÌÉ ÐÏÉÓË ÐÏ
+×ÈÏÄÎÏÍÕ ÆÁÊÌÕ ÎÅ×ÏÚÍÏÖÅÎ, ÔÏ ÄÏÐÕÓÔÉÍÙ ÔÏÌØËÏ ÐÒÏÐÕÓËÉ ÓÔÒÏË, ËÏÔÏÒÙÅ
+ÚÁÐÏÌÎÑÀÔÓÑ ÎÕÌÅ×ÙÍÉ ÂÁÊÔÁÍÉ.
.PP
+éÓÐÏÌØÚÏ×ÁÎÉÅ ËÏÍÁÎÄÙ
.I xxd \-r
-ÎÉËÏÇÄÁ ÎÅ ×Ù×ÏÄÉÔ ÓÏÏÂÝÅÎÉÊ Ï ÏÛÉÂËÁÈ. íÕÓÏÒ ÐÒÏÐÕÓËÁÅÔÓÑ ÍÏÌÞÁ.
+ÐÒÉ×ÏÄÉÔ Ë ÔÏÍÕ, ÞÔÏ ÓÏÏÂÝÅÎÉÑ Ï ÏÛÉÂËÁÈ ÎÅ ÂÕÄÕÔ ÏÔÏÂÒÁÖÁÔØÓÑ.
+ðÏÓÔÏÒÏÎÎÉÅ ÄÁÎÎÙÅ ÐÒÏÓÔÏ ÍÏÌÞÁ ÐÒÏÐÕÓËÁÀÔÓÑ.
.PP
-ðÒÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÉ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ ÐÒÅÄÓÔÁ×ÌÅÎÉÊ ÂÉÎÁÒÎÙÈ ÆÁÊÌÏ× ÏÂÒÁÝÁÊÔÅ
-×ÎÉÍÁÎÉÅ, ÞÔÏ
+ðÒÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÉ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ Ä×ÏÉÞÎÙÈ ÆÁÊÌÏ×, ÏÂÒÁÝÁÊÔÅ
+×ÎÉÍÁÎÉÅ, ÞÔÏ ÐÏ ËÏÍÁÎÄÅ
.I xxd \-r
-ÐÒÏÐÕÓËÁÅÔ × ÓÔÒÏËÅ ××ÏÄÁ ÌÀÂÙÅ ÄÁÎÎÙÅ ÐÏÓÌÅ ÐÒÏÞÔÅÎÉÑ ÄÏÓÔÁÔÏÞÎÏÇÏ ËÏÌÉÞÅÓÔ×Á
-ËÏÌÏÎÏË ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ ÄÁÎÎÙÈ (ÓÍ. ËÌÀÞ \-c). üÔÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÉÚÍÅÎÅÎÉÑ,
-×ÎÅÓÅÎÎÙÅ × ËÏÌÏÎËÉ Ó ÐÅÞÁÔÎÙÍÉ ÓÉÍ×ÏÌÁÍÉ ascii (ÉÌÉ ebcdic), ×ÓÅÇÄÁ ÉÇÎÏÒÉÒÕÀÔÓÑ.
+, ÐÏÓÌÅ ÓÞÉÔÙ×ÁÎÉÑ ÄÏÓÔÁÔÏÞÎÏÇÏ ËÏÌÉÞÅÓÔ×Á ËÏÌÏÎÏË ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ ÄÁÎÎÙÈ
+(ÓÍ. ÁÒÇÕÍÅÎÔ \-c), × ÓÔÒÏËÅ ××ÏÄÁ ÎÅ ÂÕÄÕÔ ÏÂÒÁÂÁÔÙ×ÁÔØÓÑ ÏÓÔÁÌØÎÙÅ ÄÁÎÎÙÅ.
+üÔÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÉÚÍÅÎÅÎÉÑ, ×ÎÅÓ£ÎÎÙÅ × ËÏÌÏÎËÅ Ó ÔÅËÓÔÏÍ × ËÏÄÉÒÏ×ËÅ
+ASCII (ÉÌÉ EBCDIC), ×ÓÅÇÄÁ ÉÇÎÏÒÉÒÕÀÔÓÑ.
ðÒÉ ÏÂÒÁÔÎÏÍ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÉ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ × ÓÔÉÌÅ
-postscript Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ xxd \-r \-p ËÏÌÉÞÅÓÔ×Ï ËÏÌÏÎÏË ÎÅ ÕÞÉÔÙ×ÁÅÔÓÑ.
-÷ ÜÔÏÍ ÓÌÕÞÁÅ ÒÁÓÐÏÚÎÁÀÔÓÑ ×ÓÅ ÓÉÍ×ÏÌÙ, ËÏÔÏÒÙÅ ÐÏÈÏÖÉ ÎÁ ÐÁÒÙ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ ÃÉÆÒ.
+PostScript Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ xxd \-r \-p ËÏÌÉÞÅÓÔ×Ï ËÏÌÏÎÏË ÎÅ ÕÞÉÔÙ×ÁÅÔÓÑ.
+÷ ÜÔÏÍ ÓÌÕÞÁÅ ÒÁÓÐÏÚÎÁÀÔÓÑ ×ÓÅ ÓÉÍ×ÏÌÙ, ËÏÔÏÒÙÅ ÐÏÈÏÖÉ ÎÁ ÐÁÒÙ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ
+ÃÉÆÒ.
.PP
ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ ÎÁ ÒÁÚÌÉÞÉÅ ÍÅÖÄÕ ËÏÍÁÎÄÁÍÉ
.PP
@@ -186,125 +250,139 @@ postscript Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ xxd \-r \-p ËÏÌÉÞÅÓÔ×Ï ËÏÌÏÎÏË ÎÅ ÕÞÉÔÙ×ÁÅÔÓÑ.
.I xxd \-s \+seek
ÍÏÖÅÔ ÏÔÌÉÞÁÔØÓÑ ÏÔ
.I xxd \-s seek,
-ÐÏÓËÏÌØËÕ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ "ÏÔÍÏÔÁÔØ" ÄÁÎÎÙÅ ÎÁ ×ÈÏÄÅ ÎÁÚÁÄ, ÉÓÐÏÌØÚÕÅÔÓÑ ×ÙÚÏ× lseek(2).
-ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ `+' ÐÏ×ÅÄÅÎÉÅ ÂÕÄÅÔ ÏÔÌÉÞÁÔØÓÑ, ÅÓÌÉ ×ÈÏÄÎÙÅ ÄÁÎÎÙÅ
-ÐÏÓÔÕÐÁÀÔ Ó ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ, Á ÐÏÚÉÃÉÑ × ÆÁÊÌÅ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ ÎÅ ÎÁÈÏÄÉÔÓÑ
-× ÎÁÞÁÌÅ ÆÁÊÌÁ Ë ÔÏÍÕ ÍÏÍÅÎÔÕ, ËÏÇÄÁ ÐÒÏÇÒÁÍÍÁ xxd ÚÁÐÕÝÅÎÁ É ÐÒÉÓÔÕÐÁÅÔ Ë ÞÔÅÎÉÀ ××ÏÄÁ.
+ÐÏÓËÏÌØËÕ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ "ÏÔÍÏÔÁÔØ" ÄÁÎÎÙÅ ÎÁ ×ÈÏÄÅ ÎÁÚÁÄ, ÉÓÐÏÌØÚÕÅÔÓÑ ×ÙÚÏ×
+ÆÕÎËÃÉÉ lseek(2).
+ðÒÉ ÕËÁÚÁÎÉÉ ÐÁÒÁÍÅÔÒÁ '+' ÐÏ×ÅÄÅÎÉÅ ÂÕÄÅÔ ÏÔÌÉÞÁÔØÓÑ, ÅÓÌÉ ×ÈÏÄÎÙÅ ÄÁÎÎÙÅ
+ÐÏÓÔÕÐÁÀÔ ÓÏ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ××ÏÄÁ, Á ÐÏÚÉÃÉÑ × ÆÁÊÌÅ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ
+ÎÅ ÎÁÈÏÄÉÔÓÑ × ÎÁÞÁÌÅ ÆÁÊÌÁ Ë ÔÏÍÕ ÍÏÍÅÎÔÕ, ËÏÇÄÁ ÐÒÏÇÒÁÍÍÁ xxd ÚÁÐÕÝÅÎÁ
+É ÐÒÉÓÔÕÐÁÅÔ Ë ÞÔÅÎÉÀ ××ÏÄÁ.
îÉÖÅÓÌÅÄÕÀÝÉÅ ÐÒÉÍÅÒÙ ÐÏÍÏÇÕÔ ÐÒÏÑÓÎÉÔØ (ÉÌÉ ÅÝ£ ÂÏÌØÛÅ ÚÁÐÕÔÁÔØ!) ÓÉÔÕÁÃÉÀ...
.PP
-ïÔÍÏÔËÁ ÎÁÚÁÄ ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ; ÎÅÏÂÈÏÄÉÍÏ, ÐÏÓËÏÌØËÕ 'cat' ÕÖÅ ×ÙÐÏÌÎÉÌÁ
-ÞÔÅÎÉÅ ÄÏ ËÏÎÃÁ ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ:
+ïÔÍÏÔËÁ ÐÏÔÏËÁ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ ÎÁÚÁÄ ÎÅÏÂÈÏÄÉÍÁ, ÐÏÓËÏÌØËÕ ÐÒÏÇÒÁÍÍÁ 'cat'
+ÕÖÅ ×ÙÐÏÌÎÉÌÁ ÞÔÅÎÉÅ ÄÁÎÎÙÈ ÄÏ ËÏÎÃÁ ÉÚ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ××ÏÄÁ:
.PP
-\fI% sh \-c 'cat > plain_copy; xxd \-s 0 > hex_copy' < file
+\fI% sh \-c "cat > plain_copy; xxd \-s 0 > hex_copy" < file\fR
.PP
-÷Ù×ÏÄ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÏÔ ÐÏÚÉÃÉÉ × ÆÁÊÌÅ 0x480
-(= 1024+128).
-óÉÍ×ÏÌ `+' ÏÚÎÁÞÁÅÔ "ÏÔÎÏÓÉÔÅÌØÎÏ ÔÅËÕÝÅÊ ÐÏÚÉÃÉÉ", ÔÁËÉÍ ÏÂÒÁÚÏÍ `128' ÄÏÂÁ×ÌÑÅÔÓÑ
-Ë ÐÅÒ×ÏÍÕ ËÉÌÏÂÁÊÔÕ, ÇÄÅ ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ dd:
+÷Ù×ÏÄ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÏÔ ÐÏÚÉÃÉÉ × ÆÁÊÌÅ 0x480 (=1024+128).
+ðÁÒÁÍÅÔÒ '+' ÏÚÎÁÞÁÅÔ "ÏÔÎÏÓÉÔÅÌØÎÏ ÔÅËÕÝÅÊ ÐÏÚÉÃÉÉ", ÔÁËÉÍ ÏÂÒÁÚÏÍ '128'
+ÄÏÂÁ×ÌÑÅÔÓÑ Ë ÐÅÒ×ÏÍÕ ËÉÌÏÂÁÊÔÕ, ÇÄÅ ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ ÐÒÏÇÒÁÍÍÁ dd:
.PP
-\fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +128 > hex_snippet' < file
+\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +128 \> hex_snippet" < file\fR
.PP
-÷Ù×ÏÄ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÏÔ ÐÏÚÉÃÉÉ × ÆÁÊÌÅ 0x100
-(= 1024-768):
+÷Ù×ÏÄ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÏÔ ÐÏÚÉÃÉÉ × ÆÁÊÌÅ 0x100 (=1024\[mi]768):
.PP
-\fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +-768 > hex_snippet' < file
+\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +\-768 \> hex_snippet" < file\fR
.PP
-÷ ÔÏ ÖÅ ×ÒÅÍÑ, ÓÌÅÄÕÅÔ ÚÁÍÅÔÉÔØ, ÞÔÏ ÐÏÄÏÂÎÙÅ ÓÉÔÕÁÃÉÉ ×ÓÔÒÅÞÁÀÔÓÑ ÄÏ×ÏÌØÎÏ ÒÅÄËÏ,
-ÔÁË ÞÔÏ ÓÉÍ×ÏÌ `+' ÏÂÙÞÎÏ ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ. á×ÔÏÒ ÐÒÅÄÐÏÞÉÔÁÅÔ ÎÁÂÌÀÄÁÔØ ÚÁ ÒÁÂÏÔÏÊ
-xxd Ó ÐÏÍÏÝØÀ strace(1) ÉÌÉ truss(1) × ÔÅÈ ÓÌÕÞÁÑÈ, ËÏÇÄÁ ÐÒÉÍÅÎÑÅÔÓÑ ËÌÀÞ
+÷ ÔÏ ÖÅ ×ÒÅÍÑ, ÓÌÅÄÕÅÔ ÚÁÍÅÔÉÔØ, ÞÔÏ ÐÏÄÏÂÎÙÅ ÓÉÔÕÁÃÉÉ ×ÓÔÒÅÞÁÀÔÓÑ ÄÏ×ÏÌØÎÏ
+ÒÅÄËÏ, ÔÁË ÞÔÏ ÐÁÒÁÍÅÔÒ '+' ÏÂÙÞÎÏ ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ. á×ÔÏÒ ÐÒÅÄÐÏÞÉÔÁÅÔ ÎÁÂÌÀÄÁÔØ
+ÚÁ ÒÁÂÏÔÏÊ ÐÒÏÇÒÁÍÍÙ xxd Ó ÐÏÍÏÝØÀ ÉÎÓÔÒÕÍÅÎÔÏ× strace(1) ÉÌÉ truss(1) × ÔÅÈ
+ÓÌÕÞÁÑÈ, ËÏÇÄÁ ÐÒÉÍÅÎÑÅÔÓÑ ÁÒÇÕÍÅÎÔ
\-s.
.SH ðòéíåòù
.PP
.br
-÷Ù×ÅÓÔÉ ×Ó£, ËÒÏÍÅ ÐÅÒ×ÙÈ ÔÒ£È ÓÔÒÏË (0x30 ÂÁÊÔÏ×) ÆÁÊÌÁ
-.B file
+÷Ù×ÅÓÔÉ ×Ó£, ËÒÏÍÅ ÐÅÒ×ÙÈ ÔÒ£È ÓÔÒÏË (0x30 ÂÁÊÔ)
+.BR ÆÁÊÌÁ
:
-.PP
-\fI% xxd \-s 0x30 file
+.br
+\fI% xxd \-s 0x30 file\fR
.PP
.br
-÷Ù×ÅÓÔÉ ÔÒÉ ÓÔÒÏËÉ (0x30 ÂÁÊÔÏ×) ÏÔ ËÏÎÃÁ ÆÁÊÌÁ
-.B file
+÷Ù×ÅÓÔÉ ÔÒÉ ÓÔÒÏËÉ (0x30 ÂÁÊÔ) ÏÔ ËÏÎÃÁ
+.BR ÆÁÊÌÁ
:
-.PP
-\fI% xxd \-s \-0x30 file
-.PP
.br
-÷Ù×ÅÓÔÉ 120 ÂÁÊÔÏ× × ×ÉÄÅ ÎÅÐÒÅÒÙ×ÎÏÇÏ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ
-ÐÏ 20 ÏËÔÅÔÏ× × ÓÔÒÏËÅ:
+\fI% xxd \-s \-0x30 file\fR
.PP
+.br
+÷Ù×ÅÓÔÉ 120 ÂÁÊÔ × ×ÉÄÅ ÎÅÐÒÅÒÙ×ÎÏÇÏ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ
+ÐÏ 20 ÏËÔÅÔÏ× × ÓÔÒÏËÅ
+.br
+(ÜÔÏÔ ÐÒÉÍÅÒ ÄÌÑ ÓÐÒÁ×ÏÞÎÉËÁ xxd.1 ÎÁ ÁÎÇÌÉÊÓËÏÍ ÑÚÙËÅ, ÄÌÑ ÒÕÓÓËÏÇÏ ÑÚÙËÁ ÂÕÄÅÔ
+ÎÅÍÎÏÇÏ ÄÒÕÇÏÊ ÒÅÚÕÌØÔÁÔ):
+.br
\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
.br
-2e544820585844203120224d616e75616c207061
+2e544820585844203120224d6179203230323422
.br
-676520666f7220787864220a2e5c220a2e5c2220
+20224d616e75616c207061676520666f72207878
.br
-32317374204d617920313939360a2e5c22204d61
+64220a2e5c220a2e5c222032317374204d617920
.br
-6e207061676520617574686f723a0a2e5c222020
+313939360a2e5c22204d616e2070616765206175
.br
-2020546f6e79204e7567656e74203c746f6e7940
+74686f723a0a2e5c2220202020546f6e79204e75
.br
-7363746e7567656e2e7070702e67752e6564752e
+67656e74203c746f6e79407363746e7567656e2e
.br
-.PP
+
+.br
+÷Ù×ÅÓÔÉ ÐÅÒ×ÙÅ 120 ÂÁÊÔ ÜÔÏÇÏ ÓÐÒÁ×ÏÞÎÉËÁ ÐÏ 12 ÏËÔÅÔÏ× × ÓÔÒÏËÅ
+.br
+(ÜÔÏÔ ÐÒÉÍÅÒ ÄÌÑ ÓÐÒÁ×ÏÞÎÉËÁ xxd.1 ÎÁ ÁÎÇÌÉÊÓËÏÍ ÑÚÙËÅ, ÄÌÑ ÒÕÓÓËÏÇÏ ÑÚÙËÁ ÂÕÄÅÔ
+ÎÅÍÎÏÇÏ ÄÒÕÇÏÊ ÒÅÚÕÌØÔÁÔ):
.br
-÷Ù×ÅÓÔÉ ÐÅÒ×ÙÅ 120 ÂÁÊÔÏ× ÜÔÏÊ ÓÔÒÁÎÉÃÙ ÓÐÒÁ×ÏÞÎÉËÁ ÐÏ 12 ÏËÔÅÔÏ× × ÓÔÒÏËÅ:
-.PP
\fI% xxd \-l 120 \-c 12 xxd.1\fR
.br
-0000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
+00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
.br
-000000c: 616e 7561 6c20 7061 6765 2066 anual page f
+0000000c: 6179 2032 3032 3422 2022 4d61 ay 2024" "Ma
.br
-0000018: 6f72 2078 7864 220a 2e5c 220a or xxd"..\\".
+00000018: 6e75 616c 2070 6167 6520 666f nual page fo
.br
-0000024: 2e5c 2220 3231 7374 204d 6179 .\\" 21st May
+00000024: 7220 7878 6422 0a2e 5c22 0a2e r xxd"..\\"..
.br
-0000030: 2031 3939 360a 2e5c 2220 4d61 1996..\\" Ma
+00000030: 5c22 2032 3173 7420 4d61 7920 \\" 21st May
.br
-000003c: 6e20 7061 6765 2061 7574 686f n page autho
+0000003c: 3139 3936 0a2e 5c22 204d 616e 1996..\\" Man
.br
-0000048: 723a 0a2e 5c22 2020 2020 546f r:..\\" To
+00000048: 2070 6167 6520 6175 7468 6f72 page author
.br
-0000054: 6e79 204e 7567 656e 7420 3c74 ny Nugent <t
+00000054: 3a0a 2e5c 2220 2020 2054 6f6e :..\\" Ton
.br
-0000060: 6f6e 7940 7363 746e 7567 656e ony@sctnugen
+00000060: 7920 4e75 6765 6e74 203c 746f y Nugent <to
.br
-000006c: 2e70 7070 2e67 752e 6564 752e .ppp.gu.edu.
+0000006c: 6e79 4073 6374 6e75 6765 6e2e ny@sctnugen.
.PP
.br
-ðÏËÁÚÁÔØ ÄÁÔÕ ÉÚ ÆÁÊÌÁ xxd.1:
+ðÏËÁÚÁÔØ ÄÁÔÕ ÉÚ ÆÁÊÌÁ
+.B xxd.1
+.br
+(ÜÔÏÔ ÐÒÉÍÅÒ ÄÌÑ ÓÐÒÁ×ÏÞÎÉËÁ xxd.1 ÎÁ ÁÎÇÌÉÊÓËÏÍ ÑÚÙËÅ, ÄÌÑ ÒÕÓÓËÏÇÏ ÑÚÙËÁ ÂÕÄÅÔ
+ÎÅÍÎÏÇÏ ÄÒÕÇÁÑ ËÏÍÁÎÄÁ, ÎÁÐÒÉÍÅÒ, ÄÌÑ UTF-8 \[em] \flxxd \-s 0x50 \-l 13 \-c 13 xxd.1\fR):
.PP
-\fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
+\fI% xxd \-s 0x33 \-l 13 \-c 13 xxd.1\fR
.br
-0000028: 3231 7374 204d 6179 2031 3939 21st May 199
+00000033: 3231 7374 204d 6179 2031 3939 36 21st May 1996
.PP
.br
óËÏÐÉÒÏ×ÁÔØ
.B ×ÈÏÄÎÏÊ_ÆÁÊÌ
×
.B ×ÙÈÏÄÎÏÊ_ÆÁÊÌ
-Ó ÄÏÂÁ×ÌÅÎÉÅÍ 100 ÂÁÊÔÏ× ÓÏ ÚÎÁÞÅÎÉÅÍ 0x00 × ÎÁÞÁÌÏ ÆÁÊÌÁ:
-.PP
+Ó ÄÏÂÁ×ÌÅÎÉÅÍ 100 ÂÁÊÔ ÓÏ ÚÎÁÞÅÎÉÅÍ 0x00 × ÎÁÞÁÌÏ ÆÁÊÌÁ:
+.br
\fI% xxd ×ÈÏÄÎÏÊ_ÆÁÊÌ | xxd \-r \-s 100 \> ×ÙÈÏÄÎÏÊ_ÆÁÊÌ\fR
.br
-.PP
+
.br
-úÁÍÅÎÉÔØ ÄÁÔÕ × ÆÁÊÌÅ xxd.1:
+úÁÍÅÎÉÔØ ÄÁÔÕ × ÆÁÊÌÅ
+.B xxd.1
+.br
+(ÜÔÏÔ ÐÒÉÍÅÒ ÄÌÑ ÓÐÒÁ×ÏÞÎÉËÁ xxd.1 ÎÁ ÁÎÇÌÉÊÓËÏÍ ÑÚÙËÅ, ÄÌÑ ÒÕÓÓËÏÇÏ ÑÚÙËÁ ÂÕÄÕÔ
+ÎÅÍÎÏÇÏ ÄÒÕÇÉÅ ËÏÍÁÎÄÙ):
.PP
-\fI% echo '0000029: 3574 68' | xxd \-r \- xxd.1\fR
+\fI% echo "0000034: 3574 68" | xxd \-r \- xxd.1\fR
.br
-\fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
+\fI% xxd \-s 0x33 \-l 13 \-c 13 xxd.1\fR
.br
-0000028: 3235 7468 204d 6179 2031 3939 25th May 199
+00000033: 3235 7468 204d 6179 2031 3939 36 25th May 1996
.PP
.br
-óÏÚÄÁÔØ 65537-ÂÁÊÔÎÙÊ ÆÁÊÌ, ×ÓÅ ÂÁÊÔÙ ËÏÔÏÒÏÇÏ ÉÍÅÀÔ ÚÎÁÞÅÎÉÅ
-0x00, ËÒÏÍÅ ÐÏÓÌÅÄÎÅÇÏ ÂÁÊÔÁ, ËÏÔÏÒÙÊ ÄÏÌÖÅÎ ÉÍÅÔØ ÚÎÁÞÅÎÉÅ 'A'
-(0x41):
+óÏÚÄÁÔØ 65537-ÂÁÊÔÎÙÊ ÆÁÊÌ, ×ÓÅ ÂÁÊÔÙ ËÏÔÏÒÏÇÏ ÉÍÅÀÔ ÚÎÁÞÅÎÉÅ 0x00,
+ËÒÏÍÅ ÐÏÓÌÅÄÎÅÇÏ ÂÁÊÔÁ, ËÏÔÏÒÙÊ ÄÏÌÖÅÎ ÉÍÅÔØ ÚÎÁÞÅÎÉÅ 'A' (0x41):
.PP
-\fI% echo '010000: 41' | xxd \-r \> file\fR
+\fI% echo "010000: 41" | xxd \-r > file\fR
.PP
.br
óÏÚÄÁÔØ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÜÔÏÇÏ ÆÁÊÌÁ Ó
@@ -312,97 +390,97 @@ xxd Ó ÐÏÍÏÝØÀ strace(1) ÉÌÉ truss(1) × ÔÅÈ ÓÌÕÞÁÑÈ, ËÏÇÄÁ ÐÒÉÍÅÎÑÅÔÓÑ ËÌÀÞ
.PP
\fI% xxd \-a \-c 12 file\fR
.br
-0000000: 0000 0000 0000 0000 0000 0000 ............
+00000000: 0000 0000 0000 0000 0000 0000 ............
.br
*
.br
-000fffc: 0000 0000 40 ....A
+0000fffc: 0000 0000 41 ....A
.PP
óÏÚÄÁÔØ 1-ÂÁÊÔÎÙÊ ÆÁÊÌ, ÓÏÄÅÒÖÁÝÉÊ ÓÉÍ×ÏÌ 'A'.
-þÉÓÌÏ ÐÏÓÌÅ '\-r \-s' ÄÏÂÁ×ÌÑÅÔÓÑ Ë ÎÏÍÅÒÁÍ ÓÔÒÏË, ÎÁÊÄÅÎÎÙÍ × ÆÁÊÌÅ;
+þÉÓÌÏ ÐÏÓÌÅ ÁÒÇÕÍÅÎÔÏ× '\-r \-s' ÄÏÂÁ×ÌÑÅÔÓÑ Ë ÎÏÍÅÒÁÍ ÓÔÒÏË, ÎÁÊÄÅÎÎÙÍ × ÆÁÊÌÅ,
ÉÎÁÞÅ ÇÏ×ÏÒÑ, ÐÒÅÄÛÅÓÔ×ÕÀÝÉÅ ÂÁÊÔÙ ÐÒÏÐÕÓËÁÀÔÓÑ:
.PP
-\fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> file\fR
-.PP
-xxd ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ × ËÁÞÅÓÔ×Å ÆÉÌØÔÒÁ × ÒÅÄÁËÔÏÒÅ, ÎÁÐÒÉÍÅÒ ×
-.B vim(1),
-ÞÔÏÂÙ ÓÏÚÄÁÔØ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÏÂÌÁÓÔÉ ÍÅÖÄÕ
-ÏÔÍÅÔËÁÍÉ `a' É `z':
+\fI% echo '010000: 41' | xxd \-r \-s \-0x10000 > file\fR
.PP
+ðÒÏÇÒÁÍÍÕ xxd ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ × ËÁÞÅÓÔ×Å ÆÉÌØÔÒÁ × ÒÅÄÁËÔÏÒÅ, ÎÁÐÒÉÍÅÒ ×
+.B vim(1)
+, ÞÔÏÂÙ ÓÏÚÄÁÔØ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÏÂÌÁÓÔÉ ÍÅÖÄÕ
+ÚÁËÌÁÄËÁÍÉ 'a' É 'z':
+.br
\fI:'a,'z!xxd\fR
.PP
-÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ xxd × ËÁÞÅÓÔ×Å ÆÉÌØÔÒÁ × ÒÅÄÁËÔÏÒÅ, ÎÁÐÒÉÍÅÒ ×
-.B vim(1),
-ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÄÁÎÎÙÈ ÉÚ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ
-ÍÅÖÄÕ ÏÔÍÅÔËÁÍÉ `a' É `z':
-.PP
+íÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÏÇÒÁÍÍÕ xxd × ËÁÞÅÓÔ×Å ÆÉÌØÔÒÁ × ÒÅÄÁËÔÏÒÅ, ÎÁÐÒÉÍÅÒ ×
+.B vim(1)
+, ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÄÁÎÎÙÈ ÉÚ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ
+ÍÅÖÄÕ ÚÁËÌÁÄËÁÍÉ 'a' É 'z':
+.br
\fI:'a,'z!xxd \-r\fR
.PP
-÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ xxd × ËÁÞÅÓÔ×Å ÆÉÌØÔÒÁ × ÒÅÄÁËÔÏÒÅ, ÎÁÐÒÉÍÅÒ ×
-.B vim(1),
-ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÄÁÎÎÙÈ ÉÚ ÅÄÉÎÓÔ×ÅÎÎÏÊ ÓÔÒÏËÉ
+íÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÏÇÒÁÍÍÕ xxd × ËÁÞÅÓÔ×Å ÆÉÌØÔÒÁ × ÒÅÄÁËÔÏÒÅ, ÎÁÐÒÉÍÅÒ ×
+.B vim(1)
+, ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÄÁÎÎÙÈ ÉÚ ÅÄÉÎÓÔ×ÅÎÎÏÊ ÓÔÒÏËÉ
ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÇÏ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ. ðÏÍÅÓÔÉÔÅ ËÕÒÓÏÒ × ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÕÀ ÓÔÒÏËÕ
É ÎÁÂÅÒÉÔÅ
-.PP
+.br
\fI!!xxd \-r\fR
.PP
þÔÏÂÙ ÐÒÏÞÉÔÁÔØ ÅÄÉÎÓÔ×ÅÎÎÙÊ ÓÉÍ×ÏÌ ÉÚ ËÁÎÁÌÁ Ó×ÑÚÉ:
-.PP
+.br
\fI% xxd \-c1 < /dev/term/b &\fR
.br
\fI% stty < /dev/term/b \-echo \-opost \-isig \-icanon min 1\fR
.br
-\fI% echo \-n foo > /dev/term/b\fR
+\fI% echo \-n foo \> /dev/term/b\fR
.PP
-.SH ÷ïú÷òáýáåíùå úîáþåîéñ
-ðÒÏÇÒÁÍÍÁ xxd ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ ÓÏ ÓÌÅÄÕÀÝÉÍÉ ÚÎÁÞÅÎÉÑÍÉ:
+.SH ëïäù úá÷åòûåîéñ
+ðÒÉ ÚÁ×ÅÒÛÅÎÉÉ ÒÁÂÏÔÙ, ÐÒÏÇÒÁÍÍÁ xxd ×ÏÚ×ÒÁÝÁÅÔ ÓÌÅÄÕÀÝÉÅ ÚÎÁÞÅÎÉÑ:
.TP
0
ïÛÉÂËÉ ÎÅ ÏÂÎÁÒÕÖÅÎÙ.
.TP
\-1
ïÐÅÒÁÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ (×ÙÐÏÌÎÅÎÉÅ
-.I xxd \-r \-i
+.I \%xxd \-r \-i
ÐÏËÁ ÎÅ×ÏÚÍÏÖÎÏ).
.TP
1
-ïÛÉÂËÁ ÐÒÉ ÒÁÚÂÏÒÅ ËÌÀÞÅÊ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ.
+ïÛÉÂËÁ ÐÒÉ ÒÁÚÂÏÒÅ ÁÒÇÕÍÅÎÔÏ× ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ.
.TP
2
-ðÒÏÂÌÅÍÙ ×Ï ×ÈÏÄÎÏÍ ÆÁÊÌÅ.
+ïÛÉÂËÉ ×Ï ×ÈÏÄÎÏÍ ÆÁÊÌÅ.
.TP
3
-ðÒÏÂÌÅÍÙ × ×ÙÈÏÄÎÏÍ ÆÁÊÌÅ.
+ïÛÉÂËÉ × ×ÙÈÏÄÎÏÍ ÆÁÊÌÅ.
.TP
4,5
öÅÌÁÔÅÌØÎÁÑ ÐÏÚÉÃÉÑ ÐÏÉÓËÁ ÎÅÄÏÓÔÉÖÉÍÁ.
-.SH óíïôòé ôáëöå
+.SH óíïôòéôå ôáëöå
uuencode(1), uudecode(1), patch(1)
.br
.SH ðòåäõðòåöäåîéå
óÔÒÁÎÎÏÓÔØ ÜÔÏÊ ÐÒÏÇÒÁÍÍÙ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÏÓÏÂÅÎÎÏÓÔÑÍ ÍÏÚÇÁ Å£ ÓÏÚÄÁÔÅÌÑ.
-éÓÐÏÌØÚÕÊÔŠţ ÎÁ Ó×ÏÊ ÓÔÒÁÈ É ÒÉÓË. ëÏÐÉÒÕÊÔÅ ÆÁÊÌÙ, ÏÔÓÌÅÖÉ×ÁÊÔÅ
-×ÙÚÏ×Ù, ÓÔÁÎÏ×ÉÔÅÓØ ×ÏÌÛÅÂÎÉËÏÍ.
+éÓÐÏÌØÚÕÊÔŠţ ÎÁ Ó×ÏÊ ÓÔÒÁÈ É ÒÉÓË. ëÏÐÉÒÕÊÔÅ ÆÁÊÌÙ, ÏÔÓÌÅÖÉ×ÁÊÔÅ ×ÙÚÏ×Ù,
+ÓÔÁÎÏ×ÉÔÅÓØ ×ÏÌÛÅÂÎÉËÏÍ.
.br
.SH ÷åòóéñ
-üÔÁ ÓÔÒÁÎÉÃÁ ÓÐÒÁ×ÏÞÎÉËÁ ÄÏËÕÍÅÎÔÉÒÕÅÔ xxd ×ÅÒÓÉÉ 1.7.
+üÔÏÔ ÓÐÒÁ×ÏÞÎÉË ÄÏËÕÍÅÎÔÉÒÕÅÔ ÐÒÏÇÒÁÍÍÕ xxd ×ÅÒÓÉÉ 1.7 ÏÔ 2024-05.
.SH á÷ôïò
.br
-(c) 1990-1997 àÒÇÅÎ ÷ÁÊÇÅÒÔ (Juergen Weigert)
+(c) àÒÇÅÎ ÷ÁÊÇÅÒÔ (Juergen Weigert), 1990-1997
.br
-<jnweiger@informatik.uni-erlangen.de>
+<jnweiger@informatik.uni\-erlangen.de>
.LP
÷Ù ÍÏÖÅÔÅ Ó×ÏÂÏÄÎÏ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÐÒÏÇÒÁÍÍÕ ÓÏ ÓÓÙÌËÏÊ ÎÁ ÍÅÎÑ.
.br
-åÓÌÉ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÜÔÏÊ ÐÒÏÇÒÁÍÍÙ ÐÒÉÎÅÓÌÏ ×ÁÍ ËÁËÏÊ-ÔÏ ÄÏÈÏÄ,
-ÐÏÄÅÌÉÔÅÓØ ÓÏ ÍÎÏÊ.
+åÓÌÉ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÜÔÏÊ ÐÒÏÇÒÁÍÍÙ ÐÒÉÎÅÓÌÏ ×ÁÍ ËÁËÏÊ-ÔÏ ÄÏÈÏÄ, ÐÏÄÅÌÉÔÅÓØ ÓÏ
+ÍÎÏÊ.
.br
-åÓÌÉ ×Ù ÐÏÔÅÒÑÌÉ ÄÅÎØÇÉ, ÔÏ Ñ ÔÕÔ ÎÅ ÐÒÉÞ£Í.
+åÓÌÉ ×Ù ÐÏÔÅÒÑÌÉ ÄÅÎØÇÉ, ÔÏ Ñ ÔÕÔ ÎÉ ÐÒÉ Þ£Í.
.PP
-ðÅÒ×ÙÊ ×ÁÒÉÁÎÔ ÓÔÒÁÎÉÃÙ ÓÐÒÁ×ÏÞÎÉËÁ ÎÁÐÉÓÁÎ ôÏÎÉ îÁÄÖÅÎÔÏÍ (Tony Nugent)
+ðÅÒ×ÙÊ ×ÁÒÉÁÎÔ ÓÐÒÁ×ÏÞÎÉËÁ ÎÁÐÉÓÁÎ ôÏÎÉ îÁÄÖÅÎÔÏÍ (Tony Nugent)
.br
<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
.br
-îÅÂÏÌØÛÉÅ ÉÚÍÅÎÅÎÉÑ ×ÎÅÓÅÎÙ âÒÁÍÏÍ íÏÏÌÅÎÁÁÒÏÍ (Bram Moolenaar).
-óÔÒÁÎÉÃÁ ÏÔÒÅÄÁËÔÉÒÏ×ÁÎÁ àÒÇÅÎÏÍ ÷ÁÊÇÅÒÔÏÍ (Juergen Weigert).
+îÅÂÏÌØÛÉÅ ÉÚÍÅÎÅÎÉÑ ×ÎÅÓÅÎÙ âÒÁÍÏÍ íÏÌÅÎÁÒÏÍ (Bram Moolenaar).
+óÐÒÁ×ÏÞÎÉË ÏÔÒÅÄÁËÔÉÒÏ×ÁÎ àÒÇÅÎÏÍ ÷ÁÊÇÅÒÔÏÍ (Juergen Weigert).
.PP
diff --git a/runtime/doc/xxd-ru.UTF-8.1 b/runtime/doc/xxd-ru.UTF-8.1
index 4a41d66..65586dd 100644
--- a/runtime/doc/xxd-ru.UTF-8.1
+++ b/runtime/doc/xxd-ru.UTF-8.1
@@ -1,57 +1,60 @@
-.TH XXD 1 "August 1996" "Страница man Ð´Ð»Ñ xxd"
+.TH XXD 1 "May 2024" "Справочник по программе xxd"
.\"
.\" 21st May 1996
.\" Man page author:
.\" Tony Nugent <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
.\" Changes by Bram Moolenaar <Bram@vim.org>
-.SH ИМЯ
+.SH ÐÐЗÐÐЧЕÐИЕ
+Программа
.I xxd
-\- Ñоздаёт предÑтавление файла в виде шеÑтнадцатеричных кодов или выполнÑет
-обратное преобразование.
-.SH КОМÐÐДÐÐЯ СТРОКÐ
+\[em] выполнÑет преобразование данных или в шеÑтнадцатеричный вид, или выполнÑет
+обратное преобразование из шеÑтнадцатеричного кода в иÑходный формат
+.SH КРÐТКИЙ ОБЗОР
.B xxd
\-h[elp]
.br
.B xxd
-[ключи] [входной_файл [выходной_файл]]
+[аргументы] [входной_файл [выходной_файл]]
.br
.B xxd
-\-r[evert] [ключи] [входной_файл [выходной_файл]]
+\-r[evert] [аргументы] [входной_файл [выходной_файл]]
.SH ОПИСÐÐИЕ
+Программа
.I xxd
-Ñоздаёт предÑтавление указанного файла или данных, прочитанных из потока
-Ñтандартного ввода, в виде шеÑтнадцатеричных кодов. Эта команда также может
-выполнить обратное преобразование заданных шеÑтнадцатеричными кодами данных
-в иÑходный бинарный формат.
-Подобно командам
+Ñоздаёт предÑтавление указанного файла или данных, прочитанных из Ñтандартного
+потока ввода, в виде шеÑтнадцатеричных кодов. Эта программа также может
+выполнÑÑ‚ÑŒ обратное преобразование заданных шеÑтнадцатеричными кодами данных
+в иÑходный двоичных формат.
+Подобно программам
.BR uuencode(1)
и
-.BR uudecode(1),
-она позволÑет выполнÑÑ‚ÑŒ преобразование бинарных данных в ASCII-код,
-который можно передавать по Ñлектронной почте, однако, помимо Ñтого, программа
-xxd позволÑет выполнÑÑ‚ÑŒ декодирование в поток Ñтандартного вывода,
-а также может применÑÑ‚ÑŒÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð»Ð°Ñ‚Ð¾Ðº Ð´Ð»Ñ Ð±Ð¸Ð½Ð°Ñ€Ð½Ñ‹Ñ… файлов.
-.SH КЛЮЧИ ЗÐПУСКÐ
+.BR uudecode(1)
+, она позволÑет выполнÑÑ‚ÑŒ преобразование двоичных данных в Ñимволы кодировки
+ASCII, которые можно передавать по Ñлектронной почте, однако, помимо Ñтого,
+программа xxd позволÑет выполнÑÑ‚ÑŒ декодирование в поток Ñтандартного вывода,
+а также может применÑÑ‚ÑŒÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ñправлений Ð´Ð»Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ñ… файлов.
+.SH ÐРГУМЕÐТЫ КОМÐÐДÐОЙ СТРОКИ
ЕÑли
.I входной_файл
-не задан, то ÑоответÑтвующие данные читаютÑÑ Ð¸Ð· потока Ñтандартного ввода.
+не задан, то требуемые данные ÑчитываютÑÑ Ð¸Ð· Ñтандартного потока ввода.
Ð’ Ñлучае, еÑли в качеÑтве
.I входного_файла
иÑпользуетÑÑ Ñимвол
-.RB \` \- ',
-иÑточником данных также выÑтупает поток Ñтандартного ввода.
+.RB ' \- ',
+иÑточником данных также выÑтупает Ñтандартный поток ввода.
Ð’ том Ñлучае, еÑли не указан
.I выходной_файл
(или вмеÑто него иÑпользуетÑÑ Ñимвол
-.RB \` \- '
-), результат Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÑетÑÑ Ð² поток Ñтандартного вывода.
-.PP
-Обратите внимание, что иÑпользуетÑÑ "ленивый" алгоритм разбора ключей, который не
-проверÑет более одной буквы ключа, еÑли в Ñтом ключе не иÑпользуетÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€.
-Пробелы между единÑтвенным Ñимволом ключа и ÑоответÑтвующим параметром не ÑвлÑÑŽÑ‚ÑÑ
-обÑзательными. Параметры ключей могут быть заданы Ñ Ð¸Ñпользованием деÑÑтичного,
-шеÑтнадцатеричного или воÑьмеричного формата.
-Таким образом, ключи
+.RB ' \- '
+), результат Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÑетÑÑ Ð² Ñтандартный поток вывода.
+.PP
+Обратите внимание, что применÑетÑÑ "ленивый" алгоритм разбора аргументов,
+который проверÑет только первую букву аргумента, еÑли, конечно, Ð´Ð»Ñ Ñтого
+аргумента не указано какое-то значение.
+Пробелы между одноÑимвольным аргументом и его значением не ÑвлÑÑŽÑ‚ÑÑ
+обÑзательными. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð² могут быть заданы в деÑÑтичном,
+шеÑтнадцатеричном или воÑьмеричном формате.
+Таким образом, аргументы
.BR \-c8 ,
.BR "\-c 8" ,
.B \-c 010
@@ -61,118 +64,179 @@ xxd позволÑет выполнÑÑ‚ÑŒ декодирование в пото
.PP
.TP
.IR \-a " | " \-autoskip
-Включает автоматичеÑкий пропуÑк: вмеÑто поÑледовательноÑти
-нулевых Ñтрок иÑпользуетÑÑ Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ñ‹Ð¹ Ñимвол '*'. По умолчанию
-не применÑетÑÑ.
+Включить автоматичеÑкий пропуÑк, Ñ‚. е., вмеÑто неÑкольких идущих подрÑд Ñтрок
+Ñ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ значением, иÑпользуетÑÑ Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ñ‹Ð¹ Ñимвол '*'.
+По умолчанию не применÑетÑÑ.
.TP
.IR \-b " | " \-bits
-ВмеÑто шеÑтнадцатеричного кода иÑпользуютÑÑ Ð±Ð¸Ñ‚Ñ‹ (двоичные цифры).
-При иÑпользовании Ñтого ключа вмеÑто обычного шеÑтнадцатеричного предÑтавлениÑ
-октетов иÑпользуютÑÑ Ð½Ð°Ð±Ð¾Ñ€Ñ‹ из воÑьми Ñимволов "1" и "0". ÐšÐ°Ð¶Ð´Ð°Ñ Ñтрока
-предварÑетÑÑ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ Ñтроки в шеÑтнадцатеричном виде, а завершаетÑÑ Ñимвольным
-предÑтавлением (в виде ascii или ebcdic). Ключи \-p, \-i в Ñтом режиме
-не работают.
+ИÑпользовать биты (двоичный код), а не шеÑтнадцатеричные цифры.
+При указании Ñтого аргумента, вмеÑто обычного шеÑтнадцатеричного предÑтавлениÑ
+октетов, будет отображаетÑÑ Ð½Ð°Ð±Ð¾Ñ€ из воÑьми цифр "1" и "0". ÐšÐ°Ð¶Ð´Ð°Ñ Ñтрока
+предварÑетÑÑ ÐµÑ‘ номером в шеÑтнадцатеричном виде, а завершаетÑÑ Ð² виде Ñимволов
+в кодировке ASCII (или в кодировке EBCDIC). Ðргументы командной Ñтроки
+\-p, \-i в Ñтом режиме не применÑÑŽÑ‚ÑÑ.
.TP
.IR "\-c кол " | " \-cols кол"
Задаёт количеÑтво октетов
.RI < кол >,
которое выводитÑÑ Ð½Ð° каждой Ñтроке. По умолчанию иÑпользуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ 16
-(\-i: 12, \-ps: 30, \-b: 6).
-МакÑимально допуÑтимое значение: 256.
+(Ð´Ð»Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð° \-i иÑпользуетÑÑ 12, Ð´Ð»Ñ \-ps \[em] 30, Ð´Ð»Ñ \-b \[em] 6).
+МакÑимально допуÑтимое значение \[em] 256.
+МакÑимальное значение не применÑетÑÑ Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ \-ps. ЕÑли Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ \-ps,
+указано значение 0, то будет выведена проÑто одна Ð´Ð»Ð¸Ð½Ð½Ð°Ñ Ñтрока.
+.TP
+.IR \-C " | " \-capitalize
+Преобразовать Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… в верхний региÑÑ‚Ñ€ при иÑпользовании ÑтилÑ
+Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² виде подключаемых файлов Ñзыка Си,
+который включаетÑÑ Ñ‡ÐµÑ€ÐµÐ· аргумент командной Ñтроки \-i.
+.TP
+.I \-d
+Отображать Ñмещение не в шеÑтнадцатеричном, а в деÑÑтичном формате.
.TP
.IR \-E " | " \-EBCDIC
-ИзменÑет ÑпоÑоб ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñимволов в правой колонке Ñ ASCII на EBCDIC. Этот ключ
-не изменÑет шеÑтнадцатеричное предÑтавление. Данный ключ не имеет ÑмыÑла,
-еÑли иÑпользуютÑÑ ÐºÐ»ÑŽÑ‡Ð¸ \-r, \-p или \-i.
+Отображать Ñимволы в крайне правой колонке не в кодировке ASCII,
+а в кодировке EBCDIC. Этот аргумент не влиÑет на шеÑтнадцатеричное
+предÑтавление данных. Данный аргумент не имеет ÑмыÑла, еÑли иÑпользуютÑÑ
+аргументы командной Ñтроки \-r, \-p или \-i.
+.TP
+.IR \-e
+ИÑпользовать обратный порÑдок байт при отображение шеÑтнадцатеричного
+предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ….
+Группа байт будет показана как двоичное Ñлово от младших разрÑдов к Ñтаршим.
+ИÑпользуемое по умолчанию группирование по четыре байта может быть изменено
+через аргумент командной Ñтроки
+.RI "" \-g .
+ДейÑтвие Ñтого аргумента раÑпроÑтранÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на шеÑтнадцатеричное
+предÑтавление данных и не оказывает влиÑние на Ñимвольное предÑтавление
+в кодировке ASCII (или EBCDIC).
+Ðргументы командной Ñтроки
+\-r, \-p, \-i не применÑÑŽÑ‚ÑÑ Ð² Ñтом режиме.
.TP
.IR "\-g байт " | " \-groupsize байт"
-ПозволÑет выполнÑÑ‚ÑŒ группировку указанного количеÑтва
-.RI < байтов >
-(две шеÑтнадцатеричные цифры или воÑемь битов), отделÑÑ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ друг от друга пробелами.
+Выполнить группирование указанного количеÑтва
+.RI < байт >
+(две шеÑтнадцатеричные цифры или воÑемь двоичных цифр), отделÑÑ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹
+друг от друга пробелами.
Значение
.I \-g 0
-применÑетÑÑ Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ°Ð·Ð° от иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ¸.
+применÑетÑÑ Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ°Ð·Ð° от иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ.
По умолчанию иÑпользуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ
-.RI < байт "> равное " 2
-в обычном режиме и \fI1\fP в битовом режиме. Группировка не применÑетÑÑ
-в режимах postscript и include.
+.RI < байт ">, равное " 2
+при отображении в прÑмом порÑдке байт, \fI4\fP при отображении в обратном
+порÑдке байт и \fI1\fP в двоичном режиме. Группировка не применÑетÑÑ
+в режиме PostScript или include.
.TP
.IR \-h " | " \-help
-Выводит Ñправку по доÑтупным ключам командной Ñтроки и завершает работу программы.
+Показать краткую информацию об аргументах командной Ñтроки и завершить работу
+программы.
Создание шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ выполнÑетÑÑ.
.TP
.IR \-i " | " \-include
-ПозволÑет Ñоздавать вывод в Ñтиле подключаемых заголовочных файлов Ñзыка C.
-Вывод Ñодержит полноценное определение ÑтатичеÑкого маÑÑива данных, Ð¸Ð¼Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾
-ÑоответÑтвует имени входного файла, еÑли xxd не Ñчитывает данные из потока Ñтандартного
-ввода.
+Создавать вывод в Ñтиле подключаемых заголовочных файлов Ñзыка Си.
+Вывод Ñодержит полноценное определение ÑтатичеÑкого маÑÑива данных, название
+которого ÑоответÑтвует наименованию входного файла, еÑли программа xxd
+не Ñчитывает данные из Ñтандартного потока ввода.
.TP
.IR "\-l длина " | " \-len длина"
-Завершает работу поÑле запиÑи заданного в параметре
+Указывает, что поÑле запиÑи заданного в параметре
.RI < длина >
-количеÑтва октетов.
+количеÑтва октетов, работа программы будет завершена.
+.TP
+.I "\-n название " | " \-name название"
+Изменить возвращаемое наименование переменной при иÑпользовании аргумента \-i.
+ПрименÑетÑÑ Ðº маÑÑиву байт, который будет именоватьÑÑ ÐºÐ°Ðº \fIназвание\fP и длина
+файла как \fIназвание\fP_len.
+.TP
+.I \-o Ñмещение
+Указывает добавить
+.RI < Ñмещение >
+в отображаемую позицию файла.
.TP
.IR \-p " | " \-ps " | " \-postscript " | " \-plain
-ИÑпользует непрерывный формат вывода шеÑтнадцатеричного кода,
-извеÑтный как "проÑтой" Ñтиль или Ñтиль "postscript".
+ИÑпользовать непрерывный формата вывода шеÑтнадцатеричного кода,
+извеÑтного как "проÑтой" Ñтиль или Ñтиль "PostScript".
.TP
.IR \-r " | " \-revert
-ИзменÑет ÑмыÑл операции на противоположный: позволÑет выполнÑÑ‚ÑŒ преобразование
-шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² бинарный код (или применÑÑ‚ÑŒ результат в качеÑтве заплаты).
-ЕÑли вывод проиÑходит не в поток Ñтандартного вывода, то xxd выполнÑет добавление кода
-к ÑоответÑтвующему файлу. При иÑпользовании комбинации ключей
+Выполнить операцию обратного преобразованиÑ, Ñ‚. е. преобразование
+шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² двоичный код (или применить результат
+в качеÑтве иÑправлениÑ).
+ЕÑли вывод проиÑходит не в Ñтандартного поток вывода, то программа xxd выполнÑет
+добавление кода к выходному файлу. При иÑпользовании комбинации аргументов
.I \-r \-p
проиÑходит чтение "проÑтого" шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÐ· иÑпользованиÑ
-информации о номерах Ñтрок и какого-либо Ñпециального раÑÐºÑ€Ð¾Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº. Пробелы
-и Ñимволы новой Ñтроки могут вÑтречатьÑÑ Ð² любом меÑте иÑходных данных.
+информации о номерах Ñтрок и какого-либо Ñпециального раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº.
+Пробелы и Ñимволы новой Ñтроки могут вÑтречатьÑÑ Ð² любом меÑте иÑходных данных.
+При иÑпользовании комбинации аргументов
+.I \-r \-b
+будет проиÑходить Ñчитывание двоичного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¼ÐµÑто шеÑтнадцатеричного.
+.TP
+.IR \-R " " когда
+Ð’ выходных данных одни и те же шеÑтнадцатеричные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸ Ñтроковые значениÑ
+будут подÑвечиватьÑÑ Ð¾Ð´Ð½Ð¸Ð¼ и тем же цветом. Ð’ оÑновном Ñто помогает различать
+печатаемые и непечатаемые Ñимволы.
+Где
+.I \fIкогда\fP
+может принимать значение
+.BR never " (никогда), " always " (вÑегда), или " auto " (автовыбор, по умолчанию).
+ЕÑли уÑтановлена Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ
+.BR $NO_COLOR
+, то Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð¿Ð¾Ð´Ñветка будет отключена.
.TP
.I \-seek Ñмещение
-При иÑпользовании поÑле ключа
+При указании поÑле аргумента
.I \-r
-: добавлÑÑ‚ÑŒ указанное
+, будет добавлÑÑ‚ÑŒÑÑ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ðµ
.RI < Ñмещение >
к файловым позициÑм, обнаруженным в иÑходных данных.
.TP
-.I \-s [\+][\-]seek
-Ðачинает работу Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð³Ð¾ абÑолютного (или отноÑительного)
+.I \-s [+][\-]seek
+Ðачинать обработку Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð³Ð¾ абÑолютного (или отноÑительного)
.RI < ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ >
в байтах во входном_файле.
-\fI\+ \fRуказывает, что Ñмещение ÑвлÑетÑÑ Ð¾Ñ‚Ð½Ð¾Ñительным по отношению
-к текущей файловой позиции в потоке Ñтандартного ввода (беÑÑмыÑленно, еÑли чтение
-проиÑходит не из потока Ñтандартного ввода). \fI\- \fRуказывает, что должно быть прочитано
-указанное количеÑтво Ñимволов от конца ввода (либо, еÑли ÑочетаетÑÑ Ñ \fI \+ \fR:
-перед текущей позиции файла в потоке Ñтандартного ввода).
-ЕÑли ключ \-s не иÑпользуетÑÑ, то xxd начинает работу от текущей позиции в файле.
+Где \fI+ \fRуказывает, что Ñмещение ÑвлÑетÑÑ Ð¾Ñ‚Ð½Ð¾Ñительным по отношению
+к текущей позиции данных в Ñтандартном потоке ввода (беÑÑмыÑленно, еÑли чтение
+проиÑходит не из Ñтандартного потока ввода). Рпараметр \fI\- \fRуказывает,
+что должно быть прочитано указанное количеÑтво Ñимволов от конца ввода (либо,
+еÑли одновременно Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ \fI+\fR, то перед текущей позицией данных
+в Ñтандартном потоке ввода).
+ЕÑли аргумент \-s не иÑпользуетÑÑ, то программа xxd начинает обработку
+от текущей позиции в файле.
.TP
.I \-u
-ИÑпользует шеÑтнадцатеричные цифры в верхнем региÑтре. По умолчанию иÑпользуютÑÑ Ñ†Ð¸Ñ„Ñ€Ñ‹ в
-нижнем региÑтре Ñимволов.
+Указывает, что в выводе отображать шеÑтнадцатеричные цифры в верхнем региÑтре.
+По умолчанию иÑпользуютÑÑ Ñимволы в нижнем региÑтре Ñимволов.
.TP
.IR \-v " | " \-version
-Отображает информацию о верÑии программы.
-.SH ПОДВОДÐЫЕ КÐÐœÐИ
+Показать информацию о верÑии программы и завершить работу.
+.SH ÐЕКОТОРЫЕ РÐЗЪЯСÐЕÐИЯ
.PP
+При указании команды
.I xxd \-r
-обладает вÑтроенным интеллектом Ð´Ð»Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о номерах Ñтрок.
+при запуÑке программы, будет применÑÑ‚ÑŒÑÑ Ð½ÐµÐºÐ¸Ð¹ вÑтроенный алгоритм
+Ð´Ð»Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о номерах Ñтрок.
ЕÑли возможен поиÑк по входному файлу, то номера Ñтрок в начале каждой Ñтроки
-шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть неупорÑдоченными, некоторые Ñтроки могут
-быть пропущены или переÑекатьÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼. Ð’ Ñтих ÑлучаÑÑ… xxd иÑпользует
-lseek(2) Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к Ñледующей позиции. ЕÑли поиÑк по входному файлу
-невозможен, то допуÑтимы только пропуÑки Ñтрок, которые заполнÑÑŽÑ‚ÑÑ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼Ð¸
-байтами.
+шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть неупорÑдоченными, некоторые Ñтроки
+могут быть пропущены или переÑекатьÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼. Ð’ Ñтих ÑлучаÑÑ… программа
+xxd иÑпользует функцию lseek(2) Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к Ñледующей позиции. ЕÑли поиÑк по
+входному файлу невозможен, то допуÑтимы только пропуÑки Ñтрок, которые
+заполнÑÑŽÑ‚ÑÑ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼Ð¸ байтами.
.PP
+ИÑпользование команды
.I xxd \-r
-никогда не выводит Ñообщений об ошибках. МуÑор пропуÑкаетÑÑ Ð¼Ð¾Ð»Ñ‡Ð°.
+приводит к тому, что ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках не будут отображатьÑÑ.
+ПоÑторонние данные проÑто молча пропуÑкаютÑÑ.
.PP
-При редактировании шеÑтнадцатеричных предÑтавлений бинарных файлов обращайте
-внимание, что
+При редактировании шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ñ… файлов, обращайте
+внимание, что по команде
.I xxd \-r
-пропуÑкает в Ñтроке ввода любые данные поÑле Ð¿Ñ€Ð¾Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтаточного количеÑтва
-колонок шеÑтнадцатеричных данных (Ñм. ключ \-c). Это означает, что изменениÑ,
-внеÑенные в колонки Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð½Ñ‹Ð¼Ð¸ Ñимволами ascii (или ebcdic), вÑегда игнорируютÑÑ.
+, поÑле ÑÑ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ñтаточного количеÑтва колонок шеÑтнадцатеричных данных
+(Ñм. аргумент \-c), в Ñтроке ввода не будут обрабатыватьÑÑ Ð¾Ñтальные данные.
+Это означает, что изменениÑ, внеÑённые в колонке Ñ Ñ‚ÐµÐºÑтом в кодировке
+ASCII (или EBCDIC), вÑегда игнорируютÑÑ.
При обратном преобразовании шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² Ñтиле
-postscript Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды xxd \-r \-p количеÑтво колонок не учитываетÑÑ.
-Ð’ Ñтом Ñлучае раÑпознаютÑÑ Ð²Ñе Ñимволы, которые похожи на пары шеÑтнадцатеричных цифр.
+PostScript Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды xxd \-r \-p количеÑтво колонок не учитываетÑÑ.
+Ð’ Ñтом Ñлучае раÑпознаютÑÑ Ð²Ñе Ñимволы, которые похожи на пары шеÑтнадцатеричных
+цифр.
.PP
Обратите внимание на различие между командами
.PP
@@ -186,125 +250,139 @@ postscript Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды xxd \-r \-p количеÑтво кÐ
.I xxd \-s \+seek
может отличатьÑÑ Ð¾Ñ‚
.I xxd \-s seek,
-поÑкольку Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы "отмотать" данные на входе назад, иÑпользуетÑÑ Ð²Ñ‹Ð·Ð¾Ð² lseek(2).
-При иÑпользовании `+' поведение будет отличатьÑÑ, еÑли входные данные
-поÑтупают Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ° Ñтандартного ввода, а Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð² файле Ñтандартного ввода не находитÑÑ
-в начале файла к тому моменту, когда программа xxd запущена и приÑтупает к чтению ввода.
+поÑкольку Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы "отмотать" данные на входе назад, иÑпользуетÑÑ Ð²Ñ‹Ð·Ð¾Ð²
+функции lseek(2).
+При указании параметра '+' поведение будет отличатьÑÑ, еÑли входные данные
+поÑтупают Ñо Ñтандартного потока ввода, а Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð² файле Ñтандартного ввода
+не находитÑÑ Ð² начале файла к тому моменту, когда программа xxd запущена
+и приÑтупает к чтению ввода.
ÐижеÑледующие примеры помогут проÑÑнить (или ещё больше запутать!) Ñитуацию...
.PP
-Отмотка назад потока Ñтандартного ввода; необходимо, поÑкольку 'cat' уже выполнила
-чтение до конца потока Ñтандартного ввода:
+Отмотка потока Ñтандартного ввода назад необходима, поÑкольку программа 'cat'
+уже выполнила чтение данных до конца из Ñтандартного потока ввода:
.PP
-\fI% sh \-c 'cat > plain_copy; xxd \-s 0 > hex_copy' < file
+\fI% sh \-c "cat > plain_copy; xxd \-s 0 > hex_copy" < file\fR
.PP
-Вывод шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ позиции в файле 0x480
-(= 1024+128).
-Символ `+' означает "отноÑительно текущей позиции", таким образом `128' добавлÑетÑÑ
-к первому килобайту, где завершает работу dd:
+Вывод шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ позиции в файле 0x480 (=1024+128).
+Параметр '+' означает "отноÑительно текущей позиции", таким образом '128'
+добавлÑетÑÑ Ðº первому килобайту, где завершает работу программа dd:
.PP
-\fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +128 > hex_snippet' < file
+\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +128 \> hex_snippet" < file\fR
.PP
-Вывод шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ позиции в файле 0x100
-(= 1024-768):
+Вывод шеÑтнадцатеричного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ позиции в файле 0x100 (=1024\[mi]768):
.PP
-\fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +-768 > hex_snippet' < file
+\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +\-768 \> hex_snippet" < file\fR
.PP
-Ð’ то же времÑ, Ñледует заметить, что подобные Ñитуации вÑтречаютÑÑ Ð´Ð¾Ð²Ð¾Ð»ÑŒÐ½Ð¾ редко,
-так что Ñимвол `+' обычно не иÑпользуетÑÑ. Ðвтор предпочитает наблюдать за работой
-xxd Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ strace(1) или truss(1) в тех ÑлучаÑÑ…, когда применÑетÑÑ ÐºÐ»ÑŽÑ‡
+Ð’ то же времÑ, Ñледует заметить, что подобные Ñитуации вÑтречаютÑÑ Ð´Ð¾Ð²Ð¾Ð»ÑŒÐ½Ð¾
+редко, так что параметр '+' обычно не иÑпользуетÑÑ. Ðвтор предпочитает наблюдать
+за работой программы xxd Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ инÑтрументов strace(1) или truss(1) в тех
+ÑлучаÑÑ…, когда применÑетÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚
\-s.
.SH ПРИМЕРЫ
.PP
.br
-ВывеÑти вÑÑ‘, кроме первых трёх Ñтрок (0x30 байтов) файла
-.B file
+ВывеÑти вÑÑ‘, кроме первых трёх Ñтрок (0x30 байт)
+.BR файла
:
-.PP
-\fI% xxd \-s 0x30 file
+.br
+\fI% xxd \-s 0x30 file\fR
.PP
.br
-ВывеÑти три Ñтроки (0x30 байтов) от конца файла
-.B file
+ВывеÑти три Ñтроки (0x30 байт) от конца
+.BR файла
:
-.PP
-\fI% xxd \-s \-0x30 file
-.PP
.br
-ВывеÑти 120 байтов в виде непрерывного шеÑтнадцатеричного предÑтавлениÑ
-по 20 октетов в Ñтроке:
+\fI% xxd \-s \-0x30 file\fR
.PP
+.br
+ВывеÑти 120 байт в виде непрерывного шеÑтнадцатеричного предÑтавлениÑ
+по 20 октетов в Ñтроке
+.br
+(Ñтот пример Ð´Ð»Ñ Ñправочника xxd.1 на английÑком Ñзыке, Ð´Ð»Ñ Ñ€ÑƒÑÑкого Ñзыка будет
+немного другой результат):
+.br
\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
.br
-2e544820585844203120224d616e75616c207061
+2e544820585844203120224d6179203230323422
.br
-676520666f7220787864220a2e5c220a2e5c2220
+20224d616e75616c207061676520666f72207878
.br
-32317374204d617920313939360a2e5c22204d61
+64220a2e5c220a2e5c222032317374204d617920
.br
-6e207061676520617574686f723a0a2e5c222020
+313939360a2e5c22204d616e2070616765206175
.br
-2020546f6e79204e7567656e74203c746f6e7940
+74686f723a0a2e5c2220202020546f6e79204e75
.br
-7363746e7567656e2e7070702e67752e6564752e
+67656e74203c746f6e79407363746e7567656e2e
.br
-.PP
+
+.br
+ВывеÑти первые 120 байт Ñтого Ñправочника по 12 октетов в Ñтроке
+.br
+(Ñтот пример Ð´Ð»Ñ Ñправочника xxd.1 на английÑком Ñзыке, Ð´Ð»Ñ Ñ€ÑƒÑÑкого Ñзыка будет
+немного другой результат):
.br
-ВывеÑти первые 120 байтов Ñтой Ñтраницы Ñправочника по 12 октетов в Ñтроке:
-.PP
\fI% xxd \-l 120 \-c 12 xxd.1\fR
.br
-0000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
+00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
.br
-000000c: 616e 7561 6c20 7061 6765 2066 anual page f
+0000000c: 6179 2032 3032 3422 2022 4d61 ay 2024" "Ma
.br
-0000018: 6f72 2078 7864 220a 2e5c 220a or xxd"..\\".
+00000018: 6e75 616c 2070 6167 6520 666f nual page fo
.br
-0000024: 2e5c 2220 3231 7374 204d 6179 .\\" 21st May
+00000024: 7220 7878 6422 0a2e 5c22 0a2e r xxd"..\\"..
.br
-0000030: 2031 3939 360a 2e5c 2220 4d61 1996..\\" Ma
+00000030: 5c22 2032 3173 7420 4d61 7920 \\" 21st May
.br
-000003c: 6e20 7061 6765 2061 7574 686f n page autho
+0000003c: 3139 3936 0a2e 5c22 204d 616e 1996..\\" Man
.br
-0000048: 723a 0a2e 5c22 2020 2020 546f r:..\\" To
+00000048: 2070 6167 6520 6175 7468 6f72 page author
.br
-0000054: 6e79 204e 7567 656e 7420 3c74 ny Nugent <t
+00000054: 3a0a 2e5c 2220 2020 2054 6f6e :..\\" Ton
.br
-0000060: 6f6e 7940 7363 746e 7567 656e ony@sctnugen
+00000060: 7920 4e75 6765 6e74 203c 746f y Nugent <to
.br
-000006c: 2e70 7070 2e67 752e 6564 752e .ppp.gu.edu.
+0000006c: 6e79 4073 6374 6e75 6765 6e2e ny@sctnugen.
.PP
.br
-Показать дату из файла xxd.1:
+Показать дату из файла
+.B xxd.1
+.br
+(Ñтот пример Ð´Ð»Ñ Ñправочника xxd.1 на английÑком Ñзыке, Ð´Ð»Ñ Ñ€ÑƒÑÑкого Ñзыка будет
+немного Ð´Ñ€ÑƒÐ³Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°, например, Ð´Ð»Ñ UTF-8 \[em] \flxxd \-s 0x50 \-l 13 \-c 13 xxd.1\fR):
.PP
-\fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
+\fI% xxd \-s 0x33 \-l 13 \-c 13 xxd.1\fR
.br
-0000028: 3231 7374 204d 6179 2031 3939 21st May 199
+00000033: 3231 7374 204d 6179 2031 3939 36 21st May 1996
.PP
.br
Скопировать
.B входной_файл
в
.B выходной_файл
-Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ 100 байтов Ñо значением 0x00 в начало файла:
-.PP
+Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ 100 байт Ñо значением 0x00 в начало файла:
+.br
\fI% xxd входной_файл | xxd \-r \-s 100 \> выходной_файл\fR
.br
-.PP
+
.br
-Заменить дату в файле xxd.1:
+Заменить дату в файле
+.B xxd.1
+.br
+(Ñтот пример Ð´Ð»Ñ Ñправочника xxd.1 на английÑком Ñзыке, Ð´Ð»Ñ Ñ€ÑƒÑÑкого Ñзыка будут
+немного другие команды):
.PP
-\fI% echo '0000029: 3574 68' | xxd \-r \- xxd.1\fR
+\fI% echo "0000034: 3574 68" | xxd \-r \- xxd.1\fR
.br
-\fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
+\fI% xxd \-s 0x33 \-l 13 \-c 13 xxd.1\fR
.br
-0000028: 3235 7468 204d 6179 2031 3939 25th May 199
+00000033: 3235 7468 204d 6179 2031 3939 36 25th May 1996
.PP
.br
-Создать 65537-байтный файл, вÑе байты которого имеют значение
-0x00, кроме поÑледнего байта, который должен иметь значение 'A'
-(0x41):
+Создать 65537-байтный файл, вÑе байты которого имеют значение 0x00,
+кроме поÑледнего байта, который должен иметь значение 'A' (0x41):
.PP
-\fI% echo '010000: 41' | xxd \-r \> file\fR
+\fI% echo "010000: 41" | xxd \-r > file\fR
.PP
.br
Создать шеÑтнадцатеричное предÑтавление Ñтого файла Ñ
@@ -312,97 +390,97 @@ xxd Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ strace(1) или truss(1) в тех ÑлучаÑÑ…, ког
.PP
\fI% xxd \-a \-c 12 file\fR
.br
-0000000: 0000 0000 0000 0000 0000 0000 ............
+00000000: 0000 0000 0000 0000 0000 0000 ............
.br
*
.br
-000fffc: 0000 0000 40 ....A
+0000fffc: 0000 0000 41 ....A
.PP
Создать 1-байтный файл, Ñодержащий Ñимвол 'A'.
-ЧиÑло поÑле '\-r \-s' добавлÑетÑÑ Ðº номерам Ñтрок, найденным в файле;
+ЧиÑло поÑле аргументов '\-r \-s' добавлÑетÑÑ Ðº номерам Ñтрок, найденным в файле,
иначе говорÑ, предшеÑтвующие байты пропуÑкаютÑÑ:
.PP
-\fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> file\fR
-.PP
-xxd можно иÑпользовать в качеÑтве фильтра в редакторе, например в
-.B vim(1),
-чтобы Ñоздать шеÑтнадцатеричное предÑтавление облаÑти между
-отметками `a' и `z':
+\fI% echo '010000: 41' | xxd \-r \-s \-0x10000 > file\fR
.PP
+Программу xxd можно иÑпользовать в качеÑтве фильтра в редакторе, например в
+.B vim(1)
+, чтобы Ñоздать шеÑтнадцатеричное предÑтавление облаÑти между
+закладками 'a' и 'z':
+.br
\fI:'a,'z!xxd\fR
.PP
-Ð’Ñ‹ можете иÑпользовать xxd в качеÑтве фильтра в редакторе, например в
-.B vim(1),
-Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из шеÑтнадцатеричного предÑтавлениÑ
-между отметками `a' и `z':
-.PP
+Можно иÑпользовать программу xxd в качеÑтве фильтра в редакторе, например в
+.B vim(1)
+, Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из шеÑтнадцатеричного предÑтавлениÑ
+между закладками 'a' и 'z':
+.br
\fI:'a,'z!xxd \-r\fR
.PP
-Ð’Ñ‹ можете иÑпользовать xxd в качеÑтве фильтра в редакторе, например в
-.B vim(1),
-Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из единÑтвенной Ñтроки
+Можно иÑпользовать программу xxd в качеÑтве фильтра в редакторе, например в
+.B vim(1)
+, Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из единÑтвенной Ñтроки
шеÑтнадцатеричного предÑтавлениÑ. ПомеÑтите курÑор в ÑоответÑтвующую Ñтроку
и наберите
-.PP
+.br
\fI!!xxd \-r\fR
.PP
Чтобы прочитать единÑтвенный Ñимвол из канала ÑвÑзи:
-.PP
+.br
\fI% xxd \-c1 < /dev/term/b &\fR
.br
\fI% stty < /dev/term/b \-echo \-opost \-isig \-icanon min 1\fR
.br
-\fI% echo \-n foo > /dev/term/b\fR
+\fI% echo \-n foo \> /dev/term/b\fR
.PP
-.SH ВОЗВРÐЩÐЕМЫЕ ЗÐÐЧЕÐИЯ
-Программа xxd завершает работу Ñо Ñледующими значениÑми:
+.SH КОДЫ ЗÐВЕРШЕÐИЯ
+При завершении работы, программа xxd возвращает Ñледующие значениÑ:
.TP
0
Ошибки не обнаружены.
.TP
\-1
ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ поддерживаетÑÑ (выполнение
-.I xxd \-r \-i
+.I \%xxd \-r \-i
пока невозможно).
.TP
1
-Ошибка при разборе ключей командной Ñтроки.
+Ошибка при разборе аргументов командной Ñтроки.
.TP
2
-Проблемы во входном файле.
+Ошибки во входном файле.
.TP
3
-Проблемы в выходном файле.
+Ошибки в выходном файле.
.TP
4,5
Ð–ÐµÐ»Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿Ð¾Ð¸Ñка недоÑтижима.
-.SH СМОТРИ ТÐКЖЕ
+.SH СМОТРИТЕ ТÐКЖЕ
uuencode(1), uudecode(1), patch(1)
.br
.SH ПРЕДУПРЕЖДЕÐИЕ
СтранноÑÑ‚ÑŒ Ñтой программы ÑоответÑтвует оÑобенноÑÑ‚Ñм мозга её ÑоздателÑ.
-ИÑпользуйте её на Ñвой Ñтрах и риÑк. Копируйте файлы, отÑлеживайте
-вызовы, ÑтановитеÑÑŒ волшебником.
+ИÑпользуйте её на Ñвой Ñтрах и риÑк. Копируйте файлы, отÑлеживайте вызовы,
+ÑтановитеÑÑŒ волшебником.
.br
.SH ВЕРСИЯ
-Эта Ñтраница Ñправочника документирует xxd верÑии 1.7.
+Этот Ñправочник документирует программу xxd верÑии 1.7 от 2024-05.
.SH ÐВТОР
.br
-(c) 1990-1997 Юрген Вайгерт (Juergen Weigert)
+(c) Юрген Вайгерт (Juergen Weigert), 1990-1997
.br
-<jnweiger@informatik.uni-erlangen.de>
+<jnweiger@informatik.uni\-erlangen.de>
.LP
Ð’Ñ‹ можете Ñвободно раÑпроÑтранÑÑ‚ÑŒ программу Ñо ÑÑылкой на менÑ.
.br
-ЕÑли иÑпользование Ñтой программы принеÑло вам какой-то доход,
-поделитеÑÑŒ Ñо мной.
+ЕÑли иÑпользование Ñтой программы принеÑло вам какой-то доход, поделитеÑÑŒ Ñо
+мной.
.br
-ЕÑли вы потерÑли деньги, то Ñ Ñ‚ÑƒÑ‚ не причём.
+ЕÑли вы потерÑли деньги, то Ñ Ñ‚ÑƒÑ‚ ни при чём.
.PP
-Первый вариант Ñтраницы Ñправочника напиÑан Тони Ðаджентом (Tony Nugent)
+Первый вариант Ñправочника напиÑан Тони Ðаджентом (Tony Nugent)
.br
<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
.br
-Ðебольшие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑены Брамом Мооленааром (Bram Moolenaar).
-Страница отредактирована Юргеном Вайгертом (Juergen Weigert).
+Ðебольшие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑены Брамом Моленаром (Bram Moolenaar).
+Справочник отредактирован Юргеном Вайгертом (Juergen Weigert).
.PP
diff --git a/runtime/doc/xxd.1 b/runtime/doc/xxd.1
index c76f89b..2c00d53 100644
--- a/runtime/doc/xxd.1
+++ b/runtime/doc/xxd.1
@@ -1,4 +1,4 @@
-.TH XXD 1 "August 1996" "Manual page for xxd"
+.TH XXD 1 "May 2024" "Manual page for xxd"
.\"
.\" 21st May 1996
.\" Man page author:
@@ -190,7 +190,8 @@ When editing hex dumps, please note that
skips everything on the input line after reading enough columns of hexadecimal
data (see option \-c). This also means that changes to the printable ASCII (or
EBCDIC) columns are always ignored. Reverting a plain (or PostScript) style
-hex dump with xxd \-r \-p does not depend on the correct number of columns. Here, anything that looks like a pair of hex digits is interpreted.
+hex dump with xxd \-r \-p does not depend on the correct number of columns.
+Here, anything that looks like a pair of hex digits is interpreted.
.PP
Note the difference between
.br
@@ -224,7 +225,8 @@ Hex dump from file position 0x100 (=1024\-768) onwards.
\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +\-768 > hex_snippet" < file\fR
.PP
However, this is a rare situation and the use of `+' is rarely needed.
-The author prefers to monitor the effect of xxd with strace(1) or truss(1), whenever \-s is used.
+The author prefers to monitor the effect of xxd with strace(1) or truss(1),
+whenever \-s is used.
.SH EXAMPLES
.PP
.br
@@ -239,22 +241,25 @@ Print 3 lines (hex 0x30 bytes) from the end of
.br
\fI% xxd \-s \-0x30 file\fR
.PP
+Note: The results of the examples below are relevant to the xxd.1 man page as of
+May 2024
+.PP
.br
Print 120 bytes as a continuous hex dump with 20 octets per line.
.br
\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
.br
-2e54482058584420312022417567757374203139
+2e544820585844203120224d6179203230323422
.br
-39362220224d616e75616c207061676520666f72
+20224d616e75616c207061676520666f72207878
.br
-20787864220a2e5c220a2e5c222032317374204d
+64220a2e5c220a2e5c222032317374204d617920
.br
-617920313939360a2e5c22204d616e2070616765
+313939360a2e5c22204d616e2070616765206175
.br
-20617574686f723a0a2e5c2220202020546f6e79
+74686f723a0a2e5c2220202020546f6e79204e75
.br
-204e7567656e74203c746f6e79407363746e7567
+67656e74203c746f6e79407363746e7567656e2e
.br
.br
@@ -262,32 +267,32 @@ Hex dump the first 120 bytes of this man page with 12 octets per line.
.br
\fI% xxd \-l 120 \-c 12 xxd.1\fR
.br
-0000000: 2e54 4820 5858 4420 3120 2241 .TH XXD 1 "A
+00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
.br
-000000c: 7567 7573 7420 3139 3936 2220 ugust 1996"
+0000000c: 6179 2032 3032 3422 2022 4d61 ay 2024" "Ma
.br
-0000018: 224d 616e 7561 6c20 7061 6765 "Manual page
+00000018: 6e75 616c 2070 6167 6520 666f nual page fo
.br
-0000024: 2066 6f72 2078 7864 220a 2e5c for xxd"..\\
+00000024: 7220 7878 6422 0a2e 5c22 0a2e r xxd"..\\"..
.br
-0000030: 220a 2e5c 2220 3231 7374 204d "..\\" 21st M
+00000030: 5c22 2032 3173 7420 4d61 7920 \\" 21st May
.br
-000003c: 6179 2031 3939 360a 2e5c 2220 ay 1996..\\"
+0000003c: 3139 3936 0a2e 5c22 204d 616e 1996..\\" Man
.br
-0000048: 4d61 6e20 7061 6765 2061 7574 Man page aut
+00000048: 2070 6167 6520 6175 7468 6f72 page author
.br
-0000054: 686f 723a 0a2e 5c22 2020 2020 hor:..\\"
+00000054: 3a0a 2e5c 2220 2020 2054 6f6e :..\\" Ton
.br
-0000060: 546f 6e79 204e 7567 656e 7420 Tony Nugent
+00000060: 7920 4e75 6765 6e74 203c 746f y Nugent <to
.br
-000006c: 3c74 6f6e 7940 7363 746e 7567 <tony@sctnug
+0000006c: 6e79 4073 6374 6e75 6765 6e2e ny@sctnugen.
.PP
.br
Display just the date from the file xxd.1
.br
-\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
+\fI% xxd \-s 0x33 \-l 13 \-c 13 xxd.1\fR
.br
-0000036: 3231 7374 204d 6179 2031 3939 36 21st May 1996
+00000033: 3231 7374 204d 6179 2031 3939 36 21st May 1996
.PP
.br
Copy
@@ -302,11 +307,11 @@ and prepend 100 bytes of value 0x00.
.br
Patch the date in the file xxd.1
.br
-\fI% echo "0000037: 3574 68" | xxd \-r \- xxd.1\fR
+\fI% echo "0000034: 3574 68" | xxd \-r \- xxd.1\fR
.br
-\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
+\fI% xxd \-s 0x33 \-l 13 \-c 13 xxd.1\fR
.br
-0000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996
+00000033: 3235 7468 204d 6179 2031 3939 36 25th May 1996
.PP
.br
Create a 65537 byte file with all bytes 0x00,
@@ -319,11 +324,11 @@ Hex dump this file with autoskip.
.br
\fI% xxd \-a \-c 12 file\fR
.br
-0000000: 0000 0000 0000 0000 0000 0000 ............
+00000000: 0000 0000 0000 0000 0000 0000 ............
.br
*
.br
-000fffc: 0000 0000 40 ....A
+0000fffc: 0000 0000 41 ....A
.PP
Create a 1 byte file containing a single 'A' character.
The number after '\-r \-s' adds to the line numbers found in the file;
@@ -388,7 +393,7 @@ The tool's weirdness matches its creator's brain.
Use entirely at your own risk. Copy files. Trace it. Become a wizard.
.br
.SH VERSION
-This manual page documents xxd version 1.7
+This manual page documents xxd version 1.7 from 2024-05.
.SH AUTHOR
.br
(c) 1990-1997 by Juergen Weigert
diff --git a/runtime/doc/xxd.man b/runtime/doc/xxd.man
index b06971b..1251591 100644
--- a/runtime/doc/xxd.man
+++ b/runtime/doc/xxd.man
@@ -179,39 +179,42 @@ EXAMPLES
Print 3 lines (hex 0x30 bytes) from the end of file.
% xxd -s -0x30 file
+ Note: The results of the examples below are relevant to the xxd.1 man
+ page as of May 2024
+
Print 120 bytes as a continuous hex dump with 20 octets per line.
% xxd -l 120 -ps -c 20 xxd.1
- 2e54482058584420312022417567757374203139
- 39362220224d616e75616c207061676520666f72
- 20787864220a2e5c220a2e5c222032317374204d
- 617920313939360a2e5c22204d616e2070616765
- 20617574686f723a0a2e5c2220202020546f6e79
- 204e7567656e74203c746f6e79407363746e7567
+ 2e544820585844203120224d6179203230323422
+ 20224d616e75616c207061676520666f72207878
+ 64220a2e5c220a2e5c222032317374204d617920
+ 313939360a2e5c22204d616e2070616765206175
+ 74686f723a0a2e5c2220202020546f6e79204e75
+ 67656e74203c746f6e79407363746e7567656e2e
Hex dump the first 120 bytes of this man page with 12 octets per line.
% xxd -l 120 -c 12 xxd.1
- 0000000: 2e54 4820 5858 4420 3120 2241 .TH XXD 1 "A
- 000000c: 7567 7573 7420 3139 3936 2220 ugust 1996"
- 0000018: 224d 616e 7561 6c20 7061 6765 "Manual page
- 0000024: 2066 6f72 2078 7864 220a 2e5c for xxd"..\
- 0000030: 220a 2e5c 2220 3231 7374 204d "..\" 21st M
- 000003c: 6179 2031 3939 360a 2e5c 2220 ay 1996..\"
- 0000048: 4d61 6e20 7061 6765 2061 7574 Man page aut
- 0000054: 686f 723a 0a2e 5c22 2020 2020 hor:..\"
- 0000060: 546f 6e79 204e 7567 656e 7420 Tony Nugent
- 000006c: 3c74 6f6e 7940 7363 746e 7567 <tony@sctnug
+ 00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
+ 0000000c: 6179 2032 3032 3422 2022 4d61 ay 2024" "Ma
+ 00000018: 6e75 616c 2070 6167 6520 666f nual page fo
+ 00000024: 7220 7878 6422 0a2e 5c22 0a2e r xxd"..\"..
+ 00000030: 5c22 2032 3173 7420 4d61 7920 \" 21st May
+ 0000003c: 3139 3936 0a2e 5c22 204d 616e 1996..\" Man
+ 00000048: 2070 6167 6520 6175 7468 6f72 page author
+ 00000054: 3a0a 2e5c 2220 2020 2054 6f6e :..\" Ton
+ 00000060: 7920 4e75 6765 6e74 203c 746f y Nugent <to
+ 0000006c: 6e79 4073 6374 6e75 6765 6e2e ny@sctnugen.
Display just the date from the file xxd.1
- % xxd -s 0x36 -l 13 -c 13 xxd.1
- 0000036: 3231 7374 204d 6179 2031 3939 36 21st May 1996
+ % xxd -s 0x33 -l 13 -c 13 xxd.1
+ 00000033: 3231 7374 204d 6179 2031 3939 36 21st May 1996
Copy input_file to output_file and prepend 100 bytes of value 0x00.
% xxd input_file | xxd -r -s 100 > output_file
Patch the date in the file xxd.1
- % echo "0000037: 3574 68" | xxd -r - xxd.1
- % xxd -s 0x36 -l 13 -c 13 xxd.1
- 0000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996
+ % echo "0000034: 3574 68" | xxd -r - xxd.1
+ % xxd -s 0x33 -l 13 -c 13 xxd.1
+ 00000033: 3235 7468 204d 6179 2031 3939 36 25th May 1996
Create a 65537 byte file with all bytes 0x00, except for the last one
which is 'A' (hex 0x41).
@@ -219,9 +222,9 @@ EXAMPLES
Hex dump this file with autoskip.
% xxd -a -c 12 file
- 0000000: 0000 0000 0000 0000 0000 0000 ............
+ 00000000: 0000 0000 0000 0000 0000 0000 ............
*
- 000fffc: 0000 0000 40 ....A
+ 0000fffc: 0000 0000 41 ....A
Create a 1 byte file containing a single 'A' character. The number afâ€
ter '-r -s' adds to the line numbers found in the file; in effect, the
@@ -268,7 +271,7 @@ WARNINGS
own risk. Copy files. Trace it. Become a wizard.
VERSION
- This manual page documents xxd version 1.7
+ This manual page documents xxd version 1.7 from 2024-05.
AUTHOR
(c) 1990-1997 by Juergen Weigert
@@ -282,4 +285,4 @@ AUTHOR
<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
Small changes by Bram Moolenaar. Edited by Juergen Weigert.
-Manual page for xxd August 1996 XXD(1)
+Manual page for xxd May 2024 XXD(1)
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index a2daf14..220b371 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -98,12 +98,22 @@ au BufNewFile,BufRead *.run setf ampl
" Ant
au BufNewFile,BufRead build.xml setf ant
+" ANTLR / PCCTS
+"au BufNewFile,BufRead *.g setf antlr
+au BufNewFile,BufRead *.g setf pccts
+
+" ANTLR 4
+au BufNewFile,BufRead *.g4 setf antlr4
+
" Arduino
au BufNewFile,BufRead *.ino,*.pde setf arduino
" Ash of busybox
au BufNewFile,BufRead .ash_history setf sh
+" Asymptote
+au BufNewFile,BufRead *.asy setf asy
+
" Apache config file
au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf setf apache
au BufNewFile,BufRead */etc/apache2/sites-*/*.com setf apache
@@ -256,6 +266,7 @@ au BufNewFile,BufRead named*.conf,rndc*.conf,rndc*.key setf named
" BIND zone
au BufNewFile,BufRead named.root setf bindzone
+au BufNewFile,BufRead *.zone setf bindzone
au BufNewFile,BufRead *.db call dist#ft#BindzoneCheck('')
" Blade
@@ -321,6 +332,9 @@ au BufNewFile,BufRead *.toc
" Cdrdao config
au BufNewFile,BufRead */etc/cdrdao.conf,*/etc/defaults/cdrdao,*/etc/default/cdrdao,.cdrdao setf cdrdaoconf
+" Cedar
+au BufNewFile,BufRead *.cedar setf cedar
+
" Cfengine
au BufNewFile,BufRead cfengine.conf setf cfengine
@@ -457,7 +471,7 @@ au BufNewFile,BufRead */.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
au BufNewFile,BufRead */cmus/{rc,*.theme} setf cmusrc
" Cobol
-au BufNewFile,BufRead *.cbl,*.cob,*.lib setf cobol
+au BufNewFile,BufRead *.cbl,*.cob setf cobol
" cobol or zope form controller python script? (heuristic)
au BufNewFile,BufRead *.cpy
\ if getline(1) =~ '^##' |
@@ -496,6 +510,9 @@ au BufNewFile,BufRead *.cu,*.cuh setf cuda
" Cue
au BufNewFile,BufRead *.cue setf cue
+" Debian devscripts
+au BufNewFile,BufRead devscripts.conf,.devscripts setf sh
+
" Dockerfile; Podman uses the same syntax with name Containerfile
" Also see Dockerfile.* below.
au BufNewFile,BufRead Containerfile,Dockerfile,dockerfile,*.[dD]ockerfile setf dockerfile
@@ -532,6 +549,10 @@ au BufNewFile,BufRead s6-* setf execline
" Fontconfig config files
au BufNewFile,BufRead fonts.conf setf xml
+" Faust
+au BufNewFile,BufRead *.lib setf faust
+au BufNewFile,BufRead *.dsp call dist#ft#FTdsp()
+
" Libreoffice config files
au BufNewFile,BufRead *.xcu,*.xlb,*.xlc,*.xba setf xml
au BufNewFile,BufRead psprint.conf,sofficerc setf dosini
@@ -673,7 +694,7 @@ au BufNewFile,BufRead *.com call dist#ft#BindzoneCheck('dcl')
au BufNewFile,BufRead *.dot,*.gv setf dot
" Dune
-au BufNewFile,BufRead jbuild,dune,dune-project,dune-workspace setf dune
+au BufNewFile,BufRead jbuild,dune,dune-project,dune-workspace,dune-file setf dune
" Dylan - lid files
au BufNewFile,BufRead *.lid setf dylanlid
@@ -692,7 +713,7 @@ if has("fname_case")
endif
" Dracula
-au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe setf dracula
+au BufNewFile,BufRead *.drac,*.drc,*.lvs,*.lpe setf dracula
" Datascript
au BufNewFile,BufRead *.ds setf datascript
@@ -795,10 +816,6 @@ au BufNewFile,BufRead *.fish setf fish
" Flatpak config
au BufNewFile,BufRead */flatpak/repo/config setf dosini
-" FlexWiki - disabled, because it has side effects when a .wiki file
-" is not actually FlexWiki
-"au BufNewFile,BufRead *.wiki setf flexwiki
-
" Focus Executable
au BufNewFile,BufRead *.fex,*.focexec setf focexec
@@ -883,7 +900,7 @@ au BufNewFile,BufRead .gitattributes,*.git/info/attributes setf gitattributes
au BufNewFile,BufRead */.config/git/attributes setf gitattributes
au BufNewFile,BufRead */etc/gitattributes setf gitattributes
au BufNewFile,BufRead .gitignore,*.git/info/exclude setf gitignore
-au BufNewFile,BufRead */.config/git/ignore setf gitignore
+au BufNewFile,BufRead */.config/git/ignore,*.prettierignore setf gitignore
au BufNewFile,BufRead git-rebase-todo setf gitrebase
au BufRead,BufNewFile .gitsendemail.msg.?????? setf gitsendemail
au BufNewFile,BufRead *.git/*
@@ -898,7 +915,9 @@ au BufNewFile,BufRead gkrellmrc,gkrellmrc_? setf gkrellmrc
au BufNewFile,BufRead *.gleam setf gleam
" GLSL
-au BufNewFile,BufRead *.glsl setf glsl
+" Extensions supported by Khronos reference compiler (with one exception, ".glsl")
+" https://github.com/KhronosGroup/glslang
+au BufNewFile,BufRead *.vert,*.tesc,*.tese,*.glsl,*.geom,*.frag,*.comp,*.rgen,*.rmiss,*.rchit,*.rahit,*.rint,*.rcall setf glsl
" GN (generate ninja) files
au BufNewFile,BufRead *.gn,*.gni setf gn
@@ -934,6 +953,9 @@ au BufNewFile,BufRead *.go setf go
au BufNewFile,BufRead Gopkg.lock setf toml
au BufRead,BufNewFile go.work setf gowork
+" GoAccess configuration
+au BufNewFile,BufRead goaccess.conf setf goaccess
+
" GrADS scripts
au BufNewFile,BufRead *.gs setf grads
@@ -1020,7 +1042,7 @@ au BufNewFile,BufRead *.t.html setf tilde
" Translate shell
au BufNewFile,BufRead init.trans,*/etc/translate-shell,.trans setf clojure
-" HTML (.shtml and .stm for server side)
+" HTML (.stm for server side, .shtml is server-side or superhtml)
au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm call dist#ft#FThtml()
au BufNewFile,BufRead *.cshtml setf html
@@ -1177,7 +1199,7 @@ au BufNewFile,BufRead *.ipynb,*.jupyterlab-settings setf json
au BufNewFile,BufRead *.sublime-project,*.sublime-settings,*.sublime-workspace setf json
" Other files that look like json
-au BufNewFile,BufRead .prettierrc,.firebaserc,.stylelintrc,.lintstagedrc,flake.lock setf json
+au BufNewFile,BufRead .prettierrc,.firebaserc,.stylelintrc,.lintstagedrc,flake.lock,deno.lock setf json
" JSONC (JSON with comments)
au BufNewFile,BufRead *.jsonc,.babelrc,.eslintrc,.jsfmtrc setf jsonc
@@ -1242,6 +1264,9 @@ au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf set
" LambdaProlog or SML (see dist#ft#FTmod for *.mod)
au BufNewFile,BufRead *.sig call dist#ft#FTsig()
+" LDAP configuration
+au BufNewFile,BufRead ldaprc,.ldaprc,ldap.conf setf ldapconf
+
" LDAP LDIF
au BufNewFile,BufRead *.ldif setf ldif
@@ -1365,8 +1390,8 @@ au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases setf mailaliases
au BufNewFile,BufRead .mailcap,mailcap setf mailcap
" Makefile
-au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make
-au BufNewFile,BufRead Kbuild setf make
+au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak call dist#ft#FTmake()
+au BufNewFile,BufRead Kbuild setf make
" MakeIndex
au BufNewFile,BufRead *.ist,*.mst setf ist
@@ -1394,14 +1419,14 @@ au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md
\ setf markdown |
\ endif
-" Mason
-au BufNewFile,BufRead *.mason,*.mhtml,*.comp setf mason
+" Mason (it used to include *.comp, are those Mason files?)
+au BufNewFile,BufRead *.mason,*.mhtml setf mason
" Mathematica, Matlab, Murphi, Objective C or Octave
au BufNewFile,BufRead *.m call dist#ft#FTm()
-" Mathematica notebook
-au BufNewFile,BufRead *.nb setf mma
+" Mathematica notebook and package files
+au BufNewFile,BufRead *.nb,*.wl setf mma
" Maya Extension Language
au BufNewFile,BufRead *.mel setf mel
@@ -1409,6 +1434,12 @@ au BufNewFile,BufRead *.mel setf mel
" mbsync
au BufNewFile,BufRead .mbsyncrc setf conf
+" mcmeta
+au BufNewFile,BufRead *.mcmeta setf json
+
+" MediaWiki
+au BufNewFile,BufRead *.mw,*.wiki setf mediawiki
+
" Mercurial (hg) commit file
au BufNewFile,BufRead hg-editor-*.txt setf hgcommit
@@ -1608,7 +1639,7 @@ au BufNewFile,BufRead *.xom,*.xin setf omnimark
au BufNewFile,BufRead .ondirrc setf ondir
" OPAM
-au BufNewFile,BufRead opam,*.opam,*.opam.template setf opam
+au BufNewFile,BufRead opam,*.opam,*.opam.template,opam.locked,*.opam.locked setf opam
" OpenFOAM
au BufNewFile,BufRead [a-zA-Z0-9]*Dict\(.*\)\=,[a-zA-Z]*Properties\(.*\)\=,*Transport\(.*\),fvSchemes,fvSolution,fvConstrains,fvModels,*/constant/g,*/0\(\.orig\)\=/* call dist#ft#FTfoam()
@@ -1693,7 +1724,7 @@ au BufNewFile,BufRead *.pcmk setf pcmk
" PEM (Privacy-Enhanced Mail)
au BufNewFile,BufRead *.pem,*.cer,*.crt,*.csr setf pem
-" Perl
+" Perl or Prolog
if has("fname_case")
au BufNewFile,BufRead *.pl,*.PL call dist#ft#FTpl()
else
@@ -1803,10 +1834,6 @@ au BufNewFile,BufRead *termcap
" Prisma
au BufRead,BufNewFile *.prisma setf prisma
-" PCCTS / ANTLR
-"au BufNewFile,BufRead *.g setf antlr
-au BufNewFile,BufRead *.g setf pccts
-
" PPWizard
au BufNewFile,BufRead *.it,*.ih setf ppwiz
@@ -2152,7 +2179,7 @@ au BufNewFile,BufRead catalog setf catalog
" NOTE: Patterns ending in a star are further down, these have lower priority.
au BufNewFile,BufRead .bashrc,bashrc,bash.bashrc,.bash[_-]profile,.bash[_-]logout,.bash[_-]aliases,.bash[_-]history,bash-fc[-.],*.ebuild,*.bash,*.eclass,PKGBUILD,APKBUILD,*.bats,*.cygport call dist#ft#SetFileTypeSH("bash")
au BufNewFile,BufRead .kshrc,*.ksh call dist#ft#SetFileTypeSH("ksh")
-au BufNewFile,BufRead */etc/profile,.profile,*.sh,*.env call dist#ft#SetFileTypeSH(getline(1))
+au BufNewFile,BufRead */etc/profile,.profile,*.sh,*.env{rc,} call dist#ft#SetFileTypeSH(getline(1))
" Shell script (Arch Linux) or PHP file (Drupal)
au BufNewFile,BufRead *.install
@@ -2172,6 +2199,10 @@ au BufNewFile,BufRead .login,.cshrc,csh.cshrc,csh.login,csh.logout,*.csh,.alias
" Zig and Zig Object Notation (ZON)
au BufNewFile,BufRead *.zig,*.zon setf zig
+" Ziggy and Ziggy Schema
+au BufNewFile,BufRead *.ziggy setf ziggy
+au BufNewFile,BufRead *.ziggy-schema setf ziggy_schema
+
" Zserio
au BufNewFile,BufRead *.zs setf zserio
@@ -2402,7 +2433,7 @@ au BufNewFile,BufRead *.tcl,*.tm,*.tk,*.itcl,*.itk,*.jacl,.tclshrc,.wishrc,.tcls
" Xilinx's xsct and xsdb use tcl
au BufNewFile,BufRead .xsctcmdhistory,.xsdbcmdhistory setf tcl
-" templ
+" templ
au BufNewFile,BufRead *.templ setf templ
" Teal
@@ -2438,6 +2469,9 @@ au BufNewFile,BufRead texdoc.cnf setf conf
" Sometime we need to view its content for debugging
au BufNewFile,BufRead *.{pgf,nlo,nls,thm,eps_tex,pygtex,pygstyle,clo,aux,brf,ind,lof,loe,nav,vrb,ins,tikz,bbx,cbx,beamer} setf tex
+" LaTeX files generated by Inkscape
+au BufNewFile,BufRead *.pdf_tex setf tex
+
" ConTeXt
au BufNewFile,BufRead *.mkii,*.mkiv,*.mkvi,*.mkxl,*.mklx setf context
@@ -2453,10 +2487,10 @@ au BufNewFile,BufRead *.thrift setf thrift
" Tidy config
au BufNewFile,BufRead .tidyrc,tidyrc,tidy.conf setf tidy
-" TF mud client
+" TF (TinyFugue) mud client
au BufNewFile,BufRead .tfrc,tfrc setf tf
-" TF mud client or terraform
+" TF (TinyFugue) mud client or terraform
au BufNewFile,BufRead *.tf call dist#ft#FTtf()
" TLA+
diff --git a/runtime/ftplugin/antlr4.vim b/runtime/ftplugin/antlr4.vim
new file mode 100644
index 0000000..610d528
--- /dev/null
+++ b/runtime/ftplugin/antlr4.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin
+" Language: ANTLR4, ANother Tool for Language Recognition v4 <www.antlr.org>
+" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com>
+" Last Change: 2024 July 09
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/asy.vim b/runtime/ftplugin/asy.vim
new file mode 100644
index 0000000..76bd69d
--- /dev/null
+++ b/runtime/ftplugin/asy.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin
+" Language: Asymptote
+" Maintainer: AvidSeeker <avidseeker7@protonmail.com>
+" Last Change: 2024 Jul 13
+"
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let g:did_ftplugin = 1
+
+setlocal commentstring=/*\ %s\ */
+
+let b:undo_ftplugin = "setl commentstring<"
diff --git a/runtime/ftplugin/autohotkey.vim b/runtime/ftplugin/autohotkey.vim
new file mode 100644
index 0000000..9cb4fd7
--- /dev/null
+++ b/runtime/ftplugin/autohotkey.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: AutoHotkey
+" Maintainer: Peter Aronoff <peteraronoff@fastmail.com>
+" Last Changed: 2024 Jul 25
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal comments=:;
+setlocal commentstring=;\ %s
+
+let b:undo_ftplugin = "setlocal comments< commentstring<"
+
+" vim: nowrap sw=2 sts=2 ts=8 noet:
diff --git a/runtime/ftplugin/bindzone.vim b/runtime/ftplugin/bindzone.vim
new file mode 100644
index 0000000..f9e5f4b
--- /dev/null
+++ b/runtime/ftplugin/bindzone.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: bind zone file
+" Maintainer: This runtime file is looking for a new maintainer.
+" Last Change: 2024 Jul 06
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin=1
+
+setlocal comments=b:;
+setlocal commentstring=;\ %s
+setlocal formatoptions-=t
+setlocal formatoptions+=crq
+
+let b:undo_ftplugin = "setlocal com< cms< fo<"
diff --git a/runtime/ftplugin/cabal.vim b/runtime/ftplugin/cabal.vim
new file mode 100644
index 0000000..5ccfa1d
--- /dev/null
+++ b/runtime/ftplugin/cabal.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin file
+" Language: Haskell Cabal Build file
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:-- commentstring=--\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/cedar.vim b/runtime/ftplugin/cedar.vim
new file mode 100644
index 0000000..74a1903
--- /dev/null
+++ b/runtime/ftplugin/cedar.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: Cedar
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 4
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:// commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/chicken.vim b/runtime/ftplugin/chicken.vim
index 84d45ba..b12b264 100644
--- a/runtime/ftplugin/chicken.vim
+++ b/runtime/ftplugin/chicken.vim
@@ -1,12 +1,12 @@
" CHICKEN-specific Vim customizations
-" Last Change: 2018-03-05
-" Author: Evan Hanson <evhan@foldling.org>
-" Maintainer: Evan Hanson <evhan@foldling.org>
-" Repository: https://git.foldling.org/vim-scheme.git
-" URL: https://foldling.org/vim/ftplugin/chicken.vim
-" Notes: These are supplemental settings, to be loaded after the core
-" Scheme ftplugin file (ftplugin/scheme.vim). Enable it by setting
-" b:is_chicken=1 and filetype=scheme.
+" Last Change: 2024 Jun 21
+" Author: Evan Hanson <evhan@foldling.org>
+" Maintainer: Evan Hanson <evhan@foldling.org>
+" Repository: https://git.foldling.org/vim-scheme.git
+" URL: https://foldling.org/vim/ftplugin/chicken.vim
+" Notes: These are supplemental settings, to be loaded after the
+" core Scheme ftplugin file (ftplugin/scheme.vim). Enable
+" it by setting b:is_chicken=1 and filetype=scheme.
if !exists('b:did_scheme_ftplugin')
finish
diff --git a/runtime/ftplugin/cmakecache.vim b/runtime/ftplugin/cmakecache.vim
new file mode 100644
index 0000000..6753cd2
--- /dev/null
+++ b/runtime/ftplugin/cmakecache.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: cmakecache - CMakeCache.txt files generated by CMake
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:#,:// commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/csv.vim b/runtime/ftplugin/csv.vim
new file mode 100644
index 0000000..f1021f8
--- /dev/null
+++ b/runtime/ftplugin/csv.vim
@@ -0,0 +1,23 @@
+vim9script
+
+# Maintainer: Maxim Kim <habamax@gmail.com>
+# Last Update: 2024-06-18
+
+if !exists("b:csv_delimiter")
+ # detect delimiter
+ var delimiters = ",;\t|"
+
+ var max = 0
+ for d in delimiters
+ var count = getline(1)->split(d)->len() + getline(2)->split(d)->len()
+ if count > max
+ max = count
+ b:csv_delimiter = d
+ endif
+ endfor
+endif
+
+if exists("b:did_ftplugin")
+ finish
+endif
+b:did_ftplugin = 1
diff --git a/runtime/ftplugin/cuda.vim b/runtime/ftplugin/cuda.vim
new file mode 100644
index 0000000..91d722b
--- /dev/null
+++ b/runtime/ftplugin/cuda.vim
@@ -0,0 +1,11 @@
+" Vim filetype plugin
+" Language: CUDA
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 29
+
+if exists('b:did_ftplugin')
+ finish
+endif
+
+" Behaves mostly just like C++
+runtime! ftplugin/cpp.vim
diff --git a/runtime/ftplugin/editorconfig.vim b/runtime/ftplugin/editorconfig.vim
new file mode 100644
index 0000000..6d43735
--- /dev/null
+++ b/runtime/ftplugin/editorconfig.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: EditorConfig
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:#,:; commentstring=#\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/gdscript.vim b/runtime/ftplugin/gdscript.vim
index 93519d8..d1f41c8 100644
--- a/runtime/ftplugin/gdscript.vim
+++ b/runtime/ftplugin/gdscript.vim
@@ -4,6 +4,7 @@ vim9script
# Language: gdscript (Godot game engine scripting language)
# Maintainer: Maxim Kim <habamax@gmail.com>
# Website: https://github.com/habamax/vim-gdscript
+# Last Change: 2024 Jul 14
if exists("b:did_ftplugin") | finish | endif
@@ -22,6 +23,11 @@ setlocal commentstring=#\ %s
setlocal foldignore=
setlocal foldexpr=GDScriptFoldLevel()
+if get(g:, 'gdscript_recommended_style', 1)
+ setlocal noexpandtab tabstop=4 softtabstop=0 shiftwidth=0
+ b:undo_ftplugin ..= ' | setlocal expandtab< tabstop< softtabstop< shiftwidth<'
+endif
+
def GDScriptFoldLevel(): string
var line = getline(v:lnum)
diff --git a/runtime/ftplugin/go.vim b/runtime/ftplugin/go.vim
index 61dc1a1..75f78cf 100644
--- a/runtime/ftplugin/go.vim
+++ b/runtime/ftplugin/go.vim
@@ -2,6 +2,7 @@
" Language: Go
" Maintainer: David Barnett (https://github.com/google/vim-ft-go)
" Last Change: 2014 Aug 16
+" 2024 Jul 16 by Vim Project (add recommended indent style)
if exists('b:did_ftplugin')
finish
@@ -15,4 +16,9 @@ setlocal commentstring=//\ %s
let b:undo_ftplugin = 'setl fo< com< cms<'
+if get(g:, 'go_recommended_style', 1)
+ setlocal noexpandtab softtabstop=0 shiftwidth=0
+ let b:undo_ftplugin ..= ' | setl et< sts< sw<'
+endif
+
" vim: sw=2 sts=2 et
diff --git a/runtime/ftplugin/goaccess.vim b/runtime/ftplugin/goaccess.vim
new file mode 100644
index 0000000..fb55730
--- /dev/null
+++ b/runtime/ftplugin/goaccess.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin
+" Language: GoAccess configuration
+" Maintainer: Adam Monsen <haircut@gmail.com>
+" Last Change: 2024 Aug 1
+
+if exists('b:did_ftplugin')
+ finish
+endif
+
+let b:did_ftplugin = 1
+
+setl comments=:# commentstring=#\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/gomod.vim b/runtime/ftplugin/gomod.vim
new file mode 100644
index 0000000..554c948
--- /dev/null
+++ b/runtime/ftplugin/gomod.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: go module file
+" Maintainer: YU YUK KUEN <yukkuen.yu719@gmail.com>
+" Last Change: 2024-06-21
+" 2024 Jul 16 by Vim Project (noexpandtab)
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal noexpandtab
+setlocal formatoptions-=t formatoptions-=c
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl et< fo< cms<'
diff --git a/runtime/ftplugin/hlsplaylist.vim b/runtime/ftplugin/hlsplaylist.vim
new file mode 100644
index 0000000..879a04f
--- /dev/null
+++ b/runtime/ftplugin/hlsplaylist.vim
@@ -0,0 +1,37 @@
+" Vim filetype plugin
+" Language: HLS/M3U Playlist
+" Maintainer: AvidSeeker <avidseeker7@protonmail.com>
+" Last Change: 2024 Jul 07
+"
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let g:did_ftplugin = 1
+
+setlocal commentstring=#%s
+
+let b:undo_ftplugin = "setl commentstring<"
+
+function! M3UFold() abort
+ let line = getline(v:lnum)
+ if line =~# '^#EXTGRP'
+ return ">1"
+ endif
+ return "="
+endfunction
+
+function! M3UFoldText() abort
+ let start_line = getline(v:foldstart)
+ let title = substitute(start_line, '^#EXTGRP:*', '', '')
+ let foldsize = (v:foldend - v:foldstart + 1)
+ let linecount = '['.foldsize.' lines]'
+ return title.' '.linecount
+endfunction
+
+if has("folding")
+ setlocal foldexpr=M3UFold()
+ setlocal foldmethod=expr
+ setlocal foldtext=M3UFoldText()
+ let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<"
+endif
diff --git a/runtime/ftplugin/htmlangular.vim b/runtime/ftplugin/htmlangular.vim
new file mode 100644
index 0000000..b114372
--- /dev/null
+++ b/runtime/ftplugin/htmlangular.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: Angular HTML Template
+" Maintainer: Dennis van den Berg <dennis@vdberg.dev>
+" Last Change: 2024 Jul 9
+
+" Only use this filetype plugin when no other was loaded.
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" source the HTML ftplugin
+runtime! ftplugin/html.vim
diff --git a/runtime/ftplugin/javacc.vim b/runtime/ftplugin/javacc.vim
new file mode 100644
index 0000000..780c68b
--- /dev/null
+++ b/runtime/ftplugin/javacc.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin
+" Language: JavaCC
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal formatoptions-=t formatoptions+=croql
+
+" Set 'comments' to format dashed lists in comments. Behaves just like C.
+setlocal comments& comments^=sO:*\ -,mO:*\ \ ,exO:*/
+
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl fo< com< cms<'
diff --git a/runtime/ftplugin/kivy.vim b/runtime/ftplugin/kivy.vim
new file mode 100644
index 0000000..e19d832
--- /dev/null
+++ b/runtime/ftplugin/kivy.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: Kivy
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl commentstring=#\ %s
+
+let b:undo_ftplugin = 'setl cms<'
diff --git a/runtime/ftplugin/ldapconf.vim b/runtime/ftplugin/ldapconf.vim
new file mode 100644
index 0000000..7055716
--- /dev/null
+++ b/runtime/ftplugin/ldapconf.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: ldap.conf(5) configuration file.
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:# commentstring=#\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/lex.vim b/runtime/ftplugin/lex.vim
new file mode 100644
index 0000000..c6c47fe
--- /dev/null
+++ b/runtime/ftplugin/lex.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin
+" Language: Lex and Flex
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/man.vim b/runtime/ftplugin/man.vim
index 91e8a8b..45c2bb2 100644
--- a/runtime/ftplugin/man.vim
+++ b/runtime/ftplugin/man.vim
@@ -4,6 +4,8 @@
" Maintainer: SungHyun Nam <goweol@gmail.com>
" Autoload Split: Bram Moolenaar
" Last Change: 2024 Jun 06 (disabled the q mapping, #8210)
+" 2024 Jul 06 (use nnoremap, #15130)
+" 2024 Aug 23 (improve the <Plug>ManBS mapping, #15547, #15556)
" To make the ":Man" command available before editing a manual page, source
" this script from your startup vimrc file.
@@ -35,20 +37,18 @@ if &filetype == "man"
let b:undo_ftplugin = b:undo_ftplugin
\ . '|silent! nunmap <buffer> <LocalLeader>h'
endif
- nnoremap <buffer> <Plug>ManBS :%s/.\b//g<CR>:setl nomod<CR>''
+
+ nnoremap <buffer> <silent> <Plug>ManBS :setl ma<Bar>%s/.\b//g
+ \ <Bar>setl noma<CR>`'
nnoremap <buffer> <silent> <c-]> :call dist#man#PreGetPage(v:count)<CR>
nnoremap <buffer> <silent> <c-t> :call dist#man#PopPage()<CR>
- " Disabled, since this hides the ability to record a macro or use the
- " command line window
- " nnoremap <buffer> <silent> q :q<CR>
" Add undo commands for the maps
let b:undo_ftplugin = b:undo_ftplugin
\ . '|silent! nunmap <buffer> <Plug>ManBS'
\ . '|silent! nunmap <buffer> <c-]>'
\ . '|silent! nunmap <buffer> <c-t>'
- "\ . '|silent! nunmap <buffer> q'
endif
if exists('g:ft_man_folding_enable') && (g:ft_man_folding_enable == 1)
@@ -61,8 +61,8 @@ endif
if exists(":Man") != 2
com -nargs=+ -complete=shellcmd Man call dist#man#GetPage(<q-mods>, <f-args>)
- nmap <Leader>K :call dist#man#PreGetPage(0)<CR>
- nmap <Plug>ManPreGetPage :call dist#man#PreGetPage(0)<CR>
+ nnoremap <Leader>K :call dist#man#PreGetPage(0)<CR>
+ nnoremap <Plug>ManPreGetPage :call dist#man#PreGetPage(0)<CR>
endif
let &cpo = s:cpo_save
diff --git a/runtime/ftplugin/mediawiki.vim b/runtime/ftplugin/mediawiki.vim
new file mode 100644
index 0000000..4618246
--- /dev/null
+++ b/runtime/ftplugin/mediawiki.vim
@@ -0,0 +1,42 @@
+" Language: MediaWiki
+" Maintainer: Avid Seeker <avidseeker7@protonmail.com>
+" Home: http://en.wikipedia.org/wiki/Wikipedia:Text_editor_support#Vim
+" Last Change: 2024 Jul 14
+" Credits: chikamichi
+"
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+" Many MediaWiki wikis prefer line breaks only at the end of paragraphs
+" (like in a text processor), which results in long, wrapping lines.
+setlocal wrap linebreak
+setlocal textwidth=0
+
+setlocal formatoptions-=tc formatoptions+=l formatoptions+=roq
+setlocal matchpairs+=<:>
+
+" Treat lists, indented text and tables as comment lines and continue with the
+" same formatting in the next line (i.e. insert the comment leader) when hitting
+" <CR> or using "o".
+setlocal comments=n:#,n:*,n:\:,s:{\|,m:\|,ex:\|},s:<!--,m:\ \ \ \ ,e:-->
+setlocal commentstring=<!--\ %s\ -->
+
+" match HTML tags (taken directly from $VIM/ftplugin/html.vim)
+if exists("loaded_matchit")
+ let b:match_ignorecase=0
+ let b:match_skip = 's:Comment'
+ let b:match_words = '<:>,' .
+ \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
+ \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
+ \ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'
+endif
+
+" Enable folding based on ==sections==
+setlocal foldexpr=getline(v:lnum)=~'^\\(=\\+\\)[^=]\\+\\1\\(\\s*<!--.*-->\\)\\=\\s*$'?\">\".(len(matchstr(getline(v:lnum),'^=\\+'))-1):\"=\"
+setlocal foldmethod=expr
+
+let b:undo_ftplugin = "setl commentstring< comments< formatoptions< foldexpr< foldmethod<"
+let b:undo_ftplugin += " matchpairs< linebreak< wrap< textwidth<"
diff --git a/runtime/ftplugin/mermaid.vim b/runtime/ftplugin/mermaid.vim
index fe84ab3..5547ad3 100644
--- a/runtime/ftplugin/mermaid.vim
+++ b/runtime/ftplugin/mermaid.vim
@@ -2,6 +2,7 @@
" Language: Mermaid
" Maintainer: Craig MacEachern <https://github.com/craigmac/vim-mermaid>
" Last Change: 2022 Oct 13
+" 2024 Jul 18 by Vim Project (adjust comments)
if exists("b:did_ftplugin")
finish
@@ -16,9 +17,9 @@ setlocal shiftwidth=2
setlocal softtabstop=-1
setlocal tabstop=4
+setlocal comments=:%%
+setlocal commentstring=%%\ %s
" TODO: comments, formatlist stuff, based on what?
-setlocal comments=b:#,fb:-
-setlocal commentstring=#\ %s
setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o
setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]:\\&^.\\{4\\}
diff --git a/runtime/ftplugin/mojo.vim b/runtime/ftplugin/mojo.vim
new file mode 100644
index 0000000..ff50229
--- /dev/null
+++ b/runtime/ftplugin/mojo.vim
@@ -0,0 +1,41 @@
+" Vim filetype plugin
+" Language: Mojo
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 07
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal include=^\\s*\\(from\\\|import\\)
+setlocal define=^\\s*\\(\\(async\\s\\+\\)\\?def\\\|class\\)
+
+" For imports with leading .., append / and replace additional .s with ../
+let b:grandparent_match = '^\(.\.\)\(\.*\)'
+let b:grandparent_sub = '\=submatch(1)."/".repeat("../",strlen(submatch(2)))'
+
+" For imports with a single leading ., replace it with ./
+let b:parent_match = '^\.\(\.\)\@!'
+let b:parent_sub = './'
+
+" Replace any . sandwiched between word characters with /
+let b:child_match = '\(\w\)\.\(\w\)'
+let b:child_sub = '\1/\2'
+
+setlocal includeexpr=substitute(substitute(substitute(
+ \v:fname,
+ \b:grandparent_match,b:grandparent_sub,''),
+ \b:parent_match,b:parent_sub,''),
+ \b:child_match,b:child_sub,'g')
+
+setlocal suffixesadd=.mojo
+setlocal comments=b:#,fb:-
+setlocal commentstring=#\ %s
+
+let b:undo_ftplugin = 'setlocal include<'
+ \ . '|setlocal define<'
+ \ . '|setlocal includeexpr<'
+ \ . '|setlocal suffixesadd<'
+ \ . '|setlocal comments<'
+ \ . '|setlocal commentstring<'
diff --git a/runtime/ftplugin/mysql.vim b/runtime/ftplugin/mysql.vim
new file mode 100644
index 0000000..232df8c
--- /dev/null
+++ b/runtime/ftplugin/mysql.vim
@@ -0,0 +1,9 @@
+" Vim filetype plugin
+" Language: MySQL
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Aug 12
+if exists("b:did_ftplugin")
+ finish
+endif
+
+runtime ftplugin/sql.vim
diff --git a/runtime/ftplugin/objcpp.vim b/runtime/ftplugin/objcpp.vim
new file mode 100644
index 0000000..ffba685
--- /dev/null
+++ b/runtime/ftplugin/objcpp.vim
@@ -0,0 +1 @@
+runtime! ftplugin/objc.vim
diff --git a/runtime/ftplugin/scheme.vim b/runtime/ftplugin/scheme.vim
index 03f625b..63e5781 100644
--- a/runtime/ftplugin/scheme.vim
+++ b/runtime/ftplugin/scheme.vim
@@ -1,12 +1,12 @@
" Vim filetype plugin file
-" Language: Scheme (R7RS)
-" Last Change: 2019 Nov 19
-" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring')
-" Author: Evan Hanson <evhan@foldling.org>
-" Maintainer: Evan Hanson <evhan@foldling.org>
+" Language: Scheme (R7RS)
+" Last Change: 2024 Jun 21
+" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring')
+" Author: Evan Hanson <evhan@foldling.org>
+" Maintainer: Evan Hanson <evhan@foldling.org>
" Previous Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
-" Repository: https://git.foldling.org/vim-scheme.git
-" URL: https://foldling.org/vim/ftplugin/scheme.vim
+" Repository: https://git.foldling.org/vim-scheme.git
+" URL: https://foldling.org/vim/ftplugin/scheme.vim
if exists('b:did_ftplugin')
finish
@@ -20,11 +20,13 @@ setl comments=:;;;;,:;;;,:;;,:;,sr:#\|,mb:\|,ex:\|#
setl commentstring=;\ %s
setl define=^\\s*(def\\k*
setl iskeyword=33,35-39,42-43,45-58,60-90,94,95,97-122,126
+setl formatoptions-=t
-let b:undo_ftplugin = 'setl lisp< comments< commentstring< define< iskeyword<'
+let b:undo_ftplugin = 'setl lisp< comments< commentstring< define< iskeyword< formatoptions<'
setl lispwords+=case
setl lispwords+=define
+setl lispwords+=define-library
setl lispwords+=define-record-type
setl lispwords+=define-syntax
setl lispwords+=define-values
diff --git a/runtime/ftplugin/sql.vim b/runtime/ftplugin/sql.vim
index 61b7e67..3b56acd 100644
--- a/runtime/ftplugin/sql.vim
+++ b/runtime/ftplugin/sql.vim
@@ -3,8 +3,9 @@
" Version: 12.0
" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com>
" Last Change: 2017 Mar 07
-" 2024 Jan 14 by Vim Project (browsefilter)
-" 2024 May 18 by Vim Project (set comment options)
+" 2024 Jan 14 by Vim Project: browsefilter
+" 2024 May 18 by Vim Project: set comment options
+" 2024 Aug 14 by Vim Project: remove redundant code
" Download: http://vim.sourceforge.net/script.php?script_id=454
" For more details please use:
@@ -92,13 +93,19 @@
" Only do this when not done yet for this buffer
" This ftplugin can be used with other ftplugins. So ensure loading
" happens if all elements of this plugin have not yet loaded.
-if exists("b:did_ftplugin") && exists("b:current_ftplugin") && b:current_ftplugin == 'sql'
+if exists("b:did_ftplugin")
finish
endif
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
let s:save_cpo = &cpo
set cpo&vim
+let b:undo_ftplugin = "setl comments< commentstring< formatoptions< define< omnifunc<" .
+ \ " | unlet! b:browsefilter b:match_words"
+
" Disable autowrapping for code, but enable for comments
" t Auto-wrap text using textwidth
" c Auto-wrap comments using textwidth, inserting the current comment
@@ -263,19 +270,6 @@ elseif exists("g:sql_type_default")
endif
endif
-" If the above runtime command succeeded, do not load the default settings
-" as they should have already been loaded from a previous run.
-if exists("b:did_ftplugin") && exists("b:current_ftplugin") && b:current_ftplugin == 'sql'
- finish
-endif
-
-let b:undo_ftplugin = "setl comments< commentstring< formatoptions< define< omnifunc<" .
- \ " | unlet! b:browsefilter b:match_words"
-
-" Don't load another plugin for this buffer
-let b:did_ftplugin = 1
-let b:current_ftplugin = 'sql'
-
" Win32 and GTK can filter files in the browse dialog
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "SQL Files (*.sql)\t*.sql\n"
diff --git a/runtime/ftplugin/squirrel.vim b/runtime/ftplugin/squirrel.vim
new file mode 100644
index 0000000..559be88
--- /dev/null
+++ b/runtime/ftplugin/squirrel.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin
+" Language: Squirrel
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+" Set 'comments' to format dashed lists in comments.
+" Also include ///, used for Doxygen.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://
+
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/terraform.vim b/runtime/ftplugin/terraform.vim
new file mode 100644
index 0000000..b03cab3
--- /dev/null
+++ b/runtime/ftplugin/terraform.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin
+" Language: terraform
+" Maintainer: Janno Tjarks (janno.tjarks@mailbox.org)
+" Last Change: 2024 Jul 3
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=#\ %s
+setlocal comments=://,:#
+
+let b:undo_ftplugin = "setlocal commentstring< comments<"
diff --git a/runtime/ftplugin/tf.vim b/runtime/ftplugin/tf.vim
new file mode 100644
index 0000000..1571d5e
--- /dev/null
+++ b/runtime/ftplugin/tf.vim
@@ -0,0 +1,13 @@
+" Vim filetype plugin
+" Language: tf (TinyFugue)
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+setl comments=:#,:; commentstring=;\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/ftplugin/thrift.vim b/runtime/ftplugin/thrift.vim
new file mode 100644
index 0000000..dd18e19
--- /dev/null
+++ b/runtime/ftplugin/thrift.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin file
+" Language: Apache Thrift
+" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com>
+" Last Change: 2024/07/29
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+let b:did_ftplugin = 1
+
+" Thrift supports shell-style, C-style multi-line as well as single-line Java/C++ style comments.
+" Reference: https://diwakergupta.github.io/thrift-missing-guide/#_language_reference
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://,b:#
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl comments< commentstring<'
diff --git a/runtime/ftplugin/typst.vim b/runtime/ftplugin/typst.vim
index c2d7811..fba8083 100644
--- a/runtime/ftplugin/typst.vim
+++ b/runtime/ftplugin/typst.vim
@@ -1,14 +1,24 @@
-" Vim filetype plugin
-" Language: typst
-" Maintainer: Riley Bruins <ribru17@gmail.com>
-" Last Change: 2024 May 19
+" Vim filetype plugin file
+" Language: Typst
+" Maintainer: Gregory Anders
+" Last Change: 2024-07-14
+" Based on: https://github.com/kaarmu/typst.vim
if exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
-setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+compiler typst
+
setlocal commentstring=//\ %s
+setlocal comments=s1:/*,mb:*,ex:*/,://
+setlocal formatoptions+=croq
+setlocal suffixesadd=.typ
+
+let b:undo_ftplugin = 'setl cms< com< fo< sua<'
-let b:undo_ftplugin = 'setl com< cms<'
+if get(g:, 'typst_conceal', 0)
+ setlocal conceallevel=2
+ let b:undo_ftplugin .= ' cole<'
+endif
diff --git a/runtime/ftplugin/yacc.vim b/runtime/ftplugin/yacc.vim
new file mode 100644
index 0000000..d95e1ee
--- /dev/null
+++ b/runtime/ftplugin/yacc.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin
+" Language: Yacc
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 06
+
+if exists('b:did_ftplugin')
+ finish
+endif
+let b:did_ftplugin = 1
+
+" Set 'comments' to format dashed lists in comments.
+" Also include ///, used for Doxygen.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://
+setlocal commentstring=//\ %s
+
+let b:undo_ftplugin = 'setl com< cms<'
diff --git a/runtime/indent/Make_mvc.mak b/runtime/indent/Make_mvc.mak
index 0f73d7f..a50494d 100644
--- a/runtime/indent/Make_mvc.mak
+++ b/runtime/indent/Make_mvc.mak
@@ -4,7 +4,7 @@
.SUFFIXES:
-VIM = vim.exe
+VIMPROG = vim.exe
VIMRUNTIME = ..
# Run the tests that didn't run yet or failed previously.
@@ -12,7 +12,7 @@ VIMRUNTIME = ..
# If a test fails a testdir\*.fail file will be written.
test :
@ set "VIMRUNTIME=$(VIMRUNTIME)"
- $(VIM) --clean --not-a-term -u testdir\runtest.vim
+ $(VIMPROG) --clean --not-a-term -u testdir\runtest.vim
clean testclean :
diff --git a/runtime/indent/Makefile b/runtime/indent/Makefile
index 66ded80..36a3f15 100644
--- a/runtime/indent/Makefile
+++ b/runtime/indent/Makefile
@@ -3,14 +3,14 @@
.SUFFIXES:
.PHONY: test clean testclean
-VIM = vim
+VIMPROG = vim
VIMRUNTIME = ..
# Run the tests that didn't run yet or failed previously.
# If a test succeeds a testdir/*.out file will be written.
# If a test fails a testdir/*.fail file will be written.
test:
- VIMRUNTIME=$(VIMRUNTIME) $(VIM) --clean --not-a-term -u testdir/runtest.vim
+ VIMRUNTIME=$(VIMRUNTIME) $(VIMPROG) --clean --not-a-term -u testdir/runtest.vim
clean testclean:
diff --git a/runtime/indent/glsl.vim b/runtime/indent/glsl.vim
new file mode 100644
index 0000000..4ebee60
--- /dev/null
+++ b/runtime/indent/glsl.vim
@@ -0,0 +1,14 @@
+" Language: OpenGL Shading Language
+" Maintainer: Gregory Anders <greg@gpanders.com>
+" Last Modified: 2024 Jul 21
+" Upstream: https://github.com/tikhomirov/vim-glsl
+
+if exists('b:did_indent')
+ finish
+endif
+let b:did_indent = 1
+
+setlocal autoindent cindent
+setlocal cinoptions&
+
+let b:undo_indent = 'setl ai< ci< cino<'
diff --git a/runtime/indent/lua.vim b/runtime/indent/lua.vim
index 35b08d4..ce6cfe1 100644
--- a/runtime/indent/lua.vim
+++ b/runtime/indent/lua.vim
@@ -4,6 +4,7 @@
" First Author: Max Ischenko <mfi 'at' ukr.net>
" Last Change: 2017 Jun 13
" 2022 Sep 07: b:undo_indent added by Doug Kearns
+" 2024 Jul 27: by Vim project: match '(', ')' in function GetLuaIndentIntern()
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@@ -46,12 +47,12 @@ function! GetLuaIndentIntern()
endif
" Add a 'shiftwidth' after lines that start a block:
- " 'function', 'if', 'for', 'while', 'repeat', 'else', 'elseif', '{'
+ " 'function', 'if', 'for', 'while', 'repeat', 'else', 'elseif', '{', '('
let ind = indent(prevlnum)
let prevline = getline(prevlnum)
let midx = match(prevline, '^\s*\%(if\>\|for\>\|while\>\|repeat\>\|else\>\|elseif\>\|do\>\|then\>\)')
if midx == -1
- let midx = match(prevline, '{\s*\%(--\%([^[].*\)\?\)\?$')
+ let midx = match(prevline, '\%({\|(\)\s*\%(--\%([^[].*\)\?\)\?$')
if midx == -1
let midx = match(prevline, '\<function\>\s*\%(\k\|[.:]\)\{-}\s*(')
endif
@@ -65,9 +66,9 @@ function! GetLuaIndentIntern()
endif
endif
- " Subtract a 'shiftwidth' on end, else, elseif, until and '}'
+ " Subtract a 'shiftwidth' on end, else, elseif, until, '}' and ')'
" This is the part that requires 'indentkeys'.
- let midx = match(getline(v:lnum), '^\s*\%(end\>\|else\>\|elseif\>\|until\>\|}\)')
+ let midx = match(getline(v:lnum), '^\s*\%(end\>\|else\>\|elseif\>\|until\>\|}\|)\)')
if midx != -1 && synIDattr(synID(v:lnum, midx + 1, 1), "name") != "luaComment"
let ind = ind - shiftwidth()
endif
diff --git a/runtime/indent/mojo.vim b/runtime/indent/mojo.vim
new file mode 100644
index 0000000..9b6a7d4
--- /dev/null
+++ b/runtime/indent/mojo.vim
@@ -0,0 +1,6 @@
+" Vim indent file
+" Language: Mojo
+" Maintainer: Riley Bruins <ribru17@gmail.com>
+" Last Change: 2024 Jul 07
+
+runtime! indent/python.vim
diff --git a/runtime/indent/ocaml.vim b/runtime/indent/ocaml.vim
index c9beb8b..d137796 100644
--- a/runtime/indent/ocaml.vim
+++ b/runtime/indent/ocaml.vim
@@ -4,8 +4,7 @@
" Mike Leary <leary@nwlink.com>
" Markus Mottl <markus.mottl@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
-" Last Change: 2023 Aug 28 - Add undo_indent (Vim Project)
-" 2017 Jun 13
+" Last Change: 2017 Jun 13
" 2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
" 2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
" 2013 June - commented textwidth (Marc Weber)
@@ -36,6 +35,7 @@ if !exists("no_ocaml_comments")
setlocal comments=sr:(*\ ,mb:\ ,ex:*)
setlocal comments^=sr:(**,mb:\ \ ,ex:*)
setlocal fo=cqort
+ let b:undo_indent .= " | setl com< fo<"
endif
endif
diff --git a/runtime/indent/proto.vim b/runtime/indent/proto.vim
new file mode 100644
index 0000000..743f140
--- /dev/null
+++ b/runtime/indent/proto.vim
@@ -0,0 +1,19 @@
+" Vim indent file
+" Language: Protobuf
+" Maintainer: David Pedersen <limero@me.com>
+" Last Change: 2024 Aug 07
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" Protobuf is like indenting C
+setlocal cindent
+setlocal expandtab
+setlocal shiftwidth=2
+
+let b:undo_indent = "setlocal cindent< expandtab< shiftwidth<"
+
+" vim: sw=2 sts=2 et
diff --git a/runtime/indent/rust.vim b/runtime/indent/rust.vim
index 7c055ec..a96650d 100644
--- a/runtime/indent/rust.vim
+++ b/runtime/indent/rust.vim
@@ -2,7 +2,10 @@
" Language: Rust
" Author: Chris Morgan <me@chrismorgan.info>
" Last Change: 2023-09-11
+" 2024 Jul 04 by Vim Project: use shiftwidth() instead of hard-coding shifted values (#15138)
+
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
+" Note: upstream seems umaintained: https://github.com/rust-lang/rust.vim/issues/502
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@@ -179,7 +182,7 @@ function GetRustIndent(lnum)
" A standalone 'where' adds a shift.
let l:standalone_prevline_where = prevline =~# '\V\^\s\*where\s\*\$'
if l:standalone_prevline_where
- return indent(prevlinenum) + 4
+ return indent(prevlinenum) + shiftwidth()
endif
" Handle where clauses nicely: subsequent values should line up nicely.
@@ -197,7 +200,7 @@ function GetRustIndent(lnum)
let l:scope_start = searchpair('{\|(', '', '}\|)', 'nbW',
\ 's:is_string_comment(line("."), col("."))')
if l:scope_start != 0 && l:scope_start < a:lnum
- return indent(l:scope_start) + 4
+ return indent(l:scope_start) + shiftwidth()
endif
endif
@@ -268,7 +271,7 @@ function GetRustIndent(lnum)
" It's the closing line, dedent it
return 0
else
- return &shiftwidth
+ return shiftwidth()
endif
endif
endif
diff --git a/runtime/indent/scheme.vim b/runtime/indent/scheme.vim
index 496da32..888659b 100644
--- a/runtime/indent/scheme.vim
+++ b/runtime/indent/scheme.vim
@@ -1,9 +1,10 @@
" Vim indent file
-" Language: Scheme
-" Last Change: 2018 Jan 31
-" Maintainer: Evan Hanson <evhan@foldling.org>
+" Language: Scheme
+" Last Change: 2024 Jun 21
+" Maintainer: Evan Hanson <evhan@foldling.org>
" Previous Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
-" URL: https://foldling.org/vim/indent/scheme.vim
+" Repository: https://git.foldling.org/vim-scheme.git
+" URL: https://foldling.org/vim/indent/scheme.vim
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
diff --git a/runtime/indent/testdir/lua.in b/runtime/indent/testdir/lua.in
new file mode 100644
index 0000000..c8f5d2b
--- /dev/null
+++ b/runtime/indent/testdir/lua.in
@@ -0,0 +1,19 @@
+-- vim: set ft=lua sw=2 noet:
+
+-- START_INDENT
+function foo(a, b, c, d)
+ return { a, b, c, d }
+end
+
+local a = foo(
+1,
+2,
+"longxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+4
+)
+
+local b = {
+1,
+ 2,
+}
+-- END_INDENT
diff --git a/runtime/indent/testdir/lua.ok b/runtime/indent/testdir/lua.ok
new file mode 100644
index 0000000..95f9873
--- /dev/null
+++ b/runtime/indent/testdir/lua.ok
@@ -0,0 +1,19 @@
+-- vim: set ft=lua sw=2 noet:
+
+-- START_INDENT
+function foo(a, b, c, d)
+ return { a, b, c, d }
+end
+
+local a = foo(
+ 1,
+ 2,
+ "longxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+ 4
+)
+
+local b = {
+ 1,
+ 2,
+}
+-- END_INDENT
diff --git a/runtime/indent/testdir/thrift.in b/runtime/indent/testdir/thrift.in
new file mode 100644
index 0000000..7490dc8
--- /dev/null
+++ b/runtime/indent/testdir/thrift.in
@@ -0,0 +1,38 @@
+// vim: set ft=thrift sw=4 et:
+
+# START_INDENT
+namespace cpp foo
+namespace java com.foo.thrift
+
+include "Status.thrift"
+
+// These are supporting structs for JniFrontend.java, which serves as the glue
+// between our C++ execution environment and the Java frontend.
+
+struct TSetSessionParams {
+ 1: required string user
+}
+
+struct TAuthenticateParams {
+ 1: required string user
+ 2: required string passwd
+ 3: optional string host
+4: optional string db_name
+ 5: optional list<string> table_names;
+}
+
+/* {
+ * xxxx
+ * }
+ */
+// TColumnDesc
+struct TColumnDesc {
+ // {
+4: optional string tableName
+5: optional string columnDefault
+ // Let FE control the type, which makes it easier to modify and display complex types
+6: optional string columnTypeStr // deprecated
+7: optional string dataType
+ // }
+}
+# END_INDENT
diff --git a/runtime/indent/testdir/thrift.ok b/runtime/indent/testdir/thrift.ok
new file mode 100644
index 0000000..9e2a482
--- /dev/null
+++ b/runtime/indent/testdir/thrift.ok
@@ -0,0 +1,38 @@
+// vim: set ft=thrift sw=4 et:
+
+# START_INDENT
+namespace cpp foo
+namespace java com.foo.thrift
+
+include "Status.thrift"
+
+// These are supporting structs for JniFrontend.java, which serves as the glue
+// between our C++ execution environment and the Java frontend.
+
+struct TSetSessionParams {
+ 1: required string user
+}
+
+struct TAuthenticateParams {
+ 1: required string user
+ 2: required string passwd
+ 3: optional string host
+ 4: optional string db_name
+ 5: optional list<string> table_names;
+}
+
+/* {
+ * xxxx
+ * }
+ */
+// TColumnDesc
+struct TColumnDesc {
+ // {
+ 4: optional string tableName
+ 5: optional string columnDefault
+ // Let FE control the type, which makes it easier to modify and display complex types
+ 6: optional string columnTypeStr // deprecated
+ 7: optional string dataType
+ // }
+}
+# END_INDENT
diff --git a/runtime/indent/thrift.vim b/runtime/indent/thrift.vim
new file mode 100644
index 0000000..e0860e1
--- /dev/null
+++ b/runtime/indent/thrift.vim
@@ -0,0 +1,74 @@
+" Vim indent file
+" Language: Apache Thrift
+" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com>
+" Last Change: 2024/07/29
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal cindent
+setlocal indentexpr=GetThriftIndent()
+
+let b:undo_indent = "set cindent< indentexpr<"
+
+" Only define the function once.
+if exists("*GetThriftIndent")
+ finish
+endif
+
+let s:keepcpo= &cpo
+set cpo&vim
+
+function! SkipThriftBlanksAndComments(startline)
+ let lnum = a:startline
+ while lnum > 1
+ let lnum = prevnonblank(lnum)
+ if getline(lnum) =~ '\*/\s*$'
+ while getline(lnum) !~ '/\*' && lnum > 1
+ let lnum = lnum - 1
+ endwhile
+ if getline(lnum) =~ '^\s*/\*'
+ let lnum = lnum - 1
+ else
+ break
+ endif
+ elseif getline(lnum) =~ '^\s*\(//\|#\)'
+ let lnum = lnum - 1
+ else
+ break
+ endif
+ endwhile
+ return lnum
+endfunction
+
+function GetThriftIndent()
+ " Thrift is just like C; use the built-in C indenting and then correct a few
+ " specific cases.
+ let theIndent = cindent(v:lnum)
+
+ " If we're in the middle of a comment then just trust cindent
+ if getline(v:lnum) =~ '^\s*\*'
+ return theIndent
+ endif
+
+ let line = substitute(getline(v:lnum), '\(//\|#\).*$', '', '')
+ let previousNum = SkipThriftBlanksAndComments(v:lnum - 1)
+ let previous = substitute(getline(previousNum), '\(//\|#\).*$', '', '')
+
+ let l:indent = indent(previousNum)
+ if previous =~ "{" && previous !~ "}"
+ let l:indent += shiftwidth()
+ endif
+ if line =~ "}" && line !~ "{"
+ let l:indent -= shiftwidth()
+ endif
+ return l:indent
+endfunction
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+" vim: sw=2 sts=2 et
diff --git a/runtime/indent/typst.vim b/runtime/indent/typst.vim
new file mode 100644
index 0000000..6aaa04a
--- /dev/null
+++ b/runtime/indent/typst.vim
@@ -0,0 +1,18 @@
+" Vim indent file
+" Language: Typst
+" Maintainer: Gregory Anders <greg@gpanders.com>
+" Last Change: 2024-07-14
+" Based on: https://github.com/kaarmu/typst.vim
+
+if exists('b:did_indent')
+ finish
+endif
+let b:did_indent = 1
+
+setlocal expandtab
+setlocal softtabstop=2
+setlocal shiftwidth=2
+setlocal autoindent
+setlocal indentexpr=typst#indentexpr()
+
+let b:undo_indent = 'setl et< sts< sw< ai< inde<'
diff --git a/runtime/indent/vim.vim b/runtime/indent/vim.vim
index 97a4a36..c95a76d 100644
--- a/runtime/indent/vim.vim
+++ b/runtime/indent/vim.vim
@@ -3,7 +3,7 @@ vim9script
# Vim indent file
# Language: Vim script
# Maintainer: The Vim Project <https://github.com/vim/vim>
-# Last Change: 2023 Aug 10
+# Last Change: 2024 Jul 12
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
# Only load this indent file when no other was loaded.
@@ -16,7 +16,9 @@ b:undo_indent = 'setlocal indentkeys< indentexpr<'
import autoload '../autoload/dist/vimindent.vim'
-setlocal indentexpr=vimindent.Expr()
+# export indentexpr as a global function, so it can be easily manipulated by plugins
+g:VimIndent = vimindent.Expr
+setlocal indentexpr=g:VimIndent()
setlocal indentkeys+==endif,=enddef,=endfu,=endfor,=endwh,=endtry,=endclass,=endinterface,=endenum,=},=else,=cat,=finall,=END,0\\
execute('setlocal indentkeys+=0=\"\\\ ,0=#\\\ ')
setlocal indentkeys-=0#
diff --git a/runtime/indent/yaml.vim b/runtime/indent/yaml.vim
index e5daf9f..c387127 100644
--- a/runtime/indent/yaml.vim
+++ b/runtime/indent/yaml.vim
@@ -3,7 +3,8 @@
" Maintainer: Nikolai Pavlov <zyx.vim@gmail.com>
" Last Updates: Lukas Reineke, "lacygoill"
" Last Change: 2022 Jun 17
-" 2024 Feb 29 disable mulitline indent by default (The Vim project)
+" 2024 Feb 29 by Vim project: disable mulitline indent by default
+" 2024 Aug 14 by Vim project: fix re-indenting when commenting out lines
" Only load this indent file when no other was loaded.
if exists('b:did_indent')
@@ -13,7 +14,7 @@ endif
let b:did_indent = 1
setlocal indentexpr=GetYAMLIndent(v:lnum)
-setlocal indentkeys=!^F,o,O,0#,0},0],<:>,0-
+setlocal indentkeys=!^F,o,O,0},0],<:>,0-
setlocal nosmartindent
let b:undo_indent = 'setlocal indentexpr< indentkeys< smartindent<'
diff --git a/runtime/lang/Makefile b/runtime/lang/Makefile
index d5f2ed6..211d492 100644
--- a/runtime/lang/Makefile
+++ b/runtime/lang/Makefile
@@ -13,34 +13,34 @@ all: $(CONVERTED)
# Convert menu_zh_cn.utf-8.vim to create menu_chinese_gb.936.vim.
menu_chinese_gb.936.vim: menu_zh_cn.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP936 $< | \
+ iconv -f UTF-8 -t CP936 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp936/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_zh_tw.utf-8.vim to create menu_chinese_taiwan.950.vim.
menu_chinese_taiwan.950.vim: menu_zh_tw.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP950 $< | \
+ iconv -f UTF-8 -t CP950 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp950/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_cs_cz.utf-8.vim to create menu_cs_cz.iso_8859-2.vim.
menu_cs_cz.iso_8859-2.vim: menu_cs_cz.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t ISO-8859-2 $< | \
+ iconv -f UTF-8 -t ISO-8859-2 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(ISO-8859-2)/' \
> $@
# Convert menu_cs_cz.utf-8.vim to create menu_czech_czech_republic.1250.vim.
menu_czech_czech_republic.1250.vim: menu_cs_cz.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP1250 $< | \
+ iconv -f UTF-8 -t CP1250 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(CP1250)/' \
> $@
@@ -54,107 +54,107 @@ menu_czech_czech_republic.ascii.vim: menu_cs_cz.utf-8.vim
-e 's/Ť/T/g' -e 's/ť/t/g' -e 's/Ú/U/g' -e 's/ú/u/g' -e 's/Ů/U/g' \
-e 's/ů/u/g' -e 's/Ã/Y/g' -e 's/ý/y/g' -e 's/Ž/Z/g' -e 's/ž/z/g' \
-e 's/scriptencoding utf-8/scriptencoding latin1/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(ASCII - without diacritics)/' \
- $< > $@
+ $? > $@
# Convert menu_ja_jp.utf-8.vim to create menu_ja_jp.euc-jp.vim.
menu_ja_jp.euc-jp.vim: menu_ja_jp.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t EUC-JP $< | \
+ iconv -f UTF-8 -t EUC-JP $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding euc-jp/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(EUC-JP)/' \
> $@
# Convert menu_ja_jp.utf-8.vim to create menu_japanese_japan.932.vim.
menu_japanese_japan.932.vim: menu_ja_jp.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP932 $< | \
+ iconv -f UTF-8 -t CP932 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp932/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
-e 's/\(" Menu Translations:.*\)(.*)/\1(CP932)/' \
> $@
# Convert menu_ko_kr.utf-8.vim to create menu_ko_kr.euckr.vim.
menu_ko_kr.euckr.vim: menu_ko_kr.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t EUC-KR $< | \
+ iconv -f UTF-8 -t EUC-KR $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding euc-kr/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_pl_pl.utf-8.vim to create menu_pl_pl.iso_8859-2.vim.
menu_pl_pl.iso_8859-2.vim: menu_pl_pl.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t ISO-8859-2 $< | \
+ iconv -f UTF-8 -t ISO-8859-2 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_pl_pl.utf-8.vim to create menu_polish_poland.1250.vim.
menu_polish_poland.1250.vim: menu_pl_pl.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP1250 $< | \
+ iconv -f UTF-8 -t CP1250 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_ru_ru.utf-8.vim to create menu_ru_ru.koi8-r.vim.
menu_ru_ru.koi8-r.vim: menu_ru_ru.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t KOI8-R $< | \
+ iconv -f UTF-8 -t KOI8-R $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding koi8-r/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_ru_ru.utf-8.vim to create menu_ru_ru.cp1251.vim.
menu_ru_ru.cp1251.vim: menu_ru_ru.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP1251 $< | \
+ iconv -f UTF-8 -t CP1251 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1251/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_sl_si.utf-8.vim to create menu_sl_si.cp1250.vim.
menu_sl_si.cp1250.vim: menu_sl_si.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP1250 $< | \
+ iconv -f UTF-8 -t CP1250 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1250/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# for naming encodings, see `:h encoding-names`
# Convert menu_sl_si.utf-8.vim to create menu_sl_si.latin2.vim.
menu_sl_si.latin2.vim: menu_sl_si.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t ISO-8859-2 $< | \
+ iconv -f UTF-8 -t ISO-8859-2 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_tr_tr.utf-8.vim to create menu_tr_tr.cp1254.vim.
menu_tr_tr.cp1254.vim: menu_tr_tr.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP1254 $< | \
+ iconv -f UTF-8 -t CP1254 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1254/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_tr_tr.utf-8.vim to create menu_tr_tr.iso_8859-9.vim.
menu_tr_tr.iso_8859-9.vim: menu_tr_tr.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t ISO-8859-9 $< | \
+ iconv -f UTF-8 -t ISO-8859-9 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-9/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_sr_rs.utf-8.vim to create menu_sr_rs.iso_8859-5.vim.
menu_sr_rs.iso_8859-5.vim: menu_sr_rs.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t ISO-8859-5 $< | \
+ iconv -f UTF-8 -t ISO-8859-5 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-5/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# for naming encodings, see `:h encoding-names`
@@ -174,8 +174,8 @@ menu_sr_rs.iso_8859-2.vim: menu_sr_rs.utf-8.vim
-e 's/С/S/g' -e 's/Т/T/g' -e 's/Ћ/Ć/g' -e 's/У/U/g' -e 's/Ф/F/g' \
-e 's/Ð¥/H/g' -e 's/Ц/C/g' -e 's/Ч/ÄŒ/g' -e 's/Ð/Dž/g' -e 's/Ш/Å /g' \
-e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
- $< | iconv -f UTF-8 -t ISO-8859-2 \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
+ $? | iconv -f UTF-8 -t ISO-8859-2 \
> $@
# Convert menu_sr_rs.utf-8.vim to create menu_sr_rs.ascii.vim.
@@ -194,39 +194,39 @@ menu_sr_rs.ascii.vim: menu_sr_rs.utf-8.vim
-e 's/С/S/g' -e 's/Т/T/g' -e 's/Ћ/C/g' -e 's/У/U/g' -e 's/Ф/F/g' \
-e 's/Ð¥/H/g' -e 's/Ц/C/g' -e 's/Ч/C/g' -e 's/Ð/Dz/g' -e 's/Ш/S/g' \
-e 's/scriptencoding utf-8/scriptencoding latin1/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
- $< > $@
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
+ $? > $@
# Convert menu_uk_ua.utf-8.vim to create menu_uk_ua.cp1251.vim.
menu_uk_ua.cp1251.vim: menu_uk_ua.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t CP1251 $< | \
+ iconv -f UTF-8 -t CP1251 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding cp1251/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_uk_ua.utf-8.vim to create menu_uk_ua.koi8-u.vim.
menu_uk_ua.koi8-u.vim: menu_uk_ua.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t KOI8-U $< | \
+ iconv -f UTF-8 -t KOI8-U $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding koi8-u/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_hu_hu.utf-8.vim to create menu_hu_hu.iso_8859-2.vim.
menu_hu_hu.iso_8859-2.vim: menu_hu_hu.utf-8.vim
rm -f $@
- iconv -f UTF-8 -t ISO-8859-2 $< | \
+ iconv -f UTF-8 -t ISO-8859-2 $? | \
$(SED) -e 's/scriptencoding utf-8/scriptencoding iso-8859-2/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
# Convert menu_slovak_slovak_republic.1250.vim to create menu_sk_sk.iso_8859-2.vim.
menu_sk_sk.iso_8859-2.vim: menu_slovak_slovak_republic.1250.vim
rm -f $@
- iconv -f CP1250 -t ISO-8859-2 $< | \
+ iconv -f CP1250 -t ISO-8859-2 $? | \
$(SED) -e 's/scriptencoding cp1250/scriptencoding iso-8859-2/' \
- -e 's/" Original translations/" Generated from $<, DO NOT EDIT/' \
+ -e 's/" Original translations/" Generated from $?, DO NOT EDIT/' \
> $@
clean:
diff --git a/runtime/lang/menu_pt_br.vim b/runtime/lang/menu_pt_br.vim
index 06dea92..6f5b043 100644
--- a/runtime/lang/menu_pt_br.vim
+++ b/runtime/lang/menu_pt_br.vim
@@ -1 +1,303 @@
-source <sfile>:p:h/menu_pt_pt.vim
+" Menu Translations: Português do Brasil
+" Maintainer: José de Paula <jose@infoviaweb.com>
+" Contributor: JNylson <nylsinho_ba@hotmail.com>
+" Last Change: 2024 Ago 23
+" Original translations
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
+" Translations in latin1 (ISO-8859-1), and should work in
+" latin9 (ISO-8859-15)
+
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+" Help menu
+menutrans &Help A&juda
+menutrans &Overview<Tab><F1> &Conteúdo
+menutrans &User\ Manual &Manual\ do\ Usuário
+menutrans &How-to\ links &Como\ fazer?
+menutrans &Find\.\.\. &Procurar\.\.\.
+menutrans &Credits &Créditos
+menutrans O&rphans &Órfãos
+menutrans Co&pying &Licença
+menutrans &Sponsor/Register &Doar/Registrar
+menutrans &Version &Versão
+menutrans &About &Sobre
+
+" File menu
+menutrans &File &Arquivo
+menutrans &Open\.\.\.<Tab>:e A&brir\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Ab&rir\ em\ outra\ janela\.\.\.<Tab>:sp
+menutrans Open\ &Tab\.\.\.<Tab>:tabnew A&brir\ em\ outra\ aba\.\.\.<Tab>:tabnew
+menutrans &New<Tab>:enew &Novo<Tab>:enew
+menutrans &Close<Tab>:close &Fechar<Tab>:close
+menutrans &Save<Tab>:w &Salvar<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Sa&lvar\ como\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. &Exibir\ diferenças\ com\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Ex&ibir\ patcheado\ por\.\.\.
+menutrans &Print I&mprimir
+menutrans Sa&ve-Exit<Tab>:wqa Sal&var\ e\ sair<Tab>:wqa
+menutrans E&xit<Tab>:qa Sai&r<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Editar
+menutrans &Undo<Tab>u &Desfazer<Tab>u
+menutrans &Redo<Tab>^R &Refazer<Tab>^R
+menutrans Rep&eat<Tab>\. Repe&tir<Tab>\.
+menutrans Cu&t<Tab>"+x Re&cortar<Tab>"+x
+menutrans &Copy<Tab>"+y Cop&iar<Tab>"+y
+menutrans &Paste<Tab>"+gP C&olar<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Colocar\ &antes<Tab>[p
+menutrans Put\ &After<Tab>]p Colocar\ &depois<Tab>]p
+menutrans &Delete<Tab>x Apa&gar<Tab>x
+menutrans &Select\ all<Tab>ggVG &Selecionar\ tudo<Tab>ggVG
+menutrans &Find\.\.\. &Procurar\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Procurar\ e\ substit&uir\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Procurar\ e\ substit&uir<Tab>:%s
+menutrans Find\ and\ Rep&lace Procurar\ e\ substit&uir
+menutrans Find\ and\ Rep&lace<Tab>:s Procurar\ e\ substituir<Tab>:s
+menutrans Settings\ &Window &Opções
+menutrans Startup\ &Settings &Inicialização
+
+" Edit/Global Settings
+menutrans &Global\ Settings Opções\ &Globais
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Ativar/Desativar\ &Realce\ de\ Padrões<Tab>:set\ hls!
+menutrans Toggle\ &Ignoring\ Case<Tab>:set\ ic! Ativar/Desativar\ &Ignorar\ maiúsculas<Tab>:set\ ic!
+menutrans Toggle\ &Showing\ Matched\ Pairs<Tab>:set\ sm! Ativar/Desativar\ &coincidências<Tab>:set\ sm!
+
+menutrans &Context\ lines Linhas\ de\ C&ontexto
+
+menutrans &Virtual\ Edit Edição\ &Virtual
+menutrans Never Nunca
+menutrans Block\ Selection Seleção\ de\ Bloco
+menutrans Insert\ mode Modo\ de\ inserção
+menutrans Block\ and\ Insert Bloco\ e\ inserção
+menutrans Always Sempre
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Ativar/Desativar\ Modo\ de\ In&serção<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatibility<Tab>:set\ cp! Ativar/Desativar\ Co&mpatibilidade\ com\ Vi<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Camin&ho\ de\ Busca\.\.\.
+menutrans Ta&g\ Files\.\.\. Arquivos\ de\ Tags\.\.\.
+
+" GUI options
+menutrans Toggle\ &Toolbar Ocultar/Exibir\ Barra\ de\ &Ferramentas
+menutrans Toggle\ &Bottom\ Scrollbar Ocultar/Exibir\ Barra\ de\ &Rolagem\ Inferior
+menutrans Toggle\ &Left\ Scrollbar Ocultar/Exibir\ Barra\ de\ R&olagem\ Esquerda
+menutrans Toggle\ &Right\ Scrollbar Ocultar/Exibir\ Barra\ de\ Ro&lagem\ Direita
+let g:menutrans_path_dialog = "Indique um caminho de procura para os arquivos.\nSepare os nomes dos diretórios com uma vírgula."
+let g:menutrans_tags_dialog = "Indique os nomes dos arquivos de tags.\nSepare os nomes com uma vírgula."
+
+" Edit/File Settings
+menutrans F&ile\ Settings Opções\ do\ &Arquivo
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Ativar/Desativar\ &numeração\ de\ linhas<Tab>:set\ nu!
+menutrans Toggle\ Relati&ve\ Line\ Numbering<Tab>:set\ rnu! Ativar/Desativar\ numeração\ relati&va\ de\ linha<Tab>:set\ rnu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Ativar/Desativar\ modo\ &lista<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrapping<Tab>:set\ wrap! Ativar/Desativar\ &quebra\ de\ linhas<Tab>:set\ wrap!
+menutrans Toggle\ W&rapping\ at\ Word<Tab>:set\ lbr! Ativar/Desativar\ quebra\ na\ &palavra<Tab>:set\ lbr!
+menutrans Toggle\ Tab\ &Expanding<Tab>:set\ et! Ativar/Desativar\ expansão\ de\ tabs<Tab>:set\ et!
+menutrans Toggle\ &Auto\ Indenting<Tab>:set\ ai! Ativar/Desativar\ &auto-indentação<Tab>:set\ ai!
+menutrans Toggle\ &C-Style\ Indenting<Tab>:set\ cin! Ativar/Desativar\ indentação\ estilo\ &C<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth Largura\ da\ &indentação
+
+menutrans Soft\ &Tabstop &Tabulação\ com\ espaços
+
+menutrans Te&xt\ Width\.\.\. Largura\ do\ te&xto\.\.\.
+let g:menutrans_textwidth_dialog = "Digite a nova largura do texto (0 para desativar a formatação): "
+
+menutrans &File\ Format\.\.\. &Formato\ do\ arquivo\.\.\.
+let g:menutrans_fileformat_dialog = "Selecione o formato para gravar o arquivo"
+let g:menutrans_fileformat_choices = " &Unix \n &Dos \n &Mac \n &Cancelar "
+
+menutrans C&olor\ Scheme Esquema\ de\ c&ores
+menutrans default padrão
+menutrans Show\ C&olor\ Schemes\ in\ Menu Mostrar\ &esquema\ de\ cores\ no\ menu
+menutrans Select\ Fo&nt\.\.\. Selecionar\ fo&nte\.\.\.
+
+menutrans &Keymap &Mapa\ de\ teclado
+menutrans Show\ &Keymaps\ in\ Menu Mostrar\ &mapa\ de\ teclado\ no\ menu
+menutrans None Nenhum
+
+" Programming menu
+menutrans &Tools &Ferramentas
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Pular\ para\ este\ tag<Tab>g^]
+menutrans Jump\ &back<Tab>^T &Voltar<Tab>^T
+menutrans Build\ &Tags\ File &Construir\ Arquivo\ de\ tags
+menutrans &Spelling &Ortografia
+menutrans &Folding &Dobra
+menutrans &Make<Tab>:make &Make<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Lista\ de\ erros<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Li&sta\ de\ mensagens<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn P&róximo\ erro<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Erro\ anterior<Tab>:cp
+menutrans &Older\ List<Tab>:cold Listar\ erros\ &antigos<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Listar\ erros\ &novos<Tab>:cnew
+menutrans Error\ &Window &Janela\ de\ erros
+menutrans Se&t\ Compiler Def&inir\ Compilador
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Converter\ para\ hexadecimal<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Conver&ter\ de\ volta<Tab>:%!xxd\ -r
+
+" Tools.Spelling menu
+menutrans &Spell\ Check\ On &Ativar\ Correção\ Ortográfica
+menutrans Spell\ Check\ &Off &Desativar\ Correção\ Ortográfica
+menutrans To\ &Next\ error<Tab>]s &Próximo\ Erro<Tab>]s
+menutrans To\ &Previous\ Error<Tab>[s Erro\ A&nterior<Tab>[s
+menutrans Suggest\ &Corrections<Tab>z= &Sugerir\ Correções<Tab>z=
+menutrans &Repeat\ correction<Tab>:spellrepall &Repetir\ Correção<Tab>:spellrepall
+
+menutrans Set\ language\ to\ "en" Inglês
+menutrans Set\ language\ to\ "en_au" Inglês\ (en_au)
+menutrans Set\ language\ to\ "en_ca" Inglês\ (en_ca)
+menutrans Set\ language\ to\ "en_gb" Inglês\ (en_gb)
+menutrans Set\ language\ to\ "en_nz" Inglês\ (en_nz)
+menutrans Set\ language\ to\ "en_us" Inglês\ (en_us)
+
+menutrans &Find\ More\ Languages &Buscar\ mais\ idiomas
+
+" Tools.Fold Menu
+menutrans &Enable/Disable\ folds<Tab>zi &Ativar/Desativar\ dobras<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Ver\ linha\ do\ cursor<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Ve&r\ somente\ linha\ do\ cursor<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm &Fechar\ mais\ dobras<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM F&echar\ todas\ as\ dobras<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr A&brir\ mais\ dobras<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Abr&ir\ todas\ as\ dobras<Tab>zR
+" fold method
+menutrans Fold\ Met&hod &Modo\ de\ dobras
+menutrans Create\ &Fold<Tab>zf Criar\ &dobras<Tab>zf
+menutrans &Delete\ Fold<Tab>zd Remover\ d&obras<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Remover\ &todas\ as\ dobras<Tab>zD
+" moving around in folds
+menutrans Fold\ col&umn\ width &Largura\ da\ coluna\ da\ dobra
+
+" Tools.Diff Menu
+menutrans &Update &Atualizar
+menutrans &Get\ Block &Obter\ Bloco
+menutrans &Put\ Block &Pôr\ Bloco
+
+" Tools.Error Menu
+menutrans &Update<Tab>:cwin &Atualizar<Tab>:cwin
+menutrans &Open<Tab>:copen A&brir<Tab>:copen
+menutrans &Close<Tab>:cclose &Fechar<Tab>:cclose
+
+" Setup the Tools.Compiler submenu
+menutrans Se&t\ Compiler Def&inir\ compilador
+menutrans Show\ Compiler\ Se&ttings\ in\ Menu Mos&trar\ configurações\ do\ compilador\ no\ menu
+" Names for buffer menu.
+menutrans &Buffers &Buffers
+menutrans &Refresh\ menu A&tualizar\ menu
+menutrans &Delete &Apagar
+menutrans &Alternate A&lternar
+menutrans &Next P&róximo
+menutrans &Previous A&nterior
+let g:menutrans_no_file = "[Sem arquivos]"
+
+" Window menu
+menutrans &Window &Janela
+menutrans &New<Tab>^Wn N&ova<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Dividir<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ D&ividir\ para\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Dividir\ &verticalmente<Tab>^Wv
+menutrans Split\ File\ E&xplorer &Abrir\ Gerenciador\ de\ arquivos
+menutrans &Close<Tab>^Wc &Fechar<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Fechar\ &outra(s)<Tab>^Wo
+menutrans Move\ &To Mover\ &para
+menutrans &Top<Tab>^WK A&cima<Tab>^WK
+menutrans &Bottom<Tab>^WJ A&baixo<Tab>^WJ
+menutrans &Left\ side<Tab>^WH Lado\ &esquerdo<Tab>^WH
+menutrans &Right\ side<Tab>^WL Lado\ di&reito<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR &Girar\ para\ cima<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Girar\ para\ bai&xo<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= Mesmo\ &Tamanho<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Altura\ &Máxima<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ A&ltura\ Mínima<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Larg&ura\ Máxima<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Largura\ Mí&nima<Tab>^W1\|
+
+" The popup menu
+menutrans &Undo &Desfazer
+menutrans Cu&t Recor&tar
+menutrans &Copy &Copiar
+menutrans &Paste Co&lar
+menutrans &Delete &Apagar
+menutrans Select\ Blockwise Seleção\ de\ bloco
+menutrans Select\ &Word Selecionar\ &Palavra
+menutrans Select\ &Sentence Selecionar\ &frase
+menutrans Select\ Pa&ragraph Selecionar\ pa&rágrafo
+menutrans Select\ &Line Selecionar\ L&inha
+menutrans Select\ &Block Selecionar\ &bloco
+menutrans Select\ &All Selecionar\ T&udo
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Abrir Arquivo
+ tmenu ToolBar.Save Salvar Arquivo
+ tmenu ToolBar.SaveAll Salvar Todos os arquivos
+ tmenu ToolBar.Print Imprimir
+ tmenu ToolBar.Undo Desfazer
+ tmenu ToolBar.Redo Refazer
+ tmenu ToolBar.Cut Recortar
+ tmenu ToolBar.Copy Copiar
+ tmenu ToolBar.Paste Colar
+ tmenu ToolBar.Find Procurar...
+ tmenu ToolBar.FindNext Procurar Próximo
+ tmenu ToolBar.FindPrev Procurar Anterior
+ tmenu ToolBar.Replace Procurar e Substituir
+ if 0 " disable; these are in the Windoze menu
+ tmenu ToolBar.New Nova Janela
+ tmenu ToolBar.WinSplit Dividir Janela
+ tmenu ToolBar.WinMax Janela Máxima
+ tmenu ToolBar.WinMin Janela Mínima
+ tmenu ToolBar.WinVSplit Dividir Verticalmente
+ tmenu ToolBar.WinMaxWidth Largura Máxima
+ tmenu ToolBar.WinMinWidth Largura Mínima
+ tmenu ToolBar.WinClose Fechar Janela
+ endif
+ tmenu ToolBar.LoadSesn Carregar Sessão
+ tmenu ToolBar.SaveSesn Salvar Sessão
+ tmenu ToolBar.RunScript Executar script
+ tmenu ToolBar.Make Make
+ tmenu ToolBar.Shell Abrir um shell
+ tmenu ToolBar.RunCtags Gerar um arquivo de tags
+ tmenu ToolBar.TagJump Saltar para um tag
+ tmenu ToolBar.Help Ajuda
+ tmenu ToolBar.FindHelp Procurar na Ajuda
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaxe
+"menutrans &Show\ individual\ choices E&xibir\ escolhas\ individuais
+menutrans &Show\ filetypes\ in\ menu E&xibir\ tipos\ de\ arquivos\ no\ menu
+menutrans Set\ '&syntax'\ only Ativar\ somente\ s&intaxe
+menutrans Set\ '&filetype'\ too Ativar\ também\ &tipo\ de\ arquivo
+menutrans &Off &Desativar
+menutrans &Manual &Manual
+menutrans A&utomatic A&utomática
+menutrans on/off\ for\ &This\ file Ativar/Desativar\ neste\ &arquivo
+menutrans &Show\ File\ Types\ in\ Menu Mos&trar\ tipos\ de\ arquivos\ no\ menu
+menutrans Co&lor\ test T&este\ de\ cores
+menutrans &Highlight\ test Teste\ de\ &realce
+menutrans &Convert\ to\ HTML &Converter\ para\ HTML
+
+" Find Help dialog text
+let g:menutrans_help_dialog = "Digite um comando ou palavra para obter ajuda;\n\nAnteponha i_ para comandos de entrada (ex.: i_CTRL-X)\nAnteponha c_ para comandos da linha de comandos (ex.: c_<Del>)\nAnteponha ` para um nome de opção (ex.: `shiftwidth`)"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/lang/menu_pt_pt.vim b/runtime/lang/menu_pt_pt.vim
index ddc35b8..7d3c104 100644
--- a/runtime/lang/menu_pt_pt.vim
+++ b/runtime/lang/menu_pt_pt.vim
@@ -1,7 +1,7 @@
" Menu Translations: Português
" adaptado de pt_br.
" Maintainer: Duarte Henriques <duarte_henriques@myrealbox.com>
-" Last Change: 2024 May 2
+" Last Change: 2024 Aug 22
" Original translations
" Quit when menu translations have already been done.
@@ -129,7 +129,7 @@ menutrans &Jump\ to\ this\ tag<Tab>g^] Saltar\ para\ esta\ &tag<Tab>g^]
menutrans Jump\ &back<Tab>^T &Voltar<Tab>^T
menutrans Build\ &Tags\ File &Construir\ Arquivo\ de\ tags
menutrans &Folding &Dobra
-menutrans &Make<Tab>:make Fazer<Tab>:make
+menutrans &Make<Tab>:make &Make<Tab>:make
menutrans &List\ Errors<Tab>:cl &Lista\ de\ erros<Tab>:cl
menutrans L&ist\ Messages<Tab>:cl! Li&sta\ de\ mensagens<Tab>:cl!
menutrans &Next\ Error<Tab>:cn P&róximo\ erro<Tab>:cn
@@ -137,7 +137,7 @@ menutrans &Previous\ Error<Tab>:cp &Erro\ anterior<Tab>:cp
menutrans &Older\ List<Tab>:cold Listar\ erros\ &antigos<Tab>:cold
menutrans N&ewer\ List<Tab>:cnew Listar\ erros\ &novos<Tab>:cnew
menutrans Error\ &Window &Janela\ de\ erros
-menutrans Se&T\ Compiler Def&inir\ Compilador
+menutrans Se&t\ Compiler Def&inir\ Compilador
menutrans &Convert\ to\ HEX<Tab>:%!xxd Converter\ para\ hexadecimal<Tab>:%!xxd
menutrans Conve&rt\ back<Tab>:%!xxd\ -r Conver&ter\ de\ volta<Tab>:%!xxd\ -r
@@ -266,38 +266,6 @@ menutrans &Convert\ to\ HTML &Converter\ para\ HTML
" Find Help dialog text
let g:menutrans_help_dialog = "Digite um comando ou palavra para obter ajuda;\n\nAnteponha i_ para comandos de entrada (ex.: i_CTRL-X)\nAnteponha c_ para comandos da linha de comandos (ex.: c_<Del>)\nAnteponha ` para um nome de opção (ex.: `shiftwidth`)"
-menutrans Open\ &Tab\.\.\.<Tab>:tabnew Aba\ aberta\.\.\.<Tab>:tabnew
-menutrans Startup\ &Settings Configurações\ de\ inicialização
-menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Numeração\ relativa\ de\ linha<Tab>:set\ nru!
-menutrans Toggle\ Line\ &Wrapping<Tab>:set\ wrap! Quebra\ de\ linha<Tab>:set\ wrap!
-menutrans Toggle\ W&rapping\ at\ word<Tab>:set\ lbr! Envolvendo\ a\ palavra<Tab>:set\ lbr!
-menutrans Toggle\ Tab\ &Expanding<Tab>:set\ et! Gastos\ de\ tabulação<Tab>:set\ et!
-menutrans Toggle\ &Auto\ Indenting<Tab>:set\ ai! Recuo\ automático<Tab>:set\ ai!
-menutrans Toggle\ &C-Style\ Indenting<Tab>:set\ cin! Recuo\ estilo\ C<Tab>:set\ cin!
-menutrans &Spelling Ortografia
-menutrans &Spell\ Check\ On Correção\ ortográfica\ ativada
-menutrans Spell\ Check\ &Off Correção\ ortográfica\ desativada
-menutrans To\ &Next\ error<Tab>]s Próximo\ erro<Tab>]s
-menutrans To\ &Previous\ error<Tab>[s erro\ anterior<Tab>[s
-menutrans Suggest\ &Corrections<Tab>z= Sugerir\ correções<Tab>z=
-menutrans &Repeat\ correction<Tab>:spellrepall repetir\ correção<Tab>:spellrepall
-"-------------------
-menutrans Set\ language\ to\ "en" Definir\ idioma\ para\ "en"
-menutrans Set\ language\ to\ "en_au" Definir\ idioma\ para\ "en_au"
-menutrans Set\ language\ to\ "en_ca" Definir\ idioma\ para\ "en_ca"
-menutrans Set\ language\ to\ "en_gb" Definir\ idioma\ para\ "en_gb"
-menutrans Set\ language\ to\ "en_nz" Definir\ idioma\ para\ "en_nz"
-menutrans Set\ language\ to\ "en_us" Definir\ idioma\ para\ "en_us"
-menutrans &Find\ More\ Languages Encontre\ mais\ idiomas
-let g:menutrans_set_lang_to = 'Definir idioma para'
-menutrans M&anual Manual
-menutrans I&ndent Recuar
-menutrans E&xpression Expressão
-menutrans S&yntax Sintaxe
-menutrans &Diff Diferença
-menutrans Ma&rker Marcador
-menutrans &Show\ File\ Types\ in\ menu Mostrar\ tipos\ de\ arquivo\ no\ menu
-menutrans &Sponsor/Register Patrocinador/Registro
let &cpo = s:keepcpo
unlet s:keepcpo
diff --git a/runtime/macros/maze/mazeclean.c b/runtime/macros/maze/mazeclean.c
index 04dcebd..f0f0bb6 100644
--- a/runtime/macros/maze/mazeclean.c
+++ b/runtime/macros/maze/mazeclean.c
@@ -8,7 +8,7 @@
char *M, A, Z, E = 40, line[80], T[3];
int
-main (C)
+main (int C)
{
for (M = line + E, *line = A = scanf ("%d", &C); --E; line[E] = M[E] = E)
printf ("._");
diff --git a/runtime/optwin.vim b/runtime/optwin.vim
index f218ffb..8306ed3 100644
--- a/runtime/optwin.vim
+++ b/runtime/optwin.vim
@@ -1,7 +1,7 @@
" These commands create the option window.
"
" Maintainer: The Vim Project <https://github.com/vim/vim>
-" Last Change: 2024 Jun 05
+" Last Change: 2024 Jul 12
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" If there already is an option window, jump to that one.
@@ -556,6 +556,8 @@ endif
call <SID>Header(gettext("multiple tab pages"))
call <SID>AddOption("showtabline", gettext("0, 1 or 2; when to use a tab pages line"))
call append("$", " \tset stal=" . &stal)
+call <SID>AddOption("tabclose", gettext("behaviour when closing tab pages: left, uselast or empty"))
+call append("$", " \tset tcl=" . &tcl)
call <SID>AddOption("tabpagemax", gettext("maximum number of tab pages to open for -p and \"tab all\""))
call append("$", " \tset tpm=" . &tpm)
call <SID>AddOption("tabline", gettext("custom tab pages line"))
diff --git a/runtime/pack/dist/opt/nohlsearch/plugin/nohlsearch.vim b/runtime/pack/dist/opt/nohlsearch/plugin/nohlsearch.vim
new file mode 100644
index 0000000..a2d766e
--- /dev/null
+++ b/runtime/pack/dist/opt/nohlsearch/plugin/nohlsearch.vim
@@ -0,0 +1,20 @@
+" nohlsearch.vim: Auto turn off hlsearch
+" Last Change: 2024-07-31
+" Maintainer: Maxim Kim <habamax@gmail.com>
+"
+" turn off hlsearch after:
+" - doing nothing for 'updatetime'
+" - getting into insert mode
+
+if exists('g:loaded_nohlsearch')
+ finish
+endif
+let g:loaded_nohlsearch = 1
+
+augroup nohlsearch
+ au!
+ noremap <Plug>(nohlsearch) <cmd>nohlsearch<cr>
+ noremap! <Plug>(nohlsearch) <cmd>nohlsearch<cr>
+ au CursorHold * call feedkeys("\<Plug>(nohlsearch)", 'm')
+ au InsertEnter * call feedkeys("\<Plug>(nohlsearch)", 'm')
+augroup END
diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
index d24ae57..377827e 100644
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -4,7 +4,7 @@ vim9script
# Author: Bram Moolenaar
# Copyright: Vim license applies, see ":help license"
-# Last Change: 2024 Jun 16
+# Last Change: 2024 Jul 04
# Converted to Vim9: Ubaldo Tiberi <ubaldo.tiberi@gmail.com>
# WORK IN PROGRESS - The basics works stable, more to come
@@ -15,7 +15,7 @@ vim9script
# There are two ways to run gdb:
# - In a terminal window; used if possible, does not work on MS-Windows
-# Not used when g:termdebug_use_prompt is set to 1.
+# Not used when g:termdebug_use_prompt is set to true.
# - Using a "prompt" buffer; may use a terminal window for the program
# For both the current window is used to view source code and shows the
@@ -42,18 +42,33 @@ def Echoerr(msg: string)
echohl ErrorMsg | echom $'[termdebug] {msg}' | echohl None
enddef
+def Echowarn(msg: string)
+ echohl WarningMsg | echom $'[termdebug] {msg}' | echohl None
+enddef
# Variables to keep their status among multiple instances of Termdebug
# Avoid to source the script twice.
if exists('g:termdebug_loaded')
- Echoerr('Termdebug already loaded.')
- finish
+ Echoerr('Termdebug already loaded.')
+ finish
endif
g:termdebug_loaded = true
+g:termdebug_is_running = false
+
+
+# The command that starts debugging, e.g. ":Termdebug vim".
+# To end type "quit" in the gdb window.
+command -nargs=* -complete=file -bang Termdebug StartDebug(<bang>0, <f-args>)
+command -nargs=+ -complete=file -bang TermdebugCommand StartDebugCommand(<bang>0, <f-args>)
+
+enum Way
+ Prompt,
+ Terminal
+endenum
# Script variables declaration. These variables are re-initialized at every
# Termdebug instance
-var way: string
+var way: Way
var err: string
var pc_id: number
@@ -74,10 +89,12 @@ var varbufnr: number
var varbufname: string
var asmbufnr: number
var asmbufname: string
-var promptbuf: number
-# This is for the "debugged program" thing
+var promptbufnr: number
+# 'pty' refers to the "debugged-program" pty
var ptybufnr: number
+var ptybufname: string
var commbufnr: number
+var commbufname: string
var gdbjob: job
var gdb_channel: channel
@@ -110,7 +127,7 @@ var evalexpr: string
# Remember the old value of 'signcolumn' for each buffer that it's set in, so
# that we can restore the value for all buffers.
var signcolumn_buflist: list<number>
-var save_columns: number
+var saved_columns: number
var allleft: bool
# This was s:vertical but I cannot use vertical as variable name
@@ -120,20 +137,19 @@ var winbar_winids: list<number>
var saved_mousemodel: string
-var k_map_saved: dict<any>
-var plus_map_saved: dict<any>
-var minus_map_saved: dict<any>
-
+var saved_K_map: dict<any>
+var saved_plus_map: dict<any>
+var saved_minus_map: dict<any>
def InitScriptVariables()
if exists('g:termdebug_config') && has_key(g:termdebug_config, 'use_prompt')
- way = g:termdebug_config['use_prompt'] ? 'prompt' : 'terminal'
+ way = g:termdebug_config['use_prompt'] ? Way.Prompt : Way.Terminal
elseif exists('g:termdebug_use_prompt')
- way = g:termdebug_use_prompt
+ way = g:termdebug_use_prompt ? Way.Prompt : Way.Terminal
elseif has('terminal') && !has('win32')
- way = 'terminal'
+ way = Way.Terminal
else
- way = 'prompt'
+ way = Way.Prompt
endif
err = ''
@@ -154,9 +170,11 @@ def InitScriptVariables()
varbufname = 'Termdebug-variables-listing'
asmbufnr = 0
asmbufname = 'Termdebug-asm-listing'
- promptbuf = 0
- # This is for the "debugged program" thing
+ promptbufnr = 0
+ # This is for the "debugged-program" thing
+ ptybufname = "debugged-program"
ptybufnr = 0
+ commbufname = "gdb-communication"
commbufnr = 0
gdbjob = null_job
@@ -190,23 +208,87 @@ def InitScriptVariables()
# Remember the old value of 'signcolumn' for each buffer that it's set in, so
# that we can restore the value for all buffers.
signcolumn_buflist = [bufnr()]
- save_columns = 0
+ saved_columns = &columns
winbar_winids = []
- k_map_saved = null_dict
- plus_map_saved = null_dict
- minus_map_saved = null_dict
+ saved_K_map = maparg('K', 'n', false, true)
+ saved_plus_map = maparg('+', 'n', false, true)
+ saved_minus_map = maparg('-', 'n', false, true)
if has('menu')
- saved_mousemodel = null_string
+ saved_mousemodel = &mousemodel
+ endif
+enddef
+
+def SanityCheck(): bool
+ var gdb_cmd = GetCommand()[0]
+ var cwd = $'{getcwd()}/'
+ if exists('+shellslash') && !&shellslash
+ # on windows, need to handle backslash
+ cwd->substitute('\\', '/', 'g')
+ endif
+ var is_check_ok = true
+ # Need either the +terminal feature or +channel and the prompt buffer.
+ # The terminal feature does not work with gdb on win32.
+ if (way is Way.Prompt) && !has('channel')
+ err = 'Cannot debug, +channel feature is not supported'
+ elseif (way is Way.Prompt) && !exists('*prompt_setprompt')
+ err = 'Cannot debug, missing prompt buffer support'
+ elseif (way is Way.Prompt) && !empty(glob($'{cwd}{gdb_cmd}'))
+ err = $"You have a file/folder named '{gdb_cmd}' in the current directory Termdebug may not work properly. Please exit and rename such a file/folder."
+ elseif !empty(glob($'{cwd}{asmbufname}'))
+ err = $"You have a file/folder named '{asmbufname}' in the current directory Termdebug may not work properly. Please exit and rename such a file/folder."
+ elseif !empty(glob($'{cwd}{varbufname}'))
+ err = $"You have a file/folder named '{varbufname}' in the current directory Termdebug may not work properly. Please exit and rename such a file/folder."
+ elseif !executable(gdb_cmd)
+ err = $"Cannot execute debugger program '{gdb_cmd}'"
+ endif
+
+ if !empty(err)
+ Echoerr(err)
+ is_check_ok = false
+ endif
+ return is_check_ok
+enddef
+
+def DeprecationWarnings()
+ # TODO Remove the deprecated features after 1 Jan 2025.
+ var config_param = ''
+ if exists('g:termdebug_wide')
+ config_param = 'g:termdebug_wide'
+ elseif exists('g:termdebug_popup')
+ config_param = 'g:termdebug_popup'
+ elseif exists('g:termdebugger')
+ config_param = 'g:termdebugger'
+ elseif exists('g:termdebug_variables_window')
+ config_param = 'g:termdebug_variables_window'
+ elseif exists('g:termdebug_disasm_window')
+ config_param = 'g:termdebug_disasm_window'
+ elseif exists('g:termdebug_map_K')
+ config_param = 'g:termdebug_map_K'
+ elseif exists('g:termdebug_use_prompt')
+ config_param = 'g:termdebug_use_prompt'
+ endif
+
+ if !empty(config_param)
+ Echowarn($"Deprecation Warning: '{config_param}' parameter
+ \ is deprecated and will be removed in the future. See ':h g:termdebug_config' for alternatives.")
endif
-enddef
-# The command that starts debugging, e.g. ":Termdebug vim".
-# To end type "quit" in the gdb window.
-command -nargs=* -complete=file -bang Termdebug StartDebug(<bang>0, <f-args>)
-command -nargs=+ -complete=file -bang TermdebugCommand StartDebugCommand(<bang>0, <f-args>)
+ # termdebug config types
+ if exists('g:termdebug_config') && !empty(g:termdebug_config)
+ for key in keys(g:termdebug_config)
+ if index(['disasm_window', 'variables_window', 'use_prompt', 'map_K', 'map_minus', 'map_plus'], key) != -1
+ if typename(g:termdebug_config[key]) == 'number'
+ var val = g:termdebug_config[key]
+ Echowarn($"Deprecation Warning: 'g:termdebug_config[\"{key}\"] = {val}' will be deprecated.
+ \ Please use 'g:termdebug_config[\"{key}\"] = {val != 0}'" )
+ endif
+ endif
+ endfor
+ endif
+enddef
# Take a breakpoint number as used by GDB and turn it into an integer.
# The breakpoint may contain a dot: 123.4 -> 123004
@@ -228,7 +310,7 @@ enddef
# Define the default highlighting, using the current 'background' value.
def InitHighlight()
- Highlight(1, '', &background)
+ Highlight(true, '', &background)
hi default debugBreakpoint term=reverse ctermbg=red guibg=red
hi default debugBreakpointDisabled term=reverse ctermbg=gray guibg=gray
enddef
@@ -244,18 +326,19 @@ enddef
# Get the command to execute the debugger as a list, defaults to ["gdb"].
def GetCommand(): list<string>
- var cmd = 'gdb'
+ var cmd: any
if exists('g:termdebug_config')
cmd = get(g:termdebug_config, 'command', 'gdb')
elseif exists('g:termdebugger')
cmd = g:termdebugger
+ else
+ cmd = 'gdb'
endif
return type(cmd) == v:t_list ? copy(cmd) : [cmd]
enddef
def StartDebug(bang: bool, ...gdb_args: list<string>)
- InitScriptVariables()
# First argument is the command to debug, second core file or process ID.
StartDebug_internal({gdb_args: gdb_args, bang: bang})
enddef
@@ -265,22 +348,25 @@ def StartDebugCommand(bang: bool, ...args: list<string>)
StartDebug_internal({gdb_args: [args[0]], proc_args: args[1 : ], bang: bang})
enddef
-
def StartDebug_internal(dict: dict<any>)
- if gdbwin > 0
+ if g:termdebug_is_running
Echoerr('Terminal debugger already running, cannot run two')
return
endif
- var gdbcmd = GetCommand()
- if !executable(gdbcmd[0])
- Echoerr($'Cannot execute debugger program "{gdbcmd[0]}"')
+
+ InitScriptVariables()
+ if !SanityCheck()
return
endif
+ DeprecationWarnings()
if exists('#User#TermdebugStartPre')
doauto <nomodeline> User TermdebugStartPre
endif
+ # Uncomment this line to write logging in "debuglog".
+ # ch_logfile('debuglog', 'w')
+
# Assume current window is the source code window
sourcewin = win_getid()
var wide = 0
@@ -292,7 +378,6 @@ def StartDebug_internal(dict: dict<any>)
endif
if wide > 0
if &columns < wide
- save_columns = &columns
&columns = wide
# If we make the Vim window wider, use the whole left half for the debug
# windows.
@@ -303,7 +388,7 @@ def StartDebug_internal(dict: dict<any>)
vvertical = false
endif
- if way == 'prompt'
+ if way is Way.Prompt
StartDebug_prompt(dict)
else
StartDebug_term(dict)
@@ -324,44 +409,34 @@ def StartDebug_internal(dict: dict<any>)
if exists('#User#TermdebugStartPost')
doauto <nomodeline> User TermdebugStartPost
endif
+ g:termdebug_is_running = true
enddef
# Use when debugger didn't start or ended.
def CloseBuffers()
- var bufnames = ['debugged\ program', 'gdb\ communication', asmbufname, varbufname]
- for bufname in bufnames
- var buf_nr = bufnr(bufname)
+ var buf_numbers = [promptbufnr, ptybufnr, commbufnr, asmbufnr, varbufnr]
+ for buf_nr in buf_numbers
if buf_nr > 0 && bufexists(buf_nr)
- exe $'bwipe! {bufname}'
+ exe $'bwipe! {buf_nr}'
endif
endfor
-
- running = 0
- gdbwin = 0
enddef
-# IsGdbRunning(): bool may be a better name?
def IsGdbStarted(): bool
var gdbproc_status = job_status(term_getjob(gdbbufnr))
if gdbproc_status !=# 'run'
- var cmd_name = string(GetCommand()[0])
- Echoerr($'{cmd_name} exited unexpectedly')
- CloseBuffers()
return false
endif
return true
enddef
-# Open a terminal window without a job, to run the debugged program in.
-def StartDebug_term(dict: dict<any>)
+def CreateProgramPty(): string
ptybufnr = term_start('NONE', {
- term_name: 'debugged program',
+ term_name: ptybufname,
vertical: vvertical})
if ptybufnr == 0
- Echoerr('Failed to open the program terminal window')
- return
+ return null_string
endif
- var pty = job_info(term_getjob(ptybufnr))['tty_out']
ptywin = win_getid()
if vvertical
@@ -374,19 +449,23 @@ def StartDebug_term(dict: dict<any>)
endif
endif
+ return job_info(term_getjob(ptybufnr))['tty_out']
+enddef
+
+def CreateCommunicationPty(): string
# Create a hidden terminal window to communicate with gdb
commbufnr = term_start('NONE', {
- term_name: 'gdb communication',
- out_cb: function('CommOutput'),
+ term_name: commbufname,
+ out_cb: CommOutput,
hidden: 1
})
if commbufnr == 0
- Echoerr('Failed to open the communication terminal window')
- exe $'bwipe! {ptybufnr}'
- return
+ return null_string
endif
- var commpty = job_info(term_getjob(commbufnr))['tty_out']
+ return job_info(term_getjob(commbufnr))['tty_out']
+enddef
+def CreateGdbConsole(dict: dict<any>, pty: string, commpty: string): string
# Start the gdb buffer
var gdb_args = get(dict, 'gdb_args', [])
var proc_args = get(dict, 'proc_args', [])
@@ -422,24 +501,25 @@ def StartDebug_term(dict: dict<any>)
ch_log($'executing "{join(gdb_cmd)}"')
gdbbufnr = term_start(gdb_cmd, {
- term_name: gdbbufname,
- term_finish: 'close',
- })
+ term_name: gdbbufname,
+ term_finish: 'close',
+ })
if gdbbufnr == 0
- Echoerr('Failed to open the gdb terminal window')
- CloseBuffers()
- return
+ return 'Failed to open the gdb terminal window'
endif
gdbwin = win_getid()
# Wait for the "startupdone" message before sending any commands.
var counter = 0
var counter_max = 300
+ if exists('g:termdebug_config') && has_key(g:termdebug_config, 'timeout')
+ counter_max = g:termdebug_config['timeout']
+ endif
+
var success = false
while !success && counter < counter_max
if !IsGdbStarted()
- CloseBuffers()
- return
+ return $'{gdbbufname} exited unexpectedly'
endif
for lnum in range(1, 200)
@@ -454,14 +534,12 @@ def StartDebug_term(dict: dict<any>)
endwhile
if !success
- Echoerr('Failed to startup the gdb program.')
- CloseBuffers()
- return
+ return 'Failed to startup the gdb program.'
endif
# ---- gdb started. Next, let's set the MI interface. ---
# Set arguments to be run.
- if len(proc_args)
+ if !empty(proc_args)
term_sendkeys(gdbbufnr, $"server set args {join(proc_args)}\r")
endif
@@ -476,7 +554,7 @@ def StartDebug_term(dict: dict<any>)
success = false
while !success && counter < counter_max
if !IsGdbStarted()
- return
+ return $'{gdbbufname} exited unexpectedly'
endif
var response = ''
@@ -487,10 +565,8 @@ def StartDebug_term(dict: dict<any>)
# response can be in the same line or the next line
response = $"{line1}{line2}"
if response =~ 'Undefined command'
- Echoerr('Sorry, your gdb is too old, gdb 7.12 is required')
# CHECKME: possibly send a "server show version" here
- CloseBuffers()
- return
+ return 'Sorry, your gdb is too old, gdb 7.12 is required'
endif
if response =~ 'New UI allocated'
# Success!
@@ -509,11 +585,37 @@ def StartDebug_term(dict: dict<any>)
endwhile
if !success
- Echoerr('Cannot check if your gdb works, continuing anyway')
+ return 'Cannot check if your gdb works, continuing anyway'
+ endif
+ return ''
+enddef
+
+
+# Open a terminal window without a job, to run the debugged program in.
+def StartDebug_term(dict: dict<any>)
+
+ var programpty = CreateProgramPty()
+ if programpty is null_string
+ Echoerr('Failed to open the program terminal window')
+ CloseBuffers()
+ return
+ endif
+
+ var commpty = CreateCommunicationPty()
+ if commpty is null_string
+ Echoerr('Failed to open the communication terminal window')
+ CloseBuffers()
+ return
+ endif
+
+ var err_message = CreateGdbConsole(dict, programpty, commpty)
+ if !empty(err_message)
+ Echoerr(err_message)
+ CloseBuffers()
return
endif
- job_setoptions(term_getjob(gdbbufnr), {exit_cb: function('EndTermDebug')})
+ job_setoptions(term_getjob(gdbbufnr), {exit_cb: EndDebug})
# Set the filetype, this can be used to add mappings.
set filetype=termdebug
@@ -523,29 +625,22 @@ enddef
# Open a window with a prompt buffer to run gdb in.
def StartDebug_prompt(dict: dict<any>)
+ var gdb_cmd = GetCommand()
+ gdbbufname = gdb_cmd[0]
+
if vvertical
vertical new
else
new
endif
gdbwin = win_getid()
- promptbuf = bufnr('')
- prompt_setprompt(promptbuf, 'gdb> ')
+ promptbufnr = bufnr('')
+ prompt_setprompt(promptbufnr, 'gdb> ')
set buftype=prompt
+ exe $"file {gdbbufname}"
- if empty(glob('gdb'))
- file gdb
- elseif empty(glob('Termdebug-gdb-console'))
- file Termdebug-gdb-console
- else
- Echoerr("You have a file/folder named 'gdb' " ..
- "or 'Termdebug-gdb-console'. " ..
- "Please exit and rename them because Termdebug may not work " ..
- "as expected.")
- endif
-
- prompt_setcallback(promptbuf, function('PromptCallback'))
- prompt_setinterrupt(promptbuf, function('PromptInterrupt'))
+ prompt_setcallback(promptbufnr, PromptCallback)
+ prompt_setinterrupt(promptbufnr, PromptInterrupt)
if vvertical
# Assuming the source code window will get a signcolumn, use two more
@@ -556,7 +651,6 @@ def StartDebug_prompt(dict: dict<any>)
var gdb_args = get(dict, 'gdb_args', [])
var proc_args = get(dict, 'proc_args', [])
- var gdb_cmd = GetCommand()
# Add -quiet to avoid the intro message causing a hit-enter prompt.
gdb_cmd += ['-quiet']
# Disable pagination, it causes everything to stop at the gdb, needs to be run early
@@ -573,16 +667,16 @@ def StartDebug_prompt(dict: dict<any>)
ch_log($'executing "{join(gdb_cmd)}"')
gdbjob = job_start(gdb_cmd, {
- exit_cb: function('EndPromptDebug'),
- out_cb: function('GdbOutCallback'),
+ exit_cb: EndDebug,
+ out_cb: GdbOutCallback
})
if job_status(gdbjob) != "run"
Echoerr('Failed to start gdb')
- exe $'bwipe! {promptbuf}'
+ exe $'bwipe! {promptbufnr}'
return
endif
- exe $'au BufUnload <buffer={promptbuf}> ++once ' ..
- 'call job_stop(gdbjob, ''kill'')'
+ exe $'au BufUnload <buffer={promptbufnr}> ++once ' ..
+ 'call job_stop(gdbjob, ''kill'')'
# Mark the buffer modified so that it's not easy to close.
set modified
gdb_channel = job_getchannel(gdbjob)
@@ -623,7 +717,7 @@ def StartDebug_prompt(dict: dict<any>)
SendCommand('set breakpoint pending on')
# Set arguments to be run
- if len(proc_args)
+ if !empty(proc_args)
SendCommand($'set args {join(proc_args)}')
endif
@@ -669,7 +763,7 @@ enddef
# Send a command to gdb. "cmd" is the string without line terminator.
def SendCommand(cmd: string)
ch_log($'sending to gdb: {cmd}')
- if way == 'prompt'
+ if way is Way.Prompt
ch_sendraw(gdb_channel, $"{cmd}\n")
else
term_sendkeys(commbufnr, $"{cmd}\r")
@@ -678,7 +772,7 @@ enddef
# Interrupt or stop the program
def StopCommand()
- if way == 'prompt'
+ if way is Way.Prompt
PromptInterrupt()
else
SendCommand('-exec-interrupt')
@@ -687,7 +781,7 @@ enddef
# Continue the program
def ContinueCommand()
- if way == 'prompt'
+ if way is Way.Prompt
SendCommand('continue')
else
# using -exec-continue results in CTRL-C in the gdb window not working,
@@ -699,12 +793,12 @@ enddef
# This is global so that a user can create their mappings with this.
def g:TermDebugSendCommand(cmd: string)
- if way == 'prompt'
+ if way is Way.Prompt
ch_sendraw(gdb_channel, $"{cmd}\n")
else
- var do_continue = 0
+ var do_continue = false
if !stopped
- do_continue = 1
+ do_continue = true
StopCommand()
sleep 10m
endif
@@ -765,7 +859,7 @@ def GdbOutCallback(channel: channel, text: string)
# Drop the gdb prompt, we have our own.
# Drop status and echo'd commands.
if text == '(gdb) ' || text == '^done' ||
- (text[0] == '&' && text !~ '^&"disassemble')
+ (text[0] == '&' && text !~ '^&"disassemble')
return
endif
@@ -808,20 +902,18 @@ def DecodeMessage(quotedText: string, literal: bool): string
return ''
endif
var msg = quotedText
- ->substitute('^"\|[^\\]\zs".*', '', 'g')
- ->substitute('\\"', '"', 'g')
- #\ multi-byte characters arrive in octal form
- #\ NULL-values must be kept encoded as those break the string otherwise
- ->substitute('\\000', NullRepl, 'g')
- ->substitute('\\\(\o\o\o\)', (m) => nr2char(str2nr(m[1], 8)), 'g')
- # You could also use ->substitute('\\\\\(\o\o\o\)', '\=nr2char(str2nr(submatch(1), 8))', "g")
- #\ Note: GDB docs also mention hex encodings - the translations below work
- #\ but we keep them out for performance-reasons until we actually see
- #\ those in mi-returns
- #\ \ ->substitute('\\0x\(\x\x\)', {-> eval('"\x' .. submatch(1) .. '"')}, 'g')
- #\ \ ->substitute('\\0x00', NullRepl, 'g')
- ->substitute('\\\\', '\', 'g')
- ->substitute(NullRepl, '\\000', 'g')
+ ->substitute('^"\|[^\\]\zs".*', '', 'g')
+ ->substitute('\\"', '"', 'g')
+ #\ multi-byte characters arrive in octal form
+ #\ NULL-values must be kept encoded as those break the string otherwise
+ ->substitute('\\000', NullRepl, 'g')
+ ->substitute('\\\(\o\o\o\)', (m) => nr2char(str2nr(m[1], 8)), 'g')
+ # You could also use ->substitute('\\\\\(\o\o\o\)', '\=nr2char(str2nr(submatch(1), 8))', "g")
+ #\ Note: GDB docs also mention hex encodings - the translations below work
+ #\ but we keep them out for performance-reasons until we actually see
+ #\ those in mi-returns
+ ->substitute('\\\\', '\', 'g')
+ ->substitute(NullRepl, '\\000', 'g')
if !literal
return msg
->substitute('\\t', "\t", 'g')
@@ -857,32 +949,17 @@ def GetAsmAddr(msg: string): string
return addr
enddef
-
-def EndTermDebug(job: any, status: any)
+def EndDebug(job: any, status: any)
if exists('#User#TermdebugStopPre')
doauto <nomodeline> User TermdebugStopPre
endif
- if commbufnr > 0 && bufexists(commbufnr)
- exe $'bwipe! {commbufnr}'
+ if way is Way.Prompt
+ ch_log("Returning from EndDebug()")
endif
- gdbwin = 0
- EndDebugCommon()
-enddef
-def EndDebugCommon()
var curwinid = win_getid()
-
- if ptybufnr > 0 && bufexists(ptybufnr)
- exe $'bwipe! {ptybufnr}'
- endif
- if asmbufnr > 0 && bufexists(asmbufnr)
- exe $'bwipe! {asmbufnr}'
- endif
- if varbufnr > 0 && bufexists(varbufnr)
- exe $'bwipe! {varbufnr}'
- endif
- running = false
+ CloseBuffers()
# Restore 'signcolumn' in all buffers for which it was set.
win_gotoid(sourcewin)
@@ -904,9 +981,7 @@ def EndDebugCommon()
win_gotoid(curwinid)
- if save_columns > 0
- &columns = save_columns
- endif
+ &columns = saved_columns
if has("balloon_eval") || has("balloon_eval_term")
set balloonexpr=
@@ -923,23 +998,9 @@ def EndDebugCommon()
endif
au! TermDebug
+ g:termdebug_is_running = false
enddef
-def EndPromptDebug(job: any, status: any)
- if exists('#User#TermdebugStopPre')
- doauto <nomodeline> User TermdebugStopPre
- endif
-
- if bufexists(promptbuf)
- exe $'bwipe! {promptbuf}'
- endif
-
- EndDebugCommon()
- gdbwin = 0
- ch_log("Returning from EndPromptDebug()")
-enddef
-
-
# Disassembly window - added by Michael Sartain
#
# - CommOutput: &"disassemble $pc\n"
@@ -990,11 +1051,11 @@ def HandleDisasmMsg(msg: string)
endif
elseif msg !~ '^&"disassemble'
var value = substitute(msg, '^\~\"[ ]*', '', '')
- ->substitute('^=>[ ]*', '', '')
- ->substitute('\\n\"\r$', '', '')
- ->substitute('\\n\"$', '', '')
- ->substitute('\r', '', '')
- ->substitute('\\t', ' ', 'g')
+ ->substitute('^=>[ ]*', '', '')
+ ->substitute('\\n\"\r$', '', '')
+ ->substitute('\\n\"$', '', '')
+ ->substitute('\r', '', '')
+ ->substitute('\\t', ' ', 'g')
if value != '' || !empty(asm_lines)
add(asm_lines, value)
@@ -1070,9 +1131,9 @@ def CommOutput(chan: channel, message: string)
if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)'
HandleCursor(msg)
elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,'
- HandleNewBreakpoint(msg, 0)
+ HandleNewBreakpoint(msg, false)
elseif msg =~ '^=breakpoint-modified,'
- HandleNewBreakpoint(msg, 1)
+ HandleNewBreakpoint(msg, true)
elseif msg =~ '^=breakpoint-deleted,'
HandleBreakpointDelete(msg)
elseif msg =~ '^=thread-group-started'
@@ -1127,74 +1188,70 @@ def InstallCommands()
command Source GotoSourcewinOrCreateIt()
command Asm GotoAsmwinOrCreateIt()
command Var GotoVariableswinOrCreateIt()
- command Winbar InstallWinbar(1)
+ command Winbar InstallWinbar(true)
- var map = 1
+ var map = true
if exists('g:termdebug_config')
- map = get(g:termdebug_config, 'map_K', 1)
+ map = get(g:termdebug_config, 'map_K', true)
elseif exists('g:termdebug_map_K')
map = g:termdebug_map_K
endif
if map
- k_map_saved = maparg('K', 'n', 0, 1)
- if !empty(k_map_saved) && !k_map_saved.buffer || empty(k_map_saved)
+ if !empty(saved_K_map) && !saved_K_map.buffer || empty(saved_K_map)
nnoremap K :Evaluate<CR>
endif
endif
- map = 1
+ map = true
if exists('g:termdebug_config')
- map = get(g:termdebug_config, 'map_plus', 1)
+ map = get(g:termdebug_config, 'map_plus', true)
endif
if map
- plus_map_saved = maparg('+', 'n', 0, 1)
- if !empty(plus_map_saved) && !plus_map_saved.buffer || empty(plus_map_saved)
+ if !empty(saved_plus_map) && !saved_plus_map.buffer || empty(saved_plus_map)
nnoremap <expr> + $'<Cmd>{v:count1}Up<CR>'
endif
endif
- map = 1
+ map = true
if exists('g:termdebug_config')
- map = get(g:termdebug_config, 'map_minus', 1)
+ map = get(g:termdebug_config, 'map_minus', true)
endif
if map
- minus_map_saved = maparg('-', 'n', 0, 1)
- if !empty(minus_map_saved) && !minus_map_saved.buffer || empty(minus_map_saved)
+ if !empty(saved_minus_map) && !saved_minus_map.buffer || empty(saved_minus_map)
nnoremap <expr> - $'<Cmd>{v:count1}Down<CR>'
endif
endif
if has('menu') && &mouse != ''
- InstallWinbar(0)
+ InstallWinbar(false)
- var pup = 1
+ var pup = true
if exists('g:termdebug_config')
- pup = get(g:termdebug_config, 'popup', 1)
+ pup = get(g:termdebug_config, 'popup', true)
elseif exists('g:termdebug_popup')
pup = g:termdebug_popup
endif
if pup
- saved_mousemodel = &mousemodel
&mousemodel = 'popup_setpos'
an 1.200 PopUp.-SEP3- <Nop>
- an 1.210 PopUp.Set\ breakpoint :Break<CR>
- an 1.220 PopUp.Clear\ breakpoint :Clear<CR>
- an 1.230 PopUp.Run\ until :Until<CR>
- an 1.240 PopUp.Evaluate :Evaluate<CR>
+ an 1.210 PopUp.Set\ breakpoint <cmd>Break<CR>
+ an 1.220 PopUp.Clear\ breakpoint <cmd>Clear<CR>
+ an 1.230 PopUp.Run\ until <cmd>Until<CR>
+ an 1.240 PopUp.Evaluate <cmd>Evaluate<CR>
endif
endif
enddef
# Install the window toolbar in the current window.
-def InstallWinbar(force: number)
+def InstallWinbar(force: bool)
# install the window toolbar by default, can be disabled in the config
- var winbar = 1
+ var winbar = true
if exists('g:termdebug_config')
- winbar = get(g:termdebug_config, 'winbar', 1)
+ winbar = get(g:termdebug_config, 'winbar', true)
endif
if has('menu') && &mouse != '' && (winbar || force)
@@ -1232,40 +1289,26 @@ def DeleteCommands()
delcommand Var
delcommand Winbar
- if k_map_saved isnot null_dict
- if !empty(k_map_saved) && k_map_saved.buffer
- # pass
- elseif !empty(k_map_saved) && !k_map_saved.buffer
- nunmap K
- mapset(k_map_saved)
- elseif empty(k_map_saved)
- silent! nunmap K
- endif
- k_map_saved = null_dict
- endif
- if plus_map_saved isnot null_dict
- if !empty(plus_map_saved) && plus_map_saved.buffer
- # pass
- elseif !empty(plus_map_saved) && !plus_map_saved.buffer
- nunmap +
- mapset(plus_map_saved)
- elseif empty(plus_map_saved)
- silent! nunmap +
- endif
- plus_map_saved = null_dict
- endif
- if minus_map_saved isnot null_dict
- if !empty(minus_map_saved) && minus_map_saved.buffer
- # pass
- elseif !empty(minus_map_saved) && !minus_map_saved.buffer
- nunmap -
- mapset(minus_map_saved)
- elseif empty(minus_map_saved)
- silent! nunmap -
- endif
- minus_map_saved = null_dict
+
+ if !empty(saved_K_map) && !saved_K_map.buffer
+ mapset(saved_K_map)
+ elseif empty(saved_K_map)
+ silent! nunmap K
+ endif
+
+ if !empty(saved_plus_map) && !saved_plus_map.buffer
+ mapset(saved_plus_map)
+ elseif empty(saved_plus_map)
+ silent! nunmap +
+ endif
+
+ if !empty(saved_minus_map) && !saved_minus_map.buffer
+ mapset(saved_minus_map)
+ elseif empty(saved_minus_map)
+ silent! nunmap -
endif
+
if has('menu')
# Remove the WinBar entries from all windows where it was added.
var curwinid = win_getid()
@@ -1280,32 +1323,29 @@ def DeleteCommands()
endif
endfor
win_gotoid(curwinid)
- winbar_winids = []
-
- if saved_mousemodel isnot null_string
- &mousemodel = saved_mousemodel
- saved_mousemodel = null_string
- try
- aunmenu PopUp.-SEP3-
- aunmenu PopUp.Set\ breakpoint
- aunmenu PopUp.Clear\ breakpoint
- aunmenu PopUp.Run\ until
- aunmenu PopUp.Evaluate
- catch
- # ignore any errors in removing the PopUp menu
- endtry
- endif
+
+ &mousemodel = saved_mousemodel
+ try
+ aunmenu PopUp.-SEP3-
+ aunmenu PopUp.Set\ breakpoint
+ aunmenu PopUp.Clear\ breakpoint
+ aunmenu PopUp.Run\ until
+ aunmenu PopUp.Evaluate
+ catch
+ # ignore any errors in removing the PopUp menu
+ endtry
endif
sign_unplace('TermDebug')
- breakpoints = {}
- breakpoint_locations = {}
-
sign_undefine('debugPC')
sign_undefine(BreakpointSigns->map("'debugBreakpoint' .. v:val"))
- BreakpointSigns = []
enddef
+def QuoteArg(x: string): string
+ # Find all the occurrences of " and \ and escape them and double quote
+ # the resulting string.
+ return printf('"%s"', x ->substitute('[\\"]', '\\&', 'g'))
+enddef
# :Until - Execute until past a specified position or current line
def Until(at: string)
@@ -1316,7 +1356,7 @@ def Until(at: string)
ch_log('assume that program is running after this command')
# Use the fname:lnum format
- var AT = empty(at) ? $"{fnameescape(expand('%:p'))}:{line('.')}" : at
+ var AT = empty(at) ? QuoteArg($"{expand('%:p')}:{line('.')}") : at
SendCommand($'-exec-until {AT}')
else
ch_log('dropping command, program is running: exec-until')
@@ -1327,23 +1367,21 @@ enddef
def SetBreakpoint(at: string, tbreak=false)
# Setting a breakpoint may not work while the program is running.
# Interrupt to make it work.
- var do_continue = 0
+ var do_continue = false
if !stopped
- do_continue = 1
+ do_continue = true
StopCommand()
sleep 10m
endif
# Use the fname:lnum format, older gdb can't handle --source.
- var AT = empty(at) ? $"{fnameescape(expand('%:p'))}:{line('.')}" : at
+ var AT = empty(at) ? QuoteArg($"{expand('%:p')}:{line('.')}") : at
var cmd = ''
if tbreak
cmd = $'-break-insert -t {AT}'
else
cmd = $'-break-insert {AT}'
endif
- # OK
- # echom $"cmsd: {cmd}"
SendCommand(cmd)
if do_continue
ContinueCommand()
@@ -1497,27 +1535,33 @@ def CleanupExpr(passed_expr: string): string
return expr
enddef
+def Balloon_show(expr: string)
+ if has("balloon_eval") || has("balloon_eval_term")
+ balloon_show(expr)
+ endif
+enddef
+
def HandleEvaluate(msg: string)
var value = msg
- ->substitute('.*value="\(.*\)"', '\1', '')
- ->substitute('\\"', '"', 'g')
- ->substitute('\\\\', '\\', 'g')
- #\ multi-byte characters arrive in octal form, replace everything but NULL values
- ->substitute('\\000', NullRepl, 'g')
- ->substitute('\\\(\o\o\o\)', (m) => nr2char(str2nr(m[1], 8)), 'g')
- #\ Note: GDB docs also mention hex encodings - the translations below work
- #\ but we keep them out for performance-reasons until we actually see
- #\ those in mi-returns
- #\ ->substitute('\\0x00', NullRep, 'g')
- #\ ->substitute('\\0x\(\x\x\)', {-> eval('"\x' .. submatch(1) .. '"')}, 'g')
- ->substitute(NullRepl, '\\000', 'g')
+ ->substitute('.*value="\(.*\)"', '\1', '')
+ ->substitute('\\"', '"', 'g')
+ ->substitute('\\\\', '\\', 'g')
+ #\ multi-byte characters arrive in octal form, replace everything but NULL values
+ ->substitute('\\000', NullRepl, 'g')
+ ->substitute('\\\(\o\o\o\)', (m) => nr2char(str2nr(m[1], 8)), 'g')
+ #\ Note: GDB docs also mention hex encodings - the translations below work
+ #\ but we keep them out for performance-reasons until we actually see
+ #\ those in mi-returns
+ #\ ->substitute('\\0x00', NullRep, 'g')
+ #\ ->substitute('\\0x\(\x\x\)', {-> eval('"\x' .. submatch(1) .. '"')}, 'g')
+ ->substitute(NullRepl, '\\000', 'g')
if evalFromBalloonExpr
if empty(evalFromBalloonExprResult)
evalFromBalloonExprResult = $'{evalexpr}: {value}'
else
evalFromBalloonExprResult ..= $' = {value}'
endif
- balloon_show(evalFromBalloonExprResult)
+ Balloon_show(evalFromBalloonExprResult)
else
echomsg $'"{evalexpr}": {value}'
endif
@@ -1567,19 +1611,22 @@ def GotoSourcewinOrCreateIt()
if !win_gotoid(sourcewin)
new
sourcewin = win_getid()
- InstallWinbar(0)
+ InstallWinbar(false)
endif
enddef
-def GetDisasmWindow(): number
- if exists('g:termdebug_config')
- return get(g:termdebug_config, 'disasm_window', 0)
- endif
- if exists('g:termdebug_disasm_window')
- return g:termdebug_disasm_window
+def GetDisasmWindow(): bool
+ # TODO Remove the deprecated features after 1 Jan 2025.
+ var val: any
+ if exists('g:termdebug_config') && has_key(g:termdebug_config, 'disasm_window')
+ val = g:termdebug_config['disasm_window']
+ elseif exists('g:termdebug_disasm_window')
+ val = g:termdebug_disasm_window
+ else
+ val = false
endif
- return 0
+ return typename(val) == 'number' ? val != 0 : val
enddef
def GetDisasmWindowHeight(): number
@@ -1619,13 +1666,9 @@ def GotoAsmwinOrCreateIt()
if asmbufnr > 0 && bufexists(asmbufnr)
exe $'buffer {asmbufnr}'
- elseif empty(glob('Termdebug-asm-listing'))
- silent file Termdebug-asm-listing
- asmbufnr = bufnr('Termdebug-asm-listing')
else
- Echoerr("You have a file/folder named 'Termdebug-asm-listing'. " ..
- "Please exit and rename it because Termdebug may not work " ..
- "as expected.")
+ exe $"silent file {asmbufname}"
+ asmbufnr = bufnr(asmbufname)
endif
if mdf != 'vert' && GetDisasmWindowHeight() > 0
@@ -1646,14 +1689,17 @@ def GotoAsmwinOrCreateIt()
endif
enddef
-def GetVariablesWindow(): number
- if exists('g:termdebug_config')
- return get(g:termdebug_config, 'variables_window', 0)
- endif
- if exists('g:termdebug_disasm_window')
- return g:termdebug_variables_window
+def GetVariablesWindow(): bool
+ # TODO Remove the deprecated features after 1 Jan 2025.
+ var val: any
+ if exists('g:termdebug_config') && has_key(g:termdebug_config, 'variables_window')
+ val = g:termdebug_config['variables_window']
+ elseif exists('g:termdebug_variables_window')
+ val = g:termdebug_variables_window
+ else
+ val = false
endif
- return 0
+ return typename(val) == 'number' ? val != 0 : val
enddef
def GetVariablesWindowHeight(): number
@@ -1691,15 +1737,12 @@ def GotoVariableswinOrCreateIt()
setlocal signcolumn=no
setlocal modifiable
+ # If exists, then open, otherwise create
if varbufnr > 0 && bufexists(varbufnr)
exe $'buffer {varbufnr}'
- elseif empty(glob('Termdebug-variables-listing'))
- silent file Termdebug-variables-listing
- varbufnr = bufnr('Termdebug-variables-listing')
else
- Echoerr("You have a file/folder named 'Termdebug-variables-listing'. " ..
- "Please exit and rename it because Termdebug may not work " ..
- "as expected.")
+ exe $"silent file {varbufname}"
+ varbufnr = bufnr(varbufname)
endif
if mdf != 'vert' && GetVariablesWindowHeight() > 0
@@ -1719,7 +1762,7 @@ def HandleCursor(msg: string)
if msg =~ '^\*stopped'
ch_log('program stopped')
- stopped = 1
+ stopped = true
if msg =~ '^\*stopped,reason="exited-normally"'
running = false
endif
@@ -1778,7 +1821,7 @@ def HandleCursor(msg: string)
# TODO: find existing window
exe $'split {fnameescape(fname)}'
sourcewin = win_getid()
- InstallWinbar(0)
+ InstallWinbar(false)
else
exe $'edit {fnameescape(fname)}'
endif
@@ -1790,7 +1833,7 @@ def HandleCursor(msg: string)
normal! zv
sign_unplace('TermDebug', {id: pc_id})
sign_place(pc_id, 'TermDebug', 'debugPC', fname,
- {lnum: str2nr(lnum), priority: 110})
+ {lnum: str2nr(lnum), priority: 110})
if !exists('b:save_signcolumn')
b:save_signcolumn = &signcolumn
add(signcolumn_buflist, bufnr())
@@ -1837,7 +1880,7 @@ enddef
# Handle setting a breakpoint
# Will update the sign that shows the breakpoint
-def HandleNewBreakpoint(msg: string, modifiedFlag: any)
+def HandleNewBreakpoint(msg: string, modifiedFlag: bool)
var nr = ''
if msg !~ 'fullname='
diff --git a/runtime/plugin/manpager.vim b/runtime/plugin/manpager.vim
index 076aca5..6ed6030 100644
--- a/runtime/plugin/manpager.vim
+++ b/runtime/plugin/manpager.vim
@@ -1,6 +1,6 @@
" Vim plugin for using Vim as manpager.
" Maintainer: Enno Nagel <ennonagel+vim@gmail.com>
-" Last Change: 2022 Oct 17
+" Last Change: 2024 Jul 03
if exists('g:loaded_manpager_plugin')
finish
@@ -20,9 +20,6 @@ function s:ManPager()
endif
syntax on
- " Make this an unlisted, readonly scratch buffer
- setlocal buftype=nofile noswapfile bufhidden=hide nobuflisted readonly
-
" Ensure text width matches window width
setlocal foldcolumn& nofoldenable nonumber norelativenumber
@@ -45,6 +42,9 @@ function s:ManPager()
" Finished preprocessing the buffer, prevent any further modifications
setlocal nomodified nomodifiable
+ " Make this an unlisted, readonly scratch buffer
+ setlocal buftype=nofile noswapfile bufhidden=hide nobuflisted readonly
+
" Set filetype to man even if ftplugin is disabled
setlocal filetype=man
runtime ftplugin/man.vim
diff --git a/runtime/plugin/matchparen.vim b/runtime/plugin/matchparen.vim
index 6c061c9..2899612 100644
--- a/runtime/plugin/matchparen.vim
+++ b/runtime/plugin/matchparen.vim
@@ -60,12 +60,8 @@ func s:Highlight_Matching_Pair()
let before = 0
let text = getline(c_lnum)
- let matches = matchlist(text, '\(.\)\=\%'.c_col.'c\(.\=\)')
- if empty(matches)
- let [c_before, c] = ['', '']
- else
- let [c_before, c] = matches[1:2]
- endif
+ let c_before = text->strpart(0, c_col - 1)->slice(-1)
+ let c = text->strpart(c_col - 1)->slice(0, 1)
let plist = split(&matchpairs, '.\zs[:,]')
let i = index(plist, c)
if i < 0
diff --git a/runtime/syntax/antlr4.vim b/runtime/syntax/antlr4.vim
new file mode 100644
index 0000000..33cc865
--- /dev/null
+++ b/runtime/syntax/antlr4.vim
@@ -0,0 +1,30 @@
+" Vim syntax file
+" Language: ANTLR4, ANother Tool for Language Recognition v4 <www.antlr.org>
+" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com>
+" Last Change: 2024 July 09
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+" Keywords. See https://github.com/antlr/antlr4/blob/4.13.1/doc/lexicon.md
+syn keyword antlr4Include import
+" https://github.com/antlr/antlr4/blob/4.13.1/doc/options.md
+" https://github.com/antlr/antlr4/blob/4.13.1/doc/grammars.md
+syn keyword antlr4Structure fragment lexer parser grammar options channels tokens mode
+syn keyword antlr4Statement returns locals
+syn keyword antlr4Exceptions throws catch finally
+
+" Comments.
+syn keyword antlr4Todo contained TODO FIXME XXX NOTE
+syn region antlr4Comment start="//" end="$" contains=antlr4Todo,@Spell
+syn region antlr4Comment start="/\*" end="\*/" contains=antlr4Todo,@Spell
+
+hi def link antlr4Include Include
+hi def link antlr4Structure Structure
+hi def link antlr4Statement Statement
+hi def link antlr4Exceptions Structure
+hi def link antlr4Comment Comment
+
+let b:current_syntax = "antlr4"
diff --git a/runtime/syntax/asy.vim b/runtime/syntax/asy.vim
new file mode 100644
index 0000000..ed2bf71
--- /dev/null
+++ b/runtime/syntax/asy.vim
@@ -0,0 +1,243 @@
+" Vim syntax file
+" Language: Asymptote
+" Maintainer: Avid Seeker <avidseeker7@protonmail.com>
+" Andy Hammerlindl
+" Last Change: 2022 Jan 05
+
+" Hacked together from Bram Moolenaar's C syntax file, and Claudio Fleiner's
+" Java syntax file.
+
+if exists("b:current_syntax")
+ finish
+endif
+
+" useful C/C++/Java keywords
+syn keyword asyStatement break return continue unravel
+syn keyword asyConditional if else
+syn keyword asyRepeat while for do
+syn keyword asyExternal access from import include
+syn keyword asyOperator new operator
+
+" basic asymptote keywords
+syn keyword asyConstant VERSION
+syn keyword asyConstant true false default infinity inf nan
+syn keyword asyConstant null nullframe nullpath nullpen
+syn keyword asyConstant intMin intMax realMin realMax
+syn keyword asyConstant realEpsilon realDigits
+syn keyword asyPathSpec and cycle controls tension atleast curl
+syn keyword asyStorageClass static public restricted private explicit
+syn keyword asyStructure struct typedef
+syn keyword asyType void bool bool3 int real string file
+syn keyword asyType pair triple transform guide path pen frame
+syn keyword asyType picture
+
+" module specific keywords
+if exists("asy_syn_plain")
+ syn keyword asyConstant currentpicture currentpen defaultpen
+ syn keyword asyConstant inch inches cm mm bp pt up down right left
+ syn keyword asyConstant E NE N NW W SW S SE
+ syn keyword asyConstant ENE NNE NNW WNW WSW SSW SSE ESE
+ syn keyword asyConstant I pi twopi
+ syn keyword asyConstant CCW CW
+ syn keyword asyConstant undefined sqrtEpsilon Align mantissaBits
+ syn keyword asyConstant identity zeroTransform invert
+ syn keyword asyConstant stdin stdout
+ syn keyword asyConstant unitsquare unitcircle circleprecision
+ syn keyword asyConstant solid dotted Dotted dashed dashdotted
+ syn keyword asyConstant longdashed longdashdotted
+ syn keyword asyConstant squarecap roundcap extendcap
+ syn keyword asyConstant miterjoin roundjoin beveljoin
+ syn keyword asyConstant zerowinding evenodd basealign nobasealign
+ syn keyword asyConstant black white gray red green blue Cyan Magenta
+ syn keyword asyConstant Yellow Black cyan magenta yellow palered
+ syn keyword asyConstant palegreen paleblue palecyan palemagenta
+ syn keyword asyConstant paleyellow palegray lightred lightgreen
+ syn keyword asyConstant lightblue lightcyan lightmagenta lightyellow
+ syn keyword asyConstant lightgray mediumred mediumgreen mediumblue
+ syn keyword asyConstant mediumcyan mediummagenta mediumyellow
+ syn keyword asyConstant mediumgray heavyred heavygreen heavyblue
+ syn keyword asyConstant heavycyan heavymagenta lightolive heavygray
+ syn keyword asyConstant deepred deepgreen deepblue deepcyan
+ syn keyword asyConstant deepmagenta deepyellow deepgray darkred
+ syn keyword asyConstant darkgreen darkblue darkcyan darkmagenta
+ syn keyword asyConstant darkolive darkgray orange fuchsia chartreuse
+ syn keyword asyConstant springgreen purple royalblue salmon brown
+ syn keyword asyConstant olive darkbrown pink palegrey lightgrey
+ syn keyword asyConstant mediumgrey grey heavygrey deepgrey darkgrey
+
+ if exists("asy_syn_texcolors")
+ syn keyword asyConstant GreenYellow Yellow Goldenrod Dandelion
+ syn keyword asyConstant Apricot Peach Melon YellowOrange Orange
+ syn keyword asyConstant BurntOrange Bittersweet RedOrange Mahogany
+ syn keyword asyConstant Maroon BrickRed Red OrangeRed RubineRed
+ syn keyword asyConstant WildStrawberry Salmon CarnationPink Magenta
+ syn keyword asyConstant VioletRed Rhodamine Mulberry RedViolet
+ syn keyword asyConstant Fuchsia Lavender Thistle Orchid DarkOrchid
+ syn keyword asyConstant Purple Plum Violet RoyalPurple BlueViolet
+ syn keyword asyConstant Periwinkle CadetBlue CornflowerBlue
+ syn keyword asyConstant MidnightBlue NavyBlue RoyalBlue Blue
+ syn keyword asyConstant Cerulean Cyan ProcessBlue SkyBlue Turquoise
+ syn keyword asyConstant TealBlue Aquamarine BlueGreen Emerald
+ syn keyword asyConstant JungleGreen SeaGreen Green ForestGreen
+ syn keyword asyConstant PineGreen LimeGreen YellowGreen SpringGreen
+ syn keyword asyConstant OliveGreen RawSienna Sepia Brown Tan Gray
+ syn keyword asyConstant Black White
+ endif
+
+ if exists("asy_syn_x11colors")
+ syn keyword asyConstant AliceBlue AntiqueWhite Aqua Aquamarine Azure
+ syn keyword asyConstant Beige Bisque Black BlanchedAlmond Blue
+ syn keyword asyConstant BlueViolet Brown BurlyWood CadetBlue
+ syn keyword asyConstant Chartreuse Chocolate Coral CornflowerBlue
+ syn keyword asyConstant Cornsilk Crimson Cyan DarkBlue DarkCyan
+ syn keyword asyConstant DarkGoldenrod DarkGray DarkGreen DarkKhaki
+ syn keyword asyConstant DarkMagenta DarkOliveGreen DarkOrange
+ syn keyword asyConstant DarkOrchid DarkRed DarkSalmon DarkSeaGreen
+ syn keyword asyConstant DarkSlateBlue DarkSlateGray DarkTurquoise
+ syn keyword asyConstant DarkViolet DeepPink DeepSkyBlue DimGray
+ syn keyword asyConstant DodgerBlue FireBrick FloralWhite ForestGreen
+ syn keyword asyConstant Fuchsia Gainsboro GhostWhite Gold Goldenrod
+ syn keyword asyConstant Gray Green GreenYellow Honeydew HotPink
+ syn keyword asyConstant IndianRed Indigo Ivory Khaki Lavender
+ syn keyword asyConstant LavenderBlush LawnGreen LemonChiffon
+ syn keyword asyConstant LightBlue LightCoral LightCyan
+ syn keyword asyConstant LightGoldenrodYellow LightGreen LightGrey
+ syn keyword asyConstant LightPink LightSalmon LightSeaGreen
+ syn keyword asyConstant LightSkyBlue LightSlateGray LightSteelBlue
+ syn keyword asyConstant LightYellow Lime LimeGreen Linen Magenta
+ syn keyword asyConstant Maroon MediumAquamarine MediumBlue
+ syn keyword asyConstant MediumOrchid MediumPurple MediumSeaGreen
+ syn keyword asyConstant MediumSlateBlue MediumSpringGreen
+ syn keyword asyConstant MediumTurquoise MediumVioletRed MidnightBlue
+ syn keyword asyConstant MintCream MistyRose Moccasin NavajoWhite
+ syn keyword asyConstant Navy OldLace Olive OliveDrab Orange
+ syn keyword asyConstant OrangeRed Orchid PaleGoldenrod PaleGreen
+ syn keyword asyConstant PaleTurquoise PaleVioletRed PapayaWhip
+ syn keyword asyConstant PeachPuff Peru Pink Plum PowderBlue Purple
+ syn keyword asyConstant Red RosyBrown RoyalBlue SaddleBrown Salmon
+ syn keyword asyConstant SandyBrown SeaGreen Seashell Sienna Silver
+ syn keyword asyConstant SkyBlue SlateBlue SlateGray Snow SpringGreen
+ syn keyword asyConstant SteelBlue Tan Teal Thistle Tomato Turquoise
+ syn keyword asyConstant Violet Wheat White WhiteSmoke Yellow
+ syn keyword asyConstant YellowGreen
+ endif
+
+ if exists("asy_syn_three")
+ syn keyword asyType path3 guide3 transform3
+ syn keyword asyType projection light material patch surface tube
+ syn keyword asyConstant currentprojection currentlight defaultrender
+ syn keyword asyConstant identity4 O X Y Z
+ syn keyword asyConstant nolight nullpens
+ syn keyword asyConstant unitsphere unithemisphere unitplane octant1
+ syn keyword asyConstant unitcone unitsolidcone unitcube unitcylinder
+ syn keyword asyConstant unitdisk unittube
+ endif
+endif
+
+
+" string constants
+syn region asyCString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=asyCSpecial
+syn match asyCSpecial display contained +\\\(['"?\\abfnrtv]\|\o\{1,3}\)+
+syn match asyCSpecial display contained +\\\(x[0-9A-F]\{1,2\}\|$\)+
+" double quoted strings only special character is \"
+syn region asyString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=asySpecial
+syn match asySpecial display contained +\(\\\)\@1<!\(\\\\\)*\zs\\"+
+
+
+" number constants
+syn match asyNumbers display transparent "\<\d\|\.\d"
+ \ contains=asyNumber,asyNumberError
+syn match asyNumber display contained "\d*\.\=\d*\(e[-+]\=\d\+\)\="
+" highlight number constants with two '.' or with '.' after an 'e'
+syn match asyNumberError display contained "\d*\.\(\d\|e[-+]\=\)*\.[0-9.]*"
+syn match asyNumberError display contained "\d*e[-+]\=\d*\.[0-9.]*"
+syn match asyNumberError display contained "\d*e[-+]\=\(e[-+]\=\)*\.[0-9.]*"
+
+
+" comments and comment strings
+syn keyword asyTodo contained TODO FIXME XXX
+syn sync ccomment asyComment minlines=15
+if exists("asy_comment_strings")
+ " A comment can contain asyString, asyCString, and asyNumber. But a "*/"
+ " inside a asy*String in a asyComment DOES end the comment! So we need to
+ " use a special type of asy*String: asyComment*String, which also ends on
+ " "*/", and sees a "*" at the start of the line as comment again.
+ " Unfortunately this doesn't very well work for // type of comments :-(
+ syn match asyCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syn region asyCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+ \ end=+\*/+me=s-1
+ \ contains=asySpecial,asyCommentSkip
+ syn region asyCommentCString contained start=+'+ skip=+\\\\\|\\'+ end=+'+
+ \ end=+\*/+me=s-1
+ \ contains=asyCSpecial,asyCommentSkip
+ syn region asyCommentLString contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+ \ end="$" contains=asySpecial
+ syn region asyCommentLCString contained start=+'+ skip=+\\\\\|\\'+ end=+'+
+ \ end="$" contains=asyCSpecial
+ syn region asyCommentL start="//" skip="\\$" end="$" keepend
+ \ contains=asyTodo,asyCommentLString,
+ \ asyCommentLCString,asyNumbers
+ syn region asyComment matchgroup=asyComment start="/\*" end="\*/"
+ \ contains=asyTodo,asyCommentStartError,
+ \ asyCommentString,asyCommentCString,asyNumbers
+else
+ syn region asyCommentL start="//" skip="\\$" end="$" keepend
+ \ contains=asyTodo
+ syn region asyComment matchgroup=asyComment start="/\*" end="\*/"
+ \ contains=asyTodo,asyCommentStartError
+endif
+
+" highlight common errors when starting/ending C comments
+syn match asyCommentError display "\*/"
+syn match asyCommentStartError display "/\*"me=e-1 contained
+
+
+" delimiter matching errors
+syn region asyCurly transparent start='{' end='}'
+ \ contains=TOP,asyCurlyError
+syn region asyBrack transparent start='\[' end='\]' matchgroup=asyError
+ \ end=';' contains=TOP,asyBrackError
+syn region asyParen transparent start='(' end=')' matchgroup=asyError
+ \ end=';' contains=TOP,asyParenError
+syn match asyCurlyError display '}'
+syn match asyBrackError display '\]'
+syn match asyParenError display ')'
+" for (;;) constructs are exceptions that allow ; inside parenthesis
+syn region asyParen transparent matchgroup=asyParen
+ \ start='\(for\s*\)\@<=(' end=')'
+ \ contains=TOP,asyParenError
+
+" Define the default highlighting.
+hi def link asyCommentL asyComment
+hi def link asyConditional Conditional
+hi def link asyRepeat Repeat
+hi def link asyNumber Number
+hi def link asyNumberError asyError
+hi def link asyCurlyError asyError
+hi def link asyBracketError asyError
+hi def link asyParenError asyError
+hi def link asyCommentError asyError
+hi def link asyCommentStartError asyError
+hi def link asyOperator Operator
+hi def link asyStructure Structure
+hi def link asyStorageClass StorageClass
+hi def link asyExternal Include
+hi def link asyDefine Macro
+hi def link asyError Error
+hi def link asyStatement Statement
+hi def link asyType Type
+hi def link asyConstant Constant
+hi def link asyCommentString asyString
+hi def link asyCommentCString asyString
+hi def link asyCommentLString asyString
+hi def link asyCommentLCString asyString
+hi def link asyCommentSkip asyComment
+hi def link asyString String
+hi def link asyCString String
+hi def link asyComment Comment
+hi def link asySpecial SpecialChar
+hi def link asyCSpecial SpecialChar
+hi def link asyTodo Todo
+hi def link asyPathSpec Statement
+
+let b:current_syntax = "asy"
diff --git a/runtime/syntax/chicken.vim b/runtime/syntax/chicken.vim
index f53d872..958fc1f 100644
--- a/runtime/syntax/chicken.vim
+++ b/runtime/syntax/chicken.vim
@@ -1,13 +1,13 @@
" Vim syntax file
-" Language: Scheme (CHICKEN)
-" Last Change: 2021 Oct 01
-" Author: Evan Hanson <evhan@foldling.org>
-" Maintainer: Evan Hanson <evhan@foldling.org>
-" Repository: https://git.foldling.org/vim-scheme.git
-" URL: https://foldling.org/vim/syntax/chicken.vim
-" Notes: This is supplemental syntax, to be loaded after the core Scheme
-" syntax file (syntax/scheme.vim). Enable it by setting b:is_chicken=1
-" and filetype=scheme.
+" Language: Scheme (CHICKEN)
+" Last Change: 2024 Jun 21
+" Author: Evan Hanson <evhan@foldling.org>
+" Maintainer: Evan Hanson <evhan@foldling.org>
+" Repository: https://git.foldling.org/vim-scheme.git
+" URL: https://foldling.org/vim/syntax/chicken.vim
+" Notes: This is supplemental syntax, to be loaded after the core
+" Scheme syntax file (syntax/scheme.vim). Enable it by
+" setting b:is_chicken=1 and filetype=scheme.
" Only to be used on top of the Scheme syntax.
if !exists('b:did_scheme_syntax')
diff --git a/runtime/syntax/csv.vim b/runtime/syntax/csv.vim
new file mode 100644
index 0000000..848029a
--- /dev/null
+++ b/runtime/syntax/csv.vim
@@ -0,0 +1,39 @@
+vim9script
+
+# Maintainer: Maxim Kim <habamax@gmail.com>
+# Last Update: 2024-06-18
+
+if exists("b:current_syntax")
+ finish
+endif
+
+var delimiter = get(b:, "csv_delimiter", ",")
+
+# generate bunch of following syntaxes:
+# syntax match csvCol8 /.\{-}\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
+# syntax region escCsvCol8 start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
+for col in range(8, 0, -1)
+ var ncol = (col == 8 ? 0 : col + 1)
+ exe $'syntax match csvCol{col}' .. ' /.\{-}\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol
+ exe $'syntax region escCsvCol{col}' .. ' start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol
+endfor
+
+hi def link csvCol1 Statement
+hi def link csvCol2 Constant
+hi def link csvCol3 Type
+hi def link csvCol4 PreProc
+hi def link csvCol5 Identifier
+hi def link csvCol6 Special
+hi def link csvCol7 String
+hi def link csvCol8 Comment
+
+hi def link escCsvCol1 csvCol1
+hi def link escCsvCol2 csvCol2
+hi def link escCsvCol3 csvCol3
+hi def link escCsvCol4 csvCol4
+hi def link escCsvCol5 csvCol5
+hi def link escCsvCol6 csvCol6
+hi def link escCsvCol7 csvCol7
+hi def link escCsvCol8 csvCol8
+
+b:current_syntax = "csv"
diff --git a/runtime/syntax/debcopyright.vim b/runtime/syntax/debcopyright.vim
index 6f76b5c..cb9e896 100644
--- a/runtime/syntax/debcopyright.vim
+++ b/runtime/syntax/debcopyright.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Debian copyright file
" Maintainer: Debian Vim Maintainers
-" Last Change: 2023 Jan 16
+" Last Change: 2024 Jul 28
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcopyright.vim
" Standard syntax initialization
@@ -15,7 +15,7 @@ set cpo&vim
syn case match
syn match debcopyrightUrl "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
-syn match debcopyrightKey "^\%(Format\|Upstream-Name\|Upstream-Contact\|Disclaimer\|Source\|Comment\|Files\|Copyright\|License\|Files-Excluded\%(-[-a-zA-Z0-9]\+\)\=\): *"
+syn match debcopyrightKey "^\%(Format\|Upstream-Name\|Upstream-Contact\|Disclaimer\|Source\|Comment\|Files\|Copyright\|License\|Files-\%(Excluded\|Included\)\%(-[-a-zA-Z0-9]\+\)\=\): *"
syn match debcopyrightEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
syn match debcopyrightEmail "<.\{-}>"
syn match debcopyrightComment "^#.*$" contains=@Spell
diff --git a/runtime/syntax/dockerfile.vim b/runtime/syntax/dockerfile.vim
index ce52e69..6ec71fc 100644
--- a/runtime/syntax/dockerfile.vim
+++ b/runtime/syntax/dockerfile.vim
@@ -1,6 +1,6 @@
" dockerfile.vim - Syntax highlighting for Dockerfiles
" Maintainer: Honza Pokorny <https://honza.ca>
-" Last Change: 2020 Feb 11
+" Last Change: 2024 Jul 03
" License: BSD
" https://docs.docker.com/engine/reference/builder/
@@ -34,7 +34,7 @@ syntax region dockerfileJSON contained keepend start=/\v\[/ skip=/\v\\\_./ end
syntax region dockerfileShell contained keepend start=/\v/ skip=/\v\\\_./ 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$/
+syntax region dockerfileComment start=/\v^\s*#/ end=/\v$/ contains=@Spell
set commentstring=#\ %s
hi def link dockerfileString String
diff --git a/runtime/syntax/dosbatch.vim b/runtime/syntax/dosbatch.vim
index 5560199..0c3e99b 100644
--- a/runtime/syntax/dosbatch.vim
+++ b/runtime/syntax/dosbatch.vim
@@ -3,6 +3,7 @@
" Maintainer: Mike Williams <mrmrdubya@gmail.com>
" Filenames: *.bat
" Last Change: 3rd February 2024
+" 2024 Aug 14 by Vim Project: improve syntax (#15453)
"
" Options Flags:
" dosbatch_cmdextversion - 1 = Windows NT, 2 = Windows 2000 [default]
@@ -45,7 +46,7 @@ syn match dosbatchString "\<echo\([^)>|]\|\^\@<=[)>|]\)*"lc=4 contains=dosbatchV
syn match dosbatchEchoOperator "\<echo\s\+\(on\|off\)\s*$"lc=4
" For embedded commands
-syn match dosbatchCmd "(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator
+syn match dosbatchCmd "(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator,dosbatchIfOperator
" Numbers - surround with ws to not include in dir and filenames
syn match dosbatchInteger "[[:space:]=(/:,!~-]\d\+"lc=1
@@ -74,7 +75,7 @@ syn match dosbatchSet "\s\h\w*[+-]\==\{-1}" contains=dosbatchIdentifier,dosbatc
" Args to bat files and for loops, etc
syn match dosbatchArgument "%\(\d\|\*\)"
-syn match dosbatchArgument "%[a-z]\>"
+syn match dosbatchArgument "%%[a-z]\>"
if dosbatch_cmdextversion == 1
syn match dosbatchArgument "%\~[fdpnxs]\+\(\($PATH:\)\=[a-z]\|\d\)\>"
else
@@ -102,9 +103,11 @@ else
syn match dosbatchColonCommentErr contained "\s*:\s*:.*$"
endif
syn match dosbatchColonCommentErr contained "\s*:\s*:[^)]*\(\(\n\s*\)\?)\)\@="
-syn region dosbatchCodeBlock transparent start=+(+ end=+)+ contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator,@dosbatchCodeBlockComment,dosbatchColonCommentErr,dosbatchCodeBlock
+syn region dosbatchCodeBlock transparent start=+(+ end=+)+ contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator,dosbatchIfOperator,@dosbatchCodeBlockComment,dosbatchColonCommentErr,dosbatchCodeBlock
syn match dosbatchCodeBlockErr ")"
+syn sync match dosbatchSyncCodeBlock grouphere NONE "^)\s*$"
+
syn keyword dosbatchImplicit append assoc at attrib break cacls cd chcp chdir
syn keyword dosbatchImplicit chkdsk chkntfs cls cmd color comp compact convert copy
syn keyword dosbatchImplicit date del dir diskcomp diskcopy doskey echo endlocal
diff --git a/runtime/syntax/dune.vim b/runtime/syntax/dune.vim
index b425405..3cfb47f 100644
--- a/runtime/syntax/dune.vim
+++ b/runtime/syntax/dune.vim
@@ -4,6 +4,7 @@
" Anton Kochkov <anton.kochkov@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
+" 2023 Nov 24 - Add end-of-line strings (Samuel Hym)
" 2019 Feb 27 - Add newer keywords to the syntax (Simon Cruanes)
" 2018 May 8 - Check current_syntax (Kawahara Satoru)
" 2018 Mar 29 - Extend jbuild syntax with more keywords (Petter A. Urkedal)
@@ -38,6 +39,8 @@ syn keyword lispFunc ignore-stdout ignore-stderr ignore-outputs
syn keyword lispFunc with-stdout-to with-stderr-to with-outputs-to
syn keyword lispFunc write-file system bash
+syn region lispString start=+"\\[>|]+ end=+$+ contains=@Spell
+
syn cluster lispBaseListCluster add=duneVar
syn match duneVar '\${[@<^]}' containedin=lispSymbol
syn match duneVar '\${\k\+\(:\k\+\)\?}' containedin=lispSymbol
diff --git a/runtime/syntax/fstab.vim b/runtime/syntax/fstab.vim
index 91150bc..64d5bee 100644
--- a/runtime/syntax/fstab.vim
+++ b/runtime/syntax/fstab.vim
@@ -2,8 +2,8 @@
" Language: fstab file
" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
" URL: https://raw.github.com/rid9/vim-fstab/master/syntax/fstab.vim
-" Last Change: 2023 Feb 19
-" Version: 1.6.3
+" Last Change: 2024 Jul 11
+" Version: 1.6.4
"
" Credits:
" David Necas (Yeti) <yeti@physics.muni.cz>
@@ -35,7 +35,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
+syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs tracefs overlay
syn keyword fsDeviceKeyword contained LABEL nextgroup=fsDeviceLabel
syn keyword fsDeviceKeyword contained UUID nextgroup=fsDeviceUUID
syn keyword fsDeviceKeyword contained PARTLABEL nextgroup=fsDevicePARTLABEL
@@ -56,7 +56,7 @@ syn keyword fsMountPointKeyword contained none swap
" Type
syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeUnknown
syn match fsTypeUnknown /\s\+\zs\w\+/ contained
-syn keyword fsTypeKeyword contained adfs ados affs anon_inodefs atfs audiofs auto autofs bdev befs bfs btrfs binfmt_misc cd9660 ceph cfs cgroup cifs coda coherent configfs cpuset cramfs debugfs devfs devpts devtmpfs dlmfs e2compr ecryptfs efivarfs efs erofs exfat ext2 ext2fs ext3 ext4 f2fs fdesc ffs filecore fuse fuseblk fusectl gfs2 hfs hfsplus hpfs hugetlbfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix mqueue msdos ncpfs nfs nfs4 nfsd nilfs2 none ntfs ntfs3 null nwfs ocfs2 omfs overlay ovlfs pipefs portal proc procfs pstore ptyfs pvfs2 qnx4 qnx6 reiserfs ramfs romfs rpc_pipefs securityfs shm smbfs spufs squashfs sockfs sshfs std subfs swap sysfs sysv tcfs tmpfs ubifs udf ufs umap umsdos union usbfs userfs v9fs vfat virtiofs vs3fs vxfs wrapfs wvfs xenfs xenix xfs zisofs zonefs
+syn keyword fsTypeKeyword contained adfs ados affs anon_inodefs atfs audiofs auto autofs bdev befs bfs btrfs binfmt_misc cd9660 ceph cfs cgroup cifs coda coherent configfs cpuset cramfs debugfs devfs devpts devtmpfs dlmfs e2compr ecryptfs efivarfs efs erofs exfat ext2 ext2fs ext3 ext4 f2fs fdesc ffs filecore fuse fuseblk fusectl gfs2 hfs hfsplus hpfs hugetlbfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix mqueue msdos ncpfs nfs nfs4 nfsd nilfs2 none ntfs ntfs3 null nwfs ocfs2 omfs overlay ovlfs pipefs portal proc procfs pstore ptyfs pvfs2 qnx4 qnx6 reiserfs ramfs romfs rpc_pipefs securityfs shm smbfs spufs squashfs sockfs sshfs std subfs swap sysfs sysv tcfs tmpfs tracefs ubifs udf ufs umap umsdos union usbfs userfs v9fs vfat virtiofs vs3fs vxfs wrapfs wvfs xenfs xenix xfs zisofs zonefs
" Options
" -------
@@ -80,10 +80,10 @@ syn match fsOptionsKeywords contained /\<x-systemd\.\%(device-bound\|automount\|
syn match fsOptionsKeywords contained /\<x-initrd\.mount/
syn match fsOptionsKeywords contained /\<cache=/ nextgroup=fsOptionsCache
-syn keyword fsOptionsCache yes no none strict loose fscache mmap
+syn keyword fsOptionsCache contained yes no none strict loose fscache mmap
syn match fsOptionsKeywords contained /\<dax=/ nextgroup=fsOptionsDax
-syn keyword fsOptionsDax inode never always
+syn keyword fsOptionsDax contained inode never always
syn match fsOptionsKeywords contained /\<errors=/ nextgroup=fsOptionsErrors
syn keyword fsOptionsErrors contained continue panic withdraw remount-ro recover zone-ro zone-offline repair
@@ -288,8 +288,15 @@ syn match fsOptionsKeywords contained /\<\%(atime_quantum\|preferred_slot\|local
syn keyword fsOptionsKeywords contained strictatime inode64
" Options: overlay
+syn match fsOptionsKeywords contained /\<\%(index\|uuid\|nfs_export\|metacopy\)=/ nextgroup=fsOptionsOverlayBool
+syn keyword fsOptionsOverlayBool contained on off
+syn match fsOptionsKeywords contained /\<\%(lowerdir\|upperdir\|workdir\)=/ nextgroup=fsOptionsOverlayDir
+syn match fsOptionsOverlayDir contained /[^,[:space:]]*/
syn match fsOptionsKeywords contained /\<redirect_dir=/ nextgroup=fsOptionsOverlayRedirectDir
syn keyword fsOptionsOverlayRedirectDir contained on follow off nofollow
+syn match fsOptionsKeywords contained /\<xino=/ nextgroup=fsOptionsOverlayXino
+syn keyword fsOptionsOverlayXino contained on off auto
+syn keyword fsOptionsKeywords contained userxattr volatile
" Options: proc
syn match fsOptionsKeywords contained /\<\%(hidepid\|subset\)=/ nextgroup=fsOptionsString
@@ -462,7 +469,10 @@ hi def link fsOptionsNumberOctal Number
hi def link fsOptionsNumberSigned Number
hi def link fsOptionsOcfs2Coherency String
hi def link fsOptionsOcfs2ResvLevel Number
+hi def link fsOptionsOverlayBool Boolean
+hi def link fsOptionsOverlayDir String
hi def link fsOptionsOverlayRedirectDir String
+hi def link fsOptionsOverlayXino String
hi def link fsOptionsQnx4Bitmap String
hi def link fsOptionsQnx6Hold String
hi def link fsOptionsQnx6Sync String
diff --git a/runtime/syntax/generator/Makefile b/runtime/syntax/generator/Makefile
index 3cf4b95..a7ccba3 100644
--- a/runtime/syntax/generator/Makefile
+++ b/runtime/syntax/generator/Makefile
@@ -1,5 +1,5 @@
VIM_SRCDIR = ../../../src
-RUN_VIM = $(VIM_SRCDIR)/vim -N -u NONE -i NONE -n
+RUN_VIMPROG = $(VIM_SRCDIR)/vim -N -u NONE -i NONE -n
REVISION ?= $(shell date +%Y-%m-%dT%H:%M:%S%:z)
SRC = $(VIM_SRCDIR)/eval.c $(VIM_SRCDIR)/ex_cmds.h $(VIM_SRCDIR)/ex_docmd.c \
@@ -15,13 +15,13 @@ generate: vim.vim
vim.vim: vim.vim.rc update_date.vim
@echo "Generating vim.vim ..."
@cp -f vim.vim.rc ../vim.vim
- @$(RUN_VIM) -S update_date.vim
+ @$(RUN_VIMPROG) -S update_date.vim
@echo "done."
vim.vim.rc: gen_syntax_vim.vim vim.vim.base $(SRC)
@echo "Generating vim.vim.rc ..."
@rm -f sanity_check.err generator.err
- @$(RUN_VIM) -S gen_syntax_vim.vim
+ @$(RUN_VIMPROG) -S gen_syntax_vim.vim
@if test -f sanity_check.err ; then \
echo ; \
echo "Sanity errors:" ; \
diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim
index 8b76775..480038e 100644
--- a/runtime/syntax/generator/gen_syntax_vim.vim
+++ b/runtime/syntax/generator/gen_syntax_vim.vim
@@ -2,7 +2,7 @@
" Language: Vim script
" Maintainer: Hirohito Higashi (h_east)
" URL: https://github.com/vim-jp/syntax-vim-ex
-" Last Change: 2024 Apr 07
+" Last Change: 2024 Aug 23
" Version: 2.1.1
let s:keepcpo= &cpo
@@ -275,6 +275,8 @@ function! s:get_vim_command_type(cmd_name)
let menu_prefix = '^\%([acinostvx]\?\|tl\)'
let map_prefix = '^[acilnostvx]\?'
let exclude_list =<< trim EOL
+ 2match
+ 3match
Next
Print
X
@@ -283,6 +285,7 @@ function! s:get_vim_command_type(cmd_name)
augroup
autocmd
behave
+ call
catch
def
doautoall
@@ -297,10 +300,16 @@ function! s:get_vim_command_type(cmd_name)
enddef
endfunction
execute
+ final
+ for
function
insert
+ let
+ loadkeymap
map
mapclear
+ match
+ noremap
new
normal
popup
@@ -313,6 +322,8 @@ function! s:get_vim_command_type(cmd_name)
substitute
syntax
throw
+ unlet
+ unmap
var
vim9script
EOL
@@ -516,15 +527,15 @@ function! s:parse_vim_complete_name(li)
new
exec 'read ' . file_name
norm! gg
- exec '/^}\s*command_complete\[\]\s*=\s*$/+1;/^};/-1yank'
+ exec '/^static keyvalue_T command_complete_tab\[] =$/+1;/^};$/-1yank'
%delete _
put
- g!/^\s*{.*"\w\+"\s*}\s*,.*$/d
+ g!/^\s*KEYVALUE_ENTRY(/d
g/"custom\(list\)\?"/d
for line in getline(1, line('$'))
- let list = matchlist(line, '^\s*{.*"\(\w\+\)"\s*}\s*,')
+ let list = matchlist(line, '^\s*KEYVALUE_ENTRY(EXPAND_\w\+,\s*"\(\w\+\)"')
let item.name = list[1]
call add(a:li, copy(item))
endfor
diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base
index adfd68e..2624798 100644
--- a/runtime/syntax/generator/vim.vim.base
+++ b/runtime/syntax/generator/vim.vim.base
@@ -3,7 +3,7 @@
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougkearns@gmail.com>
" URL: https://github.com/vim-jp/syntax-vim-ex
-" Last Change: 2024 Jun 17
+" Last Change: 2024 Aug 23
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -29,15 +29,13 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell
" regular vim commands {{{2
" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR=''
-syn keyword vimCommand contained 2mat[ch] 3mat[ch]
-
" Lower priority for _new_ to distinguish constructors from the command.
syn match vimCommand contained "\<new\>(\@!"
syn match vimCommand contained "\<z[-+^.=]\=\>"
syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man Over Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Until Winbar XMLent XMLns
" vimOptions are caught only when contained in a vimSet {{{2
-" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR=''
+" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
" vimOptions: These are the turn-off setting variants {{{2
" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
@@ -46,7 +44,7 @@ syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue Di
" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR=''
" termcap codes (which can also be set) {{{2
-" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR=''
+" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
" term key codes
syn keyword vimOption contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku
syn match vimOption contained "t_%1"
@@ -79,7 +77,11 @@ syn case match
"--- syntax here and above generated by mkvimvim ---
" Special Vim Highlighting (not automatic) {{{1
-" Set up folding commands for this syntax highlighting file {{{2
+" Set up commands for this syntax highlighting file {{{2
+
+com! -nargs=* Vim9 execute <q-args> s:vim9script ? "" : "contained"
+com! -nargs=* VimL execute <q-args> s:vim9script ? "contained" : ""
+
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[afhHlmpPrt]'
if g:vimsyn_folding =~# 'a'
com! -nargs=* VimFolda <args> fold
@@ -162,6 +164,14 @@ else
let s:vimsyn_maxlines= 60
endif
+" Nulls {{{2
+" =====
+Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string
+
+" Booleans {{{2
+" ========
+Vim9 syn keyword vim9Boolean true false
+
" Numbers {{{2
" =======
syn case ignore
@@ -175,7 +185,8 @@ syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSub
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCatch,vimDef,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimGlobal,vimHighlight,vimLet,vimMap,vimMark,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDef,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
+syn cluster vim9CmdList contains=vim9Const,vim9Final,vim9For,vim9Var
syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand
syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
@@ -186,7 +197,8 @@ syn match vimVar "\s\zs&t_k;"
syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
syn keyword vimCommand contained in
-syn cluster vimExprList contains=vimEnvvar,vimFunc,vimFuncVar,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar
+syn cluster vimExprList contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
+syn cluster vim9ExprList contains=vim9Boolean,vim9Null
" Insertions And Appends: insert append {{{2
" (buftype != nofile test avoids having append, change, insert show up in the command window)
@@ -206,6 +218,10 @@ syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vi
syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
syn keyword vimBehaveModel contained mswin xterm
+" Call {{{2
+" ====
+syn match vimCall "\<call\=\>" skipwhite nextgroup=vimFunc
+
" Exception Handling {{{2
syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList
syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern
@@ -240,8 +256,8 @@ syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBan
" Operators: {{{2
" =========
-syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar
-syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
+syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
+syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
syn match vimOper "\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\|!\~#\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
syn match vimOper "\(\<is\|\<isnot\)[?#]\{0,2}\>" skipwhite nextgroup=vimString,vimSpecFile
syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
@@ -256,8 +272,8 @@ syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFunc
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSearch,vimSpecFile,vimString,vimSubst,vimFuncFold
-syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert
-syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment
+syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet
+syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For
syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
@@ -277,19 +293,19 @@ syn keyword vimFuncKey contained fu[nction]
syn keyword vimDefKey contained def
syn keyword vimMethodName contained empty len string
-syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod contains=vimFuncParam,@vimContinue
-syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType contains=vimDefParam,vim9Comment
+syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,@vimContinue
+syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError contains=vimDefParam,vim9Comment,vimFuncParamEquals
syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
-syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod
+syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
-syn region vimFuncBody contained start="^" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList
-syn region vimDefBody contained start="^" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList
+syn region vimFuncBody contained start="^.\=" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+syn region vimDefBody contained start="^.\=" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
-syn match vimEndfunction "\<endf\%[unction]\>"
-syn match vimEnddef "\<enddef\>"
+syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
syn region vimFuncFold start="^\s*:\=\s*fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="^\s*:\=\s*endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
@@ -302,9 +318,9 @@ syn match vimFuncBlank contained "\s\+"
" Types: {{{2
" =====
-" vimTypes : new for vim9
-syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze#" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef contains=vimTypeSep transparent
-syn match vimParamType contained ":\s\+\a" skipwhite skipnl nextgroup=vimFuncParamEquals contains=vimTypeSep,@vimType
+
+syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef,vimCommentError contains=vimTypeSep transparent
+syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
syn keyword vimType contained any blob bool channel float job number string void
@@ -331,7 +347,7 @@ else
endif
syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
-syn region vimKeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
+syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
" Special Filenames, Modifiers, Extension Removal: {{{2
" ===============================================
@@ -379,35 +395,26 @@ if get(g:, "vimsyn_comment_strings", 1)
endif
if s:vim9script
- syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString contained
- syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString contained
- syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString contained
- " Vim9 comments - TODO: might be highlighted while they don't work
- syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
- syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
- syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
- " Vim9 comment inside expression
- " syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString
- " syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString
- " syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString
-
syn cluster vimComment contains=vim9Comment
else
- syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
- syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
- syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
- " Vim9 comments - TODO: might be highlighted while they don't work
- syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString contained
- " Vim9 comment inside expression
- syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained
-
syn cluster vimComment contains=vimComment
endif
+VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
+VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
+VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
+" Vim9 comments - TODO: might be highlighted while they don't work
+Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
+Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
+Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
+" Vim9 comment inside expression
+Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained
+Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained
+Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained
+
+syn match vim9CommentError contained "#.*"
+syn match vimCommentError contained +".*+
+
" Environment Variables: {{{2
" =====================
syn match vimEnvvar "\$\I\i*"
@@ -434,11 +441,12 @@ syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1
syn match vimEscape contained "\\<" contains=vimNotation
syn match vimEscape contained "\\<\*[^>]*>\=>"
-syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=vimStringInterpolationBrace,vimStringInterpolationExpr
-syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,vimStringInterpolationBrace,vimStringInterpolationExpr
+syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=@vimStringInterpolation
+syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation
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
" Substitutions: {{{2
" =============
@@ -498,28 +506,45 @@ syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
" Set command and associated set-options (vimOptions) with comment {{{2
-syn region vimSet matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\.\n\@!" end="$" end="|" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=vimSetEqual,vimOption,vimErrSetting,@vimComment,vimSetString,vimSetMod
-syn region vimSetEqual contained start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]"me=e-1 end="$" contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar
-syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
+syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
+syn region vimSetRegion contained start="\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*["#]\\ + matchgroup=vimCmdSep end="|" end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=@vimComment,@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap
+syn region vimSetEqual contained matchgroup=vimOper start="[=:]\|[-+^]=" skip=+\\\\\|\\|\|\\\s\|\n\s*\\\|\n\s*["#]\\ \|^\s*\\\|^\s*["#]\\ + matchgroup=vimCmdSep end="|" end="\ze\s" end="$" contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep
+syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
+syn keyword vimSetAll contained all nextgroup=vimSetMod
+syn keyword vimSetTermcap contained termcap
+syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
syn match vimSetSep contained "[,:]"
-syn match vimSetMod contained "&vim\=\|[!&?<]\|all&"
+syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
-" Let And Var: {{{2
-" ===========
-syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc,vimLetRegister,vimVarList
-syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimLetHereDoc,vimVarList
-syn region vimVarList contained start="\[" end="]" contains=vimVar,vimContinue
+" Variable Declarations: {{{2
+" =====================
+VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
+VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
+syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
-syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
+VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
-VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*\%(trim\s\+\%(eval\s\+\)\=\|eval\s\+\%(trim\s\+\)\=\)\=\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\s*\z1\s*$' extend
-syn keyword vimLet var skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' contains=@vimStringInterpolation extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' contains=@vimStringInterpolation extend
+
+Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
+Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
+Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
+
+syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc
+syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
" For: {{{2
" ===
-syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
+if s:vim9script
+ syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
+else
+ syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
+endif
" Abbreviations: {{{2
" =============
@@ -561,12 +586,14 @@ syn region vimExecute matchgroup=vimCommand start="\<exe\%[cute]\>" skip=+\\|\|\
" Maps: {{{2
" ====
-syn match vimMap "\<map\>\ze\s*(\@!" skipwhite nextgroup=vimMapMod,vimMapLhs
-syn match vimMap "\<map!" contains=vimMapBang skipwhite nextgroup=vimMapMod,vimMapLhs
-" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
+" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
+syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
-syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
-" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
+syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
+" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
+syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+
syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
@@ -632,6 +659,8 @@ syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\
syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation,vimMethodName
syn keyword vimFuncEcho contained ec ech echo
+syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+
" User Command Highlighting: {{{2
syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
@@ -649,6 +678,15 @@ endif
syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=vimOper,vimOperParen,vimVar,vimFunc,vimNotation
+" Match: {{{2
+" =====
+syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
+syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
+syn case ignore
+syn keyword vimMatchNone contained none
+syn case match
+syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
+
" Norm: {{{2
" ====
syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
@@ -824,13 +862,9 @@ syn match vimCtrlChar "[- -]"
" Beginners - Patterns that involve ^ {{{2
" =========
-if s:vim9script
- syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
- syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle contained
-else
- syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle
- syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle contained
-endif
+Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
+VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle
+
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
@@ -898,12 +932,16 @@ if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimLuaRegion
exe "syn include @vimLuaScript ".s:luapath
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+\.$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
syn cluster vimFuncBodyList add=vimLuaRegion
else
- syn region vimEmbedError start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+lua\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
endif
unlet s:luapath
@@ -921,12 +959,16 @@ if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimPerlRegion
exe "syn include @vimPerlScript ".s:perlpath
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)\ze\(\s*["#].*\)\=$+ end=+^\z1\ze\(\s*[#"].*\)\=$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
syn cluster vimFuncBodyList add=vimPerlRegion
else
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
endif
unlet s:perlpath
@@ -944,12 +986,16 @@ if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
syn cluster vimFuncBodyList add=vimRubyRegion
unlet! b:current_syntax
exe "syn include @vimRubyScript ".s:rubypath
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimRubyScript
- syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
syn cluster vimFuncBodyList add=vimRubyRegion
else
- syn region vimEmbedError start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
endif
unlet s:rubypath
@@ -967,14 +1013,18 @@ if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimPythonRegion
exe "syn include @vimPythonScript ".s:pythonpath
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
syn cluster vimFuncBodyList add=vimPythonRegion
else
- syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:pythonpath
@@ -999,17 +1049,23 @@ if s:trytcl
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimTclRegion
exe "syn include @vimTclScript ".s:tclpath
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
syn cluster vimFuncBodyList add=vimTclScript
else
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:tclpath
else
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:trytcl
@@ -1030,12 +1086,16 @@ if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
exe "syn include @vimMzSchemeScript ".s:mzschemepath
let &isk= s:iskKeep
unlet s:iskKeep
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
syn cluster vimFuncBodyList add=vimMzSchemeRegion
else
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
endif
unlet s:mzschemepath
@@ -1073,7 +1133,6 @@ if !exists("skip_vim_syntax_inits")
hi def link vimBufnrWarn vimWarn
endif
- hi def link vim9Vim9ScriptArg Special
hi def link vimAbb vimCommand
hi def link vimAddress vimMark
hi def link vimAugroupBang vimBang
@@ -1087,20 +1146,20 @@ if !exists("skip_vim_syntax_inits")
hi def link vimBehaveModel vimBehave
hi def link vimBehave vimCommand
hi def link vimBracket Delimiter
+ hi def link vimCall vimCommand
hi def link vimCatch vimCommand
hi def link vimCmplxRepeat SpecialChar
hi def link vimCommand Statement
hi def link vimComment Comment
- hi def link vim9Comment Comment
+ hi def link vimCommentError vimError
hi def link vimCommentString vimString
hi def link vimCommentTitle PreProc
- hi def link vim9CommentTitle PreProc
hi def link vimCondHL vimCommand
hi def link vimConst vimCommand
hi def link vimContinue Special
hi def link vimContinueComment vimComment
hi def link vimCtrlChar SpecialChar
- hi def link vimDefComment vimComment
+ hi def link vimDefComment vim9Comment
hi def link vimDefKey vimCommand
hi def link vimDefParam vimVar
hi def link vimEcho vimCommand
@@ -1161,13 +1220,15 @@ if !exists("skip_vim_syntax_inits")
hi def link vimLetHereDocStop Special
hi def link vimLetRegister Special
hi def link vimLineComment vimComment
- hi def link vim9LineComment vimComment
hi def link vimMapBang vimBang
hi def link vimMapModKey vimFuncSID
hi def link vimMapMod vimBracket
hi def link vimMap vimCommand
hi def link vimMark Number
hi def link vimMarkNumber vimNumber
+ hi def link vimMatch vimCommand
+ hi def link vimMatchGroup vimGroup
+ hi def link vimMatchNone vimGroup
hi def link vimMenuBang vimBang
hi def link vimMenuClear Special
hi def link vimMenuMod vimMapMod
@@ -1201,10 +1262,13 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSearchDelim Statement
hi def link vimSearch vimString
hi def link vimSep Delimiter
+ hi def link vimSet vimCommand
+ hi def link vimSetAll vimOption
+ hi def link vimSetBang vimBang
hi def link vimSetMod vimOption
- hi def link vimSetSep Statement
+ hi def link vimSetSep vimSep
hi def link vimSetString vimString
- hi def link vim9Vim9Script vimCommand
+ hi def link vimSetTermcap vimOption
hi def link vimShebang PreProc
hi def link vimSleep vimCommand
hi def link vimSleepArg Constant
@@ -1265,6 +1329,20 @@ if !exists("skip_vim_syntax_inits")
hi def link vimUserFunc Normal
hi def link vimVar Identifier
hi def link vimWarn WarningMsg
+
+ hi def link vim9Boolean Boolean
+ hi def link vim9Comment Comment
+ hi def link vim9CommentError vimError
+ hi def link vim9CommentTitle PreProc
+ hi def link vim9Const vimCommand
+ hi def link vim9Final vimCommand
+ hi def link vim9For vimCommand
+ hi def link vim9LineComment vimComment
+ hi def link vim9Null Constant
+ hi def link vim9Var vimCommand
+ hi def link vim9Variable vimVar
+ hi def link vim9Vim9Script vimCommand
+ hi def link vim9Vim9ScriptArg Special
endif
" Current Syntax Variable: {{{2
@@ -1272,6 +1350,8 @@ let b:current_syntax = "vim"
" ---------------------------------------------------------------------
" Cleanup: {{{1
+delc Vim9
+delc VimL
delc VimFolda
delc VimFoldf
delc VimFoldh
diff --git a/runtime/syntax/glsl.vim b/runtime/syntax/glsl.vim
new file mode 100644
index 0000000..06ffcba
--- /dev/null
+++ b/runtime/syntax/glsl.vim
@@ -0,0 +1,752 @@
+" Language: OpenGL Shading Language
+" Maintainer: Gregory Anders <greg@gpanders.com>
+" Last Modified: 2024 Jul 21
+" Upstream: https://github.com/tikhomirov/vim-glsl
+
+if exists('b:current_syntax')
+ finish
+endif
+
+" Statements
+syn keyword glslConditional if else switch case default
+syn keyword glslRepeat for while do
+syn keyword glslStatement discard return break continue
+
+" Comments
+syn keyword glslTodo contained TODO FIXME XXX NOTE
+syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=glslTodo,@Spell
+syn region glslComment matchgroup=glslCommentStart start="/\*" end="\*/" extend contains=glslTodo,@Spell
+
+" Preprocessor
+syn region glslPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|else\|elif\|endif\)" skip="\\$" end="$" keepend
+syn region glslDefine start="^\s*#\s*\(define\|undef\)" skip="\\$" end="$" keepend
+syn keyword glslTokenConcat ##
+syn keyword glslPredefinedMacro __LINE__ __FILE__ __VERSION__ GL_ES
+syn region glslPreProc start="^\s*#\s*\(error\|pragma\|extension\|version\|line\)" skip="\\$" end="$" keepend
+syn region glslInclude start="^\s*#\s*include" skip="\\$" end="$" keepend
+
+" Folding Blocks
+syn region glslCurlyBlock start="{" end="}" transparent fold
+syn region glslParenBlock start="(" end=")" transparent fold
+
+" Boolean Constants
+syn keyword glslBoolean true false
+
+" Integer Numbers
+syn match glslDecimalInt display "\<\(0\|[1-9]\d*\)[uU]\?"
+syn match glslOctalInt display "\<0\o\+[uU]\?"
+syn match glslHexInt display "\<0[xX]\x\+[uU]\?"
+
+" Float Numbers
+syn match glslFloat display "\<\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
+syn match glslFloat display "\<\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
+syn match glslFloat display "\<\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\="
+syn match glslFloat display "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
+
+" Swizzles
+syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/
+syn match glslSwizzle display /\.[rgba]\{1,4\}\>/
+syn match glslSwizzle display /\.[stpq]\{1,4\}\>/
+
+" Structure
+syn keyword glslStructure struct nextgroup=glslIdentifier skipwhite skipempty
+
+syn match glslIdentifier contains=glslIdentifierPrime "\%([a-zA-Z_]\)\%([a-zA-Z0-9_]\)*" display contained
+
+" Types
+syn keyword glslType accelerationStructureEXT
+syn keyword glslType atomic_uint
+syn keyword glslType bool
+syn keyword glslType bvec2
+syn keyword glslType bvec3
+syn keyword glslType bvec4
+syn keyword glslType dmat2
+syn keyword glslType dmat2x2
+syn keyword glslType dmat2x3
+syn keyword glslType dmat2x4
+syn keyword glslType dmat3
+syn keyword glslType dmat3x2
+syn keyword glslType dmat3x3
+syn keyword glslType dmat3x4
+syn keyword glslType dmat4
+syn keyword glslType dmat4x2
+syn keyword glslType dmat4x3
+syn keyword glslType dmat4x4
+syn keyword glslType double
+syn keyword glslType dvec2
+syn keyword glslType dvec3
+syn keyword glslType dvec4
+syn keyword glslType float
+syn keyword glslType iimage1D
+syn keyword glslType iimage1DArray
+syn keyword glslType iimage2D
+syn keyword glslType iimage2DArray
+syn keyword glslType iimage2DMS
+syn keyword glslType iimage2DMSArray
+syn keyword glslType iimage2DRect
+syn keyword glslType iimage3D
+syn keyword glslType iimageBuffer
+syn keyword glslType iimageCube
+syn keyword glslType iimageCubeArray
+syn keyword glslType image1D
+syn keyword glslType image1DArray
+syn keyword glslType image2D
+syn keyword glslType image2DArray
+syn keyword glslType image2DMS
+syn keyword glslType image2DMSArray
+syn keyword glslType image2DRect
+syn keyword glslType image3D
+syn keyword glslType imageBuffer
+syn keyword glslType imageCube
+syn keyword glslType imageCubeArray
+syn keyword glslType int
+syn keyword glslType isampler1D
+syn keyword glslType isampler1DArray
+syn keyword glslType isampler2D
+syn keyword glslType isampler2DArray
+syn keyword glslType isampler2DMS
+syn keyword glslType isampler2DMSArray
+syn keyword glslType isampler2DRect
+syn keyword glslType isampler3D
+syn keyword glslType isamplerBuffer
+syn keyword glslType isamplerCube
+syn keyword glslType isamplerCubeArray
+syn keyword glslType ivec2
+syn keyword glslType ivec3
+syn keyword glslType ivec4
+syn keyword glslType mat2
+syn keyword glslType mat2x2
+syn keyword glslType mat2x3
+syn keyword glslType mat2x4
+syn keyword glslType mat3
+syn keyword glslType mat3x2
+syn keyword glslType mat3x3
+syn keyword glslType mat3x4
+syn keyword glslType mat4
+syn keyword glslType mat4x2
+syn keyword glslType mat4x3
+syn keyword glslType mat4x4
+syn keyword glslType rayQueryEXT
+syn keyword glslType sampler1D
+syn keyword glslType sampler1DArray
+syn keyword glslType sampler1DArrayShadow
+syn keyword glslType sampler1DShadow
+syn keyword glslType sampler2D
+syn keyword glslType sampler2DArray
+syn keyword glslType sampler2DArrayShadow
+syn keyword glslType sampler2DMS
+syn keyword glslType sampler2DMSArray
+syn keyword glslType sampler2DRect
+syn keyword glslType sampler2DRectShadow
+syn keyword glslType sampler2DShadow
+syn keyword glslType sampler3D
+syn keyword glslType samplerBuffer
+syn keyword glslType samplerCube
+syn keyword glslType samplerCubeArray
+syn keyword glslType samplerCubeArrayShadow
+syn keyword glslType samplerCubeShadow
+syn keyword glslType uimage1D
+syn keyword glslType uimage1DArray
+syn keyword glslType uimage2D
+syn keyword glslType uimage2DArray
+syn keyword glslType uimage2DMS
+syn keyword glslType uimage2DMSArray
+syn keyword glslType uimage2DRect
+syn keyword glslType uimage3D
+syn keyword glslType uimageBuffer
+syn keyword glslType uimageCube
+syn keyword glslType uimageCubeArray
+syn keyword glslType uint
+syn keyword glslType usampler1D
+syn keyword glslType usampler1DArray
+syn keyword glslType usampler2D
+syn keyword glslType usampler2DArray
+syn keyword glslType usampler2DMS
+syn keyword glslType usampler2DMSArray
+syn keyword glslType usampler2DRect
+syn keyword glslType usampler3D
+syn keyword glslType usamplerBuffer
+syn keyword glslType usamplerCube
+syn keyword glslType usamplerCubeArray
+syn keyword glslType uvec2
+syn keyword glslType uvec3
+syn keyword glslType uvec4
+syn keyword glslType vec2
+syn keyword glslType vec3
+syn keyword glslType vec4
+syn keyword glslType void
+
+" Qualifiers
+syn keyword glslQualifier align
+syn keyword glslQualifier attribute
+syn keyword glslQualifier binding
+syn keyword glslQualifier buffer
+syn keyword glslQualifier callableDataEXT
+syn keyword glslQualifier callableDataInEXT
+syn keyword glslQualifier ccw
+syn keyword glslQualifier centroid
+syn keyword glslQualifier centroid varying
+syn keyword glslQualifier coherent
+syn keyword glslQualifier column_major
+syn keyword glslQualifier const
+syn keyword glslQualifier cw
+syn keyword glslQualifier depth_any
+syn keyword glslQualifier depth_greater
+syn keyword glslQualifier depth_less
+syn keyword glslQualifier depth_unchanged
+syn keyword glslQualifier early_fragment_tests
+syn keyword glslQualifier equal_spacing
+syn keyword glslQualifier flat
+syn keyword glslQualifier fractional_even_spacing
+syn keyword glslQualifier fractional_odd_spacing
+syn keyword glslQualifier highp
+syn keyword glslQualifier hitAttributeEXT
+syn keyword glslQualifier in
+syn keyword glslQualifier index
+syn keyword glslQualifier inout
+syn keyword glslQualifier invariant
+syn keyword glslQualifier invocations
+syn keyword glslQualifier isolines
+syn keyword glslQualifier layout
+syn keyword glslQualifier line_strip
+syn keyword glslQualifier lines
+syn keyword glslQualifier lines_adjacency
+syn keyword glslQualifier local_size_x
+syn keyword glslQualifier local_size_y
+syn keyword glslQualifier local_size_z
+syn keyword glslQualifier location
+syn keyword glslQualifier lowp
+syn keyword glslQualifier max_vertices
+syn keyword glslQualifier mediump
+syn keyword glslQualifier nonuniformEXT
+syn keyword glslQualifier noperspective
+syn keyword glslQualifier offset
+syn keyword glslQualifier origin_upper_left
+syn keyword glslQualifier out
+syn keyword glslQualifier packed
+syn keyword glslQualifier patch
+syn keyword glslQualifier pixel_center_integer
+syn keyword glslQualifier point_mode
+syn keyword glslQualifier points
+syn keyword glslQualifier precise
+syn keyword glslQualifier precision
+syn keyword glslQualifier quads
+syn keyword glslQualifier r11f_g11f_b10f
+syn keyword glslQualifier r16
+syn keyword glslQualifier r16_snorm
+syn keyword glslQualifier r16f
+syn keyword glslQualifier r16i
+syn keyword glslQualifier r16ui
+syn keyword glslQualifier r32f
+syn keyword glslQualifier r32i
+syn keyword glslQualifier r32ui
+syn keyword glslQualifier r8
+syn keyword glslQualifier r8_snorm
+syn keyword glslQualifier r8i
+syn keyword glslQualifier r8ui
+syn keyword glslQualifier rayPayloadEXT
+syn keyword glslQualifier rayPayloadInEXT
+syn keyword glslQualifier readonly
+syn keyword glslQualifier restrict
+syn keyword glslQualifier rg16
+syn keyword glslQualifier rg16_snorm
+syn keyword glslQualifier rg16f
+syn keyword glslQualifier rg16i
+syn keyword glslQualifier rg16ui
+syn keyword glslQualifier rg32f
+syn keyword glslQualifier rg32i
+syn keyword glslQualifier rg32ui
+syn keyword glslQualifier rg8
+syn keyword glslQualifier rg8_snorm
+syn keyword glslQualifier rg8i
+syn keyword glslQualifier rg8ui
+syn keyword glslQualifier rgb10_a2
+syn keyword glslQualifier rgb10_a2ui
+syn keyword glslQualifier rgba16
+syn keyword glslQualifier rgba16_snorm
+syn keyword glslQualifier rgba16f
+syn keyword glslQualifier rgba16i
+syn keyword glslQualifier rgba16ui
+syn keyword glslQualifier rgba32f
+syn keyword glslQualifier rgba32i
+syn keyword glslQualifier rgba32ui
+syn keyword glslQualifier rgba8
+syn keyword glslQualifier rgba8_snorm
+syn keyword glslQualifier rgba8i
+syn keyword glslQualifier rgba8ui
+syn keyword glslQualifier row_major
+syn keyword glslQualifier sample
+syn keyword glslQualifier shaderRecordEXT
+syn keyword glslQualifier shared
+syn keyword glslQualifier smooth
+syn keyword glslQualifier std140
+syn keyword glslQualifier std430
+syn keyword glslQualifier stream
+syn keyword glslQualifier triangle_strip
+syn keyword glslQualifier triangles
+syn keyword glslQualifier triangles_adjacency
+syn keyword glslQualifier uniform
+syn keyword glslQualifier varying
+syn keyword glslQualifier vertices
+syn keyword glslQualifier volatile
+syn keyword glslQualifier writeonly
+syn keyword glslQualifier xfb_buffer
+syn keyword glslQualifier xfb_offset
+syn keyword glslQualifier xfb_stride
+
+" Built-in Constants
+syn keyword glslBuiltinConstant gl_CullDistance
+syn keyword glslBuiltinConstant gl_HitKindBackFacingTriangleEXT
+syn keyword glslBuiltinConstant gl_HitKindFrontFacingTriangleEXT
+syn keyword glslBuiltinConstant gl_MaxAtomicCounterBindings
+syn keyword glslBuiltinConstant gl_MaxAtomicCounterBufferSize
+syn keyword glslBuiltinConstant gl_MaxClipDistances
+syn keyword glslBuiltinConstant gl_MaxClipPlanes
+syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxCombinedClipAndCullDistances
+syn keyword glslBuiltinConstant gl_MaxCombinedImageUniforms
+syn keyword glslBuiltinConstant gl_MaxCombinedImageUnitsAndFragmentOutputs
+syn keyword glslBuiltinConstant gl_MaxCombinedShaderOutputResources
+syn keyword glslBuiltinConstant gl_MaxCombinedTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxComputeImageUniforms
+syn keyword glslBuiltinConstant gl_MaxComputeTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxComputeUniformComponents
+syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupCount
+syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupSize
+syn keyword glslBuiltinConstant gl_MaxCullDistances
+syn keyword glslBuiltinConstant gl_MaxDrawBuffers
+syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxFragmentImageUniforms
+syn keyword glslBuiltinConstant gl_MaxFragmentInputComponents
+syn keyword glslBuiltinConstant gl_MaxFragmentInputVectors
+syn keyword glslBuiltinConstant gl_MaxFragmentUniformComponents
+syn keyword glslBuiltinConstant gl_MaxFragmentUniformVectors
+syn keyword glslBuiltinConstant gl_MaxGeometryAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxGeometryAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxGeometryImageUniforms
+syn keyword glslBuiltinConstant gl_MaxGeometryInputComponents
+syn keyword glslBuiltinConstant gl_MaxGeometryOutputComponents
+syn keyword glslBuiltinConstant gl_MaxGeometryOutputVertices
+syn keyword glslBuiltinConstant gl_MaxGeometryTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxGeometryTotalOutputComponents
+syn keyword glslBuiltinConstant gl_MaxGeometryUniformComponents
+syn keyword glslBuiltinConstant gl_MaxGeometryVaryingComponents
+syn keyword glslBuiltinConstant gl_MaxImageSamples
+syn keyword glslBuiltinConstant gl_MaxImageUnits
+syn keyword glslBuiltinConstant gl_MaxLights
+syn keyword glslBuiltinConstant gl_MaxPatchVertices
+syn keyword glslBuiltinConstant gl_MaxProgramTexelOffset
+syn keyword glslBuiltinConstant gl_MaxSamples
+syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxTessControlImageUniforms
+syn keyword glslBuiltinConstant gl_MaxTessControlInputComponents
+syn keyword glslBuiltinConstant gl_MaxTessControlOutputComponents
+syn keyword glslBuiltinConstant gl_MaxTessControlTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxTessControlTotalOutputComponents
+syn keyword glslBuiltinConstant gl_MaxTessControlUniformComponents
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationImageUniforms
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationInputComponents
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationOutputComponents
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationUniformComponents
+syn keyword glslBuiltinConstant gl_MaxTessGenLevel
+syn keyword glslBuiltinConstant gl_MaxTessPatchComponents
+syn keyword glslBuiltinConstant gl_MaxTextureCoords
+syn keyword glslBuiltinConstant gl_MaxTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxTextureUnits
+syn keyword glslBuiltinConstant gl_MaxTransformFeedbackBuffers
+syn keyword glslBuiltinConstant gl_MaxTransformFeedbackInterleavedComponents
+syn keyword glslBuiltinConstant gl_MaxVaryingComponents
+syn keyword glslBuiltinConstant gl_MaxVaryingFloats
+syn keyword glslBuiltinConstant gl_MaxVaryingVectors
+syn keyword glslBuiltinConstant gl_MaxVertexAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxVertexAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxVertexAttribs
+syn keyword glslBuiltinConstant gl_MaxVertexImageUniforms
+syn keyword glslBuiltinConstant gl_MaxVertexOutputComponents
+syn keyword glslBuiltinConstant gl_MaxVertexOutputVectors
+syn keyword glslBuiltinConstant gl_MaxVertexTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxVertexUniformComponents
+syn keyword glslBuiltinConstant gl_MaxVertexUniformVectors
+syn keyword glslBuiltinConstant gl_MaxViewports
+syn keyword glslBuiltinConstant gl_MinProgramTexelOffset
+syn keyword glslBuiltinConstant gl_RayFlagsCullBackFacingTrianglesEXT
+syn keyword glslBuiltinConstant gl_RayFlagsCullFrontFacingTrianglesEXT
+syn keyword glslBuiltinConstant gl_RayFlagsCullNoOpaqueEXT
+syn keyword glslBuiltinConstant gl_RayFlagsCullOpaqueEXT
+syn keyword glslBuiltinConstant gl_RayFlagsNoOpaqueEXT
+syn keyword glslBuiltinConstant gl_RayFlagsNoneEXT
+syn keyword glslBuiltinConstant gl_RayFlagsOpaqueEXT
+syn keyword glslBuiltinConstant gl_RayFlagsSkipClosestHitShaderEXT
+syn keyword glslBuiltinConstant gl_RayFlagsTerminateOnFirstHitEXT
+syn keyword glslBuiltinConstant gl_RayQueryCandidateIntersectionAABBEXT
+syn keyword glslBuiltinConstant gl_RayQueryCandidateIntersectionTriangleEXT
+syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionGeneratedEXT
+syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionNoneEXT
+syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionTriangleEXT
+
+" Built-in Variables
+syn keyword glslBuiltinVariable gl_BackColor
+syn keyword glslBuiltinVariable gl_BackLightModelProduct
+syn keyword glslBuiltinVariable gl_BackLightProduct
+syn keyword glslBuiltinVariable gl_BackLightProduct
+syn keyword glslBuiltinVariable gl_BackMaterial
+syn keyword glslBuiltinVariable gl_BackSecondaryColor
+syn keyword glslBuiltinVariable gl_ClipDistance
+syn keyword glslBuiltinVariable gl_ClipPlane
+syn keyword glslBuiltinVariable gl_ClipVertex
+syn keyword glslBuiltinVariable gl_Color
+syn keyword glslBuiltinVariable gl_DepthRange
+syn keyword glslBuiltinVariable gl_EyePlaneQ
+syn keyword glslBuiltinVariable gl_EyePlaneR
+syn keyword glslBuiltinVariable gl_EyePlaneS
+syn keyword glslBuiltinVariable gl_EyePlaneT
+syn keyword glslBuiltinVariable gl_Fog
+syn keyword glslBuiltinVariable gl_FogCoord
+syn keyword glslBuiltinVariable gl_FogFragCoord
+syn keyword glslBuiltinVariable gl_FragColor
+syn keyword glslBuiltinVariable gl_FragCoord
+syn keyword glslBuiltinVariable gl_FragData
+syn keyword glslBuiltinVariable gl_FragDepth
+syn keyword glslBuiltinVariable gl_FrontColor
+syn keyword glslBuiltinVariable gl_FrontFacing
+syn keyword glslBuiltinVariable gl_FrontLightModelProduct
+syn keyword glslBuiltinVariable gl_FrontLightProduct
+syn keyword glslBuiltinVariable gl_FrontMaterial
+syn keyword glslBuiltinVariable gl_FrontSecondaryColor
+syn keyword glslBuiltinVariable gl_GeometryIndexEXT
+syn keyword glslBuiltinVariable gl_GlobalInvocationID
+syn keyword glslBuiltinVariable gl_HelperInvocation
+syn keyword glslBuiltinVariable gl_HitKindEXT
+syn keyword glslBuiltinVariable gl_HitTEXT
+syn keyword glslBuiltinVariable gl_IncomingRayFlagsEXT
+syn keyword glslBuiltinVariable gl_InstanceCustomIndexEXT
+syn keyword glslBuiltinVariable gl_InstanceID
+syn keyword glslBuiltinVariable gl_InstanceID
+syn keyword glslBuiltinVariable gl_InvocationID
+syn keyword glslBuiltinVariable gl_LaunchIDEXT
+syn keyword glslBuiltinVariable gl_LaunchSizeEXT
+syn keyword glslBuiltinVariable gl_Layer
+syn keyword glslBuiltinVariable gl_LightModel
+syn keyword glslBuiltinVariable gl_LightSource
+syn keyword glslBuiltinVariable gl_LocalInvocationID
+syn keyword glslBuiltinVariable gl_LocalInvocationIndex
+syn keyword glslBuiltinVariable gl_ModelViewMatrix
+syn keyword glslBuiltinVariable gl_ModelViewMatrixInverse
+syn keyword glslBuiltinVariable gl_ModelViewMatrixInverseTranspose
+syn keyword glslBuiltinVariable gl_ModelViewMatrixTranspose
+syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrix
+syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixInverse
+syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixInverseTranspose
+syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixTranspose
+syn keyword glslBuiltinVariable gl_MultiTexCoord0
+syn keyword glslBuiltinVariable gl_MultiTexCoord1
+syn keyword glslBuiltinVariable gl_MultiTexCoord2
+syn keyword glslBuiltinVariable gl_MultiTexCoord3
+syn keyword glslBuiltinVariable gl_MultiTexCoord4
+syn keyword glslBuiltinVariable gl_MultiTexCoord5
+syn keyword glslBuiltinVariable gl_MultiTexCoord6
+syn keyword glslBuiltinVariable gl_MultiTexCoord7
+syn keyword glslBuiltinVariable gl_Normal
+syn keyword glslBuiltinVariable gl_NormalMatrix
+syn keyword glslBuiltinVariable gl_NormalScale
+syn keyword glslBuiltinVariable gl_NumSamples
+syn keyword glslBuiltinVariable gl_NumWorkGroups
+syn keyword glslBuiltinVariable gl_ObjectPlaneQ
+syn keyword glslBuiltinVariable gl_ObjectPlaneR
+syn keyword glslBuiltinVariable gl_ObjectPlaneS
+syn keyword glslBuiltinVariable gl_ObjectPlaneT
+syn keyword glslBuiltinVariable gl_ObjectRayDirectionEXT
+syn keyword glslBuiltinVariable gl_ObjectRayOriginEXT
+syn keyword glslBuiltinVariable gl_ObjectToWorld3x4EXT
+syn keyword glslBuiltinVariable gl_ObjectToWorldEXT
+syn keyword glslBuiltinVariable gl_PatchVerticesIn
+syn keyword glslBuiltinVariable gl_Point
+syn keyword glslBuiltinVariable gl_PointCoord
+syn keyword glslBuiltinVariable gl_PointSize
+syn keyword glslBuiltinVariable gl_Position
+syn keyword glslBuiltinVariable gl_PrimitiveID
+syn keyword glslBuiltinVariable gl_PrimitiveID
+syn keyword glslBuiltinVariable gl_PrimitiveIDIn
+syn keyword glslBuiltinVariable gl_ProjectionMatrix
+syn keyword glslBuiltinVariable gl_ProjectionMatrixInverse
+syn keyword glslBuiltinVariable gl_ProjectionMatrixInverseTranspose
+syn keyword glslBuiltinVariable gl_ProjectionMatrixTranspose
+syn keyword glslBuiltinVariable gl_RayTmaxEXT
+syn keyword glslBuiltinVariable gl_RayTminEXT
+syn keyword glslBuiltinVariable gl_SampleID
+syn keyword glslBuiltinVariable gl_SampleMask
+syn keyword glslBuiltinVariable gl_SampleMaskIn
+syn keyword glslBuiltinVariable gl_SamplePosition
+syn keyword glslBuiltinVariable gl_SecondaryColor
+syn keyword glslBuiltinVariable gl_TessCoord
+syn keyword glslBuiltinVariable gl_TessLevelInner
+syn keyword glslBuiltinVariable gl_TessLevelOuter
+syn keyword glslBuiltinVariable gl_TexCoord
+syn keyword glslBuiltinVariable gl_TextureEnvColor
+syn keyword glslBuiltinVariable gl_TextureMatrix
+syn keyword glslBuiltinVariable gl_TextureMatrixInverse
+syn keyword glslBuiltinVariable gl_TextureMatrixInverseTranspose
+syn keyword glslBuiltinVariable gl_TextureMatrixTranspose
+syn keyword glslBuiltinVariable gl_Vertex
+syn keyword glslBuiltinVariable gl_VertexID
+syn keyword glslBuiltinVariable gl_VertexIndex
+syn keyword glslBuiltinVariable gl_ViewportIndex
+syn keyword glslBuiltinVariable gl_WorkGroupID
+syn keyword glslBuiltinVariable gl_WorkGroupSize
+syn keyword glslBuiltinVariable gl_WorldRayDirectionEXT
+syn keyword glslBuiltinVariable gl_WorldRayOriginEXT
+syn keyword glslBuiltinVariable gl_WorldToObject3x4EXT
+syn keyword glslBuiltinVariable gl_WorldToObjectEXT
+syn keyword glslBuiltinVariable gl_in
+syn keyword glslBuiltinVariable gl_out
+
+" Built-in Functions
+syn keyword glslBuiltinFunction EmitStreamVertex
+syn keyword glslBuiltinFunction EmitVertex
+syn keyword glslBuiltinFunction EndPrimitive
+syn keyword glslBuiltinFunction EndStreamPrimitive
+syn keyword glslBuiltinFunction abs
+syn keyword glslBuiltinFunction acos
+syn keyword glslBuiltinFunction acosh
+syn keyword glslBuiltinFunction all
+syn keyword glslBuiltinFunction any
+syn keyword glslBuiltinFunction asin
+syn keyword glslBuiltinFunction asinh
+syn keyword glslBuiltinFunction atan
+syn keyword glslBuiltinFunction atanh
+syn keyword glslBuiltinFunction atomicAdd
+syn keyword glslBuiltinFunction atomicAnd
+syn keyword glslBuiltinFunction atomicCompSwap
+syn keyword glslBuiltinFunction atomicCounter
+syn keyword glslBuiltinFunction atomicCounterDecrement
+syn keyword glslBuiltinFunction atomicCounterIncrement
+syn keyword glslBuiltinFunction atomicExchange
+syn keyword glslBuiltinFunction atomicMax
+syn keyword glslBuiltinFunction atomicMin
+syn keyword glslBuiltinFunction atomicOr
+syn keyword glslBuiltinFunction atomicXor
+syn keyword glslBuiltinFunction barrier
+syn keyword glslBuiltinFunction bitCount
+syn keyword glslBuiltinFunction bitfieldExtract
+syn keyword glslBuiltinFunction bitfieldInsert
+syn keyword glslBuiltinFunction bitfieldReverse
+syn keyword glslBuiltinFunction ceil
+syn keyword glslBuiltinFunction clamp
+syn keyword glslBuiltinFunction cos
+syn keyword glslBuiltinFunction cosh
+syn keyword glslBuiltinFunction cross
+syn keyword glslBuiltinFunction dFdx
+syn keyword glslBuiltinFunction dFdxCoarse
+syn keyword glslBuiltinFunction dFdxFine
+syn keyword glslBuiltinFunction dFdy
+syn keyword glslBuiltinFunction dFdyCoarse
+syn keyword glslBuiltinFunction dFdyFine
+syn keyword glslBuiltinFunction degrees
+syn keyword glslBuiltinFunction determinant
+syn keyword glslBuiltinFunction distance
+syn keyword glslBuiltinFunction dot
+syn keyword glslBuiltinFunction equal
+syn keyword glslBuiltinFunction executeCallableEXT
+syn keyword glslBuiltinFunction exp
+syn keyword glslBuiltinFunction exp2
+syn keyword glslBuiltinFunction faceforward
+syn keyword glslBuiltinFunction findLSB
+syn keyword glslBuiltinFunction findMSB
+syn keyword glslBuiltinFunction floatBitsToInt
+syn keyword glslBuiltinFunction floatBitsToUint
+syn keyword glslBuiltinFunction floor
+syn keyword glslBuiltinFunction fma
+syn keyword glslBuiltinFunction fract
+syn keyword glslBuiltinFunction frexp
+syn keyword glslBuiltinFunction ftransform
+syn keyword glslBuiltinFunction fwidth
+syn keyword glslBuiltinFunction fwidthCoarse
+syn keyword glslBuiltinFunction fwidthFine
+syn keyword glslBuiltinFunction greaterThan
+syn keyword glslBuiltinFunction greaterThanEqual
+syn keyword glslBuiltinFunction groupMemoryBarrier
+syn keyword glslBuiltinFunction ignoreIntersectionEXT
+syn keyword glslBuiltinFunction imageAtomicAdd
+syn keyword glslBuiltinFunction imageAtomicAnd
+syn keyword glslBuiltinFunction imageAtomicCompSwap
+syn keyword glslBuiltinFunction imageAtomicExchange
+syn keyword glslBuiltinFunction imageAtomicMax
+syn keyword glslBuiltinFunction imageAtomicMin
+syn keyword glslBuiltinFunction imageAtomicOr
+syn keyword glslBuiltinFunction imageAtomicXor
+syn keyword glslBuiltinFunction imageLoad
+syn keyword glslBuiltinFunction imageSize
+syn keyword glslBuiltinFunction imageStore
+syn keyword glslBuiltinFunction imulExtended
+syn keyword glslBuiltinFunction intBitsToFloat
+syn keyword glslBuiltinFunction interpolateAtCentroid
+syn keyword glslBuiltinFunction interpolateAtOffset
+syn keyword glslBuiltinFunction interpolateAtSample
+syn keyword glslBuiltinFunction inverse
+syn keyword glslBuiltinFunction inversesqrt
+syn keyword glslBuiltinFunction isinf
+syn keyword glslBuiltinFunction isnan
+syn keyword glslBuiltinFunction ldexp
+syn keyword glslBuiltinFunction length
+syn keyword glslBuiltinFunction lessThan
+syn keyword glslBuiltinFunction lessThanEqual
+syn keyword glslBuiltinFunction log
+syn keyword glslBuiltinFunction log2
+syn keyword glslBuiltinFunction matrixCompMult
+syn keyword glslBuiltinFunction max
+syn keyword glslBuiltinFunction memoryBarrier
+syn keyword glslBuiltinFunction memoryBarrierAtomicCounter
+syn keyword glslBuiltinFunction memoryBarrierBuffer
+syn keyword glslBuiltinFunction memoryBarrierImage
+syn keyword glslBuiltinFunction memoryBarrierShared
+syn keyword glslBuiltinFunction min
+syn keyword glslBuiltinFunction mix
+syn keyword glslBuiltinFunction mod
+syn keyword glslBuiltinFunction modf
+syn keyword glslBuiltinFunction noise1
+syn keyword glslBuiltinFunction noise2
+syn keyword glslBuiltinFunction noise3
+syn keyword glslBuiltinFunction noise4
+syn keyword glslBuiltinFunction normalize
+syn keyword glslBuiltinFunction not
+syn keyword glslBuiltinFunction notEqual
+syn keyword glslBuiltinFunction outerProduct
+syn keyword glslBuiltinFunction packDouble2x32
+syn keyword glslBuiltinFunction packHalf2x16
+syn keyword glslBuiltinFunction packSnorm2x16
+syn keyword glslBuiltinFunction packSnorm4x8
+syn keyword glslBuiltinFunction packUnorm2x16
+syn keyword glslBuiltinFunction packUnorm4x8
+syn keyword glslBuiltinFunction pow
+syn keyword glslBuiltinFunction radians
+syn keyword glslBuiltinFunction rayQueryConfirmIntersectionEXT
+syn keyword glslBuiltinFunction rayQueryGenerateIntersectionEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionBarycentricsEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionCandidateAABBOpaqueEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionFrontFaceEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionGeometryIndexEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceCustomIndexEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceIdEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectRayDirectionEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectRayOriginEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectToWorldEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionPrimitiveIndexEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionTEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionTypeEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionWorldToObjectEXT
+syn keyword glslBuiltinFunction rayQueryGetRayFlagsEXT
+syn keyword glslBuiltinFunction rayQueryGetRayTMinEXT
+syn keyword glslBuiltinFunction rayQueryGetWorldRayDirectionEXT
+syn keyword glslBuiltinFunction rayQueryGetWorldRayOriginEXT
+syn keyword glslBuiltinFunction rayQueryInitializeEXT
+syn keyword glslBuiltinFunction rayQueryProceedEXT
+syn keyword glslBuiltinFunction rayQueryTerminateEXT
+syn keyword glslBuiltinFunction reflect
+syn keyword glslBuiltinFunction refract
+syn keyword glslBuiltinFunction reportIntersectionEXT
+syn keyword glslBuiltinFunction round
+syn keyword glslBuiltinFunction roundEven
+syn keyword glslBuiltinFunction shadow1D
+syn keyword glslBuiltinFunction shadow1DLod
+syn keyword glslBuiltinFunction shadow1DProj
+syn keyword glslBuiltinFunction shadow1DProjLod
+syn keyword glslBuiltinFunction shadow2D
+syn keyword glslBuiltinFunction shadow2DLod
+syn keyword glslBuiltinFunction shadow2DProj
+syn keyword glslBuiltinFunction shadow2DProjLod
+syn keyword glslBuiltinFunction sign
+syn keyword glslBuiltinFunction sin
+syn keyword glslBuiltinFunction sinh
+syn keyword glslBuiltinFunction smoothstep
+syn keyword glslBuiltinFunction sqrt
+syn keyword glslBuiltinFunction step
+syn keyword glslBuiltinFunction tan
+syn keyword glslBuiltinFunction tanh
+syn keyword glslBuiltinFunction terminateRayEXT
+syn keyword glslBuiltinFunction texelFetch
+syn keyword glslBuiltinFunction texelFetchOffset
+syn keyword glslBuiltinFunction texture
+syn keyword glslBuiltinFunction texture1D
+syn keyword glslBuiltinFunction texture1DLod
+syn keyword glslBuiltinFunction texture1DProj
+syn keyword glslBuiltinFunction texture1DProjLod
+syn keyword glslBuiltinFunction texture2D
+syn keyword glslBuiltinFunction texture2DLod
+syn keyword glslBuiltinFunction texture2DProj
+syn keyword glslBuiltinFunction texture2DProjLod
+syn keyword glslBuiltinFunction texture3D
+syn keyword glslBuiltinFunction texture3DLod
+syn keyword glslBuiltinFunction texture3DProj
+syn keyword glslBuiltinFunction texture3DProjLod
+syn keyword glslBuiltinFunction textureCube
+syn keyword glslBuiltinFunction textureCubeLod
+syn keyword glslBuiltinFunction textureGather
+syn keyword glslBuiltinFunction textureGatherOffset
+syn keyword glslBuiltinFunction textureGatherOffsets
+syn keyword glslBuiltinFunction textureGrad
+syn keyword glslBuiltinFunction textureGradOffset
+syn keyword glslBuiltinFunction textureLod
+syn keyword glslBuiltinFunction textureLodOffset
+syn keyword glslBuiltinFunction textureOffset
+syn keyword glslBuiltinFunction textureProj
+syn keyword glslBuiltinFunction textureProjGrad
+syn keyword glslBuiltinFunction textureProjGradOffset
+syn keyword glslBuiltinFunction textureProjLod
+syn keyword glslBuiltinFunction textureProjLodOffset
+syn keyword glslBuiltinFunction textureProjOffset
+syn keyword glslBuiltinFunction textureQueryLevels
+syn keyword glslBuiltinFunction textureQueryLod
+syn keyword glslBuiltinFunction textureSize
+syn keyword glslBuiltinFunction traceRayEXT
+syn keyword glslBuiltinFunction transpose
+syn keyword glslBuiltinFunction trunc
+syn keyword glslBuiltinFunction uaddCarry
+syn keyword glslBuiltinFunction uintBitsToFloat
+syn keyword glslBuiltinFunction umulExtended
+syn keyword glslBuiltinFunction unpackDouble2x32
+syn keyword glslBuiltinFunction unpackHalf2x16
+syn keyword glslBuiltinFunction unpackSnorm2x16
+syn keyword glslBuiltinFunction unpackSnorm4x8
+syn keyword glslBuiltinFunction unpackUnorm2x16
+syn keyword glslBuiltinFunction unpackUnorm4x8
+syn keyword glslBuiltinFunction usubBorrow
+
+hi def link glslConditional Conditional
+hi def link glslRepeat Repeat
+hi def link glslStatement Statement
+hi def link glslTodo Todo
+hi def link glslCommentL glslComment
+hi def link glslCommentStart glslComment
+hi def link glslComment Comment
+hi def link glslPreCondit PreCondit
+hi def link glslDefine Define
+hi def link glslTokenConcat glslPreProc
+hi def link glslPredefinedMacro Macro
+hi def link glslPreProc PreProc
+hi def link glslInclude Include
+hi def link glslBoolean Boolean
+hi def link glslDecimalInt glslInteger
+hi def link glslOctalInt glslInteger
+hi def link glslHexInt glslInteger
+hi def link glslInteger Number
+hi def link glslFloat Float
+hi def link glslIdentifierPrime glslIdentifier
+hi def link glslIdentifier Identifier
+hi def link glslStructure Structure
+hi def link glslType Type
+hi def link glslQualifier StorageClass
+hi def link glslBuiltinConstant Constant
+hi def link glslBuiltinFunction Function
+hi def link glslBuiltinVariable Identifier
+hi def link glslSwizzle Identifier
+
+let b:current_syntax = 'glsl'
diff --git a/runtime/syntax/goaccess.vim b/runtime/syntax/goaccess.vim
new file mode 100644
index 0000000..4ca8f6d
--- /dev/null
+++ b/runtime/syntax/goaccess.vim
@@ -0,0 +1,34 @@
+" Vim syntax file
+" Language: GoAccess configuration
+" Maintainer: Adam Monsen <haircut@gmail.com>
+" Last Change: 2024 Aug 1
+" Remark: see https://goaccess.io/man#configuration
+"
+" The GoAccess configuration file syntax is line-separated settings. Settings
+" are space-separated key value pairs. Comments are any line starting with a
+" hash mark.
+" Example: https://github.com/allinurl/goaccess/blob/master/config/goaccess.conf
+"
+" This syntax definition supports todo/fixme highlighting in comments, and
+" special (Keyword) highlighting if a setting's value is 'true' or 'false'.
+"
+" TODO: a value is required, so use extreme highlighting (e.g. bright red
+" background) if a setting is missing a value.
+
+if exists("b:current_syntax")
+ finish
+endif
+
+syn match goaccessSettingName '^[a-z-]\+' nextgroup=goaccessSettingValue
+syn match goaccessSettingValue '\s\+.\+$' contains=goaccessKeyword
+syn match goaccessComment "^#.*$" contains=goaccessTodo,@Spell
+syn keyword goaccessTodo TODO FIXME contained
+syn keyword goaccessKeyword true false contained
+
+hi def link goaccessSettingName Type
+hi def link goaccessSettingValue String
+hi def link goaccessComment Comment
+hi def link goaccessTodo Todo
+hi def link goaccessKeyword Keyword
+
+let b:current_syntax = "goaccess"
diff --git a/runtime/syntax/html.vim b/runtime/syntax/html.vim
index d067dde..ca7c7f1 100644
--- a/runtime/syntax/html.vim
+++ b/runtime/syntax/html.vim
@@ -4,6 +4,7 @@
" Previous Maintainers: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
" Claudio Fleiner <claudio@fleiner.com>
" Last Change: 2023 Nov 28
+" 2024 Jul 30 by Vim Project: increase syn-sync-minlines to 250
" See :help html.vim for some comments and a description of the options
@@ -320,7 +321,7 @@ if main_syntax == "html"
syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
syn sync match htmlHighlight groupthere javaScript "<script"
syn sync match htmlHighlightSkip "^.*['\"].*$"
- syn sync minlines=10
+ exe "syn sync minlines=" . get(g:, 'html_minlines', 250)
endif
" Folding
diff --git a/runtime/syntax/htmlangular.vim b/runtime/syntax/htmlangular.vim
new file mode 100644
index 0000000..021e61f
--- /dev/null
+++ b/runtime/syntax/htmlangular.vim
@@ -0,0 +1,18 @@
+" Vim syntax file
+" Language: Angular HTML template
+" Maintainer: Dennis van den Berg <dennis@vdberg.dev>
+" Last Change: 2024 Aug 22
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+if !exists("main_syntax")
+ let main_syntax = 'html'
+endif
+
+runtime! syntax/html.vim
+unlet b:current_syntax
+
+let b:current_syntax = "htmlangular"
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index 6f64bdc..51ef839 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -3,17 +3,17 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Repository: https://github.com/zzzyxwvut/java-vim.git
-" Last Change: 2024 Jun 15
+" Last Change: 2024 Aug 22
" Please check :help java.vim for comments on some of the options available.
" quit when a syntax file was already loaded
-if !exists("main_syntax")
+if !exists("g:main_syntax")
if exists("b:current_syntax")
finish
endif
" we define it here so that included files can test for it
- let main_syntax='java'
+ let g:main_syntax = 'java'
endif
let s:cpo_save = &cpo
@@ -39,17 +39,27 @@ else
endfunction
endif
-function! JavaSyntaxFoldTextExpr() abort
- return getline(v:foldstart) !~ '/\*\+\s*$'
- \ ? foldtext()
- \ : printf('+-%s%3d lines: ',
- \ v:folddashes,
- \ (v:foldend - v:foldstart + 1)) .
- \ getline(v:foldstart + 1)
-endfunction
+if exists("g:java_foldtext_show_first_or_second_line")
+ function! s:LazyPrefix(prefix, dashes, count) abort
+ return empty(a:prefix)
+ \ ? printf('+-%s%3d lines: ', a:dashes, a:count)
+ \ : a:prefix
+ endfunction
-" E120 for "fdt=s:JavaSyntaxFoldTextExpr()" before v8.2.3900.
-setlocal foldtext=JavaSyntaxFoldTextExpr()
+ function! JavaSyntaxFoldTextExpr() abort
+ " Piggyback on NGETTEXT.
+ let summary = foldtext()
+ return getline(v:foldstart) !~ '/\*\+\s*$'
+ \ ? summary
+ \ : s:LazyPrefix(matchstr(summary, '^+-\+\s*\d\+\s.\{-1,}:\s'),
+ \ v:folddashes,
+ \ (v:foldend - v:foldstart + 1)) .
+ \ getline(v:foldstart + 1)
+ endfunction
+
+ " E120 for "fdt=s:JavaSyntaxFoldTextExpr()" before v8.2.3900.
+ setlocal foldtext=JavaSyntaxFoldTextExpr()
+endif
" Admit the ASCII dollar sign to keyword characters (JLS-17, §3.8):
try
@@ -65,7 +75,6 @@ syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
" use separate name so that it can be deleted in javacc.vim
syn match javaError2 "#\|=<"
-hi def link javaError2 javaError
" Keywords (JLS-17, §3.9):
syn keyword javaExternal native package
@@ -87,18 +96,18 @@ syn match javaOperator "\<var\>\%(\s*(\)\@!"
" if necessary, on the line before that (h: \@<=), trying to match
" neither a method reference nor a qualified method invocation.
try
- syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@80<!\<yield\>"
+ syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@80<!\<yield\>"
let s:ff.Peek = s:ff.LeftConstant
catch /\<E59:/
call s:ReportOnce(v:exception)
- syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@<!\<yield\>"
+ syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@<!\<yield\>"
let s:ff.Peek = s:ff.RightConstant
endtry
syn keyword javaType boolean char byte short int long float double
syn keyword javaType void
syn keyword javaStatement return
-syn keyword javaStorageClass static synchronized transient volatile strictfp serializable
+syn keyword javaStorageClass static synchronized transient volatile strictfp
syn keyword javaExceptions throw try catch finally
syn keyword javaAssert assert
syn keyword javaMethodDecl throws
@@ -113,7 +122,7 @@ syn match javaAnnotation "@\%(\K\k*\.\)*\K\k*\>"
syn region javaAnnotation transparent matchgroup=javaAnnotationStart start=/@\%(\K\k*\.\)*\K\k*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=javaAnnotation,javaParenT,javaBlock,javaString,javaBoolean,javaNumber,javaTypedef,javaComment,javaLineComment
syn match javaClassDecl "@interface\>"
syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
-syn match javaUserLabelRef "\k\+" contained
+syn match javaUserLabelRef contained "\k\+"
syn match javaVarArg "\.\.\."
syn keyword javaScopeDecl public protected private
syn keyword javaConceptKind abstract final
@@ -121,15 +130,6 @@ syn match javaConceptKind "\<non-sealed\>"
syn match javaConceptKind "\<sealed\>\%(\s*(\)\@!"
syn match javaConceptKind "\<default\>\%(\s*\%(:\|->\)\)\@!"
-" Note that a "module-info" file will be recognised with an arbitrary
-" file extension (or no extension at all) so that more than one such
-" declaration for the same Java module can be maintained for modular
-" testing in a project without attendant confusion for IDEs, with the
-" ".java\=" extension used for a production version and an arbitrary
-" extension used for a testing version.
-let s:module_info_cur_buf = fnamemodify(bufname("%"), ":t") =~ '^module-info\%(\.class\>\)\@!'
-lockvar s:module_info_cur_buf
-
if !(v:version < 704)
" Request the new regexp engine for [:upper:] and [:lower:].
let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.LeftConstant], 3)
@@ -139,17 +139,57 @@ else
let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.RightConstant], 3)
endif
-" Java modules (since Java 9, for "module-info.java" file).
-if s:module_info_cur_buf
+if exists("g:java_highlight_signature")
+ let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.LeftConstant], 3)
+else
+ let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.RightConstant], 3)
+endif
+
+" Java module declarations (JLS-17, §7.7).
+"
+" Note that a "module-info" file will be recognised with an arbitrary
+" file extension (or no extension at all) so that more than one such
+" declaration for the same Java module can be maintained for modular
+" testing in a project without attendant confusion for IDEs, with the
+" ".java\=" extension used for a production version and an arbitrary
+" extension used for a testing version.
+if fnamemodify(bufname("%"), ":t") =~ '^module-info\%(\.class\>\)\@!'
syn keyword javaModuleStorageClass module transitive
syn keyword javaModuleStmt open requires exports opens uses provides
syn keyword javaModuleExternal to with
+ hi def link javaModuleStorageClass StorageClass
+ hi def link javaModuleStmt Statement
+ hi def link javaModuleExternal Include
+endif
+
+" Fancy parameterised types (JLS-17, §4.5).
+"
+" Note that false positives may elsewhere occur whenever an identifier
+" is butted against a less-than operator. Cf. (X<Y) and (X < Y).
+if exists("g:java_highlight_generics")
+ syn keyword javaWildcardBound contained extends super
+
+ " Parameterised types are delegated to javaGenerics (s:ctx.gsg) and
+ " are not matched with javaTypeArgument.
+ exec 'syn match javaTypeArgument contained "' . s:ff.Engine('\%#=2', '') . '?\|\%(\<\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\)\[\]\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\)\%(\[\]\)*"'
+
+ for s:ctx in [{'dsg': 'javaDimExpr', 'gsg': 'javaGenerics', 'ghg': 'javaGenericsC1', 'csg': 'javaGenericsX', 'c': ''},
+ \ {'dsg': 'javaDimExprX', 'gsg': 'javaGenericsX', 'ghg': 'javaGenericsC2', 'csg': 'javaGenerics', 'c': ' contained'}]
+ " Consider array creation expressions of reifiable types.
+ exec 'syn region ' . s:ctx.dsg . ' contained transparent matchgroup=' . s:ctx.ghg . ' start="\[" end="\]" nextgroup=' . s:ctx.dsg . ' skipwhite skipnl'
+ exec 'syn region ' . s:ctx.gsg . s:ctx.c . ' transparent matchgroup=' . s:ctx.ghg . ' start=/' . s:ff.Engine('\%#=2', '') . '\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\><\%([[:space:]\n]*\%([?@]\|\<\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\)\[\]\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\)\)\@=/ end=/>/ contains=' . s:ctx.csg . ',javaAnnotation,javaTypeArgument,javaWildcardBound,javaType,@javaClasses nextgroup=' . s:ctx.dsg . ' skipwhite skipnl'
+ endfor
+
+ unlet s:ctx
+ hi def link javaWildcardBound Question
+ hi def link javaGenericsC1 Function
+ hi def link javaGenericsC2 Type
endif
-if exists("java_highlight_java_lang_ids")
- let java_highlight_all=1
+if exists("g:java_highlight_java_lang_ids")
+ let g:java_highlight_all = 1
endif
-if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
+if exists("g:java_highlight_all") || exists("g:java_highlight_java") || exists("g:java_highlight_java_lang")
" java.lang.*
"
" The keywords of javaR_JavaLang, javaC_JavaLang, javaE_JavaLang,
@@ -175,9 +215,15 @@ if exists("java_highlight_all") || exists("java_highlight_java") || exists("ja
exec 'syn match javaC_JavaLang "\%(\<ModuleLayer\.\)\@' . s:ff.Peek('12', '') . '<=\<Controller\>"'
exec 'syn match javaC_JavaLang "\%(\<Runtime\.\)\@' . s:ff.Peek('8', '') . '<=\<Version\>"'
exec 'syn match javaC_JavaLang "\%(\<System\.\)\@' . s:ff.Peek('7', '') . '<=\<LoggerFinder\>"'
- exec 'syn match javaC_JavaLang "\%(\<Enum\.\)\@' . s:ff.Peek('5', '') . '<=\<EnumDesc\>"'
- syn keyword javaC_JavaLang Boolean Character Class ClassLoader Compiler Double Float Integer Long Math Number Object Process Runtime SecurityManager String StringBuffer Thread ThreadGroup Byte Short Void InheritableThreadLocal Package RuntimePermission ThreadLocal StrictMath StackTraceElement Enum ProcessBuilder StringBuilder ClassValue Module ModuleLayer StackWalker Record
+ syn keyword javaC_JavaLang Boolean Character ClassLoader Compiler Double Float Integer Long Math Number Object Process Runtime SecurityManager String StringBuffer Thread ThreadGroup Byte Short Void Package RuntimePermission StrictMath StackTraceElement ProcessBuilder StringBuilder Module ModuleLayer StackWalker Record
syn match javaC_JavaLang "\<System\>" " See javaDebug.
+
+ if !exists("g:java_highlight_generics")
+ " The non-interface parameterised names of java.lang members.
+ exec 'syn match javaC_JavaLang "\%(\<Enum\.\)\@' . s:ff.Peek('5', '') . '<=\<EnumDesc\>"'
+ syn keyword javaC_JavaLang Class InheritableThreadLocal ThreadLocal Enum ClassValue
+ endif
+
" As of JDK 21, java.lang.Compiler is no more (deprecated in JDK 9).
syn keyword javaLangDeprecated Compiler
syn cluster javaClasses add=javaC_JavaLang
@@ -193,31 +239,40 @@ if exists("java_highlight_all") || exists("java_highlight_java") || exists("ja
hi def link javaC_Java javaC_
hi def link javaE_Java javaE_
hi def link javaX_Java javaX_
- hi def link javaX_ javaExceptions
- hi def link javaR_ javaExceptions
- hi def link javaE_ javaExceptions
- hi def link javaC_ javaConstant
-
- syn keyword javaLangObject clone equals finalize getClass hashCode
- syn keyword javaLangObject notify notifyAll toString wait
- hi def link javaLangObject javaConstant
+ hi def link javaX_ javaExceptions
+ hi def link javaR_ javaExceptions
+ hi def link javaE_ javaExceptions
+ hi def link javaC_ javaConstant
+
+ syn keyword javaLangObject getClass notify notifyAll wait
+
+ " Lower the syntax priority of overridable java.lang.Object method
+ " names for zero-width matching (define g:java_highlight_signature
+ " and see their base declarations for java.lang.Object):
+ syn match javaLangObject "\<clone\>"
+ syn match javaLangObject "\<equals\>"
+ syn match javaLangObject "\<finalize\>"
+ syn match javaLangObject "\<hashCode\>"
+ syn match javaLangObject "\<toString\>"
+ hi def link javaLangObject javaConstant
endif
if filereadable(expand("<sfile>:p:h") . "/javaid.vim")
source <sfile>:p:h/javaid.vim
endif
-if exists("java_space_errors")
- if !exists("java_no_trail_space_error")
- syn match javaSpaceError "\s\+$"
+if exists("g:java_space_errors")
+ if !exists("g:java_no_trail_space_error")
+ syn match javaSpaceError "\s\+$"
endif
- if !exists("java_no_tab_space_error")
- syn match javaSpaceError " \+\t"me=e-1
+ if !exists("g:java_no_tab_space_error")
+ syn match javaSpaceError " \+\t"me=e-1
endif
+ hi def link javaSpaceError Error
endif
-exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*:"he=e-1'
-syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*::\@!"he=e-1'
+syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
syn region javaLabelRegion transparent matchgroup=javaLabel start="\<default\>\%(\s*\%(:\|->\)\)\@=" matchgroup=NONE end=":\|->" oneline
" Consider grouped _default_ _case_ labels, i.e.
" case null, default ->
@@ -230,18 +285,14 @@ syn keyword javaLabelCastType contained char byte short int
syn region javaLabelWhenClause contained transparent matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 end="->"me=e-2 contains=TOP,javaExternal,javaLambdaDef
syn match javaLabelNumber contained "\<0\>[lL]\@!"
syn match javaLabelNumber contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
-hi def link javaLabelDefault javaLabel
-hi def link javaLabelVarType javaOperator
-hi def link javaLabelNumber javaNumber
-hi def link javaLabelCastType javaType
" Comments
-syn keyword javaTodo contained TODO FIXME XXX
+syn keyword javaTodo contained TODO FIXME XXX
-if exists("java_comment_strings")
- syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
- syn region javaCommentString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell,javaSpecialError,javaTextBlockError
- syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
+if exists("g:java_comment_strings")
+ syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
+ syn region javaCommentString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell,javaSpecialError,javaTextBlockError
+ syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
syn match javaCommentCharacter contained "'[^\\]'"
@@ -249,22 +300,22 @@ if exists("java_comment_strings")
syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber,javaStrTempl
endif
-syn region javaComment matchgroup=javaCommentStart start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell fold
-syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
-syn match javaCommentStar contained "^\s*\*$"
+syn region javaComment matchgroup=javaCommentStart start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell fold
+syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
+syn match javaCommentStar contained "^\s*\*$"
syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,javaCommentMarkupTag,javaSpaceError,@Spell
syn match javaCommentMarkupTag contained "@\%(end\|highlight\|link\|replace\|start\)\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
syn match javaCommentMarkupTagAttr contained "\<region\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
-exec 'syn region javaCommentMarkupTagAttr contained transparent matchgroup=htmlArg start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/ matchgroup=htmlString end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.-]\|\k\)\+\)/ nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'
-hi def link javaCommentMarkupTagAttr htmlArg
-hi def link javaCommentString javaString
-hi def link javaComment2String javaString
-hi def link javaCommentCharacter javaCharacter
+exec 'syn region javaCommentMarkupTagAttr contained transparent matchgroup=javaHtmlArg start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/ matchgroup=javaHtmlString end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.-]\|\k\)\+\)/ nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'
syn match javaCommentError contained "/\*"me=e-1 display
-hi def link javaCommentError javaError
-hi def link javaCommentStart javaComment
-if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
+if !exists("g:java_ignore_javadoc") && g:main_syntax != 'jsp'
+ " The overridable "html*" default links must be defined _before_ the
+ " inclusion of the same default links from "html.vim".
+ hi def link htmlComment Special
+ hi def link htmlCommentPart Special
+ hi def link htmlArg Type
+ hi def link htmlString String
syntax case ignore
" Include HTML syntax coloring for Javadoc comments.
@@ -291,80 +342,104 @@ if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\%(\k\|\.\)*\%(#\k\+\%((\_[^)]*)\)\=\)\=@ contains=@javaHtml extend
syn region javaCodeSkipBlock contained transparent start="{\%(@code\>\)\@!" end="}" contains=javaCodeSkipBlock,javaDocCodeTag
syn region javaDocCodeTag contained start="{@code\>" end="}" contains=javaDocCodeTag,javaCodeSkipBlock
- exec 'syn region javaDocSnippetTagAttr contained transparent matchgroup=htmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/ matchgroup=htmlString end=/:$/ end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.\\/-]\|\k\)\+\)/ nextgroup=javaDocSnippetTagAttr skipwhite skipnl'
+ exec 'syn region javaDocSnippetTagAttr contained transparent matchgroup=javaHtmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/ matchgroup=javaHtmlString end=/:$/ end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.\\/-]\|\k\)\+\)/ nextgroup=javaDocSnippetTagAttr skipwhite skipnl'
syn region javaSnippetSkipBlock contained transparent start="{\%(@snippet\>\)\@!" end="}" contains=javaSnippetSkipBlock,javaDocSnippetTag,javaCommentMarkupTag
syn region javaDocSnippetTag contained start="{@snippet\>" end="}" contains=javaDocSnippetTag,javaSnippetSkipBlock,javaDocSnippetTagAttr,javaCommentMarkupTag
syntax case match
+ hi def link javaDocComment Comment
+ hi def link javaCommentTitle SpecialComment
+ hi def link javaDocTags Special
+ hi def link javaDocCodeTag Special
+ hi def link javaDocSnippetTag Special
+ hi def link javaDocSeeTagParam Function
+ hi def link javaDocParam Function
endif
" match the special comment /**/
-syn match javaComment "/\*\*/"
+syn match javaComment "/\*\*/"
" Strings and constants
-syn match javaSpecialError contained "\\."
+syn match javaSpecialError contained "\\."
syn match javaSpecialCharError contained "[^']"
" Escape Sequences (JLS-17, §3.10.7):
-syn match javaSpecialChar contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
+syn match javaSpecialChar contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
syn region javaString start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell
syn match javaTextBlockError +"""\s*"""+
-syn region javaStrTemplEmbExp contained matchgroup=javaStrTempl start="\\{" end="}" contains=TOP
+syn region javaStrTemplEmbExp contained matchgroup=javaStrTempl start="\\{" end="}" contains=TOP
exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+ contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'
exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'
-syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
-syn match javaCharacter "'\\''" contains=javaSpecialChar
-syn match javaCharacter "'[^\\]'"
+syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
+syn match javaCharacter "'\\''" contains=javaSpecialChar
+syn match javaCharacter "'[^\\]'"
" Integer literals (JLS-17, §3.10.1):
-syn keyword javaNumber 0 0l 0L
-syn match javaNumber "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"
+syn keyword javaNumber 0 0l 0L
+syn match javaNumber "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"
" Decimal floating-point literals (JLS-17, §3.10.2):
" Against "\<\d\+\>\.":
-syn match javaNumber "\<\d\%(_*\d\)*\."
-syn match javaNumber "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"
-syn match javaNumber "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
-syn match javaNumber "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"
+syn match javaNumber "\<\d\%(_*\d\)*\."
+syn match javaNumber "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"
+syn match javaNumber "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
+syn match javaNumber "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"
" Hexadecimal floating-point literals (JLS-17, §3.10.2):
-syn match javaNumber "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
+syn match javaNumber "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
" Unicode characters
syn match javaSpecial "\\u\x\x\x\x"
" Method declarations (JLS-17, §8.4.3, §8.4.4, §9.4).
-if exists("java_highlight_functions")
- syn cluster javaFuncParams contains=javaAnnotation,@javaClasses,javaType,javaVarArg,javaComment,javaLineComment
+if exists("g:java_highlight_functions")
+ syn cluster javaFuncParams contains=javaAnnotation,@javaClasses,javaGenerics,javaType,javaVarArg,javaComment,javaLineComment
- if java_highlight_functions =~# '^indent[1-8]\=$'
- let s:last = java_highlight_functions[-1 :]
- let s:indent = s:last != 't' ? repeat("\x20", s:last) : "\t"
+ if exists("g:java_highlight_signature")
+ syn cluster javaFuncParams add=javaParamModifier
+ hi def link javaFuncDefStart javaFuncDef
+ else
syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
+ endif
+
+ if g:java_highlight_functions =~# '^indent[1-8]\=$'
+ let s:last = g:java_highlight_functions[-1 :]
+ let s:indent = s:last != 't' ? repeat("\x20", s:last) : "\t"
" Try to not match other type members, initialiser blocks, enum
" constants (JLS-17, §8.9.1), and constructors (JLS-17, §8.1.7):
" at any _conventional_ indentation, skip over all fields with
" "[^=]*", all records with "\<record\s", and let the "*Skip*"
" definitions take care of constructor declarations and enum
- " constants (with no support for @Foo(value = "bar")).
- exec 'syn region javaFuncDef start=+^' . s:indent . '\%(<[^>]\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^=]*\%(\<record\)\@' . s:ff.Peek('6', '') . '<!\s\K\k*\s*(+ end=+)+ contains=@javaFuncParams'
+ " constants (with no support for @Foo(value = "bar")). Also,
+ " reject inlined declarations with "[^{]" for signature.
+ exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.PeekTo('\%(', '') . '^' . s:indent . '\%(<[^>]\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^={]*\%(\<record\)\@' . s:ff.Peek('6', '') . '<!\s' . s:ff.PeekFrom('\)\@' . s:ff.Peek('80', '') . '<=', '') . '\K\k*\s*(/ end=/)/ contains=@javaFuncParams'
" As long as package-private constructors cannot be matched with
" javaFuncDef, do not look with javaConstructorSkipDeclarator for
" them.
- exec 'syn match javaConstructorSkipDeclarator transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*p\%(ublic\|rotected\|rivate\)\s\+\%(<[^>]\+>\+\s\+\)\=\K\k*\s*\ze(+ contains=javaAnnotation,javaScopeDecl'
- exec 'syn match javaEnumSkipArgumentativeConstant transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\ze(+ contains=javaAnnotation'
+ exec 'syn match javaConstructorSkipDeclarator transparent /^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*p\%(ublic\|rotected\|rivate\)\s\+\%(<[^>]\+>\+\s\+\)\=\K\k*\s*\ze(/ contains=javaAnnotation,javaScopeDecl,javaClassDecl,javaTypedef,javaGenerics'
+ " With a zero-width span for signature applicable on demand to
+ " javaFuncDef, make related adjustments:
+ " (1) Claim all enum constants of a line as a unit.
+ exec 'syn match javaEnumSkipConstant contained transparent /^' . s:indent . '\%(\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\%((.*)\)\=\s*[,;({]\s*\)\+/ contains=@javaEnumConstants'
+ " (2) Define a syntax group for top level enumerations and tell
+ " apart their constants from method declarations.
+ exec 'syn region javaTopEnumDeclaration transparent start=/\%(^\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(strictfp\s\+\)\=\<enum\_s\+\)\@' . s:ff.Peek('80', '') . '<=\K\k*\%(\_s\+implements\_s.\+\)\=\_s*{/ end=/}/ contains=@javaTop,javaEnumSkipConstant'
+ " (3) Define a base variant of javaParenT without using @javaTop
+ " in order to not include javaFuncDef.
+ syn region javaParenE transparent matchgroup=javaParen start="(" end=")" contains=@javaEnumConstants,javaInParen
+ syn region javaParenE transparent matchgroup=javaParen start="\[" end="\]" contains=@javaEnumConstants
+ syn cluster javaEnumConstants contains=TOP,javaTopEnumDeclaration,javaFuncDef,javaParenT
unlet s:indent s:last
else
" This is the "style" variant (:help ft-java-syntax).
- syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
" Match arbitrarily indented camelCasedName method declarations.
" Match: [@É] [abstract] [<α, β>] Τʬ[<γ>][[][]] μʭʭ(/* ... */);
- exec 'syn region javaFuncDef start=/' . s:ff.Engine('\%#=2', '') . '^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+\<' . s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
+ exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.Engine('\%#=2', '') . s:ff.PeekTo('\%(', '') . '^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+' . s:ff.PeekFrom('\)\@' . s:ff.Peek('80', '') . '<=', '') . '\<' . s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
endif
endif
-if exists("java_highlight_debug")
+if exists("g:java_highlight_debug")
" Strings and constants
syn match javaDebugSpecial contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
- syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
+ syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
syn region javaDebugString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugSpecial,javaDebugTextBlockError
" The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\,
" share one colour by default. Do not conflate unrelated parens.
@@ -384,7 +459,7 @@ if exists("java_highlight_debug")
syn match javaDebugNumber contained "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
syn keyword javaDebugBoolean contained true false
syn keyword javaDebugType contained null this super
- syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
+ syn region javaDebugParen contained start=+(+ end=+)+ contains=javaDebug.*,javaDebugParen
" To make this work, define the highlighting for these groups.
syn match javaDebug "\<System\.\%(out\|err\)\.print\%(ln\)\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
@@ -394,74 +469,89 @@ if exists("java_highlight_debug")
" FIXME: What API do "trace*" belong to?
" syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
- hi def link javaDebug Debug
- hi def link javaDebugString DebugString
- hi def link javaDebugStrTempl Macro
- hi def link javaDebugTextBlockError Error
- hi def link javaDebugType DebugType
- hi def link javaDebugBoolean DebugBoolean
- hi def link javaDebugNumber Debug
- hi def link javaDebugSpecial DebugSpecial
- hi def link javaDebugSpecialCharacter DebugSpecial
- hi def link javaDebugCharacter DebugString
- hi def link javaDebugParen Debug
-
- hi def link DebugString String
- hi def link DebugSpecial Special
- hi def link DebugBoolean Boolean
- hi def link DebugType Type
-endif
-
-if exists("java_mark_braces_in_parens_as_errors")
- syn match javaInParen contained "[{}]"
- hi def link javaInParen javaError
+ hi def link javaDebug Debug
+ hi def link javaDebugString DebugString
+ hi def link javaDebugStrTempl Macro
+ hi def link javaDebugTextBlockError Error
+ hi def link javaDebugType DebugType
+ hi def link javaDebugBoolean DebugBoolean
+ hi def link javaDebugNumber Debug
+ hi def link javaDebugSpecial DebugSpecial
+ hi def link javaDebugSpecialCharacter DebugSpecial
+ hi def link javaDebugCharacter DebugString
+ hi def link javaDebugParen Debug
+
+ hi def link DebugString String
+ hi def link DebugSpecial Special
+ hi def link DebugBoolean Boolean
+ hi def link DebugType Type
endif
" Try not to fold top-level-type bodies under assumption that there is
" but one such body.
exec 'syn region javaBlock transparent start="\%(^\|^\S[^:]\+\)\@' . s:ff.Peek('120', '') . '<!{" end="}" fold'
+if exists("g:java_mark_braces_in_parens_as_errors")
+ syn match javaInParen contained "[{}]"
+ hi def link javaInParen javaError
+endif
+
" catch errors caused by wrong parenthesis
-syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaInParen,javaParenT1
-syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaInParen,javaParenT2 contained
-syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaInParen,javaParenT contained
-syn match javaParenError ")"
+syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaInParen,javaParenT1
+syn region javaParenT1 contained transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaInParen,javaParenT2
+syn region javaParenT2 contained transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaInParen,javaParenT
+syn match javaParenError ")"
" catch errors caused by wrong square parenthesis
-syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
-syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
-syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
-syn match javaParenError "\]"
-
-hi def link javaParenError javaError
+syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
+syn region javaParenT1 contained transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2
+syn region javaParenT2 contained transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT
+syn match javaParenError "\]"
+
+" Lambda expressions (JLS-17, §15.27) and method reference expressions
+" (JLS-17, §15.13).
+if exists("g:java_highlight_functions")
+ syn match javaMethodRef ":::\@!"
+
+ if exists("g:java_highlight_signature")
+ let s:ff.LambdaDef = s:ff.LeftConstant
+ else
+ let s:ff.LambdaDef = s:ff.RightConstant
+ endif
-" Lambda expressions (JLS-17, §15.27).
-if exists("java_highlight_functions")
" Make ()-matching definitions after the parenthesis error catcher.
"
+ " Note that here and elsewhere a single-line token is used for \z,
+ " with other tokens repeated as necessary, to overcome the lack of
+ " support for multi-line matching with \z.
+ "
" Match: ([@A [@B ...] final] var a[, var b, ...]) ->
" | ([@A [@B ...] final] T[<α>][[][]] a[, T b, ...]) ->
" There is no recognition of expressions interspersed with comments
" or of expressions whose parameterised parameter types are written
" across multiple lines.
- exec 'syn match javaLambdaDef "\k\@' . s:ff.Peek('4', '') . '<!([[:space:]\n]*\%(\%(@\%(\K\k*\.\)*\K\k*\>\%((\_.\{-1,})\)\{-,1}[[:space:]\n]\+\)*\%(final[[:space:]\n]\+\)\=\%(\<\K\k*\>\.\)*\<\K\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\%(\%(\%(\[\]\)\+\|\.\.\.\)\)\=[[:space:]\n]\+\<\K\k*\>\%(\[\]\)*\%(,[[:space:]\n]*\)\=\)\+)[[:space:]\n]*->" contains=javaAnnotation,javaParamModifier,javaLambdaVarType,javaType,@javaClasses,javaVarArg'
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent matchgroup=javaLambdaDefStart start=/', 'match javaLambdaDef "') . '\k\@' . s:ff.Peek('4', '') . '<!(' . s:ff.LambdaDef('\%(', '') . '[[:space:]\n]*\%(\%(@\%(\K\k*\.\)*\K\k*\>\%((\_.\{-1,})\)\{-,1}[[:space:]\n]\+\)*\%(final[[:space:]\n]\+\)\=\%(\<\K\k*\>\.\)*\<\K\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\%(\%(\%(\[\]\)\+\|\.\.\.\)\)\=[[:space:]\n]\+\<\K\k*\>\%(\[\]\)*\%(,[[:space:]\n]*\)\=\)\+)[[:space:]\n]*' . s:ff.LambdaDef('\z(->\)\)\@=/ end=/)[[:space:]\n]*\z1/', '->"') . ' contains=javaAnnotation,javaParamModifier,javaLambdaVarType,javaType,@javaClasses,javaGenerics,javaVarArg'
" Match: () ->
" | (a[, b, ...]) ->
- exec 'syn match javaLambdaDef "\k\@' . s:ff.Peek('4', '') . '<!([[:space:]\n]*\%(\<\K\k*\>\%(,[[:space:]\n]*\)\=\)*)[[:space:]\n]*->"'
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent matchgroup=javaLambdaDefStart start=/', 'match javaLambdaDef "') . '\k\@' . s:ff.Peek('4', '') . '<!(' . s:ff.LambdaDef('\%(', '') . '[[:space:]\n]*\%(\<\K\k*\>\%(,[[:space:]\n]*\)\=\)*)[[:space:]\n]*' . s:ff.LambdaDef('\z(->\)\)\@=/ end=/)[[:space:]\n]*\z1/', '->"')
" Match: a ->
- exec 'syn match javaLambdaDef "\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<![[:space:]\n]*->"'
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent start=/', 'match javaLambdaDef "') . '\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!' . s:ff.LambdaDef('\%([[:space:]\n]*\z(->\)\)\@=/ matchgroup=javaLambdaDefStart end=/\z1/', '[[:space:]\n]*->"')
syn keyword javaParamModifier contained final
- hi def link javaParamModifier javaConceptKind
syn keyword javaLambdaVarType contained var
- hi def link javaLambdaVarType javaOperator
+ hi def link javaParamModifier javaConceptKind
+ hi def link javaLambdaVarType javaOperator
+ hi def link javaLambdaDef javaFuncDef
+ hi def link javaLambdaDefStart javaFuncDef
+ hi def link javaMethodRef javaFuncDef
+ hi def link javaFuncDef Function
endif
" The @javaTop cluster comprises non-contained Java syntax groups.
" Note that the syntax file "aidl.vim" relies on its availability.
-syn cluster javaTop contains=TOP,javaDocComment,javaBlock,javaParenError,javaParenT
+syn cluster javaTop contains=TOP,javaTopEnumDeclaration
-if !exists("java_minlines")
- let java_minlines = 10
+if !exists("g:java_minlines")
+ let g:java_minlines = 10
endif
" Note that variations of a /*/ balanced comment, e.g., /*/*/, /*//*/,
@@ -470,16 +560,11 @@ endif
" to make synchronisation start further towards file's beginning by
" bumping up g:java_minlines or issuing ':syntax sync fromstart' or
" preferring &foldmethod set to 'syntax'.
-exec "syn sync ccomment javaComment minlines=" . java_minlines
+exec "syn sync ccomment javaComment minlines=" . g:java_minlines
" The default highlighting.
-hi def link javaLambdaDef Function
-hi def link javaFuncDef Function
hi def link javaVarArg Function
hi def link javaBranch Conditional
-hi def link javaUserLabelRef javaUserLabel
-hi def link javaLabel Label
-hi def link javaUserLabel Label
hi def link javaConditional Conditional
hi def link javaRepeat Repeat
hi def link javaExceptions Exception
@@ -490,8 +575,8 @@ hi def link javaClassDecl javaStorageClass
hi def link javaScopeDecl javaStorageClass
hi def link javaConceptKind NonText
-hi def link javaBoolean Boolean
-hi def link javaSpecial Special
+hi def link javaBoolean Boolean
+hi def link javaSpecial Special
hi def link javaSpecialError Error
hi def link javaSpecialCharError Error
hi def link javaString String
@@ -500,65 +585,74 @@ hi def link javaCharacter Character
hi def link javaSpecialChar SpecialChar
hi def link javaNumber Number
hi def link javaError Error
+hi def link javaError2 javaError
hi def link javaTextBlockError Error
+hi def link javaParenError javaError
hi def link javaStatement Statement
hi def link javaOperator Operator
-hi def link javaComment Comment
-hi def link javaDocComment Comment
-hi def link javaLineComment Comment
hi def link javaConstant Constant
-hi def link javaTypedef Typedef
+hi def link javaTypedef Typedef
hi def link javaTodo Todo
hi def link javaAnnotation PreProc
hi def link javaAnnotationStart javaAnnotation
-
-hi def link javaCommentTitle SpecialComment
-hi def link javaDocTags Special
-hi def link javaDocCodeTag Special
-hi def link javaDocSnippetTag Special
-hi def link javaDocParam Function
-hi def link javaDocSeeTagParam Function
-hi def link javaCommentStar javaComment
-
hi def link javaType Type
hi def link javaExternal Include
-hi def link htmlComment Special
-hi def link htmlCommentPart Special
-hi def link htmlArg Type
-hi def link htmlString String
-hi def link javaSpaceError Error
+hi def link javaUserLabel Label
+hi def link javaUserLabelRef javaUserLabel
+hi def link javaLabel Label
+hi def link javaLabelDefault javaLabel
+hi def link javaLabelVarType javaOperator
+hi def link javaLabelNumber javaNumber
+hi def link javaLabelCastType javaType
+
+hi def link javaComment Comment
+hi def link javaCommentStar javaComment
+hi def link javaLineComment Comment
+hi def link javaCommentMarkupTagAttr javaHtmlArg
+hi def link javaCommentString javaString
+hi def link javaComment2String javaString
+hi def link javaCommentCharacter javaCharacter
+hi def link javaCommentError javaError
+hi def link javaCommentStart javaComment
-if s:module_info_cur_buf
- hi def link javaModuleStorageClass StorageClass
- hi def link javaModuleStmt Statement
- hi def link javaModuleExternal Include
-endif
+hi def link javaHtmlArg Type
+hi def link javaHtmlString String
let b:current_syntax = "java"
-if main_syntax == 'java'
- unlet main_syntax
+if g:main_syntax == 'java'
+ unlet g:main_syntax
endif
let b:spell_options = "contained"
let &cpo = s:cpo_save
-unlet s:module_info_cur_buf s:ff s:cpo_save
+unlet s:ff s:cpo_save
" See ":help vim9-mix".
if !has("vim9script")
finish
endif
-def! s:JavaSyntaxFoldTextExpr(): string
- return getline(v:foldstart) !~ '/\*\+\s*$'
- ? foldtext()
- : printf('+-%s%3d lines: ',
- v:folddashes,
- (v:foldend - v:foldstart + 1)) ..
- getline(v:foldstart + 1)
-enddef
-
-setlocal foldtext=s:JavaSyntaxFoldTextExpr()
-delfunction! g:JavaSyntaxFoldTextExpr
+if exists("g:java_foldtext_show_first_or_second_line")
+ def! s:LazyPrefix(prefix: string, dashes: string, count: number): string
+ return empty(prefix)
+ ? printf('+-%s%3d lines: ', dashes, count)
+ : prefix
+ enddef
+
+ def! s:JavaSyntaxFoldTextExpr(): string
+ # Piggyback on NGETTEXT.
+ const summary: string = foldtext()
+ return getline(v:foldstart) !~ '/\*\+\s*$'
+ ? summary
+ : LazyPrefix(matchstr(summary, '^+-\+\s*\d\+\s.\{-1,}:\s'),
+ v:folddashes,
+ (v:foldend - v:foldstart + 1)) ..
+ getline(v:foldstart + 1)
+ enddef
+
+ setlocal foldtext=s:JavaSyntaxFoldTextExpr()
+ delfunction! g:JavaSyntaxFoldTextExpr
+endif
" vim: sw=2 ts=8 noet sta
diff --git a/runtime/syntax/javascript.vim b/runtime/syntax/javascript.vim
index e3b4cdf..c73f5d7 100644
--- a/runtime/syntax/javascript.vim
+++ b/runtime/syntax/javascript.vim
@@ -10,6 +10,7 @@
" Last Change: 2022 Jun 09
" 2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
" 2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)
+" 2024 Aug 14: fix a few stylistic issues (#15480)
" tuning parameters:
" unlet javaScript_fold
@@ -59,14 +60,15 @@ syn keyword javaScriptType Array Boolean Date Function Number Object String Reg
syn keyword javaScriptStatement return with await yield
syn keyword javaScriptBoolean true false
syn keyword javaScriptNull null undefined
-syn keyword javaScriptIdentifier arguments this var let
+syn keyword javaScriptIdentifier arguments this
syn keyword javaScriptLabel case default
syn keyword javaScriptException try catch finally throw
syn keyword javaScriptMessage alert confirm prompt status
syn keyword javaScriptGlobal self window top parent
syn keyword javaScriptMember document event location
syn keyword javaScriptDeprecated escape unescape
-syn keyword javaScriptReserved abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile async
+syn keyword javaScriptReserved abstract boolean byte char class const debugger double enum export extends final float from goto implements import int interface let long native package private protected public short super synchronized throws transient var volatile async
+syn keyword javaScriptModifier static
syn cluster javaScriptEmbededExpr contains=javaScriptBoolean,javaScriptNull,javaScriptIdentifier,javaScriptStringD,javaScriptStringS,javaScriptStringT
@@ -110,7 +112,7 @@ hi def link javaScriptBranch Conditional
hi def link javaScriptOperator Operator
hi def link javaScriptType Type
hi def link javaScriptStatement Statement
-hi def link javaScriptFunction Function
+hi def link javaScriptFunction Keyword
hi def link javaScriptBraces Function
hi def link javaScriptError Error
hi def link javaScrParenError javaScriptError
@@ -126,6 +128,7 @@ hi def link javaScriptGlobal Keyword
hi def link javaScriptMember Keyword
hi def link javaScriptDeprecated Exception
hi def link javaScriptReserved Keyword
+hi def link javaScriptModifier StorageClass
hi def link javaScriptDebug Debug
hi def link javaScriptConstant Label
hi def link javaScriptEmbed Special
diff --git a/runtime/syntax/kconfig.vim b/runtime/syntax/kconfig.vim
index c7a305b..0aecc00 100644
--- a/runtime/syntax/kconfig.vim
+++ b/runtime/syntax/kconfig.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Maintainer: Christian Brabandt <cb@256bit.org>
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2015-05-29
+" Latest Revision: 2024-07-19
" License: Vim (see :h license)
" Repository: https://github.com/chrisbra/vim-kconfig
@@ -715,8 +715,6 @@ syn region kconfigHelpText
\ skip='^$'
\ end='^\z1\@!'
-syn sync match kconfigSyncHelp grouphere kconfigHelpText 'help\|---help---'
-
hi def link kconfigTodo Todo
hi def link kconfigComment Comment
hi def link kconfigKeyword Keyword
diff --git a/runtime/syntax/kivy.vim b/runtime/syntax/kivy.vim
index b145503..d4bccfc 100644
--- a/runtime/syntax/kivy.vim
+++ b/runtime/syntax/kivy.vim
@@ -1,9 +1,9 @@
" Vim syntax file
" Language: Kivy
-" Maintainer: Corey Prophitt <prophitt.corey@gmail.com>
-" Last Change: May 29th, 2014
+" Maintainer: Corey Prophitt <corey@prophitt.me>
+" Last Change: Jul 31st, 2024
" Version: 1
-" URL: http://kivy.org/
+" URL: https://kivy.org/
if exists("b:current_syntax")
finish
@@ -13,11 +13,11 @@ endif
syn include @pyth $VIMRUNTIME/syntax/python.vim
" Kivy language rules can be found here
-" http://kivy.org/docs/guide/lang.html
+" https://kivy.org/doc/stable/guide/lang.html
" Define Kivy syntax
syn match kivyPreProc /#:.*/
-syn match kivyComment /#.*/
+syn match kivyComment /#[^:].*/
syn match kivyRule /<\I\i*\(,\s*\I\i*\)*>:/
syn match kivyAttribute /\<\I\i*\>/ nextgroup=kivyValue
diff --git a/runtime/syntax/logindefs.vim b/runtime/syntax/logindefs.vim
index 8cb4295..51fa199 100644
--- a/runtime/syntax/logindefs.vim
+++ b/runtime/syntax/logindefs.vim
@@ -1,7 +1,8 @@
-" Vim syntax file
+" Vim syntax file for login.defs(5)
" Language: login.defs(5) configuration file
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2010-11-29
+" 2024 Jul 12 by Vim Project: Update keywords
if exists("b:current_syntax")
finish
@@ -35,6 +36,8 @@ syn keyword logindefsBooleanKeyword contained
\ CREATE_HOME
\ DEFAULT_HOME
\ FAILLOG_ENAB
+ \ FORCE_SHADOW
+ \ GRANT_AUX_GROUP_SUBIDS
\ LASTLOG_ENAB
\ LOG_OK_LOGINS
\ LOG_UNKFAIL_ENAB
@@ -54,15 +57,20 @@ syn keyword logindefsBoolean contained yes no
syn keyword logindefsEncryptKeyword contained
\ ENCRYPT_METHOD
+ \ HMAC_CRYPTO_ALGO
\ nextgroup=logindefsEncryptMethod skipwhite
syn keyword logindefsEncryptMethod contained
+ \ BCRYPT
\ DES
\ MD5
\ SHA256
\ SHA512
+ \ YESCRYPT
syn keyword logindefsNumberKeyword contained
+ \ BCRYPT_MAX_ROUNDS
+ \ BCRYPT_MIN_ROUNDS
\ ERASECHAR
\ FAIL_DELAY
\ GID_MAX
@@ -79,6 +87,12 @@ syn keyword logindefsNumberKeyword contained
\ PASS_MIN_LEN
\ SHA_CRYPT_MAX_ROUNDS
\ SHA_CRYPT_MIN_ROUNDS
+ \ SUB_GID_COUNT
+ \ SUB_GID_MAX
+ \ SUB_GID_MIN
+ \ SUB_UID_COUNT
+ \ SUB_UID_MAX
+ \ SUB_UID_MIN
\ SYS_GID_MAX
\ SYS_GID_MIN
\ SYS_UID_MAX
@@ -86,9 +100,15 @@ syn keyword logindefsNumberKeyword contained
\ UID_MAX
\ UID_MIN
\ ULIMIT
- \ UMASK
+ \ YESCRYPT_COST_FACTOR
\ nextgroup=@logindefsNumber skipwhite
+syn keyword logindefsNumberKeyword contained
+ \ HOME_MODE
+ \ TTYPERM
+ \ UMASK
+ \ nextgroup=logindefsOctal,logindefsOctalError skipwhite
+
syn cluster logindefsNumber contains=
\ logindefsDecimal,
\ logindefsHex,
@@ -114,6 +134,7 @@ syn keyword logindefsPathKeyword contained
\ MAIL_DIR
\ MAIL_FILE
\ NOLOGINS_FILE
+ \ NONEXISTENT
\ SULOG_FILE
\ TTYTYPE_FILE
\ nextgroup=logindefsPath skipwhite
@@ -138,9 +159,9 @@ syn keyword logindefsStringKeyword contained
\ ENV_HZ
\ ENV_TZ
\ LOGIN_STRING
+ \ PREVENT_NO_AUTH
\ SU_NAME
\ TTYGROUP
- \ TTYPERM
\ USERDEL_CMD
\ nextgroup=logindefsString skipwhite
diff --git a/runtime/syntax/make.vim b/runtime/syntax/make.vim
index b457304..d3ddf78 100644
--- a/runtime/syntax/make.vim
+++ b/runtime/syntax/make.vim
@@ -28,8 +28,13 @@ syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\
syn case match
" identifiers
-syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent
-syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent
+if exists("b:make_microsoft") || exists("make_microsoft")
+ syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent
+ syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent
+else
+ syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent
+ syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent
+endif
syn match makeIdent "\$\$\w*"
syn match makeIdent "\$[^({]"
syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2
@@ -78,11 +83,13 @@ syn match makeOverride "^ *override\>"
syn match makeStatement contained "(\(abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|file\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|guile\|if\|info\|join\|lastword\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
" Comment
-if exists("make_microsoft")
- syn match makeComment "#.*" contains=@Spell,makeTodo
-elseif !exists("make_no_comments")
- syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo
- syn match makeComment "#$" contains=@Spell
+if !exists("make_no_comments")
+ if exists("b:make_microsoft") || exists("make_microsoft")
+ syn match makeComment "#.*" contains=@Spell,makeTodo
+ else
+ syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo
+ syn match makeComment "#$" contains=@Spell
+ endif
endif
syn keyword makeTodo TODO FIXME XXX contained
diff --git a/runtime/syntax/mediawiki.vim b/runtime/syntax/mediawiki.vim
new file mode 100644
index 0000000..8ac30b9
--- /dev/null
+++ b/runtime/syntax/mediawiki.vim
@@ -0,0 +1,292 @@
+" mediawiki.vim (formerly named Wikipedia.vim)
+"
+" Vim syntax file
+" Language: MediaWiki
+" Maintainer: Avid Seeker <avidseeker7@protonmail.com>
+" Home: http://en.wikipedia.org/wiki/Wikipedia:Text_editor_support#Vim
+" Last Change: 2024 Jul 14
+" Credits: [[User:Unforgettableid]] [[User:Aepd87]], [[User:Danny373]], [[User:Ingo Karkat]], et al.
+"
+" Published on Wikipedia in 2003-04 and declared authorless.
+"
+" Based on the HTML syntax file. Probably too closely based, in fact.
+" There may well be name collisions everywhere, but ignorance is bliss,
+" so they say.
+"
+
+if exists("b:current_syntax")
+ finish
+endif
+
+syntax case ignore
+syntax spell toplevel
+
+" Mark illegal characters
+sy match htmlError "[<>&]"
+
+" Tags
+sy region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,@htmlPreproc
+sy region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,@htmlPreproc
+sy match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=@htmlPreproc
+sy region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
+sy region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
+sy match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
+sy match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
+sy match htmlTagError contained "[^>]<"ms=s+1
+
+" Allowed HTML tag names
+sy keyword htmlTagName contained big blockquote br caption center cite code
+sy keyword htmlTagName contained dd del div dl dt font hr ins li
+sy keyword htmlTagName contained ol p pre rb rp rt ruby s small span strike sub
+sy keyword htmlTagName contained sup table td th tr tt ul var
+sy match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\)\>"
+" Allowed Wiki tag names
+sy keyword htmlTagName contained math nowiki references source syntaxhighlight
+
+" Allowed arg names
+sy keyword htmlArg contained align lang dir width height nowrap bgcolor clear
+sy keyword htmlArg contained noshade cite datetime size face color type start
+sy keyword htmlArg contained value compact summary border frame rules
+sy keyword htmlArg contained cellspacing cellpadding valign char charoff
+sy keyword htmlArg contained colgroup col span abbr axis headers scope rowspan
+sy keyword htmlArg contained colspan id class name style title
+
+" Special characters
+sy match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
+
+" Comments
+sy region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError
+sy match htmlCommentError contained "[^><!]"
+sy region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc
+sy region htmlComment start=+<!DOCTYPE+ keepend end=+>+
+
+if !exists("html_no_rendering")
+ sy cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,@htmlPreproc
+
+ sy region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
+ sy region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
+ sy region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
+ sy region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
+ sy region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
+ sy region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
+ sy region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+ sy region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
+
+ sy region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
+ sy region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
+ sy region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
+ sy region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
+ sy region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
+ sy region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
+ sy region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
+ sy region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
+ sy region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+
+ sy region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
+ sy region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+ sy region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
+ sy region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
+ sy region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
+ sy region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
+ sy region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
+ sy region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
+
+ sy region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
+ sy region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
+ sy region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
+ sy region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
+ sy region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
+ sy region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
+endif
+
+
+" No htmlTop and wikiPre inside HTML preformatted areas, because
+" MediaWiki renders everything in there literally (HTML tags and
+" entities, too): <pre> tags work as the combination of <nowiki> and
+" the standard HTML <pre> tag: the content will preformatted, and it
+" will not be parsed, but shown as in the wikitext source.
+"
+" With wikiPre, indented lines would be rendered differently from
+" unindented lines.
+sy match htmlPreTag /<pre\>[^>]*>/ contains=htmlTag
+sy match htmlPreEndTag /<\/pre>/ contains=htmlEndTag
+sy match wikiNowikiTag /<nowiki>/ contains=htmlTag
+sy match wikiNowikiEndTag /<\/nowiki>/ contains=htmlEndTag
+sy match wikiSourceTag /<source\s\+[^>]\+>/ contains=htmlTag
+sy match wikiSourceEndTag /<\/source>/ contains=htmlEndTag
+sy match wikiSyntaxHLTag /<syntaxhighlight\s\+[^>]\+>/ contains=htmlTag
+sy match wikiSyntaxHLEndTag /<\/syntaxhighlight>/ contains=htmlEndTag
+
+" Note: Cannot use 'start="<pre>"rs=e', so still have the <pre> tag
+" highlighted correctly via separate sy-match. Unfortunately, this will
+" also highlight <pre> tags inside the preformatted region.
+sy region htmlPre start="<pre\>[^>]*>" end="<\/pre>"me=e-6 contains=htmlPreTag
+sy region wikiNowiki start="<nowiki>" end="<\/nowiki>"me=e-9 contains=wikiNowikiTag
+sy region wikiSource start="<source\s\+[^>]\+>" keepend end="<\/source>"me=e-9 contains=wikiSourceTag
+sy region wikiSyntaxHL start="<syntaxhighlight\s\+[^>]\+>" keepend end="<\/syntaxhighlight>"me=e-18 contains=wikiSyntaxHLTag
+
+sy include @TeX syntax/tex.vim
+unlet b:current_syntax
+sy region wikiTeX matchgroup=htmlTag start="<math>" end="<\/math>" contains=@texMathZoneGroup,wikiNowiki,wikiNowikiEndTag
+sy region wikiRef matchgroup=htmlTag start="<ref>" end="<\/ref>" contains=wikiNowiki,wikiNowikiEndTag
+
+sy cluster wikiText contains=wikiLink,wikiTemplate,wikiNowiki,wikiNowikiEndTag,wikiItalic,wikiBold,wikiBoldAndItalic
+
+" Tables
+sy cluster wikiTableFormat contains=wikiTemplate,htmlString,htmlArg,htmlValue
+sy region wikiTable matchgroup=wikiTableSeparator start="{|" end="|}" contains=wikiTableHeaderLine,wikiTableCaptionLine,wikiTableNewRow,wikiTableHeadingCell,wikiTableNormalCell,@wikiText
+sy match wikiTableSeparator /^!/ contained
+sy match wikiTableSeparator /^|/ contained
+sy match wikiTableSeparator /^|[+-]/ contained
+sy match wikiTableSeparator /||/ contained
+sy match wikiTableSeparator /!!/ contained
+sy match wikiTableFormatEnd /[!|]/ contained
+sy match wikiTableHeadingCell /\(^!\|!!\)\([^!|]*|\)\?.*/ contains=wikiTableSeparator,@wikiText,wikiTableHeadingFormat
+" Require at least one '=' in the format, to avoid spurious matches (e.g.
+" the | in [[foo|bar]] might be taken as the final |, indicating the beginning
+" of the cell). The same is done for wikiTableNormalFormat below.
+sy match wikiTableHeadingFormat /\%(^!\|!!\)[^!|]\+=[^!|]\+\([!|]\)\(\1\)\@!/me=e-1 contains=@wikiTableFormat,wikiTableSeparator nextgroup=wikiTableFormatEnd
+sy match wikiTableNormalCell /\(^|\|||\)\([^|]*|\)\?.*/ contains=wikiTableSeparator,@wikiText,wikiTableNormalFormat
+sy match wikiTableNormalFormat /\(^|\|||\)[^|]\+=[^|]\+||\@!/me=e-1 contains=@wikiTableFormat,wikiTableSeparator nextgroup=wikiTableFormatEnd
+sy match wikiTableHeaderLine /\(^{|\)\@<=.*$/ contained contains=@wikiTableFormat
+sy match wikiTableCaptionLine /^|+.*$/ contained contains=wikiTableSeparator,@wikiText
+sy match wikiTableNewRow /^|-.*$/ contained contains=wikiTableSeparator,@wikiTableFormat
+
+sy cluster wikiTop contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
+
+sy region wikiItalic start=+'\@<!'''\@!+ end=+''+ oneline contains=@wikiTop,wikiItalicBold
+sy region wikiBold start=+'''+ end=+'''+ oneline contains=@wikiTop,wikiBoldItalic
+sy region wikiBoldAndItalic start=+'''''+ end=+'''''+ oneline contains=@wikiTop
+
+sy region wikiBoldItalic contained start=+'\@<!'''\@!+ end=+''+ oneline contains=@wikiTop
+sy region wikiItalicBold contained start=+'''+ end=+'''+ oneline contains=@wikiTop
+
+sy region wikiH1 start="^=" end="=" oneline contains=@wikiTop
+sy region wikiH2 start="^==" end="==" oneline contains=@wikiTop
+sy region wikiH3 start="^===" end="===" oneline contains=@wikiTop
+sy region wikiH4 start="^====" end="====" oneline contains=@wikiTop
+sy region wikiH5 start="^=====" end="=====" oneline contains=@wikiTop
+sy region wikiH6 start="^======" end="======" oneline contains=@wikiTop
+
+sy region wikiLink start="\[\[" end="\]\]\(s\|'s\|es\|ing\|\)" oneline contains=wikiLink,wikiNowiki,wikiNowikiEndTag
+
+sy region wikiLink start="https\?://" end="\W*\_s"me=s-1 oneline
+sy region wikiLink start="\[http:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[https:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[ftp:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[gopher:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[news:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[mailto:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+
+sy match wikiTemplateName /{{[^{|}<>\[\]]\+/hs=s+2 contained
+sy region wikiTemplate start="{{" end="}}" keepend extend contains=wikiNowiki,wikiNowikiEndTag,wikiTemplateName,wikiTemplateParam,wikiTemplate,wikiLink
+sy region wikiTemplateParam start="{{{\s*\d" end="}}}" extend contains=wikiTemplateName
+
+sy match wikiParaFormatChar /^[\:|\*|;|#]\+/
+sy match wikiParaFormatChar /^-----*/
+sy match wikiPre /^\ .*$/ contains=wikiNowiki,wikiNowikiEndTag
+
+" HTML highlighting
+
+hi def link htmlTag Function
+hi def link htmlEndTag Identifier
+hi def link htmlArg Type
+hi def link htmlTagName htmlStatement
+hi def link htmlSpecialTagName Exception
+hi def link htmlValue String
+hi def link htmlSpecialChar Special
+
+if !exists("html_no_rendering")
+ hi def link htmlTitle Title
+ hi def link htmlH1 htmlTitle
+ hi def link htmlH2 htmlTitle
+ hi def link htmlH3 htmlTitle
+ hi def link htmlH4 htmlTitle
+ hi def link htmlH5 htmlTitle
+ hi def link htmlH6 htmlTitle
+
+ hi def link htmlPreProc PreProc
+ hi def link htmlHead htmlPreProc
+ hi def link htmlPreProcAttrName htmlPreProc
+ hi def link htmlPreStmt htmlPreProc
+
+ hi def link htmlSpecial Special
+ hi def link htmlCssDefinition htmlSpecial
+ hi def link htmlEvent htmlSpecial
+ hi def link htmlSpecialChar htmlSpecial
+
+ hi def link htmlComment Comment
+ hi def link htmlCommentPart htmlComment
+ hi def link htmlCssStyleComment htmlComment
+
+ hi def link htmlString String
+ hi def link htmlPreAttr htmlString
+ hi def link htmlValue htmlString
+
+ hi def link htmlError Error
+ hi def link htmlBadArg htmlError
+ hi def link htmlBadTag htmlError
+ hi def link htmlCommentError htmlError
+ hi def link htmlPreError htmlError
+ hi def link htmlPreProcAttrError htmlError
+ hi def link htmlTagError htmlError
+
+ hi def link htmlStatement Statement
+
+ hi def link htmlConstant Constant
+
+ hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic
+ hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic
+ hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic
+ hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic
+ hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic
+
+ hi def link htmlItalicBold htmlBoldItalic
+ hi def link htmlItalicUnderline htmlUnderlineItalic
+ hi def link htmlUnderlineBold htmlBoldUnderline
+
+ hi def link htmlLink Underlined
+
+ if !exists("html_style_rendering")
+ hi def htmlBold term=bold cterm=bold gui=bold
+ hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
+ hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
+ hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
+ hi def htmlUnderline term=underline cterm=underline gui=underline
+ hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
+ hi def htmlItalic term=italic cterm=italic gui=italic
+ endif
+endif
+
+" Wiki highlighting
+
+hi def link wikiItalic htmlItalic
+hi def link wikiBold htmlBold
+hi def link wikiBoldItalic htmlBoldItalic
+hi def link wikiItalicBold htmlBoldItalic
+hi def link wikiBoldAndItalic htmlBoldItalic
+
+hi def link wikiH1 htmlTitle
+hi def link wikiH2 htmlTitle
+hi def link wikiH3 htmlTitle
+hi def link wikiH4 htmlTitle
+hi def link wikiH5 htmlTitle
+hi def link wikiH6 htmlTitle
+
+hi def link wikiLink htmlLink
+hi def link wikiTemplate htmlSpecial
+hi def link wikiTemplateParam htmlSpecial
+hi def link wikiTemplateName Type
+hi def link wikiParaFormatChar htmlSpecial
+hi def link wikiPre htmlConstant
+hi def link wikiRef htmlComment
+
+hi def link htmlPre wikiPre
+hi def link wikiSource wikiPre
+hi def link wikiSyntaxHL wikiPre
+
+hi def link wikiTableSeparator Statement
+hi def link wikiTableFormatEnd wikiTableSeparator
+hi def link wikiTableHeadingCell htmlBold
+
+let b:current_syntax = "mediawiki"
diff --git a/runtime/syntax/mysql.vim b/runtime/syntax/mysql.vim
index 8bd7b64..49b5331 100644
--- a/runtime/syntax/mysql.vim
+++ b/runtime/syntax/mysql.vim
@@ -1,10 +1,13 @@
" Vim syntax file
" Language: mysql
" Maintainer: Kenneth J. Pronovici <pronovic@ieee.org>
-" Last Change: $LastChangedDate: 2016-04-11 10:31:04 -0500 (Mon, 11 Apr 2016) $
" Filenames: *.mysql
-" URL: ftp://cedar-solutions.com/software/mysql.vim
-" Note: The definitions below are taken from the mysql user manual as of April 2002, for version 3.23
+" URL: ftp://cedar-solutions.com/software/mysql.vim (https://github.com/pronovic/vim-syntax/blob/master/mysql.vim)
+" Note: The definitions below are taken from the mysql user manual as of April 2002, for version 3.23 and have been updated
+" in July 2024 with the docs for version 8.4
+" Last Change: 2016 Apr 11
+" 2024-07-21: update MySQL functions as of MySQL 8.4 (by Vim Project)
+"
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -92,23 +95,23 @@ syn keyword mysqlType tinytext mediumtext longtext text
syn keyword mysqlType tinyblob mediumblob longblob blob
syn region mysqlType start="float\W" end="."me=s-1
syn region mysqlType start="float$" end="."me=s-1
-syn region mysqlType start="float(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<float(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="double\W" end="."me=s-1
syn region mysqlType start="double$" end="."me=s-1
-syn region mysqlType start="double(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<double(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="double precision\W" end="."me=s-1
syn region mysqlType start="double precision$" end="."me=s-1
syn region mysqlType start="double precision(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="real\W" end="."me=s-1
syn region mysqlType start="real$" end="."me=s-1
-syn region mysqlType start="real(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType start="numeric(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<real(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<numeric(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="dec\W" end="."me=s-1
syn region mysqlType start="dec$" end="."me=s-1
-syn region mysqlType start="dec(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<dec(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="decimal\W" end="."me=s-1
syn region mysqlType start="decimal$" end="."me=s-1
-syn region mysqlType start="decimal(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<decimal(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="\Wtimestamp\W" end="."me=s-1
syn region mysqlType start="\Wtimestamp$" end="."me=s-1
syn region mysqlType start="\Wtimestamp(" end=")" contains=mysqlNumber,mysqlVariable
@@ -117,25 +120,42 @@ syn region mysqlType start="^timestamp$" end="."me=s-1
syn region mysqlType start="^timestamp(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="\Wyear(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="^year(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType start="char(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType start="varchar(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType start="enum(" end=")" contains=mysqlString,mysqlVariable
+syn region mysqlType start="\<char(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<varchar(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<enum(" end=")" contains=mysqlString,mysqlVariable
syn region mysqlType start="\Wset(" end=")" contains=mysqlString,mysqlVariable
syn region mysqlType start="^set(" end=")" contains=mysqlString,mysqlVariable
" Logical, string and numeric operators
syn keyword mysqlOperator between not and or is in like regexp rlike binary exists
-syn region mysqlOperator start="isnull(" end=")" contains=ALL
-syn region mysqlOperator start="coalesce(" end=")" contains=ALL
-syn region mysqlOperator start="interval(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<isnull(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<coalesce(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<interval(" end=")" contains=ALL
-" Control flow functions
-syn keyword mysqlFlow case when then else end
-syn region mysqlFlow start="ifnull(" end=")" contains=ALL
-syn region mysqlFlow start="nullif(" end=")" contains=ALL
-syn region mysqlFlow start="if(" end=")" contains=ALL
+" Flow control functions
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/flow-control-functions.html
+syn keyword mysqlFlowLabel case when then else end
+syn region mysqlFlowFunction start="\<ifnull(" end=")" contains=ALL
+syn region mysqlFlowFunction start="\<nullif(" end=")" contains=ALL
+syn region mysqlFlowFunction start="\<if(" end=")" contains=ALL
-" General Functions
+" Window functions
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/window-functions-usage.html
+syn keyword mysqlWindowKeyword over partition window
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/window-function-descriptions.html
+syn region mysqlWindowFunction start="\<cume_dist(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<dense_rank(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<first_value(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<lag(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<last_value(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<lead(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<nth_value(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<ntile(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<percent_rank(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<rank(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<row_number(" end=")" contains=ALL
+
+" General functions
"
" I'm leery of just defining keywords for functions, since according to the MySQL manual:
"
@@ -147,140 +167,144 @@ syn region mysqlFlow start="if(" end=")" contains=ALL
" region to define them, not just a keyword. This will probably cause the syntax file
" to load more slowly, but at least it will be 'correct'.
-syn region mysqlFunction start="abs(" end=")" contains=ALL
-syn region mysqlFunction start="acos(" end=")" contains=ALL
-syn region mysqlFunction start="adddate(" end=")" contains=ALL
-syn region mysqlFunction start="ascii(" end=")" contains=ALL
-syn region mysqlFunction start="asin(" end=")" contains=ALL
-syn region mysqlFunction start="atan(" end=")" contains=ALL
-syn region mysqlFunction start="atan2(" end=")" contains=ALL
-syn region mysqlFunction start="avg(" end=")" contains=ALL
-syn region mysqlFunction start="benchmark(" end=")" contains=ALL
-syn region mysqlFunction start="bin(" end=")" contains=ALL
-syn region mysqlFunction start="bit_and(" end=")" contains=ALL
-syn region mysqlFunction start="bit_count(" end=")" contains=ALL
-syn region mysqlFunction start="bit_or(" end=")" contains=ALL
-syn region mysqlFunction start="ceiling(" end=")" contains=ALL
-syn region mysqlFunction start="character_length(" end=")" contains=ALL
-syn region mysqlFunction start="char_length(" end=")" contains=ALL
-syn region mysqlFunction start="concat(" end=")" contains=ALL
-syn region mysqlFunction start="concat_ws(" end=")" contains=ALL
-syn region mysqlFunction start="connection_id(" end=")" contains=ALL
-syn region mysqlFunction start="conv(" end=")" contains=ALL
-syn region mysqlFunction start="cos(" end=")" contains=ALL
-syn region mysqlFunction start="cot(" end=")" contains=ALL
-syn region mysqlFunction start="count(" end=")" contains=ALL
-syn region mysqlFunction start="curdate(" end=")" contains=ALL
-syn region mysqlFunction start="curtime(" end=")" contains=ALL
-syn region mysqlFunction start="date_add(" end=")" contains=ALL
-syn region mysqlFunction start="date_format(" end=")" contains=ALL
-syn region mysqlFunction start="date_sub(" end=")" contains=ALL
-syn region mysqlFunction start="dayname(" end=")" contains=ALL
-syn region mysqlFunction start="dayofmonth(" end=")" contains=ALL
-syn region mysqlFunction start="dayofweek(" end=")" contains=ALL
-syn region mysqlFunction start="dayofyear(" end=")" contains=ALL
-syn region mysqlFunction start="decode(" end=")" contains=ALL
-syn region mysqlFunction start="degrees(" end=")" contains=ALL
-syn region mysqlFunction start="elt(" end=")" contains=ALL
-syn region mysqlFunction start="encode(" end=")" contains=ALL
-syn region mysqlFunction start="encrypt(" end=")" contains=ALL
-syn region mysqlFunction start="exp(" end=")" contains=ALL
-syn region mysqlFunction start="export_set(" end=")" contains=ALL
-syn region mysqlFunction start="extract(" end=")" contains=ALL
-syn region mysqlFunction start="field(" end=")" contains=ALL
-syn region mysqlFunction start="find_in_set(" end=")" contains=ALL
-syn region mysqlFunction start="floor(" end=")" contains=ALL
-syn region mysqlFunction start="format(" end=")" contains=ALL
-syn region mysqlFunction start="from_days(" end=")" contains=ALL
-syn region mysqlFunction start="from_unixtime(" end=")" contains=ALL
-syn region mysqlFunction start="get_lock(" end=")" contains=ALL
-syn region mysqlFunction start="greatest(" end=")" contains=ALL
-syn region mysqlFunction start="group_unique_users(" end=")" contains=ALL
-syn region mysqlFunction start="hex(" end=")" contains=ALL
-syn region mysqlFunction start="inet_aton(" end=")" contains=ALL
-syn region mysqlFunction start="inet_ntoa(" end=")" contains=ALL
-syn region mysqlFunction start="instr(" end=")" contains=ALL
-syn region mysqlFunction start="lcase(" end=")" contains=ALL
-syn region mysqlFunction start="least(" end=")" contains=ALL
-syn region mysqlFunction start="length(" end=")" contains=ALL
-syn region mysqlFunction start="load_file(" end=")" contains=ALL
-syn region mysqlFunction start="locate(" end=")" contains=ALL
-syn region mysqlFunction start="log(" end=")" contains=ALL
-syn region mysqlFunction start="log10(" end=")" contains=ALL
-syn region mysqlFunction start="lower(" end=")" contains=ALL
-syn region mysqlFunction start="lpad(" end=")" contains=ALL
-syn region mysqlFunction start="ltrim(" end=")" contains=ALL
-syn region mysqlFunction start="make_set(" end=")" contains=ALL
-syn region mysqlFunction start="master_pos_wait(" end=")" contains=ALL
-syn region mysqlFunction start="max(" end=")" contains=ALL
-syn region mysqlFunction start="md5(" end=")" contains=ALL
-syn region mysqlFunction start="mid(" end=")" contains=ALL
-syn region mysqlFunction start="min(" end=")" contains=ALL
-syn region mysqlFunction start="mod(" end=")" contains=ALL
-syn region mysqlFunction start="monthname(" end=")" contains=ALL
-syn region mysqlFunction start="now(" end=")" contains=ALL
-syn region mysqlFunction start="oct(" end=")" contains=ALL
-syn region mysqlFunction start="octet_length(" end=")" contains=ALL
-syn region mysqlFunction start="ord(" end=")" contains=ALL
-syn region mysqlFunction start="period_add(" end=")" contains=ALL
-syn region mysqlFunction start="period_diff(" end=")" contains=ALL
-syn region mysqlFunction start="pi(" end=")" contains=ALL
-syn region mysqlFunction start="position(" end=")" contains=ALL
-syn region mysqlFunction start="pow(" end=")" contains=ALL
-syn region mysqlFunction start="power(" end=")" contains=ALL
-syn region mysqlFunction start="quarter(" end=")" contains=ALL
-syn region mysqlFunction start="radians(" end=")" contains=ALL
-syn region mysqlFunction start="rand(" end=")" contains=ALL
-syn region mysqlFunction start="release_lock(" end=")" contains=ALL
-syn region mysqlFunction start="repeat(" end=")" contains=ALL
-syn region mysqlFunction start="reverse(" end=")" contains=ALL
-syn region mysqlFunction start="round(" end=")" contains=ALL
-syn region mysqlFunction start="rpad(" end=")" contains=ALL
-syn region mysqlFunction start="rtrim(" end=")" contains=ALL
-syn region mysqlFunction start="sec_to_time(" end=")" contains=ALL
-syn region mysqlFunction start="session_user(" end=")" contains=ALL
-syn region mysqlFunction start="sign(" end=")" contains=ALL
-syn region mysqlFunction start="sin(" end=")" contains=ALL
-syn region mysqlFunction start="soundex(" end=")" contains=ALL
-syn region mysqlFunction start="space(" end=")" contains=ALL
-syn region mysqlFunction start="sqrt(" end=")" contains=ALL
-syn region mysqlFunction start="std(" end=")" contains=ALL
-syn region mysqlFunction start="stddev(" end=")" contains=ALL
-syn region mysqlFunction start="strcmp(" end=")" contains=ALL
-syn region mysqlFunction start="subdate(" end=")" contains=ALL
-syn region mysqlFunction start="substring(" end=")" contains=ALL
-syn region mysqlFunction start="substring_index(" end=")" contains=ALL
-syn region mysqlFunction start="subtime(" end=")" contains=ALL
-syn region mysqlFunction start="sum(" end=")" contains=ALL
-syn region mysqlFunction start="sysdate(" end=")" contains=ALL
-syn region mysqlFunction start="system_user(" end=")" contains=ALL
-syn region mysqlFunction start="tan(" end=")" contains=ALL
-syn region mysqlFunction start="time_format(" end=")" contains=ALL
-syn region mysqlFunction start="time_to_sec(" end=")" contains=ALL
-syn region mysqlFunction start="to_days(" end=")" contains=ALL
-syn region mysqlFunction start="trim(" end=")" contains=ALL
-syn region mysqlFunction start="ucase(" end=")" contains=ALL
-syn region mysqlFunction start="unique_users(" end=")" contains=ALL
-syn region mysqlFunction start="unix_timestamp(" end=")" contains=ALL
-syn region mysqlFunction start="upper(" end=")" contains=ALL
-syn region mysqlFunction start="user(" end=")" contains=ALL
-syn region mysqlFunction start="version(" end=")" contains=ALL
-syn region mysqlFunction start="week(" end=")" contains=ALL
-syn region mysqlFunction start="weekday(" end=")" contains=ALL
-syn region mysqlFunction start="yearweek(" end=")" contains=ALL
+syn region mysqlFunction start="\<abs(" end=")" contains=ALL
+syn region mysqlFunction start="\<acos(" end=")" contains=ALL
+syn region mysqlFunction start="\<adddate(" end=")" contains=ALL
+syn region mysqlFunction start="\<ascii(" end=")" contains=ALL
+syn region mysqlFunction start="\<asin(" end=")" contains=ALL
+syn region mysqlFunction start="\<atan(" end=")" contains=ALL
+syn region mysqlFunction start="\<atan2(" end=")" contains=ALL
+syn region mysqlFunction start="\<avg(" end=")" contains=ALL
+syn region mysqlFunction start="\<benchmark(" end=")" contains=ALL
+syn region mysqlFunction start="\<bin(" end=")" contains=ALL
+syn region mysqlFunction start="\<bit_and(" end=")" contains=ALL
+syn region mysqlFunction start="\<bit_count(" end=")" contains=ALL
+syn region mysqlFunction start="\<bit_or(" end=")" contains=ALL
+syn region mysqlFunction start="\<ceiling(" end=")" contains=ALL
+syn region mysqlFunction start="\<character_length(" end=")" contains=ALL
+syn region mysqlFunction start="\<char_length(" end=")" contains=ALL
+syn region mysqlFunction start="\<concat(" end=")" contains=ALL
+syn region mysqlFunction start="\<concat_ws(" end=")" contains=ALL
+syn region mysqlFunction start="\<connection_id(" end=")" contains=ALL
+syn region mysqlFunction start="\<conv(" end=")" contains=ALL
+syn region mysqlFunction start="\<cos(" end=")" contains=ALL
+syn region mysqlFunction start="\<cot(" end=")" contains=ALL
+syn region mysqlFunction start="\<count(" end=")" contains=ALL
+syn region mysqlFunction start="\<curdate(" end=")" contains=ALL
+syn region mysqlFunction start="\<curtime(" end=")" contains=ALL
+syn region mysqlFunction start="\<date_add(" end=")" contains=ALL
+syn region mysqlFunction start="\<date_format(" end=")" contains=ALL
+syn region mysqlFunction start="\<date_sub(" end=")" contains=ALL
+syn region mysqlFunction start="\<dayname(" end=")" contains=ALL
+syn region mysqlFunction start="\<dayofmonth(" end=")" contains=ALL
+syn region mysqlFunction start="\<dayofweek(" end=")" contains=ALL
+syn region mysqlFunction start="\<dayofyear(" end=")" contains=ALL
+syn region mysqlFunction start="\<decode(" end=")" contains=ALL
+syn region mysqlFunction start="\<degrees(" end=")" contains=ALL
+syn region mysqlFunction start="\<elt(" end=")" contains=ALL
+syn region mysqlFunction start="\<encode(" end=")" contains=ALL
+syn region mysqlFunction start="\<encrypt(" end=")" contains=ALL
+syn region mysqlFunction start="\<exp(" end=")" contains=ALL
+syn region mysqlFunction start="\<export_set(" end=")" contains=ALL
+syn region mysqlFunction start="\<extract(" end=")" contains=ALL
+syn region mysqlFunction start="\<field(" end=")" contains=ALL
+syn region mysqlFunction start="\<find_in_set(" end=")" contains=ALL
+syn region mysqlFunction start="\<floor(" end=")" contains=ALL
+syn region mysqlFunction start="\<format(" end=")" contains=ALL
+syn region mysqlFunction start="\<from_days(" end=")" contains=ALL
+syn region mysqlFunction start="\<from_unixtime(" end=")" contains=ALL
+syn region mysqlFunction start="\<get_lock(" end=")" contains=ALL
+syn region mysqlFunction start="\<greatest(" end=")" contains=ALL
+syn region mysqlFunction start="\<group_unique_users(" end=")" contains=ALL
+syn region mysqlFunction start="\<hex(" end=")" contains=ALL
+syn region mysqlFunction start="\<inet_aton(" end=")" contains=ALL
+syn region mysqlFunction start="\<inet_ntoa(" end=")" contains=ALL
+syn region mysqlFunction start="\<instr(" end=")" contains=ALL
+syn region mysqlFunction start="\<lcase(" end=")" contains=ALL
+syn region mysqlFunction start="\<least(" end=")" contains=ALL
+syn region mysqlFunction start="\<length(" end=")" contains=ALL
+syn region mysqlFunction start="\<load_file(" end=")" contains=ALL
+syn region mysqlFunction start="\<locate(" end=")" contains=ALL
+syn region mysqlFunction start="\<log(" end=")" contains=ALL
+syn region mysqlFunction start="\<log10(" end=")" contains=ALL
+syn region mysqlFunction start="\<lower(" end=")" contains=ALL
+syn region mysqlFunction start="\<lpad(" end=")" contains=ALL
+syn region mysqlFunction start="\<ltrim(" end=")" contains=ALL
+syn region mysqlFunction start="\<make_set(" end=")" contains=ALL
+syn region mysqlFunction start="\<master_pos_wait(" end=")" contains=ALL
+syn region mysqlFunction start="\<max(" end=")" contains=ALL
+syn region mysqlFunction start="\<md5(" end=")" contains=ALL
+syn region mysqlFunction start="\<mid(" end=")" contains=ALL
+syn region mysqlFunction start="\<min(" end=")" contains=ALL
+syn region mysqlFunction start="\<mod(" end=")" contains=ALL
+syn region mysqlFunction start="\<monthname(" end=")" contains=ALL
+syn region mysqlFunction start="\<now(" end=")" contains=ALL
+syn region mysqlFunction start="\<oct(" end=")" contains=ALL
+syn region mysqlFunction start="\<octet_length(" end=")" contains=ALL
+syn region mysqlFunction start="\<ord(" end=")" contains=ALL
+syn region mysqlFunction start="\<period_add(" end=")" contains=ALL
+syn region mysqlFunction start="\<period_diff(" end=")" contains=ALL
+syn region mysqlFunction start="\<pi(" end=")" contains=ALL
+syn region mysqlFunction start="\<position(" end=")" contains=ALL
+syn region mysqlFunction start="\<pow(" end=")" contains=ALL
+syn region mysqlFunction start="\<power(" end=")" contains=ALL
+syn region mysqlFunction start="\<quarter(" end=")" contains=ALL
+syn region mysqlFunction start="\<radians(" end=")" contains=ALL
+syn region mysqlFunction start="\<rand(" end=")" contains=ALL
+syn region mysqlFunction start="\<release_lock(" end=")" contains=ALL
+syn region mysqlFunction start="\<repeat(" end=")" contains=ALL
+syn region mysqlFunction start="\<reverse(" end=")" contains=ALL
+syn region mysqlFunction start="\<round(" end=")" contains=ALL
+syn region mysqlFunction start="\<rpad(" end=")" contains=ALL
+syn region mysqlFunction start="\<rtrim(" end=")" contains=ALL
+syn region mysqlFunction start="\<sec_to_time(" end=")" contains=ALL
+syn region mysqlFunction start="\<session_user(" end=")" contains=ALL
+syn region mysqlFunction start="\<sign(" end=")" contains=ALL
+syn region mysqlFunction start="\<sin(" end=")" contains=ALL
+syn region mysqlFunction start="\<soundex(" end=")" contains=ALL
+syn region mysqlFunction start="\<space(" end=")" contains=ALL
+syn region mysqlFunction start="\<sqrt(" end=")" contains=ALL
+syn region mysqlFunction start="\<std(" end=")" contains=ALL
+syn region mysqlFunction start="\<stddev(" end=")" contains=ALL
+syn region mysqlFunction start="\<strcmp(" end=")" contains=ALL
+syn region mysqlFunction start="\<subdate(" end=")" contains=ALL
+syn region mysqlFunction start="\<substring(" end=")" contains=ALL
+syn region mysqlFunction start="\<substring_index(" end=")" contains=ALL
+syn region mysqlFunction start="\<subtime(" end=")" contains=ALL
+syn region mysqlFunction start="\<sum(" end=")" contains=ALL
+syn region mysqlFunction start="\<sysdate(" end=")" contains=ALL
+syn region mysqlFunction start="\<system_user(" end=")" contains=ALL
+syn region mysqlFunction start="\<tan(" end=")" contains=ALL
+syn region mysqlFunction start="\<time_format(" end=")" contains=ALL
+syn region mysqlFunction start="\<time_to_sec(" end=")" contains=ALL
+syn region mysqlFunction start="\<to_days(" end=")" contains=ALL
+syn region mysqlFunction start="\<trim(" end=")" contains=ALL
+syn region mysqlFunction start="\<ucase(" end=")" contains=ALL
+syn region mysqlFunction start="\<unique_users(" end=")" contains=ALL
+syn region mysqlFunction start="\<unix_timestamp(" end=")" contains=ALL
+syn region mysqlFunction start="\<upper(" end=")" contains=ALL
+syn region mysqlFunction start="\<user(" end=")" contains=ALL
+syn region mysqlFunction start="\<version(" end=")" contains=ALL
+syn region mysqlFunction start="\<week(" end=")" contains=ALL
+syn region mysqlFunction start="\<weekday(" end=")" contains=ALL
+syn region mysqlFunction start="\<yearweek(" end=")" contains=ALL
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
-hi def link mysqlKeyword Statement
+hi def link mysqlKeyword Keyword
hi def link mysqlSpecial Special
hi def link mysqlString String
hi def link mysqlNumber Number
hi def link mysqlVariable Identifier
hi def link mysqlComment Comment
hi def link mysqlType Type
-hi def link mysqlOperator Statement
-hi def link mysqlFlow Statement
+hi def link mysqlOperator Operator
+hi def link mysqlOperatorFunction Function
+hi def link mysqlFlowFunction Function
+hi def link mysqlFlowLabel Label
+hi def link mysqlWindowFunction Function
+hi def link mysqlWindowKeyword Keyword
hi def link mysqlFunction Function
diff --git a/runtime/syntax/ocaml.vim b/runtime/syntax/ocaml.vim
index af3efd3..04ba392 100644
--- a/runtime/syntax/ocaml.vim
+++ b/runtime/syntax/ocaml.vim
@@ -6,6 +6,7 @@
" Issac Trotts <ijtrotts@ucdavis.edu>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
+" 2019 Nov 05 - Accurate type highlighting (Maëlan)
" 2018 Nov 08 - Improved highlighting of operators (Maëlan)
" 2018 Apr 22 - Improved support for PPX (Andrey Popp)
" 2018 Mar 16 - Remove raise, lnot and not from keywords (Étienne Millon, "copy")
@@ -38,25 +39,18 @@ syn case match
" Access to the method of an object
syn match ocamlMethod "#"
-" Script headers highlighted like comments
-syn match ocamlComment "^#!.*" contains=@Spell
-
" Scripting directives
syn match ocamlScript "^#\<\(quit\|labels\|warnings\|warn_error\|directory\|remove_directory\|cd\|load\|load_rec\|use\|mod_use\|install_printer\|remove_printer\|require\|list\|ppx\|principal\|predicates\|rectypes\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\|camlp4o\|camlp4r\|topfind_log\|topfind_verbose\)\>"
" lowercase identifier - the standard way to match
syn match ocamlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
-syn match ocamlKeyChar "|"
-
" Errors
syn match ocamlBraceErr "}"
syn match ocamlBrackErr "\]"
syn match ocamlParenErr ")"
syn match ocamlArrErr "|]"
-syn match ocamlCommentErr "\*)"
-
syn match ocamlCountErr "\<downto\>"
syn match ocamlCountErr "\<to\>"
@@ -75,19 +69,22 @@ else
syn match ocamlEndErr "\<end\>"
endif
-" Some convenient clusters
-syn cluster ocamlAllErrs contains=ocamlBraceErr,ocamlBrackErr,ocamlParenErr,ocamlCommentErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr
+" These keywords are only expected nested in constructions that are handled by
+" the type linter, so outside of type contexts we highlight them as errors:
+syn match ocamlKwErr "\<\(mutable\|nonrec\|of\|private\)\>"
-syn cluster ocamlAENoParen contains=ocamlBraceErr,ocamlBrackErr,ocamlCommentErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr
+" Some convenient clusters
+syn cluster ocamlAllErrs contains=@ocamlAENoParen,ocamlParenErr
+syn cluster ocamlAENoParen contains=ocamlBraceErr,ocamlBrackErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr,ocamlKwErr
-syn cluster ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlMPRestr,ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3,ocamlModRHS,ocamlFuncWith,ocamlFuncStruct,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlModType,ocamlFullMod,ocamlVal
+syn cluster ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlModTypePre,ocamlModRHS,ocamlFuncWith,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlFullMod,ocamlVal
" Enclosing delimiters
-syn region ocamlEncl transparent matchgroup=ocamlKeyword start="(" matchgroup=ocamlKeyword end=")" contains=ALLBUT,@ocamlContained,ocamlParenErr
-syn region ocamlEncl transparent matchgroup=ocamlKeyword start="{" matchgroup=ocamlKeyword end="}" contains=ALLBUT,@ocamlContained,ocamlBraceErr
-syn region ocamlEncl transparent matchgroup=ocamlKeyword start="\[" matchgroup=ocamlKeyword end="\]" contains=ALLBUT,@ocamlContained,ocamlBrackErr
-syn region ocamlEncl transparent matchgroup=ocamlKeyword start="\[|" matchgroup=ocamlKeyword end="|\]" contains=ALLBUT,@ocamlContained,ocamlArrErr
+syn region ocamlNone transparent matchgroup=ocamlEncl start="(" matchgroup=ocamlEncl end=")" contains=ALLBUT,@ocamlContained,ocamlParenErr
+syn region ocamlNone transparent matchgroup=ocamlEncl start="{" matchgroup=ocamlEncl end="}" contains=ALLBUT,@ocamlContained,ocamlBraceErr
+syn region ocamlNone transparent matchgroup=ocamlEncl start="\[" matchgroup=ocamlEncl end="\]" contains=ALLBUT,@ocamlContained,ocamlBrackErr
+syn region ocamlNone transparent matchgroup=ocamlEncl start="\[|" matchgroup=ocamlEncl end="|\]" contains=ALLBUT,@ocamlContained,ocamlArrErr
" Comments
@@ -124,10 +121,6 @@ syn region ocamlPpx matchgroup=ocamlPpxEncl start="\[@\{1,3\}" contains=TOP end=
"" Modules
-" "sig"
-syn region ocamlSig matchgroup=ocamlSigEncl start="\<sig\>" matchgroup=ocamlSigEncl end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
-syn region ocamlModSpec matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contained contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlModTRWith,ocamlMPRestr
-
" "open"
syn match ocamlKeyword "\<open\>" skipwhite skipempty nextgroup=ocamlFullMod
@@ -135,51 +128,66 @@ syn match ocamlKeyword "\<open\>" skipwhite skipempty nextgroup=ocamlFullMod
syn match ocamlKeyword "\<include\>" skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
" "module" - somewhat complicated stuff ;-)
-syn region ocamlModule matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlPreDef
-syn region ocamlPreDef start="."me=e-1 matchgroup=ocamlKeyword end="\l\|=\|)"me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlGenMod,ocamlModTypeRestr,ocamlModTRWith nextgroup=ocamlModPreRHS
-syn region ocamlModParam start="([^*]" end=")" contained contains=ocamlGenMod,ocamlModParam1,ocamlSig,ocamlVal
+" 2022-10: please document it?
+syn region ocamlModule matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<_\|\u\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlPreDef
+syn region ocamlPreDef start="."me=e-1 end="[a-z:=)]\@=" contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlGenMod,ocamlModTypeRestr nextgroup=ocamlModTypePre,ocamlModPreRHS
+syn region ocamlModParam start="(\*\@!" end=")" contained contains=ocamlGenMod,ocamlModParam,ocamlModParam1,ocamlSig,ocamlVal
syn match ocamlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty
syn match ocamlGenMod "()" contained skipwhite skipempty
-syn region ocamlMPRestr start=":" end="."me=e-1 contained contains=@ocamlComment skipwhite skipempty nextgroup=ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3
-syn region ocamlMPRestr1 matchgroup=ocamlSigEncl start="\ssig\s\=" matchgroup=ocamlSigEncl end="\<end\>" contained contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
-syn region ocamlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=ocamlKeyword end="->" contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlGenMod skipwhite skipempty nextgroup=ocamlFuncWith,ocamlMPRestr2
-syn match ocamlMPRestr3 "\w\(\w\|'\)*\( *\. *\w\(\w\|'\)*\)*" contained
+syn match ocamlModTypePre ":" contained skipwhite skipempty nextgroup=ocamlModTRWith,ocamlSig,ocamlFunctor,ocamlModTypeRestr,ocamlModTypeOf
+syn match ocamlModTypeRestr "\<\w\(\w\|'\)*\( *\. *\w\(\w\|'\)*\)*\>" contained
+
syn match ocamlModPreRHS "=" contained skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
syn keyword ocamlKeyword val
-syn region ocamlVal matchgroup=ocamlKeyword start="\<val\>" matchgroup=ocamlLCIdentifier end="\<\l\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment,ocamlFullMod skipwhite skipempty nextgroup=ocamlMPRestr
+syn region ocamlVal matchgroup=ocamlKeyword start="\<val\>" matchgroup=ocamlLCIdentifier end="\<\l\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment,ocamlFullMod skipwhite skipempty nextgroup=ocamlModTypePre
syn region ocamlModRHS start="." end=". *\w\|([^*]"me=e-2 contained contains=ocamlComment skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
syn match ocamlFullMod "\<\u\(\w\|'\)*\( *\. *\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=ocamlFuncWith
-syn region ocamlFuncWith start="([^*)]"me=e-1 end=")" contained contains=ocamlComment,ocamlWith,ocamlFuncStruct skipwhite skipempty nextgroup=ocamlFuncWith
-syn region ocamlFuncStruct matchgroup=ocamlStructEncl start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=ocamlStructEncl end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+syn region ocamlFuncWith start="([*)]\@!" end=")" contained contains=ocamlComment,ocamlWith,ocamlStruct skipwhite skipempty nextgroup=ocamlFuncWith
-syn match ocamlModTypeRestr "\<\w\(\w\|'\)*\( *\. *\w\(\w\|'\)*\)*\>" contained
-syn region ocamlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@ocamlAENoParen,ocamlWith
+syn region ocamlModTRWith start="(\*\@!" end=")" contained contains=@ocamlAENoParen,ocamlWith
syn match ocamlWith "\<\(\u\(\w\|'\)* *\. *\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlWithRest
syn region ocamlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@ocamlContained
" "struct"
syn region ocamlStruct matchgroup=ocamlStructEncl start="\<\(module\s\+\)\=struct\>" matchgroup=ocamlStructEncl end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+" "sig"
+syn region ocamlSig matchgroup=ocamlSigEncl start="\<sig\>" matchgroup=ocamlSigEncl end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+
+" "functor"
+syn region ocamlFunctor start="\<functor\>" matchgroup=ocamlKeyword end="->" contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlGenMod skipwhite skipempty nextgroup=ocamlStruct,ocamlSig,ocamlFuncWith,ocamlFunctor
+
" "module type"
-syn region ocamlKeyword start="\<module\>\s*\<type\>\(\s*\<of\>\)\=" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
+syn region ocamlModTypeOf start="\<module\s\+type\(\s\+of\)\=\>" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
syn match ocamlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s+1 skipwhite skipempty nextgroup=ocamlFullMod
" Quoted strings
syn region ocamlString matchgroup=ocamlQuotedStringDelim start="{\z\([a-z_]*\)|" end="|\z1}" contains=@Spell
+syn region ocamlString matchgroup=ocamlQuotedStringDelim start="{%[a-z_]\+\(\.[a-z_]\+\)\?\( \z\([a-z_]\+\)\)\?|" end="|\z1}" contains=@Spell
syn keyword ocamlKeyword and as assert class
-syn keyword ocamlKeyword constraint else
-syn keyword ocamlKeyword exception external fun
-
+syn keyword ocamlKeyword else
+syn keyword ocamlKeyword external
syn keyword ocamlKeyword in inherit initializer
syn keyword ocamlKeyword lazy let match
-syn keyword ocamlKeyword method mutable new nonrec of
-syn keyword ocamlKeyword parser private rec
-syn keyword ocamlKeyword try type
+syn keyword ocamlKeyword method new
+syn keyword ocamlKeyword parser rec
+syn keyword ocamlKeyword try
syn keyword ocamlKeyword virtual when while with
+" Keywords which are handled by the type linter:
+" as (within a type equation)
+" constraint exception mutable nonrec of private type
+
+" The `fun` keyword has special treatment because of the syntax `fun … : t -> e`
+" where `->` ends the type context rather than being part of it; to handle that,
+" we blacklist the ocamlTypeAnnot matchgroup, and we plug ocamlFunTypeAnnot
+" instead (later in this file, by using containedin=ocamlFun):
+syn region ocamlFun matchgroup=ocamlKeyword start='\<fun\>' matchgroup=ocamlArrow end='->'
+\ contains=ALLBUT,@ocamlContained,ocamlArrow,ocamlInfixOp,ocamlTypeAnnot
+
if exists("ocaml_revised")
syn keyword ocamlKeyword do value
syn keyword ocamlBoolean True False
@@ -188,14 +196,10 @@ else
syn keyword ocamlBoolean true false
endif
-syn keyword ocamlType array bool char exn float format format4
-syn keyword ocamlType int int32 int64 lazy_t list nativeint option
-syn keyword ocamlType bytes string unit
-
-syn match ocamlConstructor "(\s*)"
-syn match ocamlConstructor "\[\s*\]"
-syn match ocamlConstructor "\[|\s*>|]"
-syn match ocamlConstructor "\[<\s*>\]"
+syn match ocamlEmptyConstructor "(\s*)"
+syn match ocamlEmptyConstructor "\[\s*\]"
+syn match ocamlEmptyConstructor "\[|\s*>|]"
+syn match ocamlEmptyConstructor "\[<\s*>\]"
syn match ocamlConstructor "\u\(\w\|'\)*\>"
" Polymorphic variants
@@ -210,26 +214,24 @@ syn match ocamlCharErr "'\\\d\d'\|'\\\d'"
syn match ocamlCharErr "'\\[^\'ntbr]'"
syn region ocamlString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell
-syn match ocamlTopStop ";;"
-
syn match ocamlAnyVar "\<_\>"
-syn match ocamlKeyChar "|[^\]]"me=e-1
+syn match ocamlKeyChar "|]\@!"
syn match ocamlKeyChar ";"
syn match ocamlKeyChar "\~"
syn match ocamlKeyChar "?"
+" NOTE: for correct precedence, the rule for ";;" must come after that for ";"
+syn match ocamlTopStop ";;"
+
"" Operators
" The grammar of operators is found there:
" https://caml.inria.fr/pub/docs/manual-ocaml/names.html#operator-name
" https://caml.inria.fr/pub/docs/manual-ocaml/extn.html#s:ext-ops
" https://caml.inria.fr/pub/docs/manual-ocaml/extn.html#s:index-operators
-" =, *, < and > are both operator names and keywords, we let the user choose how
-" to display them (has to be declared before regular infix operators):
+" = is both an operator name and a keyword, we let the user choose how
+" to display it (has to be declared before regular infix operators):
syn match ocamlEqual "="
-syn match ocamlStar "*"
-syn match ocamlAngle "<"
-syn match ocamlAngle ">"
" Custom indexing operators:
syn region ocamlIndexing matchgroup=ocamlIndexingOp
\ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*("
@@ -248,8 +250,8 @@ syn match ocamlExtensionOp "#[#~?!.:|&$%<=>@^*/+-]\+"
" Infix and prefix operators:
syn match ocamlPrefixOp "![~?!.:|&$%<=>@^*/+-]*"
syn match ocamlPrefixOp "[~?][~?!.:|&$%<=>@^*/+-]\+"
-syn match ocamlInfixOp "[&$%@^/+-][~?!.:|&$%<=>@^*/+-]*"
-syn match ocamlInfixOp "[|<=>*][~?!.:|&$%<=>@^*/+-]\+"
+syn match ocamlInfixOp "[&$%<>@^*/+-][~?!.:|&$%<=>@^*/+-]*"
+syn match ocamlInfixOp "[|=][~?!.:|&$%<=>@^*/+-]\+"
syn match ocamlInfixOp "#[~?!.:|&$%<=>@^*/+-]\+#\@!"
syn match ocamlInfixOp "!=[~?!.:|&$%<=>@^*/+-]\@!"
syn keyword ocamlInfixOpKeyword asr land lor lsl lsr lxor mod or
@@ -266,6 +268,9 @@ else
syn match ocamlKeyChar "<-[~?!.:|&$%<=>@^*/+-]\@!"
endif
+" Script shebang (has to be declared after operators)
+syn match ocamlShebang "\%1l^#!.*$"
+
syn match ocamlNumber "-\=\<\d\(_\|\d\)*[l|L|n]\?\>"
syn match ocamlNumber "-\=\<0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
syn match ocamlNumber "-\=\<0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
@@ -273,10 +278,264 @@ syn match ocamlNumber "-\=\<0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
syn match ocamlFloat "-\=\<\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
" Labels
-syn match ocamlLabel "\~\(\l\|_\)\(\w\|'\)*"lc=1
-syn match ocamlLabel "?\(\l\|_\)\(\w\|'\)*"lc=1
+syn match ocamlLabel "[~?]\(\l\|_\)\(\w\|'\)*:\?"
syn region ocamlLabel transparent matchgroup=ocamlLabel start="[~?](\(\l\|_\)\(\w\|'\)*"lc=2 end=")"me=e-1 contains=ALLBUT,@ocamlContained,ocamlParenErr
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+"" Type contexts
+
+" How we recognize type contexts is explained in `type-linter-notes.md`
+" and a test suite is found in `type-linter-test.ml`.
+"
+" ocamlTypeExpr is the cluster of things that can make up a type expression
+" (in a loose sense, e.g. the “as†keyword and universal quantification are
+" included). Regions containing a type expression use it like this:
+"
+" contains=@ocamlTypeExpr,...
+"
+" ocamlTypeContained is the cluster of things that can be found in a type
+" expression or a type definition. It is not expected to be used in any region,
+" it exists solely for throwing things in it that should not pollute the main
+" linter.
+"
+" Both clusters are filled in incrementally. Every match group that is not to be
+" found at the main level must be declared as “contained†and added to either
+" ocamlTypeExpr or ocamlTypeContained.
+"
+" In these clusters we don’t put generic things that can also be found elswhere,
+" i.e. ocamlComment and ocamlPpx, because everything that is in these clusters
+" is also put in ocamlContained and thus ignored by the main linter.
+
+"syn cluster ocamlTypeExpr contains=
+syn cluster ocamlTypeContained contains=@ocamlTypeExpr
+syn cluster ocamlContained add=@ocamlTypeContained
+
+" We’ll use a “catch-all†highlighting group to show as error anything that is
+" not matched more specifically; we don’t want spaces to be reported as errors
+" (different background color), so we just catch them here:
+syn cluster ocamlTypeExpr add=ocamlTypeBlank
+syn match ocamlTypeBlank contained "\_s\+"
+hi link ocamlTypeBlank NONE
+
+" NOTE: Carefully avoid catching "(*" here.
+syn cluster ocamlTypeExpr add=ocamlTypeParen
+syn region ocamlTypeParen contained transparent
+\ matchgroup=ocamlEncl start="(\*\@!"
+\ matchgroup=ocamlEncl end=")"
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+
+syn cluster ocamlTypeExpr add=ocamlTypeKeyChar,ocamlTypeAs
+syn match ocamlTypeKeyChar contained "->"
+syn match ocamlTypeKeyChar contained "\*"
+syn match ocamlTypeKeyChar contained "#"
+syn match ocamlTypeKeyChar contained ","
+syn match ocamlTypeKeyChar contained "\."
+syn keyword ocamlTypeAs contained as
+hi link ocamlTypeAs ocamlKeyword
+
+syn cluster ocamlTypeExpr add=ocamlTypeVariance
+syn match ocamlTypeVariance contained "[-+!]\ze *\('\|\<_\>\)"
+syn match ocamlTypeVariance contained "[-+] *!\+\ze *\('\|\<_\>\)"
+syn match ocamlTypeVariance contained "! *[-+]\+\ze *\('\|\<_\>\)"
+
+syn cluster ocamlTypeContained add=ocamlTypeEq
+syn match ocamlTypeEq contained "[+:]\?="
+hi link ocamlTypeEq ocamlKeyChar
+
+syn cluster ocamlTypeExpr add=ocamlTypeVar,ocamlTypeConstr,ocamlTypeAnyVar,ocamlTypeBuiltin
+syn match ocamlTypeVar contained "'\(\l\|_\)\(\w\|'\)*\>"
+syn match ocamlTypeConstr contained "\<\(\l\|_\)\(\w\|'\)*\>"
+" NOTE: for correct precedence, the rule for the wildcard (ocamlTypeAnyVar)
+" must come after the rule for type constructors (ocamlTypeConstr).
+syn match ocamlTypeAnyVar contained "\<_\>"
+" NOTE: For correct precedence, these builtin names must occur after the rule
+" for type constructors (ocamlTypeConstr) but before the rule for non-optional
+" labeled arguments (ocamlTypeLabel). For the latter to take precedence over
+" these builtin names, we use “syn match†here instead of “syn keywordâ€.
+syn match ocamlTypeBuiltin contained "\<array\>"
+syn match ocamlTypeBuiltin contained "\<bool\>"
+syn match ocamlTypeBuiltin contained "\<bytes\>"
+syn match ocamlTypeBuiltin contained "\<char\>"
+syn match ocamlTypeBuiltin contained "\<exn\>"
+syn match ocamlTypeBuiltin contained "\<float\>"
+syn match ocamlTypeBuiltin contained "\<format\>"
+syn match ocamlTypeBuiltin contained "\<format4\>"
+syn match ocamlTypeBuiltin contained "\<format6\>"
+syn match ocamlTypeBuiltin contained "\<in_channel\>"
+syn match ocamlTypeBuiltin contained "\<int\>"
+syn match ocamlTypeBuiltin contained "\<int32\>"
+syn match ocamlTypeBuiltin contained "\<int64\>"
+syn match ocamlTypeBuiltin contained "\<lazy_t\>"
+syn match ocamlTypeBuiltin contained "\<list\>"
+syn match ocamlTypeBuiltin contained "\<nativeint\>"
+syn match ocamlTypeBuiltin contained "\<option\>"
+syn match ocamlTypeBuiltin contained "\<out_channel\>"
+syn match ocamlTypeBuiltin contained "\<ref\>"
+syn match ocamlTypeBuiltin contained "\<result\>"
+syn match ocamlTypeBuiltin contained "\<scanner\>"
+syn match ocamlTypeBuiltin contained "\<string\>"
+syn match ocamlTypeBuiltin contained "\<unit\>"
+
+syn cluster ocamlTypeExpr add=ocamlTypeLabel
+syn match ocamlTypeLabel contained "?\?\(\l\|_\)\(\w\|'\)*\_s*:[>=]\@!"
+hi link ocamlTypeLabel ocamlLabel
+
+" Object type
+syn cluster ocamlTypeExpr add=ocamlTypeObject
+syn region ocamlTypeObject contained
+\ matchgroup=ocamlEncl start="<"
+\ matchgroup=ocamlEncl end=">"
+\ contains=ocamlTypeObjectDots,ocamlLCIdentifier,ocamlTypeObjectAnnot,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeObject ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeObjectDots
+syn match ocamlTypeObjectDots contained "\.\."
+hi link ocamlTypeObjectDots ocamlKeyChar
+syn cluster ocamlTypeContained add=ocamlTypeObjectAnnot
+syn region ocamlTypeObjectAnnot contained
+\ matchgroup=ocamlKeyChar start=":"
+\ matchgroup=ocamlKeyChar end=";\|>\@="
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+hi link ocamlTypeObjectAnnot ocamlTypeCatchAll
+
+" Record type definition
+syn cluster ocamlTypeContained add=ocamlTypeRecordDecl
+syn region ocamlTypeRecordDecl contained
+\ matchgroup=ocamlEncl start="{"
+\ matchgroup=ocamlEncl end="}"
+\ contains=ocamlTypeMutable,ocamlLCIdentifier,ocamlTypeRecordAnnot,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeRecordDecl ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeMutable
+syn keyword ocamlTypeMutable contained mutable
+hi link ocamlTypeMutable ocamlKeyword
+syn cluster ocamlTypeContained add=ocamlTypeRecordAnnot
+syn region ocamlTypeRecordAnnot contained
+\ matchgroup=ocamlKeyChar start=":"
+\ matchgroup=ocamlKeyChar end=";\|}\@="
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+hi link ocamlTypeRecordAnnot ocamlTypeCatchAll
+
+" Polymorphic variant types
+" NOTE: Carefully avoid catching "[@" here.
+syn cluster ocamlTypeExpr add=ocamlTypeVariant
+syn region ocamlTypeVariant contained
+\ matchgroup=ocamlEncl start="\[>" start="\[<" start="\[@\@!"
+\ matchgroup=ocamlEncl end="\]"
+\ contains=ocamlTypeVariantKeyChar,ocamlTypeVariantConstr,ocamlTypeVariantAnnot,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeVariant ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeVariantKeyChar
+syn match ocamlTypeVariantKeyChar contained "|"
+syn match ocamlTypeVariantKeyChar contained ">"
+hi link ocamlTypeVariantKeyChar ocamlKeyChar
+syn cluster ocamlTypeContained add=ocamlTypeVariantConstr
+syn match ocamlTypeVariantConstr contained "`\w\(\w\|'\)*\>"
+hi link ocamlTypeVariantConstr ocamlConstructor
+syn cluster ocamlTypeContained add=ocamlTypeVariantAnnot
+syn region ocamlTypeVariantAnnot contained
+\ matchgroup=ocamlKeyword start="\<of\>"
+\ matchgroup=ocamlKeyChar end="|\|>\|\]\@="
+\ contains=@ocamlTypeExpr,ocamlTypeAmp,ocamlComment,ocamlPpx
+hi link ocamlTypeVariantAnnot ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeAmp
+syn match ocamlTypeAmp contained "&"
+hi link ocamlTypeAmp ocamlTypeKeyChar
+
+" Sum type definition
+syn cluster ocamlTypeContained add=ocamlTypeSumDecl
+syn region ocamlTypeSumDecl contained
+\ matchgroup=ocamlTypeSumBar start="|"
+\ matchgroup=ocamlTypeSumConstr start="\<\u\(\w\|'\)*\>"
+\ matchgroup=ocamlTypeSumConstr start="\<false\>" start="\<true\>"
+\ matchgroup=ocamlTypeSumConstr start="(\_s*)" start="\[\_s*]" start="(\_s*::\_s*)"
+\ matchgroup=NONE end="\(\<type\>\|\<exception\>\|\<val\>\|\<module\>\|\<class\>\|\<method\>\|\<constraint\>\|\<inherit\>\|\<object\>\|\<struct\>\|\<open\>\|\<include\>\|\<let\>\|\<external\>\|\<in\>\|\<end\>\|)\|]\|}\|;\|;;\|=\)\@="
+\ matchgroup=NONE end="\(\<and\>\)\@="
+\ contains=ocamlTypeSumBar,ocamlTypeSumConstr,ocamlTypeSumAnnot,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeSumDecl ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeSumBar
+syn match ocamlTypeSumBar contained "|"
+hi link ocamlTypeSumBar ocamlKeyChar
+syn cluster ocamlTypeContained add=ocamlTypeSumConstr
+syn match ocamlTypeSumConstr contained "\<\u\(\w\|'\)*\>"
+syn match ocamlTypeSumConstr contained "\<false\>"
+syn match ocamlTypeSumConstr contained "\<true\>"
+syn match ocamlTypeSumConstr contained "(\_s*)"
+syn match ocamlTypeSumConstr contained "\[\_s*]"
+syn match ocamlTypeSumConstr contained "(\_s*::\_s*)"
+hi link ocamlTypeSumConstr ocamlConstructor
+syn cluster ocamlTypeContained add=ocamlTypeSumAnnot
+syn region ocamlTypeSumAnnot contained
+\ matchgroup=ocamlKeyword start="\<of\>"
+\ matchgroup=ocamlKeyChar start=":"
+\ matchgroup=NONE end="|\@="
+\ matchgroup=NONE end="\(\<type\>\|\<exception\>\|\<val\>\|\<module\>\|\<class\>\|\<method\>\|\<constraint\>\|\<inherit\>\|\<object\>\|\<struct\>\|\<open\>\|\<include\>\|\<let\>\|\<external\>\|\<in\>\|\<end\>\|)\|]\|}\|;\|;;\)\@="
+\ matchgroup=NONE end="\(\<and\>\)\@="
+\ contains=@ocamlTypeExpr,ocamlTypeRecordDecl,ocamlComment,ocamlPpx
+hi link ocamlTypeSumAnnot ocamlTypeCatchAll
+
+" Type context opened by “type†(type definition), “constraint†(type
+" constraint) and “exception†(exception definition)
+syn region ocamlTypeDef
+\ matchgroup=ocamlKeyword start="\<type\>\(\_s\+\<nonrec\>\)\?\|\<constraint\>\|\<exception\>"
+\ matchgroup=NONE end="\(\<type\>\|\<exception\>\|\<val\>\|\<module\>\|\<class\>\|\<method\>\|\<constraint\>\|\<inherit\>\|\<object\>\|\<struct\>\|\<open\>\|\<include\>\|\<let\>\|\<external\>\|\<in\>\|\<end\>\|)\|]\|}\|;\|;;\)\@="
+\ contains=@ocamlTypeExpr,ocamlTypeEq,ocamlTypePrivate,ocamlTypeDefDots,ocamlTypeRecordDecl,ocamlTypeSumDecl,ocamlTypeDefAnd,ocamlComment,ocamlPpx
+hi link ocamlTypeDef ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypePrivate
+syn keyword ocamlTypePrivate contained private
+hi link ocamlTypePrivate ocamlKeyword
+syn cluster ocamlTypeContained add=ocamlTypeDefAnd
+syn keyword ocamlTypeDefAnd contained and
+hi link ocamlTypeDefAnd ocamlKeyword
+syn cluster ocamlTypeContained add=ocamlTypeDefDots
+syn match ocamlTypeDefDots contained "\.\."
+hi link ocamlTypeDefDots ocamlKeyChar
+
+" When "exception" is preceded by "with", "|" or "(", that’s not an exception
+" definition but an exception pattern; we simply highlight the keyword without
+" starting a type context.
+" NOTE: These rules must occur after that for "exception".
+syn match ocamlKeyword "\<with\_s\+exception\>"lc=4
+syn match ocamlKeyword "|\_s*exception\>"lc=1
+syn match ocamlKeyword "(\_s*exception\>"lc=1
+
+" Type context opened by “:†(countless kinds of type annotations) and “:>â€
+" (type coercions)
+syn region ocamlTypeAnnot matchgroup=ocamlKeyChar start=":\(>\|\_s*type\>\|[>:=]\@!\)"
+\ matchgroup=NONE end="\(\<type\>\|\<exception\>\|\<val\>\|\<module\>\|\<class\>\|\<method\>\|\<constraint\>\|\<inherit\>\|\<object\>\|\<struct\>\|\<open\>\|\<include\>\|\<let\>\|\<external\>\|\<in\>\|\<end\>\|)\|]\|}\|;\|;;\)\@="
+\ matchgroup=NONE end="\(;\|}\)\@="
+\ matchgroup=NONE end="\(=\|:>\)\@="
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+hi link ocamlTypeAnnot ocamlTypeCatchAll
+
+" Type annotation that gives the return type of a `fun` keyword
+" (the type context is ended by `->`)
+syn cluster ocamlTypeContained add=ocamlFunTypeAnnot
+syn region ocamlFunTypeAnnot contained containedin=ocamlFun
+\ matchgroup=ocamlKeyChar start=":"
+\ matchgroup=NONE end="\(->\)\@="
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+hi link ocamlFunTypeAnnot ocamlTypeCatchAll
+
+" Module paths (including functors) in types.
+" NOTE: This rule must occur after the rule for ocamlTypeSumDecl as it must take
+" precedence over it (otherwise the module name would be mistakenly highlighted
+" as a constructor).
+" NOTE: Carefully avoid catching "(*" here.
+syn cluster ocamlTypeExpr add=ocamlTypeModPath
+syn match ocamlTypeModPath contained "\<\u\(\w\|'\)*\_s*\."
+syn region ocamlTypeModPath contained transparent
+\ matchgroup=ocamlModPath start="\<\u\(\w\|'\)*\_s*(\*\@!"
+\ matchgroup=ocamlModPath end=")\_s*\."
+\ contains=ocamlTypeDotlessModPath,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeModPath ocamlModPath
+syn cluster ocamlTypeContained add=ocamlTypeDotlessModPath
+syn match ocamlTypeDotlessModPath contained "\<\u\(\w\|'\)*\_s*\.\?"
+syn region ocamlTypeDotlessModPath contained transparent
+\ matchgroup=ocamlModPath start="\<\u\(\w\|'\)*\_s*(\*\@!"
+\ matchgroup=ocamlModPath end=")\_s*\.\?"
+\ contains=ocamlTypeDotlessModPath,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeDotlessModPath ocamlTypeModPath
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Synchronization
syn sync minlines=50
@@ -306,27 +565,25 @@ hi def link ocamlBrackErr Error
hi def link ocamlParenErr Error
hi def link ocamlArrErr Error
-hi def link ocamlCommentErr Error
-
hi def link ocamlCountErr Error
hi def link ocamlDoErr Error
hi def link ocamlDoneErr Error
hi def link ocamlEndErr Error
hi def link ocamlThenErr Error
+hi def link ocamlKwErr Error
hi def link ocamlCharErr Error
hi def link ocamlErr Error
hi def link ocamlComment Comment
+hi def link ocamlShebang ocamlComment
hi def link ocamlModPath Include
hi def link ocamlObject Include
hi def link ocamlModule Include
hi def link ocamlModParam1 Include
hi def link ocamlGenMod Include
-hi def link ocamlModType Include
-hi def link ocamlMPRestr3 Include
hi def link ocamlFullMod Include
hi def link ocamlFuncWith Include
hi def link ocamlModParam Include
@@ -339,10 +596,13 @@ hi def link ocamlStructEncl ocamlModule
hi def link ocamlScript Include
hi def link ocamlConstructor Constant
+hi def link ocamlEmptyConstructor ocamlConstructor
hi def link ocamlVal Keyword
+hi def link ocamlModTypePre Keyword
hi def link ocamlModPreRHS Keyword
-hi def link ocamlMPRestr2 Keyword
+hi def link ocamlFunctor Keyword
+hi def link ocamlModTypeOf Keyword
hi def link ocamlKeyword Keyword
hi def link ocamlMethod Include
hi def link ocamlArrow Keyword
@@ -352,8 +612,6 @@ hi def link ocamlTopStop Keyword
hi def link ocamlRefAssign ocamlKeyChar
hi def link ocamlEqual ocamlKeyChar
-hi def link ocamlStar ocamlInfixOp
-hi def link ocamlAngle ocamlInfixOp
hi def link ocamlCons ocamlInfixOp
hi def link ocamlPrefixOp ocamlOperator
@@ -377,7 +635,24 @@ hi def link ocamlQuotedStringDelim Identifier
hi def link ocamlLabel Identifier
-hi def link ocamlType Type
+" Type linting groups that the user can customize:
+" - ocamlTypeCatchAll: anything in a type context that is not caught by more
+" specific rules (in principle, this should only match syntax errors)
+" - ocamlTypeConstr: type constructors
+" - ocamlTypeBuiltin: builtin type constructors (like int or list)
+" - ocamlTypeVar: type variables ('a)
+" - ocamlTypeAnyVar: wildcard (_)
+" - ocamlTypeVariance: variance and injectivity indications (+'a, !'a)
+" - ocamlTypeKeyChar: symbols such as -> and *
+" Default values below mimick the behavior before the type linter was
+" implemented, but now we can do better. :-)
+hi def link ocamlTypeCatchAll Error
+hi def link ocamlTypeConstr NONE
+hi def link ocamlTypeBuiltin Type
+hi def link ocamlTypeVar NONE
+hi def link ocamlTypeAnyVar NONE
+hi def link ocamlTypeVariance ocamlKeyChar
+hi def link ocamlTypeKeyChar ocamlKeyChar
hi def link ocamlTodo Todo
diff --git a/runtime/syntax/opam.vim b/runtime/syntax/opam.vim
index 9ac1d41..da29662 100644
--- a/runtime/syntax/opam.vim
+++ b/runtime/syntax/opam.vim
@@ -1,5 +1,5 @@
" Vim syntax file
-" Language: OPAM - OCaml package manager
+" Language: opam - OCaml package manager
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
@@ -11,20 +11,55 @@ endif
" need %{vars}%
" env: [[CAML_LD_LIBRARY_PATH = "%{lib}%/stublibs"]]
-syn keyword opamKeyword1 remove depends pin-depends depopts conflicts env packages patches version maintainer tags license homepage authors doc install author available name depexts substs synopsis description
-syn match opamKeyword2 "\v(bug-reports|post-messages|ocaml-version|opam-version|dev-repo|build-test|build-doc|build)"
+syn iskeyword a-z,A-Z,-
+syn keyword opamKeyword1 author
+syn keyword opamKeyword1 authors
+syn keyword opamKeyword1 available
+syn keyword opamKeyword1 bug-reports
+syn keyword opamKeyword1 build
+syn keyword opamKeyword1 build-env
+syn keyword opamKeyword1 conflict-class
+syn keyword opamKeyword1 conflicts
+syn keyword opamKeyword1 depends
+syn keyword opamKeyword1 depexts
+syn keyword opamKeyword1 depopts
+syn keyword opamKeyword1 description
+syn keyword opamKeyword1 dev-repo
+syn keyword opamKeyword1 doc
+syn keyword opamKeyword1 extra-files
+syn keyword opamKeyword1 features
+syn keyword opamKeyword1 flags
+syn keyword opamKeyword1 homepage
+syn keyword opamKeyword1 install
+syn keyword opamKeyword1 libraries
+syn keyword opamKeyword1 license
+syn keyword opamKeyword1 maintainer
+syn keyword opamKeyword1 messages
+syn keyword opamKeyword1 name
+syn keyword opamKeyword1 opam-version
+syn keyword opamKeyword1 patches
+syn keyword opamKeyword1 pin-depends
+syn keyword opamKeyword1 post-messages
+syn keyword opamKeyword1 remove
+syn keyword opamKeyword1 run-test
+syn keyword opamKeyword1 setenv
+syn keyword opamKeyword1 substs
+syn keyword opamKeyword1 synopsis
+syn keyword opamKeyword1 syntax
+syn keyword opamKeyword1 tags
+syn keyword opamKeyword1 version
syn keyword opamTodo FIXME NOTE NOTES TODO XXX contained
syn match opamComment "#.*$" contains=opamTodo,@Spell
syn match opamOperator ">\|<\|=\|<=\|>="
-syn region opamInterpolate start=/%{/ end=/}%/ contained
-syn region opamString start=/"/ end=/"/ contains=opamInterpolate
-syn region opamSeq start=/\[/ end=/\]/ contains=ALLBUT,opamKeyword1,opamKeyword2
-syn region opamExp start=/{/ end=/}/ contains=ALLBUT,opamKeyword1,opamKeyword2
+syn match opamUnclosedInterpolate "%{[^ "]*" contained
+syn match opamInterpolate "%{[^ "]\+}%" contained
+syn region opamString start=/"/ end=/"/ contains=opamInterpolate,OpamUnclosedInterpolate
+syn region opamSeq start=/\[/ end=/\]/ contains=ALLBUT,opamKeyword1
+syn region opamExp start=/{/ end=/}/ contains=ALLBUT,opamKeyword1
hi link opamKeyword1 Keyword
-hi link opamKeyword2 Keyword
hi link opamString String
hi link opamExp Function
@@ -32,6 +67,7 @@ hi link opamSeq Statement
hi link opamOperator Operator
hi link opamComment Comment
hi link opamInterpolate Identifier
+hi link opamUnclosedInterpolate Error
let b:current_syntax = "opam"
diff --git a/runtime/syntax/progress.vim b/runtime/syntax/progress.vim
index 5e7cfef..4b8f612 100644
--- a/runtime/syntax/progress.vim
+++ b/runtime/syntax/progress.vim
@@ -3,13 +3,13 @@
" Filename extensions: *.p (collides with Pascal),
" *.i (collides with assembler)
" *.w (collides with cweb)
-" Maintainer: Philip Uren <philuSPAXY@ieee.org> Remove SPAXY spam block
+" Maintainer: Daniel Smith <daniel@rdnlsmith.com>
+" Previous Maintainer: Philip Uren <philuSPAXY@ieee.org> Remove SPAXY spam block
" Contributors: Matthew Stickney <mtstickneySPAXY@gmail.com>
" Chris Ruprecht <chrisSPAXY@ruprecht.org>
" Mikhail Kuperblum <mikhailSPAXY@whasup.com>
" John Florian <jflorianSPAXY@voyager.net>
-" Version: 13
-" Last Change: Nov 11 2012
+" Last Change: Jul 23 2024
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -116,8 +116,10 @@ syn match ProgressShowTab "\t"
" If you don't like white space on the end of lines, uncomment this:
" syn match ProgressSpaceError "\s\+$"
-syn region ProgressComment start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug,@Spell
-syn region ProgressInclude start="^[ ]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
+syn region ProgressBlockComment start="/\*" end="\*/" contains=ProgressBlockComment,ProgressTodo,ProgressDebug,@Spell
+syn match ProgressLineComment "//.*$" contains=ProgressTodo,ProgressDebug,@Spell
+syn cluster ProgressComment contains=ProgressBlockComment,ProgressLineComment
+syn region ProgressInclude start="^[ ]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,@ProgressComment
syn region ProgressPreProc start="&" end="\>" contained
" This next line works reasonably well.
@@ -281,6 +283,8 @@ syn sync lines=800
hi def link ProgressByte Number
hi def link ProgressCase Repeat
hi def link ProgressComment Comment
+hi def link ProgressBlockComment ProgressComment
+hi def link ProgressLineComment ProgressComment
hi def link ProgressConditional Conditional
hi def link ProgressDebug Debug
hi def link ProgressDo Repeat
diff --git a/runtime/syntax/scheme.vim b/runtime/syntax/scheme.vim
index c4454fc..59b0cc5 100644
--- a/runtime/syntax/scheme.vim
+++ b/runtime/syntax/scheme.vim
@@ -1,12 +1,12 @@
" Vim syntax file
-" Language: Scheme (R7RS)
-" Last Change: 2021-01-03
-" Author: Evan Hanson <evhan@foldling.org>
-" Maintainer: Evan Hanson <evhan@foldling.org>
-" Previous Author: Dirk van Deun <dirk@igwe.vub.ac.be>
+" Language: Scheme (R7RS)
+" Last Change: 2024 Jun 21
+" Author: Evan Hanson <evhan@foldling.org>
+" Maintainer: Evan Hanson <evhan@foldling.org>
+" Previous Author: Dirk van Deun <dirk@igwe.vub.ac.be>
" Previous Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
-" Repository: https://git.foldling.org/vim-scheme.git
-" URL: https://foldling.org/vim/syntax/scheme.vim
+" Repository: https://git.foldling.org/vim-scheme.git
+" URL: https://foldling.org/vim/syntax/scheme.vim
if exists('b:current_syntax')
finish
@@ -50,9 +50,11 @@ syn match schemeBoolean /#f\(alse\)\?/
syn match schemeCharacter /#\\.[^ `'\t\n\[\]()]*/
syn match schemeCharacter /#\\x[0-9a-fA-F]\+/
-syn match schemeComment /;.*$/ contains=@Spell
+syn match schemeComment /;.*$/ contains=schemeTodo,@Spell
-syn region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment,@Spell
+syn region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeTodo,schemeMultilineComment,@Spell
+
+syn match schemeTodo /\c\<\(todo\|xxx\|fixme\|note\):\?\>/ contained
syn region schemeForm matchgroup=schemeParentheses start="(" end=")" contains=ALLBUT,schemeUnquote,schemeDatumCommentForm,@schemeImportCluster
syn region schemeForm matchgroup=schemeParentheses start="\[" end="\]" contains=ALLBUT,schemeUnquote,schemeDatumCommentForm,@schemeImportCluster
@@ -427,6 +429,7 @@ syn keyword schemeFunction write-string
syn keyword schemeFunction write-u8
syn keyword schemeFunction zero?
+hi def link schemeTodo Todo
hi def link schemeBoolean Boolean
hi def link schemeCharacter Character
hi def link schemeComment Comment
diff --git a/runtime/syntax/sdc.vim b/runtime/syntax/sdc.vim
index dbfa35e..ae2aae5 100644
--- a/runtime/syntax/sdc.vim
+++ b/runtime/syntax/sdc.vim
@@ -1,9 +1,10 @@
" Vim syntax file
" Language: SDC - Synopsys Design Constraints
" Maintainer: Maurizio Tranchero - maurizio.tranchero@gmail.com
-" Last Change: Thu Mar 25 17:35:16 CET 2009
" Credits: based on TCL Vim syntax file
" Version: 0.3
+" Last Change: Thu Mar 25 17:35:16 CET 2009
+" 2024 Jul 17 by Vim Project (update to SDC 2.1)
" Quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -13,16 +14,48 @@ endif
" Read the TCL syntax to start with
runtime! syntax/tcl.vim
-" SDC-specific keywords
+" TCL extension related to SDC and available from some vendors
+" (not defined in SDC standard!)
syn keyword sdcCollections foreach_in_collection
-syn keyword sdcObjectsQuery get_clocks get_ports
syn keyword sdcObjectsInfo get_point_info get_node_info get_path_info
syn keyword sdcObjectsInfo get_timing_paths set_attribute
-syn keyword sdcConstraints set_false_path
+
+" SDC rev. 2.1 specific keywords
+syn keyword sdcObjectsQuery get_clocks get_ports get_cells
+syn keyword sdcObjectsQuery get_pins get_nets all_inputs
+syn keyword sdcObjectsQuery all_outputs all_registers all_clocks
+syn keyword sdcObjectsQuery get_libs get_lib_cells get_lib_pins
+
+syn keyword sdcConstraints set_false_path set_clock_groups set_sense
+syn keyword sdcConstraints set_propagated_clock set_clock_gating_check
+syn keyword sdcConstraints set_ideal_latency set_ideal_network
+syn keyword sdcConstraints set_ideal_transistion set_max_time_borrow
+syn keyword sdcConstraints set_data_check group_path set_max_transition
+syn keyword sdcConstraints set_max_fanout set_driving_cell
+syn keyword sdcConstraints set_port_fanout_number set_multi_cycle_path
+syn keyword sdcConstraints set_disable_timing set_min_pulse_width
+
syn keyword sdcNonIdealities set_min_delay set_max_delay
syn keyword sdcNonIdealities set_input_delay set_output_delay
syn keyword sdcNonIdealities set_load set_min_capacitance set_max_capacitance
+syn keyword sdcNonIdealities set_clock_latency set_clock_transition set_clock_uncertainty
+syn keyword sdcNonIdealities set_resistance set_timing_derate set_drive
+syn keyword sdcNonIdealities set_input_transition set_fanout_load
+
syn keyword sdcCreateOperations create_clock create_timing_netlist update_timing_netlist
+syn keyword sdcCreateOperations create_generated_clock
+
+syn keyword sdcPowerArea set_max_area create_voltage_area
+syn keyword sdcPowerArea set_level_shifter_threshold set_max_dynamic_power
+syn keyword sdcPowerArea set_level_shifter_strategy set_max_leakage_power
+
+syn keyword sdcModeConfig set_case_analysis set_logic_dc
+syn keyword sdcModeConfig set_logic_zero set_logic_one
+
+syn keyword sdcMiscCommmands sdc_version set_wire_load_selection_group
+syn keyword sdcMiscCommmands set_units set_wire_load_mode set_wire_load_model
+syn keyword sdcMiscCommmands set_wire_load_min_block_size set_operating_conditions
+syn keyword sdcMiscCommmands current_design
" command flags highlighting
syn match sdcFlags "[[:space:]]-[[:alpha:]_]*\>"
@@ -31,9 +64,12 @@ syn match sdcFlags "[[:space:]]-[[:alpha:]_]*\>"
hi def link sdcCollections Repeat
hi def link sdcObjectsInfo Operator
hi def link sdcCreateOperations Operator
-hi def link sdcObjectsQuery Operator
+hi def link sdcObjectsQuery Function
hi def link sdcConstraints Operator
hi def link sdcNonIdealities Operator
+hi def link sdcPowerArea Operator
+hi def link sdcModeConfig Operator
+hi def link sdcMiscCommmands Operator
hi def link sdcFlags Special
let b:current_syntax = "sdc"
diff --git a/runtime/syntax/testdir/README.txt b/runtime/syntax/testdir/README.txt
index 9c12648..3baa43b 100644
--- a/runtime/syntax/testdir/README.txt
+++ b/runtime/syntax/testdir/README.txt
@@ -6,9 +6,9 @@ highlighting enabled. Screendumps are generated and compared with the
expected screendumps in the "dumps" directory. This will uncover any
character attributes that differ.
-Without any further setup a screendump is made at the top of the file (using
-_00.dump) and another one at the end of the file (using _99.dump). The dumps
-are normally 20 screen lines tall.
+The dumps are normally 20 screen lines tall. Without any further setup
+a screendump is made at the top of the file (using _00.dump) and another
+screendump is made if there are more lines (using _01.dump), and so on.
When the screendumps are OK an empty "done/{name}" file is created. This
avoids running the test again until "make clean" is used. Thus you can run
@@ -18,7 +18,7 @@ again to only repeat the failing test.
When a screendump differs it is stored in the "failed" directory. This allows
for comparing it with the expected screendump, using a command like:
- let fname = '{name}_99.dump'
+ let fname = '{name}_00.dump'
call term_dumpdiff('failed/' .. fname, 'dumps/' .. fname)
@@ -27,12 +27,12 @@ Creating a syntax plugin test
Create a source file in the language you want to test in the "input"
directory. Use the filetype name as the base and a file name extension
-matching the filetype. Let's use Java as an example. The file would then be
+matching the filetype. Let's use Java as an example. The file would then be
"input/java.java".
Make sure to include some interesting constructs with plenty of complicated
highlighting. Optionally, pre-configure the testing environment by including
-setup commands at the top of the input file. The format for these lines is:
+setup commands at the top of the input file. The format for these lines is:
VIM_TEST_SETUP {command}
@@ -61,6 +61,8 @@ an "input/setup/java.vim" script file with the following lines:
Both inline setup commands and setup scripts may be used at the same time, the
script file will be sourced before any VIM_TEST_SETUP commands are executed.
+Every line of a source file must not be longer than 1425 (19 x 75) characters.
+
If there is no further setup required, you can now run the tests:
make test
@@ -72,14 +74,12 @@ newly created screendumps will be "failed/java_00.dump",
call term_dumpload('failed/java_00.dump')
call term_dumpload('failed/java_01.dump')
...
- call term_dumpload('failed/java_99.dump')
If they look OK, move them to the "dumps" directory:
:!mv failed/java_00.dump dumps
:!mv failed/java_01.dump dumps
...
- :!mv failed/java_99.dump dumps
If you now run the test again, it will succeed.
@@ -99,7 +99,7 @@ are covered by the test. You can follow these steps:
input file, carefully check that the changes in the screendump are
intentional:
- let fname = '{name}_99.dump'
+ let fname = '{name}_00.dump'
call term_dumpdiff('failed/' .. fname, 'dumps/' .. fname)
Fix the syntax plugin until the result is good.
@@ -115,13 +115,95 @@ are covered by the test. You can follow these steps:
- syntax plugin: syntax/{name}.vim
- Vim setup file: syntax/testdir/input/setup/{name}.vim (if any)
- test input file: syntax/testdir/input/{name}.{ext}
- - test dump files: syntax/testdir/dumps/{name}_99.dump
+ - test dump files: syntax/testdir/dumps/{name}_00.dump
+ syntax/testdir/dumps/{name}_01.dump (if any)
+ ...
As an extra check you can temporarily put back the old syntax plugin and
verify that the tests fail. Then you know your changes are covered by the
test.
+Viewing generated screendumps (local)
+-------------------------------------
+
+You may also wish to look at the whole batch of failed screendumps after
+running "make test". Source the "viewdumps.vim" script for this task:
+
+ [VIMRUNTIME=../..] \
+ ../../src/vim --clean -S testdir/viewdumps.vim \
+ [testdir/dumps/java_*.dump ...]
+
+By default, all screendumps found in the "failed" directory will be added to
+the argument list and then the first one will be loaded. Loaded screendumps
+that bear filenames of screendumps found in the "dumps" directory will be
+rendering the contents of any such pair of files and the difference between
+them (:help term_dumpdiff()); otherwise, they will be rendering own contents
+(:help term_dumpload()). Remember to execute :edit when occasionally you see
+raw file contents instead of rendered.
+
+At any time, you can add, list, and abandon other screendumps:
+
+ :$argedit testdir/dumps/java_*.dump
+ :args
+ :qall
+
+The listing of argument commands can be found under :help buffer-list.
+
+
+Viewing generated screendumps (from a CI-uploaded artifact)
+-----------------------------------------------------------
+
+After you have downloaded an artifact archive containing failed screendumps
+and extracted its files in a temporary directory, you need to set up a "dumps"
+directory by creating a symlink:
+
+ cd /path/to/fork
+ ln -s $(pwd)/runtime/syntax/testdir/dumps \
+ /tmp/runtime/syntax/testdir/dumps
+
+You can now examine the extracted screendumps:
+
+ ./src/vim --clean -S runtime/syntax/testdir/viewdumps.vim \
+ /tmp/runtime/syntax/testdir/failed/*.dump
+
+
+Viewing generated screendumps (submitted for a pull request)
+------------------------------------------------------------
+
+First, you need to check out the topic branch with the proposed changes and
+write down a difference list between the HEAD commit (index) and its parent
+commit with respect to the changed "dumps" filenames:
+
+ cd /path/to/fork
+ git switch prs/1234
+ git diff-index --relative=runtime/syntax/testdir/dumps/ \
+ --name-only prs/1234~1 > /tmp/filelist
+
+Then, you need to check out the master branch, change the current working
+directory to reconcile relative filepaths written in the filenames list, copy
+in the "failed" directory the old "dumps" files, whose names are on the same
+list, and follow it by checking out the topic branch:
+
+ git switch master
+ cd runtime/syntax/testdir/dumps
+ cp -t ../failed $(cat /tmp/filelist)
+ git switch prs/1234
+
+Make note of any missing new screendumps. Please remember about the
+introduced INVERTED relation between "dumps" and "failed", i.e. the files to
+be committed are in "dumps" already and their old versions are in "failed".
+Therefore, you need to copy the missing new screendumps from "dumps" to
+"failed":
+
+ cp -t ../failed foo_10.dump foo_11.dump foo_12.dump
+
+After you have changed the current working directory to its parent directory,
+you can now examine the screendumps from the "failed" directory (note that new
+screendumps will be shown with no difference between their versions):
+
+ cd ..
+ ../../../src/vim --clean -S viewdumps.vim
TODO: run test for one specific filetype
diff --git a/runtime/syntax/testdir/dumps/c_02.dump b/runtime/syntax/testdir/dumps/c_02.dump
index 72ab11f..4fcaaeb 100644
--- a/runtime/syntax/testdir/dumps/c_02.dump
+++ b/runtime/syntax/testdir/dumps/c_02.dump
@@ -1,9 +1,10 @@
-|#+0#e000e06#ffffff0|i|f| |(|d|e|f|i|n|e|d|(|U|N|I|X|)| ||@1| |d|e|f|i|n|e|d|(|V|M|S|)@1| |&@1| |!|d|e|f|i|n|e|d|(|N|O|_|V|I|M|_|M|A|I|N|)| +0#0000000&@14
+| +0&#ffffff0@74
+|#+0#e000e06&|i|f| |(|d|e|f|i|n|e|d|(|U|N|I|X|)| ||@1| |d|e|f|i|n|e|d|(|V|M|S|)@1| |&@1| |!|d|e|f|i|n|e|d|(|N|O|_|V|I|M|_|M|A|I|N|)| +0#0000000&@14
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|f|i|l|e|_|o|w|n|e|d|(|c+0#00e0003&|h|a|r| +0#0000000&|*|f|n|a|m|e|)|;| @39
|#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|m|a|i|n|e|r@1|(|i+0#00e0003&|n|t|,+0#0000000&| |c|h|a|r|_|u| |*|)|;| @39
-|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|e|a|r|l|y|_|a|r|g|_|s|c|a|n|(|m|p|a|r|m|_|T| |*|p|a|r|m|p|)|;| @31
->#+0#e000e06&|i|f|n|d|e|f| |N|O|_|V|I|M|_|M|A|I|N| +0#0000000&@55
+>s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|e|a|r|l|y|_|a|r|g|_|s|c|a|n|(|m|p|a|r|m|_|T| |*|p|a|r|m|p|)|;| @31
+|#+0#e000e06&|i|f|n|d|e|f| |N|O|_|V|I|M|_|M|A|I|N| +0#0000000&@55
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|u|s|a|g|e|(|v+0#00e0003&|o|i|d|)+0#0000000&|;| @50
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|p|a|r|s|e|_|c|o|m@1|a|n|d|_|n|a|m|e|(|m|p|a|r|m|_|T| |*|p|a|r|m|p|)|;| @27
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|c|o|m@1|a|n|d|_|l|i|n|e|_|s|c|a|n|(|m|p|a|r|m|_|T| |*|p|a|r|m|p|)|;| @28
@@ -16,5 +17,4 @@
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|s|o|u|r|c|e|_|s|t|a|r|t|u|p|_|s|c|r|i|p|t|s|(|m|p|a|r|m|_|T| |*|p|a|r|m|p|)|;| @23
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|m|a|i|n|_|s|t|a|r|t|_|g|u|i|(|v+0#00e0003&|o|i|d|)+0#0000000&|;| @41
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|c|h|e|c|k|_|s|w|a|p|_|e|x|i|s|t|s|_|a|c|t|i|o|n|(|v+0#00e0003&|o|i|d|)+0#0000000&|;| @31
-|#+0#e000e06&| |i|f|d|e|f| |F|E|A|T|_|E|V|A|L| +0#0000000&@57
-@57|3|7|,|1| @9|2|9|%|
+@57|3|6|,|1| @9|2|8|%|
diff --git a/runtime/syntax/testdir/dumps/c_03.dump b/runtime/syntax/testdir/dumps/c_03.dump
index 17c6f3b..07350a7 100644
--- a/runtime/syntax/testdir/dumps/c_03.dump
+++ b/runtime/syntax/testdir/dumps/c_03.dump
@@ -1,9 +1,10 @@
-|#+0#e000e06#ffffff0| |i|f|d|e|f| |F|E|A|T|_|E|V|A|L| +0#0000000&@57
+|s+0#00e0003#ffffff0|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|c|h|e|c|k|_|s|w|a|p|_|e|x|i|s|t|s|_|a|c|t|i|o|n|(|v+0#00e0003&|o|i|d|)+0#0000000&|;| @31
+|#+0#e000e06&| |i|f|d|e|f| |F|E|A|T|_|E|V|A|L| +0#0000000&@57
|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|s|e|t|_|p|r|o|g|p|a|t|h|(|c|h|a|r|_|u| |*|a|r|g|v|0|)|;| @34
|#+0#e000e06&| |e|n|d|i|f| +0#0000000&@67
|#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
-@75
> @74
+@75
|/+0#0000e05&|*| +0#0000000&@72
| +0#0000e05&|*| |D|i|f@1|e|r|e|n|t| |t|y|p|e|s| |o|f| |e|r@1|o|r| |m|e|s@1|a|g|e|s|.| +0#0000000&@37
| +0#0000e05&|*|/| +0#0000000&@71
@@ -16,5 +17,4 @@
@4|N|_|(|"+0#e000002&|A|r|g|u|m|e|n|t| |m|i|s@1|i|n|g| |a|f|t|e|r|"|)+0#0000000&|,| @41
|#+0#e000e06&|d|e|f|i|n|e| |M|E|_|A|R|G|_|M|I|S@1|I|N|G| @9|2+0#e000002&| +0#0000000&@41
@4|N|_|(|"+0#e000002&|G|a|r|b|a|g|e| |a|f|t|e|r| |o|p|t|i|o|n| |a|r|g|u|m|e|n|t|"|)+0#0000000&|,| @34
-|#+0#e000e06&|d|e|f|i|n|e| |M|E|_|G|A|R|B|A|G|E| @13|3+0#e000002&| +0#0000000&@41
-@57|5@1|,|0|-|1| @7|4|7|%|
+@57|5|4|,|0|-|1| @7|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/c_04.dump b/runtime/syntax/testdir/dumps/c_04.dump
index 03804a5..1d2d511 100644
--- a/runtime/syntax/testdir/dumps/c_04.dump
+++ b/runtime/syntax/testdir/dumps/c_04.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@3|N|_|(|"+0#e000002&|T|o@1| |m|a|n|y| |\+0#e000e06&|"|++0#e000002&|c|o|m@1|a|n|d|\+0#e000e06&|"|,+0#e000002&| |\+0#e000e06&|"|-+0#e000002&|c| |c|o|m@1|a|n|d|\+0#e000e06&|"| +0#e000002&|o|r| |\+0#e000e06&|"|-+0#e000002&@1|c|m|d| |c|o|m@1|a|n|d|\+0#e000e06&|"| +0#e000002&|a|r|g|u|m|e|n|t
+| +0&#ffffff0@3|N|_|(|"+0#e000002&|G|a|r|b|a|g|e| |a|f|t|e|r| |o|p|t|i|o|n| |a|r|g|u|m|e|n|t|"|)+0#0000000&|,| @34
+|#+0#e000e06&|d|e|f|i|n|e| |M|E|_|G|A|R|B|A|G|E| @13|3+0#e000002&| +0#0000000&@41
+@4|N|_|(|"+0#e000002&|T|o@1| |m|a|n|y| |\+0#e000e06&|"|++0#e000002&|c|o|m@1|a|n|d|\+0#e000e06&|"|,+0#e000002&| |\+0#e000e06&|"|-+0#e000002&|c| |c|o|m@1|a|n|d|\+0#e000e06&|"| +0#e000002&|o|r| |\+0#e000e06&|"|-+0#e000002&@1|c|m|d| |c|o|m@1|a|n|d|\+0#e000e06&|"| +0#e000002&|a|r|g|u|m|e|n|t
|s|"|)+0#0000000&|,| @70
|#+0#e000e06&|d|e|f|i|n|e| |M|E|_|E|X|T|R|A|_|C|M|D| @11|4+0#e000002&| +0#0000000&@41
-@4|N|_|(|"+0#e000002&|I|n|v|a|l|i|d| |a|r|g|u|m|e|n|t| |f|o|r|"|)+0#0000000&|,| @43
+@4>N|_|(|"+0#e000002&|I|n|v|a|l|i|d| |a|r|g|u|m|e|n|t| |f|o|r|"|)+0#0000000&|,| @43
|#+0#e000e06&|d|e|f|i|n|e| |M|E|_|I|N|V|A|L|I|D|_|A|R|G| @9|5+0#e000002&| +0#0000000&@41
->}|;| @72
+|}|;| @72
@75
|#+0#e000e06&|i|f|n|d|e|f| |P|R|O|T|O| @10|/+0#0000e05&@1| |d|o|n|'|t| |w|a|n|t| |a| |p|r|o|t|o|t|y|p|e| |f|o|r| |m|a|i|n|(|)| +0#0000000&@14
@75
@@ -15,6 +17,4 @@
|#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
@75
|#+0#e000e06&|i|f|n|d|e|f| |N|O|_|V|I|M|_|M|A|I|N| @4|/+0#0000e05&@1| |s|k|i|p| |t|h|i|s| |f|o|r| |u|n|i|t@1|e|s|t|s| +0#0000000&@24
-@75
-|s+0#00e0003&|t|a|t|i|c| +0#0000000&|c|h|a|r|_|u| |*|s|t|a|r|t|_|d|i|r| |=| |N+0#e000002&|U|L@1|;+0#0000000&| @7|/+0#0000e05&@1| |c|u|r@1|e|n|t| |w|o|r|k|i|n|g| |d|i|r| |o|n| |s|t|a|r|t|u|p| +0#0000000&@1
-@57|7|3|,|1| @9|6|4|%|
+@57|7|1|,|5| @9|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/c_05.dump b/runtime/syntax/testdir/dumps/c_05.dump
index 6871cd0..4d26c2e 100644
--- a/runtime/syntax/testdir/dumps/c_05.dump
+++ b/runtime/syntax/testdir/dumps/c_05.dump
@@ -1,9 +1,11 @@
-|s+0#00e0003#ffffff0|t|a|t|i|c| +0#0000000&|c|h|a|r|_|u| |*|s|t|a|r|t|_|d|i|r| |=| |N+0#e000002&|U|L@1|;+0#0000000&| @7|/+0#0000e05&@1| |c|u|r@1|e|n|t| |w|o|r|k|i|n|g| |d|i|r| |o|n| |s|t|a|r|t|u|p| +0#0000000&@1
+|#+0#e000e06#ffffff0|i|f|n|d|e|f| |N|O|_|V|I|M|_|M|A|I|N| @4|/+0#0000e05&@1| |s|k|i|p| |t|h|i|s| |f|o|r| |u|n|i|t@1|e|s|t|s| +0#0000000&@24
@75
-|s+0#00e0003&|t|a|t|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|h|a|s|_|d|a|s|h|_|c|_|a|r|g| |=| |F|A|L|S|E|;| @40
+|s+0#00e0003&|t|a|t|i|c| +0#0000000&|c|h|a|r|_|u| |*|s|t|a|r|t|_|d|i|r| |=| |N+0#e000002&|U|L@1|;+0#0000000&| @7|/+0#0000e05&@1| |c|u|r@1|e|n|t| |w|o|r|k|i|n|g| |d|i|r| |o|n| |s|t|a|r|t|u|p| +0#0000000&@1
@75
+|s+0#00e0003&|t|a|t|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|h|a|s|_|d|a|s|h|_|c|_|a|r|g| |=| |F|A|L|S|E|;| @40
+> @74
|#+0#e000e06&| |i|f|d|e|f| |V|I|M|D|L@1| +0#0000000&@60
->_@1|d|e|c|l|s|p|e|c|(|d|l@1|e|x|p|o|r|t|)| @53
+|_@1|d|e|c|l|s|p|e|c|(|d|l@1|e|x|p|o|r|t|)| @53
|#+0#e000e06&| |e|n|d|i|f| +0#0000000&@67
@4|i+0#00e0003&|n|t| +0#0000000&@67
|#+0#e000e06&| |i|f|d|e|f| |M|S|W|I|N| +0#0000000&@61
@@ -15,6 +17,4 @@
|{| @73
|#+0#e000e06&|i|f| |d|e|f|i|n|e|d|(|S|T|A|R|T|U|P|T|I|M|E|)| ||@1| |d|e|f|i|n|e|d|(|C|L|E|A|N|_|R|U|N|T|I|M|E|P|A|T|H|)| +0#0000000&@20
@4|i+0#00e0003&|n|t| +0#0000000&@8|i|;| @56
-|#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
-@75
-@57|9|1|,|1| @9|8|1|%|
+@57|8|9|,|0|-|1| @7|7|9|%|
diff --git a/runtime/syntax/testdir/dumps/c_06.dump b/runtime/syntax/testdir/dumps/c_06.dump
index 55b9f38..389d6e4 100644
--- a/runtime/syntax/testdir/dumps/c_06.dump
+++ b/runtime/syntax/testdir/dumps/c_06.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@74
+| +0&#ffffff0@3|i+0#00e0003&|n|t| +0#0000000&@8|i|;| @56
+|#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
+@75
@4|/+0#0000e05&|*| +0#0000000&@68
| +0#0000e05&@4|*| |D|o| |a|n|y| |s|y|s|t|e|m|-|s|p|e|c|i|f|i|c| |i|n|i|t|i|a|l|i|s|a|t|i|o|n|s|.| @1|T|h|e|s|e| |c|a|n| |N|O|T| |u|s|e| |I|O|b|u|f@1| |o|r
-| @4|*| |N|a|m|e|B|u|f@1|.| @1|T|h|u|s| |e|m|s|g|2|(|)| |c|a|n@1|o|t| |b|e| |c|a|l@1|e|d|!| +0#0000000&@26
+| @4>*| |N|a|m|e|B|u|f@1|.| @1|T|h|u|s| |e|m|s|g|2|(|)| |c|a|n@1|o|t| |b|e| |c|a|l@1|e|d|!| +0#0000000&@26
| +0#0000e05&@4|*|/| +0#0000000&@67
-@4>m|c|h|_|e|a|r|l|y|_|i|n|i|t|(|)|;| @53
+@4|m|c|h|_|e|a|r|l|y|_|i|n|i|t|(|)|;| @53
@75
@4|/+0#0000e05&@1| |S|o|u|r|c|e| |s|t|a|r|t|u|p| |s|c|r|i|p|t|s|.| +0#0000000&@44
@4|s|o|u|r|c|e|_|s|t|a|r|t|u|p|_|s|c|r|i|p|t|s|(|&|p|a|r|a|m|s|)|;| @38
@@ -15,6 +17,4 @@
| +0#0000e05&@4|*|/| +0#0000000&@67
| +0#0000e05&@3|r|e|t|u|r|n| |m|z|s|c|h|e|m|e|_|m|a|i|n|(|)|;| +0#0000000&@47
|#+0#e000e06&|e|l|s|e| +0#0000000&@69
-@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|v|i|m|_|m|a|i|n|2|(|)|;| @51
-|#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
-@57|1|0|9|,|5| @8|9@1|%|
+@57|1|0|7|,|6| @8|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/c_07.dump b/runtime/syntax/testdir/dumps/c_07.dump
new file mode 100644
index 0000000..22be2f8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/c_07.dump
@@ -0,0 +1,20 @@
+|#+0#e000e06#ffffff0|e|l|s|e| +0#0000000&@69
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|v|i|m|_|m|a|i|n|2|(|)|;| @51
+|#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/c_99.dump b/runtime/syntax/testdir/dumps/c_99.dump
deleted file mode 100644
index 1af9a49..0000000
--- a/runtime/syntax/testdir/dumps/c_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@3|/+0#0000e05&|*| +0#0000000&@68
-| +0#0000e05&@4|*| |D|o| |a|n|y| |s|y|s|t|e|m|-|s|p|e|c|i|f|i|c| |i|n|i|t|i|a|l|i|s|a|t|i|o|n|s|.| @1|T|h|e|s|e| |c|a|n| |N|O|T| |u|s|e| |I|O|b|u|f@1| |o|r
-| @4|*| |N|a|m|e|B|u|f@1|.| @1|T|h|u|s| |e|m|s|g|2|(|)| |c|a|n@1|o|t| |b|e| |c|a|l@1|e|d|!| +0#0000000&@26
-| +0#0000e05&@4|*|/| +0#0000000&@67
-@4|m|c|h|_|e|a|r|l|y|_|i|n|i|t|(|)|;| @53
-@75
-@4|/+0#0000e05&@1| |S|o|u|r|c|e| |s|t|a|r|t|u|p| |s|c|r|i|p|t|s|.| +0#0000000&@44
-@4|s|o|u|r|c|e|_|s|t|a|r|t|u|p|_|s|c|r|i|p|t|s|(|&|p|a|r|a|m|s|)|;| @38
-@75
-|#+0#e000e06&|i|f| |0| +0#0000000&@69
-| +0#0000e05&@3|/|*| +0#0000000&@68
-| +0#0000e05&@4|*| |N|e|w|e|r| |v|e|r|s|i|o|n| |o|f| |M|z|S|c|h|e|m|e| |(|R|a|c|k|e|t|)| |r|e|q|u|i|r|e| |e|a|r|l|i|e|r| |(|t|r|a|m|p|o|l|i|n|e|d|)| +0#0000000&@3
-| +0#0000e05&@4|*| |i|n|i|t|i|a|l|i|s|a|t|i|o|n| |v|i|a| |s|c|h|e|m|e|_|m|a|i|n|_|s|e|t|u|p|.| +0#0000000&@30
-| +0#0000e05&@4|*|/| +0#0000000&@67
-| +0#0000e05&@3|r|e|t|u|r|n| |m|z|s|c|h|e|m|e|_|m|a|i|n|(|)|;| +0#0000000&@47
-|#+0#e000e06&|e|l|s|e| +0#0000000&@69
-@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|v|i|m|_|m|a|i|n|2|(|)|;| @51
-|#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
->}| @73
-@57|1|2|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_01_00.dump b/runtime/syntax/testdir/dumps/dots_01_00.dump
new file mode 100644
index 0000000..c3fe7ba
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_01_00.dump
@@ -0,0 +1,20 @@
+>.+0&#ffffff0@73|1
+|.@73|2
+|.@73|3
+|.@73|4
+|.@29|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@28|5
+|.@28|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@28|6
+|.@32|r|u|l|e|r|.@35|7
+|.@73|8
+|.@73|9
+|.@72|1|0
+|.@72|1@1
+|.@72|1|2
+|.@72|1|3
+|.@72|1|4
+|.@72|1|5
+|.@72|1|6
+|.@72|1|7
+|.@72|1|8
+|.@72|1|9
+| @56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_01_01.dump b/runtime/syntax/testdir/dumps/dots_01_01.dump
new file mode 100644
index 0000000..dad9942
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_01_01.dump
@@ -0,0 +1,20 @@
+|.+0&#ffffff0@72|1|4
+|.@72|1|5
+|.@72|1|6
+|.@72|1|7
+|.@72|1|8
+>.@72|1|9
+|.@72|2|0
+|.@72|2|1
+|.@72|2@1
+|.@72|2|3
+|.@72|2|4
+|.@72|2|5
+|.@72|2|6
+|.@72|2|7
+|.@72|2|8
+|.@72|2|9
+|.@72|3|0
+|.@72|3|1
+|.@72|3|2
+| @56|1|9|,|1| @9|3|1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_01_02.dump b/runtime/syntax/testdir/dumps/dots_01_02.dump
new file mode 100644
index 0000000..1710831
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_01_02.dump
@@ -0,0 +1,20 @@
+|.+0&#ffffff0@72|3|2
+|.@72|3@1
+|.@72|3|4
+|.@72|3|5
+|.@72|3|6
+>.@72|3|7
+|.@72|3|8
+|.@72|3|9
+|.@72|4|0
+|.@72|4|1
+|.@72|4|2
+|.@72|4|3
+|.@72|4@1
+|.@72|4|5
+|.@72|4|6
+|.@72|4|7
+|.@72|4|8
+|.@72|4|9
+|.@72|5|0
+| @56|3|7|,|1| @9|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/dots_01_03.dump b/runtime/syntax/testdir/dumps/dots_01_03.dump
new file mode 100644
index 0000000..e011d4e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_01_03.dump
@@ -0,0 +1,20 @@
+|.+0&#ffffff0@72|5|0
+|.@72|5|1
+|.@72|5|2
+|.@72|5|3
+|.@72|5|4
+>.@72|5@1
+|.@72|5|6
+|.@72|5|7
+|.@72|5|8
+|.@72|5|9
+|.@72|6|0
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_02_00.dump b/runtime/syntax/testdir/dumps/dots_02_00.dump
new file mode 100644
index 0000000..1e9c10f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_02_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2| @73
+|3|.@73
+|4| @73
+|5|.@73
+|6| @73
+|7|.@73
+|8| @73
+|9|.@27|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|0| @72
+|1@1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|1|2| @72
+|1|3|.@29|r|u|l|e|r|.@37
+|1|4| @72
+|1|5|.@72
+|1|6| @72
+|1|7|.@72
+|1|8| @72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_02_01.dump b/runtime/syntax/testdir/dumps/dots_02_01.dump
new file mode 100644
index 0000000..336d6be
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_02_01.dump
@@ -0,0 +1,20 @@
+|1+0&#ffffff0|3|.@29|r|u|l|e|r|.@37
+|1|4| @72
+|1|5|.@72
+|1|6| @72
+|1|7|.@72
+|1|8| @72
+>1|9|.@72
+|2|0| @72
+|2|1|.@72
+|2@1| @72
+|2|3|.@72
+|2|4| @72
+|2|5|.@72
+|2|6| @72
+|2|7|.@72
+|2|8| @72
+|2|9|.@72
+|3|0| @72
+|3|1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|0|,|1| @9|2|8|%|
diff --git a/runtime/syntax/testdir/dumps/dots_02_02.dump b/runtime/syntax/testdir/dumps/dots_02_02.dump
new file mode 100644
index 0000000..b43d613
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_02_02.dump
@@ -0,0 +1,20 @@
+|3+0&#ffffff0|1|.@72
+|3|2| @72
+|3@1|.@72
+|3|4| @72
+|3|5|.@72
+|3|6| @72
+>3|7|.@72
+|3|8| @72
+|3|9|.@72
+|4|0| @72
+|4|1|.@72
+|4|2| @72
+|4|3|.@72
+|4@1| @72
+|4|5|.@72
+|4|6| @72
+|4|7|.@72
+|4|8| @72
+|4|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|9|,|1| @9|7|1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_02_03.dump b/runtime/syntax/testdir/dumps/dots_02_03.dump
new file mode 100644
index 0000000..3d1d04e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_02_03.dump
@@ -0,0 +1,20 @@
+|4+0&#ffffff0|9|.@72
+|5|0| @72
+|5|1|.@72
+|5|2| @72
+|5|3|.@72
+|5|4| @72
+>5@1|.@72
+|5|6| @72
+|5|7|.@72
+|5|8| @72
+|5|9|.@72
+|6|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_03_00.dump b/runtime/syntax/testdir/dumps/dots_03_00.dump
new file mode 100644
index 0000000..35e038f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_03_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3| @73
+|4|.@73
+|5|.@73
+|6| @73
+|7|.@73
+|8|.@73
+|9| @73
+|1|0|.@72
+|1@1|.@72
+|1|2| @72
+|1|3|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|4|.@72
+|1|5| @72
+|1|6|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|1|7|.@72
+|1|8| @72
+|1|9|.@29|r|u|l|e|r|.@34|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_03_01.dump b/runtime/syntax/testdir/dumps/dots_03_01.dump
new file mode 100644
index 0000000..d1b4945
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_03_01.dump
@@ -0,0 +1,20 @@
+|1+0&#ffffff0|3|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|4|.@72
+|1|5| @72
+|1|6|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|1|7|.@72
+|1|8| @72
+>1|9|.@29|r|u|l|e|r|.@37
+|2|0|.@72
+|2|1| @72
+|2@1|.@72
+|2|3|.@72
+|2|4| @72
+|2|5|.@72
+|2|6|.@72
+|2|7| @72
+|2|8|.@72
+|2|9|.@72
+|3|0| @72
+|3|1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|7|,|1| @10|2|8|%|
diff --git a/runtime/syntax/testdir/dumps/dots_03_02.dump b/runtime/syntax/testdir/dumps/dots_03_02.dump
new file mode 100644
index 0000000..56b0065
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_03_02.dump
@@ -0,0 +1,20 @@
+|3+0&#ffffff0|1|.@72
+|3|2|.@72
+|3@1| @72
+|3|4|.@72
+|3|5|.@72
+|3|6| @72
+>3|7|.@72
+|3|8|.@72
+|3|9| @72
+|4|0|.@72
+|4|1|.@72
+|4|2| @72
+|4|3|.@72
+|4@1|.@72
+|4|5| @72
+|4|6|.@72
+|4|7|.@72
+|4|8| @72
+|4|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|3|,|1| @9|7|1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_03_03.dump b/runtime/syntax/testdir/dumps/dots_03_03.dump
new file mode 100644
index 0000000..a4a873a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_03_03.dump
@@ -0,0 +1,20 @@
+|4+0&#ffffff0|9|.@72
+|5|0|.@72
+|5|1| @72
+|5|2|.@72
+|5|3|.@72
+|5|4| @72
+>5@1|.@72
+|5|6|.@72
+|5|7| @72
+|5|8|.@72
+|5|9|.@72
+|6|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_04_00.dump b/runtime/syntax/testdir/dumps/dots_04_00.dump
new file mode 100644
index 0000000..3848d3f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_04_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4| @73
+|5|.@73
+|6|.@73
+|7|.@73
+|8| @73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2| @72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6| @72
+|1|7|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_04_01.dump b/runtime/syntax/testdir/dumps/dots_04_01.dump
new file mode 100644
index 0000000..b86ce50
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_04_01.dump
@@ -0,0 +1,20 @@
+|9+0&#ffffff0|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2| @72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6| @72
+>1|7|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|8|.@72
+|1|9|.@72
+|2|0| @72
+|2|1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|2@1|.@72
+|2|3|.@72
+|2|4| @72
+|2|5|.@29|r|u|l|e|r|.@37
+|2|6|.@72
+|2|7|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|5|,|1| @10|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/dots_04_02.dump b/runtime/syntax/testdir/dumps/dots_04_02.dump
new file mode 100644
index 0000000..aa50446
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_04_02.dump
@@ -0,0 +1,20 @@
+|2+0&#ffffff0|5|.@29|r|u|l|e|r|.@37
+|2|6|.@72
+|2|7|.@72
+|2|8| @72
+>2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2| @72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6| @72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0| @72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|8|,|1| @10|5|4|%|
diff --git a/runtime/syntax/testdir/dumps/dots_04_03.dump b/runtime/syntax/testdir/dumps/dots_04_03.dump
new file mode 100644
index 0000000..f90875c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_04_03.dump
@@ -0,0 +1,20 @@
+|4+0&#ffffff0|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1| @72
+>4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8| @72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2| @72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6| @72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|2|,|1| @9|9|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_04_04.dump b/runtime/syntax/testdir/dumps/dots_04_04.dump
new file mode 100644
index 0000000..397d261
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_04_04.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|5|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_05_00.dump b/runtime/syntax/testdir/dumps/dots_05_00.dump
new file mode 100644
index 0000000..0f36067
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_05_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5| @73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0| @72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5| @72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_05_01.dump b/runtime/syntax/testdir/dumps/dots_05_01.dump
new file mode 100644
index 0000000..65aea94
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_05_01.dump
@@ -0,0 +1,20 @@
+|1+0&#ffffff0@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5| @72
+>1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0| @72
+|2|1|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5| @72
+|2|6|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|2|7|.@72
+|2|8|.@72
+|2|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_05_02.dump b/runtime/syntax/testdir/dumps/dots_05_02.dump
new file mode 100644
index 0000000..fff0e65
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_05_02.dump
@@ -0,0 +1,20 @@
+|2+0&#ffffff0|6|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0| @72
+>3|1|.@29|r|u|l|e|r|.@37
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5| @72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0| @72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|7|,|1| @10|5@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_05_03.dump b/runtime/syntax/testdir/dumps/dots_05_03.dump
new file mode 100644
index 0000000..2e7337c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_05_03.dump
@@ -0,0 +1,20 @@
+|4+0&#ffffff0|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5| @72
+>4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0| @72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1| @72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|0|,|1| @9|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_05_04.dump b/runtime/syntax/testdir/dumps/dots_05_04.dump
new file mode 100644
index 0000000..cfa410c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_05_04.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_06_00.dump b/runtime/syntax/testdir/dumps/dots_06_00.dump
new file mode 100644
index 0000000..0f57329
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_06_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6| @73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2| @72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8| @72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_06_01.dump b/runtime/syntax/testdir/dumps/dots_06_01.dump
new file mode 100644
index 0000000..ad5c871
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_06_01.dump
@@ -0,0 +1,20 @@
+|1+0&#ffffff0|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8| @72
+>1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4| @72
+|2|5|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0| @72
+|3|1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@27|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|2|8|%|
diff --git a/runtime/syntax/testdir/dumps/dots_06_02.dump b/runtime/syntax/testdir/dumps/dots_06_02.dump
new file mode 100644
index 0000000..41845be
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_06_02.dump
@@ -0,0 +1,20 @@
+|3+0&#ffffff0|1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6| @72
+>3|7|.@29|r|u|l|e|r|.@37
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2| @72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8| @72
+|4|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|7|,|1| @10|7|1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_06_03.dump b/runtime/syntax/testdir/dumps/dots_06_03.dump
new file mode 100644
index 0000000..eb9f846
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_06_03.dump
@@ -0,0 +1,20 @@
+|4+0&#ffffff0|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4| @72
+>5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_07_00.dump b/runtime/syntax/testdir/dumps/dots_07_00.dump
new file mode 100644
index 0000000..d0623f4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_07_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7| @73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4| @72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_07_01.dump b/runtime/syntax/testdir/dumps/dots_07_01.dump
new file mode 100644
index 0000000..98cd186
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_07_01.dump
@@ -0,0 +1,20 @@
+|8+0&#ffffff0|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4| @72
+>1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0|.@72
+|2|1| @72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|1|4|%|
diff --git a/runtime/syntax/testdir/dumps/dots_07_02.dump b/runtime/syntax/testdir/dumps/dots_07_02.dump
new file mode 100644
index 0000000..719d589
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_07_02.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8| @72
+|2|9|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5| @72
+|3|6|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|4|2|%|
diff --git a/runtime/syntax/testdir/dumps/dots_07_03.dump b/runtime/syntax/testdir/dumps/dots_07_03.dump
new file mode 100644
index 0000000..d0cdd0d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_07_03.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|6|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2| @72
+|4|3|.@29|r|u|l|e|r|.@37
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9| @72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|6|,|1| @10|7|1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_07_04.dump b/runtime/syntax/testdir/dumps/dots_07_04.dump
new file mode 100644
index 0000000..eae929e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_07_04.dump
@@ -0,0 +1,20 @@
+|5+0&#ffffff0|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6| @72
+>5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|9|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_08_00.dump b/runtime/syntax/testdir/dumps/dots_08_00.dump
new file mode 100644
index 0000000..eb079df
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_08_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8| @73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6| @72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_08_01.dump b/runtime/syntax/testdir/dumps/dots_08_01.dump
new file mode 100644
index 0000000..d17eb98
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_08_01.dump
@@ -0,0 +1,20 @@
+|9+0&#ffffff0|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6| @72
+>1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4| @72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|1|6|%|
diff --git a/runtime/syntax/testdir/dumps/dots_08_02.dump b/runtime/syntax/testdir/dumps/dots_08_02.dump
new file mode 100644
index 0000000..fc959de
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_08_02.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2| @72
+|3@1|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|4|.@72
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0| @72
+|4|1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|2|.@72
+|4|3|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_08_03.dump b/runtime/syntax/testdir/dumps/dots_08_03.dump
new file mode 100644
index 0000000..348a883
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_08_03.dump
@@ -0,0 +1,20 @@
+>4+0&#ffffff0|1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8| @72
+|4|9|.@29|r|u|l|e|r|.@37
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6| @72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|6|,|1| @10|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/dots_08_04.dump b/runtime/syntax/testdir/dumps/dots_08_04.dump
new file mode 100644
index 0000000..864c59c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_08_04.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@72
+|6|4| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|8|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_09_00.dump b/runtime/syntax/testdir/dumps/dots_09_00.dump
new file mode 100644
index 0000000..10b63c9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_09_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9| @73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8| @72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_09_01.dump b/runtime/syntax/testdir/dumps/dots_09_01.dump
new file mode 100644
index 0000000..a3792a2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_09_01.dump
@@ -0,0 +1,20 @@
+|1+0&#ffffff0|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8| @72
+>1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7| @72
+|2|8|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_09_02.dump b/runtime/syntax/testdir/dumps/dots_09_02.dump
new file mode 100644
index 0000000..3a0f1c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_09_02.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6| @72
+|3|7|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5| @72
+|4|6|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@27|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_09_03.dump b/runtime/syntax/testdir/dumps/dots_09_03.dump
new file mode 100644
index 0000000..00202be
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_09_03.dump
@@ -0,0 +1,20 @@
+|4+0&#ffffff0|6|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4| @72
+>5@1|.@29|r|u|l|e|r|.@37
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3| @72
+|~+0#4040ff13&| @73
+| +0#0000000&@56|7|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_10_00.dump b/runtime/syntax/testdir/dumps/dots_10_00.dump
new file mode 100644
index 0000000..1760049
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_10_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0| @72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_10_01.dump b/runtime/syntax/testdir/dumps/dots_10_01.dump
new file mode 100644
index 0000000..d7a64b4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_10_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0| @72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_10_02.dump b/runtime/syntax/testdir/dumps/dots_10_02.dump
new file mode 100644
index 0000000..a6eae12
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_10_02.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0| @72
+|3|1|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_10_03.dump b/runtime/syntax/testdir/dumps/dots_10_03.dump
new file mode 100644
index 0000000..a0e58b5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_10_03.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|1|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0| @72
+|4|1|.@25|w|i|h@1|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_10_04.dump b/runtime/syntax/testdir/dumps/dots_10_04.dump
new file mode 100644
index 0000000..195e243
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_10_04.dump
@@ -0,0 +1,20 @@
+>4+0&#ffffff0|1|.@25|w|i|h@1|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0| @72
+|5|1|.@29|r|u|l|e|r|.@37
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|5|,|1| @10|8|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_10_05.dump b/runtime/syntax/testdir/dumps/dots_10_05.dump
new file mode 100644
index 0000000..2ed226d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_10_05.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|1|.@29|r|u|l|e|r|.@37
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|6|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_11_00.dump b/runtime/syntax/testdir/dumps/dots_11_00.dump
new file mode 100644
index 0000000..c3d7d80
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_11_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1| @72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_11_01.dump b/runtime/syntax/testdir/dumps/dots_11_01.dump
new file mode 100644
index 0000000..eb8c9aa
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_11_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1| @72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_11_02.dump b/runtime/syntax/testdir/dumps/dots_11_02.dump
new file mode 100644
index 0000000..51c79bd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_11_02.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1| @72
+|3|4|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_11_03.dump b/runtime/syntax/testdir/dumps/dots_11_03.dump
new file mode 100644
index 0000000..8d0079f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_11_03.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|4|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1| @72
+|4|5|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_11_04.dump b/runtime/syntax/testdir/dumps/dots_11_04.dump
new file mode 100644
index 0000000..b09d07d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_11_04.dump
@@ -0,0 +1,20 @@
+>4+0&#ffffff0|5|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1| @72
+|5|6|.@29|r|u|l|e|r|.@37
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|5|,|1| @10|8|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_11_05.dump b/runtime/syntax/testdir/dumps/dots_11_05.dump
new file mode 100644
index 0000000..005b9c6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_11_05.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|6|.@29|r|u|l|e|r|.@37
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@72
+|6|4|.@72
+|6|5|.@72
+|6@1| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|6|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_12_00.dump b/runtime/syntax/testdir/dumps/dots_12_00.dump
new file mode 100644
index 0000000..601363c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_12_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2| @72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_12_01.dump b/runtime/syntax/testdir/dumps/dots_12_01.dump
new file mode 100644
index 0000000..223a502
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_12_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4| @72
+|2|5|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|2|5|%|
diff --git a/runtime/syntax/testdir/dumps/dots_12_02.dump b/runtime/syntax/testdir/dumps/dots_12_02.dump
new file mode 100644
index 0000000..39efd9e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_12_02.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0|5|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6| @72
+|3|7|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_12_03.dump b/runtime/syntax/testdir/dumps/dots_12_03.dump
new file mode 100644
index 0000000..400a07a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_12_03.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|7|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8| @72
+|4|9|.@29|r|u|l|e|r|.@37
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/dots_12_04.dump b/runtime/syntax/testdir/dumps/dots_12_04.dump
new file mode 100644
index 0000000..8041b65
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_12_04.dump
@@ -0,0 +1,20 @@
+>4+0&#ffffff0|9|.@29|r|u|l|e|r|.@37
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_13_00.dump b/runtime/syntax/testdir/dumps/dots_13_00.dump
new file mode 100644
index 0000000..0f11722
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_13_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3| @72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_13_01.dump b/runtime/syntax/testdir/dumps/dots_13_01.dump
new file mode 100644
index 0000000..5e5e588
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_13_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6| @72
+|2|7|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|2|5|%|
diff --git a/runtime/syntax/testdir/dumps/dots_13_02.dump b/runtime/syntax/testdir/dumps/dots_13_02.dump
new file mode 100644
index 0000000..b094b93
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_13_02.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0|7|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9| @72
+|4|0|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_13_03.dump b/runtime/syntax/testdir/dumps/dots_13_03.dump
new file mode 100644
index 0000000..68db8d9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_13_03.dump
@@ -0,0 +1,20 @@
+>4+0&#ffffff0|0|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2| @72
+|5|3|.@29|r|u|l|e|r|.@37
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/dots_13_04.dump b/runtime/syntax/testdir/dumps/dots_13_04.dump
new file mode 100644
index 0000000..a778894
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_13_04.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|3|.@29|r|u|l|e|r|.@37
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@72
+|6|4|.@72
+|6|5| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_14_00.dump b/runtime/syntax/testdir/dumps/dots_14_00.dump
new file mode 100644
index 0000000..0964d57
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_14_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4| @72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_14_01.dump b/runtime/syntax/testdir/dumps/dots_14_01.dump
new file mode 100644
index 0000000..8942184
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_14_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8| @72
+|2|9|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|2|5|%|
diff --git a/runtime/syntax/testdir/dumps/dots_14_02.dump b/runtime/syntax/testdir/dumps/dots_14_02.dump
new file mode 100644
index 0000000..7a631f8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_14_02.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0|9|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2| @72
+|4|3|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/dots_14_03.dump b/runtime/syntax/testdir/dumps/dots_14_03.dump
new file mode 100644
index 0000000..f38ff60
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_14_03.dump
@@ -0,0 +1,20 @@
+>4+0&#ffffff0|3|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6| @72
+|5|7|.@29|r|u|l|e|r|.@37
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|4|,|1| @10|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/dots_14_04.dump b/runtime/syntax/testdir/dumps/dots_14_04.dump
new file mode 100644
index 0000000..7ad0b7f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_14_04.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|7|.@29|r|u|l|e|r|.@37
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@72
+|6|4|.@72
+|6|5|.@72
+|6@1|.@72
+|6|7|.@72
+|6|8|.@72
+|6|9|.@72
+|7|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_15_00.dump b/runtime/syntax/testdir/dumps/dots_15_00.dump
new file mode 100644
index 0000000..2894a87
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_15_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5| @72
+|1|6|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|7|.@72
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_15_01.dump b/runtime/syntax/testdir/dumps/dots_15_01.dump
new file mode 100644
index 0000000..c97e636
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_15_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|6|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0| @72
+|3|1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|2|.@72
+|3@1|.@72
+|3|4|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_15_02.dump b/runtime/syntax/testdir/dumps/dots_15_02.dump
new file mode 100644
index 0000000..31039f4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_15_02.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5| @72
+|4|6|.@29|r|u|l|e|r|.@37
+|4|7|.@72
+|4|8|.@72
+|4|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_15_03.dump b/runtime/syntax/testdir/dumps/dots_15_03.dump
new file mode 100644
index 0000000..9ffb78e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_15_03.dump
@@ -0,0 +1,20 @@
+>4+0&#ffffff0|6|.@29|r|u|l|e|r|.@37
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|4|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_16_00.dump b/runtime/syntax/testdir/dumps/dots_16_00.dump
new file mode 100644
index 0000000..5e739cb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_16_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6| @72
+|1|7|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|8|.@72
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_16_01.dump b/runtime/syntax/testdir/dumps/dots_16_01.dump
new file mode 100644
index 0000000..d3a44bb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_16_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|7|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|8|.@72
+|1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2| @72
+|3@1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|4|.@72
+|3|5|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_16_02.dump b/runtime/syntax/testdir/dumps/dots_16_02.dump
new file mode 100644
index 0000000..69b5cd9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_16_02.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0@1|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|4|.@72
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8| @72
+|4|9|.@29|r|u|l|e|r|.@37
+|5|0|.@72
+|5|1|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_16_03.dump b/runtime/syntax/testdir/dumps/dots_16_03.dump
new file mode 100644
index 0000000..f872019
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_16_03.dump
@@ -0,0 +1,20 @@
+>4+0&#ffffff0|9|.@29|r|u|l|e|r|.@37
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@72
+|6|4| @72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|4|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_17_00.dump b/runtime/syntax/testdir/dumps/dots_17_00.dump
new file mode 100644
index 0000000..77b956d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_17_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7| @72
+|1|8|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|9|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_17_01.dump b/runtime/syntax/testdir/dumps/dots_17_01.dump
new file mode 100644
index 0000000..7f755b9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_17_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|8|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|1|9|.@72
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@72
+|3|4| @72
+|3|5|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|6|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_17_02.dump b/runtime/syntax/testdir/dumps/dots_17_02.dump
new file mode 100644
index 0000000..911b019
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_17_02.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|5|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|6|.@72
+|3|7|.@72
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1| @72
+|5|2|.@30|r|u|l|e|r|.@36
+|5|3|.@69|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_17_03.dump b/runtime/syntax/testdir/dumps/dots_17_03.dump
new file mode 100644
index 0000000..3802678
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_17_03.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|2|.@30|r|u|l|e|r|.@36
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@72
+|6|4|.@72
+|6|5|.@72
+|6@1|.@72
+|6|7|.@72
+|6|8| @72
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|4|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_18_00.dump b/runtime/syntax/testdir/dumps/dots_18_00.dump
new file mode 100644
index 0000000..7c9fb22
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_18_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8| @72
+|1|9|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@27|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_18_01.dump b/runtime/syntax/testdir/dumps/dots_18_01.dump
new file mode 100644
index 0000000..b134abd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_18_01.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|9|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|2|0|.@72
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6| @72
+|3|7|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@27|@+0#4040ff13&@2
+| +0#0000000&@56|2|,|1| @10|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_18_02.dump b/runtime/syntax/testdir/dumps/dots_18_02.dump
new file mode 100644
index 0000000..10fea3b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_18_02.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|7|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|3|8|.@72
+|3|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4| @72
+|5@1|.@30|r|u|l|e|r|.@33|@+0#4040ff13&@2
+| +0#0000000&@56|3|,|1| @10|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_18_03.dump b/runtime/syntax/testdir/dumps/dots_18_03.dump
new file mode 100644
index 0000000..ea90ef4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_18_03.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0@1|.@30|r|u|l|e|r|.@36
+|5|6|.@72
+|5|7|.@72
+|5|8|.@72
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@72
+|6|4|.@72
+|6|5|.@72
+|6@1|.@72
+|6|7|.@72
+|6|8|.@72
+|6|9|.@72
+|7|0|.@72
+|7|1|.@72
+|7|2| @72
+|~+0#4040ff13&| @73
+| +0#0000000&@56|4|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_19_00.dump b/runtime/syntax/testdir/dumps/dots_19_00.dump
new file mode 100644
index 0000000..599db81
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_19_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@73
+|6|.@73
+|7|.@73
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9| @72
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_19_01.dump b/runtime/syntax/testdir/dumps/dots_19_01.dump
new file mode 100644
index 0000000..59034b9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_19_01.dump
@@ -0,0 +1,20 @@
+>2+0&#ffffff0|0|.@26|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@30
+|2|1|.@72
+|2@1|.@72
+|2|3|.@72
+|2|4|.@72
+|2|5|.@72
+|2|6|.@72
+|2|7|.@72
+|2|8|.@72
+|2|9|.@72
+|3|0|.@72
+|3|1|.@72
+|3|2|.@72
+|3@1|.@72
+|3|4|.@72
+|3|5|.@72
+|3|6|.@72
+|3|7|.@72
+|3|8| @72
+@57|2|,|1| @10|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_19_02.dump b/runtime/syntax/testdir/dumps/dots_19_02.dump
new file mode 100644
index 0000000..d38c4a9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_19_02.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|9|.@25|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@30
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7| @72
+@57|3|,|1| @10|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/dots_19_03.dump b/runtime/syntax/testdir/dumps/dots_19_03.dump
new file mode 100644
index 0000000..be794bb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_19_03.dump
@@ -0,0 +1,20 @@
+>5+0&#ffffff0|8|.@30|r|u|l|e|r|.@36
+|5|9|.@72
+|6|0|.@72
+|6|1|.@72
+|6|2|.@72
+|6|3|.@72
+|6|4|.@72
+|6|5|.@72
+|6@1|.@72
+|6|7|.@72
+|6|8|.@72
+|6|9|.@72
+|7|0|.@72
+|7|1|.@72
+|7|2|.@72
+|7|3|.@72
+|7|4|.@72
+|7|5|.@72
+|7|6| @72
+@57|4|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/dots_20_00.dump b/runtime/syntax/testdir/dumps/dots_20_00.dump
new file mode 100644
index 0000000..5103c34
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_20_00.dump
@@ -0,0 +1,20 @@
+>1+0&#ffffff0|.@73
+|2|.@73
+|3|.@73
+|4|.@73
+|5|.@28|w|i|n|w|i|d|t|h|(|0|)|:| |7|5|.@29
+|6|.@27|w|i|n|h|e|i|g|h|t|(|0|)|:| |1|9|.@29
+|7|.@31|r|u|l|e|r|.@36
+|8|.@73
+|9|.@73
+|1|0|.@72
+|1@1|.@72
+|1|2|.@72
+|1|3|.@72
+|1|4|.@72
+|1|5|.@72
+|1|6|.@72
+|1|7|.@72
+|1|8|.@72
+|1|9|.@72
+| @56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/dots_20_01.dump b/runtime/syntax/testdir/dumps/dots_20_01.dump
new file mode 100644
index 0000000..09c1fcc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/dots_20_01.dump
@@ -0,0 +1,20 @@
+>3+0&#ffffff0|9|.@72
+|4|0|.@72
+|4|1|.@72
+|4|2|.@72
+|4|3|.@72
+|4@1|.@72
+|4|5|.@72
+|4|6|.@72
+|4|7|.@72
+|4|8|.@72
+|4|9|.@72
+|5|0|.@72
+|5|1|.@72
+|5|2|.@72
+|5|3|.@72
+|5|4|.@72
+|5@1|.@72
+|5|6|.@72
+|5|7|.@72
+| @56|2|,|1| @10|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/html_01.dump b/runtime/syntax/testdir/dumps/html_01.dump
index 48b11e6..dbc1969 100644
--- a/runtime/syntax/testdir/dumps/html_01.dump
+++ b/runtime/syntax/testdir/dumps/html_01.dump
@@ -1,9 +1,11 @@
-|<+0#00e0e07#ffffff0|a+0#af5f00255&|b@1|r|>+0#00e0e07&|<|/|a+0#af5f00255&|b@1|r|>+0#00e0e07&| +0#0000000&@61
+|<+0#0000e05#ffffff0|!|-@1| |H|T|M|L| |E|l|e|m|e|n|t|s| |-@1|>| +0#0000000&@52
+|<+0#00e0e07&|a+0#af5f00255&|>+0#00e0e07&|<|/|a+0#af5f00255&|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|a+0#af5f00255&|b@1|r|>+0#00e0e07&|<|/|a+0#af5f00255&|b@1|r|>+0#00e0e07&| +0#0000000&@61
|<+0#00e0e07&|a+0#af5f00255&|d@1|r|e|s@1|>+0#00e0e07&|<|/|a+0#af5f00255&|d@1|r|e|s@1|>+0#00e0e07&| +0#0000000&@55
|<+0#00e0e07&|a+0#af5f00255&|r|e|a|>+0#00e0e07&| +0#0000000&@68
-|<+0#00e0e07&|a+0#af5f00255&|r|t|i|c|l|e|>+0#00e0e07&|<|/|a+0#af5f00255&|r|t|i|c|l|e|>+0#00e0e07&| +0#0000000&@55
+><+0#00e0e07&|a+0#af5f00255&|r|t|i|c|l|e|>+0#00e0e07&|<|/|a+0#af5f00255&|r|t|i|c|l|e|>+0#00e0e07&| +0#0000000&@55
|<+0#00e0e07&|a+0#af5f00255&|s|i|d|e|>+0#00e0e07&|<|/|a+0#af5f00255&|s|i|d|e|>+0#00e0e07&| +0#0000000&@59
-><+0#00e0e07&|a+0#af5f00255&|u|d|i|o|>+0#00e0e07&|<|/|a+0#af5f00255&|u|d|i|o|>+0#00e0e07&| +0#0000000&@59
+|<+0#00e0e07&|a+0#af5f00255&|u|d|i|o|>+0#00e0e07&|<|/|a+0#af5f00255&|u|d|i|o|>+0#00e0e07&| +0#0000000&@59
|<+0#00e0e07&|b+0#af5f00255&|>+0#00e0e07&|b+0#0000000&|r|i|n|g| |a|t@1|e|n|t|i|o|n| |t|o|<+0#00e0e07&|/|b+0#af5f00255&|>+0#00e0e07&| +0#0000000&@49
|<+0#00e0e07&|b+0#af5f00255&|a|s|e|>+0#00e0e07&| +0#0000000&@68
|<+0#00e0e07&|b+0#af5f00255&|d|i|>+0#00e0e07&|<|/|b+0#af5f00255&|d|i|>+0#00e0e07&| +0#0000000&@63
@@ -15,6 +17,4 @@
|<+0#00e0e07&|c+0#af5f00255&|a|n|v|a|s|>+0#00e0e07&|<|/|c+0#af5f00255&|a|n|v|a|s|>+0#00e0e07&| +0#0000000&@57
|<+0#00e0e07&|c+0#af5f00255&|a|p|t|i|o|n|>+0#00e0e07&|<|/|c+0#af5f00255&|a|p|t|i|o|n|>+0#00e0e07&| +0#0000000&@55
|<+0#00e0e07&|c+0#af5f00255&|i|t|e|>+0#00e0e07&|<|/|c+0#af5f00255&|i|t|e|>+0#00e0e07&| +0#0000000&@61
-|<+0#00e0e07&|c+0#af5f00255&|o|d|e|>+0#00e0e07&|<|/|c+0#af5f00255&|o|d|e|>+0#00e0e07&| +0#0000000&@61
-|<+0#00e0e07&|c+0#af5f00255&|o|l|>+0#00e0e07&| +0#0000000&@69
-@57|1|9|,|1| @10|9|%|
+@57|1|7|,|1| @10|8|%|
diff --git a/runtime/syntax/testdir/dumps/html_02.dump b/runtime/syntax/testdir/dumps/html_02.dump
index bc55823..16f3cf2 100644
--- a/runtime/syntax/testdir/dumps/html_02.dump
+++ b/runtime/syntax/testdir/dumps/html_02.dump
@@ -1,9 +1,11 @@
-|<+0#00e0e07#ffffff0|c+0#af5f00255&|o|l|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07#ffffff0|c+0#af5f00255&|i|t|e|>+0#00e0e07&|<|/|c+0#af5f00255&|i|t|e|>+0#00e0e07&| +0#0000000&@61
+|<+0#00e0e07&|c+0#af5f00255&|o|d|e|>+0#00e0e07&|<|/|c+0#af5f00255&|o|d|e|>+0#00e0e07&| +0#0000000&@61
+|<+0#00e0e07&|c+0#af5f00255&|o|l|>+0#00e0e07&| +0#0000000&@69
|<+0#00e0e07&|c+0#af5f00255&|o|l|g|r|o|u|p|>+0#00e0e07&|<|/|c+0#af5f00255&|o|l|g|r|o|u|p|>+0#00e0e07&| +0#0000000&@53
|<+0#00e0e07&|d+0#af5f00255&|a|t|a|>+0#00e0e07&|<|/|d+0#af5f00255&|a|t|a|>+0#00e0e07&| +0#0000000&@61
-|<+0#00e0e07&|d+0#af5f00255&|a|t|a|l|i|s|t|>+0#00e0e07&|<|/|d+0#af5f00255&|a|t|a|l|i|s|t|>+0#00e0e07&| +0#0000000&@53
+><+0#00e0e07&|d+0#af5f00255&|a|t|a|l|i|s|t|>+0#00e0e07&|<|/|d+0#af5f00255&|a|t|a|l|i|s|t|>+0#00e0e07&| +0#0000000&@53
|<+0#00e0e07&|d+0#af5f00255&@1|>+0#00e0e07&|<|/|d+0#af5f00255&@1|>+0#00e0e07&| +0#0000000&@65
-><+0#00e0e07&|d+0#af5f00255&|e|l|>+0#00e0e07&|d+0#0000000&|e|l|e|t|e|d| |t|e|x|t|<+0#00e0e07&|/|d+0#af5f00255&|e|l|>+0#00e0e07&| +0#0000000&@51
+|<+0#00e0e07&|d+0#af5f00255&|e|l|>+0#00e0e07&|d+0#0000000&|e|l|e|t|e|d| |t|e|x|t|<+0#00e0e07&|/|d+0#af5f00255&|e|l|>+0#00e0e07&| +0#0000000&@51
|<+0#00e0e07&|d+0#af5f00255&|e|t|a|i|l|s|>+0#00e0e07&|<|/|d+0#af5f00255&|e|t|a|i|l|s|>+0#00e0e07&| +0#0000000&@55
|<+0#00e0e07&|d+0#af5f00255&|f|n|>+0#00e0e07&|<|/|d+0#af5f00255&|f|n|>+0#00e0e07&| +0#0000000&@63
|<+0#00e0e07&|d+0#af5f00255&|i|a|l|o|g|>+0#00e0e07&|<|/|d+0#af5f00255&|i|a|l|o|g|>+0#00e0e07&| +0#0000000&@57
@@ -15,6 +17,4 @@
|<+0#00e0e07&|f+0#af5f00255&|i|e|l|d|s|e|t|>+0#00e0e07&|<|/|f+0#af5f00255&|i|e|l|d|s|e|t|>+0#00e0e07&| +0#0000000&@53
|<+0#00e0e07&|f+0#af5f00255&|i|g|c|a|p|t|i|o|n|>+0#00e0e07&|<|/|f+0#af5f00255&|i|g|c|a|p|t|i|o|n|>+0#00e0e07&| +0#0000000&@49
|<+0#00e0e07&|f+0#af5f00255&|i|g|u|r|e|>+0#00e0e07&|<|/|f+0#af5f00255&|i|g|u|r|e|>+0#00e0e07&| +0#0000000&@57
-|<+0#00e0e07&|f+0#af5f00255&|o@1|t|e|r|>+0#00e0e07&|<|/|f+0#af5f00255&|o@1|t|e|r|>+0#00e0e07&| +0#0000000&@57
-|<+0#00e0e07&|f+0#af5f00255&|o|r|m|>+0#00e0e07&|<|/|f+0#af5f00255&|o|r|m|>+0#00e0e07&| +0#0000000&@61
-@57|3|7|,|1| @9|2|3|%|
+@57|3|5|,|1| @9|2|1|%|
diff --git a/runtime/syntax/testdir/dumps/html_03.dump b/runtime/syntax/testdir/dumps/html_03.dump
index 4953d71..6883fd4 100644
--- a/runtime/syntax/testdir/dumps/html_03.dump
+++ b/runtime/syntax/testdir/dumps/html_03.dump
@@ -1,9 +1,11 @@
-|<+0#00e0e07#ffffff0|f+0#af5f00255&|o|r|m|>+0#00e0e07&|<|/|f+0#af5f00255&|o|r|m|>+0#00e0e07&| +0#0000000&@61
+|<+0#00e0e07#ffffff0|f+0#af5f00255&|i|g|u|r|e|>+0#00e0e07&|<|/|f+0#af5f00255&|i|g|u|r|e|>+0#00e0e07&| +0#0000000&@57
+|<+0#00e0e07&|f+0#af5f00255&|o@1|t|e|r|>+0#00e0e07&|<|/|f+0#af5f00255&|o@1|t|e|r|>+0#00e0e07&| +0#0000000&@57
+|<+0#00e0e07&|f+0#af5f00255&|o|r|m|>+0#00e0e07&|<|/|f+0#af5f00255&|o|r|m|>+0#00e0e07&| +0#0000000&@61
|<+0#00e0e07&|h+0#af5f00255&|1|>+0#00e0e07&|H+0#0000000&|e|a|d|i|n|g| |L|e|v|e|l| |1|<+0#00e0e07&|/|h+0#af5f00255&|1|>+0#00e0e07&| +0#0000000&@50
|<+0#00e0e07&|h+0#af5f00255&|2|>+0#00e0e07&|H+0#0000000&|e|a|d|i|n|g| |L|e|v|e|l| |3|<+0#00e0e07&|/|h+0#af5f00255&|2|>+0#00e0e07&| +0#0000000&@50
-|<+0#00e0e07&|h+0#af5f00255&|3|>+0#00e0e07&|H+0#0000000&|e|a|d|i|n|g| |L|e|v|e|l| |4|<+0#00e0e07&|/|h+0#af5f00255&|3|>+0#00e0e07&| +0#0000000&@50
+><+0#00e0e07&|h+0#af5f00255&|3|>+0#00e0e07&|H+0#0000000&|e|a|d|i|n|g| |L|e|v|e|l| |4|<+0#00e0e07&|/|h+0#af5f00255&|3|>+0#00e0e07&| +0#0000000&@50
|<+0#00e0e07&|h+0#af5f00255&|4|>+0#00e0e07&|H+0#0000000&|e|a|d|i|n|g| |L|e|v|e|l| |4|<+0#00e0e07&|/|h+0#af5f00255&|4|>+0#00e0e07&| +0#0000000&@50
-><+0#00e0e07&|h+0#af5f00255&|5|>+0#00e0e07&|H+0#0000000&|e|a|d|i|n|g| |L|e|v|e|l| |5|<+0#00e0e07&|/|h+0#af5f00255&|5|>+0#00e0e07&| +0#0000000&@50
+|<+0#00e0e07&|h+0#af5f00255&|5|>+0#00e0e07&|H+0#0000000&|e|a|d|i|n|g| |L|e|v|e|l| |5|<+0#00e0e07&|/|h+0#af5f00255&|5|>+0#00e0e07&| +0#0000000&@50
|<+0#00e0e07&|h+0#af5f00255&|6|>+0#00e0e07&|H+0#0000000&|e|a|d|i|n|g| |L|e|v|e|l| |6|<+0#00e0e07&|/|h+0#af5f00255&|6|>+0#00e0e07&| +0#0000000&@50
|<+0#00e0e07&|h+0#af5f00255&|e|a|d|>+0#00e0e07&|<|/|h+0#af5f00255&|e|a|d|>+0#00e0e07&| +0#0000000&@61
|<+0#00e0e07&|h+0#af5f00255&|e|a|d|e|r|>+0#00e0e07&|<|/|h+0#af5f00255&|e|a|d|e|r|>+0#00e0e07&| +0#0000000&@57
@@ -15,6 +17,4 @@
|<+0#00e0e07&|i+0#af5f00255&|m|g|>+0#00e0e07&| +0#0000000&@69
|<+0#00e0e07&|i+0#af5f00255&|n|p|u|t|>+0#00e0e07&| +0#0000000&@67
|<+0#00e0e07&|i+0#af5f00255&|n|s|>+0#00e0e07&|<|/|i+0#af5f00255&|n|s|>+0#00e0e07&| +0#0000000&@63
-|<+0#00e0e07&|k+0#af5f00255&|b|d|>+0#00e0e07&|<|/|k+0#af5f00255&|b|d|>+0#00e0e07&| +0#0000000&@63
-|<+0#00e0e07&|l+0#af5f00255&|a|b|e|l|>+0#00e0e07&|<|/|l+0#af5f00255&|a|b|e|l|>+0#00e0e07&| +0#0000000&@59
-@57|5@1|,|1| @9|3|6|%|
+@57|5|3|,|1| @9|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/html_04.dump b/runtime/syntax/testdir/dumps/html_04.dump
index b2416e8..6e4aa7c 100644
--- a/runtime/syntax/testdir/dumps/html_04.dump
+++ b/runtime/syntax/testdir/dumps/html_04.dump
@@ -1,9 +1,11 @@
-|<+0#00e0e07#ffffff0|l+0#af5f00255&|a|b|e|l|>+0#00e0e07&|<|/|l+0#af5f00255&|a|b|e|l|>+0#00e0e07&| +0#0000000&@59
+|<+0#00e0e07#ffffff0|i+0#af5f00255&|n|s|>+0#00e0e07&|<|/|i+0#af5f00255&|n|s|>+0#00e0e07&| +0#0000000&@63
+|<+0#00e0e07&|k+0#af5f00255&|b|d|>+0#00e0e07&|<|/|k+0#af5f00255&|b|d|>+0#00e0e07&| +0#0000000&@63
+|<+0#00e0e07&|l+0#af5f00255&|a|b|e|l|>+0#00e0e07&|<|/|l+0#af5f00255&|a|b|e|l|>+0#00e0e07&| +0#0000000&@59
|<+0#00e0e07&|l+0#af5f00255&|e|g|e|n|d|>+0#00e0e07&|<|/|l+0#af5f00255&|e|g|e|n|d|>+0#00e0e07&| +0#0000000&@57
|<+0#00e0e07&|l+0#af5f00255&|i|>+0#00e0e07&|<|/|l+0#af5f00255&|i|>+0#00e0e07&| +0#0000000&@65
-|<+0#00e0e07&|l+0#af5f00255&|i|n|k|>+0#00e0e07&| +0#0000000&@68
+><+0#00e0e07&|l+0#af5f00255&|i|n|k|>+0#00e0e07&| +0#0000000&@68
|<+0#00e0e07&|m+0#af5f00255&|a|i|n|>+0#00e0e07&|<|/|m+0#af5f00255&|a|i|n|>+0#00e0e07&| +0#0000000&@61
-><+0#00e0e07&|m+0#af5f00255&|a|p|>+0#00e0e07&|<|/|m+0#af5f00255&|a|p|>+0#00e0e07&| +0#0000000&@63
+|<+0#00e0e07&|m+0#af5f00255&|a|p|>+0#00e0e07&|<|/|m+0#af5f00255&|a|p|>+0#00e0e07&| +0#0000000&@63
|<+0#00e0e07&|m+0#af5f00255&|a|r|k|>+0#00e0e07&|<|/|m+0#af5f00255&|a|r|k|>+0#00e0e07&| +0#0000000&@61
|<+0#00e0e07&|m+0#af5f00255&|e|n|u|>+0#00e0e07&|<|/|m+0#af5f00255&|e|n|u|>+0#00e0e07&| +0#0000000&@61
|<+0#00e0e07&|m+0#af5f00255&|e|t|a|>+0#00e0e07&| +0#0000000&@68
@@ -15,6 +17,4 @@
|<+0#00e0e07&|o+0#af5f00255&|p|t|g|r|o|u|p|>+0#00e0e07&|<|/|o+0#af5f00255&|p|t|g|r|o|u|p|>+0#00e0e07&| +0#0000000&@53
|<+0#00e0e07&|o+0#af5f00255&|p|t|i|o|n|>+0#00e0e07&|<|/|o+0#af5f00255&|p|t|i|o|n|>+0#00e0e07&| +0#0000000&@57
|<+0#00e0e07&|o+0#af5f00255&|u|t|p|u|t|>+0#00e0e07&|<|/|o+0#af5f00255&|u|t|p|u|t|>+0#00e0e07&| +0#0000000&@57
-|<+0#00e0e07&|p+0#af5f00255&|>+0#00e0e07&|<|/|p+0#af5f00255&|>+0#00e0e07&| +0#0000000&@67
-|<+0#00e0e07&|p+0#af5f00255&|i|c|t|u|r|e|>+0#00e0e07&|<|/|p+0#af5f00255&|i|c|t|u|r|e|>+0#00e0e07&| +0#0000000&@55
-@57|7|3|,|1| @9|5|0|%|
+@57|7|1|,|1| @9|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/html_05.dump b/runtime/syntax/testdir/dumps/html_05.dump
index 20df53e..c643720 100644
--- a/runtime/syntax/testdir/dumps/html_05.dump
+++ b/runtime/syntax/testdir/dumps/html_05.dump
@@ -1,9 +1,11 @@
-|<+0#00e0e07#ffffff0|p+0#af5f00255&|i|c|t|u|r|e|>+0#00e0e07&|<|/|p+0#af5f00255&|i|c|t|u|r|e|>+0#00e0e07&| +0#0000000&@55
+|<+0#00e0e07#ffffff0|o+0#af5f00255&|u|t|p|u|t|>+0#00e0e07&|<|/|o+0#af5f00255&|u|t|p|u|t|>+0#00e0e07&| +0#0000000&@57
+|<+0#00e0e07&|p+0#af5f00255&|>+0#00e0e07&|<|/|p+0#af5f00255&|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|p+0#af5f00255&|i|c|t|u|r|e|>+0#00e0e07&|<|/|p+0#af5f00255&|i|c|t|u|r|e|>+0#00e0e07&| +0#0000000&@55
|<+0#00e0e07&|p+0#af5f00255&|r|e|>+0#00e0e07&|p+0#0000000&|r|e|f|o|r|m|a|t@1|e|d| |t|e|x|t|<+0#00e0e07&|/|p+0#af5f00255&|r|e|>+0#00e0e07&| +0#0000000&@46
|<+0#00e0e07&|p+0#af5f00255&|r|o|g|r|e|s@1|>+0#00e0e07&|<|/|p+0#af5f00255&|r|o|g|r|e|s@1|>+0#00e0e07&| +0#0000000&@53
-|<+0#00e0e07&|q+0#af5f00255&|>+0#00e0e07&|<|/|q+0#af5f00255&|>+0#00e0e07&| +0#0000000&@67
+><+0#00e0e07&|q+0#af5f00255&|>+0#00e0e07&|<|/|q+0#af5f00255&|>+0#00e0e07&| +0#0000000&@67
|<+0#00e0e07&|r+0#af5f00255&|p|>+0#00e0e07&|<|/|r+0#af5f00255&|p|>+0#00e0e07&| +0#0000000&@65
-><+0#00e0e07&|r+0#af5f00255&|t|>+0#00e0e07&|<|/|r+0#af5f00255&|t|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|r+0#af5f00255&|t|>+0#00e0e07&|<|/|r+0#af5f00255&|t|>+0#00e0e07&| +0#0000000&@65
|<+0#00e0e07&|r+0#af5f00255&|u|b|y|>+0#00e0e07&|<|/|r+0#af5f00255&|u|b|y|>+0#00e0e07&| +0#0000000&@61
|<+0#0000e05&|!|-@1| |F|r|e@1|B|S|D| |f|a|i|l|u|r|e| +0#0000000&@54
|<+0#0000e05&|s|>|s|t|r|i|k|e|t|h|r|o|u|g|h|<|/|s|>| +0#0000000&@54
@@ -15,6 +17,4 @@
|<+0#00e0e07&|s+0#af5f00255&|e|l|e|c|t|>+0#00e0e07&|<|/|s+0#af5f00255&|e|l|e|c|t|>+0#00e0e07&| +0#0000000&@57
|<+0#00e0e07&|s+0#af5f00255&|l|o|t|>+0#00e0e07&|<|/|s+0#af5f00255&|l|o|t|>+0#00e0e07&| +0#0000000&@61
|<+0#00e0e07&|s+0#af5f00255&|m|a|l@1|>+0#00e0e07&|<|/|s+0#af5f00255&|m|a|l@1|>+0#00e0e07&| +0#0000000&@59
-|<+0#00e0e07&|s+0#af5f00255&|o|u|r|c|e|>+0#00e0e07&| +0#0000000&@66
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@61
-@57|9|1|,|1| @9|6|3|%|
+@57|8|9|,|1| @9|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/html_06.dump b/runtime/syntax/testdir/dumps/html_06.dump
index d24392f..5696b87 100644
--- a/runtime/syntax/testdir/dumps/html_06.dump
+++ b/runtime/syntax/testdir/dumps/html_06.dump
@@ -1,9 +1,11 @@
-|<+0#00e0e07#ffffff0|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@61
+|<+0#00e0e07#ffffff0|s+0#af5f00255&|m|a|l@1|>+0#00e0e07&|<|/|s+0#af5f00255&|m|a|l@1|>+0#00e0e07&| +0#0000000&@59
+|<+0#00e0e07&|s+0#af5f00255&|o|u|r|c|e|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@61
|<+0#00e0e07&|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|s+0#0000000&|t|r|o|n|g| |i|m|p|o|r|t|a|n|c|e|<+0#00e0e07&|/|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&| +0#0000000&@40
|<+0#00e0e07&|s+0#af5f00255&|t|y|l|e|>+0#00e0e07&|<|/|s+0#af5f00255&|t|y|l|e|>+0#00e0e07&| +0#0000000&@59
-|<+0#00e0e07&|s+0#af5f00255&|u|b|>+0#00e0e07&|<|/|s+0#af5f00255&|u|b|>+0#00e0e07&| +0#0000000&@63
+><+0#00e0e07&|s+0#af5f00255&|u|b|>+0#00e0e07&|<|/|s+0#af5f00255&|u|b|>+0#00e0e07&| +0#0000000&@63
|<+0#00e0e07&|s+0#af5f00255&|u|m@1|a|r|y|>+0#00e0e07&|<|/|s+0#af5f00255&|u|m@1|a|r|y|>+0#00e0e07&| +0#0000000&@55
-><+0#00e0e07&|s+0#af5f00255&|u|p|>+0#00e0e07&|<|/|s+0#af5f00255&|u|p|>+0#00e0e07&| +0#0000000&@63
+|<+0#00e0e07&|s+0#af5f00255&|u|p|>+0#00e0e07&|<|/|s+0#af5f00255&|u|p|>+0#00e0e07&| +0#0000000&@63
|<+0#00e0e07&|t+0#af5f00255&|a|b|l|e|>+0#00e0e07&|<|/|t+0#af5f00255&|a|b|l|e|>+0#00e0e07&| +0#0000000&@59
|<+0#00e0e07&|t+0#af5f00255&|b|o|d|y|>+0#00e0e07&|<|/|t+0#af5f00255&|b|o|d|y|>+0#00e0e07&| +0#0000000&@59
|<+0#00e0e07&|t+0#af5f00255&|d|>+0#00e0e07&|<|/|t+0#af5f00255&|d|>+0#00e0e07&| +0#0000000&@65
@@ -15,6 +17,4 @@
|<+0#00e0e07&|t+0#af5f00255&|i|m|e|>+0#00e0e07&|<|/|t+0#af5f00255&|i|m|e|>+0#00e0e07&| +0#0000000&@61
|<+0#00e0e07&|t+0#af5f00255&|i|t|l|e|>+0#00e0e07&|<|/|t+0#af5f00255&|i|t|l|e|>+0#00e0e07&| +0#0000000&@59
|<+0#00e0e07&|t+0#af5f00255&|r|>+0#00e0e07&|<|/|t+0#af5f00255&|r|>+0#00e0e07&| +0#0000000&@65
-|<+0#00e0e07&|t+0#af5f00255&|r|a|c|k|>+0#00e0e07&| +0#0000000&@67
-|<+0#00e0e07&|u+0#af5f00255&|>+0#00e0e07&|u+0#0000000&|n|a|r|t|i|c|u|l|a|t|e|d| |a|n@1|o|t|a|t|i|o|n|<+0#00e0e07&|/|u+0#af5f00255&|>+0#00e0e07&| +0#0000000&@43
-@57|1|0|9|,|1| @8|7|6|%|
+@57|1|0|7|,|1| @8|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/html_07.dump b/runtime/syntax/testdir/dumps/html_07.dump
index 8a56d4d..5c57ac4 100644
--- a/runtime/syntax/testdir/dumps/html_07.dump
+++ b/runtime/syntax/testdir/dumps/html_07.dump
@@ -1,9 +1,11 @@
-|<+0#00e0e07#ffffff0|u+0#af5f00255&|>+0#00e0e07&|u+0#0000000&|n|a|r|t|i|c|u|l|a|t|e|d| |a|n@1|o|t|a|t|i|o|n|<+0#00e0e07&|/|u+0#af5f00255&|>+0#00e0e07&| +0#0000000&@43
+|<+0#00e0e07#ffffff0|t+0#af5f00255&|r|>+0#00e0e07&|<|/|t+0#af5f00255&|r|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|t+0#af5f00255&|r|a|c|k|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|u+0#af5f00255&|>+0#00e0e07&|u+0#0000000&|n|a|r|t|i|c|u|l|a|t|e|d| |a|n@1|o|t|a|t|i|o|n|<+0#00e0e07&|/|u+0#af5f00255&|>+0#00e0e07&| +0#0000000&@43
|<+0#00e0e07&|u+0#af5f00255&|l|>+0#00e0e07&|<|/|u+0#af5f00255&|l|>+0#00e0e07&| +0#0000000&@65
|<+0#00e0e07&|v+0#af5f00255&|a|r|>+0#00e0e07&|<|/|v+0#af5f00255&|a|r|>+0#00e0e07&| +0#0000000&@63
-|<+0#00e0e07&|v+0#af5f00255&|i|d|e|o|>+0#00e0e07&|<|/|v+0#af5f00255&|i|d|e|o|>+0#00e0e07&| +0#0000000&@59
+><+0#00e0e07&|v+0#af5f00255&|i|d|e|o|>+0#00e0e07&|<|/|v+0#af5f00255&|i|d|e|o|>+0#00e0e07&| +0#0000000&@59
|<+0#00e0e07&|w+0#af5f00255&|b|r|>+0#00e0e07&| +0#0000000&@69
-><+0#00e0e07&|x+0#af5f00255&|m|p|>+0#00e0e07&|<|/|x+0#af5f00255&|m|p|>+0#00e0e07&| +0#0000000&@63
+|<+0#00e0e07&|x+0#af5f00255&|m|p|>+0#00e0e07&|<|/|x+0#af5f00255&|m|p|>+0#00e0e07&| +0#0000000&@63
@75
|<+0#0000e05&|!|-@1| |D|e|p|r|e|c|a|t|e|d| |E|l|e|m|e|n|t|s| |-@1|>| +0#0000000&@46
|<+0#00e0e07&|a+0#af5f00255&|c|r|o|n|y|m|>+0#00e0e07&|<|/|a+0#af5f00255&|c|r|o|n|y|m|>+0#00e0e07&| +0#0000000&@55
@@ -15,6 +17,4 @@
|<+0#00e0e07&|f+0#af5f00255&|r|a|m|e|s|e|t|>+0#00e0e07&|<|/|f+0#af5f00255&|r|a|m|e|s|e|t|>+0#00e0e07&| +0#0000000&@53
|<+0#00e0e07&|m+0#af5f00255&|a|r|q|u|e@1|>+0#00e0e07&|<|/|m+0#af5f00255&|a|r|q|u|e@1|>+0#00e0e07&| +0#0000000&@55
|<+0#00e0e07&|m+0#af5f00255&|e|n|u|i|t|e|m|>+0#00e0e07&|<|/|m+0#af5f00255&|e|n|u|i|t|e|m|>+0#00e0e07&| +0#0000000&@53
-|<+0#00e0e07&|n+0#af5f00255&|o|b|r|>+0#00e0e07&|<|/|n+0#af5f00255&|o|b|r|>+0#00e0e07&| +0#0000000&@61
-|<+0#00e0e07&|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&|<|/|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&| +0#0000000&@53
-@57|1|2|7|,|1| @8|9|0|%|
+@57|1|2|5|,|1| @8|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/html_08.dump b/runtime/syntax/testdir/dumps/html_08.dump
index 02a68e7..dbae33a 100644
--- a/runtime/syntax/testdir/dumps/html_08.dump
+++ b/runtime/syntax/testdir/dumps/html_08.dump
@@ -1,9 +1,11 @@
-|<+0#00e0e07#ffffff0|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&|<|/|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&| +0#0000000&@53
+|<+0#00e0e07#ffffff0|m+0#af5f00255&|e|n|u|i|t|e|m|>+0#00e0e07&|<|/|m+0#af5f00255&|e|n|u|i|t|e|m|>+0#00e0e07&| +0#0000000&@53
+|<+0#00e0e07&|n+0#af5f00255&|o|b|r|>+0#00e0e07&|<|/|n+0#af5f00255&|o|b|r|>+0#00e0e07&| +0#0000000&@61
+|<+0#00e0e07&|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&|<|/|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&| +0#0000000&@53
|<+0#00e0e07&|p+0#af5f00255&|a|r|a|m|>+0#00e0e07&| +0#0000000&@67
|<+0#00e0e07&|r+0#af5f00255&|b|>+0#00e0e07&|<|/|r+0#af5f00255&|b|>+0#00e0e07&| +0#0000000&@65
-|<+0#00e0e07&|r+0#af5f00255&|t|c|>+0#00e0e07&|<|/|r+0#af5f00255&|t|c|>+0#00e0e07&| +0#0000000&@63
+><+0#00e0e07&|r+0#af5f00255&|t|c|>+0#00e0e07&|<|/|r+0#af5f00255&|t|c|>+0#00e0e07&| +0#0000000&@63
|<+0#00e0e07&|s+0#af5f00255&|t|r|i|k|e|>+0#00e0e07&|s+0#0000000&|t|r|i|k|e|t|h|r|o|u|g|h|<+0#00e0e07&|/|s+0#af5f00255&|t|r|i|k|e|>+0#00e0e07&| +0#0000000&@44
-><+0#00e0e07&|t+0#af5f00255&@1|>+0#00e0e07&|<|/|t+0#af5f00255&@1|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|t+0#af5f00255&@1|>+0#00e0e07&|<|/|t+0#af5f00255&@1|>+0#00e0e07&| +0#0000000&@65
@75
|<+0#0000e05&|!|-@1| |E|x|p|e|r|i|m|e|n|t|a|l| |-| |n|o|t| |h|i|g|h|l|i|g|h|t|e|d| |-@1|>| +0#0000000&@35
|<+0#00e0e07&|p+0#0000000&|o|r|t|a|l|>+0#00e0e07&|<|/|p+0#0000000&|o|r|t|a|l|>+0#00e0e07&| +0#0000000&@57
@@ -15,6 +17,4 @@
|~+0#4040ff13&| @73
|~| @73
|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|4|5|,|1| @8|B|o|t|
+| +0#0000000&@56|1|4|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/html_99.dump b/runtime/syntax/testdir/dumps/html_99.dump
deleted file mode 100644
index 14866b6..0000000
--- a/runtime/syntax/testdir/dumps/html_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|<+0#00e0e07#ffffff0|f+0#af5f00255&|r|a|m|e|>+0#00e0e07&|<|/|f+0#af5f00255&|r|a|m|e|>+0#00e0e07&| +0#0000000&@59
-|<+0#00e0e07&|f+0#af5f00255&|r|a|m|e|s|e|t|>+0#00e0e07&|<|/|f+0#af5f00255&|r|a|m|e|s|e|t|>+0#00e0e07&| +0#0000000&@53
-|<+0#00e0e07&|m+0#af5f00255&|a|r|q|u|e@1|>+0#00e0e07&|<|/|m+0#af5f00255&|a|r|q|u|e@1|>+0#00e0e07&| +0#0000000&@55
-|<+0#00e0e07&|m+0#af5f00255&|e|n|u|i|t|e|m|>+0#00e0e07&|<|/|m+0#af5f00255&|e|n|u|i|t|e|m|>+0#00e0e07&| +0#0000000&@53
-|<+0#00e0e07&|n+0#af5f00255&|o|b|r|>+0#00e0e07&|<|/|n+0#af5f00255&|o|b|r|>+0#00e0e07&| +0#0000000&@61
-|<+0#00e0e07&|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&|<|/|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&| +0#0000000&@53
-|<+0#00e0e07&|p+0#af5f00255&|a|r|a|m|>+0#00e0e07&| +0#0000000&@67
-|<+0#00e0e07&|r+0#af5f00255&|b|>+0#00e0e07&|<|/|r+0#af5f00255&|b|>+0#00e0e07&| +0#0000000&@65
-|<+0#00e0e07&|r+0#af5f00255&|t|c|>+0#00e0e07&|<|/|r+0#af5f00255&|t|c|>+0#00e0e07&| +0#0000000&@63
-|<+0#00e0e07&|s+0#af5f00255&|t|r|i|k|e|>+0#00e0e07&|s+0#0000000&|t|r|i|k|e|t|h|r|o|u|g|h|<+0#00e0e07&|/|s+0#af5f00255&|t|r|i|k|e|>+0#00e0e07&| +0#0000000&@44
-|<+0#00e0e07&|t+0#af5f00255&@1|>+0#00e0e07&|<|/|t+0#af5f00255&@1|>+0#00e0e07&| +0#0000000&@65
-@75
-|<+0#0000e05&|!|-@1| |E|x|p|e|r|i|m|e|n|t|a|l| |-| |n|o|t| |h|i|g|h|l|i|g|h|t|e|d| |-@1|>| +0#0000000&@35
-|<+0#00e0e07&|p+0#0000000&|o|r|t|a|l|>+0#00e0e07&|<|/|p+0#0000000&|o|r|t|a|l|>+0#00e0e07&| +0#0000000&@57
-@75
-|<+0#0000e05&|!|-@1| |N|o|t|e|:| |t|h|e|s|e| |d|e|p|r|e|c|a|t|e|d| |e|l|e|m|e|n|t|s| |h|a|v|e| |n|e|v|e|r| |b|e@1|n| |m|a|t|c|h|e|d| |-@1|>| +0#0000000&@10
-|<+0#00e0e07&|i+0#0000000&|m|a|g|e|>+0#00e0e07&| +0#0000000&@67
-|<+0#00e0e07&|n+0#0000000&|o|e|m|b|e|d|>+0#00e0e07&| +0#0000000&@65
-><+0#00e0e07&|p+0#0000000&|l|a|i|n|t|e|x|t|>+0#00e0e07&| +0#0000000&@63
-@57|1|5|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_99.dump b/runtime/syntax/testdir/dumps/java_annotations_99.dump
deleted file mode 100644
index 7d158f2..0000000
--- a/runtime/syntax/testdir/dumps/java_annotations_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0#e000002#ffffff0@3|o|\| +0#0000000&@68
-| +0#e000002&@3|O|\| +0#0000000&@68
-| +0#e000002&@3|p|"+0#0000000&@2|)+0#e000e06&| +0#0000000&@65
-@4|@+0#e000e06&|L|a|b|e|l|(|h+0#0000000&|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|/+0#0000e05&|*|,| |k|i|n|d| |=| |"|n|a|m|e|"|*|/|)+0#e000e06&@1| +0#0000000&@14
-@4|@+0#e000e06&|L|a|b|e|l|(|/+0#0000e05&@1| |v|a|l|u|e| |=| |"|M|e|t|h|o|d|"|,| +0#0000000&@43
-@8|t|y|p|e| |=| |A|n@1|o|t|a|t|i|o|n|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @36
-@8|r|e|d|u|n|d|a|n|t| |=| |!@2|(|1+0#e000002&| +0#0000000&|!|=| |1+0#e000002&|)+0#0000000&|,| @42
-@8|h|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|)+0#e000e06&|,+0#0000000&| @36
-@8|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|}|)|"|,+0#0000000&| |"+0#e000002&|(|{|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@37
-| +0#00e0e07&@3|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|n|o|O|p|(|@+0#e000e06&|L|a|b|e|l| +0#00e0e07&|@+0#e000e06&|L|a|b|e|l|(|)| +0#00e0e07&|@+0#e000e06&|L|a|b|e|l|(|"+0#e000002&|d|u|m@1|y|"|)+0#e000e06&| +0#0000000&@22
-| +0#00e0e07&@7|@+0#e000e06&|L|a|b|e|l|(|h+0#00e0e07&|e|a|d| |=| |@+0#e000e06&|T|a|g|(|/+0#0000e05&|*|v|a|l|u|e| |=| |"|@|L|a|b|e|l|"|,|*|/| +0#00e0e07&|k|i|n|d| |=| |"+0#e000002&|n|a|m|e|"|)+0#e000e06&@1| +0#0000000&@10
-| +0#00e0e07&@7|@+0#e000e06&|L|a|b|e|l|(|/+0#0000e05&@1| |v|a|l|u|e| |=| |"|P|a|r|a|m|e|t|e|r|"|,| +0#0000000&@36
-| +0#00e0e07&@11|t|y|p|e| |=| |A|n@1|o|t|a|t|i|o|n|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|,+0#00e0e07&| +0#0000000&@32
-| +0#00e0e07&@11|h|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#00e0e07&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|)+0#e000e06&|,+0#00e0e07&| +0#0000000&@32
-| +0#00e0e07&@11|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#00e0e07&| |"+0#e000002&|)|{|"|,+0#00e0e07&| |"+0#e000002&|}|(|"| +0#00e0e07&|}|)+0#e000e06&@1| +0#0000000&@33
-| +0#00e0e07&@7|O|b|j|e|c|t| |d|u|m@1|y|)| +0#0000000&@53
-@4|{| @69
-@4|}| @69
->}| @73
-@57|7|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_00.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_00.dump
new file mode 100644
index 0000000..9cb2182
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|A|n@1|o|t|a|t|i|o|n|s|$|T|e|s|t|s| @51
+|{| @73
+@4|@+0#e000e06&|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@41
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g| @56
+@4|{| @69
+@8|S|t|r|i|n|g| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @40
+@8|S|t|r|i|n|g| |k+0#00e0e07&|i|n|d|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @41
+@4|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@41
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|e|x|t| @55
+@4|{| @69
+@8|S|t|r|i|n|g|[|]| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|{|"+0#e000002&@1|}+0#0000000&|;| @36
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_01.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_01.dump
new file mode 100644
index 0000000..32d606a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@41
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|e|x|t| @55
+@4|{| @69
+@8>S|t|r|i|n|g|[|]| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|{|"+0#e000002&@1|}+0#0000000&|;| @36
+@4|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&| @61
+@8|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| @47
+@8|E|l|e|m|e|n|t|T|y|p|e|.|P|A|R|A|M|E|T|E|R|,| @44
+@8|E|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|,| @49
+@4|}|)+0#e000e06&| +0#0000000&@68
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|L|a|b|e|l|s| @53
+@4|{| @69
+@8|L|a|b|e|l|[|]| |v+0#00e0e07&|a|l|u|e|(|)|;+0#0000000&| @50
+@4|}| @69
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(|{+0#0000000&| @40
+@57|1|9|,|3|-|9| @7|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_02.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_02.dump
new file mode 100644
index 0000000..67c0975
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(|{+0#0000000&| @40
+@8|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| @26
+@8|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|P|A|R|A|M|E|T|E|R|,| @23
+@8|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|,| @28
+@4|}|)+0#e000e06&| +0#0000000&@68
+@4>@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|L+0#0000000&|a|b|e|l|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@24
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|L|a|b|e|l| @54
+@4|{| @69
+@8|S|t|r|i|n|g| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @40
+@8|C|l|a|s@1|<|?|>| |t+0#00e0e07&|y|p|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|L|a|b|e|l|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| @30
+@8|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|r+0#00e0e07&|e|d|u|n|d|a|n|t|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|t+0#e000002&|r|u|e|;+0#0000000&| @33
+@8|T|e|x|t| |t+0#00e0e07&|e|x|t|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|@+0#e000e06&|T|e|x|t|;+0#0000000&| @40
+@8|T|a|g| |h+0#00e0e07&|e|a|d|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|@+0#e000e06&|T|a|g|(|)|;+0#0000000&| @40
+@8|T|a|g| |t+0#00e0e07&|a|i|l|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&@1|,+0#0000000&| |k|i|n|d| |=| |"+0#e000002&@1|)+0#e000e06&|;+0#0000000&| @19
+@4|}| @69
+@75
+@4|/+0#0000e05&|*| |U|s|e| |i|d|e|n|t|i|t|y| |c|a|s|t| |e|x|p|r|e|s@1|i|o|n|s| |t|o| |n|e|s|t| |T|Y|P|E|_|U|S|E| |a|n@1|o|t|a|t|i|o|n|s|.| |*|/| +0#0000000&@5
+@32|@+0#e000e06&|L|a|b|e|l|(| +0#0000000&@35
+@28|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| @38
+@57|3|7|,|2|-|5| @7|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_03.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_03.dump
new file mode 100644
index 0000000..fcc187f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@27|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| @38
+@8|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|a|"|,+0#0000000&| |"+0#e000002&|a@1|"|,+0#0000000&| |"+0#e000002&|a@2|"|,+0#0000000&| |"+0#e000002&|a@3|"|,+0#0000000&| |}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|a|s|"|,+0#0000000&| @15
+@8|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|b|"|,+0#0000000&| |"+0#e000002&|b@1|"|,+0#0000000&| |"+0#e000002&|b@2|"|,+0#0000000&| |"+0#e000002&|b@3|"|,+0#0000000&| |}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|b|s|"|,+0#0000000&| @15
+@8|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|c|"|,+0#0000000&| |"+0#e000002&|c@1|"|,+0#0000000&| |"+0#e000002&|c@2|"|,+0#0000000&| |"+0#e000002&|c@3|"|,+0#0000000&| |}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|c|s|"|,+0#0000000&| @15
+@8|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|d|"|,+0#0000000&| |"+0#e000002&|d@1|"|,+0#0000000&| |"+0#e000002&|d@2|"|,+0#0000000&| |"+0#e000002&|d@3|"|,+0#0000000&| |}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|d|s|"|,+0#0000000&| @15
+@28>}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|a|b|c|d|"|)+0#e000e06&| +0#0000000&@28
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|P|r|i|m|e|r| |{| |}| @50
+@75
+@4|@+0#e000e06&|L|a|b|e|l| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|)| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|"+0#0000000&@2| @44
+| +0#e000002&@3|n|\| +0#0000000&@68
+| +0#e000002&@3|o|\| +0#0000000&@68
+| +0#e000002&@3|O|\| +0#0000000&@68
+| +0#e000002&@3|p|"+0#0000000&@2|)+0#e000e06&| +0#0000000&@65
+@4|@+0#e000e06&|L|a|b|e|l|(|h+0#0000000&|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|/+0#0000e05&|*|,| |k|i|n|d| |=| |"|n|a|m|e|"|*|/|)+0#e000e06&@1| +0#0000000&@14
+@4|@+0#e000e06&|L|a|b|e|l|(|/+0#0000e05&@1| |v|a|l|u|e| |=| |"|M|e|t|h|o|d|"|,| +0#0000000&@43
+@8|t|y|p|e| |=| |A|n@1|o|t|a|t|i|o|n|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @35
+@8|r|e|d|u|n|d|a|n|t| |=| |!@2|(|1+0#e000002&| +0#0000000&|!|=| |1+0#e000002&|)+0#0000000&|,| @42
+@8|h|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|)+0#e000e06&|,+0#0000000&| @36
+@8|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|}|)|"|,+0#0000000&| |"+0#e000002&|(|{|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@37
+@57|5@1|,|8|-|2|9| @6|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_04.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_04.dump
new file mode 100644
index 0000000..635080c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|}|)|"|,+0#0000000&| |"+0#e000002&|(|{|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@37
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|n+0#00e0e07&|o|O|p|(|@+0#e000e06&|L|a|b|e|l| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|)| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|"+0#e000002&|d|u|m@1|y|"|)+0#e000e06&| +0#0000000&@22
+@8|@+0#e000e06&|L|a|b|e|l|(|h+0#0000000&|e|a|d| |=| |@+0#e000e06&|T|a|g|(|/+0#0000e05&|*|v|a|l|u|e| |=| |"|@|L|a|b|e|l|"|,|*|/| +0#0000000&|k|i|n|d| |=| |"+0#e000002&|n|a|m|e|"|)+0#e000e06&@1| +0#0000000&@10
+@8|@+0#e000e06&|L|a|b|e|l|(|/+0#0000e05&@1| |v|a|l|u|e| |=| |"|P|a|r|a|m|e|t|e|r|"|,| +0#0000000&@36
+@12|t|y|p|e| |=| |A|n@1|o|t|a|t|i|o|n|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @31
+@12>h|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|)+0#e000e06&|,+0#0000000&| @32
+@12|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|)|{|"|,+0#0000000&| |"+0#e000002&|}|(|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@33
+@8|O|b|j|e|c|t| |d|u|m@1|y|)+0#00e0e07&| +0#0000000&@53
+@4|{| @69
+@4|}| @69
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|7|3|,|4|-|1|3| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_comments_02.dump b/runtime/syntax/testdir/dumps/java_comments_02.dump
index 008a3e0..25babc7 100644
--- a/runtime/syntax/testdir/dumps/java_comments_02.dump
+++ b/runtime/syntax/testdir/dumps/java_comments_02.dump
@@ -1,7 +1,7 @@
| +0#0000e05#ffffff0@3|*| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|{+0#e000e06&|@|c|o|d|e| |n|u|l@1|}| +0#0000e05&|*|/| +0#0000000&@45
@4|V|o|i|d| |n|o|O|p|4|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @41
@75
-@4|/+0#0000e05&|*@1| +0#e000e06&|N|o|-|o|p|,| |i|.|e|.|<+0#0000e05&|!|-@1| |-@1|>| +0#e000e06&|n|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@33
+@4|/+0#0000e05&|*@1| +0#e000e06&|N|o|-|o|p|,| |i|.|e|.|<|!|-@1| |-@1|>| |n|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@33
| +0#0000e05&@3|*| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|{+0#e000e06&|@|c|o|d|e| |n|u|l@1|}| +0#0000e05&|*|/| +0#0000000&@45
@4>V|o|i|d| |n|o|O|p|5|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @41
@75
diff --git a/runtime/syntax/testdir/dumps/java_comments_05.dump b/runtime/syntax/testdir/dumps/java_comments_05.dump
new file mode 100644
index 0000000..53c7850
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |t+0#e000002&|o|S|t|r|i|n|g| +0#ffffff16#ff404010| +0#0000000#ffffff0@42
+@4|/+0#0000e05&@1| |@+0#0000000&|r|e|p|l|a|c|e| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|"@1|'| +0#0000e05&|r+0#00e0003&|e|p|l|a|c|e|m|e|n|t| +0#0000e05&|=| |"+0#e000002&|\|u|0@1|2@1|\|u|0@1|2@1|"| +0#0000000&@13
+@4|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|r+0#00e0003&|e|g|e|x| +0#0000e05&|=| |'+0#e000002&|\|b|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |j+0#e000002&|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g| +0#0000e05&|t+0#00e0003&|y|p|e| +0#0000e05&|=| |l+0#e000002&|i|n|k|p|l|a|i|n| +0#0000e05&
+|:| +0#0000000&@73
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @21
+@4>/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#ffffff16#ff404010| +0#0000000#ffffff0@62
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|8|9|,|2|-|5| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_comments_99.dump b/runtime/syntax/testdir/dumps/java_comments_99.dump
deleted file mode 100644
index 1efc20e..0000000
--- a/runtime/syntax/testdir/dumps/java_comments_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0#0000e05#ffffff0@4|*| +0#0000000&@68
-| +0#0000e05&@4|*| |@+0#e000e06&|p|a|r|a|m| +0#00e0e07&|a|r|g|s| +0#0000e05&|o|p|t|i|o|n|a|l| |c+0&#ffd7d7255|o|m@1|a|n|d|e|-+0&#ffffff0|l|i|n|e| |a|r|g|u|m|e|n|t|s| +0#ffffff16#ff404010| +0#0000000#ffffff0@22
-| +0#0000e05&@4|*| |@|j+0&#ffd7d7255|l|s| +0&#ffffff0|1|2|.|1|.|4| |I|n|v|o|k|e| |{+0#e000e06&|@|c|o|d|e| |T|e|s|t|.|m|a|i|n|}| +0#0000e05&|*|/| +0#0000000&@28
-@4|/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |m+0#e000002&|a|i|n| +0#ffffff16#ff404010@4| +0#0000000#ffffff0@42
-@4|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |'+0#e000002&|j|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g|'| +0#0000e05&|:| +0#0000000&@11
-@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|m|a|i|n|(|S|t|r|i|n|g|[|]| |a|r|g|s|)| |{| |}| @28
-@4|/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#ffffff16#ff404010| +0#0000000#ffffff0@62
-@75
-@4|/+0#0000e05&|*@1| |{+0#e000e06&|@|r|e|t|u|r|n| |a|n| |e|m|p|t|y| |s|t|r|i|n|g|}| +0#ffffff16#ff404010@2| +0#0000000#ffffff0@38
-| +0#0000e05&@4|*| +0#e000e06&|@|s|e@1| |<+0#00e0e07&|a+0#af5f00255&| +0#00e0e07&|h+0#00e0003&|r|e|f|=+0#00e0e07&|"+0#e000002&|h|t@1|p|s|:|/@1|d|o|c|s|.|o|r|a|c|l|e|.|c|o|m|/|j|a|v|a|s|e|/|s|p|e|c|s|/|j|l|s|/|s|e|2|1|/|h|t|m|l|/|j|l|s
-|-|3|.|h|t|m|l|#|j|l|s|-|3|.|1|0|.|5|"|>+0#00e0e07&|3+8#e000e06&|.|1|0|.|5| |S|t|r|i|n|g| |L|i|t|e|r|a|l|s|<+0#00e0e07&|/|a+0#af5f00255&|>+0#00e0e07&| +0#0000000&@28
-| +0#0000e05&@4|*| +0#e000e06&|@|s|e@1| |O+0#00e0e07&|b|j|e|c|t|#|t|o|S|t|r|i|n|g|(|)| +0#0000000&|*+0#e000e06&|/| +0#0000000&@42
-@4|/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |t+0#e000002&|o|S|t|r|i|n|g| +0#ffffff16#ff404010| +0#0000000#ffffff0@42
-@4|/+0#0000e05&@1| |@+0#0000000&|r|e|p|l|a|c|e| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|"@1|'| +0#0000e05&|r+0#00e0003&|e|p|l|a|c|e|m|e|n|t| +0#0000e05&|=| |"+0#e000002&|\|u|0@1|2@1|\|u|0@1|2@1|"| +0#0000000&@13
-@4|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|r+0#00e0003&|e|g|e|x| +0#0000e05&|=| |'+0#e000002&|\|b|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |j+0#e000002&|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g| +0#0000e05&|t+0#00e0003&|y|p|e| +0#0000e05&|=| |l+0#e000002&|i|n|k|p|l|a|i|n| +0#0000e05&
-|:| +0#0000000&@73
-@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @21
-@4|/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#ffffff16#ff404010| +0#0000000#ffffff0@62
->}| @73
-@57|9|0|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_contextual_keywords_99.dump b/runtime/syntax/testdir/dumps/java_contextual_keywords_99.dump
deleted file mode 100644
index b429c81..0000000
--- a/runtime/syntax/testdir/dumps/java_contextual_keywords_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@3|s+0#4040ff13&|e|a|l|e|d| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I|1| |p+0#00e0003&|e|r|m|i|t|s| +0#0000000&|C|1|,| |I|3| |{| |}| @32
-@4|s+0#4040ff13&|e|a|l|e|d| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I|2| |p+0#00e0003&|e|r|m|i|t|s| +0#0000000&|C|1|,| |I|3| |{| |}| @32
-@4|n+0#4040ff13&|o|n|-|s|e|a|l|e|d| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I|3| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I|1|,| |I|2| |{| |}| @28
-@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I|4| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I|3| |{| |}| @43
-@75
-@4|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|s+0#4040ff13&|e|a|l|e|d| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|C|1| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|I|1|,| |I|2| |p+0#00e0003&|e|r|m|i|t|s| +0#0000000&|C|2|,| |C|3| |{| |}| @9
-@4|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|n+0#4040ff13&|o|n|-|s|e|a|l|e|d| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|C|2| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|1| |{| |}| @27
-@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|C|3| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|1| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|I|3| |{| |}| @27
-@4|c+0#00e0003&|l|a|s@1| +0#0000000&|C|4| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|2| |{| |}| @47
-@75
-@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|R|(|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|I|3| |{| |}| @42
-@4|e+0#00e0003&|n|u|m| +0#0000000&|E| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|I|3| |{| |I|N|S|T|A|N|C|E| |}| @37
-@75
-@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|>| |I|<|T|>| |i|1|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|v+0#af5f00255&|a|r| +0#0000000&|v+0#af5f00255&|a|r|)+0#0000000&| |-|>| |v+0#af5f00255&|a|r|;+0#0000000&| |}| @21
-@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|>| |I|<|T|>| |i|2|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|T| |v+0#af5f00255&|a|r|)+0#0000000&| |-|>| |v+0#af5f00255&|a|r|;+0#0000000&| |}| @23
-@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|>| |I|<|T|>| |i|3|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|v+0#af5f00255&|a|r|)+0#0000000&| |-|>| |v+0#af5f00255&|a|r|;+0#0000000&| |}| @25
-@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|>| |I|<|T|>| |i|4|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|-|>| |v+0#af5f00255&|a|r|;+0#0000000&| |}| @27
-@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I|<|T|>| |{| |T| |i|(|T| |i|)|;| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|I|<|T|>| |s|e|l|f|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|;+0#0000000&| |}| |}| @5
->}| @73
-@57|4|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_00.dump b/runtime/syntax/testdir/dumps/java_enfoldment_00.dump
index 9596869..4cdbf95 100644
--- a/runtime/syntax/testdir/dumps/java_enfoldment_00.dump
+++ b/runtime/syntax/testdir/dumps/java_enfoldment_00.dump
@@ -1,5 +1,5 @@
| +0#0000e05#a8a8a8255@1>/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l|o|c|a|l| |f|o|l|d|e|n|a|b|l|e| |f|o|l|d|c|o|l|u|m|n|=|2| |f|o|l|d|m|e|t|h|o|d|=|s|y|n|t|a|x| +0#0000000&@4
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|m|a|r|k|_|b|r|a|c|e|s|_|i|n|_|p|a|r|e|n|s|_|a|s|_|e|r@1|o|r|s| |=| |1| +0#0000000&@8
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|f|o|l|d|t|e|x|t|_|s|h|o|w|_|f|i|r|s|t|_|o|r|_|s|e|c|o|n|d|_|l|i|n|e| |=| |1| +0#0000000&@5
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|++0#0000e05#a8a8a8255| |+|-@1| |1|6| |l|i|n|e|s|:| |@|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|{|-@39
| @1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|F|o|l|d|i|n|g|T|e|s|t|s| |{| @52
@@ -8,13 +8,13 @@
| @1| +0#0000000#ffffff0@72
|++0#0000e05#a8a8a8255| |+|-@1| |1|9| |l|i|n|e|s|:| |s|t|a|t|i|c| |{|-@50
| @1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| |O|b|j|e|c|t| |b@1| |=| |(@1|O|b|j|e|c|t|)| |n+0#af5f00255&|e|w| +0#0000000&|b+0#00e0003&|y|t|e|[+0#0000000&|]|{+0#ffffff16#ff404010|}|)+0#0000000#ffffff0|;| |}| @28
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| |O|b|j|e|c|t| |b@1| |=| |(@1|O|b|j|e|c|t|)| |n+0#af5f00255&|e|w| +0#0000000&|b+0#00e0003&|y|t|e|[+0#0000000&|]|{|}|)|;| |}| @28
|++0#0000e05#a8a8a8255| |+|-@1| @1|8| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@72
+| @1|/+0&#ffffff0|*|\@2|*|/| +0#0000000&|{| @63
+|++0#0000e05#a8a8a8255| |+|-@1| @1|5| |l|i|n|e|s|:| |(|n|e|w| |j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|O|b|j|e|c|t|,| |O|b|j|e|c|t|>|(|)| |{|-@6
+|+| |+|-@1| @1|5| |l|i|n|e|s|:| |(|n|e|w| |j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|O|b|j|e|c|t|,| |O|b|j|e|c|t|>|(|)| |{|-@6
+| @1| +0#0000000#ffffff0@3|}| @67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|++0#0000e05#a8a8a8255| |+|-@1| @1|3| |l|i|n|e|s|:| @2|*| |N|o| |o|p|e|r|a|t|i|o|n|.|-@41
| @1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|1|(|)| |{| |}| @52
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|2|(|)| @56
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_01.dump b/runtime/syntax/testdir/dumps/java_enfoldment_01.dump
index f6feccc..074ea05 100644
--- a/runtime/syntax/testdir/dumps/java_enfoldment_01.dump
+++ b/runtime/syntax/testdir/dumps/java_enfoldment_01.dump
@@ -1,20 +1,20 @@
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l|o|c|a|l| |f|o|l|d|e|n|a|b|l|e| |f|o|l|d|c|o|l|u|m|n|=|2| |f|o|l|d|m|e|t|h|o|d|=|s|y|n|t|a|x| +0#0000000&@4
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|m|a|r|k|_|b|r|a|c|e|s|_|i|n|_|p|a|r|e|n|s|_|a|s|_|e|r@1|o|r|s| |=| |1| +0#0000000&@8
+|++0#0000e05#a8a8a8255| |+|-@1| @1|5| |l|i|n|e|s|:| |(|n|e|w| |j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|O|b|j|e|c|t|,| |O|b|j|e|c|t|>|(|)| |{|-@6
+|+| |+|-@1| @1|5| |l|i|n|e|s|:| |(|n|e|w| |j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|O|b|j|e|c|t|,| |O|b|j|e|c|t|>|(|)| |{|-@6
+| @1| +0#0000000#ffffff0@3|}| @67
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| >+|-@1| |1|6| |l|i|n|e|s|:| |@|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|{|-@39
-| @1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|F|o|l|d|i|n|g|T|e|s|t|s| |{| @52
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|F|o|l|d|e|n|a|b|l|e| @48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| |1|9| |l|i|n|e|s|:| |s|t|a|t|i|c| |{|-@50
-| @1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| |O|b|j|e|c|t| |b@1| |=| |(@1|O|b|j|e|c|t|)| |n+0#af5f00255&|e|w| +0#0000000&|b+0#00e0003&|y|t|e|[+0#0000000&|]|{+0#ffffff16#ff404010|}|)+0#0000000#ffffff0|;| |}| @28
-|++0#0000e05#a8a8a8255| |+|-@1| @1|8| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@72
|++0#0000e05#a8a8a8255| |+|-@1| @1|3| |l|i|n|e|s|:| @2|*| |N|o| |o|p|e|r|a|t|i|o|n|.|-@41
-| @1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|1|(|)| |{| |}| @52
+| @1| +0#0000000#ffffff0@3>v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|1|(|)| |{| |}| @52
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|2|(|)| @56
|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |{|-@57
| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-@57|1|9|,|1| @9|T|o|p|
+|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|3|(|)| |{|-@44
+| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
+|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|4|(|)| |{|-@44
+| @1|}+0#0000000#ffffff0| @71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|++0#0000e05#a8a8a8255| |+|-@1| @1|5| |l|i|n|e|s|:| @1|*| |S|o|m|e| |n|o|t|e|.|-@45
+|+| |+|-@1| @1|5| |l|i|n|e|s|:| @1|*| |A| |s|u|m@1|a|r|y|.|-@45
+| @1|/+0&#ffffff0@1| +0#0000000&@70
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |{| +0#0000000&@68
+@57|7|0|,|2|-|5| @7|9|3|%|
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_02.dump b/runtime/syntax/testdir/dumps/java_enfoldment_02.dump
index bff7ffc..4df1e69 100644
--- a/runtime/syntax/testdir/dumps/java_enfoldment_02.dump
+++ b/runtime/syntax/testdir/dumps/java_enfoldment_02.dump
@@ -1,20 +1,20 @@
-|++0#0000e05#a8a8a8255| |+|-@1| |1|6| |l|i|n|e|s|:| |@|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|{|-@39
-| @1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|F|o|l|d|i|n|g|T|e|s|t|s| |{| @52
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|F|o|l|d|e|n|a|b|l|e| @48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| >+|-@1| |1|9| |l|i|n|e|s|:| |s|t|a|t|i|c| |{|-@50
-| @1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| |O|b|j|e|c|t| |b@1| |=| |(@1|O|b|j|e|c|t|)| |n+0#af5f00255&|e|w| +0#0000000&|b+0#00e0003&|y|t|e|[+0#0000000&|]|{+0#ffffff16#ff404010|}|)+0#0000000#ffffff0|;| |}| @28
-|++0#0000e05#a8a8a8255| |+|-@1| @1|8| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|3| |l|i|n|e|s|:| @2|*| |N|o| |o|p|e|r|a|t|i|o|n|.|-@41
-| @1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|1|(|)| |{| |}| @52
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|2|(|)| @56
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|3|(|)| |{|-@44
-| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|4|(|)| |{|-@44
-| +0#0000000#ffffff0@56|3|7|,|4|-|1| @7|1|4|%|
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |{| +0#0000000&@68
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |}| +0#0000000&@68
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|++0#0000e05#a8a8a8255| >+|-@1| @1|2| |l|i|n|e|s|:| |1|2@1|||.@54
+|~+0#4040ff13#ffffff0| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|9|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_03.dump b/runtime/syntax/testdir/dumps/java_enfoldment_03.dump
deleted file mode 100644
index 6e96876..0000000
--- a/runtime/syntax/testdir/dumps/java_enfoldment_03.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|++0#0000e05#a8a8a8255| |+|-@1| |1|9| |l|i|n|e|s|:| |s|t|a|t|i|c| |{|-@50
-| @1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| |O|b|j|e|c|t| |b@1| |=| |(@1|O|b|j|e|c|t|)| |n+0#af5f00255&|e|w| +0#0000000&|b+0#00e0003&|y|t|e|[+0#0000000&|]|{+0#ffffff16#ff404010|}|)+0#0000000#ffffff0|;| |}| @28
-|++0#0000e05#a8a8a8255| |+|-@1| @1|8| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| >+|-@1| @1|3| |l|i|n|e|s|:| @2|*| |N|o| |o|p|e|r|a|t|i|o|n|.|-@41
-| @1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|1|(|)| |{| |}| @52
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|2|(|)| @56
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|3|(|)| |{|-@44
-| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|4|(|)| |{|-@44
-| @1|}+0#0000000#ffffff0| @71
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|5| |l|i|n|e|s|:| @1|*| |S|o|m|e| |n|o|t|e|.|-@45
-|+| |+|-@1| @1|5| |l|i|n|e|s|:| @1|*| |A| |s|u|m@1|a|r|y|.|-@45
-| @1|/+0&#ffffff0@1| +0#0000000&@70
-@57|5@1|,|2|-|1| @7|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_04.dump b/runtime/syntax/testdir/dumps/java_enfoldment_04.dump
deleted file mode 100644
index 563a92f..0000000
--- a/runtime/syntax/testdir/dumps/java_enfoldment_04.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|3|(|)| |{|-@44
-| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|4|(|)| |{|-@44
-| @1|}+0#0000000#ffffff0| @71
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| >+|-@1| @1|5| |l|i|n|e|s|:| @1|*| |S|o|m|e| |n|o|t|e|.|-@45
-|+| |+|-@1| @1|5| |l|i|n|e|s|:| @1|*| |A| |s|u|m@1|a|r|y|.|-@45
-| @1|/+0&#ffffff0@1| +0#0000000&@70
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |{| +0#0000000&@68
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |}| +0#0000000&@68
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |1|2@1|||.@54
-|~+0#4040ff13#ffffff0| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|7|3|,|2|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_99.dump b/runtime/syntax/testdir/dumps/java_enfoldment_99.dump
deleted file mode 100644
index 771ae98..0000000
--- a/runtime/syntax/testdir/dumps/java_enfoldment_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|3| |l|i|n|e|s|:| @2|*| |N|o| |o|p|e|r|a|t|i|o|n|.|-@41
-| @1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|1|(|)| |{| |}| @52
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|2|(|)| @56
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |{|-@57
-| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|3|(|)| |{|-@44
-| @1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@48
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |v|o|i|d| |n|o|O|p|4|(|)| |{|-@44
-| @1|}+0#0000000#ffffff0| @71
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|5| |l|i|n|e|s|:| @1|*| |S|o|m|e| |n|o|t|e|.|-@45
-|+| |+|-@1| @1|5| |l|i|n|e|s|:| @1|*| |A| |s|u|m@1|a|r|y|.|-@45
-| @1|/+0&#ffffff0@1| +0#0000000&@70
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |{| +0#0000000&@68
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |}| +0#0000000&@68
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| >+|-@1| @1|2| |l|i|n|e|s|:| |1|2@1|||.@54
-| +0#0000000#ffffff0@56|8|6|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_escapes_07.dump b/runtime/syntax/testdir/dumps/java_escapes_07.dump
new file mode 100644
index 0000000..15e168b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_escapes_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_escapes_99.dump b/runtime/syntax/testdir/dumps/java_escapes_99.dump
deleted file mode 100644
index 617317c..0000000
--- a/runtime/syntax/testdir/dumps/java_escapes_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@3|"+0#e000002&|\+0#e000e06&|2|0@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|0|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|0|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|0|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|0|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|0|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|0|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|0|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|2|1|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|1@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|1|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|1|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|1|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|1|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|1|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|1|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|2@1|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2@1|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2@2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2@1|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2@1|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2@1|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2@1|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2@1|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|2|3|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|3|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|3|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|3@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|3|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|3|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|3|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|3|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|2|4|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|4|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|4|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|4|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|4@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|4|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|4|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|4|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|2|5|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|5|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|5|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|5|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|5|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|5@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|5|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|5|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|2|6|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|6|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|6|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|6|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|6|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|6|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|6@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|6|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|2|7|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|7|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|7|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|7|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|7|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|7|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|7|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|2|7@1|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|3|0@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|0|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|0|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|0|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|0|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|0|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|0|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|0|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|3|1|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|1@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|1|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|1|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|1|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|1|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|1|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|1|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|3|2|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|2|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|2@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|2|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|2|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|2|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|2|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|2|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|3@1|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3@1|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3@1|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3@2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3@1|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3@1|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3@1|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3@1|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|3|4|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|4|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|4|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|4|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|4@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|4|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|4|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|4|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|3|5|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|5|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|5|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|5|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|5|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|5@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|5|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|5|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|3|6|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|6|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|6|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|6|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|6|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|6|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|6@1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|6|7|"+0#e000002&|,+0#0000000&| @7
-@4|"+0#e000002&|\+0#e000e06&|3|7|0|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|7|1|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|7|2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|7|3|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|7|4|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|7|5|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|7|6|"+0#e000002&|,+0#0000000&| |"+0#e000002&|\+0#e000e06&|3|7@1|"+0#e000002&|,+0#0000000&| @7
-@8|}|)|;| @63
-@4|}| @69
->}| @73
-@57|1|2|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_generics_00.dump b/runtime/syntax/testdir/dumps/java_generics_00.dump
new file mode 100644
index 0000000..0d7c4f9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|g|e|n|e|r|i|c|s| |=| |1| +0#0000000&@23
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |j|a|v|a|G|e|n|e|r|i|c|s|C|1| |T|o|d|o| +0#0000000&@29
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |j|a|v|a|G|e|n|e|r|i|c|s|C|2| |E|r@1|o|r| +0#0000000&@28
+@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|m|a|t|h|.|B|i|g|I|n|t|e|g|e|r|;| @46
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|C|o|n|s|u|m|e|r|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|L|o|n|g|F|u|n|c|t|i|o|n|;| @35
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|G+0#0000001#ffff4012|e|n|e|r|i|c|s|T|e|s|t|s|<|T+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r| |&| |C+0#ffffff16#ff404010|o|m|p|a|r|a|b|l|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|T|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |U|>+0#0000001#ffff4012| +0#0000000#ffffff0@10
+|{| @2|/+0#0000e05&@1| |J|D|K| |2|1|+|.| +0#0000000&@59
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|O+0#0000000#ffffff0|b|j|e|c|t|,| |O|b|j|e|c|t|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |O|b|j|e|c|t|>+0#0000001#ffff4012| +0#0000000#ffffff0|P|A|R|T|I|A|L| |=| @5
+@24|G|e|n|e|r|i|c|s|T|e|s|t|s|.|y|0|(|)|;| @31
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|B+0#0000000#ffffff0|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0|F|A|C|T|O|R|I|A|L|_|2|0@2| |=| @8
+@16|G|e|n|e|r|i|c|s|T|e|s|t|s|.|<|B|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>|y|1|(|)| @16
+@8|.|a|p@1|l|y|(|f+0#00e0e07&| |-|>| +0#0000000&|x+0#00e0e07&| |-|>| +0#0000000&|(|x|.|c|o|m|p|a|r|e|T|o|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)| |<| |1+0#e000002&|)+0#0000000&| @16
+@12|?| |B|i|g|I|n|t|e|g|e|r|.|O|N|E| @46
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_generics_01.dump b/runtime/syntax/testdir/dumps/java_generics_01.dump
new file mode 100644
index 0000000..b5650c7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|O+0#0000000#ffffff0|b|j|e|c|t|,| |O|b|j|e|c|t|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |O|b|j|e|c|t|>+0#0000001#ffff4012| +0#0000000#ffffff0|P|A|R|T|I|A|L| |=| @5
+@24|G|e|n|e|r|i|c|s|T|e|s|t|s|.|y|0|(|)|;| @31
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|B+0#0000000#ffffff0|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0|F|A|C|T|O|R|I|A|L|_|2|0@2| |=| @8
+@16|G|e|n|e|r|i|c|s|T|e|s|t|s|.|<|B|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>|y|1|(|)| @16
+@8|.|a|p@1|l|y|(|f+0#00e0e07&| |-|>| +0#0000000&|x+0#00e0e07&| |-|>| +0#0000000&|(|x|.|c|o|m|p|a|r|e|T|o|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)| |<| |1+0#e000002&|)+0#0000000&| @16
+@12>?| |B|i|g|I|n|t|e|g|e|r|.|O|N|E| @46
+@12|:| |x|.|m|u|l|t|i|p|l|y|(|f|.|a|p@1|l|y|(|x|.|s|u|b|t|r|a|c|t|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)@3|;| @11
+@75
+| +0#00e0e07&@3|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|<|T|1|>| |Y+0#0000001#ffff4012|0|<|T+0#0000000#ffffff0|1|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|y|0|(|)| +0#0000000&@47
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#00e0e07&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,+0#00e0e07&| |T+0#0000000&|1|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|f|)| |-|>| +0#0000000&|f|.|a|p@1|l|y|(| @27
+@20|G|e|n|e|r|i|c|s|T|e|s|t|s|.|<|T|1|>|y|0|(|)| @32
+@24|.|a|p@1|l|y|(|f|)@1|;| @39
+@4|}| @69
+@75
+| +0#00e0e07&@3|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|<|T|1|,| |T|2|>| |Y+0#0000001#ffff4012|1|<|T+0#0000000#ffffff0|1|,+0#00e0e07&| |T+0#0000000&|2|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|y|1|(|)| +0#0000000&@39
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#00e0e07&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,+0#00e0e07&| |T+0#0000000&|2|>+0#ffffff16#ff404010|,+0#00e0e07#ffffff0| |F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,+0#00e0e07&| |T+0#0000000&|2|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|f|)| |-|>| +0#0000000&@8
+@12|(+0#00e0e07&|T|1| |x|)| |-|>| +0#0000000&|f|.|a|p@1|l|y|(|G|e|n|e|r|i|c|s|T|e|s|t|s|.|<|T|1|,| |T|2|>|y|1|(|)| @18
+@57|1|9|,|4|-|1|3| @6|1|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_02.dump b/runtime/syntax/testdir/dumps/java_generics_02.dump
new file mode 100644
index 0000000..af51ce3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|(+0#00e0e07&|T|1| |x|)| |-|>| +0#0000000&|f|.|a|p@1|l|y|(|G|e|n|e|r|i|c|s|T|e|s|t|s|.|<|T|1|,| |T|2|>|y|1|(|)| @18
+@24|.|a|p@1|l|y|(|f|)@1| @40
+@16|.|a|p@1|l|y|(|x|)|;| @48
+@4|}| @69
+@75
+@4>s+0#00e0003&|t|a|t|i|c|<+0#0000000&|T|>| |v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|(|T| |d|u|m@1|y|)| |{| |}| @38
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|a|l|p|h|a|<|T|>| |{| |}| @48
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|Y+0#0000001#ffff4012|0|<|T+0#0000000#ffffff0|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|1|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |T|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|{| |}| @11
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|Y+0#0000001#ffff4012|1|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012|,+0#0000000#ffffff0| @6
+@20|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| @36
+@20|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|{| |}| @33
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@28
+@4|{| @69
+| +0#00e0e07&@7|b+0#00e0003&|o@1|l|e|a|n| +0#00e0e07&|i|s|E|m|p|t|y|(|)|;+0#0000000&| @48
+| +0#00e0e07&@7|E| |p|e@1|k|(|)|;+0#0000000&| @57
+@57|3|7|,|2|-|5| @7|2|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_03.dump b/runtime/syntax/testdir/dumps/java_generics_03.dump
new file mode 100644
index 0000000..3e4f6c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_03.dump
@@ -0,0 +1,20 @@
+| +0#00e0e07#ffffff0@7|E| |p|e@1|k|(|)|;+0#0000000&| @57
+| +0#00e0e07&@7|E| |p|o|p|(|)|;+0#0000000&| @58
+| +0#00e0e07&@7|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|p|o|p|A|l@1|(|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|?+0#0000000#ffffff0| +0#00e0e07&|s+0#00e0003&|u|p|e|r| +0#00e0e07&|E+0#0000000&|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|e|l|e|m|e|n|t|s|)|;+0#0000000&| @15
+| +0#00e0e07&@7|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|p|o|p|S|o|m|e|(|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|?+0#0000000#ffffff0| +0#00e0e07&|s+0#00e0003&|u|p|e|r| +0#00e0e07&|E+0#0000000&|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|e|l|e|m|e|n|t|s|,| +0#0000000&@15
+| +0#00e0e07&@19|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|?+0#0000000#ffffff0| +0#00e0e07&|s+0#00e0003&|u|p|e|r| +0#00e0e07&|E+0#0000000&|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|f|i|l|t|e|r|)|;+0#0000000&| @25
+| +0#00e0e07&@7>S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|p|u|s|h|(|E| |e|l|e|m|e|n|t|)|;+0#0000000&| @37
+| +0#00e0e07&@7|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|p|u|s|h|A|l@1|(|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|?+0#0000000#ffffff0| +0#00e0e07&|e+0#00e0003&|x|t|e|n|d|s| +0#00e0e07&|E+0#0000000&|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|e|l|e|m|e|n|t|s|)|;+0#0000000&| @13
+| +0#00e0e07&@7|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|p|u|s|h|S|o|m|e|(|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|?+0#0000000#ffffff0| +0#00e0e07&|e+0#00e0003&|x|t|e|n|d|s| +0#00e0e07&|E+0#0000000&|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|e|l|e|m|e|n|t|s|,| +0#0000000&@13
+| +0#00e0e07&@19|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|?+0#0000000#ffffff0| +0#00e0e07&|s+0#00e0003&|u|p|e|r| +0#00e0e07&|E+0#0000000&|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|f|i|l|t|e|r|)|;+0#0000000&| @25
+| +0#00e0e07&@7|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|w|i|n|d|(|C+0#0000001#ffff4012|o|n|s|u|m|e|r|<|?+0#0000000#ffffff0| +0#00e0e07&|s+0#00e0003&|u|p|e|r| +0#00e0e07&|S+0#ffffff16#ff404010|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|a|c|t|i|o|n|)|;+0#0000000&| @9
+@4|}| @69
+@75
+@4|s+0#4040ff13&|e|a|l|e|d| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0@32
+@4|{| @69
+| +0#00e0e07&@7|i+0#00e0003&|n|t| +0#00e0e07&|r|a|d|i|x|(|)|;+0#0000000&| @54
+| +0#00e0e07&@7|N| |v|a|l|u|e|(|)|;+0#0000000&| @56
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|B+0#0000001#ffff4012|i|n|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@57|5@1|,|3|-|9| @7|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_04.dump b/runtime/syntax/testdir/dumps/java_generics_04.dump
new file mode 100644
index 0000000..2e02037
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|r+0#00e0003&|e|c|o|r|d| +0#0000000&|B+0#0000001#ffff4012|i|n|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+| +0#00e0e07&@7|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|i+0#00e0003&|n|t| +0#00e0e07&|r|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&|;+0#0000000&| |}| @34
+@4|}| @69
+@75
+@4>r+0#00e0003&|e|c|o|r|d| +0#0000000&|D+0#0000001#ffff4012|e|c|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+| +0#00e0e07&@7|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|i+0#00e0003&|n|t| +0#00e0e07&|r|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&|0|;+0#0000000&| |}| @33
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|H+0#0000001#ffff4012|e|x|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+| +0#00e0e07&@7|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|i+0#00e0003&|n|t| +0#00e0e07&|r|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&|6|;+0#0000000&| |}| @33
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|O+0#0000001#ffff4012|c|t|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+| +0#00e0e07&@7|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|i+0#00e0003&|n|t| +0#00e0e07&|r|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|8+0#e000002&|;+0#0000000&| |}| @34
+@4|}| @69
+@57|7|3|,|2|-|5| @7|5@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_05.dump b/runtime/syntax/testdir/dumps/java_generics_05.dump
new file mode 100644
index 0000000..70b814d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+@75
+| +0#00e0e07&@3|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|N+0#0000001#ffff4012|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|f|r|o|m|D|e|c|i|m|a|l|(|l+0#00e0003&|o|n|g| +0#00e0e07&|x|,| |i+0#00e0003&|n|t| +0#00e0e07&|r|a|d|i|x|)| +0#0000000&@23
+@4|{| @69
+@8|r+0#00e0003&|e|c|o|r|d| +0#0000000&|P|a|i|r|(|L+0#0000001#ffff4012|o|n|g|F|u|n|c|t|i|o|n|<|N+0#ffffff16#ff404010|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|a|,| @28
+@20>L+0#0000001#ffff4012|o|n|g|F|u|n|c|t|i|o|n|<|S+0#0000000#ffffff0|t|r|i|n|g|>+0#0000001#ffff4012| +0#0000000#ffffff0|b|)| |{| |}| @27
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|P|a|i|r| |p| |=| |s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|r|a|d|i|x|)| |{| @35
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|2+0#e000002&| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|B|i|n|:+0#00e0e07&@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:+0#00e0e07&@1|t+0#0000000&|o|B|i|n|a|r|y|S|t|r|i|n|g|)|;| @11
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|8+0#e000002&| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|O|c|t|:+0#00e0e07&@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:+0#00e0e07&@1|t+0#0000000&|o|O|c|t|a|l|S|t|r|i|n|g|)|;| @12
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|6| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|H|e|x|:+0#00e0e07&@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:+0#00e0e07&@1|t+0#0000000&|o|H|e|x|S|t|r|i|n|g|)|;| @13
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|D|e|c|:+0#00e0e07&@1|n+0#af5f00255&|e|w|,+0#0000000&| @33
+@24|y+0#00e0e07&| |-|>| +0#0000000&|L|o|n|g|.|t|o|S|t|r|i|n|g|(|y|)@1|;| @27
+@8|}|;| @64
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|p|.|a|(|)|.|a|p@1|l|y|(|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|p|.|b|(|)|.|a|p@1|l|y|(|x|)|,| |r|a|d|i|x|)@1|;| @8
+@4|}| @69
+@75
+| +0#00e0e07&@3|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|l+0#00e0003&|o|n|g| +0#00e0e07&|t|o|D|e|c|i|m|a|l|(|N+0#0000001#ffff4012|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#0000001#ffff4012| +0#00e0e07#ffffff0|x|)| +0#0000000&@36
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|x|)| |{| @32
+@57|9|1|,|6|-|2|1| @6|7|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_06.dump b/runtime/syntax/testdir/dumps/java_generics_06.dump
new file mode 100644
index 0000000..de1c46c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|x|)| |{| @32
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|B+0#0000001#ffff4012|i|n|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |b|)| |-|>| |L|o|n|g|.|t|o|B|i|n|a|r|y|S|t|r|i|n|g|(|b|)|;| @16
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|O+0#0000001#ffff4012|c|t|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |o|)| |-|>| |L|o|n|g|.|t|o|O|c|t|a|l|S|t|r|i|n|g|(|o|)|;| @17
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|H+0#0000001#ffff4012|e|x|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |h|)| |-|>| |L|o|n|g|.|t|o|H|e|x|S|t|r|i|n|g|(|h|)|;| @19
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&|-|>| |L|o|n|g|.|t|o|S|t|r|i|n|g|(|x|.|v|a|l|u|e|(|)@1|;| @26
+@8>}|,| |x|.|r|a|d|i|x|(|)@1|;| @52
+@4|}| @69
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(| +0#0000000&@41
+@16|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@16
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g@1|a|b|l|e| @51
+@4|{| @69
+| +0#00e0e07&@7|S|t|r|i|n|g| |v|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @40
+@4|}| @69
+@75
+@4|{| @69
+@8|i+0#00e0003&|n|t| +0#0000000&|N| |=| |0+0#e000002&|,+0#0000000&| |X| |=| |1+0#e000002&|,+0#0000000&| |Y| |=| |2+0#e000002&|;+0#0000000&| @42
+@8|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|f| |=| |y+0#00e0e07&|-|>|N+0#0000000&|<|y|.|i|n|t|V|a|l|u|e|(|)|;| @31
+@8|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|g| |=| |y+0#00e0e07&|-|>|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0|&@1|(|I|n|t|e|g|e|r|)|y|>+0#0000001#ffff4012|N+0#0000000#ffffff0|;| @28
+@57|1|0|9|,|3|-|9| @6|8|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_07.dump b/runtime/syntax/testdir/dumps/java_generics_07.dump
new file mode 100644
index 0000000..fffbf04
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|g| |=| |y+0#00e0e07&|-|>|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0|&@1|(|I|n|t|e|g|e|r|)|y|>+0#0000001#ffff4012|N+0#0000000#ffffff0|;| @28
+@8|b+0#00e0003&|o@1|l|e|a|n|[+0#0000000&|]| |b@1| |=| |{| @50
+@12|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0||@1|N|>+0#0000001#ffff4012|Y+0#0000000#ffffff0|,| |X| |<| |Y|,| |X| |<|Y|,| |X| |<|(|Y|)|,| |X|<|(|Y|)|,| |(|X|)|<|Y|,| @18
+@12|D|o|u|b|l|e|.|i|s|F|i|n|i|t|e|(|X|<@1|Y|)|,| @40
+@12|X|<|=|Y|,| |X|<|(|i+0#00e0003&|n|t|)+0#0000000&|(|b+0#00e0003&|y|t|e|)+0#0000000&|Y|,| |X|<|~|Y|,| |X|<|-|Y|,| |X|<|+|Y|,| @23
+@8>}|;| @64
+@8|C+0#0000001#ffff4012|l|a|s@1|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|k|l|a|s@1| |=| |G|e|n|e|r|i|c|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| @29
+@8|C+0#0000001#ffff4012|l|a|s@1|<| +0#0000000#ffffff0|j+0#ffffff16#ff404010|a|v|a|.|l|a|n|g|.|C|l|a|s@1|<|@+0#e000e06#ffffff0|T|a|g@1|a|b|l|e|(|"+0#e000002&|<|>|"|)+0#e000e06&|i+0#00e0003&|n|t|[+0#0000000&|]|[|]|>+0#ffffff16#ff404010| +0#0000000#ffffff0|[+0#ffffff16#ff404010|]| +0#0000000#ffffff0|[+0#ffffff16#ff404010|]| +0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@12
+@8|[+0#0000001#ffff4012| +0#0000000#ffffff0|]+0#0000001#ffff4012| +0#0000000#ffffff0|[+0#0000001#ffff4012| +0#0000000#ffffff0|]+0#0000001#ffff4012| +0#0000000#ffffff0|$| |[| |]| |[| |]|;| @48
+@8|i+0#af5f00255&|f| +0#0000000&|(|f+0#e000002&|a|l|s|e|)+0#0000000&| |{| |n+0#af5f00255&|e|w| +0#0000000&|G|e|n|e|r|i|c|s|T|e|s|t|s|<|>|(|)|;| |}| @29
+@8|a|l|p|h|a|<|?|>| |a|o|;| @54
+@8|a|l|p|h|a|<|U|>| |a|u|;| @54
+@8|a|l|p|h|a|<|a|l|p|h|a|<|U|>@1| |a@1|u|;| @46
+@8|a|l|p|h|a|<|Y+0#0000001#ffff4012|0|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|>+0#0000000#ffffff0| |a|y|0|o|;| @48
+@8|a|l|p|h|a|<|Y+0#0000001#ffff4012|0|<|U+0#0000000#ffffff0|>+0#0000001#ffff4012|>+0#0000000#ffffff0| |a|y|0|u|;| @48
+@8|Y|0|<|a|l|p|h|a|<|?|>@1| |y|0|a|o|;| @48
+@8|Y|0|<|a|l|p|h|a|<|U|>@1| |y|0|a|u|;| @48
+@4|}| @69
+|}| @73
+@57|1|2|7|,|3|-|9| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_00.dump b/runtime/syntax/testdir/dumps/java_generics_signature_00.dump
new file mode 100644
index 0000000..0b09f31
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|g|e|n|e|r|i|c|s| |=| |1| +0#0000000&@23
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |j|a|v|a|G|e|n|e|r|i|c|s|C|1| |T|o|d|o| +0#0000000&@29
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |j|a|v|a|G|e|n|e|r|i|c|s|C|2| |E|r@1|o|r| +0#0000000&@28
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|m|a|t|h|.|B|i|g|I|n|t|e|g|e|r|;| @46
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|C|o|n|s|u|m|e|r|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|L|o|n|g|F|u|n|c|t|i|o|n|;| @35
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|G+0#0000001#ffff4012|e|n|e|r|i|c|s|$|T|e|s|t|s|<|T+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r| |&| |C+0#ffffff16#ff404010|o|m|p|a|r|a|b|l|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|T|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |U|>+0#0000001#ffff4012| +0#0000000#ffffff0@9
+|{| @2|/+0#0000e05&@1| |J|D|K| |2|1|+|.| +0#0000000&@59
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|O+0#0000000#ffffff0|b|j|e|c|t|,| |O|b|j|e|c|t|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |O|b|j|e|c|t|>+0#0000001#ffff4012| +0#0000000#ffffff0|P|A|R|T|I|A|L| |=| @5
+@24|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|y|0|(|)|;| @30
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|B+0#0000000#ffffff0|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0|F|A|C|T|O|R|I|A|L|_|2|0@2| |=| @8
+@16|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|B|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>|y|1|(|)| @15
+@8|.|a|p@1|l|y|(|f| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|(|x|.|c|o|m|p|a|r|e|T|o|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)| |<| |1+0#e000002&|)+0#0000000&| @16
+@12|?| |B|i|g|I|n|t|e|g|e|r|.|O|N|E| @46
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_01.dump b/runtime/syntax/testdir/dumps/java_generics_signature_01.dump
new file mode 100644
index 0000000..f6c885e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|O+0#0000000#ffffff0|b|j|e|c|t|,| |O|b|j|e|c|t|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |O|b|j|e|c|t|>+0#0000001#ffff4012| +0#0000000#ffffff0|P|A|R|T|I|A|L| |=| @5
+@24|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|y|0|(|)|;| @30
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|B+0#0000000#ffffff0|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0|F|A|C|T|O|R|I|A|L|_|2|0@2| |=| @8
+@16|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|B|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>|y|1|(|)| @15
+@8|.|a|p@1|l|y|(|f| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|(|x|.|c|o|m|p|a|r|e|T|o|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)| |<| |1+0#e000002&|)+0#0000000&| @16
+@12>?| |B|i|g|I|n|t|e|g|e|r|.|O|N|E| @46
+@12|:| |x|.|m|u|l|t|i|p|l|y|(|f|.|a|p@1|l|y|(|x|.|s|u|b|t|r|a|c|t|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)@3|;| @11
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|1|>| |Y+0#0000001#ffff4012|0|<|T+0#0000000#ffffff0|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|y+0#00e0e07&|0|(|)| +0#0000000&@47
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#00e0e07&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|f|)+0#00e0e07&| |-|>| +0#0000000&|f|.|a|p@1|l|y|(| @27
+@20|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|T|1|>|y|0|(|)| @31
+@24|.|a|p@1|l|y|(|f|)@1|;| @39
+@4|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|1|,| |T|2|>| |Y+0#0000001#ffff4012|1|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012| +0#0000000#ffffff0|y+0#00e0e07&|1|(|)| +0#0000000&@39
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#00e0e07&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|f|)+0#00e0e07&| |-|>| +0#0000000&@8
+@12|(+0#00e0e07&|T+0#0000000&|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|f|.|a|p@1|l|y|(|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|T|1|,| |T|2|>|y|1|(|)| @17
+@57|1|9|,|4|-|1|3| @6|1|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_02.dump b/runtime/syntax/testdir/dumps/java_generics_signature_02.dump
new file mode 100644
index 0000000..bfa32c1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|(+0#00e0e07&|T+0#0000000&|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|f|.|a|p@1|l|y|(|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|T|1|,| |T|2|>|y|1|(|)| @17
+@24|.|a|p@1|l|y|(|f|)@1| @40
+@16|.|a|p@1|l|y|(|x|)|;| @48
+@4|}| @69
+@75
+@4>s+0#00e0003&|t|a|t|i|c|<+0#0000000&|T|>| |v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|(|T| |d|u|m@1|y|)| |{| |}| @38
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|a|l|p|h|a|<|T|>| |{| |}| @48
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|Y+0#0000001#ffff4012|0|<|T+0#0000000#ffffff0|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|1|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |T|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|{| |}| @11
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|Y+0#0000001#ffff4012|1|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012|,+0#0000000#ffffff0| @6
+@20|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| @36
+@20|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|{| |}| @33
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@28
+@4|{| @69
+@8|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|i+0#00e0e07&|s|E|m|p|t|y|(|)|;+0#0000000&| @48
+@8|E| |p+0#00e0e07&|e@1|k|(|)|;+0#0000000&| @57
+@57|3|7|,|2|-|5| @7|2|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_03.dump b/runtime/syntax/testdir/dumps/java_generics_signature_03.dump
new file mode 100644
index 0000000..4ddd510
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|E| |p+0#00e0e07&|e@1|k|(|)|;+0#0000000&| @57
+@8|E| |p+0#00e0e07&|o|p|(|)|;+0#0000000&| @58
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|o|p|A|l@1|(|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|e|l|e|m|e|n|t|s|)+0#00e0e07&|;+0#0000000&| @15
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|o|p|S|o|m|e|(|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|e|l|e|m|e|n|t|s|,| @15
+@20|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|f|i|l|t|e|r|)+0#00e0e07&|;+0#0000000&| @25
+@8>S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|u|s|h|(|E+0#0000000&| |e|l|e|m|e|n|t|)+0#00e0e07&|;+0#0000000&| @37
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|u|s|h|A|l@1|(|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|?+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|e|l|e|m|e|n|t|s|)+0#00e0e07&|;+0#0000000&| @13
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|u|s|h|S|o|m|e|(|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|?+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|e|l|e|m|e|n|t|s|,| @13
+@20|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|f|i|l|t|e|r|)+0#00e0e07&|;+0#0000000&| @25
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|w+0#00e0e07&|i|n|d|(|C+0#0000001#ffff4012|o|n|s|u|m|e|r|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|S+0#ffffff16#ff404010|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|a|c|t|i|o|n|)+0#00e0e07&|;+0#0000000&| @9
+@4|}| @69
+@75
+@4|s+0#4040ff13&|e|a|l|e|d| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0@32
+@4|{| @69
+@8|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)|;+0#0000000&| @54
+@8|N| |v+0#00e0e07&|a|l|u|e|(|)|;+0#0000000&| @56
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|B+0#0000001#ffff4012|i|n|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@57|5@1|,|3|-|9| @7|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_04.dump b/runtime/syntax/testdir/dumps/java_generics_signature_04.dump
new file mode 100644
index 0000000..81606f1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|r+0#00e0003&|e|c|o|r|d| +0#0000000&|B+0#0000001#ffff4012|i|n|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&|;+0#0000000&| |}| @34
+@4|}| @69
+@75
+@4>r+0#00e0003&|e|c|o|r|d| +0#0000000&|D+0#0000001#ffff4012|e|c|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&|0|;+0#0000000&| |}| @33
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|H+0#0000001#ffff4012|e|x|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&|6|;+0#0000000&| |}| @33
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|O+0#0000001#ffff4012|c|t|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|8+0#e000002&|;+0#0000000&| |}| @34
+@4|}| @69
+@57|7|3|,|2|-|5| @7|5@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_05.dump b/runtime/syntax/testdir/dumps/java_generics_signature_05.dump
new file mode 100644
index 0000000..8c0fe84
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|N+0#0000001#ffff4012|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#0000001#ffff4012| +0#0000000#ffffff0|f+0#00e0e07&|r|o|m|D|e|c|i|m|a|l|(|l+0#00e0003&|o|n|g| +0#0000000&|x|,| |i+0#00e0003&|n|t| +0#0000000&|r|a|d|i|x|)+0#00e0e07&| +0#0000000&@23
+@4|{| @69
+@8|r+0#00e0003&|e|c|o|r|d| +0#0000000&|P|a|i|r|(|L+0#0000001#ffff4012|o|n|g|F|u|n|c|t|i|o|n|<|N+0#ffffff16#ff404010|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|a|,| @28
+@20>L+0#0000001#ffff4012|o|n|g|F|u|n|c|t|i|o|n|<|S+0#0000000#ffffff0|t|r|i|n|g|>+0#0000001#ffff4012| +0#0000000#ffffff0|b|)| |{| |}| @27
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|P|a|i|r| |p| |=| |s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|r|a|d|i|x|)| |{| @35
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|2+0#e000002&| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|B|i|n|:+0#00e0e07&@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:+0#00e0e07&@1|t+0#0000000&|o|B|i|n|a|r|y|S|t|r|i|n|g|)|;| @11
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|8+0#e000002&| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|O|c|t|:+0#00e0e07&@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:+0#00e0e07&@1|t+0#0000000&|o|O|c|t|a|l|S|t|r|i|n|g|)|;| @12
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|6| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|H|e|x|:+0#00e0e07&@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:+0#00e0e07&@1|t+0#0000000&|o|H|e|x|S|t|r|i|n|g|)|;| @13
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|D|e|c|:+0#00e0e07&@1|n+0#af5f00255&|e|w|,+0#0000000&| @33
+@24|y| |-+0#00e0e07&|>| +0#0000000&|L|o|n|g|.|t|o|S|t|r|i|n|g|(|y|)@1|;| @27
+@8|}|;| @64
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|p|.|a|(|)|.|a|p@1|l|y|(|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|p|.|b|(|)|.|a|p@1|l|y|(|x|)|,| |r|a|d|i|x|)@1|;| @8
+@4|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|l+0#00e0003&|o|n|g| +0#0000000&|t+0#00e0e07&|o|D|e|c|i|m|a|l|(|N+0#0000001#ffff4012|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#0000001#ffff4012| +0#0000000#ffffff0|x|)+0#00e0e07&| +0#0000000&@36
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|x|)| |{| @32
+@57|9|1|,|6|-|2|1| @6|7|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_06.dump b/runtime/syntax/testdir/dumps/java_generics_signature_06.dump
new file mode 100644
index 0000000..c98bd54
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|x|)| |{| @32
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|B+0#0000001#ffff4012|i|n|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |b|)| |-|>| |L|o|n|g|.|t|o|B|i|n|a|r|y|S|t|r|i|n|g|(|b|)|;| @16
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|O+0#0000001#ffff4012|c|t|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |o|)| |-|>| |L|o|n|g|.|t|o|O|c|t|a|l|S|t|r|i|n|g|(|o|)|;| @17
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|H+0#0000001#ffff4012|e|x|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |h|)| |-|>| |L|o|n|g|.|t|o|H|e|x|S|t|r|i|n|g|(|h|)|;| @19
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&|-|>| |L|o|n|g|.|t|o|S|t|r|i|n|g|(|x|.|v|a|l|u|e|(|)@1|;| @26
+@8>}|,| |x|.|r|a|d|i|x|(|)@1|;| @52
+@4|}| @69
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(| +0#0000000&@41
+@16|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@16
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g@1|a|b|l|e| @51
+@4|{| @69
+@8|S|t|r|i|n|g| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @40
+@4|}| @69
+@75
+@4|{| @69
+@8|i+0#00e0003&|n|t| +0#0000000&|N| |=| |0+0#e000002&|,+0#0000000&| |X| |=| |1+0#e000002&|,+0#0000000&| |Y| |=| |2+0#e000002&|;+0#0000000&| @42
+@8|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|f| |=| |y|-+0#00e0e07&|>|N+0#0000000&|<|y|.|i|n|t|V|a|l|u|e|(|)|;| @31
+@8|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|g| |=| |y|-+0#00e0e07&|>|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0|&@1|(|I|n|t|e|g|e|r|)|y|>+0#0000001#ffff4012|N+0#0000000#ffffff0|;| @28
+@57|1|0|9|,|3|-|9| @6|8|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_07.dump b/runtime/syntax/testdir/dumps/java_generics_signature_07.dump
new file mode 100644
index 0000000..fe72261
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|g| |=| |y|-+0#00e0e07&|>|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0|&@1|(|I|n|t|e|g|e|r|)|y|>+0#0000001#ffff4012|N+0#0000000#ffffff0|;| @28
+@8|b+0#00e0003&|o@1|l|e|a|n|[+0#0000000&|]| |b@1| |=| |{| @50
+@12|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0||@1|N|>+0#0000001#ffff4012|Y+0#0000000#ffffff0|,| |X| |<| |Y|,| |X| |<|Y|,| |X| |<|(|Y|)|,| |X|<|(|Y|)|,| |(|X|)|<|Y|,| @18
+@12|D|o|u|b|l|e|.|i|s|F|i|n|i|t|e|(|X|<@1|Y|)|,| @40
+@12|X|<|=|Y|,| |X|<|(|i+0#00e0003&|n|t|)+0#0000000&|(|b+0#00e0003&|y|t|e|)+0#0000000&|Y|,| |X|<|~|Y|,| |X|<|-|Y|,| |X|<|+|Y|,| @23
+@8>}|;| @64
+@8|C+0#0000001#ffff4012|l|a|s@1|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|k|l|a|s@1| |=| |G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| @28
+@8|C+0#0000001#ffff4012|l|a|s@1|<| +0#0000000#ffffff0|j+0#ffffff16#ff404010|a|v|a|.|l|a|n|g|.|C|l|a|s@1|<|@+0#e000e06#ffffff0|T|a|g@1|a|b|l|e|(|"+0#e000002&|<|>|"|)+0#e000e06&|i+0#00e0003&|n|t|[+0#0000000&|]|[|]|>+0#ffffff16#ff404010| +0#0000000#ffffff0|[+0#ffffff16#ff404010|]| +0#0000000#ffffff0|[+0#ffffff16#ff404010|]| +0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@12
+@8|[+0#0000001#ffff4012| +0#0000000#ffffff0|]+0#0000001#ffff4012| +0#0000000#ffffff0|[+0#0000001#ffff4012| +0#0000000#ffffff0|]+0#0000001#ffff4012| +0#0000000#ffffff0|$| |[| |]| |[| |]|;| @48
+@8|i+0#af5f00255&|f| +0#0000000&|(|f+0#e000002&|a|l|s|e|)+0#0000000&| |{| |n+0#af5f00255&|e|w| +0#0000000&|G|e|n|e|r|i|c|s|$|T|e|s|t|s|<|>|(|)|;| |}| @28
+@8|a|l|p|h|a|<|?|>| |a|o|;| @54
+@8|a|l|p|h|a|<|U|>| |a|u|;| @54
+@8|a|l|p|h|a|<|a|l|p|h|a|<|U|>@1| |a@1|u|;| @46
+@8|a|l|p|h|a|<|Y+0#0000001#ffff4012|0|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|>+0#0000000#ffffff0| |a|y|0|o|;| @48
+@8|a|l|p|h|a|<|Y+0#0000001#ffff4012|0|<|U+0#0000000#ffffff0|>+0#0000001#ffff4012|>+0#0000000#ffffff0| |a|y|0|u|;| @48
+@8|Y|0|<|a|l|p|h|a|<|?|>@1| |y|0|a|o|;| @48
+@8|Y|0|<|a|l|p|h|a|<|U|>@1| |y|0|a|u|;| @48
+@4|}| @69
+|}| @73
+@57|1|2|7|,|3|-|9| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_07.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_07.dump
index 7749ef2..5d11fe3 100644
--- a/runtime/syntax/testdir/dumps/java_lambda_expressions_07.dump
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_07.dump
@@ -15,6 +15,6 @@
@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| @7|-|>| |s|t|r|_|;| @30
@12|}|)|:| @8|{| |e|c|h|o|(|s|t|r|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
@8|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|:+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @4|{| |e|c|h|o|(|"+0#e000002&|O|t|h|e|r|"|)+0#0000000&|;| |}| @24
-@8|}|;| @64
+@8|}| @65
@75
@57|1|2|7|,|3|-|9| @6|8|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_00.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_00.dump
new file mode 100644
index 0000000..0ff4f9e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|i|n|a|r|y|O|p|e|r|a|t|o|r|;| @33
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|L|a|m|b|d|a|E|x|p|r|e|s@1|i|o|n|s|$|T|e|s|t|s| @2|/+0#0000e05&@1| |J|D|K| |2|1|+|.| +0#0000000&@31
+|{| @73
+@4|<|I|1|,| |C|1|,| |C|2|,| |T|1|,| |T|2|,| |T|3|,| |Z|1|,| |Z|2|,| |Z|3|,| |S|1|,| |S|2|,| |S|3|>| |v+0#00e0003&|o|i|d| +0#0000000&|t+0#00e0e07&|e|s|t|(|)| +0#0000000&@10
+@4|{| @2|/+0#0000e05&@1| |S|c|h|ö|n|f|i|n|k|e|l|'|s| |f|u|n|c|t|i|o|n|s|.| +0#0000000&@39
+@8|I|<|I|1|>| |i| |=| |x| |-+0#00e0e07&|>| +0#0000000&|x|;| @49
+@8|C|<|C|1|,| |C|2|>| |c| |=| |x| |-+0#00e0e07&|>| +0#0000000&|y| |-+0#00e0e07&|>| +0#0000000&|x|;| @40
+@8|T|<|T|1|,| |T|2|,| |T|3|>| |t| |=| |f| |-+0#00e0e07&|>| +0#0000000&|y| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|x|)|.|a|p@1|l|y|(|y|)|;| @13
+@8|Z|<|Z|1|,| |Z|2|,| |Z|3|>| |z| |=| |f| |-+0#00e0e07&|>| +0#0000000&|g| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|g|.|a|p@1|l|y|(|x|)@1|;| @13
+@8|S|<|S|1|,| |S|2|,| |S|3|>| |s| |=| |f| |-+0#00e0e07&|>| +0#0000000&|g| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|x|)| @23
+@24|.|a|p@1|l|y|(|g|.|a|p@1|l|y|(|x|)@1|;| @31
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_01.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_01.dump
new file mode 100644
index 0000000..b5bdac9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|C|<|C|1|,| |C|2|>| |c| |=| |x| |-+0#00e0e07&|>| +0#0000000&|y| |-+0#00e0e07&|>| +0#0000000&|x|;| @40
+@8|T|<|T|1|,| |T|2|,| |T|3|>| |t| |=| |f| |-+0#00e0e07&|>| +0#0000000&|y| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|x|)|.|a|p@1|l|y|(|y|)|;| @13
+@8|Z|<|Z|1|,| |Z|2|,| |Z|3|>| |z| |=| |f| |-+0#00e0e07&|>| +0#0000000&|g| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|g|.|a|p@1|l|y|(|x|)@1|;| @13
+@8|S|<|S|1|,| |S|2|,| |S|3|>| |s| |=| |f| |-+0#00e0e07&|>| +0#0000000&|g| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|x|)| @23
+@24|.|a|p@1|l|y|(|g|.|a|p@1|l|y|(|x|)@1|;| @31
+> @74
+@8|I|<|I|1|>| |i|0|1| |=| |(+0#00e0e07&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @41
+@8|I|<|I|1|>| |i|0|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @31
+@8|I|<|I|1|>| |i|0|3| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @21
+@8|I|<|I|1|>| |i|0|4| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @35
+@8|I|<|I|1|>| |i|0|5| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @25
+@8|I|<|I|1|>| |i|0|6| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @15
+@8|I|<|I|1|>| |i|0|7| |=| |(+0#00e0e07&|I+0#0000000&|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @42
+@8|I|<|I|1|>| |i|0|8| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @32
+@8|I|<|I|1|>| |i|0|9| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @22
+@8|I|<|I|1|>| |i|1|0| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @36
+@8|I|<|I|1|>| |i|1@1| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @26
+@8|I|<|I|1|>| |i|1|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @16
+@75
+@57|1|9|,|0|-|1| @8|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_02.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_02.dump
new file mode 100644
index 0000000..a597c2f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@8|I|<|I|1|[|]|>| |i@1|0|1| |=| |(+0#00e0e07&|I+0#0000000&|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @36
+@8|I|<|I|1|[|]|>| |i@1|0|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @26
+@8|I|<|I|1|[|]|>| |i@1|0|3| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @16
+@8|I|<|I|1|[|]|>| |i@1|0|4| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @30
+@8>I|<|I|1|[|]|>| |i@1|0|5| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @20
+@8|I|<|I|1|[|]|>| |i@1|0|6| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @10
+@75
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|1| |=| |(+0#00e0e07&|v+0#af5f00255&|a|r| +0#0000000&|x|,| |v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @13
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|,| @16
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @32
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|3| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&@9
+@20|x|,| |@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @19
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|4| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|,| @20
+@20|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @36
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|5| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&@17
+@20|v+0#af5f00255&|a|r| +0#0000000&|x|,| |@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @19
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|6| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&@23
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|,| @32
+@57|3|7|,|3|-|9| @7|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_03.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_03.dump
new file mode 100644
index 0000000..d3750b0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@19|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|,| @32
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&@45
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @26
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|7| |=| |(+0#00e0e07&|I+0#0000000&|1| |x|,| |I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @15
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|8| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |x|,| @17
+@20>@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @33
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|9| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| @10
+@20|x|,| |@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @20
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|1|0| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|,| @21
+@20|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @37
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|1@1| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&@17
+@20|I|1| |x|,| |@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @21
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|1|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&@23
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|,| @33
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&@45
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @27
+@75
+@8|R|u|n@1|a|b|l|e| |n|o|O|p| |=| |(+0#00e0e07&|)| |-|>| +0#0000000&|{|}|;| @41
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t| |=| |(+0#00e0e07&|x+0#0000000&|,| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @23
+@57|5@1|,|6|-|2|1| @6|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_04.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_04.dump
new file mode 100644
index 0000000..c027118
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t| |=| |(+0#00e0e07&|x+0#0000000&|,| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @23
+@8|I|<|I|1|>| |i|d|1| |=| |(+0#00e0e07&|x+0#0000000&|)+0#00e0e07&| |-|>| +0#0000000&|(|x|)|;| @43
+@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|u|n|c|h|e|c|k|e|d|"|)+0#e000e06&| +0#0000000&|I|<|I|1|>| |i|d|2| |=| @24
+@16|(@1|I|<|I|<|I|1|>@1|)| |(|I|<|?|>|)| |(|F|u|n|c|t|i|o|n|<|I|1|,| @26
+@20|I|1|>| |x|)| |-|>| |x|)|.|a|p@1|l|y|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|0+0#e000002&|)+0#0000000&| |{| @23
+@16>c+0#af5f00255&|a|s|e| +0#0000000&|(@1|i+0#00e0003&|n|t|)+0#0000000&| |(|b+0#00e0003&|y|t|e|)+0#0000000&| |1+0#e000002&|)+0#0000000&| |-|>| |(+0#00e0e07&|I+0#0000000&|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @21
+@16|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&|-|>| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| |}|)|;| @21
+@8|C|<|C|1|,| |C|2|>| |c|o|n|s|t|1| |=| |(+0#00e0e07&|x+0#0000000&|)+0#00e0e07&| |-|>| +0#0000000&|(+0#00e0e07&|y+0#0000000&|)+0#00e0e07&| |-|>| +0#0000000&|(|x|)|;| @29
+@8|C|<|C|1|,| |C|2|>| |c|o|n|s|t|2| |=| |s+0#af5f00255&|w|i|t|c|h|(+0#0000000&|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|"+0#e000002&@1|)+0#0000000&| |{| @27
+@24|c+0#af5f00255&|a|s|e| +0#0000000&|"+0#e000002&|-|>|"|-+0#0000000&|>|"+0#e000002&|(|s|)|-|>|(|s|)|"|;+0#0000000&| @28
+@24|d+0#af5f00255&|e|f|a|u|l|t|-+0#0000000&|>|"+0#e000002&|d|e|f|a|u|l|t|"|;+0#0000000&| |}|)| |{| @26
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|(|"+0#e000002&|-|>|"|)+0#0000000&|-|>|(+0#00e0e07&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&|-|>|(|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&|-|>|(+0#0000000&|x|)|;| @27
+@12|d+0#af5f00255&|e|f|a|u|l|t|-+0#0000000&|>|(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&|-|>|(|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| +0#0000000&@17
+| +0#00e0e07&@15|-|>|(+0#0000000&|x|)|;| @52
+@8|}|;| @64
+@4|}| @69
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|P|A|R|A|M|E|T|E|R|)+0#e000e06&| +0#0000000&@19
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|a|g@1|a|b|l|e|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@21
+@57|7|3|,|5|-|1|7| @6|4|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_05.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_05.dump
new file mode 100644
index 0000000..98ab331
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|a|g@1|a|b|l|e|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@21
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g@1|a|b|l|e| |{| |S|t|r|i|n|g|[|]| |v|a|l|u|e|(|)| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @18
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|P|A|R|A|M|E|T|E|R|)+0#e000e06&| +0#0000000&@19
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g@1|a|b|l|e|s| |{| |T|a|g@1|a|b|l|e|[|]| |v|a|l|u|e|(|)|;| |}| @26
+> @74
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I|<|A|1|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F|u|n|c|t|i|o|n|<|A|1|,| |A|1|>| |{| |}| @26
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|C|<|A|1|,| |A|2|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F|u|n|c|t|i|o|n|<|A|1|,| |F|u|n|c|t|i|o|n|<|A|2|,| |A|1|>@1| |{| |}| @8
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|T|<|A|1|,| |A|2|,| |A|3|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&@39
+@16|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|1|,| |F|u|n|c|t|i|o|n|<|A|2|,| |A|3|>@1|,| @18
+@20|F|u|n|c|t|i|o|n|<|A|2|,| @42
+@20|F|u|n|c|t|i|o|n|<|A|1|,| |A|3|>@2| |{| |}| @32
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|Z|<|A|1|,| |A|2|,| |A|3|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|2|,| |A|3|>|,| @12
+@20|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|1|,| |A|2|>|,| @28
+@20|F|u|n|c|t|i|o|n|<|A|1|,| |A|3|>@2| |{| |}| @32
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|<|A|1|,| |A|2|,| |A|3|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&@39
+@16|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|1|,| |F|u|n|c|t|i|o|n|<|A|2|,| |A|3|>@1|,| @18
+@20|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|1|,| |A|2|>|,| @28
+@20|F|u|n|c|t|i|o|n|<|A|1|,| |A|3|>@2| |{| |}| @32
+@57|9|1|,|0|-|1| @7|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_06.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_06.dump
new file mode 100644
index 0000000..5d936ef
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@19|F|u|n|c|t|i|o|n|<|A|1|,| |A|3|>@2| |{| |}| @32
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|e+0#00e0e07&|c|h|o|(|O+0#0000000&|b|j|e|c|t| |o|)+0#00e0e07&| +0#0000000&|{| |S|y|s|t|e|m|.|o|u|t|.|p|r|i|n|t|l|n|(|o|)|;| |}| @17
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8>e+0#00e0003&|n|u|m| +0#0000000&|L|e|t@1|e|r|s| |{| |O|T|H|E|R|,| |A|L|P|H|A|,| |B|E|T|A| |}| @31
+@75
+@8|L|e|t@1|e|r|s| |o|t|h|e|r| |=| |L|e|t@1|e|r|s|.|O|T|H|E|R|;| @36
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|o|t|h|e|r|)| |{| @50
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |a|l|p|h|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|A|L|P|H|A| |=@1| |a|l|p|h|a|:| @19
+@24|{| |e|c|h|o|(|a|l|p|h|a|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |b|e|t|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|B|E|T|A| |=@1| |b|e|t|a|:| @22
+@24|{| |e|c|h|o|(|b|e|t|a|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @11|{| |e|c|h|o|(|o|t|h|e|r|)|;| |}| @30
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|o|t|h|e|r|)| |{| @45
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |a|l|p|h|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|A|L|P|H|A| |=@1| |a|l|p|h|a| @16
+@57|1|0|9|,|3|-|9| @6|7|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_07.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_07.dump
new file mode 100644
index 0000000..0658867
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |a|l|p|h|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|A|L|P|H|A| |=@1| |a|l|p|h|a| @16
+@24|-|>| |a|l|p|h|a|;| @41
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |b|e|t|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|B|E|T|A| |=@1| |b|e|t|a| @19
+@24|-|>| |b|e|t|a|;| @42
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@8|-|>| |o|t|h|e|r|;| @37
+@8>}|)|;| @63
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|n+0#e000002&|u|l@1|)+0#0000000&| |{| @51
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r| |w+0#af5f00255&|h|e|n| +0#0000000&|!|"+0#e000002&|<|e|m|p|t|y|>|"|.+0#0000000&|e|q|u|a|l|s|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|s|t|r|)| |{| @13
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| |w+0#af5f00255&|h|e|n| +0#0000000&@41
+@20|P|r|e|d|i|c|a|t|e|.|<|S|t|r|i|n|g|>|n|o|t|(|t|e|x|t| |-+0#00e0e07&|>| +0#0000000&@25
+@28|!|t|e|x|t|.|i|s|E|m|p|t|y|(|)@1| @30
+@24|.|t|e|s|t|(|s|t|r|_|)| @39
+@28|-|>| |"+0#e000002&|<|e|m|p|t|y|>|"|;+0#0000000&| @33
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| @7|-|>| |s|t|r|_|;| @30
+@12|}|)|:| @8|{| |e|c|h|o|(|s|t|r|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|:+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @4|{| |e|c|h|o|(|"+0#e000002&|O|t|h|e|r|"|)+0#0000000&|;| |}| @24
+@8|}| @65
+@75
+@57|1|2|7|,|3|-|9| @6|8|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_99.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_08.dump
index 2a1fe2a..9c40830 100644
--- a/runtime/syntax/testdir/dumps/java_lambda_expressions_99.dump
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_08.dump
@@ -1,13 +1,9 @@
-| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| @7|-|>| |s|t|r|_|;| @30
-@12|}|)|:| @8|{| |e|c|h|o|(|s|t|r|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
-@8|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|:+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @4|{| |e|c|h|o|(|"+0#e000002&|O|t|h|e|r|"|)+0#0000000&|;| |}| @24
-@8|}|;| @64
-@75
+| +0&#ffffff0@74
@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|n+0#e000002&|u|l@1|)+0#0000000&| |{| @46
@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r| |w+0#af5f00255&|h|e|n| +0#0000000&|!|"+0#e000002&|<|e|m|p|t|y|>|"|.+0#0000000&|e|q|u|a|l|s|(| @23
@28|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|s|t|r|)| |{| @32
@16|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| |w+0#af5f00255&|h|e|n| +0#0000000&@37
-@20|P|r|e|d|i|c|a|t|e|.|<|S|t|r|i|n|g|>|n|o|t|(|t+0#00e0e07&|e|x|t| |-|>| +0#0000000&@25
+@20>P|r|e|d|i|c|a|t|e|.|<|S|t|r|i|n|g|>|n|o|t|(|t|e|x|t| |-+0#00e0e07&|>| +0#0000000&@25
@28|!|t|e|x|t|.|i|s|E|m|p|t|y|(|)@1| @30
@24|.|t|e|s|t|(|s|t|r|_|)| @39
@28|-|>| |"+0#e000002&|<|e|m|p|t|y|>|"|;+0#0000000&| @33
@@ -16,5 +12,9 @@
@12|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|,+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@1|-|>| |"+0#e000002&|O|t|h|e|r|"|;+0#0000000&| @31
@8|}|)|;| @63
@4|}| @69
->}| @73
-@57|1|5|4|,|1| @8|B|o|t|
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|5|,|6|-|2|1| @5|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_00.dump b/runtime/syntax/testdir/dumps/java_method_references_00.dump
new file mode 100644
index 0000000..72ea3ca
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|g|e|n|e|r|i|c|s| |=| |1| +0#0000000&@23
+@75
+@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|i|n|v|o|k|e|.|M|e|t|h|o|d|H|a|n|d|l|e|;| @37
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|i|P|r|e|d|i|c|a|t|e|;| @36
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|C|o|n|s|u|m|e|r|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|I|n|t|F|u|n|c|t|i|o|n|;| @36
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|I|n|t|S|u|p@1|l|i|e|r|;| @36
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|S|u|p@1|l|i|e|r|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|T|o|I|n|t|F|u|n|c|t|i|o|n|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|U|n|a|r|y|O|p|e|r|a|t|o|r|;| @34
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s| @47
+|{| @73
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8|/+0#0000e05&@1| |P|r|i|m|a|r|y| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@26
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_01.dump b/runtime/syntax/testdir/dumps/java_method_references_01.dump
new file mode 100644
index 0000000..a1c0395
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_01.dump
@@ -0,0 +1,20 @@
+|i+0#e000e06#ffffff0|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|U|n|a|r|y|O|p|e|r|a|t|o|r|;| @34
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s| @47
+|{| @73
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8>/+0#0000e05&@1| |P|r|i|m|a|r|y| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@26
+@8|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@12|R|u|n@1|a|b|l|e| |r|1| |=| |(@1|R|u|n|t|i|m|e|)| |n+0#e000002&|u|l@1|)+0#0000000&|:+0#00e0e07&@1|g+0#0000000&|c|;| @27
+@8|}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|N|u|l@1|P|o|i|n|t|e|r|E|x|c|e|p|t|i|o|n| |e|x|p|e|c|t|e|d|)| |{| @25
+@8|}| @65
+@75
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|1| |=| |(@1|N|u|m|b|e|r|)| |0+0#e000002&|)+0#0000000&|:+0#00e0e07&@1|h+0#0000000&|a|s|h|C|o|d|e|;| @20
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|2| |=| |(@1|C+0#00e0e07&|o|m|p|a|r|a|b|l|e|<|?+0#0000000&|>+0#00e0e07&|)+0#0000000&| |'+0#e000002&|\+0#e000e06&|0|'+0#e000002&|)+0#0000000&|:+0#00e0e07&@1|h+0#0000000&|a|s|h|C|o|d|e|;| @10
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|3| |=| |(@1|C+0#00e0e07&|o|m|p|a|r|a|b|l|e|<|?+0#0000000&|>+0#00e0e07&|)+0#0000000&| |f+0#e000002&|a|l|s|e|)+0#0000000&|:+0#00e0e07&@1|h+0#0000000&|a|s|h|C|o|d|e|;| @9
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|4| |=| |"+0#e000002&|:@1|"|:+0#00e0e07&@1|h+0#0000000&|a|s|h|C|o|d|e|;| @28
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|C+0#00e0003&|l|a|s@1|<|?+0#0000000&|>+0#00e0003&|>+0#00e0e07&| +0#0000000&|s|5| |=| |i+0#00e0003&|n|t|[+0#0000000&|]|.|c+0#00e0003&|l|a|s@1|:+0#00e0e07&@1|a+0#0000000&|r@1|a|y|T|y|p|e|;| @19
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|6| |=| |n+0#af5f00255&|e|w| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s|(|)| |:+0#00e0e07&@1| +0#0000000&@13
+@12|h|a|s|h|C|o|d|e|;| @53
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|7| |=| |(@1|N|u|m|b|e|r|)| @34
+@57|1|9|,|3|-|9| @8|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_02.dump b/runtime/syntax/testdir/dumps/java_method_references_02.dump
new file mode 100644
index 0000000..790c0e2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|7| |=| |(@1|N|u|m|b|e|r|)| @34
+@12|(|n+0#af5f00255&|e|w| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s|(|)|.|x|y|)|[|0+0#e000002&|]+0#0000000&|)|:+0#00e0e07&@1|i+0#0000000&|n|t|V|a|l|u|e|;| @15
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|i+0#00e0003&|n|t|[+0#0000000&|]|>+0#00e0e07&| +0#0000000&|s|8| |=| |n+0#af5f00255&|e|w| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s|(|)|.|x|y|:+0#00e0e07&@1| +0#0000000&@13
+@12|c|l|o|n|e|;| @56
+@8|C+0#00e0e07&|o|n|s|u|m|e|r|<|O+0#0000000&|b|j|e|c|t|>+0#00e0e07&| +0#0000000&|c|1| |=| |S|y|s|t|e|m|.|o|u|t| |:+0#00e0e07&@1| +0#0000000&|p|r|i|n|t|l|n|;| @22
+@8>S+0#00e0e07&|u|p@1|l|i|e|r|<|b+0#00e0003&|y|t|e|[+0#0000000&|]|>+0#00e0e07&| +0#0000000&|s|9| |=| |(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| |(+0#00e0e07&|)|-|>|"+0#e000002&|(|)|"|)+0#0000000&|.|g|e|t|(|)| @9
+@12|:+0#00e0e07&@1|g+0#0000000&|e|t|B|y|t|e|s|;| @51
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&| +0#0000000&|s|a| |=| |(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| @25
+@12|(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| |(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| @23
+@12|(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| |(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| @23
+@12|(+0#00e0e07&|)| |-|>| +0#0000000&|"+0#e000002&|(|)| |-|>| |(|)|"|)+0#0000000&| @45
+@12|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|)| @51
+@12|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|)| @51
+@12|:+0#00e0e07&@1|g+0#0000000&|e|t|)| @56
+@12|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|)| @51
+@12|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|;| @51
+@75
+@8|/+0#0000e05&@1| |E|x|p|r|e|s@1|i|o|n|N|a|m|e| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@19
+@8|/+0#0000e05&@1| |R|e|f|e|r|e|n|c|e|T|y|p|e| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@20
+@57|3|7|,|3|-|9| @7|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_03.dump b/runtime/syntax/testdir/dumps/java_method_references_03.dump
new file mode 100644
index 0000000..0a3d817
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|/+0#0000e05&@1| |R|e|f|e|r|e|n|c|e|T|y|p|e| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@20
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|S+0#0000000&|t|r|i|n|g|,| |I|n|t|S|u|p@1|l|i|e|r|>+0#00e0e07&| +0#0000000&|f|1| |=| |s+0#00e0e07&| |-|>| +0#0000000&@27
+@24|s| |:+0#00e0e07&@1| +0#0000000&|l|e|n|g|t|h|;| @38
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|i+0#00e0003&|n|t|[+0#0000000&|]|[|]|,| |S+0#00e0003&|u|p@1|l|i|e|r|<|i|n|t|[+0#0000000&|]|>+0#00e0003&|>+0#00e0e07&| +0#0000000&|f|2| |=| |i+0#00e0e07&@1| |-|>| +0#0000000&@21
+@12|(@1|i+0#00e0003&|n|t|[+0#0000000&|]|)| |(|i@1|.|l|e|n|g|t|h| |>| |0+0#e000002&| +0#0000000&|?| |i@1|[|0+0#e000002&|]+0#0000000&| |:| |i@1|)@1| @24
+@28>:+0#00e0e07&@1| +0#0000000&|c|l|o|n|e|;| @37
+@8|U+0#00e0e07&|n|a|r|y|O|p|e|r|a|t|o|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&| +0#0000000&|u|o|1| |=| |S|t|r|i|n|g|:+0#00e0e07&@1|v+0#0000000&|a|l|u|e|O|f|;| @22
+@8|T+0#00e0e07&|o|I|n|t|F|u|n|c|t|i|o|n|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&| +0#0000000&|t|i|f|1| |=| |s+0#00e0e07&| |-|>| +0#0000000&|s|.|t|r|a|n|s|f|o|r|m|(| @20
+@24|S|t|r|i|n|g| |:+0#00e0e07&@1| +0#0000000&|l|e|n|g|t|h|)|;| @32
+@75
+@8|/+0#0000e05&@1| |C|l|a|s@1|T|y|p|e| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |n|e|w| +0#0000000&@31
+@8|/+0#0000e05&@1| |A|r@1|a|y|T|y|p|e| |:@1| |n|e|w| +0#0000000&@47
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|O+0#0000000&|b|j|e|c|t|,| |C|2|>+0#00e0e07&| +0#0000000&|f|3| |=| |C|2|:+0#00e0e07&@1|<+0#0000000&|O|b|j|e|c|t|>|n+0#af5f00255&|e|w|;+0#0000000&| @24
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|C+0#0000000&|2|,| |C|2|.|C|2|1|>+0#00e0e07&| +0#0000000&|f|4| |=| |p+0#00e0e07&|c|i| |-|>| +0#0000000&|p|c|i|.|n+0#af5f00255&|e|w| +0#0000000&@26
+@20|<|S|t|r|i|n|g|>|C|2|1|(|n+0#e000002&|u|l@1|)+0#0000000&|;| |/+0#0000e05&@1| |C|f|.| |"|d|"|.| +0#0000000&@24
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|C+0#00e0003&|1|<|?+0#0000000&|>+0#00e0003&|>+0#00e0e07&| +0#0000000&|s|b| |=| |C|1|:+0#00e0e07&@1|n+0#af5f00255&|e|w|;+0#0000000&| @37
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|B+0#0000000&|y|t|e|,| |C+0#00e0003&|1|<|?+0#0000000&|>+0#00e0003&|>+0#00e0e07&| +0#0000000&|f|5| |=| |C+0#00e0e07&|1|<|V+0#0000000&|o|i|d|>+0#00e0e07&| +0#0000000&|:+0#00e0e07&@1| +0#0000000&|<|B|y|t|e|>| |n+0#af5f00255&|e|w|;+0#0000000&| @16
+@8|I+0#00e0e07&|n|t|F|u|n|c|t|i|o|n|<|C+0#00e0003&|1|<|?+0#0000000&|>+0#00e0003&|[|]|>+0#00e0e07&| +0#0000000&|i|f|1| |=| |C+0#00e0e07&|1|<|?+0#0000000&|>+0#00e0e07&|[|]| +0#0000000&|:+0#00e0e07&@1| +0#0000000&|n+0#af5f00255&|e|w|;+0#0000000&| @24
+@8|I+0#00e0e07&|n|t|F|u|n|c|t|i|o|n|<|b+0#00e0003&|y|t|e|[+0#0000000&|]|>+0#00e0e07&| +0#0000000&|i|f|2| |=| |b+0#00e0003&|y|t|e|[+0#0000000&|]| |:+0#00e0e07&@1| +0#0000000&|n+0#af5f00255&|e|w|;+0#0000000&| @26
+@57|5@1|,|8|-|2|9| @6|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_04.dump b/runtime/syntax/testdir/dumps/java_method_references_04.dump
new file mode 100644
index 0000000..25211f0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|I+0#00e0e07&|n|t|F|u|n|c|t|i|o|n|<|b+0#00e0003&|y|t|e|[+0#0000000&|]|>+0#00e0e07&| +0#0000000&|i|f|2| |=| |b+0#00e0003&|y|t|e|[+0#0000000&|]| |:+0#00e0e07&@1| +0#0000000&|n+0#af5f00255&|e|w|;+0#0000000&| @26
+@4|}| @69
+@75
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|i+0#00e0003&|n|t|[+0#0000000&|]| |x|y| |=| |{| |0+0#e000002&|,+0#0000000&| |1+0#e000002&| +0#0000000&|}|;| @44
+@75
+@4>/+0#0000e05&@1| |s|u|p|e|r| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@32
+@4|/+0#0000e05&@1| |T|y|p|e|N|a|m|e| |.| |s|u|p|e|r| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@21
+@4|<|T|>| |M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s|(|)| @43
+@4|{| @69
+@8|P+0#00e0e07&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|p|1| |=| |M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s|.|s+0#00e0003&|u|p|e|r|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| @12
+@8|P+0#00e0e07&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|p|2| |=| |M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s|.|t+0#00e0003&|h|i|s|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| @13
+@4|}| @69
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I+0#00e0e07&|4|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#00e0e07&|3|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@41
+@4|{| @69
+| +0#00e0e07&@7|d+0#4040ff13&|e|f|a|u|l|t| +0#00e0e07&|P|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| |s|u|p|e|r|E|q|u|a|l|i|s|t|(|)| +0#0000000&@30
+@8|{| @65
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|3| @53
+@16|.|s+0#00e0003&|u|p|e|r|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| |/+0#0000e05&|*| |"|a|"| |*|/| +0#0000000&@33
+@57|7|3|,|2|-|5| @7|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_05.dump b/runtime/syntax/testdir/dumps/java_method_references_05.dump
new file mode 100644
index 0000000..3ebf3fb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@15|.|s+0#00e0003&|u|p|e|r|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| |/+0#0000e05&|*| |"|a|"| |*|/| +0#0000000&@33
+@8|}| @65
+@4|}| @69
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I+0#00e0e07&|3|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#00e0e07&|2|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@41
+@4>{| @69
+| +0#00e0e07&@7|d+0#4040ff13&|e|f|a|u|l|t| +0#00e0e07&|P|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| |s|u|p|e|r|E|q|u|a|l|i|s|t|(|)| +0#0000000&@30
+@8|{| @65
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|2|.| @52
+@16|s+0#00e0003&|u|p|e|r|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| @1|/+0#0000e05&|*| |"|b|"| |*|/| +0#0000000&@33
+@8|}| @65
+@4|}| @69
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I+0#00e0e07&|2|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#00e0e07&|1|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@41
+@4|{| @69
+| +0#00e0e07&@7|d+0#4040ff13&|e|f|a|u|l|t| +0#00e0e07&|P|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| |s|u|p|e|r|E|q|u|a|l|i|s|t|(|)| +0#0000000&@30
+@8|{| @2|/+0#0000e05&|*| |N|o|n|-|c|a|p|t|u|r|i|n|g| |g|y|m|n|a|s|t|i|c|s| |f|o|r| |s|u|p|e|r|:@1|e|q|u|a|l|s|.| |*|/| +0#0000000&@13
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|F|u|n|c|t|i|o|n|.|<|F+0#00e0e07&|u|n|c|t|i|o|n|<|M+0#0000000&|e|t|h|o|d|H|a|n|d|l|e|,| @23
+@28|P+0#00e0003&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0003&|>+0#00e0e07&|>+0#0000000&| @32
+@57|9|1|,|2|-|5| @7|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_06.dump b/runtime/syntax/testdir/dumps/java_method_references_06.dump
new file mode 100644
index 0000000..f1bd812
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@27|P+0#00e0003&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0003&|>+0#00e0e07&|>+0#0000000&| @32
+@32|i|d|e|n|t|i|t|y|(|)| @32
+@16|.|a|p@1|l|y|(|m+0#00e0e07&|h| |-|>| +0#0000000&|o+0#00e0e07&| |-|>| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|T|e|s|t|s| @19
+@24|.|i|n|v|o|k|e|P|r|e|d|i|c|a|t|e|(|m|h|,| |o|)@1| @26
+@16|.|a|p@1|l|y|(|E|Q|U|A|L|S|.|b|i|n|d|T|o|(|t+0#00e0003&|h|i|s|)+0#0000000&@1|;| @30
+@8>}| @65
+@4|}| @69
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I+0#00e0e07&|1|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@55
+@4|{| @69
+| +0#00e0e07&@7|d+0#4040ff13&|e|f|a|u|l|t| +0#00e0e07&|P|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| |e|q|u|a|l|i|s|t|(|)| +0#0000000&@35
+@8|{| @2|/+0#0000e05&|*| |N|o|n|-|c|a|p|t|u|r|i|n|g| |g|y|m|n|a|s|t|i|c|s| |f|o|r| |t|h|i|s|:@1|e|q|u|a|l|s|.| |*|/| +0#0000000&@14
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|F|u|n|c|t|i|o|n|.|<|F+0#00e0e07&|u|n|c|t|i|o|n|<|I+0#00e0003&|1|<|T+0#0000000&|>+0#00e0003&|,+0#0000000&| |P+0#00e0003&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0003&|>+0#00e0e07&|>+0#0000000&| @15
+@32|i|d|e|n|t|i|t|y|(|)| @32
+@16|.|a|p@1|l|y|(|t+0#00e0e07&|h|a|t| |-|>| +0#0000000&|o+0#00e0e07&| |-|>| +0#0000000&|F|u|n|c|t|i|o|n| @30
+@24|.|<|B+0#00e0e07&|i|P|r|e|d|i|c|a|t|e|<|I+0#00e0003&|1|<|T+0#0000000&|>+0#00e0003&|,+0#0000000&| |T|>+0#00e0e07&|>+0#0000000&| @26
+@32|i|d|e|n|t|i|t|y|(|)| @32
+@20|.|a|p@1|l|y|(|I+0#00e0e07&|1|<|T+0#0000000&|>+0#00e0e07&|:@1| +0#0000000&@1|/+0#0000e05&|*| |"|c|"| |*|/| +0#0000000&@29
+@24|e|q|u|a|l|s|)| @43
+@57|1|0|9|,|3|-|9| @6|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_07.dump b/runtime/syntax/testdir/dumps/java_method_references_07.dump
new file mode 100644
index 0000000..6f5549e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@23|e|q|u|a|l|s|)| @43
+@20|.|t|e|s|t|(|t|h|a|t|,| |o|)@1| @39
+@16|.|a|p@1|l|y|(|I|1|.|t+0#00e0003&|h|i|s|)+0#0000000&|;| @42
+@8|}| @65
+@4|}| @69
+> @74
+| +0#00e0e07&@3|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|<|T|>| |b+0#00e0003&|o@1|l|e|a|n| +0#00e0e07&|i|n|v|o|k|e|P|r|e|d|i|c|a|t|e|(|M|e|t|h|o|d|H|a|n|d|l|e| |m|h|,| |T| |o|)| +0#0000000&@14
+@4|{| @69
+@8|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|b+0#00e0003&|o@1|l|e|a|n|)+0#0000000&| |m|h|.|i|n|v|o|k|e|E|x|a|c|t|(|o|)|;| @27
+@8|}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|T|h|r|o|w|a|b|l|e| |t|h|)| |{| @42
+@12|t+0#af5f00255&|h|r|o|w| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&|R|u|n|t|i|m|e|E|x|c|e|p|t|i|o|n|(|t|h|)|;| @31
+@8|}| @65
+@4|}| @69
+@75
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|M|e|t|h|o|d|H|a|n|d|l|e| |E|Q|U|A|L|S|;| @29
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@57|1|2|7|,|0|-|1| @6|7|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_08.dump b/runtime/syntax/testdir/dumps/java_method_references_08.dump
new file mode 100644
index 0000000..537c5d5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@12|E|Q|U|A|L|S| |=| |j|a|v|a|.|l|a|n|g|.|i|n|v|o|k|e|.|M|e|t|h|o|d|H|a|n|d|l|e|s|.|l|o@1|k|u|p|(|)| @14
+@28|.|f|i|n|d|S|p|e|c|i|a|l|(| @33
+@16|I|1|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @49
+@16|"+0#e000002&|e|q|u|a|l|s|"|,+0#0000000&| @49
+@16>j|a|v|a|.|l|a|n|g|.|i|n|v|o|k|e|.|M|e|t|h|o|d|T|y|p|e|.|m|e|t|h|o|d|T|y|p|e|(| @19
+@28|b+0#00e0003&|o@1|l|e|a|n|.+0#0000000&|c+0#00e0003&|l|a|s@1|,+0#0000000&| @32
+@28|O|b|j|e|c|t|.|c+0#00e0003&|l|a|s@1|)+0#0000000&|,| @32
+@16|I|2|.|c+0#00e0003&|l|a|s@1|)+0#0000000&|;| @48
+@8|}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|R|e|f|l|e|c|t|i|v|e|O|p|e|r|a|t|i|o|n|E|x|c|e|p|t|i|o|n| |e|)| |{| @24
+@12|t+0#af5f00255&|h|r|o|w| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&|E|r@1|o|r|(|e|)|;| @43
+@8|}| @65
+@4|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|C+0#00e0e07&|1|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@52
+@4|{| @69
+@8|C|1|(|)| |{| |}| @58
+@8|<|A|>| |C|1|(|A| |d|u|m@1|y|)| |{| |}| @47
+@4|}| @69
+@57|1|4|5|,|5|-|1|7| @5|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_09.dump b/runtime/syntax/testdir/dumps/java_method_references_09.dump
new file mode 100644
index 0000000..d5110b6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_09.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|C|2| @55
+@4|{| @69
+@8|C|2|(|)| |{| |<|S|t|r|i|n|g|>| |t+0#00e0003&|h|i|s|(+0#0000000&|"+0#e000002&@1|)+0#0000000&|;| |}| @39
+> @74
+@8|<|A|>| |C|2|(|A| |d|u|m@1|y|)| @51
+@8|{| @65
+@12|C|2|.|s|t|r|i|n|g|e|r|(|)|.|a|p@1|l|y|(@2|F+0#00e0e07&|u|n|c|t|i|o|n|<|C+0#0000000&|2|,| |C|2|.|C|2|1|>+0#00e0e07&|)+0#0000000&| @19
+@24|C|2|.|C|2|1|:+0#00e0e07&@1|n+0#af5f00255&|e|w|)+0#0000000&| @3|/+0#0000e05&|*| |"|d|"| |*|/| +0#0000000&@25
+@20|.|a|p@1|l|y|(|C|2|.|t+0#00e0003&|h|i|s|)+0#0000000&@1|;| @37
+@8|}| @65
+@75
+@4| +0#00e0003&@3|c|l|a|s@1| +0#0000000&|C|2|1| @57
+@8|{| @65
+@12|C|2|1|(|)| |{| |<|S|t|r|i|n|g|>| |t+0#00e0003&|h|i|s|(+0#0000000&|"+0#e000002&@1|)+0#0000000&|;| |}| @34
+@75
+@12|<|B|>| |C|2|1|(|B| |d|u|m@1|y|)| @46
+@12|{| @61
+@57|1|6|3|,|0|-|1| @6|9|4|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_10.dump b/runtime/syntax/testdir/dumps/java_method_references_10.dump
new file mode 100644
index 0000000..19280b0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_10.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|{| @61
+@16|C|2|.|s|t|r|i|n|g|e|r|(|)|.|a|p@1|l|y|(|C|2|.|t+0#00e0003&|h|i|s|)+0#0000000&|;| @29
+@12|}| @61
+@8|}| @65
+@75
+| +0#00e0e07&@7>s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|<|T| |e|x|t|e|n|d|s| |O|b|j|e|c|t|>| |F|u|n|c|t|i|o|n|<|T+0#0000000&|,+0#00e0e07&| |S+0#0000000&|t|r|i|n|g|>+0#00e0e07&| |s|t|r|i|n|g|e|r|(|)| +0#0000000&@10
+@8|{| @65
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|T|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|;| |/+0#0000e05&|*| |"|e|"| |*|/| +0#0000000&@33
+@8|}| @65
+@4|}| @69
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|8|1|,|3|-|9| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_00.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_00.dump
new file mode 100644
index 0000000..029e661
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|g|e|n|e|r|i|c|s| |=| |1| +0#0000000&@23
+@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|i|n|v|o|k|e|.|M|e|t|h|o|d|H|a|n|d|l|e|;| @37
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|i|P|r|e|d|i|c|a|t|e|;| @36
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|C|o|n|s|u|m|e|r|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|I|n|t|F|u|n|c|t|i|o|n|;| @36
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|I|n|t|S|u|p@1|l|i|e|r|;| @36
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|S|u|p@1|l|i|e|r|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|T|o|I|n|t|F|u|n|c|t|i|o|n|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|U|n|a|r|y|O|p|e|r|a|t|o|r|;| @34
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s| @46
+|{| @73
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8|/+0#0000e05&@1| |P|r|i|m|a|r|y| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@26
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_01.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_01.dump
new file mode 100644
index 0000000..13d64f5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_01.dump
@@ -0,0 +1,20 @@
+|i+0#e000e06#ffffff0|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|U|n|a|r|y|O|p|e|r|a|t|o|r|;| @34
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s| @46
+|{| @73
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8>/+0#0000e05&@1| |P|r|i|m|a|r|y| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@26
+@8|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@12|R|u|n@1|a|b|l|e| |r|1| |=| |(@1|R|u|n|t|i|m|e|)| |n+0#e000002&|u|l@1|)+0#0000000&|:+0#00e0e07&@1|g+0#0000000&|c|;| @27
+@8|}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|N|u|l@1|P|o|i|n|t|e|r|E|x|c|e|p|t|i|o|n| |e|x|p|e|c|t|e|d|)| |{| @25
+@8|}| @65
+@75
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|1| |=| |(@1|N|u|m|b|e|r|)| |0+0#e000002&|)+0#0000000&|:+0#00e0e07&@1|h+0#0000000&|a|s|h|C|o|d|e|;| @20
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|2| |=| |(@1|C+0#00e0e07&|o|m|p|a|r|a|b|l|e|<|?+0#0000000&|>+0#00e0e07&|)+0#0000000&| |'+0#e000002&|\+0#e000e06&|0|'+0#e000002&|)+0#0000000&|:+0#00e0e07&@1|h+0#0000000&|a|s|h|C|o|d|e|;| @10
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|3| |=| |(@1|C+0#00e0e07&|o|m|p|a|r|a|b|l|e|<|?+0#0000000&|>+0#00e0e07&|)+0#0000000&| |f+0#e000002&|a|l|s|e|)+0#0000000&|:+0#00e0e07&@1|h+0#0000000&|a|s|h|C|o|d|e|;| @9
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|4| |=| |"+0#e000002&|:@1|"|:+0#00e0e07&@1|h+0#0000000&|a|s|h|C|o|d|e|;| @28
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|C+0#00e0003&|l|a|s@1|<|?+0#0000000&|>+0#00e0003&|>+0#00e0e07&| +0#0000000&|s|5| |=| |i+0#00e0003&|n|t|[+0#0000000&|]|.|c+0#00e0003&|l|a|s@1|:+0#00e0e07&@1|a+0#0000000&|r@1|a|y|T|y|p|e|;| @19
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|6| |=| |n+0#af5f00255&|e|w| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s|(|)| |:+0#00e0e07&@1| +0#0000000&@12
+@12|h|a|s|h|C|o|d|e|;| @53
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|7| |=| |(@1|N|u|m|b|e|r|)| @34
+@57|1|9|,|3|-|9| @8|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_02.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_02.dump
new file mode 100644
index 0000000..a223c38
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|S+0#00e0e07&|u|p@1|l|i|e|r|<|I+0#0000000&|n|t|e|g|e|r|>+0#00e0e07&| +0#0000000&|s|7| |=| |(@1|N|u|m|b|e|r|)| @34
+@12|(|n+0#af5f00255&|e|w| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s|(|)|.|x|y|)|[|0+0#e000002&|]+0#0000000&|)|:+0#00e0e07&@1|i+0#0000000&|n|t|V|a|l|u|e|;| @14
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|i+0#00e0003&|n|t|[+0#0000000&|]|>+0#00e0e07&| +0#0000000&|s|8| |=| |n+0#af5f00255&|e|w| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s|(|)|.|x|y|:+0#00e0e07&@1| +0#0000000&@12
+@12|c|l|o|n|e|;| @56
+@8|C+0#00e0e07&|o|n|s|u|m|e|r|<|O+0#0000000&|b|j|e|c|t|>+0#00e0e07&| +0#0000000&|c|1| |=| |S|y|s|t|e|m|.|o|u|t| |:+0#00e0e07&@1| +0#0000000&|p|r|i|n|t|l|n|;| @22
+@8>S+0#00e0e07&|u|p@1|l|i|e|r|<|b+0#00e0003&|y|t|e|[+0#0000000&|]|>+0#00e0e07&| +0#0000000&|s|9| |=| |(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| |(+0#00e0e07&|)|-|>|"+0#e000002&|(|)|"|)+0#0000000&|.|g|e|t|(|)| @9
+@12|:+0#00e0e07&@1|g+0#0000000&|e|t|B|y|t|e|s|;| @51
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&| +0#0000000&|s|a| |=| |(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| @25
+@12|(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| |(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| @23
+@12|(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| |(@1|S+0#00e0e07&|u|p@1|l|i|e|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&|)+0#0000000&| @23
+@12|(+0#00e0e07&|)| |-|>| +0#0000000&|"+0#e000002&|(|)| |-|>| |(|)|"|)+0#0000000&| @45
+@12|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|)| @51
+@12|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|)| @51
+@12|:+0#00e0e07&@1|g+0#0000000&|e|t|)| @56
+@12|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|)| @51
+@12|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|;| @51
+@75
+@8|/+0#0000e05&@1| |E|x|p|r|e|s@1|i|o|n|N|a|m|e| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@19
+@8|/+0#0000e05&@1| |R|e|f|e|r|e|n|c|e|T|y|p|e| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@20
+@57|3|7|,|3|-|9| @7|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_03.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_03.dump
new file mode 100644
index 0000000..85ea29b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|/+0#0000e05&@1| |R|e|f|e|r|e|n|c|e|T|y|p|e| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@20
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|S+0#0000000&|t|r|i|n|g|,| |I|n|t|S|u|p@1|l|i|e|r|>+0#00e0e07&| +0#0000000&|f|1| |=| |s| |-+0#00e0e07&|>| +0#0000000&@27
+@24|s| |:+0#00e0e07&@1| +0#0000000&|l|e|n|g|t|h|;| @38
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|i+0#00e0003&|n|t|[+0#0000000&|]|[|]|,| |S+0#00e0003&|u|p@1|l|i|e|r|<|i|n|t|[+0#0000000&|]|>+0#00e0003&|>+0#00e0e07&| +0#0000000&|f|2| |=| |i@1| |-+0#00e0e07&|>| +0#0000000&@21
+@12|(@1|i+0#00e0003&|n|t|[+0#0000000&|]|)| |(|i@1|.|l|e|n|g|t|h| |>| |0+0#e000002&| +0#0000000&|?| |i@1|[|0+0#e000002&|]+0#0000000&| |:| |i@1|)@1| @24
+@28>:+0#00e0e07&@1| +0#0000000&|c|l|o|n|e|;| @37
+@8|U+0#00e0e07&|n|a|r|y|O|p|e|r|a|t|o|r|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&| +0#0000000&|u|o|1| |=| |S|t|r|i|n|g|:+0#00e0e07&@1|v+0#0000000&|a|l|u|e|O|f|;| @22
+@8|T+0#00e0e07&|o|I|n|t|F|u|n|c|t|i|o|n|<|S+0#0000000&|t|r|i|n|g|>+0#00e0e07&| +0#0000000&|t|i|f|1| |=| |s| |-+0#00e0e07&|>| +0#0000000&|s|.|t|r|a|n|s|f|o|r|m|(| @20
+@24|S|t|r|i|n|g| |:+0#00e0e07&@1| +0#0000000&|l|e|n|g|t|h|)|;| @32
+@75
+@8|/+0#0000e05&@1| |C|l|a|s@1|T|y|p|e| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |n|e|w| +0#0000000&@31
+@8|/+0#0000e05&@1| |A|r@1|a|y|T|y|p|e| |:@1| |n|e|w| +0#0000000&@47
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|O+0#0000000&|b|j|e|c|t|,| |C|2|>+0#00e0e07&| +0#0000000&|f|3| |=| |C|2|:+0#00e0e07&@1|<+0#0000000&|O|b|j|e|c|t|>|n+0#af5f00255&|e|w|;+0#0000000&| @24
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|C+0#0000000&|2|,| |C|2|.|C|2|1|>+0#00e0e07&| +0#0000000&|f|4| |=| |p|c|i| |-+0#00e0e07&|>| +0#0000000&|p|c|i|.|n+0#af5f00255&|e|w| +0#0000000&@26
+@20|<|S|t|r|i|n|g|>|C|2|1|(|n+0#e000002&|u|l@1|)+0#0000000&|;| |/+0#0000e05&@1| |C|f|.| |"|d|"|.| +0#0000000&@24
+@8|S+0#00e0e07&|u|p@1|l|i|e|r|<|C+0#00e0003&|1|<|?+0#0000000&|>+0#00e0003&|>+0#00e0e07&| +0#0000000&|s|b| |=| |C|1|:+0#00e0e07&@1|n+0#af5f00255&|e|w|;+0#0000000&| @37
+@8|F+0#00e0e07&|u|n|c|t|i|o|n|<|B+0#0000000&|y|t|e|,| |C+0#00e0003&|1|<|?+0#0000000&|>+0#00e0003&|>+0#00e0e07&| +0#0000000&|f|5| |=| |C+0#00e0e07&|1|<|V+0#0000000&|o|i|d|>+0#00e0e07&| +0#0000000&|:+0#00e0e07&@1| +0#0000000&|<|B|y|t|e|>| |n+0#af5f00255&|e|w|;+0#0000000&| @16
+@8|I+0#00e0e07&|n|t|F|u|n|c|t|i|o|n|<|C+0#00e0003&|1|<|?+0#0000000&|>+0#00e0003&|[|]|>+0#00e0e07&| +0#0000000&|i|f|1| |=| |C+0#00e0e07&|1|<|?+0#0000000&|>+0#00e0e07&|[|]| +0#0000000&|:+0#00e0e07&@1| +0#0000000&|n+0#af5f00255&|e|w|;+0#0000000&| @24
+@8|I+0#00e0e07&|n|t|F|u|n|c|t|i|o|n|<|b+0#00e0003&|y|t|e|[+0#0000000&|]|>+0#00e0e07&| +0#0000000&|i|f|2| |=| |b+0#00e0003&|y|t|e|[+0#0000000&|]| |:+0#00e0e07&@1| +0#0000000&|n+0#af5f00255&|e|w|;+0#0000000&| @26
+@57|5@1|,|8|-|2|9| @6|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_04.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_04.dump
new file mode 100644
index 0000000..5215cb2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|I+0#00e0e07&|n|t|F|u|n|c|t|i|o|n|<|b+0#00e0003&|y|t|e|[+0#0000000&|]|>+0#00e0e07&| +0#0000000&|i|f|2| |=| |b+0#00e0003&|y|t|e|[+0#0000000&|]| |:+0#00e0e07&@1| +0#0000000&|n+0#af5f00255&|e|w|;+0#0000000&| @26
+@4|}| @69
+@75
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|i+0#00e0003&|n|t|[+0#0000000&|]| |x|y| |=| |{| |0+0#e000002&|,+0#0000000&| |1+0#e000002&| +0#0000000&|}|;| @44
+@75
+@4>/+0#0000e05&@1| |s|u|p|e|r| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@32
+@4|/+0#0000e05&@1| |T|y|p|e|N|a|m|e| |.| |s|u|p|e|r| |:@1| |[|T|y|p|e|A|r|g|u|m|e|n|t|s|]| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@21
+@4|<|T|>| |M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s|(|)| @42
+@4|{| @69
+@8|P+0#00e0e07&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|p|1| |=| |M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s|.|s+0#00e0003&|u|p|e|r|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| @11
+@8|P+0#00e0e07&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|p|2| |=| |M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s|.|t+0#00e0003&|h|i|s|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| @12
+@4|}| @69
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I+0#00e0e07&|4|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#00e0e07&|3|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@41
+@4|{| @69
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|P+0#00e0e07&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|s+0#00e0e07&|u|p|e|r|E|q|u|a|l|i|s|t|(|)| +0#0000000&@30
+@8|{| @65
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|3| @53
+@16|.|s+0#00e0003&|u|p|e|r|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| |/+0#0000e05&|*| |"|a|"| |*|/| +0#0000000&@33
+@57|7|3|,|2|-|5| @7|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_05.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_05.dump
new file mode 100644
index 0000000..e508788
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@15|.|s+0#00e0003&|u|p|e|r|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| |/+0#0000e05&|*| |"|a|"| |*|/| +0#0000000&@33
+@8|}| @65
+@4|}| @69
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I+0#00e0e07&|3|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#00e0e07&|2|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@41
+@4>{| @69
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|P+0#00e0e07&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|s+0#00e0e07&|u|p|e|r|E|q|u|a|l|i|s|t|(|)| +0#0000000&@30
+@8|{| @65
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|2|.| @52
+@16|s+0#00e0003&|u|p|e|r|:+0#00e0e07&@1|e+0#0000000&|q|u|a|l|s|;| @1|/+0#0000e05&|*| |"|b|"| |*|/| +0#0000000&@33
+@8|}| @65
+@4|}| @69
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I+0#00e0e07&|2|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#00e0e07&|1|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@41
+@4|{| @69
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|P+0#00e0e07&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|s+0#00e0e07&|u|p|e|r|E|q|u|a|l|i|s|t|(|)| +0#0000000&@30
+@8|{| @2|/+0#0000e05&|*| |N|o|n|-|c|a|p|t|u|r|i|n|g| |g|y|m|n|a|s|t|i|c|s| |f|o|r| |s|u|p|e|r|:@1|e|q|u|a|l|s|.| |*|/| +0#0000000&@13
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|F|u|n|c|t|i|o|n|.|<|F+0#00e0e07&|u|n|c|t|i|o|n|<|M+0#0000000&|e|t|h|o|d|H|a|n|d|l|e|,| @23
+@28|P+0#00e0003&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0003&|>+0#00e0e07&|>+0#0000000&| @32
+@57|9|1|,|2|-|5| @7|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_06.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_06.dump
new file mode 100644
index 0000000..a5234ec
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@27|P+0#00e0003&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0003&|>+0#00e0e07&|>+0#0000000&| @32
+@32|i|d|e|n|t|i|t|y|(|)| @32
+@16|.|a|p@1|l|y|(|m|h| |-+0#00e0e07&|>| +0#0000000&|o| |-+0#00e0e07&|>| +0#0000000&|M|e|t|h|o|d|R|e|f|e|r|e|n|c|e|s|$|T|e|s|t|s| @18
+@24|.|i|n|v|o|k|e|P|r|e|d|i|c|a|t|e|(|m|h|,| |o|)@1| @26
+@16|.|a|p@1|l|y|(|E|Q|U|A|L|S|.|b|i|n|d|T|o|(|t+0#00e0003&|h|i|s|)+0#0000000&@1|;| @30
+@8>}| @65
+@4|}| @69
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I+0#00e0e07&|1|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@55
+@4|{| @69
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|P+0#00e0e07&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&|e+0#00e0e07&|q|u|a|l|i|s|t|(|)| +0#0000000&@35
+@8|{| @2|/+0#0000e05&|*| |N|o|n|-|c|a|p|t|u|r|i|n|g| |g|y|m|n|a|s|t|i|c|s| |f|o|r| |t|h|i|s|:@1|e|q|u|a|l|s|.| |*|/| +0#0000000&@14
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|F|u|n|c|t|i|o|n|.|<|F+0#00e0e07&|u|n|c|t|i|o|n|<|I+0#00e0003&|1|<|T+0#0000000&|>+0#00e0003&|,+0#0000000&| |P+0#00e0003&|r|e|d|i|c|a|t|e|<|T+0#0000000&|>+0#00e0003&|>+0#00e0e07&|>+0#0000000&| @15
+@32|i|d|e|n|t|i|t|y|(|)| @32
+@16|.|a|p@1|l|y|(|t|h|a|t| |-+0#00e0e07&|>| +0#0000000&|o| |-+0#00e0e07&|>| +0#0000000&|F|u|n|c|t|i|o|n| @30
+@24|.|<|B+0#00e0e07&|i|P|r|e|d|i|c|a|t|e|<|I+0#00e0003&|1|<|T+0#0000000&|>+0#00e0003&|,+0#0000000&| |T|>+0#00e0e07&|>+0#0000000&| @26
+@32|i|d|e|n|t|i|t|y|(|)| @32
+@20|.|a|p@1|l|y|(|I+0#00e0e07&|1|<|T+0#0000000&|>+0#00e0e07&|:@1| +0#0000000&@1|/+0#0000e05&|*| |"|c|"| |*|/| +0#0000000&@29
+@24|e|q|u|a|l|s|)| @43
+@57|1|0|9|,|3|-|9| @6|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_07.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_07.dump
new file mode 100644
index 0000000..535f972
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@23|e|q|u|a|l|s|)| @43
+@20|.|t|e|s|t|(|t|h|a|t|,| |o|)@1| @39
+@16|.|a|p@1|l|y|(|I|1|.|t+0#00e0003&|h|i|s|)+0#0000000&|;| @42
+@8|}| @65
+@4|}| @69
+> @74
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|>| |b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|i+0#00e0e07&|n|v|o|k|e|P|r|e|d|i|c|a|t|e|(|M+0#0000000&|e|t|h|o|d|H|a|n|d|l|e| |m|h|,| |T| |o|)+0#00e0e07&| +0#0000000&@14
+@4|{| @69
+@8|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|b+0#00e0003&|o@1|l|e|a|n|)+0#0000000&| |m|h|.|i|n|v|o|k|e|E|x|a|c|t|(|o|)|;| @27
+@8|}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|T|h|r|o|w|a|b|l|e| |t|h|)| |{| @42
+@12|t+0#af5f00255&|h|r|o|w| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&|R|u|n|t|i|m|e|E|x|c|e|p|t|i|o|n|(|t|h|)|;| @31
+@8|}| @65
+@4|}| @69
+@75
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|M|e|t|h|o|d|H|a|n|d|l|e| |E|Q|U|A|L|S|;| @29
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@57|1|2|7|,|0|-|1| @6|7|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_08.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_08.dump
new file mode 100644
index 0000000..537c5d5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|t+0#af5f00255&|r|y| +0#0000000&|{| @61
+@12|E|Q|U|A|L|S| |=| |j|a|v|a|.|l|a|n|g|.|i|n|v|o|k|e|.|M|e|t|h|o|d|H|a|n|d|l|e|s|.|l|o@1|k|u|p|(|)| @14
+@28|.|f|i|n|d|S|p|e|c|i|a|l|(| @33
+@16|I|1|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @49
+@16|"+0#e000002&|e|q|u|a|l|s|"|,+0#0000000&| @49
+@16>j|a|v|a|.|l|a|n|g|.|i|n|v|o|k|e|.|M|e|t|h|o|d|T|y|p|e|.|m|e|t|h|o|d|T|y|p|e|(| @19
+@28|b+0#00e0003&|o@1|l|e|a|n|.+0#0000000&|c+0#00e0003&|l|a|s@1|,+0#0000000&| @32
+@28|O|b|j|e|c|t|.|c+0#00e0003&|l|a|s@1|)+0#0000000&|,| @32
+@16|I|2|.|c+0#00e0003&|l|a|s@1|)+0#0000000&|;| @48
+@8|}| |c+0#af5f00255&|a|t|c|h| +0#0000000&|(|R|e|f|l|e|c|t|i|v|e|O|p|e|r|a|t|i|o|n|E|x|c|e|p|t|i|o|n| |e|)| |{| @24
+@12|t+0#af5f00255&|h|r|o|w| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&|E|r@1|o|r|(|e|)|;| @43
+@8|}| @65
+@4|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|C+0#00e0e07&|1|<|T+0#0000000&|>+0#00e0e07&| +0#0000000&@52
+@4|{| @69
+@8|C|1|(|)| |{| |}| @58
+@8|<|A|>| |C|1|(|A| |d|u|m@1|y|)| |{| |}| @47
+@4|}| @69
+@57|1|4|5|,|5|-|1|7| @5|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_09.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_09.dump
new file mode 100644
index 0000000..d5110b6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_09.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|C|2| @55
+@4|{| @69
+@8|C|2|(|)| |{| |<|S|t|r|i|n|g|>| |t+0#00e0003&|h|i|s|(+0#0000000&|"+0#e000002&@1|)+0#0000000&|;| |}| @39
+> @74
+@8|<|A|>| |C|2|(|A| |d|u|m@1|y|)| @51
+@8|{| @65
+@12|C|2|.|s|t|r|i|n|g|e|r|(|)|.|a|p@1|l|y|(@2|F+0#00e0e07&|u|n|c|t|i|o|n|<|C+0#0000000&|2|,| |C|2|.|C|2|1|>+0#00e0e07&|)+0#0000000&| @19
+@24|C|2|.|C|2|1|:+0#00e0e07&@1|n+0#af5f00255&|e|w|)+0#0000000&| @3|/+0#0000e05&|*| |"|d|"| |*|/| +0#0000000&@25
+@20|.|a|p@1|l|y|(|C|2|.|t+0#00e0003&|h|i|s|)+0#0000000&@1|;| @37
+@8|}| @65
+@75
+@4| +0#00e0003&@3|c|l|a|s@1| +0#0000000&|C|2|1| @57
+@8|{| @65
+@12|C|2|1|(|)| |{| |<|S|t|r|i|n|g|>| |t+0#00e0003&|h|i|s|(+0#0000000&|"+0#e000002&@1|)+0#0000000&|;| |}| @34
+@75
+@12|<|B|>| |C|2|1|(|B| |d|u|m@1|y|)| @46
+@12|{| @61
+@57|1|6|3|,|0|-|1| @6|9|4|%|
diff --git a/runtime/syntax/testdir/dumps/java_method_references_signature_10.dump b/runtime/syntax/testdir/dumps/java_method_references_signature_10.dump
new file mode 100644
index 0000000..7bc18d8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_method_references_signature_10.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|{| @61
+@16|C|2|.|s|t|r|i|n|g|e|r|(|)|.|a|p@1|l|y|(|C|2|.|t+0#00e0003&|h|i|s|)+0#0000000&|;| @29
+@12|}| @61
+@8|}| @65
+@75
+@8>s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|O|b|j|e|c|t|>| |F+0#00e0e07&|u|n|c|t|i|o|n|<|T+0#0000000&|,| |S|t|r|i|n|g|>+0#00e0e07&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|e|r|(|)| +0#0000000&@10
+@8|{| @65
+@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|T|:+0#00e0e07&@1|t+0#0000000&|o|S|t|r|i|n|g|;| |/+0#0000e05&|*| |"|e|"| |*|/| +0#0000000&@33
+@8|}| @65
+@4|}| @69
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|8|1|,|3|-|9| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_01.dump
index 950d878..12d33b0 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_01.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_01.dump
@@ -17,4 +17,4 @@
@4|T|É|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @51
@2|}| @71
@75
-@57|1|9|,|0|-|1| @7|1|7|%|
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_02.dump
index 48d31d1..82d03c6 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_02.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_02.dump
@@ -13,8 +13,8 @@
@2|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@56
@2|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @17
@2|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @10
-@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e|x|t|e|n|d|s| |C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @10
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @10
@75
@2|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@61
| +0#00e0e07&@1|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#00e0e07&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#00e0e07&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@13
-@57|3|7|,|3| @9|4|2|%|
+@57|3|7|,|3| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_03.dump
index f388cd9..7858be6 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_03.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_03.dump
@@ -17,4 +17,4 @@
@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@43
| +0#00e0e07&@1|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|9@1|_|(|)| +0#0000000&@11
@2|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @56
-@57|5@1|,|3| @9|6|7|%|
+@57|5@1|,|3| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_04.dump
index 0d9fa98..347fafa 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_04.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_04.dump
@@ -17,4 +17,4 @@
|e+0#00e0003&|n|u|m| +0#0000000&|E|2| @67
|{| @73
@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
-@57|7|3|,|3| @9|9|1|%|
+@57|7|3|,|3| @9|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_05.dump
new file mode 100644
index 0000000..9981776
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
+@2|B|(|"+0#e000002&|b|"| +0#0000000&@67
+@4|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @9
+@2|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @54
+@75
+@4>(+0#00e0e07&|)| |-|>| +0#0000000&|{| @63
+@2|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @11
+@2|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @8
+@4|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @43
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @14
+@2|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@6
+@2|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @45
+@75
+@2|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @57
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|2|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @36
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|2|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @26
+@75
+| +0#00e0e07&@1|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @5
+|}| @73
+@57|9|1|,|5| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_99.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_05.vim
index 1509558..1509558 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_99.vim
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_05.vim
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_99.dump
deleted file mode 100644
index 204e85a..0000000
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@64
-@2|I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @32
-@2|}| @71
-@75
-| +0#00e0e07&@1|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|C|l|a|s@1|<|?|>| |c|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| |}|
-@75
-@2|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@37
-| +0#00e0e07&@1|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @5
-|}| @73
-@75
-|e+0#00e0003&|n|u|m| +0#0000000&|E|2| @67
-|{| @73
-@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
-@2|B|(|"+0#e000002&|b|"|)+0#0000000&|,| @65
-@2|C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @57
-@2|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @41
-@2|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @57
-@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|2|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @36
->}| @73
-@57|9|2|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.dump
new file mode 100644
index 0000000..53772c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|i|n|d|e|n|t|2|'| +0#0000000&@14
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |e|n|c|o|d|i|n|g|=|u|t|f|-|8| |t|e|r|m|e|n|c|o|d|i|n|g|=|u|t|f|-|8| +0#0000000&@19
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s| @39
+|{| |/+0#0000e05&@1| |D|O| |N|O|T| |r|e|t|a|b|!| |T|H|I|S| |F|I|L|E|;| |R|E|M|E|M|B|E|R| |A|B|O|U|T| |t|e|s|t|d|i|r|/|f|t|p|l|u|g|i|n|.| +0#0000000&@12
+@2|/+0#0000e05&@1| |T|Y|P|E|S|.| +0#0000000&@63
+@2|r+0#00e0003&|e|c|o|r|d| +0#0000000&|Τ|ʬ|<|α|>|(|α| |a|)| |{| |}| @51
+@75
+@2|e+0#00e0003&|n|u|m| +0#0000000&|E| @66
+@2|{| @71
+@4|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @39
+@4|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @35
+@2|}| @71
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_99.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.vim
index 1509558..1509558 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_99.vim
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.vim
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.dump
new file mode 100644
index 0000000..12d33b0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @39
+@4|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @35
+@2|}| @71
+> @74
+@2|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@18
+@2|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|É|g@1|a|b|l|ɘ|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@23
+@2|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|É|g@1|a|b|l|ɘ| @53
+@2|{| @71
+@4|S|t|r|i|n|g|[|]| |v|a|l|u|e|(|)| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @42
+@2|}| @71
+@75
+@2|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@18
+@2|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|É|g@1|a|b|l|ɘ|s| @52
+@2|{| @71
+@4|T|É|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @51
+@2|}| @71
+@75
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_99.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.vim
index 1509558..1509558 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_99.vim
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.vim
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.dump
new file mode 100644
index 0000000..9cbda27
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|t|y|l|a|b|l|e|<|Α|>| @51
+@2|{| @71
+@4|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a|s|c|i@1|$|0|_|(|)| |{| |}| @43
+@4|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|Α| |μ|ʭ@1|$|0|_|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @35
+@2>}| @71
+@75
+@2|/+0#0000e05&@1| |F|I|E|L|D|S|.| +0#0000000&@62
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|C|l|a|s@1|<|?|>| |C|L|A|S@1|_|L|O|C|K| |=| |c|l|a|s@1|L|o|c|k|(|)|;| @17
+@75
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|O|b|j|e|c|t| |i|n|s|t|a|n|c|e|L|o|c|k| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @23
+@75
+@2|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@56
+@2|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @16
+@2|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @9
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @9
+@75
+@2|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@61
+@2|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@13
+@57|3|7|,|3| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_99.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.vim
index 1509558..1509558 100644
--- a/runtime/syntax/testdir/dumps/java_methods_style_99.vim
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.vim
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.dump
new file mode 100644
index 0000000..33d0921
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@13
+@64|)+0#00e0e07&|;+0#0000000&| @8
+@2|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>| |μ+0#00e0e07&|Ê­@1|$|0|_|(| +0#0000000&@23
+@32|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|β| |b|)+0#00e0e07&|;+0#0000000&| @8
+@75
+@2>@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|1|_|(|/+0#0000e05&|*|/@10|/+0#ffffff16#ff404010|*+0#0000e05#ffffff0|/|)+0#00e0e07&|;+0#0000000&| @15
+@2|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|Ê­@1|$|1|_|(| +0#0000000&@25
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @7
+@75
+@2|v+0#00e0003&|o|i|d| +0#0000000&|A+0#00e0e07&|s|c|i@1|$|2|_|(|)| +0#0000000&|{| |}| @53
+@2|<|T|,| |U| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|S|t|y|l|a|b|l|e|<|T|>@1| |v+0#00e0003&|o|i|d| +0#0000000&|Μ+0#00e0e07&|ʭ@1|$|2|_|(|U+0#0000000&| |u|)+0#00e0e07&| +0#0000000&|{| |}| @25
+@75
+@2|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9|8|_|(|)|;+0#0000000&| @22
+@2|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]|[|]| |μ+0#00e0e07&|ʭ@1|$|9|8|_|(| +0#0000000&@14
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @5
+@75
+@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@43
+@2|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@11
+@2|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @56
+@57|5@1|,|3| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_keymap_99.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.vim
index 546837c..1509558 100644
--- a/runtime/syntax/testdir/dumps/vim_keymap_99.vim
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.vim
@@ -1,2 +1,2 @@
" Replace known non-Latin-1 characters.
-%s+[“�]+?+ge
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.dump
new file mode 100644
index 0000000..2f2b6c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @56
+@75
+@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@43
+@2|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_|(| +0#0000000&@4
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@6
+@2>{| @71
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@64
+@2|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @31
+@2|}| @71
+@75
+@2|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| |}
+| @74
+@2|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@37
+@2|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @4
+|}| @73
+@75
+|e+0#00e0003&|n|u|m| +0#0000000&|E|2|$| @66
+|{| @73
+@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
+@57|7|3|,|3| @9|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.dump
new file mode 100644
index 0000000..08ab720
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
+@2|B|(|"+0#e000002&|b|"| +0#0000000&@67
+@4|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @9
+@2|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @54
+@75
+@4>(+0#00e0e07&|)| |-|>| +0#0000000&|{| @63
+@2|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @11
+@2|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @8
+@4|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @43
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @14
+@2|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@6
+@2|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @45
+@75
+@2|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @57
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|2|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @35
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|2|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @25
+@75
+@2|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @5
+|}| @73
+@57|9|1|,|5| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_01.dump
index 0f154c5..aea76e5 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_01.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_01.dump
@@ -17,4 +17,4 @@
@8|T|É|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @47
@4|}| @69
@75
-@57|1|9|,|0|-|1| @7|1|7|%|
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_02.dump
index ed7c8fb..55410d0 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_02.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_02.dump
@@ -13,8 +13,8 @@
@4|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@54
@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @15
@4|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @8
-@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e|x|t|e|n|d|s| |C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @8
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @8
@75
@4|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@59
| +0#00e0e07&@3|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#00e0e07&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#00e0e07&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
-@57|3|7|,|5| @9|4|2|%|
+@57|3|7|,|5| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_03.dump
index bed45d9..dae4f3c 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_03.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_03.dump
@@ -17,4 +17,4 @@
@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
| +0#00e0e07&@3|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|9@1|_|(|)| +0#0000000&@9
@4|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
-@57|5@1|,|5| @9|6|7|%|
+@57|5@1|,|5| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_04.dump
index 9eabb63..a3dd3e6 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_04.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_04.dump
@@ -17,4 +17,4 @@
@75
|e+0#00e0003&|n|u|m| +0#0000000&|E|4| @67
|{| @73
-@57|7|3|,|5| @9|9|0|%|
+@57|7|3|,|5| @9|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_05.dump
new file mode 100644
index 0000000..6bf8562
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_05.dump
@@ -0,0 +1,20 @@
+|{+0&#ffffff0| @73
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @34
+@4|B|(|"+0#e000002&|b|"| +0#0000000&@65
+@8|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @5
+@4|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @52
+> @74
+@8|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @59
+@4|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @9
+@4|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @6
+@8|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @39
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @10
+@4|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@4
+@4|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @43
+@75
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|4|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @34
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|4|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @24
+@75
+| +0#00e0e07&@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @3
+@57|9|0|,|0|-|1| @7|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_06.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_06.dump
new file mode 100644
index 0000000..6dfa528
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_06.dump
@@ -0,0 +1,20 @@
+| +0#00e0e07#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @3
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_99.dump
deleted file mode 100644
index 28fa0bc..0000000
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@3|I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @30
-@4|}| @69
-@75
-| +0#00e0e07&@3|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|C|l|a|s@1|<|?|>| |c|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&|
-|}| @73
-@75
-@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@35
-| +0#00e0e07&@3|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @3
-|}| @73
-@75
-|e+0#00e0003&|n|u|m| +0#0000000&|E|4| @67
-|{| @73
-@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @34
-@4|B|(|"+0#e000002&|b|"|)+0#0000000&|,| @63
-@4|C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @55
-@4|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
-@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
-@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|4|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @34
->}| @73
-@57|9|2|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.dump
new file mode 100644
index 0000000..04337ff
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|i|n|d|e|n|t|4|'| +0#0000000&@14
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |e|n|c|o|d|i|n|g|=|u|t|f|-|8| |t|e|r|m|e|n|c|o|d|i|n|g|=|u|t|f|-|8| +0#0000000&@19
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s| @39
+|{| |/+0#0000e05&@1| |D|O| |N|O|T| |r|e|t|a|b|!| |T|H|I|S| |F|I|L|E|;| |R|E|M|E|M|B|E|R| |A|B|O|U|T| |t|e|s|t|d|i|r|/|f|t|p|l|u|g|i|n|.| +0#0000000&@12
+@4|/+0#0000e05&@1| |T|Y|P|E|S|.| +0#0000000&@61
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|Τ|ʬ|<|α|>|(|α| |a|)| |{| |}| @49
+@75
+@4|e+0#00e0003&|n|u|m| +0#0000000&|E| @64
+@4|{| @69
+@8|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @35
+@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @31
+@4|}| @69
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.dump
new file mode 100644
index 0000000..aea76e5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @35
+@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @31
+@4|}| @69
+> @74
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@16
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|É|g@1|a|b|l|ɘ|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@21
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|É|g@1|a|b|l|ɘ| @51
+@4|{| @69
+@8|S|t|r|i|n|g|[|]| |v|a|l|u|e|(|)| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @38
+@4|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@16
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|É|g@1|a|b|l|ɘ|s| @50
+@4|{| @69
+@8|T|É|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @47
+@4|}| @69
+@75
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.dump
new file mode 100644
index 0000000..3473b60
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|t|y|l|a|b|l|e|<|Α|>| @49
+@4|{| @69
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a|s|c|i@1|$|0|_|(|)| |{| |}| @39
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|Α| |μ|ʭ@1|$|0|_|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @31
+@4>}| @69
+@75
+@4|/+0#0000e05&@1| |F|I|E|L|D|S|.| +0#0000000&@60
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|C|l|a|s@1|<|?|>| |C|L|A|S@1|_|L|O|C|K| |=| |c|l|a|s@1|L|o|c|k|(|)|;| @15
+@75
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|O|b|j|e|c|t| |i|n|s|t|a|n|c|e|L|o|c|k| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @21
+@75
+@4|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@54
+@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @14
+@4|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @7
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @7
+@75
+@4|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@59
+@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
+@57|3|7|,|5| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.dump
new file mode 100644
index 0000000..e4ba873
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
+@64|)+0#00e0e07&|;+0#0000000&| @8
+@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>| |μ+0#00e0e07&|Ê­@1|$|0|_|(| +0#0000000&@21
+@32|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|β| |b|)+0#00e0e07&|;+0#0000000&| @8
+@75
+@4>@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|1|_|(|/+0#0000e05&|*|/@10|/+0#ffffff16#ff404010|*+0#0000e05#ffffff0|/|)+0#00e0e07&|;+0#0000000&| @13
+@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|Ê­@1|$|1|_|(| +0#0000000&@23
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @7
+@75
+@4|v+0#00e0003&|o|i|d| +0#0000000&|A+0#00e0e07&|s|c|i@1|$|2|_|(|)| +0#0000000&|{| |}| @51
+@4|<|T|,| |U| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|S|t|y|l|a|b|l|e|<|T|>@1| |v+0#00e0003&|o|i|d| +0#0000000&|Μ+0#00e0e07&|ʭ@1|$|2|_|(|U+0#0000000&| |u|)+0#00e0e07&| +0#0000000&|{| |}| @23
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9|8|_|(|)|;+0#0000000&| @20
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]|[|]| |μ+0#00e0e07&|ʭ@1|$|9|8|_|(| +0#0000000&@12
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @5
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@9
+@4|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@57|5@1|,|5| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.dump
new file mode 100644
index 0000000..2d3c811
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_|(| +0#0000000&@2
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@6
+@4>{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@60
+@4|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @29
+@4|}| @69
+@75
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&
+| |}| @72
+@75
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@35
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @2
+|}| @73
+@75
+|e+0#00e0003&|n|u|m| +0#0000000&|E|4|$| @66
+|{| @73
+@57|7|3|,|5| @9|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.dump
new file mode 100644
index 0000000..5ce63c7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.dump
@@ -0,0 +1,20 @@
+|{+0&#ffffff0| @73
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @34
+@4|B|(|"+0#e000002&|b|"| +0#0000000&@65
+@8|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @5
+@4|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @52
+> @74
+@8|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @59
+@4|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @9
+@4|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @6
+@8|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @39
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @10
+@4|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@4
+@4|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @43
+@75
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|4|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @33
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|4|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @23
+@75
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @3
+@57|9|0|,|0|-|1| @7|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_06.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_06.dump
new file mode 100644
index 0000000..e4569ea
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @3
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_01.dump
index 269034b..9c6b06f 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_01.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_01.dump
@@ -17,4 +17,4 @@
@16|T|É|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @39
@8|}| @65
@75
-@57|1|9|,|0|-|1| @7|1|7|%|
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_02.dump
index e5c7acc..9555abb 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_02.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_02.dump
@@ -13,8 +13,8 @@
@8|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@50
@8|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @11
@8|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @4
-@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e|x|t|e|n|d|s| |C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @4
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @4
@75
@8|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@55
| +0#00e0e07&@7|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#00e0e07&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#00e0e07&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@7
-@57|3|7|,|9| @9|4|2|%|
+@57|3|7|,|9| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_03.dump
index e80c44d..a163e39 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_03.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_03.dump
@@ -17,4 +17,4 @@
@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@37
| +0#00e0e07&@7|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|9@1|_|(|)| +0#0000000&@5
@8|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @50
-@57|5@1|,|9| @9|6|7|%|
+@57|5@1|,|9| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_04.dump
index 8ec6396..29667a0 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_04.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_04.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@74
+| +0&#ffffff0@7|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @50
+@75
@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@37
| +0#00e0e07&@7|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ|ʭ@1|$|9@1|_
|(| +0#0000000&@73
-| +0#00e0e07&@23|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)| +0#0000000&@6
-@8>{| @65
+| +0#00e0e07&@23>j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)| +0#0000000&@6
+@8|{| @65
@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@52
@8|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @26
@8|}| @65
@@ -16,5 +17,4 @@
@1| @73
@75
|e+0#00e0003&|n|u|m| +0#0000000&|E|8| @67
-|{| @73
-@57|7|3|,|9| @9|9|0|%|
+@57|7|2|,|2|5| @8|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_05.dump
new file mode 100644
index 0000000..468f1d0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_05.dump
@@ -0,0 +1,20 @@
+|e+0#00e0003#ffffff0|n|u|m| +0#0000000&|E|8| @67
+|{| @73
+@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @30
+@8|B|(|"+0#e000002&|b|"| +0#0000000&@61
+@16|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,
+| @7>C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @48
+@75
+@16|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @51
+@8|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @5
+@8|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @2
+@16|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @31
+@16|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @2
+@8|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&
+@8|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@75
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|8|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @30
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|8|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @20
+@75
+@57|8|9|,|9| @9|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_06.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_06.dump
new file mode 100644
index 0000000..0361794
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+| +0#00e0e07&@7|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_99.dump
deleted file mode 100644
index d20fbe1..0000000
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@7|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @26
-@8|}| @65
-@75
-| +0#00e0e07&@7|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|C|l|a|s@1|<|?|>| |c|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a
-|s@1|;+0#0000000&| |}| @69
-@75
-@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@31
-| +0#00e0e07&@7|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}
-@1| @73
-@75
-|e+0#00e0003&|n|u|m| +0#0000000&|E|8| @67
-|{| @73
-@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @30
-@8|B|(|"+0#e000002&|b|"|)+0#0000000&|,| @59
-@8|C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @51
-@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
-@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
-@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|8|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @30
->}| @73
-@57|9|2|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.dump
new file mode 100644
index 0000000..95cd3e2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|i|n|d|e|n|t|8|'| +0#0000000&@14
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |e|n|c|o|d|i|n|g|=|u|t|f|-|8| |t|e|r|m|e|n|c|o|d|i|n|g|=|u|t|f|-|8| +0#0000000&@19
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s| @39
+|{| |/+0#0000e05&@1| |D|O| |N|O|T| |r|e|t|a|b|!| |T|H|I|S| |F|I|L|E|;| |R|E|M|E|M|B|E|R| |A|B|O|U|T| |t|e|s|t|d|i|r|/|f|t|p|l|u|g|i|n|.| +0#0000000&@12
+@8|/+0#0000e05&@1| |T|Y|P|E|S|.| +0#0000000&@57
+@8|r+0#00e0003&|e|c|o|r|d| +0#0000000&|Τ|ʬ|<|α|>|(|α| |a|)| |{| |}| @45
+@75
+@8|e+0#00e0003&|n|u|m| +0#0000000&|E| @60
+@8|{| @65
+@16|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @27
+@16|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @27
+@16|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @43
+@16|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @23
+@8|}| @65
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.dump
new file mode 100644
index 0000000..9c6b06f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@15|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @27
+@16|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @27
+@16|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @43
+@16|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @23
+@8|}| @65
+> @74
+@8|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@12
+@8|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|É|g@1|a|b|l|ɘ|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@17
+@8|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|É|g@1|a|b|l|ɘ| @47
+@8|{| @65
+@16|S|t|r|i|n|g|[|]| |v|a|l|u|e|(|)| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @30
+@8|}| @65
+@75
+@8|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@12
+@8|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|É|g@1|a|b|l|ɘ|s| @46
+@8|{| @65
+@16|T|É|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @39
+@8|}| @65
+@75
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.dump
new file mode 100644
index 0000000..cd42b6d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@8|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|t|y|l|a|b|l|e|<|Α|>| @45
+@8|{| @65
+@16|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a|s|c|i@1|$|0|_|(|)| |{| |}| @31
+@16|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|Α| |μ|ʭ@1|$|0|_|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @23
+@8>}| @65
+@75
+@8|/+0#0000e05&@1| |F|I|E|L|D|S|.| +0#0000000&@56
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|C|l|a|s@1|<|?|>| |C|L|A|S@1|_|L|O|C|K| |=| |c|l|a|s@1|L|o|c|k|(|)|;| @11
+@75
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|O|b|j|e|c|t| |i|n|s|t|a|n|c|e|L|o|c|k| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @17
+@75
+@8|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@50
+@8|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @10
+@8|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @3
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @3
+@75
+@8|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@55
+@8|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@7
+@57|3|7|,|9| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.dump
new file mode 100644
index 0000000..c06f3c3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@7
+@64|)+0#00e0e07&|;+0#0000000&| @8
+@8|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>| |μ+0#00e0e07&|Ê­@1|$|0|_|(| +0#0000000&@17
+@32|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|β| |b|)+0#00e0e07&|;+0#0000000&| @8
+@75
+@8>@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|1|_|(|/+0#0000e05&|*|/@10|/+0#ffffff16#ff404010|*+0#0000e05#ffffff0|/|)+0#00e0e07&|;+0#0000000&| @9
+@8|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|Ê­@1|$|1|_|(| +0#0000000&@19
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @7
+@75
+@8|v+0#00e0003&|o|i|d| +0#0000000&|A+0#00e0e07&|s|c|i@1|$|2|_|(|)| +0#0000000&|{| |}| @47
+@8|<|T|,| |U| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|S|t|y|l|a|b|l|e|<|T|>@1| |v+0#00e0003&|o|i|d| +0#0000000&|Μ+0#00e0e07&|ʭ@1|$|2|_|(|U+0#0000000&| |u|)+0#00e0e07&| +0#0000000&|{| |}| @19
+@75
+@8|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9|8|_|(|)|;+0#0000000&| @16
+@8|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]|[|]| |μ+0#00e0e07&|ʭ@1|$|9|8|_|(| +0#0000000&@8
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @5
+@75
+@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@37
+@8|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@5
+@8|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @50
+@57|5@1|,|9| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.dump
new file mode 100644
index 0000000..685a6c5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @50
+@75
+@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@37
+@8|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_
+|(| +0#0000000&@73
+@24>j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@6
+@8|{| @65
+@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@52
+@8|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @25
+@8|}| @65
+@75
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l
+|a|s@1|;+0#0000000&| |}| @68
+@75
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@31
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&|
+|}| @73
+|}| @73
+@75
+@57|7|2|,|2|5| @8|7|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.dump
new file mode 100644
index 0000000..a552de8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|e+0#00e0003&|n|u|m| +0#0000000&|E|8|$| @66
+|{| @73
+@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @30
+@8|B|(|"+0#e000002&|b|"| +0#0000000&@61
+@16>/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,
+| @7|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @48
+@75
+@16|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @51
+@8|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @5
+@8|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @2
+@16|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @31
+@16|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @2
+@8|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&
+@8|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@75
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|8|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @29
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|8|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @19
+@57|8@1|,|1|7| @8|9|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_06.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_06.dump
new file mode 100644
index 0000000..73021e9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|8|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @19
+@75
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_06.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_06.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_06.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_99.dump b/runtime/syntax/testdir/dumps/java_methods_style_99.dump
deleted file mode 100644
index e8962ce..0000000
--- a/runtime/syntax/testdir/dumps/java_methods_style_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0#00e0e07#ffffff0@11|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)|;+0#0000000&| @17
-@75
-@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
-| +0#00e0e07&@3|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|9@1|_|(|)| +0#0000000&@9
-@4|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
-@75
-@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
-| +0#00e0e07&@3|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ|ʭ@1|$|9@1|_|(| +0#0000000&@2
-| +0#00e0e07&@11|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)| +0#0000000&@18
-@4|{| @69
-@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@60
-@4|S|t|y|l|e|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @32
-@4|}| @69
-@75
-| +0#00e0e07&@3|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|C|l|a|s@1|<|?|>| |c|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|S|t|y|l|e|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| |}|
-@75
-@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@35
-| +0#00e0e07&@3|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|S|t|y|l|e|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @5
->}| @73
-@57|8|2|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_00.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_00.dump
new file mode 100644
index 0000000..06d396f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |e|n|c|o|d|i|n|g|=|u|t|f|-|8| |t|e|r|m|e|n|c|o|d|i|n|g|=|u|t|f|-|8| +0#0000000&@19
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s| @41
+|{| @73
+@4|/+0#0000e05&@1| |T|Y|P|E|S|.| +0#0000000&@61
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|Τ|ʬ|<|α|>|(|α| |a|)| |{| |}| @49
+@75
+@4|e+0#00e0003&|n|u|m| +0#0000000&|E| @64
+@4|{| @69
+@8|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @35
+@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @31
+@4|}| @69
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_00.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_00.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_00.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_01.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_01.dump
new file mode 100644
index 0000000..95bb936
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @35
+@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @31
+@4|}| @69
+> @74
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@16
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|É|g@1|a|b|l|ɘ|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@21
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|É|g@1|a|b|l|ɘ| @51
+@4|{| @69
+@8|S|t|r|i|n|g|[|]| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @38
+@4|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@16
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|É|g@1|a|b|l|ɘ|s| @50
+@4|{| @69
+@8|T|É|g@1|a|b|l|ɘ|[|]| |v+0#00e0e07&|a|l|u|e|(|)|;+0#0000000&| @47
+@4|}| @69
+@75
+@57|1|9|,|0|-|1| @7|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_01.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_01.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_01.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_02.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_02.dump
new file mode 100644
index 0000000..e379c69
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|t|y|l|a|b|l|e|<|Α|>| @49
+@4|{| @69
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|)| +0#0000000&|{| |}| @39
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|Α| |μ+0#00e0e07&|ʭ@1|$|0|_|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @31
+@4>}| @69
+@75
+@4|/+0#0000e05&@1| |F|I|E|L|D|S|.| +0#0000000&@60
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|C|l|a|s@1|<|?|>| |C|L|A|S@1|_|L|O|C|K| |=| |c|l|a|s@1|L|o|c|k|(|)|;| @15
+@75
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|O|b|j|e|c|t| |i|n|s|t|a|n|c|e|L|o|c|k| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @21
+@75
+@4|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@54
+@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @16
+@4|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @9
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @9
+@75
+@4|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@59
+@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
+@57|3|7|,|2|-|5| @7|4|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_02.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_02.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_02.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_03.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_03.dump
new file mode 100644
index 0000000..aa92f2d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
+@32|)+0#00e0e07&|;+0#0000000&| @40
+@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>| |μ+0#00e0e07&|Ê­@1|$|0|_|(| +0#0000000&@21
+@16|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|β| |b|)+0#00e0e07&|;+0#0000000&| @24
+@75
+@4>@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|1|_|(|/+0#0000e05&|*|/@10|/+0#ffffff16#ff404010|*+0#0000e05#ffffff0|/|)+0#00e0e07&|;+0#0000000&| @13
+@4|@+0#e000e06&|T|É|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|Ê­@1|$|1|_|(| +0#0000000&@23
+@12|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @19
+@75
+@4|v+0#00e0003&|o|i|d| +0#0000000&|A|s|c|i@1|$|2|_|(|)| |{| |}| @51
+@4|<|T|,| |U| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|S|t|y|l|a|b|l|e|<|T|>@1| |v+0#00e0003&|o|i|d| +0#0000000&|Μ|ʭ@1|$|2|_|(|U| |u|)| |{| |}| @23
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9|8|_|(|)|;+0#0000000&| @20
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]|[|]| |μ+0#00e0e07&|ʭ@1|$|9|8|_|(| +0#0000000&@12
+@12|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @17
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@9
+@4|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@57|5@1|,|2|-|5| @7|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_03.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_03.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_03.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_04.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_04.dump
new file mode 100644
index 0000000..e657f31
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_|(| +0#0000000&@2
+@12|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@18
+@4>{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@60
+@4|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @31
+@4|}| @69
+@75
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| |}
+| @74
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@35
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @4
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|7|3|,|2|-|5| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_04.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_04.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_04.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[Æ’ÉɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_numbers_05.dump b/runtime/syntax/testdir/dumps/java_numbers_05.dump
new file mode 100644
index 0000000..59e6f1f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_numbers_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|h|e|x|_|l| |=| |0+0#e000002&|x|f@3|_|f@3|_|f@3|_|f@3|L|;+0#0000000&| @20
+@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|o|c|t|_|l| |=| |0+0#e000002&|1|7|_|7@3|_|7@3|_|7@3|_|7@3|_|7@3|L|;+0#0000000&| @13
+@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|b|i|n|_|l| |=| |0+0#e000002&|b|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@1
+@2|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|L|;+0#0000000&| @35
+@4|}| @69
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|8@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_numbers_99.dump b/runtime/syntax/testdir/dumps/java_numbers_99.dump
deleted file mode 100644
index 7637b85..0000000
--- a/runtime/syntax/testdir/dumps/java_numbers_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@7|i+0#00e0003&|n|t| +0#0000000&|m|i|n|u|s|_|o|n|e|_|o|c|t| |=| |0+0#e000002&|3|7@1|_|7@3|_|7@3|;+0#0000000&| @31
-@8|i+0#00e0003&|n|t| +0#0000000&|m|i|n|u|s|_|o|n|e|_|b|i|n| |=| |0+0#e000002&|b|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|;+0#0000000&| @4
-@75
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|a|x|_|h|e|x|_|l| |=| |0+0#e000002&|x|7|f@2|_|f@3|_|f@3|_|f@3|L|;+0#0000000&| @26
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|a|x|_|o|c|t|_|l| |=| |0+0#e000002&|7|_|7@3|_|7@3|_|7@3|_|7@3|_|7@3|L|;+0#0000000&| @20
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|a|x|_|b|i|n|_|l| |=| |0+0#e000002&|b|0|1@2|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@2
-@1|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|L|;+0#0000000&| @41
-@75
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|h|e|x|_|l| |=| |0+0#e000002&|x|8|0@2|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @26
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|o|c|t|_|l| |=| |0+0#e000002&|1|0|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @19
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|_|b|i|n|_|l| |=| |0+0#e000002&|b|1|0@2|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@2
-@1|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|_|0@3|L|;+0#0000000&| @41
-@75
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|h|e|x|_|l| |=| |0+0#e000002&|x|f@3|_|f@3|_|f@3|_|f@3|L|;+0#0000000&| @20
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|o|c|t|_|l| |=| |0+0#e000002&|1|7|_|7@3|_|7@3|_|7@3|_|7@3|_|7@3|L|;+0#0000000&| @13
-@8|l+0#00e0003&|o|n|g| +0#0000000&|m|i|n|u|s|_|o|n|e|_|b|i|n|_|l| |=| |0+0#e000002&|b|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@1
-@2|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|_|1@3|L|;+0#0000000&| @35
-@4|}| @69
->}| @73
-@57|8@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_string_99.dump b/runtime/syntax/testdir/dumps/java_string_99.dump
deleted file mode 100644
index a401ad6..0000000
--- a/runtime/syntax/testdir/dumps/java_string_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@11|.|"@2| @58
-| +0#e000e06&@11|%|-|1|4|s|\|{|S+0#0000000&|T|R|.|"@2| @48
-| +0#e000e06&@15|A|\|s|\| +0#0000000&@54
-| +0#e000e06&@15|\|{| +0#0000000&|"+0#e000002&|q|u|i|c|k|"| +0#0000000&|}+0#e000e06&| |\| +0#0000000&@44
-| +0#e000e06&@15|b|r|o|w|n|"+0#0000000&@2|}+0#e000e06&|\| +0#0000000&@48
-| +0#e000e06&@11|%|s|\|{| +0#0000000&|f|o|x| |}+0#e000e06&| |\| +0#0000000&@50
-| +0#e000e06&@11|%|-|2|0|s|\|{|S+0#0000000&|T|R|.|"@2| @48
-| +0#e000e06&@15|j|u|m|p|s|\|s|\| +0#0000000&@50
-| +0#e000e06&@15|o|v|e|r| |\| +0#0000000&@52
-| +0#e000e06&@15|t|h|e|\|s|\| +0#0000000&@52
-| +0#e000e06&@15|\|{| +0#0000000&|"+0#e000002&|l|a|z|y|"| +0#0000000&|}+0#e000e06&| |"+0#0000000&@2|}+0#e000e06&|\| +0#0000000&@41
-| +0#e000e06&@11|%|s|\|{| +0#0000000&|d|o|g| |}+0#e000e06&|"+0#0000000&@2|;| @48
-@8|S|t|r|i|n|g| |s|1|3| |=| |S|T|R| @50
-@12|.|"+0#e000e06&|\|"|\|{| +0#0000000&@9|/+0#0000e05&|*| |A| |n|e|s|t|e|d| |c|o|m@1|e|n|t|.| |*|/| +0#0000000&@23
-@8|(@1|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|S|t|r|i|n|g|,| |S|t|r|i|n|g|>|)| |b|a|y| |-|>| |b|a|y|)| @8
-@28|.|a|p@1|l|y|(|w|o@1|f|)| @34
-@12|}+0#e000e06&|\|s|!|\|"@1|;+0#0000000&| @54
-@4|}| @69
->}| @73
-@57|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_switch_01.dump b/runtime/syntax/testdir/dumps/java_switch_01.dump
index 0a76a87..e68c701 100644
--- a/runtime/syntax/testdir/dumps/java_switch_01.dump
+++ b/runtime/syntax/testdir/dumps/java_switch_01.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@74
+| +0&#ffffff0@7|Y|i|e|l|d|a|b|l|e|<|?|>| |y| |=| |(@1|Y|i|e|l|d|a|b|l|e|<|?|>|)| |(|)| |-|>| |0+0#e000002&|)+0#0000000&|:@1| @23
+@75
@4|y|i|e|l|d|;| @64
@8|(@1|Y|i|e|l|d|a|b|l|e|<|?|>|)| |(|)| |-|>| |0+0#e000002&|)+0#0000000&|.|w|h|e|n|(|)|.|d|e|f|a|u|l|t|_|(|)|.|y|i|e|l|d|(|)|;| @15
@75
-@8|e+0#00e0003&|n|u|m| +0#0000000&|L|e|t@1|e|r|s| |{| |O|T|H|E|R|,| |A|L|P|H|A|,| |B|E|T|A| |}| @31
-> @74
+@8>e+0#00e0003&|n|u|m| +0#0000000&|L|e|t@1|e|r|s| |{| |O|T|H|E|R|,| |A|L|P|H|A|,| |B|E|T|A| |}| @31
+@75
@8|L|e|t@1|e|r|s| |w|h|e|n| |=| |L|e|t@1|e|r|s|.|O|T|H|E|R|;| @37
@75
@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|w|h|e|n|)| |{| @51
@@ -16,5 +17,4 @@
@12|c+0#af5f00255&|a|s|e| +0#0000000&|A|L|P|H|A| @1|-|>| |L|e|t@1|e|r|s|.|A|L|P|H|A|;| @33
@12|c+0#af5f00255&|a|s|e| +0#0000000&|B|E|T|A| @2|-|>| |L|e|t@1|e|r|s|.|B|E|T|A|;| @34
@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |{| |y+0#af5f00255&|i|e|l|d|(+0#0000000&|L|e|t@1|e|r|s|.|O|T|H|E|R|)|;| |}| @22
-@8|}|)|;| @63
-@57|1|9|,|0|-|1| @7|1|3|%|
+@57|1|8|,|3|-|9| @7|1|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_switch_02.dump b/runtime/syntax/testdir/dumps/java_switch_02.dump
index cf213ed..de7e480 100644
--- a/runtime/syntax/testdir/dumps/java_switch_02.dump
+++ b/runtime/syntax/testdir/dumps/java_switch_02.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@7|}|)|;| @63
+| +0&#ffffff0@11|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |{| |y+0#af5f00255&|i|e|l|d|(+0#0000000&|L|e|t@1|e|r|s|.|O|T|H|E|R|)|;| |}| @22
+@8|}|)|;| @63
@75
@8|S|t|r|i|n|g| |y+0#af5f00255&|i|e|l|d| +0#0000000&|=| |n+0#e000002&|u|l@1|;+0#0000000&| @46
@75
-@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|y+0#af5f00255&|i|e|l|d|)+0#0000000&| |{| @50
-@8>c+0#af5f00255&|a|s|e| +0#0000000&|"+0#e000002&|A|"|:+0#0000000&| |c+0#af5f00255&|a|s|e| +0#0000000&|"+0#e000002&|B|"|:+0#0000000&| |{| |e|c|h|o|(|"+0#e000002&|A| |o|r| |B|"|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @20
+@8>s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|y+0#af5f00255&|i|e|l|d|)+0#0000000&| |{| @50
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|"+0#e000002&|A|"|:+0#0000000&| |c+0#af5f00255&|a|s|e| +0#0000000&|"+0#e000002&|B|"|:+0#0000000&| |{| |e|c|h|o|(|"+0#e000002&|A| |o|r| |B|"|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @20
@8|c+0#af5f00255&|a|s|e| +0#0000000&|"+0#e000002&|:|"|:+0#0000000&| @6|{| |e|c|h|o|(|"+0#e000002&|C|o|l|o|n|"|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @25
@8|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r| |w+0#af5f00255&|h|e|n| +0#0000000&|!|s|t|r|.|e|q|u|a|l|s|(|"+0#e000002&@1|)+0#0000000&|:| @29
@20|{| |e|c|h|o|(|"+0#e000002&|<|n|o|n|-|e|m|p|t|y|>|"|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @23
@@ -16,5 +17,4 @@
@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r| |w+0#af5f00255&|h|e|n| +0#0000000&|!|s|t|r|.|e|q|u|a|l|s|(|"+0#e000002&@1|)+0#0000000&| @26
@24|-|>| |"+0#e000002&|<|n|o|n|-|e|m|p|t|y|>|"|;+0#0000000&| @33
@12|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|,+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@1|-|>| |"+0#e000002&|O|t|h|e|r|"|;+0#0000000&| @31
-@8|}|)|;| @63
-@57|3|7|,|3|-|9| @7|3|0|%|
+@57|3|6|,|3|-|9| @7|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_switch_03.dump b/runtime/syntax/testdir/dumps/java_switch_03.dump
index 7766af3..123a254 100644
--- a/runtime/syntax/testdir/dumps/java_switch_03.dump
+++ b/runtime/syntax/testdir/dumps/java_switch_03.dump
@@ -1,12 +1,13 @@
-| +0&#ffffff0@7|}|)|;| @63
+| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|,+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@1|-|>| |"+0#e000002&|O|t|h|e|r|"|;+0#0000000&| @31
+@8|}|)|;| @63
@75
@8|O|b|j|e|c|t| |o| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @42
@75
-@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|o|)| |{| @54
-@8>c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|:+0#0000000&| @5|{| |e|c|h|o|(|"+0#e000002&|n|u|l@1|"|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @26
+@8>s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|o|)| |{| @54
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|:+0#0000000&| @5|{| |e|c|h|o|(|"+0#e000002&|n|u|l@1|"|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @26
@8|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s|[|]| |l@1|:| @1|{| |e|c|h|o|(|"+0#e000002&|S|w|i|t|c|h|T|e|s|t|s|$|1|L|e|t@1|e|r|s|[|]|"|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @4
@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|"+0#e000002&|j|a|v|a|.|l|a|n|g|.|O|b|j|e|c|t|"|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @14
-@8|}|;| @64
+@8|}| @65
@75
@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|o|)| |{| @49
@12|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1| +0#0000000&@6|-|>| |"+0#e000002&|n|u|l@1|"|;+0#0000000&| @36
@@ -16,5 +17,4 @@
@75
@8|c+0#00e0003&|h|a|r| +0#0000000&|c|h| |=| |'+0#e000002&|c|'|;+0#0000000&| @52
@75
-@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|c|h|)| |{| @53
-@57|5@1|,|3|-|9| @7|4|7|%|
+@57|5|4|,|3|-|9| @7|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_switch_04.dump b/runtime/syntax/testdir/dumps/java_switch_04.dump
index 38dfe40..a2f1c86 100644
--- a/runtime/syntax/testdir/dumps/java_switch_04.dump
+++ b/runtime/syntax/testdir/dumps/java_switch_04.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@7|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|c|h|)| |{| @53
+| +0&#ffffff0@74
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|c|h|)| |{| @53
@8|c+0#af5f00255&|a|s|e| +0#0000000&|'+0#e000002&|a|'|:+0#0000000&| @6|{| |e|c|h|o|(|'+0#e000002&|a|'|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
@8|c+0#af5f00255&|a|s|e| +0#0000000&|'+0#e000002&|b|'|:+0#0000000&| @6|{| |e|c|h|o|(|'+0#e000002&|b|'|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|'+0#e000002&|\+0#e000e06&|u|0@3|'+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @24
-@8|}|;| @64
-> @74
+@8>}| @65
+@75
@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|c|h|)| |{| @48
@12|c+0#af5f00255&|a|s|e| +0#0000000&|'+0#e000002&|a|'| +0#0000000&@3|-|>| |'+0#e000002&|a|'|;+0#0000000&| @43
@12|c+0#af5f00255&|a|s|e| +0#0000000&|'+0#e000002&|b|'| +0#0000000&@3|-|>| |'+0#e000002&|b|'|;+0#0000000&| @43
@@ -16,5 +17,4 @@
@8|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |0+0#e000002&|)+0#0000000&|:| @3|{| |e|c|h|o|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |0+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @20
@8|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |1+0#e000002&|)+0#0000000&|:| @3|{| |e|c|h|o|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @20
@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |-|1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @23
-@8|}|;| @64
-@57|7|3|,|0|-|1| @7|6|5|%|
+@57|7|2|,|3|-|9| @7|6|4|%|
diff --git a/runtime/syntax/testdir/dumps/java_switch_05.dump b/runtime/syntax/testdir/dumps/java_switch_05.dump
index 3a25667..15939be 100644
--- a/runtime/syntax/testdir/dumps/java_switch_05.dump
+++ b/runtime/syntax/testdir/dumps/java_switch_05.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@7|}|;| @64
+| +0&#ffffff0@7|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |-|1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @23
+@8|}| @65
@75
@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|b|)| |{| @49
@12|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |0+0#e000002&|)+0#0000000&| |-|>| |(|b+0#00e0003&|y|t|e|)+0#0000000&| |0+0#e000002&|;+0#0000000&| @34
-@12|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |1+0#e000002&|)+0#0000000&| |-|>| |(|b+0#00e0003&|y|t|e|)+0#0000000&| |1+0#e000002&|;+0#0000000&| @34
-@12>d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |(|b+0#00e0003&|y|t|e|)+0#0000000&| |-|1+0#e000002&|;+0#0000000&| @37
+@12>c+0#af5f00255&|a|s|e| +0#0000000&|(@1|b+0#00e0003&|y|t|e|)+0#0000000&| |1+0#e000002&|)+0#0000000&| |-|>| |(|b+0#00e0003&|y|t|e|)+0#0000000&| |1+0#e000002&|;+0#0000000&| @34
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |(|b+0#00e0003&|y|t|e|)+0#0000000&| |-|1+0#e000002&|;+0#0000000&| @37
@8|}|)|;| @63
@75
@8|s+0#00e0003&|h|o|r|t| +0#0000000&|s|h| |=| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |2+0#e000002&|;+0#0000000&| @45
@@ -12,9 +13,8 @@
@8|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |0+0#e000002&|)+0#0000000&|:| @2|{| |e|c|h|o|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |0+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @19
@8|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|)+0#0000000&|:| @2|{| |e|c|h|o|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @19
@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |-|1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @22
-@8|}|;| @64
+@8|}| @65
@75
@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|s|h|)| |{| @48
@12|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |0+0#e000002&|)+0#0000000&| @3|-|>| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |0+0#e000002&|;+0#0000000&| @29
-@12|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|)+0#0000000&| @3|-|>| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|;+0#0000000&| @29
-@57|9|1|,|4|-|1|3| @6|8|2|%|
+@57|9|0|,|4|-|1|3| @6|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/java_switch_06.dump b/runtime/syntax/testdir/dumps/java_switch_06.dump
index 9e72cc7..3e3483c 100644
--- a/runtime/syntax/testdir/dumps/java_switch_06.dump
+++ b/runtime/syntax/testdir/dumps/java_switch_06.dump
@@ -1,14 +1,15 @@
-| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|)+0#0000000&| @3|-|>| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|;+0#0000000&| @29
+| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |0+0#e000002&|)+0#0000000&| @3|-|>| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |0+0#e000002&|;+0#0000000&| @29
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|)+0#0000000&| @3|-|>| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|;+0#0000000&| @29
@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@8|-|>| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |-|1+0#e000002&|;+0#0000000&| @32
@8|}|)|;| @63
@75
-@8|i+0#00e0003&|n|t| +0#0000000&|i| |=| |2+0#e000002&|;+0#0000000&| @56
-> @74
+@8>i+0#00e0003&|n|t| +0#0000000&|i| |=| |2+0#e000002&|;+0#0000000&| @56
+@75
@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|i|)| |{| @54
@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|b|0|_@1|0@1|_@2|0@2|:+0#0000000&| |{| |e|c|h|o|(|0+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|x|0@2|_@2|0@1|_@1|1|:+0#0000000&| |{| |e|c|h|o|(|1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
-@8|}|;| @64
+@8|}| @65
@75
@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|i|)| |{| @49
@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|_|0|_|0|_|0|_|0| +0#0000000&@1|-|>| |0+0#e000002&|;+0#0000000&| @41
@@ -16,5 +17,4 @@
@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |-|1+0#e000002&|;+0#0000000&| @44
@8|}|)|;| @63
@4|}| @69
-|}| @73
-@57|1|0|9|,|0|-|1| @6|B|o|t|
+@57|1|0|8|,|3|-|9| @6|9@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_switch_07.dump b/runtime/syntax/testdir/dumps/java_switch_07.dump
new file mode 100644
index 0000000..51f4f8d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_switch_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+>}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2@1|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_switch_99.dump b/runtime/syntax/testdir/dumps/java_switch_99.dump
deleted file mode 100644
index f275382..0000000
--- a/runtime/syntax/testdir/dumps/java_switch_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|(@1|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|)+0#0000000&| @3|-|>| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |1+0#e000002&|;+0#0000000&| @29
-@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@8|-|>| |(|s+0#00e0003&|h|o|r|t|)+0#0000000&| |-|1+0#e000002&|;+0#0000000&| @32
-@8|}|)|;| @63
-@75
-@8|i+0#00e0003&|n|t| +0#0000000&|i| |=| |2+0#e000002&|;+0#0000000&| @56
-@75
-@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|i|)| |{| @54
-@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|b|0|_@1|0@1|_@2|0@2|:+0#0000000&| |{| |e|c|h|o|(|0+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
-@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|x|0@2|_@2|0@1|_@1|1|:+0#0000000&| |{| |e|c|h|o|(|1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
-@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
-@8|}|;| @64
-@75
-@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|i|)| |{| @49
-@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|_|0|_|0|_|0|_|0| +0#0000000&@1|-|>| |0+0#e000002&|;+0#0000000&| @41
-@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&| +0#0000000&@5|-|>| |1+0#e000002&|;+0#0000000&| @45
-@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |-|1+0#e000002&|;+0#0000000&| @44
-@8|}|)|;| @63
-@4|}| @69
->}| @73
-@57|1|2@1|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_unfoldment_01.dump b/runtime/syntax/testdir/dumps/java_unfoldment_01.dump
index cb57834..b9fff36 100644
--- a/runtime/syntax/testdir/dumps/java_unfoldment_01.dump
+++ b/runtime/syntax/testdir/dumps/java_unfoldment_01.dump
@@ -17,4 +17,4 @@
@24|n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{@2|}@2|;| @30
@20|}@2|;| @50
@16|}| @57
-@57|1|9|,|1| @9|1|9|%|
+@57|1|9|,|1| @9|1|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_unfoldment_02.dump b/runtime/syntax/testdir/dumps/java_unfoldment_02.dump
index f557d66..c99fa33 100644
--- a/runtime/syntax/testdir/dumps/java_unfoldment_02.dump
+++ b/runtime/syntax/testdir/dumps/java_unfoldment_02.dump
@@ -8,7 +8,7 @@
@16|b+0#af5f00255&|r|e|a|k|;+0#0000000&| @52
@12|}| @61
@12|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| |;| @52
-@8|}|;| @64
+@8|}| @65
@4|}| @69
@75
@4|{| |O|b|j|e|c|t| |b@1| |=| |(@1|O|b|j|e|c|t|)| |n+0#af5f00255&|e|w| +0#0000000&|b+0#00e0003&|y|t|e|[+0#0000000&|]|{+0#ffffff16#ff404010|}|)+0#0000000#ffffff0|;| |}| @30
@@ -17,4 +17,4 @@
@8|d+0#af5f00255&|o| +0#0000000&|{| @62
@12|i+0#af5f00255&|f| +0#0000000&|(|t+0#e000002&|r|u|e|)+0#0000000&| @53
@16|b+0#af5f00255&|r|e|a|k| +0#0000000&|o+0#af5f00255&|u|t|;+0#0000000&| @48
-@57|3|7|,|4|-|1|3| @6|4|6|%|
+@57|3|7|,|4|-|1|3| @6|3|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_unfoldment_03.dump b/runtime/syntax/testdir/dumps/java_unfoldment_03.dump
index e2735a7..8b2a981 100644
--- a/runtime/syntax/testdir/dumps/java_unfoldment_03.dump
+++ b/runtime/syntax/testdir/dumps/java_unfoldment_03.dump
@@ -2,19 +2,19 @@
@8|}| |w+0#af5f00255&|h|i|l|e| +0#0000000&|(|f+0#e000002&|a|l|s|e|)+0#0000000&|;| @50
|}| @73
@4|}| @69
+|/+0#0000e05&|*|\@2|*|/| +0#0000000&|{| @65
+@8>(|n+0#af5f00255&|e|w| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|O|b|j|e|c|t|,| |O|b|j|e|c|t|>|(|)| |{+0#ffffff16#ff404010| +0#0000000#ffffff0@14
+@12|/+0#0000e05&|*@1| +0#0000000&@59
+| +0#0000e05&@12|*| +0#e000e06&|{|@|i|n|h|e|r|i|t|D|o|c|}| |*+0#0000e05&|/| +0#0000000&@43
+@12|p+0#00e0003&|u|b|l|i|c| +0#0000000&|O|b|j|e|c|t| |a|p@1|l|y|(|O|b|j|e|c|t| |o|)| |{+0#ffffff16#ff404010| +0#0000000#ffffff0|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|o|;| |}+0#ffffff16#ff404010|;+0#0000000#ffffff0| @18
+@8|}+0#ffffff16#ff404010|)+0#0000000#ffffff0|.|a|p@1|l|y|(| @57
+@8|(|n+0#af5f00255&|e|w| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|O|b|j|e|c|t|,| |O|b|j|e|c|t|>|(|)| |{+0#ffffff16#ff404010| +0#0000000#ffffff0@14
+@12|/+0#0000e05&|*@1| +0#e000e06&|{|@|i|n|h|e|r|i|t|D|o|c|}| +0#0000000&@45
+| +0#e000e06&@12|*+0#0000e05&|/| +0#0000000&@59
+@12|p+0#00e0003&|u|b|l|i|c| +0#0000000&|O|b|j|e|c|t| |a|p@1|l|y|(|O|b|j|e|c|t| |o|)| |{+0#ffffff16#ff404010| +0#0000000#ffffff0|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|o|;| |}+0#ffffff16#ff404010|;+0#0000000#ffffff0| @18
+@8|}+0#ffffff16#ff404010|)+0#0000000#ffffff0@1|;| @62
+@4|}| @69
@75
-@4>/+0#0000e05&|*@1| +0#0000000&@67
+@4|/+0#0000e05&|*@1| +0#0000000&@67
| +0#0000e05&@4|*| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@54
-| +0#0000e05&@4|*|/| +0#0000000&@67
-@4|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|1|(|)| |{| |}| @54
-@4|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@50
-@4|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|2|(|)| @58
-@4|{| @69
-@4|}| @69
-@4|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@50
-@4|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|3|(|)| |{| @56
-@4|}| @69
-@4|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@50
-@4|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|4|(|)| |{| @56
-@4|/+0#0000e05&|*|/|\|/|\|/|\|*|/| +0#0000000&|;| |}| @56
-@57|5@1|,|2|-|5| @7|7|3|%|
+@57|5@1|,|3|-|9| @7|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_unfoldment_04.dump b/runtime/syntax/testdir/dumps/java_unfoldment_04.dump
index aa0ed17..40fb521 100644
--- a/runtime/syntax/testdir/dumps/java_unfoldment_04.dump
+++ b/runtime/syntax/testdir/dumps/java_unfoldment_04.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@3|/+0#0000e05&|*|/|\|/|\|/|\|*|/| +0#0000000&|;| |}| @56
+| +0#0000e05#ffffff0@4|*| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@54
+| +0#0000e05&@4|*|/| +0#0000000&@67
+@4|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|1|(|)| |{| |}| @54
+@4|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@50
+@4|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|2|(|)| @58
+@4>{| @69
+@4|}| @69
+@4|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@50
+@4|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|3|(|)| |{| @56
+@4|}| @69
+@4|/+0#0000e05&|*@1| +0#e000e06&|N|o| |o|p|e|r|a|t|i|o|n|.| +0#0000e05&|*|/| +0#0000000&@50
+@4|v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|4|(|)| |{| @56
+@4|/+0#0000e05&|*|/|\|/|\|/|\|*|/| +0#0000000&|;| |}| @56
|}| @73
@75
|/+0#0000e05&|*| +0#0000000&@72
| +0#0000e05&|*| |S|o|m|e| |n|o|t|e|.| +0#0000000&@61
-| +0#0000e05&>*| |{| +0#0000000&@70
-| +0#0000e05&|*| |}| +0#0000000&@70
-| +0#0000e05&|*|/| +0#0000000&@71
-|/+0#0000e05&|*@1| +0#0000000&@71
-| +0#0000e05&|*| +0#e000e06&|A| |s|u|m@1|a|r|y|.| +0#0000000&@61
| +0#0000e05&|*| |{| +0#0000000&@70
| +0#0000e05&|*| |}| +0#0000000&@70
-| +0#0000e05&|*|/| +0#0000000&@71
-|/+0#0000e05&@1| +0#0000000&@72
-|/+0#0000e05&@1| |{| +0#0000000&@70
-|/+0#0000e05&@1| |}| +0#0000000&@70
-@75
-|/+0#0000e05&|*| |1|2@1|||.@67
-@20|*|/| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|U|n|f|o|l|d|e|n|a|b|l|e| |{| @27
-@57|7|3|,|2| @9|9|8|%|
+@57|7|3|,|2|-|5| @7|8|4|%|
diff --git a/runtime/syntax/testdir/dumps/java_unfoldment_99.dump b/runtime/syntax/testdir/dumps/java_unfoldment_05.dump
index 9e10ac4..fc59348 100644
--- a/runtime/syntax/testdir/dumps/java_unfoldment_99.dump
+++ b/runtime/syntax/testdir/dumps/java_unfoldment_05.dump
@@ -1,14 +1,9 @@
-|}+0&#ffffff0| @73
-@75
-|/+0#0000e05&|*| +0#0000000&@72
-| +0#0000e05&|*| |S|o|m|e| |n|o|t|e|.| +0#0000000&@61
-| +0#0000e05&|*| |{| +0#0000000&@70
-| +0#0000e05&|*| |}| +0#0000000&@70
+| +0#0000e05#ffffff0|*| |}| +0#0000000&@70
| +0#0000e05&|*|/| +0#0000000&@71
|/+0#0000e05&|*@1| +0#0000000&@71
| +0#0000e05&|*| +0#e000e06&|A| |s|u|m@1|a|r|y|.| +0#0000000&@61
| +0#0000e05&|*| |{| +0#0000000&@70
-| +0#0000e05&|*| |}| +0#0000000&@70
+| +0#0000e05&>*| |}| +0#0000000&@70
| +0#0000e05&|*|/| +0#0000000&@71
|/+0#0000e05&@1| +0#0000000&@72
|/+0#0000e05&@1| |{| +0#0000000&@70
@@ -16,5 +11,10 @@
@75
|/+0#0000e05&|*| |1|2@1|||.@67
@20|*|/| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|U|n|f|o|l|d|e|n|a|b|l|e| |{| @27
->}| @73
-@57|8|6|,|1| @9|B|o|t|
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|9|1|,|2| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/markdown_conceal_99.dump b/runtime/syntax/testdir/dumps/markdown_conceal_99.dump
deleted file mode 100644
index d0b6be1..0000000
--- a/runtime/syntax/testdir/dumps/markdown_conceal_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|I+0&#ffffff0|t|a|l|i|c|,| |I|t|a|l|i|c|.| @1|B+0#0000001#ffff4012|o|l|d|,+0#0000000#ffffff0| |B+0#0000001#ffff4012|o|l|d|.+0#0000000#ffffff0| @46
-|B+2&&|o|l|d| |I|t|a|l|i|c|,+0&&| |B+2&&|o|l|d| |I|t|a|l|i|c|.+0&&| @49
-|S+1024&&|t|r|i|k|e|t|h|r|o|u|g|h|,+0&&| |S̶|t̶|r̶|i̶|k̶|e̶|t̶|h̶|r̶|o̶|u̶|g̶|h̶|.| @45
-@75
-@75
-|<+0#00e0e07&|p+0#af5f00255&|>+0#00e0e07&| +0#0000000&@71
-|<+0#00e0e07&|d+0#af5f00255&|e|l|>+0#00e0e07&|S+1024#0000000&|t|r|i|k|e|t|h|r|o|u|g|h|<+0#00e0e07&|/|d+0#af5f00255&|e|l|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|>+0#00e0e07&|S+1024#0000000&|t|r|i|k|e|t|h|r|o|u|g|h|<+0#00e0e07&|/|s+0#af5f00255&|>+0#00e0e07&|.+0#0000000&|<+0#00e0e07&|b+0#af5f00255&|r| +0#00e0e07&|/|>| +0#0000000&@21
-@75
-@75
-@75
-|<+0#00e0e07&|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|<|e+0#af5f00255&|m|>+0#00e0e07&|B+2#0000000&|o|l|d| |I|t|a|l|i|c|<+0#00e0e07&|/|e+0#af5f00255&|m|>+0#00e0e07&|<|/|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|.+0#0000000&| @36
-|<+0#00e0e07&|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|<|e+0#af5f00255&|m|>+0#00e0e07&|B+2#0000000&|o|l|d| |I|t|a|l|i|c|<+0#00e0e07&|/|e+0#af5f00255&|m|>+0#00e0e07&|<|/|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|.+0#0000000&|<+0#00e0e07&|b+0#af5f00255&|r| +0#00e0e07&|/|>| +0#0000000&@30
-|<+0#00e0e07&|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|B+0#0000001#ffff4012|o|l|d|<+0#00e0e07#ffffff0|/|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|B+0#0000001#ffff4012|o|l|d|<+0#00e0e07#ffffff0|/|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|.+0#0000000&| @29
-|<+0#00e0e07&|e+0#af5f00255&|m|>+0#00e0e07&|I+0#0000000&|t|a|l|i|c|<+0#00e0e07&|/|e+0#af5f00255&|m|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|e+0#af5f00255&|m|>+0#00e0e07&|I+0#0000000&|t|a|l|i|c|<+0#00e0e07&|/|e+0#af5f00255&|m|>+0#00e0e07&|.+0#0000000&| @41
-> @74
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|5|,|1| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/modula2_iso_02.dump b/runtime/syntax/testdir/dumps/modula2_iso_02.dump
index 6d60233..488b062 100644
--- a/runtime/syntax/testdir/dumps/modula2_iso_02.dump
+++ b/runtime/syntax/testdir/dumps/modula2_iso_02.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@74
+|N+0#00e0e07#ffffff0|E|W| +0#0000000&|D+0#00e0e07&|I|S|P|O|S|E| +0#0000000&@63
+@75
|(+0#0000e05&|*| |u|n|s|a|f|e| |b|u|i|l|t|i|n|s| |*|)| +0#0000000&@53
|A+0#00e0003&|D@1|R|E|S@1| +0#0000000&|B+0#00e0003&|Y|T|E| +0#0000000&|L+0#00e0003&|O|C| +0#0000000&|W+0#00e0003&|O|R|D| +0#0000000&|A+0#00e0003&|D|R| +0#0000000&|C+0#00e0003&|A|S|T| +0#0000000&|T+0#00e0003&|S|I|Z|E| +0#0000000&|S+0#00e0003&|Y|S|T|E|M| +0#0000000&@31
|M+0#00e0003&|A|K|E|A|D|R| +0#0000000&|A+0#00e0003&|D@1|A|D|R| +0#0000000&|S+0#00e0003&|U|B|A|D|R| +0#0000000&|D+0#00e0003&|I|F|A|D|R| +0#0000000&|R+0#00e0003&|O|T|A|T|E| +0#0000000&|S+0#00e0003&|H|I|F|T| +0#0000000&@33
-@75
->(+0#0000e05&|*| |n|o|n|-|s|t|a|n|d|a|r|d| |l|a|n|g|u|a|g|e| |e|x|t|e|n|s|i|o|n|s| |*|)| +0#0000000&@36
+> @74
+|(+0#0000e05&|*| |n|o|n|-|s|t|a|n|d|a|r|d| |l|a|n|g|u|a|g|e| |e|x|t|e|n|s|i|o|n|s| |*|)| +0#0000000&@36
|L+0#00e0003&|O|N|G|C|A|R|D| +0#0000000&|L+0#00e0003&|O|N|G|B|I|T|S|E|T| +0#0000000&@55
@75
|(+0#0000e05&|*| |u|s|e|r| |d|e|f|i|n|e|d| |i|d|e|n|t|i|f|i|e|r|s| |*|)| +0#0000000&@44
@@ -16,5 +17,4 @@
|(+0#0000e05&|*| |n|u|m|e|r|i|c| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@52
|0+0#e000002&|F@2|H|,+0#e000e06&| +0#0000000&|1+0#e000002&|.|2|3|,+0#e000e06&| +0#0000000&|1+0#e000002&|.|2|3|e|-|4|5|,+0#e000e06&| +0#0000000&|1+0#e000002&|0@2| +0#0000000&@47
@75
-|(+0#0000e05&|*| |o|c|t|a|l| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@54
-@57|3|7|,|1| @9|3|2|%|
+@57|3|6|,|0|-|1| @7|3|1|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_iso_03.dump b/runtime/syntax/testdir/dumps/modula2_iso_03.dump
index b9406da..9207c5f 100644
--- a/runtime/syntax/testdir/dumps/modula2_iso_03.dump
+++ b/runtime/syntax/testdir/dumps/modula2_iso_03.dump
@@ -1,9 +1,10 @@
-|(+0#0000e05#ffffff0|*| |o|c|t|a|l| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@54
+| +0&#ffffff0@74
+|(+0#0000e05&|*| |o|c|t|a|l| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@54
|n| |:+0#e000e06&|=| +0#0000000&|0+0#e000002&|3|7@1|B|;+0#e000e06&| +0#0000000&|c|h| |:+0#e000e06&|=| +0#0000000&|0+0#e000002&|3|7@1|C|;+0#e000e06&| +0#0000000&@50
@75
|(+0#0000e05&|*| |p|r|a|g|m|a|s| |*|)| +0#0000000&@61
-|<+0#e000e06&|*|$|f|o@1|*|>| +0#0000000&@66
-> @74
+><+0#e000e06&|*|$|f|o@1|*|>| +0#0000000&@66
+@75
|(+0#0000e05&|*| |b|l|o|c|k| |c|o|m@1|e|n|t|s| |w|i|t|h| |e|m|p|h|a|s|i|s| |*|)| +0#0000000&@40
|(+0#0000e05&|*| |c+0#e000e06&|o|p|y|r|i|g|h|t| +0#0000e05&|(|c|)| |J|u|r@1|a|s|i|c| |I|n|c|.| +0#0000000&@44
| +0#0000e05&@2|a+0#e000e06&|u|t|h|o|r| +0#0000e05&|F|r|e|d| |F|l|i|n|t|s|t|o|n|e| |S|r|.| +0#0000000&@45
@@ -16,5 +17,4 @@
|(+0#0000e05&|*| |t|e|c|h|n|i|c|a|l| |d|e|b|t| |m|a|r|k|e|r|s| |*|)| +0#0000000&@46
|(+0#0000e05&|*| |T+0#e000e06&|O|D|O|:| +0#0000e05&|.@2| |*|)| +0#0000000&@59
|(+0#0000e05&|*| |F+0#e000e06&|I|X|M|E| +0#0000e05&|*|)| +0#0000000&@63
-|(+0#0000e05&|*| |D+0#e000e06&|E|P|R|E|C|A|T|E|D| +0#0000e05&|*|)| +0#0000000&@58
-@57|5@1|,|0|-|1| @7|5|1|%|
+@57|5|4|,|1| @9|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_iso_04.dump b/runtime/syntax/testdir/dumps/modula2_iso_04.dump
index 98fdc23..5b379c5 100644
--- a/runtime/syntax/testdir/dumps/modula2_iso_04.dump
+++ b/runtime/syntax/testdir/dumps/modula2_iso_04.dump
@@ -1,9 +1,10 @@
-|(+0#0000e05#ffffff0|*| |D+0#e000e06&|E|P|R|E|C|A|T|E|D| +0#0000e05&|*|)| +0#0000000&@58
+|(+0#0000e05#ffffff0|*| |F+0#e000e06&|I|X|M|E| +0#0000e05&|*|)| +0#0000000&@63
+|(+0#0000e05&|*| |D+0#e000e06&|E|P|R|E|C|A|T|E|D| +0#0000e05&|*|)| +0#0000000&@58
@75
|(+0#0000e05&|*| |p|r|o|c|e|d|u|r|e|s| |*|)| +0#0000000&@58
|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|N+0#00e0e07&|e|w|F|o@1|W|i|t|h|B|a|r| +0#0000000&|(+0#e000e06&| +0#0000000&|V+0#af5f00255&|A|R| +0#0000000&|f|o@1|:+0#e000e06&| +0#0000000&|F|o@1|;+0#e000e06&| +0#0000000&|b|a|r| |:+0#e000e06&| +0#0000000&|I+0#00e0003&|N|T|E|G|E|R| +0#0000000&|)+0#e000e06&|;| +0#0000000&@18
-|B+0#af5f00255&|E|G|I|N| +0#0000000&@69
-@2>N+0#00e0e07&|E|W|(+0#e000e06&|f+0#0000000&|o@1|)+0#e000e06&|;| +0#0000000&@63
+>B+0#af5f00255&|E|G|I|N| +0#0000000&@69
+@2|N+0#00e0e07&|E|W|(+0#e000e06&|f+0#0000000&|o@1|)+0#e000e06&|;| +0#0000000&@63
@2|f|o@1|^+0#e000e06&|.|b+0#0000000&|a|r| |:+0#e000e06&|=| +0#0000000&|b|a|r|;+0#e000e06&| +0#0000000&@56
@2|R+0#af5f00255&|E|T|U|R|N| +0#0000000&@66
|E+0#af5f00255&|N|D| +0#0000000&|S+0#00e0e07&|e|t|B|a|r|;+0#e000e06&| +0#0000000&@63
@@ -16,5 +17,4 @@
@2|E+0#af5f00255&|L|S|E| +0#0000000&@68
@4|R+0#af5f00255&|E|T|U|R|N| +0#0000000&|f|o@1|^+0#e000e06&|.|b+0#0000000&|a|r| @55
@2|E+0#af5f00255&|N|D| +0#0000000&|(+0#0000e05&|*| |I|F| |*|)| +0#0000000&@60
-|E+0#af5f00255&|N|D| +0#0000000&|b+0#00e0e07&|a|r|;+0#e000e06&| +0#0000000&@66
-@57|7|3|,|3| @9|7|0|%|
+@57|7|2|,|1| @9|6|9|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_iso_05.dump b/runtime/syntax/testdir/dumps/modula2_iso_05.dump
index eca4631..fac8919 100644
--- a/runtime/syntax/testdir/dumps/modula2_iso_05.dump
+++ b/runtime/syntax/testdir/dumps/modula2_iso_05.dump
@@ -1,9 +1,10 @@
-|E+0#af5f00255#ffffff0|N|D| +0#0000000&|b+0#00e0e07&|a|r|;+0#e000e06&| +0#0000000&@66
+| +0&#ffffff0@1|E+0#af5f00255&|N|D| +0#0000000&|(+0#0000e05&|*| |I|F| |*|)| +0#0000000&@60
+|E+0#af5f00255&|N|D| +0#0000000&|b+0#00e0e07&|a|r|;+0#e000e06&| +0#0000000&@66
@75
|(+0#0000e05&|*| |d|i|s|a|b|l|e|d| |c|o|d|e| |*|)| +0#0000000&@55
|?+0#4040ff13&|<| +0#0000000&@72
-|W+0#4040ff13&|H|I|L|E| |f|o@1| |=| |b|a|r| |D|O| +0#0000000&@56
-| +0#4040ff13&@1>b|a|z|(|b|a|m|,| |b|o@1|)| +0#0000000&@59
+>W+0#4040ff13&|H|I|L|E| |f|o@1| |=| |b|a|r| |D|O| +0#0000000&@56
+| +0#4040ff13&@1|b|a|z|(|b|a|m|,| |b|o@1|)| +0#0000000&@59
|E+0#4040ff13&|N|D| |(|*| |W|H|I|L|E| |*|)|;| +0#0000000&@58
|>+0#4040ff13&|?| +0#0000000&@72
@75
@@ -16,5 +17,4 @@
|(+0#0000e05&|*| |i|l@1|e|g|a|l| |i|d|e|n|t|i|f|i|e|r|s| |*|)| +0#0000000&@49
@75
|_+0#ffffff16#ff404010|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@26
-@75
-@57|9|1|,|3| @9|8|9|%|
+@57|9|0|,|1| @9|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_iso_06.dump b/runtime/syntax/testdir/dumps/modula2_iso_06.dump
index 4074a01..ef5b0fe 100644
--- a/runtime/syntax/testdir/dumps/modula2_iso_06.dump
+++ b/runtime/syntax/testdir/dumps/modula2_iso_06.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@74
+|_+0#ffffff16#ff404010|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@26
+@75
|b+0#ffffff16#ff404010|a|r|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_| +0#0000000#ffffff0@26
@75
|_+0#ffffff16#ff404010@1|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@22
-@75
->b+0#ffffff16#ff404010|a|r|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_@1| +0#0000000#ffffff0@22
+> @74
+|b+0#ffffff16#ff404010|a|r|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_@1| +0#0000000#ffffff0@22
@75
|b+0#ffffff16#ff404010|a|r|_@1|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_@1|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1| +0#0000000#ffffff0@35
@75
@@ -16,5 +17,4 @@
|~| @73
|~| @73
|~| @73
-|~| @73
-| +0#0000000&@56|1|0|9|,|1| @8|B|o|t|
+| +0#0000000&@56|1|0|8|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/modula2_iso_99.dump b/runtime/syntax/testdir/dumps/modula2_iso_99.dump
deleted file mode 100644
index e23fb29..0000000
--- a/runtime/syntax/testdir/dumps/modula2_iso_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|@+0#e000e06#ffffff0| +0#0000000&@1|&+0#e000e06&| +0#0000000&@1|~+0#e000e06&| +0#0000000&@67
-@75
-|(+0#0000e05&|*| |i|l@1|e|g|a|l| |c|h|a|r|a|c|t|e|r|s| |*|)| +0#0000000&@50
-|`+0#ffffff16#ff404010| +0#0000000#ffffff0@1|!+0#ffffff16#ff404010| +0#0000000#ffffff0@1|$+0#ffffff16#ff404010| +0#0000000#ffffff0@1|%+0#ffffff16#ff404010| +0#0000000#ffffff0@1|\+0#ffffff16#ff404010| +0#0000000#ffffff0@1|?+0#ffffff16#ff404010| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010| +0#0000000#ffffff0@55
-@75
-|(+0#0000e05&|*| |i|l@1|e|g|a|l| |i|d|e|n|t|i|f|i|e|r|s| |*|)| +0#0000000&@49
-@75
-|_+0#ffffff16#ff404010|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@26
-@75
-|b+0#ffffff16#ff404010|a|r|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_| +0#0000000#ffffff0@26
-@75
-|_+0#ffffff16#ff404010@1|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@22
-@75
-|b+0#ffffff16#ff404010|a|r|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_@1| +0#0000000#ffffff0@22
-@75
-|b+0#ffffff16#ff404010|a|r|_@1|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_@1|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1| +0#0000000#ffffff0@35
-@75
-@75
->E+0#af5f00255&|N|D| +0#0000000&|F+0#00e0e07&|o@1|b|a|r|.+0#e000e06&| +0#0000000&@63
-@57|1@1|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/modula2_pim_06.dump b/runtime/syntax/testdir/dumps/modula2_pim_06.dump
new file mode 100644
index 0000000..4f865e4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/modula2_pim_06.dump
@@ -0,0 +1,20 @@
+|_+0#ffffff16#ff404010@1|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@22
+@75
+|b+0#ffffff16#ff404010|a|r|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_@1| +0#0000000#ffffff0@22
+@75
+|b+0#ffffff16#ff404010|a|r|_@1|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_@1|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1| +0#0000000#ffffff0@35
+> @74
+@75
+|E+0#af5f00255&|N|D| +0#0000000&|F+0#00e0e07&|o@1|b|a|r|.+0#e000e06&| +0#0000000&@63
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|9|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/modula2_pim_99.dump b/runtime/syntax/testdir/dumps/modula2_pim_99.dump
deleted file mode 100644
index 7e096a2..0000000
--- a/runtime/syntax/testdir/dumps/modula2_pim_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|&+0#e000e06#ffffff0| +0#0000000&@1|~+0#e000e06&| +0#0000000&@70
-@75
-|(+0#0000e05&|*| |i|l@1|e|g|a|l| |c|h|a|r|a|c|t|e|r|s| |*|)| +0#0000000&@50
-|`+0#ffffff16#ff404010| +0#0000000#ffffff0@1|!+0#ffffff16#ff404010| +0#0000000#ffffff0@1|@+0#ffffff16#ff404010| +0#0000000#ffffff0@1|$+0#ffffff16#ff404010| +0#0000000#ffffff0@1|%+0#ffffff16#ff404010| +0#0000000#ffffff0@1|\+0#ffffff16#ff404010| +0#0000000#ffffff0@1|?+0#ffffff16#ff404010| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010| +0#0000000#ffffff0@52
-@75
-|(+0#0000e05&|*| |i|l@1|e|g|a|l| |i|d|e|n|t|i|f|i|e|r|s| |*|)| +0#0000000&@49
-@75
-|_+0#ffffff16#ff404010|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@26
-@75
-|b+0#ffffff16#ff404010|a|r|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_| +0#0000000#ffffff0@26
-@75
-|_+0#ffffff16#ff404010@1|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@22
-@75
-|b+0#ffffff16#ff404010|a|r|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_@1| +0#0000000#ffffff0@22
-@75
-|b+0#ffffff16#ff404010|a|r|_@1|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_@1|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1| +0#0000000#ffffff0@35
-@75
-@75
->E+0#af5f00255&|N|D| +0#0000000&|F+0#00e0e07&|o@1|b|a|r|.+0#e000e06&| +0#0000000&@63
-@57|1@2|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/modula2_r10_02.dump b/runtime/syntax/testdir/dumps/modula2_r10_02.dump
index 408872a..285d5eb 100644
--- a/runtime/syntax/testdir/dumps/modula2_r10_02.dump
+++ b/runtime/syntax/testdir/dumps/modula2_r10_02.dump
@@ -1,9 +1,10 @@
-|U+0#00e0003#ffffff0|N|S|A|F|E| +0#0000000&@68
+|(+0#0000e05#ffffff0|*| |u|n|s|a|f|e| |b|u|i|l|t|i|n|s| |*|)| +0#0000000&@53
+|U+0#00e0003&|N|S|A|F|E| +0#0000000&@68
@75
|(+0#0000e05&|*| |u|n|s|a|f|e| |b|u|i|l|t|i|n| |t|y|p|e|s| |*|)| +0#0000000&@48
|B+0#00e0003&|Y|T|E| +0#0000000&|W+0#00e0003&|O|R|D| +0#0000000&|L+0#00e0003&|O|N|G|W|O|R|D| +0#0000000&|A|D@1|R|E|S@1| |O+0#00e0003&|C|T|E|T|S|E|Q| +0#0000000&@39
-@75
->(+0#0000e05&|*| |u|n|s|a|f|e| |b|u|i|l|t|i|n| |p|r|o|c|e|d|u|r|e|s| |*|)| +0#0000000&@43
+> @74
+|(+0#0000e05&|*| |u|n|s|a|f|e| |b|u|i|l|t|i|n| |p|r|o|c|e|d|u|r|e|s| |*|)| +0#0000000&@43
|A+0#00e0003&|D@1| +0#0000000&|S+0#00e0003&|U|B| +0#0000000&|D+0#00e0003&|E|C| +0#0000000&|I+0#00e0003&|N|C| +0#0000000&|S+0#00e0003&|E|T|B|I|T| +0#0000000&|H+0#00e0003&|A|L|T| +0#0000000&@47
@75
|(+0#0000e05&|*| |u|n|s|a|f|e| |b|u|i|l|t|i|n| |f|u|n|c|t|i|o|n|s| |*|)| +0#0000000&@44
@@ -16,5 +17,4 @@
|f|o@1|b|a|r| |F|o@1|b|a|r| |F|o@1|B|a|r| |f|o@1|_|b|a|r| |f|o@1|0| @41
@75
@75
-|(+0#0000e05&|*| |s|t|r|i|n|g| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@53
-@57|3|7|,|1| @9|2|4|%|
+@57|3|6|,|0|-|1| @7|2|3|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_r10_03.dump b/runtime/syntax/testdir/dumps/modula2_r10_03.dump
index b35c8b0..4d335d2 100644
--- a/runtime/syntax/testdir/dumps/modula2_r10_03.dump
+++ b/runtime/syntax/testdir/dumps/modula2_r10_03.dump
@@ -1,9 +1,10 @@
-|(+0#0000e05#ffffff0|*| |s|t|r|i|n|g| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@53
+| +0&#ffffff0@74
+|(+0#0000e05&|*| |s|t|r|i|n|g| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@53
|s|t|r| |:+0#e000e06&|=| +0#0000000&|"+0#e000002&|f|o@1| |'|b|a|r|'| |b|a|z|"|;+0#e000e06&| +0#0000000&@51
|s|t|r| |:+0#e000e06&|=| +0#0000000&|'+0#e000002&|f|o@1| |"|b|a|r|"| |b|a|z|'|;+0#e000e06&| +0#0000000&@51
@75
-|(+0#0000e05&|*| |n|u|m|e|r|i|c| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@52
->0+0#e000002&|b|0|1@1|0|'|0@1|1@1|'|0|1@1|0|'|0@3|,+0#e000e06&| +0#0000000&|0+0#e000002&|u|0|A|,+0#e000e06&| +0#0000000&|0+0#e000002&|x|0|1|2|3|,+0#e000e06&| +0#0000000&|0+0#e000002&|x|C|A|F|E|'|D|0@1|D| +0#0000000&@26
+>(+0#0000e05&|*| |n|u|m|e|r|i|c| |l|i|t|e|r|a|l|s| |*|)| +0#0000000&@52
+|0+0#e000002&|b|0|1@1|0|'|0@1|1@1|'|0|1@1|0|'|0@3|,+0#e000e06&| +0#0000000&|0+0#e000002&|u|0|A|,+0#e000e06&| +0#0000000&|0+0#e000002&|x|0|1|2|3|,+0#e000e06&| +0#0000000&|0+0#e000002&|x|C|A|F|E|'|D|0@1|D| +0#0000000&@26
|1+0#e000002&|'|0@2|'|0@2|.|0@1|,+0#e000e06&| +0#0000000&|1+0#e000002&|.|2|3|,+0#e000e06&| +0#0000000&|1+0#e000002&|.|2|3|e|+|1|0|,+0#e000e06&| +0#0000000&|1+0#e000002&|.|2|3|4|'|5|6|7|'|8|9|0|e|-|1|'|0@2| +0#0000000&@24
@75
@75
@@ -16,5 +17,4 @@
@75
@75
|(+0#0000e05&|*| |s|i|n|g|l|e| |l|i|n|e| |c|o|m@1|e|n|t| |*|)| +0#0000000&@49
-|!+0#0000e05&| |f|o@1| |b|a|r| |b|a|z| |b|a|m| |b|o@1| | +0#0000000&@52
-@57|5@1|,|1| @9|3|8|%|
+@57|5|4|,|1| @9|3|7|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_r10_04.dump b/runtime/syntax/testdir/dumps/modula2_r10_04.dump
index cd6436c..f0017ff 100644
--- a/runtime/syntax/testdir/dumps/modula2_r10_04.dump
+++ b/runtime/syntax/testdir/dumps/modula2_r10_04.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@74
+|(+0#0000e05#ffffff0|*| |s|i|n|g|l|e| |l|i|n|e| |c|o|m@1|e|n|t| |*|)| +0#0000000&@49
+|!+0#0000e05&| |f|o@1| |b|a|r| |b|a|z| |b|a|m| |b|o@1| | +0#0000000&@52
+@75
|(+0#0000e05&|*| |b|l|o|c|k| |c|o|m@1|e|n|t|s| |w|i|t|h| |e|m|p|h|a|s|i|s| |*|)| +0#0000000&@40
|(+0#0000e05&|*| |c+0#e000e06&|o|p|y|r|i|g|h|t| +0#0000e05&|(|c|)| |2|0|1|6| |M|o|d|u|l|a|-|2| |F|o|u|n|d|a|t|i|o|n|.| +0#0000000&@32
-| +0#0000e05&@2|a+0#e000e06&|u|t|h|o|r|s| +0#0000e05&|B|.|K|o|w|a|r|s|c|h| |a|n|d| |R|.|S|u|t|c|l|i|f@1|e| +0#0000000&@37
+| +0#0000e05&@2>a+0#e000e06&|u|t|h|o|r|s| +0#0000e05&|B|.|K|o|w|a|r|s|c|h| |a|n|d| |R|.|S|u|t|c|l|i|f@1|e| +0#0000000&@37
| +0#0000e05&@2|l+0#e000e06&|i|c|e|n|s|e| +0#0000e05&|s|e@1| |L|I|C|E|N|S|E| |*|)| +0#0000000&@49
-> @74
+@75
|(+0#0000e05&|*| |p+0#e000e06&|r|e|-|c|o|n|d|i|t|i|o|n|s|:| +0#0000e05&|f|o@1| |b|a|r| |b|a|z| |b|a|m| |b|o@1| |d|o@1|d|l|e| |w|a|h|.| +0#0000000&@24
| +0#0000e05&@2|p+0#e000e06&|o|s|t|-|c|o|n|d|i|t|i|o|n|s|:| +0#0000e05&|f|o@1|d|l|e| |b|a|b@1|l|e| |b|o|z|o| |b|i|m| |b|a|m| |d|a|n|g|.| +0#0000000&@22
| +0#0000e05&@2|e+0#e000e06&|r@1|o|r|-|c|o|n|d|i|t|i|o|n|s|:| +0#0000e05&|d|a|d|a| |j|i|n|g|l|e| |j|u|n|g|l|e| |b|o|g@1|l|e| |d|e@1| |b|o@1|.| |*|)| +0#0000000&@16
@@ -15,6 +17,4 @@
@75
|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|[+0#e000e06&|M+0#af5f00255&|O|D|]+0#e000e06&| +0#0000000&|m+0#00e0e07&|o|d|u|l|u|s| +0#0000000&|(+0#e000e06&| +0#0000000&|n|,+0#e000e06&| +0#0000000&|m| |:+0#e000e06&| +0#0000000&|I|N|T|6|4| |)+0#e000e06&| +0#0000000&|:+0#e000e06&| +0#0000000&|I|N|T|6|4|;+0#e000e06&| +0#0000000&@25
@75
-|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|[+0#e000e06&|R+0#af5f00255&|E|T|A|I|N|]+0#e000e06&| +0#0000000&|R+0#00e0e07&|e|t|a|i|n| +0#0000000&|(+0#e000e06&| +0#0000000&|f|o@1| |:+0#e000e06&| +0#0000000&|F|o@1| |)+0#e000e06&|;| +0#0000000&@34
-@75
-@57|7|3|,|0|-|1| @7|5|2|%|
+@57|7|1|,|4| @9|5|1|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_r10_05.dump b/runtime/syntax/testdir/dumps/modula2_r10_05.dump
index 2a8ae0c..6e1ac94 100644
--- a/runtime/syntax/testdir/dumps/modula2_r10_05.dump
+++ b/runtime/syntax/testdir/dumps/modula2_r10_05.dump
@@ -1,9 +1,11 @@
| +0&#ffffff0@74
-|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|[+0#e000e06&|L+0#00e0e07&|E|N|G|T|H|]+0#e000e06&| +0#0000000&|l+0#00e0e07&|e|n|g|t|h| +0#0000000&|(+0#e000e06&| +0#0000000&|s|t|r| |:+0#e000e06&| +0#0000000&|S|t|r|i|n|g| |)+0#e000e06&| +0#0000000&|:+0#e000e06&| +0#0000000&|L+0#00e0003&|O|N|G|C|A|R|D|;+0#e000e06&| +0#0000000&@20
+|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|[+0#e000e06&|R+0#af5f00255&|E|T|A|I|N|]+0#e000e06&| +0#0000000&|R+0#00e0e07&|e|t|a|i|n| +0#0000000&|(+0#e000e06&| +0#0000000&|f|o@1| |:+0#e000e06&| +0#0000000&|F|o@1| |)+0#e000e06&|;| +0#0000000&@34
@75
+|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|[+0#e000e06&|L+0#00e0e07&|E|N|G|T|H|]+0#e000e06&| +0#0000000&|l+0#00e0e07&|e|n|g|t|h| +0#0000000&|(+0#e000e06&| +0#0000000&|s|t|r| |:+0#e000e06&| +0#0000000&|S|t|r|i|n|g| |)+0#e000e06&| +0#0000000&|:+0#e000e06&| +0#0000000&|L+0#00e0003&|O|N|G|C|A|R|D|;+0#e000e06&| +0#0000000&@20
@75
+> @74
|(+0#0000e05&|*| |p|r|o|c|e|d|u|r|e|s| |*|)| +0#0000000&@58
->P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|N+0#00e0e07&|e|w|F|o@1|W|i|t|h|B|a|r| +0#0000000&|(+0#e000e06&| +0#0000000&|V+0#af5f00255&|A|R| +0#0000000&|f|o@1|:+0#e000e06&| +0#0000000&|F|o@1|;+0#e000e06&| +0#0000000&|b|a|r| |:+0#e000e06&| +0#0000000&|I+0#00e0003&|N|T|E|G|E|R| +0#0000000&|)+0#e000e06&|;| +0#0000000&@18
+|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|N+0#00e0e07&|e|w|F|o@1|W|i|t|h|B|a|r| +0#0000000&|(+0#e000e06&| +0#0000000&|V+0#af5f00255&|A|R| +0#0000000&|f|o@1|:+0#e000e06&| +0#0000000&|F|o@1|;+0#e000e06&| +0#0000000&|b|a|r| |:+0#e000e06&| +0#0000000&|I+0#00e0003&|N|T|E|G|E|R| +0#0000000&|)+0#e000e06&|;| +0#0000000&@18
|B+0#af5f00255&|E|G|I|N| +0#0000000&@69
@2|N+0#af5f00255&|E|W|(+0#e000e06&|f+0#0000000&|o@1|)+0#e000e06&|;| +0#0000000&@63
@2|f|o@1|^+0#e000e06&|.|b+0#0000000&|a|r| |:+0#e000e06&|=| +0#0000000&|b|a|r|;+0#e000e06&| +0#0000000&@56
@@ -15,6 +17,4 @@
|(+0#0000e05&|*| |f|u|n|c|t|i|o|n|s| |*|)| +0#0000000&@59
|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|(+0#e000e06&| +0#0000000&|f|o@1| |:+0#e000e06&| +0#0000000&|F|o@1| |)+0#e000e06&| +0#0000000&|:+0#e000e06&| +0#0000000&|I+0#00e0003&|N|T|E|G|E|R|;+0#e000e06&| +0#0000000&@36
|B+0#af5f00255&|E|G|I|N| +0#0000000&@69
-@2|I+0#af5f00255&|F| +0#0000000&|f|o@1| |=+0#e000e06&| +0#0000000&|N+0#e000002&|I|L| +0#0000000&|T+0#af5f00255&|H|E|N| +0#0000000&@55
-@4|U+0#00e0003&|N|S|A|F|E|.+0#e000e06&|H+0#00e0003&|A|L|T| +0#0000000&@59
-@57|9|1|,|1| @9|6@1|%|
+@57|8|9|,|0|-|1| @7|6|5|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_r10_06.dump b/runtime/syntax/testdir/dumps/modula2_r10_06.dump
index 68af55c..f28e65a 100644
--- a/runtime/syntax/testdir/dumps/modula2_r10_06.dump
+++ b/runtime/syntax/testdir/dumps/modula2_r10_06.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@3|U+0#00e0003&|N|S|A|F|E|.+0#e000e06&|H+0#00e0003&|A|L|T| +0#0000000&@59
+|B+0#af5f00255#ffffff0|E|G|I|N| +0#0000000&@69
+@2|I+0#af5f00255&|F| +0#0000000&|f|o@1| |=+0#e000e06&| +0#0000000&|N+0#e000002&|I|L| +0#0000000&|T+0#af5f00255&|H|E|N| +0#0000000&@55
+@4|U+0#00e0003&|N|S|A|F|E|.+0#e000e06&|H+0#00e0003&|A|L|T| +0#0000000&@59
@2|E+0#af5f00255&|L|S|E| +0#0000000&@68
@4|R+0#af5f00255&|E|T|U|R|N| +0#0000000&|f|o@1|^+0#e000e06&|.|b+0#0000000&|a|r| @55
-@2|E+0#af5f00255&|N|D| +0#0000000&|(+0#0000e05&|*| |I|F| |*|)| +0#0000000&@60
+@2>E+0#af5f00255&|N|D| +0#0000000&|(+0#0000e05&|*| |I|F| |*|)| +0#0000000&@60
|E+0#af5f00255&|N|D| +0#0000000&|b+0#00e0e07&|a|r|;+0#e000e06&| +0#0000000&@66
-> @74
+@75
@75
|(+0#0000e05&|*| |t|e|c|h|n|i|c|a|l| |d|e|b|t| |*|)| +0#0000000&@54
|T+0#af5f00255&|O| +0#0000000&|D+0#af5f00255&|O| +0#0000000&|(+0#e000e06&| +0#0000000&|1+0#e000002&|2|3|4|,+0#e000e06&| +0#0000000&|W|e|i|g|h|t|.+0#e000e06&|M+0#0000000&|a|j|o|r| |)+0#e000e06&| +0#0000000&|(+0#0000e05&|*| |f|o@1| |*|)| +0#0000000&@36
@@ -15,6 +17,4 @@
|P+0#af5f00255&|R|O|C|E|D|U|R|E| +0#0000000&|S+0#00e0e07&|e|t|B|a|b|a| +0#0000000&|<+0#e000e06&|*|D|E|P|R|E|C|A|T|E|D|*|>| +0#0000000&|(+0#e000e06&| +0#0000000&|n| |:+0#e000e06&| +0#0000000&|C+0#00e0003&|A|R|D|I|N|A|L| +0#0000000&|)+0#e000e06&|;| +0#0000000&@24
@75
@75
-|(+0#0000e05&|*| |d|i|s|a|b|l|e|d| |c|o|d|e| |*|)| +0#0000000&@55
-|?+0#4040ff13&|<| +0#0000000&@72
-@57|1|0|9|,|0|-|1| @6|8|1|%|
+@57|1|0|7|,|3| @8|7|9|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_r10_07.dump b/runtime/syntax/testdir/dumps/modula2_r10_07.dump
index 8f061fd..1b172da 100644
--- a/runtime/syntax/testdir/dumps/modula2_r10_07.dump
+++ b/runtime/syntax/testdir/dumps/modula2_r10_07.dump
@@ -1,9 +1,11 @@
-|?+0#4040ff13#ffffff0|<| +0#0000000&@72
+| +0&#ffffff0@74
+|(+0#0000e05&|*| |d|i|s|a|b|l|e|d| |c|o|d|e| |*|)| +0#0000000&@55
+|?+0#4040ff13&|<| +0#0000000&@72
|W+0#4040ff13&|H|I|L|E| |f|o@1| |=| |b|a|r| |D|O| +0#0000000&@56
| +0#4040ff13&@1|b|a|z|(|b|a|m|,| |b|o@1|)| +0#0000000&@59
-|E+0#4040ff13&|N|D| |(|*| |W|H|I|L|E| |*|)|;| +0#0000000&@58
+>E+0#4040ff13&|N|D| |(|*| |W|H|I|L|E| |*|)|;| +0#0000000&@58
|>+0#4040ff13&|?| +0#0000000&@72
-> @74
+@75
@75
|(+0#0000e05&|*| |i|l@1|e|g|a|l| |c|h|a|r|a|c|t|e|r|s| |*|)| +0#0000000&@50
|`+0#ffffff16#ff404010| +0#0000000#ffffff0@1|~+0#ffffff16#ff404010| +0#0000000#ffffff0@1|$+0#ffffff16#ff404010| +0#0000000#ffffff0@1|%+0#ffffff16#ff404010| +0#0000000#ffffff0@1|?+0#ffffff16#ff404010| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010| +0#0000000#ffffff0@58
@@ -15,6 +17,4 @@
|b+0#ffffff16#ff404010|a|r|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_| +0#0000000#ffffff0@26
@75
|_+0#ffffff16#ff404010@1|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@22
-@75
-|b+0#ffffff16#ff404010|a|r|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_@1| +0#0000000#ffffff0@22
-@57|1|2|7|,|0|-|1| @6|9|5|%|
+@57|1|2|5|,|1| @8|9|3|%|
diff --git a/runtime/syntax/testdir/dumps/modula2_r10_08.dump b/runtime/syntax/testdir/dumps/modula2_r10_08.dump
new file mode 100644
index 0000000..2eb82c1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/modula2_r10_08.dump
@@ -0,0 +1,20 @@
+|_+0#ffffff16#ff404010@1|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@22
+@75
+|b+0#ffffff16#ff404010|a|r|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_@1| +0#0000000#ffffff0@22
+@75
+|b+0#ffffff16#ff404010|a|r|_@1|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_@1|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1| +0#0000000#ffffff0@35
+> @74
+@75
+|(+0#0000e05&|*| |m|o|d|u|l|e| |e|n|d| |*|)| +0#0000000&@58
+|E+0#af5f00255&|N|D| +0#0000000&|F+0#00e0e07&|o@1|b|a|r|.+0#e000e06&| +0#0000000&@63
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|3|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/modula2_r10_99.dump b/runtime/syntax/testdir/dumps/modula2_r10_99.dump
deleted file mode 100644
index 067fb47..0000000
--- a/runtime/syntax/testdir/dumps/modula2_r10_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|(+0#0000e05&|*| |i|l@1|e|g|a|l| |c|h|a|r|a|c|t|e|r|s| |*|)| +0#0000000&@50
-|`+0#ffffff16#ff404010| +0#0000000#ffffff0@1|~+0#ffffff16#ff404010| +0#0000000#ffffff0@1|$+0#ffffff16#ff404010| +0#0000000#ffffff0@1|%+0#ffffff16#ff404010| +0#0000000#ffffff0@1|?+0#ffffff16#ff404010| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010| +0#0000000#ffffff0@58
-@75
-|(+0#0000e05&|*| |i|l@1|e|g|a|l| |i|d|e|n|t|i|f|i|e|r|s| |*|)| +0#0000000&@49
-@75
-|_+0#ffffff16#ff404010|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@26
-@75
-|b+0#ffffff16#ff404010|a|r|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_| +0#0000000#ffffff0@26
-@75
-|_+0#ffffff16#ff404010@1|b|a|r| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1| +0#0000000#ffffff0@22
-@75
-|b+0#ffffff16#ff404010|a|r|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_@1| +0#0000000#ffffff0@1|b+0#ffffff16#ff404010|a|r|_|b|a|z|_@1|b|a|m|_|b|o@1|_@1| +0#0000000#ffffff0@22
-@75
-|b+0#ffffff16#ff404010|a|r|_@1|b|a|z| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1|b|a|r|_@1|b|a|z|_@1| +0#0000000#ffffff0@1|_+0#ffffff16#ff404010@1| +0#0000000#ffffff0@35
-@75
-@75
-|(+0#0000e05&|*| |m|o|d|u|l|e| |e|n|d| |*|)| +0#0000000&@58
->E+0#af5f00255&|N|D| +0#0000000&|F+0#00e0e07&|o@1|b|a|r|.+0#e000e06&| +0#0000000&@63
-@57|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/progress_comments_00.dump b/runtime/syntax/testdir/dumps/progress_comments_00.dump
new file mode 100644
index 0000000..d0cff21
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/progress_comments_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0|*| +0#0000000&@72
+| +0#0000e05&|*| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |f|i|l|e|t|y|p|e|=|p|r|o|g|r|e|s@1| +0#0000000&@35
+| +0#0000e05&|*|/| +0#0000000&@71
+@75
+|d+0#af5f00255&|e|f|i|n|e| +0#0000000&|v+0#af5f00255&|a|r|i|a|b|l|e| +0#0000000&|c|u|s|t|o|m|e|r|_|n|a|m|e| |a+0#af5f00255&|s| +0#0000000&|c+0#af5f00255&|h|a|r|a|c|t|e|r| +0#0000000&|n+0#af5f00255&|o|-|u|n|d|o|.| +0#0000000&@23
+@75
+|/+0#0000e05&|*| |T|h|e| |t|e|s|t| |s|e|t|u|p| |a|b|o|v|e| |i|s| |a|n| |e|x|a|m|p|l|e| |o|f| |a| |m|u|l|t|i|-|l|i|n|e| |c|o|m@1|e|n|t|.| +0#0000000&@12
+|T+0#0000e05&|h|i|s| |i|s| |t|o@1|;| |t|h|e| |l|e|a|d|i|n|g| |*| |a|n|d| |l|e|f|t|-|h|a|n|d| |a|l|i|g|n|m|e|n|t| |a|r|e| |n|o|t| |r|e|q|u|i|r|e|d|.| |*|/| +0#0000000&@3
+|f+0#af5f00255&|o|r| +0#0000000&|e+0#af5f00255&|a|c|h| +0#0000000&|c|u|s|t|o|m|e|r| |n+0#af5f00255&|o|-|l|o|c|k| +0#0000000&@49
+@4|w+0#af5f00255&|h|e|r|e| +0#0000000&|c|u|s|t|o|m|e|r|.+0#af5f00255&|c+0#0000000&|u|s|t|o|m|e|r|_|i|d| |=+0#af5f00255&| +0#0000000&|1+0#e000002&|2|3|4|5| +0#0000000&@36
+|:+0#af5f00255&| +0#0000000&@73
+@4|a+0#af5f00255&|s@1|i|g|n| +0#0000000&|c|u|s|t|_|n|a|m|e| |=+0#af5f00255&| +0#0000000&|c|u|s|t|o|m|e|r|.+0#af5f00255&|c+0#0000000&|u|s|t|o|m|e|r|_|n|a|m|e|.+0#af5f00255&| +0#0000000&|/+0#0000e05&|*| |C|o|m@1|e|n|t|s| |c|a|n| |a|l|s|o| |a|p@1|e|a|r| +0#0000000&
+| +0#0000e05&@49|a|t| |t|h|e| |e|n|d| |o|f| |a| |l|i|n|e|.| |*|/| +0#0000000&
+|e+0#af5f00255&|n|d|.| +0#0000000&|/+0#0000e05&|*| |f|o|r| |e|a|c|h| |c|u|s|t|o|m|e|r| |*|/| +0#0000000&@46
+@75
+|/+0#0000e05&|*| |C|o|m@1|e|n|t|s| |c|a|n| |b|e| |/|*| |n|e|s|t|e|d| |*|/|.| |H|e|r|e|'|s| |t|h|e| |s|a|m|e| |q|u|e|r|y| |a|s| |a|b|o|v|e|,| |b|u|t| +0#0000000&@6
+|c+0#0000e05&|o|m@1|e|n|t|e|d| |o|u|t| |t|h|i|s| |t|i|m|e|:| +0#0000000&@50
+@75
+|f+0#0000e05&|o|r| |e|a|c|h| |c|u|s|t|o|m|e|r| |n|o|-|l|o|c|k| +0#0000000&@49
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/progress_comments_01.dump b/runtime/syntax/testdir/dumps/progress_comments_01.dump
new file mode 100644
index 0000000..11dc103
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/progress_comments_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|n|d|.| +0#0000000&|/+0#0000e05&|*| |f|o|r| |e|a|c|h| |c|u|s|t|o|m|e|r| |*|/| +0#0000000&@46
+@75
+|/+0#0000e05&|*| |C|o|m@1|e|n|t|s| |c|a|n| |b|e| |/|*| |n|e|s|t|e|d| |*|/|.| |H|e|r|e|'|s| |t|h|e| |s|a|m|e| |q|u|e|r|y| |a|s| |a|b|o|v|e|,| |b|u|t| +0#0000000&@6
+|c+0#0000e05&|o|m@1|e|n|t|e|d| |o|u|t| |t|h|i|s| |t|i|m|e|:| +0#0000000&@50
+@75
+>f+0#0000e05&|o|r| |e|a|c|h| |c|u|s|t|o|m|e|r| |n|o|-|l|o|c|k| +0#0000000&@49
+| +0#0000e05&@3|w|h|e|r|e| |c|u|s|t|o|m|e|r|.|c|u|s|t|o|m|e|r|_|i|d| |=| |1|2|3|4|5| +0#0000000&@36
+|:+0#0000e05&| +0#0000000&@73
+| +0#0000e05&@3|a|s@1|i|g|n| |c|u|s|t|_|n|a|m|e| |=| |c|u|s|t|o|m|e|r|.|c|u|s|t|o|m|e|r|_|n|a|m|e|.| |/|*| |C|o|m@1|e|n|t|s| |c|a|n| |a|l|s|o| |a|p@1|e|a|r| +0#0000000&
+| +0#0000e05&@49|a|t| |t|h|e| |e|n|d| |o|f| |a| |l|i|n|e|.| |*|/| +0#0000000&
+|e+0#0000e05&|n|d|.| |/|*| |f|o|r| |e|a|c|h| |c|u|s|t|o|m|e|r| |*|/| +0#0000000&@46
+@75
+|T+0#0000001#ffff4012|O|D|O|:+0#0000e05#ffffff0| |N|o|t|e| |t|h|a|t| |/|*|/| |d|o|e|s| |n|o|t| |e|n|d| |t|h|e| |c|o|m@1|e|n|t|,| |b|e|c|a|u|s|e| |i|t| |a|c|t|u|a|l@1|y| |s|t|a|r|t|s| |a| +0#0000000&
+|n+0#0000e05&|e|w| |c|o|m@1|e|n|t| |w|h|o|s|e| |f|i|r|s|t| |c|h|a|r|a|c|t|e|r| |i|s| |a| |'|/|'|.| |N|o|w| |w|e| |n|e@1|d| |t|w|o| |e|n|d|-|c|o|m@1|e|n|t| +0#0000000&@3
+|m+0#0000e05&|a|r|k|e|r|s| |t|o| |r|e|t|u|r|n| |t|o| |a|c|t|u|a|l| |c|o|d|e|.| |*|/| |*|/| +0#0000000&@35
+@75
+|d+0#af5f00255&|i|s|p|l|a|y| +0#0000000&|c|u|s|t|o|m|e|r|_|n|a|m|e|.+0#af5f00255&| +0#0000000&@52
+@75
+|/+0#0000e05&@1| |T|h|i|s| |i|s| |t|h|e| |s|i|n|g|l|e|-|l|i|n|e| |c|o|m@1|e|n|t| |s|y|n|t|a|x|.| +0#0000000&@32
+@57|1|9|,|1| @9|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/progress_comments_02.dump b/runtime/syntax/testdir/dumps/progress_comments_02.dump
new file mode 100644
index 0000000..1967476
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/progress_comments_02.dump
@@ -0,0 +1,20 @@
+|/+0#0000e05#ffffff0@1| |T|h|i|s| |i|s| |t|h|e| |s|i|n|g|l|e|-|l|i|n|e| |c|o|m@1|e|n|t| |s|y|n|t|a|x|.| +0#0000000&@32
+@75
+|/+0#0000e05&@1|N|o| |s|p|a|c|e| |i|s| |r|e|q|u|i|r|e|d| |a|f|t|e|r| |t|h|e| |s|l|a|s|h|e|s|.| |A|l|s|o|,| |a| |/|*| |h|e|r|e| |d|o|e|s| |n|o|t| |b|e|g|i|n| |a| +0#0000000&
+|/+0#0000e05&@1|n|e|w| |b|l|o|c|k| |c|o|m@1|e|n|t|.| +0#0000000&@54
+@75
+>f+0#af5f00255&|o|r| +0#0000000&|e+0#af5f00255&|a|c|h| +0#0000000&|s|u|p@1|l|i|e|r| |n+0#af5f00255&|o|-|l|o|c|k|:| +0#0000000&@48
+@4|/+0#0000e05&|*| |H|o|w|e|v|e|r|,| |a| |b|l|o|c|k| |c|o|m@1|e|n|t| |c|a|n| |e|n|d| |i|n|s|i|d|e| |(|w|h|a|t| |l|o@1|k|s| |l|i|k|e|)| |a| +0#0000000&@8
+| +0#0000e05&@6|s|i|n|g|l|e|-|l|i|n|e| |c|o|m@1|e|n|t|,| |b|e|c|a|u|s|e| |t|h|e| |s|l|a|s|h|e|s| |a|r|e| |j|u|s|t| |t|e|x|t| |a|s| |f|a|r| |a|s| |t|h|e
+| @6|/@1| |b|l|o|c|k| |c|o|m@1|e|n|t| |i|s| |c|o|n|c|e|r|n|e|d|.| |*|/| +0#0000000&@34
+@4|d+0#af5f00255&|i|s|p|l|a|y| +0#0000000&|s|u|p@1|l|i|e|r|.+0#af5f00255&| +0#0000000&@53
+@75
+@4|/+0#0000e05&@1| |T+0#0000001#ffff4012|O|D|O|:+0#0000e05#ffffff0| |O|b|s|e|r|v|e| |t|h|a|t| |t+0#0000001#ffff4012|o|d|o| +0#0000e05#ffffff0|h|i|g|h|l|i|g|h|t|i|n|g| |w|o|r|k|s| |i|n| |l|i|n|e| |c|o|m@1|e|n|t|s| |t|o@1|.| +0#0000000&@3
+|e+0#af5f00255&|n|d|.| +0#0000000&@70
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_01_99.dump b/runtime/syntax/testdir/dumps/sh_01_99.dump
deleted file mode 100644
index 687677e..0000000
--- a/runtime/syntax/testdir/dumps/sh_01_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|#+0#0000e05#ffffff0|!| |/|b|i|n|/|d|a|s|h| +0#0000000&@62
-|e+0#af5f00255&|x|p|o|r|t| +0#0000000&|`+0#e000e06&|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|A+0#e000002&|=|B|'+0#af5f00255&|`+0#e000e06&| +0#0000000&@55
-|p+0#af5f00255&|r|i|n|t|e|n|v| +0#0000000&|A| @64
->e+0#af5f00255&|c|h|o| +0#e000002&|a| |`+0#e000e06&|#+0#0000e05&|f|o@1|`+0#e000e06&| +0#0000000&|b| @59
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|:+0#0000000&|r|e|d|r|a|w| @49|4|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/sh_02_01.dump b/runtime/syntax/testdir/dumps/sh_02_01.dump
index 20930c8..2c09615 100644
--- a/runtime/syntax/testdir/dumps/sh_02_01.dump
+++ b/runtime/syntax/testdir/dumps/sh_02_01.dump
@@ -1,9 +1,10 @@
-|e+0#af5f00255#ffffff0|s|a|c| +0#0000000&@70
+|#+0#0000e05#ffffff0| |c|o|m@1|e|n|t| +0#0000000&@65
+|e+0#af5f00255&|s|a|c| +0#0000000&@70
@75
|#+0#0000e05&| |J|u|l| |2|6|,| |2|0|1|8|:| |w|h|y| |i|s|n|'|t| |`|.@1|`| |b|e|i|n|g| |t|e|r|m|i|n|a|t|e|d| |p|r|o|p|e|r|l|y|?| +0#0000000&@17
|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-|c+0#af5f00255&|a|s|e| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|a@2|"+0#af5f00255&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&@60
->#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
+>c+0#af5f00255&|a|s|e| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|a@2|"+0#af5f00255&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&@60
+|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
@8|b@2|)+0#af5f00255&| +0#0000000&@1|c+0#00e0e07&@2|=+0#0000000&|`+0#e000e06&|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|d@2||+0#af5f00255&|c+0#e000e06&|u|t| |-|b|4|-|`| +0#0000000&@36
@8|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|t+0#e000002&|e|s|t|"+0#af5f00255&| +0#0000000&@55
|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
@@ -16,5 +17,4 @@
|e+0#af5f00255&|x|p|o|r|t| +0#0000000&|$+0#e000e06&|V|A|R| +0#0000000&|a|b|c| @59
|s+0#af5f00255&|e|t| +0#00e0e07&@3|$+0#e000e06&|V|A|R| +0#00e0e07&|a|b|c| +0#0000000&@59
|~+0#4040ff13&| @73
-|~| @73
-| +0#0000000&@56|1|9|,|1| @9|B|o|t|
+| +0#0000000&@56|1|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_02_99.dump b/runtime/syntax/testdir/dumps/sh_02_99.dump
deleted file mode 100644
index a9902dd..0000000
--- a/runtime/syntax/testdir/dumps/sh_02_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@7|a|||b|||c|)+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|a|b|c| |;+0#af5f00255&@1| +0#0000000&@48
-|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-|e+0#af5f00255&|s|a|c| +0#0000000&@70
-@75
-|#+0#0000e05&| |J|u|l| |2|6|,| |2|0|1|8|:| |w|h|y| |i|s|n|'|t| |`|.@1|`| |b|e|i|n|g| |t|e|r|m|i|n|a|t|e|d| |p|r|o|p|e|r|l|y|?| +0#0000000&@17
-|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-|c+0#af5f00255&|a|s|e| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|a@2|"+0#af5f00255&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&@60
-|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-@8|b@2|)+0#af5f00255&| +0#0000000&@1|c+0#00e0e07&@2|=+0#0000000&|`+0#e000e06&|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|d@2||+0#af5f00255&|c+0#e000e06&|u|t| |-|b|4|-|`| +0#0000000&@36
-@8|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|t+0#e000002&|e|s|t|"+0#af5f00255&| +0#0000000&@55
-|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-@8|;+0#af5f00255&@1| +0#0000000&@64
-|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-@8|e+0#af5f00255&|s|a|c| +0#0000000&@62
-|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-@75
-|e+0#af5f00255&|c|h|o| +0#e000002&@2|$+0#e000e06&|V|A|R| +0#e000002&|a|b|c| +0#0000000&@59
-|e+0#af5f00255&|x|p|o|r|t| +0#0000000&|$+0#e000e06&|V|A|R| +0#0000000&|a|b|c| @59
->s+0#af5f00255&|e|t| +0#00e0e07&@3|$+0#e000e06&|V|A|R| +0#00e0e07&|a|b|c| +0#0000000&@59
-@57|3|0|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_03_01.dump b/runtime/syntax/testdir/dumps/sh_03_01.dump
index 1dc4664..3ac5b4b 100644
--- a/runtime/syntax/testdir/dumps/sh_03_01.dump
+++ b/runtime/syntax/testdir/dumps/sh_03_01.dump
@@ -1,9 +1,10 @@
-|#+0#0000e05#ffffff0| |T|h|i|s| |g|e|t|s| |m|a|r|k|e|d| |a|s| |a|n| |e|r@1|o|r| +0#0000000&@44
+| +0&#ffffff0@74
+|#+0#0000e05&| |T|h|i|s| |g|e|t|s| |m|a|r|k|e|d| |a|s| |a|n| |e|r@1|o|r| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|+|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@1| +0#0000000&@7|#+0#0000e05&| |:|+| |s|e@1|m|s| |t|o| |w|o|r|k| |f|o|r| |k|s|h|
|a|s| |w|e|l@1| |a|s| |b|a|s|h| +0#0000000&@59
|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&@1| +0#0000000&@7|#+0#0000e05&| |:|-| |i|s| |k|s|h| |a|n|d| |b|a|s|h| +0#0000000&@6
-@75
->#+0#0000e05&| |T|h|i|s| |i|s| |O|K| +0#0000000&@62
+> @74
+|#+0#0000e05&| |T|h|i|s| |i|s| |O|K| +0#0000000&@62
|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|'+0#af5f00255&|$+0#e000002&|{|V|a|r|i|a|b|l|e|B|:|+|$|{|V|a|r|i|a|b|l|e|C|:|=|e|n|g|}@1|'+0#af5f00255&| +0#0000000&@32
|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|'+0#af5f00255&|$+0#e000002&|{|V|a|r|i|a|b|l|e|B|:|-|$|{|V|a|r|i|a|b|l|e|C|:|-|e|n|g|}@1|'+0#af5f00255&| +0#0000000&@32
|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|+|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@1|"+0#af5f00255&| +0#0000000&@5|#+0#0000e05&| |:|+| |s|e@1|m|s| |t|o| |w|o|r|k| |f|o|r| |k|s|h|
@@ -16,5 +17,4 @@
|:+0#0000e05&| +0#0000000&|'+0#af5f00255&|$+0#e000002&|{|V|a|r|i|a|b|l|e|B|:|-|$|{|V|a|r|i|a|b|l|e|C|:|-|e|n|g|}@1|'+0#af5f00255&| +0#0000000&@39
@75
|#+0#0000e05&| |A|n|o|t|h|e|r| |t|e|s|t| +0#0000000&@60
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|D|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|E|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@3| +0#0000000&@6
-@57|1|9|,|1| @9|8|7|%|
+@57|1|8|,|0|-|1| @7|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/sh_03_02.dump b/runtime/syntax/testdir/dumps/sh_03_02.dump
new file mode 100644
index 0000000..6d03697
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/sh_03_02.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |A|n|o|t|h|e|r| |t|e|s|t| +0#0000000&@60
+|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|D|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|E|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@3| +0#0000000&@6
+@7|:+0#0000e05&| +0#0000000&@7|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|=|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|D|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|E|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@3
+> +0#0000000&@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3@1|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_03_99.dump b/runtime/syntax/testdir/dumps/sh_03_99.dump
deleted file mode 100644
index 3d796c6..0000000
--- a/runtime/syntax/testdir/dumps/sh_03_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&@1| +0#0000000&@7|#+0#0000e05&| |:|-| |i|s| |k|s|h| |a|n|d| |b|a|s|h| +0#0000000&@6
-@75
-|#+0#0000e05&| |T|h|i|s| |i|s| |O|K| +0#0000000&@62
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|'+0#af5f00255&|$+0#e000002&|{|V|a|r|i|a|b|l|e|B|:|+|$|{|V|a|r|i|a|b|l|e|C|:|=|e|n|g|}@1|'+0#af5f00255&| +0#0000000&@32
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|'+0#af5f00255&|$+0#e000002&|{|V|a|r|i|a|b|l|e|B|:|-|$|{|V|a|r|i|a|b|l|e|C|:|-|e|n|g|}@1|'+0#af5f00255&| +0#0000000&@32
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|+|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@1|"+0#af5f00255&| +0#0000000&@5|#+0#0000e05&| |:|+| |s|e@1|m|s| |t|o| |w|o|r|k| |f|o|r| |k|s|h|
-|a|s| |w|e|l@1| |a|s| |b|a|s|h| +0#0000000&@59
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&@1|"+0#af5f00255&| +0#0000000&@1|#+0#0000e05&| |:|-| |i|s| |k|s|h| |a|n|d| |b|a|s|h| +0#0000000&@10
-@75
-|#+0#0000e05&| |T|h|e|s|e| |a|r|e| |O|K| +0#0000000&@60
-|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&@1| +0#0000000&@41
-|:+0#0000e05&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&@1|"+0#af5f00255&| +0#0000000&@39
-|:+0#0000e05&| +0#0000000&|'+0#af5f00255&|$+0#e000002&|{|V|a|r|i|a|b|l|e|B|:|-|$|{|V|a|r|i|a|b|l|e|C|:|-|e|n|g|}@1|'+0#af5f00255&| +0#0000000&@39
-@75
-|#+0#0000e05&| |A|n|o|t|h|e|r| |t|e|s|t| +0#0000000&@60
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|D|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|E|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@3| +0#0000000&@6
-@7|:+0#0000e05&| +0#0000000&@7|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|=|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|D|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|E|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@3
-> +0#0000000&@74
-|~+0#4040ff13&| @73
-| +0#0000000&@56|3@1|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_04_99.dump b/runtime/syntax/testdir/dumps/sh_04_99.dump
deleted file mode 100644
index 54ea81a..0000000
--- a/runtime/syntax/testdir/dumps/sh_04_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|=|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|=|{+0#0000000&|V|a|r|3|:|=|$+0#e000e06&|{|V|a|r|4|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|5|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&@1|}+0#0000000&|}+0#e000e06&@1| +0#0000000&@8
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|=|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|=|{+0#0000000&|V|a|r|3|:|=|$+0#e000e06&|{|V|a|r|4|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|5|:+0#af5f00255&|-|$+0#e000e06&|V|a|r|6|}@1|}+0#0000000&|}+0#e000e06&@1| +0#0000000&@6
-@75
-|#+0#0000e05&| |T|h|e|s|e| |a|r|e| |O|K| +0#0000000&@60
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|{+0#0000000&|V|a|r|3|:|=|e|n|g|}|}+0#e000e06&@1|"+0#af5f00255&| +0#0000000&@24
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|=|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|=|{+0#0000000&|V|a|r|3|:|=|$+0#e000e06&|{|V|a|r|4|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&|}+0#0000000&|}+0#e000e06&@1|"+0#af5f00255&| +0#0000000&@15
-@75
-|#+0#0000e05&| |T|h|i|s| |g|e|t|s| |m|a|r|k|e|d| |a|s| |a|n| |e|r@1|o|r| |t|o@1| +0#0000000&@40
-|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|{+0#0000000&|V|a|r|3|:|=|e|n|g|}|}+0#e000e06&@1| +0#0000000&@33
-|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|=|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|=|{+0#0000000&|V|a|r|3|:|=|$+0#e000e06&|{|V|a|r|4|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&|}+0#0000000&|}+0#e000e06&@1| +0#0000000&@24
-@75
-|#+0#0000e05&| |T|h|i|s| |i|s| |O|K| +0#0000000&@62
-|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&@1| +0#0000000&@41
-|:+0#0000e05&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&@1|"+0#af5f00255&| +0#0000000&@39
-@75
-|#+0#0000e05&| |F|i|r|s|t| |l|i|n|e| |i|s| |O|K| |e|x|c|e|p|t| |i|t|s| |m|i|s@1|i|n|g| |a| |c|l|o|s|i|n|g| |"|}|"|,| +0#0000000&@22
-|#+0#0000e05&| |s|o| |s|e|c|o|n|d| |l|i|n|e| |s|h|o|u|l|d| |h|a|v|e| |s|o|m|e| |e|r@1|o|r| |h|i|g|h|l|i|g|h|t|i|n|g| +0#0000000&@22
-|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|=|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|=|{+0#0000000&|V|a|r|3|:|=|$+0#e000e06&|{|V|a|r|4|:+0#af5f00255&|-|e+0#0000000&|n|g|}+0#e000e06&|}+0#0000000&|}+0#e000e06&| +0#0000000&@18
->V+0#ffffff16#ff404010|a|r|i|a|b|l|e|=|$+0#e000e06#ffffff0|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|{+0#0000000&|V|a|r|3|:|=|e|n|g|}|}+0#e000e06&| +0#0000000&@27
-@57|2|7|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_05_02.dump b/runtime/syntax/testdir/dumps/sh_05_02.dump
index d4e7f9a..afcdd6f 100644
--- a/runtime/syntax/testdir/dumps/sh_05_02.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_02.dump
@@ -1,4 +1,5 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|`+0#e000e06&|i|d| |-|n|g| ||+0#af5f00255&| +0#e000e06&|w|c| |-|c|`| +0#0000000&@48
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|`+0#e000e06&|i|d| |-|n|g|`| +0#0000000&@56
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|`+0#e000e06&|i|d| |-|n|g| ||+0#af5f00255&| +0#e000e06&|w|c| |-|c|`| +0#0000000&@48
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
|#+0#0000e05&@74
@@ -16,5 +17,4 @@
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|'|e+0#e000002&|n|g|1|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
-@57|3|7|,|1| @10|9|%|
+@57|3|7|,|1| @10|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_03.dump b/runtime/syntax/testdir/dumps/sh_05_03.dump
index 2e369d8..a9cdad6 100644
--- a/runtime/syntax/testdir/dumps/sh_05_03.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_03.dump
@@ -1,9 +1,10 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
-|#+0#0000e05&| |C|a|s|e| |1|c| |w|i|t|h| |c|o|n|s|t|a|n|t|s| |i|n| |d|o|u|b|l|e| |q|u|o|t|e|s| +0#0000000&@33
->[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+>#+0#0000e05&| |C|a|s|e| |1|c| |w|i|t|h| |c|o|n|s|t|a|n|t|s| |i|n| |d|o|u|b|l|e| |q|u|o|t|e|s| +0#0000000&@33
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|"|e+0#e000002&|n|g|1|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|"|e+0#e000002&|n|g|2|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@44
@@ -16,5 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|?+0#af5f00255&|e+0#0000000&|n|g|3|}+0#e000e06&| +0#0000000&@47
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|++0#af5f00255&|e+0#0000000&|n|g|3|}+0#e000e06&| +0#0000000&@47
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|=+0#af5f00255&|'|e+0#e000002&|n|g|1|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
-|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
-@57|5@1|,|1| @9|1|3|%|
+@57|5|4|,|1| @9|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_04.dump b/runtime/syntax/testdir/dumps/sh_05_04.dump
index 27c821a..adfd7f9 100644
--- a/runtime/syntax/testdir/dumps/sh_05_04.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_04.dump
@@ -1,9 +1,10 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|=+0#af5f00255&|'|e+0#e000002&|n|g|1|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
+|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|?+0#af5f00255&|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|++0#af5f00255&|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|=+0#af5f00255&|"|e+0#e000002&|n|g|1|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
-|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|"|e+0#e000002&|n|g|2|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
->V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|?+0#af5f00255&|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
+>V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|"|e+0#e000002&|n|g|2|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|?+0#af5f00255&|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|++0#af5f00255&|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@45
@75
|#+0#0000e05&| |C|a|s|e| |2|a| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| +0#0000000&@49
@@ -16,5 +17,4 @@
@75
|#+0#0000e05&| |C|a|s|e| |2|b| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| |i|n| |s|i|n|g|l|e| |q|u|o|t|e|s| +0#0000000&@32
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@43
-@57|7|3|,|1| @9|1|8|%|
+@57|7|2|,|1| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_05.dump b/runtime/syntax/testdir/dumps/sh_05_05.dump
index 1eb0229..be0ac6e 100644
--- a/runtime/syntax/testdir/dumps/sh_05_05.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_05.dump
@@ -1,9 +1,10 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@43
+|[+0#af5f00255#ffffff0| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@43
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@43
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@43
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@43
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
-> @74
+>e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+@75
|#+0#0000e05&| |C|a|s|e| |2|c| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| |i|n| |d|o|u|b|l|e| |q|u|o|t|e|s| +0#0000000&@32
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@43
@@ -16,5 +17,4 @@
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
-@57|9|1|,|0|-|1| @7|2|4|%|
+@57|9|0|,|1| @9|2|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_06.dump b/runtime/syntax/testdir/dumps/sh_05_06.dump
index 46c4de0..9b912d2 100644
--- a/runtime/syntax/testdir/dumps/sh_05_06.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_06.dump
@@ -1,9 +1,10 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
-|#+0#0000e05&| |C|a|s|e| |3|b| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |o|p|t|i|o|n| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@28
->[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+>#+0#0000e05&| |C|a|s|e| |3|b| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |o|p|t|i|o|n| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&| +0#0000000&@42
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&| +0#0000000&@42
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&| +0#0000000&@42
@@ -16,5 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&| +0#0000000&@34
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&| +0#0000000&@34
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&| +0#0000000&@34
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
-@57|1|0|9|,|1| @8|2|9|%|
+@57|1|0|8|,|1| @8|2|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_07.dump b/runtime/syntax/testdir/dumps/sh_05_07.dump
index e1dc4ed..68a289b 100644
--- a/runtime/syntax/testdir/dumps/sh_05_07.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_07.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@74
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&| +0#0000000&@34
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+@75
|#+0#0000e05&@74
@5| +0#0000000&@69
-|#+0#0000e05&| +0#0000000&@73
+>#+0#0000e05&| +0#0000000&@73
|#+0#0000e05&| |T|h|e| |s|a|m|e| |w|i|t|h| |o|n|e| |n|e|s|t|e|t| |$|{|}| |l|e|v|e|l| +0#0000000&@38
->#+0#0000e05&| |C|a|s|e| |1|a| |w|i|t|h| |c|o|n|s|t|a|n|t|s| +0#0000000&@50
+|#+0#0000e05&| |C|a|s|e| |1|a| |w|i|t|h| |c|o|n|s|t|a|n|t|s| +0#0000000&@50
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|e+0#0000000&|n|g|1|}+0#e000e06&@1| +0#0000000&@37
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|e+0#0000000&|n|g|2|}+0#e000e06&@1| +0#0000000&@37
@@ -15,6 +17,4 @@
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|'|e+0#e000002&|n|g|1|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
-@57|1|2|7|,|1| @8|3|4|%|
+@57|1|2|5|,|1| @8|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_08.dump b/runtime/syntax/testdir/dumps/sh_05_08.dump
index dc77a9f..8ca73f9 100644
--- a/runtime/syntax/testdir/dumps/sh_05_08.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_08.dump
@@ -1,9 +1,11 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
-|#+0#0000e05&| |C|a|s|e| |1|c| |w|i|t|h| |c|o|n|s|t|a|n|t|s| |i|n| |d|o|u|b|l|e| |q|u|o|t|e|s| +0#0000000&@33
+>#+0#0000e05&| |C|a|s|e| |1|c| |w|i|t|h| |c|o|n|s|t|a|n|t|s| |i|n| |d|o|u|b|l|e| |q|u|o|t|e|s| +0#0000000&@33
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
->V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|"|e+0#e000002&|n|g|1|"+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|"|e+0#e000002&|n|g|1|"+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|"|e+0#e000002&|n|g|2|"+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@35
@@ -15,6 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|H|O|M|E|}@1| +0#0000000&@36
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|}@1| +0#0000000&@36
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|$+0#e000e06&|H|O|M|E|}@1| +0#0000000&@36
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
-@75
-@57|1|4|5|,|1| @8|3|9|%|
+@57|1|4|3|,|1| @8|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_09.dump b/runtime/syntax/testdir/dumps/sh_05_09.dump
index 944d7e3..d65302d 100644
--- a/runtime/syntax/testdir/dumps/sh_05_09.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_09.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@74
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|$+0#e000e06&|H|O|M|E|}@1| +0#0000000&@36
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+@75
|#+0#0000e05&| |C|a|s|e| |2|b| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| |i|n| |s|i|n|g|l|e| |q|u|o|t|e|s| +0#0000000&@32
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@34
+>V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@34
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@34
->V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@34
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@34
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@34
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
@@ -15,6 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@1| +0#0000000&@34
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
-|#+0#0000e05&| |C|a|s|e| |3|a| |w|i|t|h| |a| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@37
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-@57|1|6|3|,|1| @8|4@1|%|
+@57|1|6|1|,|1| @8|4|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_10.dump b/runtime/syntax/testdir/dumps/sh_05_10.dump
index 43639c8..46b5680 100644
--- a/runtime/syntax/testdir/dumps/sh_05_10.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_10.dump
@@ -1,9 +1,11 @@
-|[+0#af5f00255#ffffff0| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+| +0&#ffffff0@74
+|#+0#0000e05&| |C|a|s|e| |3|a| |w|i|t|h| |a| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@37
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@1| +0#0000000&@35
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@1| +0#0000000&@35
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@1| +0#0000000&@35
+>V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@1| +0#0000000&@35
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@1| +0#0000000&@35
->e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
|#+0#0000e05&| |C|a|s|e| |3|b| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |o|p|t|i|o|n| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@28
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
@@ -15,6 +17,4 @@
@75
|#+0#0000e05&| |C|a|s|e| |3|c| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |p|i|p|e| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@30
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@1| +0#0000000&@25
-|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@1| +0#0000000&@25
-@57|1|8|1|,|1| @8|4|9|%|
+@57|1|7|9|,|1| @8|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_11.dump b/runtime/syntax/testdir/dumps/sh_05_11.dump
index 2ba00e3..ef496d1 100644
--- a/runtime/syntax/testdir/dumps/sh_05_11.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_11.dump
@@ -1,9 +1,11 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@1| +0#0000000&@25
+|[+0#af5f00255#ffffff0| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|=|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@1| +0#0000000&@25
+|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@1| +0#0000000&@25
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@1| +0#0000000&@25
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|+|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@1| +0#0000000&@25
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+>e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
->#+0#0000e05&@74
+|#+0#0000e05&@74
@5| +0#0000000&@69
|#+0#0000e05&| +0#0000000&@73
|#+0#0000e05&| |T|h|e| |s|a|m|e| |w|i|t|h| |t|w|o| |n|e|s|t|e|t| |$|{|}| |l|e|v|e|l| +0#0000000&@38
@@ -15,6 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|e+0#0000000&|n|g|3|}+0#e000e06&@2| +0#0000000&@28
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
-|#+0#0000e05&| |C|a|s|e| |1|b| |w|i|t|h| |c|o|n|s|t|a|n|t|s| |i|n| |s|i|n|g|l|e| |q|u|o|t|e|s| +0#0000000&@33
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-@57|1|9@1|,|1| @8|5|4|%|
+@57|1|9|7|,|1| @8|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_12.dump b/runtime/syntax/testdir/dumps/sh_05_12.dump
index 2300b7d..48b312d 100644
--- a/runtime/syntax/testdir/dumps/sh_05_12.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_12.dump
@@ -1,9 +1,12 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|'|e+0#e000002&|n|g|1|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@26
+| +0&#ffffff0@74
+|#+0#0000e05&| |C|a|s|e| |1|b| |w|i|t|h| |c|o|n|s|t|a|n|t|s| |i|n| |s|i|n|g|l|e| |q|u|o|t|e|s| +0#0000000&@33
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|'|e+0#e000002&|n|g|1|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@26
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@26
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@26
+>V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@26
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@26
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
-> @74
+@75
|#+0#0000e05&| |C|a|s|e| |1|c| |w|i|t|h| |c|o|n|s|t|a|n|t|s| |i|n| |d|o|u|b|l|e| |q|u|o|t|e|s| +0#0000000&@33
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|"|e+0#e000002&|n|g|1|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@26
@@ -14,7 +17,4 @@
@75
|#+0#0000e05&| |C|a|s|e| |2|a| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| +0#0000000&@49
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|$+0#e000e06&|H|O|M|E|}@2| +0#0000000&@27
-|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|H|O|M|E|}@2| +0#0000000&@27
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|}@2| +0#0000000&@27
-@57|2|1|7|,|0|-|1| @6|5|9|%|
+@57|2|1|4|,|1| @8|5|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_13.dump b/runtime/syntax/testdir/dumps/sh_05_13.dump
index 71e0e78..da79761 100644
--- a/runtime/syntax/testdir/dumps/sh_05_13.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_13.dump
@@ -1,9 +1,12 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|}@2| +0#0000000&@27
+|[+0#af5f00255#ffffff0| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|$+0#e000e06&|H|O|M|E|}@2| +0#0000000&@27
+|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|H|O|M|E|}@2| +0#0000000&@27
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|}@2| +0#0000000&@27
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|$+0#e000e06&|H|O|M|E|}@2| +0#0000000&@27
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+>e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
|#+0#0000e05&| |C|a|s|e| |2|b| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| |i|n| |s|i|n|g|l|e| |q|u|o|t|e|s| +0#0000000&@32
->[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
@@ -14,7 +17,4 @@
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
-@57|2|3|5|,|1| @8|6|4|%|
+@57|2|3|2|,|1| @8|6|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_14.dump b/runtime/syntax/testdir/dumps/sh_05_14.dump
index d16e2e0..82da979 100644
--- a/runtime/syntax/testdir/dumps/sh_05_14.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_14.dump
@@ -1,9 +1,12 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@2| +0#0000000&@25
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
-@75
+> @74
|#+0#0000e05&| |C|a|s|e| |3|a| |w|i|t|h| |a| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@37
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
->V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@2| +0#0000000&@26
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@2| +0#0000000&@26
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@2| +0#0000000&@26
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@2| +0#0000000&@26
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@2| +0#0000000&@26
@@ -14,7 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@2| +0#0000000&@24
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@2| +0#0000000&@24
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@2| +0#0000000&@24
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@2| +0#0000000&@24
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
-@75
-@57|2|5|3|,|1| @8|6|9|%|
+@57|2|5|0|,|0|-|1| @6|6|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_15.dump b/runtime/syntax/testdir/dumps/sh_05_15.dump
index c9abc7c..6c4e887 100644
--- a/runtime/syntax/testdir/dumps/sh_05_15.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_15.dump
@@ -1,9 +1,12 @@
-| +0&#ffffff0@74
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@2| +0#0000000&@24
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@2| +0#0000000&@24
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+@75
|#+0#0000e05&| |C|a|s|e| |3|c| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |p|i|p|e| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@30
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+>[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|=|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@2| +0#0000000&@16
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@2| +0#0000000&@16
->V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@2| +0#0000000&@16
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@2| +0#0000000&@16
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|+|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@2| +0#0000000&@16
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
@@ -14,7 +17,4 @@
|#+0#0000e05&| |T|h|e| |s|a|m|e| |w|i|t|h| |t|h|r|e@1| |n|e|s|t|e|t| |$|{|}| |l|e|v|e|l| +0#0000000&@36
|#+0#0000e05&| |C|a|s|e| |1|a| |w|i|t|h| |c|o|n|s|t|a|n|t|s| +0#0000000&@50
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|e+0#0000000&|n|g|1|}+0#e000e06&@3| +0#0000000&@19
-|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|e+0#0000000&|n|g|2|}+0#e000e06&@3| +0#0000000&@19
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|e+0#0000000&|n|g|3|}+0#e000e06&@3| +0#0000000&@19
-@57|2|7|1|,|1| @8|7|4|%|
+@57|2|6|8|,|1| @8|7|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_16.dump b/runtime/syntax/testdir/dumps/sh_05_16.dump
index 198e0b7..784dade 100644
--- a/runtime/syntax/testdir/dumps/sh_05_16.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_16.dump
@@ -1,9 +1,13 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|e+0#0000000&|n|g|3|}+0#e000e06&@3| +0#0000000&@19
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+|[+0#af5f00255#ffffff0| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|e+0#0000000&|n|g|1|}+0#e000e06&@3| +0#0000000&@19
+|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|e+0#0000000&|n|g|2|}+0#e000e06&@3| +0#0000000&@19
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|e+0#0000000&|n|g|3|}+0#e000e06&@3| +0#0000000&@19
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|e+0#0000000&|n|g|3|}+0#e000e06&@3| +0#0000000&@19
+>e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
|#+0#0000e05&| |C|a|s|e| |1|b| |w|i|t|h| |c|o|n|s|t|a|n|t|s| |i|n| |s|i|n|g|l|e| |q|u|o|t|e|s| +0#0000000&@33
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
->V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|'|e+0#e000002&|n|g|1|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|'|e+0#e000002&|n|g|1|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|'|e+0#e000002&|n|g|2|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|'|e+0#e000002&|n|g|3|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
@@ -13,8 +17,4 @@
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|"|e+0#e000002&|n|g|1|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|"|e+0#e000002&|n|g|2|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
-@75
-@57|2|8|9|,|1| @8|7|9|%|
+@57|2|8|5|,|1| @8|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_17.dump b/runtime/syntax/testdir/dumps/sh_05_17.dump
index b282e4d..e64f01a 100644
--- a/runtime/syntax/testdir/dumps/sh_05_17.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_17.dump
@@ -1,9 +1,13 @@
-| +0&#ffffff0@74
-|#+0#0000e05&| |C|a|s|e| |2|a| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| +0#0000000&@49
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|"|e+0#e000002&|n|g|2|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|"|e+0#e000002&|n|g|3|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@17
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+@75
+>#+0#0000e05&| |C|a|s|e| |2|a| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| +0#0000000&@49
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|$+0#e000e06&|H|O|M|E|}@3| +0#0000000&@18
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|$+0#e000e06&|H|O|M|E|}@3| +0#0000000&@18
->V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|}@3| +0#0000000&@18
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|}@3| +0#0000000&@18
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|$+0#e000e06&|H|O|M|E|}@3| +0#0000000&@18
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
@@ -13,8 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
-@75
-|#+0#0000e05&| |C|a|s|e| |2|c| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| |i|n| |d|o|u|b|l|e| |q|u|o|t|e|s| +0#0000000&@32
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-@57|3|0|7|,|1| @8|8|5|%|
+@57|3|0|3|,|1| @8|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_18.dump b/runtime/syntax/testdir/dumps/sh_05_18.dump
index ef1e618..bd8516b 100644
--- a/runtime/syntax/testdir/dumps/sh_05_18.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_18.dump
@@ -1,9 +1,13 @@
-|[+0#af5f00255#ffffff0| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|'|$+0#e000002&|H|O|M|E|'+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+@75
+|#+0#0000e05&| |C|a|s|e| |2|c| |w|i|t|h| |a| |v|a|r|i|a|b|l|e| |i|n| |d|o|u|b|l|e| |q|u|o|t|e|s| +0#0000000&@32
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+>V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|"|$+0#e000e06&|H|O|M|E|"+0#af5f00255&|}+0#e000e06&@3| +0#0000000&@16
->e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
|#+0#0000e05&| |C|a|s|e| |3|a| |w|i|t|h| |a| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@37
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
@@ -13,8 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|`+0#0000000&|d|a|t|e|`|}+0#e000e06&@3| +0#0000000&@17
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
-|#+0#0000e05&| |C|a|s|e| |3|b| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |o|p|t|i|o|n| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@28
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@3| +0#0000000&@15
-|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@3| +0#0000000&@15
-@57|3|2|5|,|1| @8|9|0|%|
+@57|3|2|1|,|1| @8|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_19.dump b/runtime/syntax/testdir/dumps/sh_05_19.dump
index 05b9e3d..f2ceecc 100644
--- a/runtime/syntax/testdir/dumps/sh_05_19.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_19.dump
@@ -1,9 +1,13 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@3| +0#0000000&@15
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@3| +0#0000000&@15
+| +0&#ffffff0@74
+|#+0#0000e05&| |C|a|s|e| |3|b| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |o|p|t|i|o|n| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@3| +0#0000000&@15
+|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@3| +0#0000000&@15
+>V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|?|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@3| +0#0000000&@15
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|+|`+0#0000000&|i|d| |-|n|g|`|}+0#e000e06&@3| +0#0000000&@15
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
->#+0#0000e05&| |C|a|s|e| |3|c| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |p|i|p|e| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@30
+|#+0#0000e05&| |C|a|s|e| |3|c| |w|i|t|h| |a| |c|o|m@1|a|n|d| |+| |p|i|p|e| |s|u|b|s|t|i|t|u|t|i|o|n| +0#0000000&@30
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|=|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@3| +0#0000000&@7
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|D|:+0#af5f00255&|-|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@3| +0#0000000&@7
@@ -12,9 +16,5 @@
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
@75
-|#+0#0000e05&@74
-@5| +0#0000000&@69
-|#+0#0000e05&| +0#0000000&@73
-|#+0#0000e05&| |T|h|i|s| |i|s| |a|l|s|o| |a|l@1|o|w|e|d|:| +0#0000000&@51
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|$+0#e000e06&|{|V|a|r|B|-+0#af5f00255&|$+0#e000e06&|{|V|a|r|C|-+0#af5f00255&|$+0#e000e06&|{|V|a|r|D|=+0#af5f00255&|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@3| +0#0000000&@11
-@57|3|4|3|,|1| @8|9|4|%|
+|#+0#0000e05&@71|@+0#4040ff13&@2
+| +0#0000000&@56|3@1|9|,|1| @8|9|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_20.dump b/runtime/syntax/testdir/dumps/sh_05_20.dump
index 5316887..1c6647a 100644
--- a/runtime/syntax/testdir/dumps/sh_05_20.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_20.dump
@@ -1,9 +1,15 @@
|#+0#0000e05#ffffff0@74
@5| +0#0000000&@69
|#+0#0000e05&| +0#0000000&@73
+|#+0#0000e05&| |T|h|i|s| |i|s| |a|l|s|o| |a|l@1|o|w|e|d|:| +0#0000000&@51
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|$+0#e000e06&|{|V|a|r|B|-+0#af5f00255&|$+0#e000e06&|{|V|a|r|C|-+0#af5f00255&|$+0#e000e06&|{|V|a|r|D|=+0#af5f00255&|`+0#0000000&|i|d| |-|n|g| ||| |w|c| |-|c|`|}+0#e000e06&@3| +0#0000000&@11
+> @74
+|#+0#0000e05&@74
+@5| +0#0000000&@69
+|#+0#0000e05&| +0#0000000&@73
|#+0#0000e05&| |A|l@1| |c|a|s|e|s| |w|i|t|h| |$|{|V|a|r|:|?|}| |w|h|i|c|h| |w|o|r|k|s| |f|o|r| |t|h|e| |s|h|:| +0#0000000&@25
|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|}+0#e000e06&| +0#0000000&@50
->V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|O+0#0000000&|K|}+0#e000e06&| +0#0000000&@48
+|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|O+0#0000000&|K|}+0#e000e06&| +0#0000000&@48
|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|'|a+0#e000002&|n| |O|K| |s|t|r|i|n|g|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@36
|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|"|a+0#e000002&|n| |O|K| |s|t|r|i|n|g|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@36
@@ -11,10 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|:+0#0000000&|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@38
@75
|#+0#0000e05&| |A|l@1| |c|a|s|e|s| |w|i|t|h| |$|{|V|a|r|:|?|}| |w|h|i|c|h| |w|o|r|k|s| |a|l|s|o| |f|o|r| |k|s|h|:| +0#0000000&@23
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |O|K|}+0#e000e06&| +0#0000000&@40
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |O|K|,| |t|o@1|:| |`|d|a|t|e|`|}+0#e000e06&| +0#0000000&@27
-@75
-|#+0#0000e05&| |W|h|a|t| |h|a|p@1|e|n|s| |w|i|t|h| |$|{|#|i|d|e|n|t|i|f|i|e|r|[|*|]|}|:| +0#0000000&@36
-|V+0#00e0e07&|a|r|i|a|b|l|e|5|=+0#0000000&|$+0#e000e06&|{|#|i|d|e|n|t|i|f|i|e|r|[|*+0#0000000&|]+0#e000e06&|}| +0#0000000&@47
-|~+0#4040ff13&| @73
-| +0#0000000&@56|3|6|1|,|1| @8|B|o|t|
+@57|3|5|6|,|0|-|1| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_21.dump b/runtime/syntax/testdir/dumps/sh_05_21.dump
new file mode 100644
index 0000000..25a9ab8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/sh_05_21.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |A|l@1| |c|a|s|e|s| |w|i|t|h| |$|{|V|a|r|:|?|}| |w|h|i|c|h| |w|o|r|k|s| |a|l|s|o| |f|o|r| |k|s|h|:| +0#0000000&@23
+|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |O|K|}+0#e000e06&| +0#0000000&@40
+|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |O|K|,| |t|o@1|:| |`|d|a|t|e|`|}+0#e000e06&| +0#0000000&@27
+@75
+|#+0#0000e05&| |W|h|a|t| |h|a|p@1|e|n|s| |w|i|t|h| |$|{|#|i|d|e|n|t|i|f|i|e|r|[|*|]|}|:| +0#0000000&@36
+>V+0#00e0e07&|a|r|i|a|b|l|e|5|=+0#0000000&|$+0#e000e06&|{|#|i|d|e|n|t|i|f|i|e|r|[|*+0#0000000&|]+0#e000e06&|}| +0#0000000&@47
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_05_99.dump b/runtime/syntax/testdir/dumps/sh_05_99.dump
deleted file mode 100644
index c3d20b5..0000000
--- a/runtime/syntax/testdir/dumps/sh_05_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|#+0#0000e05&@74
-@5| +0#0000000&@69
-|#+0#0000e05&| +0#0000000&@73
-|#+0#0000e05&| |A|l@1| |c|a|s|e|s| |w|i|t|h| |$|{|V|a|r|:|?|}| |w|h|i|c|h| |w|o|r|k|s| |f|o|r| |t|h|e| |s|h|:| +0#0000000&@25
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|}+0#e000e06&| +0#0000000&@50
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|O+0#0000000&|K|}+0#e000e06&| +0#0000000&@48
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|`+0#0000000&|d|a|t|e|`|}+0#e000e06&| +0#0000000&@44
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|'|a+0#e000002&|n| |O|K| |s|t|r|i|n|g|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@36
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|"|a+0#e000002&|n| |O|K| |s|t|r|i|n|g|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@36
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|$|S|H|E|L@1|}| +0#0000000&@39
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E|:+0#0000000&|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@38
-@75
-|#+0#0000e05&| |A|l@1| |c|a|s|e|s| |w|i|t|h| |$|{|V|a|r|:|?|}| |w|h|i|c|h| |w|o|r|k|s| |a|l|s|o| |f|o|r| |k|s|h|:| +0#0000000&@23
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |O|K|}+0#e000e06&| +0#0000000&@40
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |O|K|,| |t|o@1|:| |`|d|a|t|e|`|}+0#e000e06&| +0#0000000&@27
-@75
-|#+0#0000e05&| |W|h|a|t| |h|a|p@1|e|n|s| |w|i|t|h| |$|{|#|i|d|e|n|t|i|f|i|e|r|[|*|]|}|:| +0#0000000&@36
->V+0#00e0e07&|a|r|i|a|b|l|e|5|=+0#0000000&|$+0#e000e06&|{|#|i|d|e|n|t|i|f|i|e|r|[|*+0#0000000&|]+0#e000e06&|}| +0#0000000&@47
-@57|3|7|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_06_01.dump b/runtime/syntax/testdir/dumps/sh_06_01.dump
index e71380e..5eea543 100644
--- a/runtime/syntax/testdir/dumps/sh_06_01.dump
+++ b/runtime/syntax/testdir/dumps/sh_06_01.dump
@@ -1,9 +1,11 @@
-|#+0#0000e05#ffffff0| |d|o|e|s| |t|h|i|s| |c|o|m@1|e|n|t| |w|o|r|k|?| +0#0000000&@49
+|U+0#00e0e07#ffffff0|s|a|g|e| |(|)| |{| +0#0000000&@64
+@75
+|#+0#0000e05&| |d|o|e|s| |t|h|i|s| |c|o|m@1|e|n|t| |w|o|r|k|?| +0#0000000&@49
|V+0#00e0e07&|a|r|i|a|b|l|e|N|a|m|e|=+0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|B|a|s|i|c|C|o|n|f|i|g|N|a|m|e|}|_+0#e000002&|*|"+0#af5f00255&| +0#0000000&@39
@75
-|#+0#0000e05&| |E|c|h|o| |s|o|m|e| |k|s|h| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@41
+>#+0#0000e05&| |E|c|h|o| |s|o|m|e| |k|s|h| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@41
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|C+0#e000002&|D|P|A|T|H|=|"+0#af5f00255&|$+0#e000e06&|{|C|D|P|A|T|H|}| +0#0000000&@51
-> @74
+@75
|#+0#0000e05&| |G|e|t| |a|l|s|o| |a| |s|h|o|r|t| |d|e|s|c|r|i|p|t|i|o|n| |o|f| |t|h|e| |b|a|c|k|u|p|t|y|p|e|/|m|e|t|h|o|d| +0#0000000&@19
|e+0#af5f00255&|v|a|l| +0#0000000&|B+0#00e0e07&|a|c|k|u|p|M|e|t|h|o|d|=+0#0000000&|\+0#e000e06&|$|m+0#0000000&|e|s@1|0|9|$+0#e000e06&|{|B|a|c|k|u|p|T|y|p|e|}|B+0#0000000&| @34
@75
@@ -15,6 +17,4 @@
|#+0#0000e05&| |I|f| |w|e| |h|a|v|e| |m|o|r|e| |t|h|e| |5|3| |c|h|a|r|a|c|t|e|r|s| |i|n| |t|h|e| |v|a|r|i|a|b|l|e|s| |b|e|l|o|w| |s|p|l|i|t| |t|h|e|m| |u|p| +0#0000000&@2
|#+0#0000e05&| |i|n|t|o| |s|e|v|e|r|a|l| |l|i|n|e|s| |a|n|d| |a|d@1| |3| |t|a|b|s| |b|e|f|o|r|e| |t|h|e|m| +0#0000000&@27
|f+0#af5f00255&|o|r| +0#0000000&|V|a|r|i|a|b|l|e| |i+0#af5f00255&|n| +0#0000000&|D|e|f|a|u|l|t|E|x|c|l|u|d|e| |D|e|f|a|u|l|t|F|i|n|d|O|p|t|i|o|n| |D|o|N|o|t|B|a|c|k|u|p|L|i|s|t| @10
-|d+0#af5f00255&|o| +0#0000000&@72
-@4|e+0#af5f00255&|v|a|l| +0#0000000&|V+0#00e0e07&|a|r|V|a|l|u|e|=+0#0000000&|\+0#e000e06&|$@1|V|a|r|i|a|b|l|e| +0#0000000&@45
-@57|1|9|,|0|-|1| @7|2|5|%|
+@57|1|7|,|1| @9|2|1|%|
diff --git a/runtime/syntax/testdir/dumps/sh_06_02.dump b/runtime/syntax/testdir/dumps/sh_06_02.dump
index 029ba13..0177aff 100644
--- a/runtime/syntax/testdir/dumps/sh_06_02.dump
+++ b/runtime/syntax/testdir/dumps/sh_06_02.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@3|e+0#af5f00255&|v|a|l| +0#0000000&|V+0#00e0e07&|a|r|V|a|l|u|e|=+0#0000000&|\+0#e000e06&|$@1|V|a|r|i|a|b|l|e| +0#0000000&@45
+|f+0#af5f00255#ffffff0|o|r| +0#0000000&|V|a|r|i|a|b|l|e| |i+0#af5f00255&|n| +0#0000000&|D|e|f|a|u|l|t|E|x|c|l|u|d|e| |D|e|f|a|u|l|t|F|i|n|d|O|p|t|i|o|n| |D|o|N|o|t|B|a|c|k|u|p|L|i|s|t| @10
+|d+0#af5f00255&|o| +0#0000000&@72
+@4|e+0#af5f00255&|v|a|l| +0#0000000&|V+0#00e0e07&|a|r|V|a|l|u|e|=+0#0000000&|\+0#e000e06&|$@1|V|a|r|i|a|b|l|e| +0#0000000&@45
@4|V+0#00e0e07&|a|r|V|a|l|u|e|=+0#0000000&|`+0#e000e06&|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|V|a|r|V|a|l|u|e| +0#e000002&||+0#af5f00255&| +0#e000e06&|F|o|l|d|S| |5+0#e000002&|3| +0#e000e06&||+0#af5f00255&| +0#e000e06&|s+0#af5f00255&|e|d| +0#e000e06&|"+0#af5f00255&|2+0#e000002&|,|\+0#e000e06&@1|$|s|/+0#e000002&|^|/|$+0#e000e06&|T|a|b|$|T|a|b|$|T|a|b|/+0#e000002&|"+0#af5f00255&|`+0#e000e06&| +0#0000000&@3
@4|e+0#af5f00255&|v|a|l| +0#0000000&|$+0#e000e06&|V|a|r|i|a|b|l|e|=+0#af5f00255&|\+0#e000e06&|$|V+0#0000000&|a|r|V|a|l|u|e| @45
-|d+0#af5f00255&|o|n|e| +0#0000000&@70
+>d+0#af5f00255&|o|n|e| +0#0000000&@70
@75
->e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&| +0#0000000&@68
|U+0#e000002&|s|a|g|e|:| @1|$+0#e000e06&|S|c|r|i|p|t|N|a|m|e| +0#e000002&|[|-|O|p|t|i|o|n|s|]| +0#0000000&@44
@75
|O+0#e000002&|p|t|i|o|n|s| |L|i|s|t|:| +0#0000000&@61
@@ -15,6 +17,4 @@
|}+0#00e0e07&| +0#0000000&|#+0#0000e05&| |E|n|d| |o|f| |U|s|a|g|e| +0#0000000&@58
@75
@75
-|#+0#0000e05&@74
-@5| +0#0000000&@69
-@57|3|7|,|1| @9|5|8|%|
+@57|3|5|,|1| @9|5@1|%|
diff --git a/runtime/syntax/testdir/dumps/sh_06_03.dump b/runtime/syntax/testdir/dumps/sh_06_03.dump
index 2f22cde..b4b3a5c 100644
--- a/runtime/syntax/testdir/dumps/sh_06_03.dump
+++ b/runtime/syntax/testdir/dumps/sh_06_03.dump
@@ -1,9 +1,12 @@
-|#+0#0000e05#ffffff0| +0#0000000&@73
-|#+0#0000e05&| |C|r|e|a|t|e| |a| |b|a|c|k|u|p| |u|s|i|n|g| |f|b|a|c|k|u|p|/|f|r|e|c|o|v|e|r| +0#0000000&@34
+| +0&#ffffff0@74
+|#+0#0000e05&@74
+@5| +0#0000000&@69
|#+0#0000e05&| +0#0000000&@73
+|#+0#0000e05&| |C|r|e|a|t|e| |a| |b|a|c|k|u|p| |u|s|i|n|g| |f|b|a|c|k|u|p|/|f|r|e|c|o|v|e|r| +0#0000000&@34
+>#+0#0000e05&| +0#0000000&@73
|E+0#00e0e07&|x|e|c|u|t|e|F|b|a|c|k|u|p| |(|)| |{| +0#0000000&|#+0#0000e05&| |T|E|S|T|I|N|G| +0#0000000&@45
@75
->[+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|D|e|b|u|g|S|c|r|i|p|t|"+0#af5f00255&| +0#0000000&|]+0#af5f00255&| +0#0000000&@3|&+0#af5f00255&@1| +0#0000000&|s+0#af5f00255&|e|t| +0#00e0e07&|-+0#e000e06&|x| +0#00e0e07&||+0#af5f00255&@1| +0#0000000&|s+0#af5f00255&|e|t| +0#00e0e07&|++0#e000e06&|x| +0#0000000&@33
+|[+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|D|e|b|u|g|S|c|r|i|p|t|"+0#af5f00255&| +0#0000000&|]+0#af5f00255&| +0#0000000&@3|&+0#af5f00255&@1| +0#0000000&|s+0#af5f00255&|e|t| +0#00e0e07&|-+0#e000e06&|x| +0#00e0e07&||+0#af5f00255&@1| +0#0000000&|s+0#af5f00255&|e|t| +0#00e0e07&|++0#e000e06&|x| +0#0000000&@33
@75
|c+0#af5f00255&|d| +0#0000000&|$+0#e000e06&|c|w|d| +0#0000000&@67
@75
@@ -14,7 +17,4 @@
@5| +0#0000000&@69
|#+0#0000e05&| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m
|a|i|n| |#| +0#0000000&@69
-|#+0#0000e05&@74
-@5| +0#0000000&@69
-|#+0#0000e05&| +0#0000000&@73
-@57|5@1|,|1| @9|8|9|%|
+@57|5|2|,|1| @9|8|5|%|
diff --git a/runtime/syntax/testdir/dumps/sh_06_04.dump b/runtime/syntax/testdir/dumps/sh_06_04.dump
new file mode 100644
index 0000000..ceb72b7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/sh_06_04.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m
+|a|i|n| |#| +0#0000000&@69
+|#+0#0000e05&@74
+@5| +0#0000000&@69
+|#+0#0000e05&| +0#0000000&@73
+>#+0#0000e05&| |H|e|r|e| |i|s| |t|h|e| |h|e|a|r|t| |o|f| |t|h|i|s| |s|c|r|i|p|t|:| +0#0000000&@39
+|#+0#0000e05&| +0#0000000&@73
+|U|s|a|g|e| @69
+@75
+|#+0#0000e05&| |A|n|d| |e|x|i|t| +0#0000000&@64
+|E|x|i|t| |$+0#e000e06&|R|e|s|u|l|t| +0#0000000&@62
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|6@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_06_99.dump b/runtime/syntax/testdir/dumps/sh_06_99.dump
deleted file mode 100644
index b347aad..0000000
--- a/runtime/syntax/testdir/dumps/sh_06_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|c+0#af5f00255&|d| +0#0000000&|$+0#e000e06&|c|w|d| +0#0000000&@67
-@75
-|}+0#00e0e07&| +0#0000000&|#+0#0000e05&| |E|n|d| |o|f| |E|x|e|c|u|t|e|F|b|a|c|k|u|p| +0#0000000&@49
-@75
-@75
-|#+0#0000e05&@74
-@5| +0#0000000&@69
-|#+0#0000e05&| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m
-|a|i|n| |#| +0#0000000&@69
-|#+0#0000e05&@74
-@5| +0#0000000&@69
-|#+0#0000e05&| +0#0000000&@73
-|#+0#0000e05&| |H|e|r|e| |i|s| |t|h|e| |h|e|a|r|t| |o|f| |t|h|i|s| |s|c|r|i|p|t|:| +0#0000000&@39
-|#+0#0000e05&| +0#0000000&@73
-|U|s|a|g|e| @69
-@75
-|#+0#0000e05&| |A|n|d| |e|x|i|t| +0#0000000&@64
->E|x|i|t| |$+0#e000e06&|R|e|s|u|l|t| +0#0000000&@62
-@57|7|1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_07_01.dump b/runtime/syntax/testdir/dumps/sh_07_01.dump
index 07b0693..dfacae8 100644
--- a/runtime/syntax/testdir/dumps/sh_07_01.dump
+++ b/runtime/syntax/testdir/dumps/sh_07_01.dump
@@ -1,9 +1,13 @@
-|F+0#00e0e07#ffffff0|u|n|c|t|i|o|n|1| |(|)| |{| +0#0000000&@60
+|#+0#0000e05#ffffff0| |T|h|i|s| |'|f|o|r| |V|a|r|,| |d|o|,| |d|o|n|e|'| |i|s| |a| |v|e|r|y| |h|a|n|d|y| |s|o|l|u|t|i|o|n| |A|N|D| |n|o| |r|e|a|l| |r|e|p|l|a|c|e|m|e|n|t
+| | +0#0000000&@73
+|#+0#0000e05&| |a|v|a|i|l|a|b|l|e|!| +0#0000000&@62
+|#+0#0000e05&| +0#0000000&@73
+|F+0#00e0e07&|u|n|c|t|i|o|n|1| |(|)| |{| +0#0000000&@60
@75
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|F+0#e000002&|u|n|c|t|i|o|n|1|:| |f|o|r| |l|o@1|p| |i|n|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@25
+>e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|F+0#e000002&|u|n|c|t|i|o|n|1|:| |f|o|r| |l|o@1|p| |i|n|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@25
|[+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|*|"+0#af5f00255&| +0#0000000&|]+0#af5f00255&| +0#0000000&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o|n|e|\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@49
@75
->f+0#af5f00255&|o|r| +0#0000000&|V|a|r| @67
+|f+0#af5f00255&|o|r| +0#0000000&|V|a|r| @67
|d+0#af5f00255&|o| +0#0000000&@72
@4|[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
|d+0#af5f00255&|o|n|e| +0#0000000&@70
@@ -13,8 +17,4 @@
@75
|#+0#0000e05&@74
@5| +0#0000000&@69
-|#+0#0000e05&| +0#0000000&@73
-|#+0#0000e05&| |F|o|r| |l|o@1|p| |w|i|t|h| |'|i|n| |l|i|s|t|'| |$|*| +0#0000000&@46
-|#+0#0000e05&| +0#0000000&@73
-|F+0#00e0e07&|u|n|c|t|i|o|n|2| |(|)| |{| +0#0000000&@60
-@57|1|9|,|1| @9|1|7|%|
+@57|1|6|,|1| @9|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_07_02.dump b/runtime/syntax/testdir/dumps/sh_07_02.dump
index 8e36dde..48e9fbb 100644
--- a/runtime/syntax/testdir/dumps/sh_07_02.dump
+++ b/runtime/syntax/testdir/dumps/sh_07_02.dump
@@ -1,9 +1,15 @@
-| +0&#ffffff0@74
+|#+0#0000e05#ffffff0@74
+@5| +0#0000000&@69
+|#+0#0000e05&| +0#0000000&@73
+|#+0#0000e05&| |F|o|r| |l|o@1|p| |w|i|t|h| |'|i|n| |l|i|s|t|'| |$|*| +0#0000000&@46
+|#+0#0000e05&| +0#0000000&@73
+>F+0#00e0e07&|u|n|c|t|i|o|n|2| |(|)| |{| +0#0000000&@60
+@75
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|F+0#e000002&|u|n|c|t|i|o|n|2|:| |f|o|r| |l|o@1|p| |i|n|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@25
|f+0#af5f00255&|o|r| +0#0000000&|V|a|r| |i+0#af5f00255&|n| +0#0000000&|$+0#e000e06&|*| +0#0000000&@61
|d+0#af5f00255&|o| +0#0000000&@72
@4|[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
->d+0#af5f00255&|o|n|e| +0#0000000&|;+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&@63
+|d+0#af5f00255&|o|n|e| +0#0000000&|;+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&@63
@75
|}+0#00e0e07&| +0#0000000&|#+0#0000e05&| |E|n|d| |o|f| |F|u|n|c|t|i|o|n|2| +0#0000000&@54
@75
@@ -11,10 +17,4 @@
@5| +0#0000000&@69
|#+0#0000e05&| +0#0000000&@73
|#+0#0000e05&| |F|o|r| |l|o@1|p| |w|i|t|h| |'|i|n| |l|i|s|t|'| |$|@|.| |W|o|r|k|s| |t|h|e| |s|a|m|e| |w|a|y| |a|s| |$|*| +0#0000000&@20
-|#+0#0000e05&| +0#0000000&@73
-|F+0#00e0e07&|u|n|c|t|i|o|n|3| |(|)| |{| +0#0000000&@60
-@75
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|F+0#e000002&|u|n|c|t|i|o|n|3|:| |f|o|r| |l|o@1|p| |i|n|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@25
-|f+0#af5f00255&|o|r| +0#0000000&|V|a|r| |i+0#af5f00255&|n| +0#0000000&|$+0#e000e06&|@| +0#0000000&@61
-|d+0#af5f00255&|o| +0#0000000&@72
-@57|3|7|,|1| @9|4|1|%|
+@57|3|1|,|1| @9|3|4|%|
diff --git a/runtime/syntax/testdir/dumps/sh_07_03.dump b/runtime/syntax/testdir/dumps/sh_07_03.dump
index 4c8ba62..999952e 100644
--- a/runtime/syntax/testdir/dumps/sh_07_03.dump
+++ b/runtime/syntax/testdir/dumps/sh_07_03.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@3|[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
+|#+0#0000e05#ffffff0| |F|o|r| |l|o@1|p| |w|i|t|h| |'|i|n| |l|i|s|t|'| |$|@|.| |W|o|r|k|s| |t|h|e| |s|a|m|e| |w|a|y| |a|s| |$|*| +0#0000000&@20
+|#+0#0000e05&| +0#0000000&@73
+|F+0#00e0e07&|u|n|c|t|i|o|n|3| |(|)| |{| +0#0000000&@60
+@75
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|F+0#e000002&|u|n|c|t|i|o|n|3|:| |f|o|r| |l|o@1|p| |i|n|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@25
+>f+0#af5f00255&|o|r| +0#0000000&|V|a|r| |i+0#af5f00255&|n| +0#0000000&|$+0#e000e06&|@| +0#0000000&@61
+|d+0#af5f00255&|o| +0#0000000&@72
+@4|[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
|d+0#af5f00255&|o|n|e| +0#0000000&|;+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&@63
@75
|}+0#00e0e07&| +0#0000000&|#+0#0000e05&| |E|n|d| |o|f| |F|u|n|c|t|i|o|n|3| +0#0000000&@54
@75
->#+0#0000e05&@74
+|#+0#0000e05&@74
@5| +0#0000000&@69
|#+0#0000e05&| +0#0000000&@73
|#+0#0000e05&| |F|o|r| |l|o@1|p| |w|i|t|h| |'|i|n| |l|i|s|t|'| |"|$|@|"|.| |S|p|e|c|i|a|l| |c|a|s|e|.| |W|o|r|k|s| |l|i|k|e| |"|$|1|"| |"|$|2|"| |.@2| +0#0000000&@4
|#+0#0000e05&| +0#0000000&@73
|F+0#00e0e07&|u|n|c|t|i|o|n|4| |(|)| |{| +0#0000000&@60
@75
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|F+0#e000002&|u|n|c|t|i|o|n|4|:| |f|o|r| |l|o@1|p| |i|n|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@25
-|f+0#af5f00255&|o|r| +0#0000000&|V|a|r| |i+0#af5f00255&|n| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|@|"+0#af5f00255&| +0#0000000&@59
-|d+0#af5f00255&|o| +0#0000000&@72
-@4|[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
-|d+0#af5f00255&|o|n|e| +0#0000000&|;+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&@63
-@75
-|}+0#00e0e07&| +0#0000000&|#+0#0000e05&| |E|n|d| |o|f| |F|u|n|c|t|i|o|n|4| +0#0000000&@54
-@57|5@1|,|1| @9|6|5|%|
+@57|4|8|,|1| @9|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/sh_07_04.dump b/runtime/syntax/testdir/dumps/sh_07_04.dump
index 4aabca2..d9eea10 100644
--- a/runtime/syntax/testdir/dumps/sh_07_04.dump
+++ b/runtime/syntax/testdir/dumps/sh_07_04.dump
@@ -1,20 +1,20 @@
-|#+0#0000e05#ffffff0@74
+| +0&#ffffff0@74
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|F+0#e000002&|u|n|c|t|i|o|n|4|:| |f|o|r| |l|o@1|p| |i|n|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@25
+|f+0#af5f00255&|o|r| +0#0000000&|V|a|r| |i+0#af5f00255&|n| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|@|"+0#af5f00255&| +0#0000000&@59
+|d+0#af5f00255&|o| +0#0000000&@72
+@4|[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
+>d+0#af5f00255&|o|n|e| +0#0000000&|;+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&@63
+@75
+|}+0#00e0e07&| +0#0000000&|#+0#0000e05&| |E|n|d| |o|f| |F|u|n|c|t|i|o|n|4| +0#0000000&@54
+@75
+@75
+|#+0#0000e05&@74
@5| +0#0000000&@69
|#+0#0000e05&| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m|a|i|n| |#@2| |m
|a|i|n| |#| +0#0000000&@69
|#+0#0000e05&@74
@5| +0#0000000&@69
->#+0#0000e05&| +0#0000000&@73
+|#+0#0000e05&| +0#0000000&@73
|#+0#0000e05&| |H|e|r|e| |i|s| |t|h|e| |h|e|a|r|t| |o|f| |t|h|i|s| |s|c|r|i|p|t|:| +0#0000000&@39
|#+0#0000e05&| +0#0000000&@73
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|P+0#e000002&|r|o|c|e|s@1|i|n|g| |t|h|e| |f|o|l@1|o|w|i|n|g| |c|o|m@1|a|n|d| |l|i|n|e| |a|r|g|u|m|e|n|t|s|:| |$+0#e000e06&|{|*|:+0#af5f00255&|-|n+0#0000000&|o|n|e|}+0#e000e06&|"+0#af5f00255&| +0#0000000&@8
-|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|S+0#e000002&|c|r|i|p|t|:| @3|f|o|r| |l|o@1|p| |o|u|t|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@24
-|f+0#af5f00255&|o|r| +0#0000000&|V|a|r| @67
-|d+0#af5f00255&|o| +0#0000000&@72
-@4|[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
-|d+0#af5f00255&|o|n|e| +0#0000000&|;| |e+0#af5f00255&|c|h|o| +0#0000000&@63
-@75
-|#+0#0000e05&| |S|a|m|e| |a|s| |f|u|n|c|t|i|o|n| |c|a|l@1|s| +0#0000000&@50
-|F|u|n|c|t|i|o|n|1| |-+0#e000e06&|e|q| +0#0000000&|-+0#e000e06&|n|e| +0#0000000&|-+0#e000e06&|g|t| +0#0000000&|-+0#e000e06&|g|e| +0#0000000&|-+0#e000e06&|l|e| +0#0000000&|-+0#e000e06&|l|t| +0#0000000&@41
-|F|u|n|c|t|i|o|n|2| |-+0#e000e06&|e|q| +0#0000000&|-+0#e000e06&|n|e| +0#0000000&|-+0#e000e06&|g|t| +0#0000000&|-+0#e000e06&|g|e| +0#0000000&|-+0#e000e06&|l|e| +0#0000000&|-+0#e000e06&|l|t| +0#0000000&@41
-@57|7|3|,|1| @9|8|9|%|
+@57|6|5|,|1| @9|7|6|%|
diff --git a/runtime/syntax/testdir/dumps/sh_07_99.dump b/runtime/syntax/testdir/dumps/sh_07_05.dump
index 3a4d61d..a3aac77 100644
--- a/runtime/syntax/testdir/dumps/sh_07_99.dump
+++ b/runtime/syntax/testdir/dumps/sh_07_05.dump
@@ -3,7 +3,7 @@
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|S+0#e000002&|c|r|i|p|t|:| @3|f|o|r| |l|o@1|p| |o|u|t|s|i|d|e| |a| |f|u|n|c|t|i|o|n|:|\+0#e000e06&|t|\|c|"+0#af5f00255&| +0#0000000&@24
|f+0#af5f00255&|o|r| +0#0000000&|V|a|r| @67
|d+0#af5f00255&|o| +0#0000000&@72
-@4|[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
+@4>[+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|$+0#e000e06&|V|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|O+0#e000002&|K| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&||+0#af5f00255&@1| +0#0000000&|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|n+0#e000002&|o| |\+0#e000e06&|c|"+0#af5f00255&| +0#0000000&@26
|d+0#af5f00255&|o|n|e| +0#0000000&|;| |e+0#af5f00255&|c|h|o| +0#0000000&@63
@75
|#+0#0000e05&| |S|a|m|e| |a|s| |f|u|n|c|t|i|o|n| |c|a|l@1|s| +0#0000000&@50
@@ -16,5 +16,5 @@
|F|u|n|c|t|i|o|n|1| |-+0#e000e06&|e|q| +0#0000000&|-+0#e000e06&|n|e| +0#0000000&|-+0#e000e06&|g|t| +0#0000000&|-+0#e000e06&|g|e| +0#0000000&|-+0#e000e06&|l|e| +0#0000000&|-+0#e000e06&|l|t| +0#0000000&|'+0#af5f00255&|-+0#e000002&|g|e| |1| |-|a| |2| |-|g|e|'+0#af5f00255&| +0#0000000&@24
|F|u|n|c|t|i|o|n|1| @65
@75
->e+0#af5f00255&|x|i|t| +0#0000000&|$+0#e000e06&|?| +0#0000000&@67
-@57|9|3|,|1| @9|B|o|t|
+|e+0#af5f00255&|x|i|t| +0#0000000&|$+0#e000e06&|?| +0#0000000&@67
+@57|8|0|,|5| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_08_02.dump b/runtime/syntax/testdir/dumps/sh_08_02.dump
index b3289ec..b57af0b 100644
--- a/runtime/syntax/testdir/dumps/sh_08_02.dump
+++ b/runtime/syntax/testdir/dumps/sh_08_02.dump
@@ -1,9 +1,10 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E| +0#0000000&|t|o@1|}+0#e000e06&| +0#0000000&@23
+|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
@75
|#+0#0000e05&| |C|a|s|e| |1|d|.| |M|o|r|e| |V|a|r|i|a|b|l|e|s| |a|n|d| |C|o|n|s|t|a|n|t|s|.| |S|t|a|r|t|i|n|g| |w|i|t|h| |a| |V|a|r|i|a|b|l|e|.| +0#0000000&@8
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@44
->V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@20
+>V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@44
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@20
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@20
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@20
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
@@ -16,5 +17,4 @@
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E| +0#0000000&|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@20
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
@75
-|#+0#0000e05&| |C|a|s|e| |1|x|.| |T|h|e| |s|a|m|e| |w|i|t|h| |'|:|'| +0#0000000&@46
-@57|3|7|,|1| @9|4|9|%|
+@57|3|6|,|1| @9|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/sh_08_03.dump b/runtime/syntax/testdir/dumps/sh_08_03.dump
index 08ebadf..5426188 100644
--- a/runtime/syntax/testdir/dumps/sh_08_03.dump
+++ b/runtime/syntax/testdir/dumps/sh_08_03.dump
@@ -1,9 +1,10 @@
-|#+0#0000e05#ffffff0| |C|a|s|e| |1|x|.| |T|h|e| |s|a|m|e| |w|i|t|h| |'|:|'| +0#0000000&@46
+| +0&#ffffff0@74
+|#+0#0000e05&| |C|a|s|e| |1|x|.| |T|h|e| |s|a|m|e| |w|i|t|h| |'|:|'| +0#0000000&@46
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@44
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@38
-|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@35
->:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@28
+>:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@35
+|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@28
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E| +0#0000000&|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@28
@75
|#+0#0000e05&| |C|a|s|e| |1|y|.| |T|h|e| |s|a|m|e| |w|i|t|h| |'|:|'| |a|n|d| |w|i|t|h|o|u|t| |t|h|e| |'|:|'| |i|n| |t|h|e| |p|a|r|a|m|e|t|e|r| |s|u|b|s|t|i|t|u|t
@@ -15,6 +16,5 @@
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@29
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E| +0#0000000&|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@29
@75
-|#+0#0000e05&@74
-@5| +0#0000000&@69
-@57|5@1|,|1| @9|7|5|%|
+|#+0#0000e05&@71|@+0#4040ff13&@2
+| +0#0000000&@56|5|4|,|1| @9|7|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_08_04.dump b/runtime/syntax/testdir/dumps/sh_08_04.dump
index 6f77aaf..dbdc472 100644
--- a/runtime/syntax/testdir/dumps/sh_08_04.dump
+++ b/runtime/syntax/testdir/dumps/sh_08_04.dump
@@ -1,9 +1,12 @@
-|#+0#0000e05#ffffff0| |T|h|i|s| |a|r|e| |v|a|l|i|d| |u|s|a|g|e|s| |f|o|r| |$|{|V|a|r|:|?|}| |i|n| |k|s|h|!| +0#0000000&@30
+|#+0#0000e05#ffffff0@74
+@5| +0#0000000&@69
|#+0#0000e05&| +0#0000000&@73
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e|}+0#e000e06&| +0#0000000&@26
+|#+0#0000e05&| |T|h|i|s| |a|r|e| |v|a|l|i|d| |u|s|a|g|e|s| |f|o|r| |$|{|V|a|r|:|?|}| |i|n| |k|s|h|!| +0#0000000&@30
+|#+0#0000e05&| +0#0000000&@73
+>V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e|}+0#e000e06&| +0#0000000&@26
|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e| |f|r|o|m| |`|d|a|t|e|`|}+0#e000e06&| +0#0000000&@14
@75
->:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e|}+0#e000e06&| +0#0000000&@34
+|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e|}+0#e000e06&| +0#0000000&@34
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e| |f|r|o|m| |`|d|a|t|e|`|}+0#e000e06&| +0#0000000&@22
@75
|e+0#af5f00255&|x|i|t| +0#0000000&|$+0#e000e06&|?| +0#0000000&@67
@@ -14,7 +17,4 @@
@8|e+0#af5f00255&|x|i|t| +0#0000000&|1+0#e000002&| +0#0000000&@60
|f+0#af5f00255&|i| +0#0000000&@72
|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|7|3|,|1| @9|B|o|t|
+| +0#0000000&@56|7|0|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_08_99.dump b/runtime/syntax/testdir/dumps/sh_08_99.dump
deleted file mode 100644
index 26007b1..0000000
--- a/runtime/syntax/testdir/dumps/sh_08_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|#+0#0000e05&@74
-@5| +0#0000000&@69
-|#+0#0000e05&| +0#0000000&@73
-|#+0#0000e05&| |T|h|i|s| |a|r|e| |v|a|l|i|d| |u|s|a|g|e|s| |f|o|r| |$|{|V|a|r|:|?|}| |i|n| |k|s|h|!| +0#0000000&@30
-|#+0#0000e05&| +0#0000000&@73
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e|}+0#e000e06&| +0#0000000&@26
-|V+0#00e0e07&|a|r|i|a|b|l|e|4|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e| |f|r|o|m| |`|d|a|t|e|`|}+0#e000e06&| +0#0000000&@14
-@75
-|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e|}+0#e000e06&| +0#0000000&@34
-|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|4|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a|n| |E|r@1|o|r| |M|e|s@1|a|g|e| |f|r|o|m| |`|d|a|t|e|`|}+0#e000e06&| +0#0000000&@22
-@75
-|e+0#af5f00255&|x|i|t| +0#0000000&|$+0#e000e06&|?| +0#0000000&@67
-@75
-|#+0#0000e05&| |M|i|c|h|a|e|l| |S|o|u|l|i|e|r| +0#0000000&@57
-|i+0#af5f00255&|f| |[| +0#0000000&|$+0#e000e06&|#| +0#0000000&|-+0#af5f00255&|n|e| +0#0000000&|1+0#e000002&| +0#0000000&|]+0#af5f00255&|;| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@53
-@8|e+0#af5f00255&|c|h|o| +0#e000002&|w|h|a|t|e|v|e|r| +0#0000000&@53
-@8|e+0#af5f00255&|x|i|t| +0#0000000&|1+0#e000002&| +0#0000000&@60
->f+0#af5f00255&|i| +0#0000000&@72
-@57|8|2|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_09_99.dump b/runtime/syntax/testdir/dumps/sh_09_99.dump
deleted file mode 100644
index b97cfa3..0000000
--- a/runtime/syntax/testdir/dumps/sh_09_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|#+0#0000e05#ffffff0|!|/|b|i|n|/|d|a|s|h| +0#0000000&@63
-|#+0#0000e05&| |T|e|s|t| |f|i|l|e| |f|o|r| |v|i|m| |t|h|e| |c|h|e|c|k| |(|)| |s|u|b|s|h|e|l@1|s| +0#0000000&@32
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|1| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@50
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|}| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@48
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|-|.+0#0000000&|}+0#e000e06&| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |s+0#af5f00255&|e|d| +0#0000000&|-+0#e000e06&|e| +0#0000000&|'+0#af5f00255&|s+0#e000002&|!|$|!|/|!|'+0#af5f00255&| +0#0000000&|-+0#e000e06&|e| +0#0000000&|'+0#af5f00255&|s+0#e000002&|!|/@1|*|$|!|/|!|'+0#af5f00255&| +0#0000000&@20
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|+|.+0#0000000&|}+0#e000e06&| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@45
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|=|.+0#0000000&|}+0#e000e06&| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@45
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|?|}+0#e000e06&| @1|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@45
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|H|O|M|E| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@47
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|H|O|M|E|}| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@45
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|H|O|M|E|}| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@52
-|(|(+0#e000e06&|n+0#00e0e07&|=+0#0000000&|1+0#e000002&|+|2|)+0#e000e06&|)+0#ffffff16#ff404010| +0#0000000#ffffff0@65
->l+0#af5f00255&|e|t| +0#0000000&|n+0#00e0e07&|=+0#0000000&|1+0#e000002&|++0#0000000&|2+0#e000002&| +0#0000000&@65
-|:|r|e|d|r|a|w| @49|1|9|,|1| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/sh_10_99.dump b/runtime/syntax/testdir/dumps/sh_10_99.dump
deleted file mode 100644
index f97ea32..0000000
--- a/runtime/syntax/testdir/dumps/sh_10_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@7|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}|"+0#af5f00255&| +0#0000000&@24
-@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000&@36
-|}+0#e000e06&| +0#0000000&@73
-@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}| +0#0000000&@17
-@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
-@8|$+0#e000e06&|{|||e+0#af5f00255&|c|h|o| +0#e000002&|f|o@1|}+0#e000e06&| +0#0000000&@54
-@8|$+0#e000e06&|{|||e+0#af5f00255&|c|h|o| +0#e000002&|b|a|r| +0#0000000&@55
-|}+0#e000e06&| +0#0000000&@73
-|f+0#af5f00255&|i| +0#0000000&@72
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
-|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
-|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
-| +0#e000e06&@7|p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|%|s| |s|t|r| +0#0000000&@53
-|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
-|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#af5f00255&|/+0#e000e06&|t|m|p|/|s|t|r|f|i|l|e|;|}| +0#0000000&@52
-@75
->e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
-@57|4|9|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_11_01.dump b/runtime/syntax/testdir/dumps/sh_11_01.dump
new file mode 100644
index 0000000..083e422
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/sh_11_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|a+0#00e0e07&|r@1|=+0#0000000&|(+0#e000e06&| +0#0000000&@67
+@4|1+0#e000002&| +0#0000000&|2+0#e000002&| +0#0000000&|3+0#e000002&| +0#0000000&|4+0#e000002&| +0#0000000&@63
+@2|)+0#e000e06&| +0#0000000&|#+0#0000e05&| |p|a|r|e|n| |e|r@1|o|r|!| +0#0000000&@56
+@75
+>f+0#af5f00255&|i| +0#0000000&@72
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_11_99.dump b/runtime/syntax/testdir/dumps/sh_11_99.dump
deleted file mode 100644
index 9612dab..0000000
--- a/runtime/syntax/testdir/dumps/sh_11_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|#+0#0000e05&| |I|s@1|u|e| |#|9|6|2| +0#0000000&@62
-@75
-|a+0#00e0e07&|r@1|=+0#0000000&|(+0#e000e06&| +0#0000000&@69
-@2|1+0#e000002&| +0#0000000&|2+0#e000002&| +0#0000000&|3+0#e000002&| +0#0000000&|4+0#e000002&| +0#0000000&@65
-|)+0#e000e06&| +0#0000000&|#+0#0000e05&| |o|k| +0#0000000&@68
-@75
-|i+0#af5f00255&|f| |t|r|u|e|;| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@61
-@75
-@2|a+0#00e0e07&|r@1|=+0#0000000&|(+0#e000e06&|1+0#e000002&| +0#0000000&|2+0#e000002&| +0#0000000&|3+0#e000002&| +0#0000000&|4+0#e000002&|)+0#e000e06&| +0#0000000&|#+0#0000e05&| |o|k| +0#0000000&@54
-@75
-@2|a+0#00e0e07&|r@1|=+0#0000000&|(+0#e000e06&| +0#0000000&|1+0#e000002&| +0#0000000&|2+0#e000002&| +0#0000000&|3+0#e000002&| +0#0000000&|4+0#e000002&| +0#0000000&|)+0#e000e06&| +0#0000000&|#+0#0000e05&| |o|k| +0#0000000&@52
-@75
-@2|a+0#00e0e07&|r@1|=+0#0000000&|(+0#e000e06&| +0#0000000&@67
-@4|1+0#e000002&| +0#0000000&|2+0#e000002&| +0#0000000&|3+0#e000002&| +0#0000000&|4+0#e000002&| +0#0000000&@63
-@2|)+0#e000e06&| +0#0000000&|#+0#0000e05&| |p|a|r|e|n| |e|r@1|o|r|!| +0#0000000&@56
-@75
-|f+0#af5f00255&|i| +0#0000000&@72
-> @74
-@57|2|0|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_comment_00.dump b/runtime/syntax/testdir/dumps/vim9_comment_00.dump
index 46d283f..de9798d 100644
--- a/runtime/syntax/testdir/dumps/vim9_comment_00.dump
+++ b/runtime/syntax/testdir/dumps/vim9_comment_00.dump
@@ -13,7 +13,7 @@
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
|d+0#af5f00255&|e|f|!| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@64
-@2|#+0#0000e05&| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
+| +0#0000e05&@1|#| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
@2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
@75
diff --git a/runtime/syntax/testdir/dumps/vim9_comment_01.dump b/runtime/syntax/testdir/dumps/vim9_comment_01.dump
index d596208..736d47d 100644
--- a/runtime/syntax/testdir/dumps/vim9_comment_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_comment_01.dump
@@ -1,16 +1,16 @@
| +0&#ffffff0@74
|d+0#af5f00255&|e|f|!| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@64
-@2|#+0#0000e05&| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
+| +0#0000e05&@1|#| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
@2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
> @74
|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|-+0#af5f00255&|c+0#e000e06&|o|u|n|t| +0#0000000&|F|o@1|C|o|m@1|a|n|d| |{+0#e000e06&| +0#0000000&@47
-@2|#+0#0000e05&| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
+| +0#0000e05&@1|#| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
@2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
|}+0#e000e06&| +0#0000000&@73
@75
|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
-@2|#+0#0000e05&| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
+| +0#0000e05&@1|#| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
@2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
|}+0#e000e06&| +0#0000000&@73
@75
diff --git a/runtime/syntax/testdir/dumps/vim9_comment_03.dump b/runtime/syntax/testdir/dumps/vim9_comment_03.dump
index 0e424ab..8a0fda8 100644
--- a/runtime/syntax/testdir/dumps/vim9_comment_03.dump
+++ b/runtime/syntax/testdir/dumps/vim9_comment_03.dump
@@ -5,7 +5,7 @@
|#+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1|3|0|4|7| +0#0000000&@59
> @74
|i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|"+0#e000002&|:|D|i|f@1|O|r|i|g|"|)+0#e000e06&| +0#0000000&@51
-@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#0000000&|n|o|f|i|l|e| ||+0#af5f00255&| +0#0000000&|r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e|d|i|t| +0#0000000&|%+0#af5f00255&@1| +0#0000000&||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&
+@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#af5f00255&|n+0#0000000&|o|f|i|l|e| ||| |r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e|d|i|t| +0#0000000&|%+0#af5f00255&@1| +0#0000000&||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&
@18|\+0#e000e06&| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&|p+0#af5f00255&| +0#0000000&||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@33
|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
@75
diff --git a/runtime/syntax/testdir/dumps/vim9_comment_99.dump b/runtime/syntax/testdir/dumps/vim9_comment_99.dump
deleted file mode 100644
index bed55bc..0000000
--- a/runtime/syntax/testdir/dumps/vim9_comment_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|:|F|o@1| @70
-@6|#+0#0000e05&|\| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n| |c|o|m@1|e|n|t| +0#0000000&@40
-@6|\+0#e000e06&| +0#0000000&|a|r|g|1| @62
-@6|#+0#0000e05&|\| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n| |c|o|m@1|e|n|t| +0#0000000&@40
-@6|\+0#e000e06&| +0#0000000&|a|r|g|2| @62
-@75
-@75
-|#+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1|3|0|4|7| +0#0000000&@59
-@75
-|i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|"+0#e000002&|:|D|i|f@1|O|r|i|g|"|)+0#e000e06&| +0#0000000&@51
-@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#0000000&|n|o|f|i|l|e| ||+0#af5f00255&| +0#0000000&|r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e|d|i|t| +0#0000000&|%+0#af5f00255&@1| +0#0000000&||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&
-@18|\+0#e000e06&| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&|p+0#af5f00255&| +0#0000000&||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@33
-|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
-@75
-@75
-|#+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1@1|3|0|7| |a|n|d| |#|1@1|5|6|0| +0#0000000&@48
-@75
->#+0#0000e05&| |T|h|i|s| |i|s| |w|h|a|t| |w|e| |c|a|l@1| |"| |b|l|a|h| +0#0000000&@45
-@57|6|4|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_00.dump
new file mode 100644
index 0000000..d681dcf
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m|9| |E|x| |c|o|m@1|a|n|d|s| +0#0000000&@56
+@75
+|#+0#0000e05&| |S|T|A|R|T| |N|O|T| |M|A|T|C|H|E|D| +0#0000000&@55
+|:|@| @72
+|:|@+0#e000e06&@1| +0#0000000&@71
+|:|N|e|x|t| @69
+|:|X| @72
+|#+0#0000e05&| |E|N|D| |N|O|T| |M|A|T|C|H|E|D| +0#0000000&@57
+@75
+|:|h+0#af5f00255&|e|l|p| +0#0000000&@69
+@1|:|h+0#af5f00255&|e|l|p| +0#0000000&@68
+|:| |h+0#af5f00255&|e|l|p| +0#0000000&@68
+@1|:| |h+0#af5f00255&|e|l|p| +0#0000000&@67
+@75
+|:|2+0#af5f00255&|m|a|t|c|h| +0#0000000&@67
+|:|3+0#af5f00255&|m|a|t|c|h| +0#0000000&@67
+|:|a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@63
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_01.dump
new file mode 100644
index 0000000..58ba6ab
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_01.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0| |h+0#af5f00255&|e|l|p| +0#0000000&@68
+@1|:| |h+0#af5f00255&|e|l|p| +0#0000000&@67
+@75
+|:|2+0#af5f00255&|m|a|t|c|h| +0#0000000&@67
+|:|3+0#af5f00255&|m|a|t|c|h| +0#0000000&@67
+>:|a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@63
+|:|a+0#af5f00255&|b|c|l|e|a|r| +0#0000000&@66
+|:|a+0#af5f00255&|b|o|v|e|l|e|f|t| +0#0000000&@64
+|:|a+0#af5f00255&|b|s|t|r|a|c|t| +0#0000000&@65
+|:|a+0#af5f00255&|l@1| +0#0000000&@70
+|:|a+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|a+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+|:|a+0#af5f00255&|r|g|a|d@1| +0#0000000&@67
+|:|a+0#af5f00255&|r|g|d|e|d|u|p|e| +0#0000000&@64
+|:|a+0#af5f00255&|r|g|d|e|l|e|t|e| +0#0000000&@64
+|:|a+0#af5f00255&|r|g|d|o| +0#0000000&@68
+|:|a+0#af5f00255&|r|g|e|d|i|t| +0#0000000&@66
+|:|a+0#af5f00255&|r|g@1|l|o|b|a|l| +0#0000000&@64
+|:|a+0#af5f00255&|r|g|l|o|c|a|l| +0#0000000&@65
+@57|1|9|,|1| @10|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_02.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_02.dump
new file mode 100644
index 0000000..3f62aaa
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_02.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|a+0#af5f00255&|r|g|l|o|c|a|l| +0#0000000&@65
+|:|a+0#af5f00255&|r|g|s| +0#0000000&@69
+|:|a+0#af5f00255&|r|g|u|m|e|n|t| +0#0000000&@65
+|:|a+0#af5f00255&|s|c|i@1| +0#0000000&@68
+|:|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|F|o@1| @62
+>:|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @62
+|:|a+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@66
+|:|b+0#af5f00255&|a|d@1| +0#0000000&@69
+|:|b+0#af5f00255&|a|l@1| +0#0000000&@69
+|:|b+0#af5f00255&|a|l|t| +0#0000000&@69
+|:|b+0#af5f00255&|d|e|l|e|t|e| +0#0000000&@66
+|:|b+0#af5f00255&|e|h|a|v|e| +0#0000000&|m+0#af5f00255&|s|w|i|n| +0#0000000&@61
+|:|b+0#af5f00255&|e|h|a|v|e| +0#0000000&|x+0#af5f00255&|t|e|r|m| +0#0000000&@61
+|:|b+0#af5f00255&|e|l|o|w|r|i|g|h|t| +0#0000000&@63
+|:|b+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
+|:|b+0#af5f00255&|l|a|s|t| +0#0000000&@68
+|:|b+0#af5f00255&|m|o|d|i|f|i|e|d| +0#0000000&@64
+|:|b+0#af5f00255&|n|e|x|t| +0#0000000&@68
+@57|3|7|,|1| @10|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_03.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_03.dump
new file mode 100644
index 0000000..1109775
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_03.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|b+0#af5f00255&|n|e|x|t| +0#0000000&@68
+|:|b+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:|b+0#af5f00255&|o|t|r|i|g|h|t| +0#0000000&@65
+|:|b+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
+|:|b+0#af5f00255&|r|e|a|k| +0#0000000&@68
+>:|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&@65
+|:|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&@65
+|:|b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@64
+|:|b+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
+|:|b+0#af5f00255&|r|o|w|s|e| +0#0000000&@67
+|:|b+0#af5f00255&|u|f|d|o| +0#0000000&@68
+|:|b+0#af5f00255&|u|f@1|e|r| +0#0000000&@67
+|:|b+0#af5f00255&|u|f@1|e|r|s| +0#0000000&@66
+|:|b+0#af5f00255&|u|n|l|o|a|d| +0#0000000&@66
+|:|b+0#af5f00255&|w|i|p|e|o|u|t| +0#0000000&@65
+|:|c+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@66
+|:|c+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@65
+|:|c+0#af5f00255&|a|b|o|v|e| +0#0000000&@67
+|:|c+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@63
+@57|5@1|,|1| @10|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_04.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_04.dump
new file mode 100644
index 0000000..085cec5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_04.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|c+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@63
+|:|c+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@65
+|:|c+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@65
+|:|c+0#af5f00255&|a|f|t|e|r| +0#0000000&@67
+|:|c+0#af5f00255&|a|l@1| +0#0000000&@69
+>:|c+0#af5f00255&|a|t|c|h| +0#0000000&@68
+|:|c+0#af5f00255&|b|e|f|o|r|e| +0#0000000&@66
+|:|c+0#af5f00255&|b|e|l|o|w| +0#0000000&@67
+|:|c+0#af5f00255&|b|o|t@1|o|m| +0#0000000&@66
+|:|c+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@66
+|:|c+0#af5f00255&@1| +0#0000000&@71
+|:|c+0#af5f00255&@1|l|o|s|e| +0#0000000&@67
+|:|c+0#af5f00255&|d| +0#0000000&@71
+|:|c+0#af5f00255&|d|o| +0#0000000&@70
+|:|c+0#af5f00255&|e|n|t|e|r| +0#0000000&@67
+|:|c+0#af5f00255&|e|x|p|r| +0#0000000&@68
+|:|c+0#af5f00255&|f|d|o| +0#0000000&@69
+|:|c+0#af5f00255&|f|i|l|e| +0#0000000&@68
+|:|c+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
+@57|7|3|,|1| @10|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_05.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_05.dump
new file mode 100644
index 0000000..f8e1f28
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_05.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|c+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
+|:|c+0#af5f00255&|g|e|t|b|u|f@1|e|r| +0#0000000&@63
+|:|c+0#af5f00255&|g|e|t|e|x|p|r| +0#0000000&@65
+|:|c+0#af5f00255&|g|e|t|f|i|l|e| +0#0000000&@65
+|:|c+0#af5f00255&|h|a|n|g|e|s| +0#0000000&@66
+>:|c+0#af5f00255&|h|d|i|r| +0#0000000&@68
+|:|c+0#af5f00255&|h|e|c|k|p|a|t|h| +0#0000000&@64
+|:|c+0#af5f00255&|h|e|c|k|t|i|m|e| +0#0000000&@64
+|:|c+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@65
+|:|c+0#af5f00255&|l|a|s@1| +0#0000000&@68
+|:|c+0#af5f00255&|l|a|s@1| +0#0000000&@68
+|:|c+0#af5f00255&|l|a|s|t| +0#0000000&@68
+|:|c+0#af5f00255&|l|e|a|r|j|u|m|p|s| +0#0000000&@63
+|:|c+0#af5f00255&|l|i|s|t| +0#0000000&@68
+|:|c+0#af5f00255&|l|o|s|e| +0#0000000&@68
+|:|c+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|c+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|c+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|c+0#af5f00255&|n|e|w|e|r| +0#0000000&@67
+@57|9|1|,|1| @10|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_06.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_06.dump
new file mode 100644
index 0000000..6e027fa
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_06.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|c+0#af5f00255&|n|e|w|e|r| +0#0000000&@67
+|:|c+0#af5f00255&|n|e|x|t| +0#0000000&@68
+|:|c+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:|c+0#af5f00255&|n|f|i|l|e| +0#0000000&@67
+|:|c+0#af5f00255&|N|f|i|l|e| +0#0000000&@67
+>:|c+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@62
+|:|c+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|c+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+|:|c+0#af5f00255&|o|l|d|e|r| +0#0000000&@67
+|:|c+0#af5f00255&|o|l|o|r|s|c|h|e|m|e| +0#0000000&@62
+|:|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&@65
+|:|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@66
+|:|c+0#af5f00255&|o|m|p|i|l|e|r| +0#0000000&@65
+|:|c+0#af5f00255&|o|n|f|i|r|m| +0#0000000&@66
+|:|c+0#af5f00255&|o|n|s|t| +0#0000000&@68
+|:|c+0#af5f00255&|o|n|t|i|n|u|e| +0#0000000&@65
+|:|c+0#af5f00255&|o|p|e|n| +0#0000000&@68
+|:|c+0#af5f00255&|o|p|y| +0#0000000&@69
+|:|c+0#af5f00255&|p|f|i|l|e| +0#0000000&@67
+@57|1|0|9|,|1| @9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_07.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_07.dump
new file mode 100644
index 0000000..f608f04
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_07.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|c+0#af5f00255&|p|f|i|l|e| +0#0000000&@67
+|:|c+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
+|:|c+0#af5f00255&|q|u|i|t| +0#0000000&@68
+|:|c+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
+|:|c+0#af5f00255&|s|c|o|p|e| +0#0000000&@67
+>:|c+0#af5f00255&|s|t|a|g| +0#0000000&@68
+|:|c+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&@64
+|:|c+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|c+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|c+0#af5f00255&|w|i|n|d|o|w| +0#0000000&@66
+|:|d+0#af5f00255&|e|b|u|g| +0#0000000&@68
+|:|d+0#af5f00255&|e|b|u|g@1|r|e@1|d|y| +0#0000000&@62
+|:|d+0#af5f00255&|e|f| +0#0000000&@70
+|:|d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&@63
+|:|d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&@63
+|:|d+0#af5f00255&|e|f|e|r| +0#0000000&@68
+|:|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&@63
+|:|d+0#af5f00255&|e|l|e|t|e| +0#0000000&@67
+|:|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&@62
+@57|1|2|7|,|1| @8|1|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_08.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_08.dump
new file mode 100644
index 0000000..f1bf864
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_08.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&@62
+|:|d+0#af5f00255&|e|l|m|a|r|k|s| +0#0000000&@65
+|:|d+0#af5f00255&|i|f@1|g|e|t| +0#0000000&@66
+|:|d+0#af5f00255&|i|f@1|o|f@1| +0#0000000&@66
+|:|d+0#af5f00255&|i|f@1|p|a|t|c|h| +0#0000000&@64
+>:|d+0#af5f00255&|i|f@1|p|u|t| +0#0000000&@66
+|:|d+0#af5f00255&|i|f@1|s|p|l|i|t| +0#0000000&@64
+|:|d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@65
+|:|d+0#af5f00255&|i|f@1|u|p|d|a|t|e| +0#0000000&@63
+|:|d+0#af5f00255&|i|g|r|a|p|h|s| +0#0000000&@65
+|:|d+0#af5f00255&|i|s|a|s@1|e|m|b|l|e| +0#0000000&@62
+|:|d+0#af5f00255&|i|s|a|s@1|e|m|b|l|e| +0#0000000&@62
+|:|d+0#af5f00255&|i|s|p|l|a|y| +0#0000000&@66
+|:|d+0#af5f00255&|j|u|m|p| +0#0000000&@68
+|:|d+0#af5f00255&|l| +0#0000000&@71
+|:|d+0#af5f00255&|l|i|s|t| +0#0000000&@68
+|:|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&@64
+|:|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@64
+|:|d+0#af5f00255&|p| +0#0000000&@71
+@57|1|4|5|,|1| @8|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_09.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_09.dump
new file mode 100644
index 0000000..b2ede40
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_09.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|d+0#af5f00255&|p| +0#0000000&@71
+|:|d+0#af5f00255&|r|o|p| +0#0000000&@69
+|:|d+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@66
+|:|d+0#af5f00255&|s|p|l|i|t| +0#0000000&@67
+|:|e+0#af5f00255&|a|r|l|i|e|r| +0#0000000&@66
+>:|e+0#af5f00255&|c|h|o| +0#0000000&@69
+|:|e+0#af5f00255&|c|h|o|c|o|n|s|o|l|e| +0#0000000&@62
+|:|e+0#af5f00255&|c|h|o|e|r@1| +0#0000000&@66
+|:|e+0#af5f00255&|c|h|o|h|l| +0#0000000&@67
+|:|e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&@66
+|:|e+0#af5f00255&|c|h|o|n| +0#0000000&@68
+|:|e+0#af5f00255&|c|h|o|w|i|n|d|o|w| +0#0000000&@63
+|:|e+0#af5f00255&|d|i|t| +0#0000000&@69
+|:|e+0#af5f00255&|l|s|e| +0#0000000&@69
+|:|e+0#af5f00255&|l|s|e|i|f| +0#0000000&@67
+|:|e+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@65
+|:|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@65
+|:|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@67
+@57|1|6|3|,|1| @8|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_10.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_10.dump
new file mode 100644
index 0000000..adebc5c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_10.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@67
+|:|e+0#af5f00255&|n|d|e|n|u|m| +0#0000000&@66
+|:|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@67
+|:|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@62
+|:|e+0#af5f00255&|n|d|i|f| +0#0000000&@68
+>:|e+0#af5f00255&|n|d|i|n|t|e|r|f|a|c|e| +0#0000000&@61
+|:|e+0#af5f00255&|n|d|t|r|y| +0#0000000&@67
+|:|e+0#af5f00255&|n|d|w|h|i|l|e| +0#0000000&@65
+|:|e+0#af5f00255&|n|e|w| +0#0000000&@69
+|:|e+0#af5f00255&|n|u|m| +0#0000000&@69
+|:|e+0#af5f00255&|v|a|l| +0#0000000&@69
+|:|e+0#af5f00255&|x| +0#0000000&@71
+|:|e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&@66
+|:|e+0#af5f00255&|x|i|t| +0#0000000&@69
+|:|e+0#af5f00255&|x|p|o|r|t| +0#0000000&@67
+|:|e+0#af5f00255&|x|p|o|r|t| +0#0000000&@67
+|:|e+0#af5f00255&|x|u|s|a|g|e| +0#0000000&@66
+|:|f+0#af5f00255&|i|l|e| +0#0000000&@69
+|:|f+0#af5f00255&|i|l|e|s| +0#0000000&@68
+@57|1|8|1|,|1| @8|1|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_11.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_11.dump
new file mode 100644
index 0000000..5664d9f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_11.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|f+0#af5f00255&|i|l|e|s| +0#0000000&@68
+|:|f+0#af5f00255&|i|l|e|t|y|p|e| +0#0000000&@65
+|:|f+0#af5f00255&|i|l|t|e|r| +0#0000000&@67
+|:|f+0#af5f00255&|i|n|a|l| +0#0000000&@68
+|:|f+0#af5f00255&|i|n|a|l@1|y| +0#0000000&@66
+>:|f+0#af5f00255&|i|n|d| +0#0000000&@69
+|:|f+0#af5f00255&|i|n|i|s|h| +0#0000000&@67
+|:|f+0#af5f00255&|i|r|s|t| +0#0000000&@68
+|:|f+0#af5f00255&|i|x|d|e|l| +0#0000000&@67
+|:|f+0#af5f00255&|o|l|d| +0#0000000&@69
+|:|f+0#af5f00255&|o|l|d|c|l|o|s|e| +0#0000000&@64
+|:|f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@61
+|:|f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@63
+|:|f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@65
+|:|f+0#af5f00255&|o|r| +0#0000000&@70
+|:|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&@65
+|:|g+0#af5f00255&|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@62
+|:|g+0#af5f00255&|o|t|o| +0#0000000&@69
+|:|g+0#af5f00255&|r|e|p| +0#0000000&@69
+@57|1|9@1|,|1| @8|1|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_12.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_12.dump
new file mode 100644
index 0000000..c6a778d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_12.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|g+0#af5f00255&|r|e|p| +0#0000000&@69
+|:|g+0#af5f00255&|r|e|p|a|d@1| +0#0000000&@66
+|:|g+0#af5f00255&|u|i| +0#0000000&@70
+|:|g+0#af5f00255&|v|i|m| +0#0000000&@69
+|:|h+0#af5f00255&|a|r|d|c|o|p|y| +0#0000000&@65
+>:|h+0#af5f00255&|e|l|p| +0#0000000&@69
+|:|h+0#af5f00255&|e|l|p|c|l|o|s|e| +0#0000000&@64
+|:|h+0#af5f00255&|e|l|p|f|i|n|d| +0#0000000&@65
+|:|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&@65
+|:|h+0#af5f00255&|e|l|p|t|a|g|s| +0#0000000&@65
+|:|h+0#af5f00255&|i|d|e| +0#0000000&@69
+|:|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&@64
+|:|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@66
+|:|h+0#af5f00255&|o|r|i|z|o|n|t|a|l| +0#0000000&@63
+|:|i+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@66
+|:|i+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@65
+|:|i+0#af5f00255&|f| +0#0000000&@71
+|:|i+0#af5f00255&|j|u|m|p| +0#0000000&@68
+|:|i+0#af5f00255&|l|i|s|t| +0#0000000&@68
+@57|2|1|7|,|1| @8|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_13.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_13.dump
new file mode 100644
index 0000000..273be39
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_13.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|i+0#af5f00255&|l|i|s|t| +0#0000000&@68
+|:|i+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|i+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|i+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|i+0#af5f00255&|m|p|o|r|t| +0#0000000&@67
+>:|i+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@62
+|:|i+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|i+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+|:|i+0#af5f00255&|n|t|e|r|f|a|c|e| +0#0000000&@64
+|:|i+0#af5f00255&|n|t|r|o| +0#0000000&@68
+|:|i+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@66
+|:|i+0#af5f00255&|s|p|l|i|t| +0#0000000&@67
+|:|i+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&@64
+|:|i+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|i+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|j+0#af5f00255&|o|i|n| +0#0000000&@69
+|:|j+0#af5f00255&|u|m|p|s| +0#0000000&@68
+|:|k+0#af5f00255&| +0#0000000&@72
+|:|k+0#af5f00255&|e@1|p|a|l|t| +0#0000000&@66
+@57|2|3|5|,|1| @8|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_14.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_14.dump
new file mode 100644
index 0000000..22125b7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_14.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|k+0#af5f00255&|e@1|p|a|l|t| +0#0000000&@66
+|:|k+0#af5f00255&|e@1|p|j|u|m|p|s| +0#0000000&@64
+|:|k+0#af5f00255&|e@1|p|m|a|r|k|s| +0#0000000&@64
+|:|k+0#af5f00255&|e@1|p@1|a|t@1|e|r|n|s| +0#0000000&@61
+|:|l+0#af5f00255&|a|b|o|v|e| +0#0000000&@67
+>:|l+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@63
+|:|l+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@65
+|:|l+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@65
+|:|l+0#af5f00255&|a|f|t|e|r| +0#0000000&@67
+|:|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@65
+|:|l+0#af5f00255&|a|s|t| +0#0000000&@69
+|:|l+0#af5f00255&|a|t|e|r| +0#0000000&@68
+|:|l+0#af5f00255&|b|e|f|o|r|e| +0#0000000&@66
+|:|l+0#af5f00255&|b|e|l|o|w| +0#0000000&@67
+|:|l+0#af5f00255&|b|o|t@1|o|m| +0#0000000&@66
+|:|l+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@66
+|:|l+0#af5f00255&|c|d| +0#0000000&@70
+|:|l+0#af5f00255&|c|h|d|i|r| +0#0000000&@67
+|:|l+0#af5f00255&|c|l|o|s|e| +0#0000000&@67
+@57|2|5|3|,|1| @8|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_15.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_15.dump
new file mode 100644
index 0000000..bf6bb90
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_15.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|l+0#af5f00255&|c|l|o|s|e| +0#0000000&@67
+|:|l+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@66
+|:|l+0#af5f00255&|d|o| +0#0000000&@70
+|:|l+0#af5f00255&|e|f|t| +0#0000000&@69
+|:|l+0#af5f00255&|e|f|t|a|b|o|v|e| +0#0000000&@64
+>:|l+0#af5f00255&|e|g|a|c|y| +0#0000000&@67
+|:|l+0#af5f00255&|e|x|p|r| +0#0000000&@68
+|:|l+0#af5f00255&|f|d|o| +0#0000000&@69
+|:|l+0#af5f00255&|f|i|l|e| +0#0000000&@68
+|:|l+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
+|:|l+0#af5f00255&|g|e|t|b|u|f@1|e|r| +0#0000000&@63
+|:|l+0#af5f00255&|g|e|t|e|x|p|r| +0#0000000&@65
+|:|l+0#af5f00255&|g|e|t|f|i|l|e| +0#0000000&@65
+|:|l+0#af5f00255&|g|r|e|p| +0#0000000&@68
+|:|l+0#af5f00255&|g|r|e|p|a|d@1| +0#0000000&@65
+|:|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&@64
+|:|l+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@65
+|:|l+0#af5f00255&|i|s|t| +0#0000000&@69
+|:|l+0#af5f00255&@1| +0#0000000&@71
+@57|2|7|1|,|1| @8|2|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_16.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_16.dump
new file mode 100644
index 0000000..39040dc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_16.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|l+0#af5f00255&@1| +0#0000000&@71
+|:|l+0#af5f00255&@1|a|s|t| +0#0000000&@68
+|:|l+0#af5f00255&@1|i|s|t| +0#0000000&@68
+|:|l+0#af5f00255&|m|a|k|e| +0#0000000&@68
+|:|l+0#af5f00255&|m|a|p| +0#0000000&@69
+>:|l+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|l+0#af5f00255&|n|e|w|e|r| +0#0000000&@67
+|:|l+0#af5f00255&|n|e|x|t| +0#0000000&@68
+|:|l+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:|l+0#af5f00255&|n|f|i|l|e| +0#0000000&@67
+|:|l+0#af5f00255&|N|f|i|l|e| +0#0000000&@67
+|:|l+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|#+0#0000e05&| |:|l|o|a|d|k|e|y|m|a|p| |#| |d|i|s|a|b|l|e|d| |-| |r|u|n|s| |u|n|t|i|l| |E|O|F| +0#0000000&@33
+|:|l+0#af5f00255&|o|a|d|v|i|e|w| +0#0000000&@65
+|:|l+0#af5f00255&|o|c|k|m|a|r|k|s| +0#0000000&@64
+|:|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&@66
+|:|l+0#af5f00255&|o|l|d|e|r| +0#0000000&@67
+|:|l+0#af5f00255&|o|p|e|n| +0#0000000&@68
+|:|l+0#af5f00255&|p|f|i|l|e| +0#0000000&@67
+@57|2|8|9|,|1| @8|2|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_17.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_17.dump
new file mode 100644
index 0000000..0caa855
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_17.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|l+0#af5f00255&|p|f|i|l|e| +0#0000000&@67
+|:|l+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
+|:|l+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
+|:|l+0#af5f00255&|s| +0#0000000&@71
+|:|l+0#af5f00255&|t|a|g| +0#0000000&@69
+>:|l+0#af5f00255&|u|a| +0#0000000&@70
+|:|l+0#af5f00255&|u|a|d|o| +0#0000000&@68
+|:|l+0#af5f00255&|u|a|f|i|l|e| +0#0000000&@66
+|:|l+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&@65
+|:|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&@62
+|:|l+0#af5f00255&|w|i|n|d|o|w| +0#0000000&@66
+|:|m+0#af5f00255&|a|k|e| +0#0000000&@69
+|:|m+0#af5f00255&|a|p|c|l|e|a|r| +0#0000000&@65
+|:|m+0#af5f00255&|a|p| +0#0000000&@70
+|:|m+0#af5f00255&|a|r|k| +0#0000000&@69
+|:|m+0#af5f00255&|a|r|k|s| +0#0000000&@68
+|:|m+0#af5f00255&|a|t|c|h| +0#0000000&@68
+|:|m+0#af5f00255&|e|n|u| +0#0000000&@69
+@57|3|0|7|,|1| @8|2|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_18.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_18.dump
new file mode 100644
index 0000000..cd568a5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_18.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|m+0#af5f00255&|e|n|u| +0#0000000&@69
+|:|m+0#af5f00255&|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@60
+|:|m+0#af5f00255&|e|s@1|a|g|e|s| +0#0000000&@65
+|:|m+0#af5f00255&|k|e|x|r|c| +0#0000000&@67
+|:|m+0#af5f00255&|k|s|e|s@1|i|o|n| +0#0000000&@64
+>:|m+0#af5f00255&|k|s|p|e|l@1| +0#0000000&@66
+|:|m+0#af5f00255&|k|v|i|e|w| +0#0000000&@67
+|:|m+0#af5f00255&|k|v|i|m|r|c| +0#0000000&@66
+|:|m+0#af5f00255&|o|v|e| +0#0000000&@69
+|:|m+0#af5f00255&|z|f|i|l|e| +0#0000000&@67
+|:|m+0#af5f00255&|z|s|c|h|e|m|e| +0#0000000&@65
+|:|n+0#af5f00255&|b|c|l|o|s|e| +0#0000000&@66
+|:|n+0#af5f00255&|b|k|e|y| +0#0000000&@68
+|:|n+0#af5f00255&|b|s|t|a|r|t| +0#0000000&@66
+|:|n+0#af5f00255&|e|w| +0#0000000&@70
+|:|n+0#af5f00255&|e|x|t| +0#0000000&@69
+|:|n+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|n+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|n+0#af5f00255&|m|e|n|u| +0#0000000&@68
+@57|3|2|5|,|1| @8|2|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_19.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_19.dump
new file mode 100644
index 0000000..d0d4e5d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_19.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|n+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&@65
+|:|n+0#af5f00255&@1|o|r|e|m|e|n|u| +0#0000000&@64
+|:|n+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@64
+|:|n+0#af5f00255&|o|h|l|s|e|a|r|c|h| +0#0000000&@63
+>:|n+0#af5f00255&|o|r|e|a|b@1|r|e|v| +0#0000000&@63
+|:|n+0#af5f00255&|o|r|e|m|a|p| +0#0000000&@66
+|:|n+0#af5f00255&|o|r|e|m|e|n|u| +0#0000000&@65
+|:|n+0#af5f00255&|o|r|m|a|l| +0#0000000&@67
+|:|n+0#af5f00255&|o|s|w|a|p|f|i|l|e| +0#0000000&@63
+|:|n+0#af5f00255&|u|m|b|e|r| +0#0000000&@67
+|:|n+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|n+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&@65
+|:|o+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|o+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|o+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|o+0#af5f00255&|n|l|y| +0#0000000&@69
+|:|o+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+@57|3|4|3|,|1| @8|2|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_20.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_20.dump
new file mode 100644
index 0000000..387c0b4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_20.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|o+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|o+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+|:|o+0#af5f00255&|p|t|i|o|n|s| +0#0000000&@66
+|:|o+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|o+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+>:|o+0#af5f00255&|w|n|s|y|n|t|a|x| +0#0000000&@64
+|:|p+0#af5f00255&|a|c|k|a|d@1| +0#0000000&@66
+|:|p+0#af5f00255&|a|c|k|l|o|a|d|a|l@1| +0#0000000&@62
+|:|p+0#af5f00255&|c|l|o|s|e| +0#0000000&@67
+|:|p+0#af5f00255&|e|d|i|t| +0#0000000&@68
+|:|p+0#af5f00255&|e|r|l| +0#0000000&@69
+|:|p+0#af5f00255&|e|r|l|d|o| +0#0000000&@67
+|:|p+0#af5f00255&|o|p| +0#0000000&@70
+|:|p+0#af5f00255&|o|p|u|p| +0#0000000&@68
+|:|p+0#af5f00255&@1|o|p| +0#0000000&@69
+|:|p+0#af5f00255&|r|e|s|e|r|v|e| +0#0000000&@65
+|:|p+0#af5f00255&|r|e|v|i|o|u|s| +0#0000000&@65
+|:|p+0#af5f00255&|r|i|n|t| +0#0000000&@68
+|:|p+0#af5f00255&|r|o|f|d|e|l| +0#0000000&@66
+@57|3|6|1|,|1| @8|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_21.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_21.dump
new file mode 100644
index 0000000..b79a1e6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_21.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|p+0#af5f00255&|r|o|f|d|e|l| +0#0000000&@66
+|:|p+0#af5f00255&|r|o|f|i|l|e| +0#0000000&@66
+|:|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&@63
+|:|p+0#af5f00255&|r|o|m|p|t|r|e|p|l| +0#0000000&@63
+|:|p+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@66
+>:|p+0#af5f00255&|t|a|g| +0#0000000&@69
+|:|p+0#af5f00255&|t|f|i|r|s|t| +0#0000000&@66
+|:|p+0#af5f00255&|t|j|u|m|p| +0#0000000&@67
+|:|p+0#af5f00255&|t|l|a|s|t| +0#0000000&@67
+|:|p+0#af5f00255&|t|n|e|x|t| +0#0000000&@67
+|:|p+0#af5f00255&|t|N|e|x|t| +0#0000000&@67
+|:|p+0#af5f00255&|t|p|r|e|v|i|o|u|s| +0#0000000&@63
+|:|p+0#af5f00255&|t|r|e|w|i|n|d| +0#0000000&@65
+|:|p+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@65
+|:|p+0#af5f00255&|u|b|l|i|c| +0#0000000&@67
+|:|p+0#af5f00255&|u|b|l|i|c| +0#0000000&@67
+|:|p+0#af5f00255&|u|t| +0#0000000&@70
+|:|p+0#af5f00255&|w|d| +0#0000000&@70
+|:|p+0#af5f00255&|y|3| +0#0000000&@70
+@57|3|7|9|,|1| @8|3|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_22.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_22.dump
new file mode 100644
index 0000000..b6248da
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_22.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|p+0#af5f00255&|y|3| +0#0000000&@70
+|:|p+0#af5f00255&|y|3|d|o| +0#0000000&@68
+|:|p+0#af5f00255&|y|3|f|i|l|e| +0#0000000&@66
+|:|p+0#af5f00255&|y|d|o| +0#0000000&@69
+|:|p+0#af5f00255&|y|f|i|l|e| +0#0000000&@67
+>:|p+0#af5f00255&|y|t|h|o|n| +0#0000000&@67
+|:|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&@66
+|:|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&@66
+|:|p+0#af5f00255&|y|x| +0#0000000&@70
+|:|p+0#af5f00255&|y|x|d|o| +0#0000000&@68
+|:|p+0#af5f00255&|y|x|f|i|l|e| +0#0000000&@66
+|:|q+0#af5f00255&|a|l@1| +0#0000000&@69
+|:|q+0#af5f00255&|u|i|t| +0#0000000&@69
+|:|q+0#af5f00255&|u|i|t|a|l@1| +0#0000000&@66
+|:|r+0#af5f00255&|e|a|d| +0#0000000&@69
+|:|r+0#af5f00255&|e|c|o|v|e|r| +0#0000000&@66
+|:|r+0#af5f00255&|e|d|i|r| +0#0000000&@68
+|:|r+0#af5f00255&|e|d|o| +0#0000000&@69
+|:|r+0#af5f00255&|e|d|r|a|w| +0#0000000&@67
+@57|3|9|7|,|1| @8|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_23.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_23.dump
new file mode 100644
index 0000000..039284c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_23.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|r+0#af5f00255&|e|d|r|a|w| +0#0000000&@67
+|:|r+0#af5f00255&|e|d|r|a|w|s|t|a|t|u|s| +0#0000000&@61
+|:|r+0#af5f00255&|e|d|r|a|w|t|a|b|l|i|n|e| +0#0000000&@60
+|:|r+0#af5f00255&|e|g|i|s|t|e|r|s| +0#0000000&@64
+|:|r+0#af5f00255&|e|s|i|z|e| +0#0000000&@67
+>:|r+0#af5f00255&|e|t|a|b| +0#0000000&@68
+|:|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@67
+|:|r+0#af5f00255&|e|w|i|n|d| +0#0000000&@67
+|:|r+0#af5f00255&|i|g|h|t| +0#0000000&@68
+|:|r+0#af5f00255&|i|g|h|t|b|e|l|o|w| +0#0000000&@63
+|:|r+0#af5f00255&|u|b|y| +0#0000000&@69
+|:|r+0#af5f00255&|u|b|y|d|o| +0#0000000&@67
+|:|r+0#af5f00255&|u|b|y|f|i|l|e| +0#0000000&@65
+|:|r+0#af5f00255&|u|n|d|o| +0#0000000&@68
+|:|r+0#af5f00255&|u|n|t|i|m|e| +0#0000000&@66
+|:|r+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@65
+|:|s+0#af5f00255&|a|l@1| +0#0000000&@69
+|:|s+0#af5f00255&|a|n|d|b|o|x| +0#0000000&@66
+|:|s+0#af5f00255&|a|r|g|u|m|e|n|t| +0#0000000&@64
+@57|4|1|5|,|1| @8|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_24.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_24.dump
new file mode 100644
index 0000000..0995e43
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_24.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|s+0#af5f00255&|a|r|g|u|m|e|n|t| +0#0000000&@64
+|:|s+0#af5f00255&|a|v|e|a|s| +0#0000000&@67
+|:|s+0#af5f00255&|b|a|l@1| +0#0000000&@68
+|:|s+0#af5f00255&|b|f|i|r|s|t| +0#0000000&@66
+|:|s+0#af5f00255&|b|l|a|s|t| +0#0000000&@67
+>:|s+0#af5f00255&|b|m|o|d|i|f|i|e|d| +0#0000000&@63
+|:|s+0#af5f00255&|b|n|e|x|t| +0#0000000&@67
+|:|s+0#af5f00255&|b|N|e|x|t| +0#0000000&@67
+|:|s+0#af5f00255&|b|p|r|e|v|i|o|u|s| +0#0000000&@63
+|:|s+0#af5f00255&|b|r|e|w|i|n|d| +0#0000000&@65
+|:|s+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@66
+|:|s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&@59
+|:|s+0#af5f00255&|c|r|i|p|t|n|a|m|e|s| +0#0000000&@62
+|:|s+0#af5f00255&|c|r|i|p|t|v|e|r|s|i|o|n| +0#0000000&@60
+|:|s+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@66
+|:|s+0#af5f00255&|e|t| +0#0000000&@70
+|:|s+0#af5f00255&|e|t|f|i|l|e|t|y|p|e| +0#0000000&@62
+|:|s+0#af5f00255&|e|t|g|l|o|b|a|l| +0#0000000&@64
+|:|s+0#af5f00255&|e|t|l|o|c|a|l| +0#0000000&@65
+@57|4|3@1|,|1| @8|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_25.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_25.dump
new file mode 100644
index 0000000..cb1c9d2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_25.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|s+0#af5f00255&|e|t|l|o|c|a|l| +0#0000000&@65
+|:|s+0#af5f00255&|f|i|n|d| +0#0000000&@68
+|:|s+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
+|:|s+0#af5f00255&|h|e|l@1| +0#0000000&@68
+|:|s+0#af5f00255&|i|g|n| +0#0000000&@69
+>:|s+0#af5f00255&|i|l|e|n|t| +0#0000000&@67
+|:|s+0#af5f00255&|i|m|a|l|t| +0#0000000&@67
+|:|s+0#af5f00255&|l|a|s|t| +0#0000000&@68
+|:|s+0#af5f00255&|l|e@1|p| +0#0000000&@68
+|:|s+0#af5f00255&|l|e@1|p|!| +0#0000000&@67
+|:|s+0#af5f00255&|m|a|g|i|c| +0#0000000&@67
+|:|s+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|s+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|s+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|s+0#af5f00255&|m|i|l|e| +0#0000000&@68
+|:|s+0#af5f00255&|n|e|x|t| +0#0000000&@68
+|:|s+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:|s+0#af5f00255&|n|o|m|a|g|i|c| +0#0000000&@65
+|:|s+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+@57|4|5|1|,|1| @8|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_26.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_26.dump
new file mode 100644
index 0000000..3d40709
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_26.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|s+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|s+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+|:|s+0#af5f00255&|o|r|t| +0#0000000&@69
+|:|s+0#af5f00255&|o|u|r|c|e| +0#0000000&@67
+|:|s+0#af5f00255&|p|e|l@1|d|u|m|p| +0#0000000&@64
+>:|s+0#af5f00255&|p|e|l@1|g|o@1|d| +0#0000000&@64
+|:|s+0#af5f00255&|p|e|l@1|i|n|f|o| +0#0000000&@64
+|:|s+0#af5f00255&|p|e|l@1|r|a|r|e| +0#0000000&@64
+|:|s+0#af5f00255&|p|e|l@1|r|e|p|a|l@1| +0#0000000&@62
+|:|s+0#af5f00255&|p|e|l@1|u|n|d|o| +0#0000000&@64
+|:|s+0#af5f00255&|p|e|l@1|w|r|o|n|g| +0#0000000&@63
+|:|s+0#af5f00255&|p|l|i|t| +0#0000000&@68
+|:|s+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
+|:|s+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
+|:|s+0#af5f00255&|t|a|g| +0#0000000&@69
+|:|s+0#af5f00255&|t|a|r|t|g|r|e|p|l|a|c|e| +0#0000000&@60
+|:|s+0#af5f00255&|t|a|r|t|i|n|s|e|r|t| +0#0000000&@62
+|:|s+0#af5f00255&|t|a|r|t|r|e|p|l|a|c|e| +0#0000000&@61
+|:|s+0#af5f00255&|t|a|t|i|c| +0#0000000&@67
+@57|4|6|9|,|1| @8|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_27.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_27.dump
new file mode 100644
index 0000000..42e8ed3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_27.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|s+0#af5f00255&|t|a|t|i|c| +0#0000000&@67
+|:|s+0#af5f00255&|t|a|t|i|c| +0#0000000&@67
+|:|s+0#af5f00255&|t|j|u|m|p| +0#0000000&@67
+|:|s+0#af5f00255&|t|o|p| +0#0000000&@69
+|:|s+0#af5f00255&|t|o|p|i|n|s|e|r|t| +0#0000000&@63
+>:|s+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@65
+|:|s+0#af5f00255&|u|b|s|t|i|t|u|t|e| +0#0000000&@63
+|:|s+0#af5f00255&|u|n|h|i|d|e| +0#0000000&@66
+|:|s+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|s+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|s+0#af5f00255&|u|s|p|e|n|d| +0#0000000&@66
+|:|s+0#af5f00255&|v|i|e|w| +0#0000000&@68
+|:|s+0#af5f00255&|w|a|p|n|a|m|e| +0#0000000&@65
+|:|s+0#af5f00255&|y|n|c|b|i|n|d| +0#0000000&@65
+|:|s+0#af5f00255&|y|n|t|a|x| +0#0000000&@67
+|:|s+0#af5f00255&|y|n|t|i|m|e| +0#0000000&@66
+|:|t+0#af5f00255&|a|b| +0#0000000&@70
+|:|t+0#af5f00255&|a|b|c|l|o|s|e| +0#0000000&@65
+|:|t+0#af5f00255&|a|b|d|o| +0#0000000&@68
+@57|4|8|7|,|1| @8|3|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_28.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_28.dump
new file mode 100644
index 0000000..d501862
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_28.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|t+0#af5f00255&|a|b|d|o| +0#0000000&@68
+|:|t+0#af5f00255&|a|b|e|d|i|t| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|f|i|n|d| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|f|i|r|s|t| +0#0000000&@65
+|:|t+0#af5f00255&|a|b|l|a|s|t| +0#0000000&@66
+>:|t+0#af5f00255&|a|b|m|o|v|e| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|n|e|w| +0#0000000&@67
+|:|t+0#af5f00255&|a|b|n|e|x|t| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|N|e|x|t| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|o|n|l|y| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|p|r|e|v|i|o|u|s| +0#0000000&@62
+|:|t+0#af5f00255&|a|b|r|e|w|i|n|d| +0#0000000&@64
+|:|t+0#af5f00255&|a|b|s| +0#0000000&@69
+|:|t+0#af5f00255&|a|g| +0#0000000&@70
+|:|t+0#af5f00255&|a|g|s| +0#0000000&@69
+|:|t+0#af5f00255&|c|d| +0#0000000&@70
+|:|t+0#af5f00255&|c|h|d|i|r| +0#0000000&@67
+|:|t+0#af5f00255&|c|l| +0#0000000&@70
+|:|t+0#af5f00255&|c|l|d|o| +0#0000000&@68
+@57|5|0|5|,|1| @8|4|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_29.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_29.dump
new file mode 100644
index 0000000..a4fe905
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_29.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|t+0#af5f00255&|c|l|d|o| +0#0000000&@68
+|:|t+0#af5f00255&|c|l|f|i|l|e| +0#0000000&@66
+|:|t+0#af5f00255&|e|a|r|o|f@1| +0#0000000&@66
+|:|t+0#af5f00255&|e|r|m|i|n|a|l| +0#0000000&@65
+|:|t+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
+>:|t+0#af5f00255&|h|r|o|w| +0#0000000&@68
+|:|t+0#af5f00255&|j|u|m|p| +0#0000000&@68
+|:|t+0#af5f00255&|l|a|s|t| +0#0000000&@68
+|:|t+0#af5f00255&|l|m|e|n|u| +0#0000000&@67
+|:|t+0#af5f00255&|l|n|o|r|e|m|e|n|u| +0#0000000&@63
+|:|t+0#af5f00255&|l|u|n|m|e|n|u| +0#0000000&@65
+|:|t+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|t+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|t+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|t+0#af5f00255&|n|e|x|t| +0#0000000&@68
+|:|t+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:|t+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|t+0#af5f00255&|o|p|l|e|f|t| +0#0000000&@66
+|:|t+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
+@57|5|2|3|,|1| @8|4|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_30.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_30.dump
new file mode 100644
index 0000000..1d8015a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_30.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|t+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
+|:|t+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
+|:|t+0#af5f00255&|r|y| +0#0000000&@70
+|:|t+0#af5f00255&|s|e|l|e|c|t| +0#0000000&@66
+|:|t+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+>:|t+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|t+0#af5f00255&|y|p|e| +0#0000000&@69
+|:|u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@61
+|:|u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@61
+|:|u+0#af5f00255&|n|d|o| +0#0000000&@69
+|:|u+0#af5f00255&|n|d|o|j|o|i|n| +0#0000000&@65
+|:|u+0#af5f00255&|n|d|o|l|i|s|t| +0#0000000&@65
+|:|u+0#af5f00255&|n|h|i|d|e| +0#0000000&@67
+|:|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&@64
+|:|u+0#af5f00255&|n|m|a|p| +0#0000000&@68
+|:|u+0#af5f00255&|n|m|e|n|u| +0#0000000&@67
+|:|u+0#af5f00255&|n|s|i|l|e|n|t| +0#0000000&@65
+|:|u+0#af5f00255&|p|d|a|t|e| +0#0000000&@67
+|:|v+0#af5f00255&|a|r| +0#0000000&@70
+@57|5|4|1|,|1| @8|4@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_31.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_31.dump
new file mode 100644
index 0000000..d4daaca
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_31.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|v+0#af5f00255&|a|r| +0#0000000&@70
+|:|v+0#af5f00255&|e|r|b|o|s|e| +0#0000000&@66
+|:|v+0#af5f00255&|e|r|s|i|o|n| +0#0000000&@66
+|:|v+0#af5f00255&|e|r|t|i|c|a|l| +0#0000000&@65
+|:|v+0#af5f00255&|g|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@61
+>:|v+0#af5f00255&|i|e|w| +0#0000000&@69
+|:|v+0#af5f00255&|i|m|9|c|m|d| +0#0000000&@66
+|#+0#0000e05&| |:|v|i|m|9|s|c|r|i|p|t| +0#0000000&@61
+|:|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&@66
+|:|v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&@63
+|:|v+0#af5f00255&|i|s|u|a|l| +0#0000000&@67
+|:|v+0#af5f00255&|i|u|s|a|g|e| +0#0000000&@66
+|:|v+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|v+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|v+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|v+0#af5f00255&|n|e|w| +0#0000000&@69
+|:|v+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|v+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+|:|v+0#af5f00255&|s|p|l|i|t| +0#0000000&@67
+@57|5@1|9|,|1| @8|4|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_32.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_32.dump
new file mode 100644
index 0000000..499f3da
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_32.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|v+0#af5f00255&|s|p|l|i|t| +0#0000000&@67
+|:|v+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|v+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|w+0#af5f00255&|a|l@1| +0#0000000&@69
+|:|w+0#af5f00255&|h|i|l|e| +0#0000000&@68
+>:|w+0#af5f00255&|i|n|c|m|d| +0#0000000&@67
+|:|w+0#af5f00255&|i|n|d|o| +0#0000000&@68
+|:|w+0#af5f00255&|i|n|p|o|s| +0#0000000&@67
+|:|w+0#af5f00255&|i|n|s|i|z|e| +0#0000000&@66
+|:|w+0#af5f00255&|n|e|x|t| +0#0000000&@68
+|:|w+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:|w+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
+|:|w+0#af5f00255&|q| +0#0000000&@71
+|:|w+0#af5f00255&|q|a|l@1| +0#0000000&@68
+|:|w+0#af5f00255&|r|i|t|e| +0#0000000&@68
+|:|w+0#af5f00255&|u|n|d|o| +0#0000000&@68
+|:|w+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@65
+|:|x+0#af5f00255&|a|l@1| +0#0000000&@69
+|:|x+0#af5f00255&|m|a|p| +0#0000000&@69
+@57|5|7@1|,|1| @8|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_33.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_33.dump
new file mode 100644
index 0000000..7ac1072
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_33.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|x+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|x+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|x+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|x+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|x+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+>:|x+0#af5f00255&|r|e|s|t|o|r|e| +0#0000000&@65
+|:|x+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|x+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|y+0#af5f00255&|a|n|k| +0#0000000&@69
+|:|z+0#af5f00255&| +0#0000000&@72
+@75
+|F|o@1|(+0#e000e06&|)||+0#0000000&|h+0#af5f00255&|e|l|p| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&|||h+0#af5f00255&|e|l|p| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)||+0#0000000&| |h+0#af5f00255&|e|l|p| +0#0000000&@63
+@75
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |2+0#af5f00255&|m|a|t|c|h| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |3+0#af5f00255&|m|a|t|c|h| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@56
+@57|5|9|5|,|1| @8|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_34.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_34.dump
new file mode 100644
index 0000000..259d457
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_34.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b|c|l|e|a|r| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b|o|v|e|l|e|f|t| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b|s|t|r|a|c|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|l@1| +0#0000000&@63
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|a|d@1| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|d|e|d|u|p|e| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|d|e|l|e|t|e| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|e|d|i|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g@1|l|o|b|a|l| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|l|o|c|a|l| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|s| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|u|m|e|n|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|s|c|i@1| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|F|o@1| ||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @41
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+@57|6|1|3|,|1| @8|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_35.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_35.dump
new file mode 100644
index 0000000..3fb5032
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_35.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|a|d@1| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|a|l@1| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|a|l|t| +0#0000000&@62
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|d|e|l|e|t|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|e|h|a|v|e| +0#0000000&|m+0#af5f00255&|s|w|i|n| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|e|h|a|v|e| +0#0000000&|x+0#af5f00255&|t|e|r|m| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|e|l|o|w|r|i|g|h|t| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|f|i|r|s|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|l|a|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|m|o|d|i|f|i|e|d| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|n|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|N|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|o|t|r|i|g|h|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&@58
+@57|6|3|1|,|1| @8|5|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_36.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_36.dump
new file mode 100644
index 0000000..9431275
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_36.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|o|w|s|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|f|d|o| +0#0000000&@61
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|f@1|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|f@1|e|r|s| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|n|l|o|a|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|w|i|p|e|o|u|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b|o|v|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|f|t|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|t|c|h| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|e|f|o|r|e| +0#0000000&@59
+@57|6|4|9|,|1| @8|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_37.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_37.dump
new file mode 100644
index 0000000..da8635d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_37.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|e|f|o|r|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|e|l|o|w| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|o|t@1|o|m| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&@1| +0#0000000&@64
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&@1|l|o|s|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|d| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|d|o| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|e|n|t|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|e|x|p|r| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|d|o| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|i|l|e| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|i|r|s|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|g|e|t|b|u|f@1|e|r| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|g|e|t|e|x|p|r| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|g|e|t|f|i|l|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|a|n|g|e|s| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|d|i|r| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|e|c|k|p|a|t|h| +0#0000000&@57
+@57|6@1|7|,|1| @8|5|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_38.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_38.dump
new file mode 100644
index 0000000..6c4b4c9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_38.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|e|c|k|p|a|t|h| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|e|c|k|t|i|m|e| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|a|s@1| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|a|s@1| +0#0000000&@61
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|a|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|e|a|r|j|u|m|p|s| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|i|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|o|s|e| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|a|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|e|w|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|f|i|l|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|f|i|l|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+@57|6|8|5|,|1| @8|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_39.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_39.dump
new file mode 100644
index 0000000..ec8610e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_39.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|l|d|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|l|o|r|s|c|h|e|m|e| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&@58
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|m|p|i|l|e|r| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|n|f|i|r|m| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|n|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|n|t|i|n|u|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|p|e|n| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|p|y| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|p|f|i|l|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|q|u|i|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|s|c|o|p|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|s|t|a|g| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&@57
+@57|7|0|3|,|1| @8|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_40.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_40.dump
new file mode 100644
index 0000000..7e09720
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_40.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|w|i|n|d|o|w| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|b|u|g| +0#0000000&@61
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|b|u|g@1|r|e@1|d|y| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|f| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|f|e|r| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|e|t|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|m|a|r|k|s| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|g|e|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|o|f@1| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|p|a|t|c|h| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|p|u|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|s|p|l|i|t| +0#0000000&@57
+@57|7|2|1|,|1| @8|5|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_41.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_41.dump
new file mode 100644
index 0000000..f9fd2c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_41.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|s|p|l|i|t| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|u|p|d|a|t|e| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|g|r|a|p|h|s| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|s|a|s@1|e|m|b|l|e| +0#0000000&@55
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|s|a|s@1|e|m|b|l|e| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|s|p|l|a|y| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|j|u|m|p| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|l| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|l|i|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|p| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|r|o|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|s|p|l|i|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|a|r|l|i|e|r| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|c|o|n|s|o|l|e| +0#0000000&@55
+@57|7|3|9|,|1| @8|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_42.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_42.dump
new file mode 100644
index 0000000..e2bded9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_42.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|c|o|n|s|o|l|e| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|e|r@1| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|h|l| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|n| +0#0000000&@61
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|w|i|n|d|o|w| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|d|i|t| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|l|s|e| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|l|s|e|i|f| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|e|n|u|m| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|i|f| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|i|n|t|e|r|f|a|c|e| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|t|r|y| +0#0000000&@60
+@57|7|5|7|,|1| @8|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_43.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_43.dump
new file mode 100644
index 0000000..4687bc4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_43.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|t|r|y| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|w|h|i|l|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|e|w| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|u|m| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|v|a|l| +0#0000000&@62
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|i|t| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|p|o|r|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|p|o|r|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|u|s|a|g|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|e| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|e|s| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|e|t|y|p|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|t|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|a|l| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|a|l@1|y| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|d| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|i|s|h| +0#0000000&@60
+@57|7@1|5|,|1| @8|6|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_44.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_44.dump
new file mode 100644
index 0000000..0d4ee69
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_44.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|i|s|h| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|r|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|x|d|e|l| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d|c|l|o|s|e| +0#0000000&@57
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|o|t|o| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|r|e|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|r|e|p|a|d@1| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|u|i| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|v|i|m| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|a|r|d|c|o|p|y| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|c|l|o|s|e| +0#0000000&@57
+@57|7|9|3|,|1| @8|6|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_45.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_45.dump
new file mode 100644
index 0000000..ed46723
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_45.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|c|l|o|s|e| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|f|i|n|d| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|t|a|g|s| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|d|e| +0#0000000&@62
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|o|r|i|z|o|n|t|a|l| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|f| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|j|u|m|p| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|l|i|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|a|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|p|o|r|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+@57|8|1@1|,|1| @8|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_46.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_46.dump
new file mode 100644
index 0000000..7a519ee
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_46.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|t|e|r|f|a|c|e| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|t|r|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@59
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|s|p|l|i|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |j+0#af5f00255&|o|i|n| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |j+0#af5f00255&|u|m|p|s| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p|a|l|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p|j|u|m|p|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p|m|a|r|k|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p@1|a|t@1|e|r|n|s| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|b|o|v|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@58
+@57|8|2|9|,|1| @8|6|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_47.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_47.dump
new file mode 100644
index 0000000..c6e9fbe
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_47.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|f|t|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|s|t| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|t|e|r| +0#0000000&@61
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|e|f|o|r|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|e|l|o|w| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|o|t@1|o|m| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|d| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|h|d|i|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|l|o|s|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|d|o| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|f|t| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|f|t|a|b|o|v|e| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|g|a|c|y| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|x|p|r| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|f|d|o| +0#0000000&@62
+@57|8|4|7|,|1| @8|6|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_48.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_48.dump
new file mode 100644
index 0000000..0069011
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_48.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|f|d|o| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|f|i|l|e| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|f|i|r|s|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|e|t|b|u|f@1|e|r| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|e|t|e|x|p|r| +0#0000000&@58
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|e|t|f|i|l|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|r|e|p| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|r|e|p|a|d@1| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|i|s|t| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1|a|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1|i|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|k|e| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|e|w|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|e|x|t| +0#0000000&@61
+@57|8|6|5|,|1| @8|7|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_49.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_49.dump
new file mode 100644
index 0000000..2222220
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_49.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|N|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|f|i|l|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|N|f|i|l|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+>#+0#0000e05&| |F|o@1|(|)| ||| |l|o|a|d|k|e|y|m|a|p| |#| |d|i|s|a|b|l|e|d| |-| |r|u|n|s| |u|n|t|i|l| |E|O|F| +0#0000000&@26
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|a|d|v|i|e|w| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|c|k|m|a|r|k|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|l|d|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|p|e|n| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|p|f|i|l|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|s| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|t|a|g| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a|f|i|l|e| +0#0000000&@59
+@57|8@1|3|,|1| @8|7|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_50.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_50.dump
new file mode 100644
index 0000000..4e38fbc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_50.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a|f|i|l|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|w|i|n|d|o|w| +0#0000000&@59
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|k|e| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|r|k| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|o|v|e| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|p| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|p|c|l|e|a|r| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|r|k|s| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|t|c|h| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|n|u| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@53
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|s@1|a|g|e|s| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|e|x|r|c| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|s|e|s@1|i|o|n| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|s|p|e|l@1| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|v|i|e|w| +0#0000000&@60
+@57|9|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_51.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_51.dump
new file mode 100644
index 0000000..413a19e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_51.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|v|i|e|w| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|v|i|m|r|c| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|z|f|i|l|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|z|s|c|h|e|m|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|b|c|l|o|s|e| +0#0000000&@59
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|b|k|e|y| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|b|s|t|a|r|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|e|w| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|e|x|t| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|m|a|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&@1|o|r|e|m|e|n|u| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|h|l|s|e|a|r|c|h| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|a|b@1|r|e|v| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|m|a|p| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|m|e|n|u| +0#0000000&@58
+@57|9|1|9|,|1| @8|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_52.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_52.dump
new file mode 100644
index 0000000..4a48f67
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_52.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|m|e|n|u| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|m|a|l| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|s|w|a|p|f|i|l|e| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|u|m|b|e|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|m|a|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|l|y| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|p|t|i|o|n|s| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|w|n|s|y|n|t|a|x| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|a|c|k|a|d@1| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|a|c|k|l|o|a|d|a|l@1| +0#0000000&@55
+@57|9|3|7|,|1| @8|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_53.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_53.dump
new file mode 100644
index 0000000..904af14
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_53.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|a|c|k|l|o|a|d|a|l@1| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|c|l|o|s|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|e|d|i|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|e|r|l| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|e|r|l|d|o| +0#0000000&@60
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|o|p| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|o|p|u|p| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&@1|o|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|e|s|e|r|v|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|e|v|i|o|u|s| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|i|n|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|f|d|e|l| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|f|i|l|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|m|p|t|r|e|p|l| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|a|g| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|f|i|r|s|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|j|u|m|p| +0#0000000&@60
+@57|9|5@1|,|1| @8|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_54.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_54.dump
new file mode 100644
index 0000000..13bf876
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_54.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|j|u|m|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|l|a|s|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|n|e|x|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|N|e|x|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|p|r|e|v|i|o|u|s| +0#0000000&@56
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|r|e|w|i|n|d| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|u|b|l|i|c| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|u|b|l|i|c| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|u|t| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|w|d| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3|f|i|l|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|d|o| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|f|i|l|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&@59
+@57|9|7|3|,|1| @8|8|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_55.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_55.dump
new file mode 100644
index 0000000..1566106
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_55.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x|f|i|l|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |q+0#af5f00255&|a|l@1| +0#0000000&@62
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |q+0#af5f00255&|u|i|t| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |q+0#af5f00255&|u|i|t|a|l@1| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|a|d| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|c|o|v|e|r| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|i|r| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|o| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w|s|t|a|t|u|s| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w|t|a|b|l|i|n|e| +0#0000000&@53
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|g|i|s|t|e|r|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|s|i|z|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|t|a|b| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|w|i|n|d| +0#0000000&@60
+@57|9@1|1|,|1| @8|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_56.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_56.dump
new file mode 100644
index 0000000..252e0db
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_56.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|w|i|n|d| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|i|g|h|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|i|g|h|t|b|e|l|o|w| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|b|y| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|b|y|d|o| +0#0000000&@60
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|b|y|f|i|l|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|n|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|n|t|i|m|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|l@1| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|n|d|b|o|x| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|r|g|u|m|e|n|t| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|v|e|a|s| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|a|l@1| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|f|i|r|s|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|l|a|s|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|m|o|d|i|f|i|e|d| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|n|e|x|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|N|e|x|t| +0#0000000&@60
+@57|1|0@1|9|,|1| @7|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_57.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_57.dump
new file mode 100644
index 0000000..ea46840
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_57.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|N|e|x|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|p|r|e|v|i|o|u|s| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|r|e|w|i|n|d| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&@52
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|r|i|p|t|n|a|m|e|s| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|r|i|p|t|v|e|r|s|i|o|n| +0#0000000&@53
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|f|i|l|e|t|y|p|e| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|g|l|o|b|a|l| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|l|o|c|a|l| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|f|i|n|d| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|f|i|r|s|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|h|e|l@1| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|g|n| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|l|e|n|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|m|a|l|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|a|s|t| +0#0000000&@61
+@57|1|0|2|7|,|1| @7|8|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_58.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_58.dump
new file mode 100644
index 0000000..3ca8140
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_58.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|a|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|e@1|p| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|e@1|p|!| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|g|i|c| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|p| +0#0000000&@62
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|i|l|e| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|N|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|m|a|g|i|c| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|o|r|t| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|o|u|r|c|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|d|u|m|p| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|g|o@1|d| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|i|n|f|o| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|r|a|r|e| +0#0000000&@57
+@57|1|0|4|5|,|1| @7|8|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_59.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_59.dump
new file mode 100644
index 0000000..361e7a8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_59.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|r|a|r|e| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|r|e|p|a|l@1| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|u|n|d|o| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|w|r|o|n|g| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|l|i|t| +0#0000000&@61
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|g| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|g|r|e|p|l|a|c|e| +0#0000000&@53
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|i|n|s|e|r|t| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|r|e|p|l|a|c|e| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|t|i|c| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|t|i|c| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|j|u|m|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|o|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|o|p|i|n|s|e|r|t| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|b|s|t|i|t|u|t|e| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|h|i|d|e| +0#0000000&@59
+@57|1|0|6|3|,|1| @7|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_60.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_60.dump
new file mode 100644
index 0000000..c643b3a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_60.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|h|i|d|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|s|p|e|n|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|v|i|e|w| +0#0000000&@61
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|w|a|p|n|a|m|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|y|n|c|b|i|n|d| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|y|n|t|a|x| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|y|n|t|i|m|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|c|l|o|s|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|e|d|i|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|f|i|n|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|f|i|r|s|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|l|a|s|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|m|o|v|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|n|e|w| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|n|e|x|t| +0#0000000&@59
+@57|1|0|8|1|,|1| @7|8|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_61.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_61.dump
new file mode 100644
index 0000000..d024fa5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_61.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|n|e|x|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|N|e|x|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|o|n|l|y| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|p|r|e|v|i|o|u|s| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|r|e|w|i|n|d| +0#0000000&@57
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|s| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|g| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|g|s| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|d| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|h|d|i|r| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l|f|i|l|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|e|a|r|o|f@1| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|e|r|m|i|n|a|l| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|f|i|r|s|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|h|r|o|w| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|j|u|m|p| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|a|s|t| +0#0000000&@61
+@57|1|0|9@1|,|1| @7|9|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_62.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_62.dump
new file mode 100644
index 0000000..10f3bcc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_62.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|a|s|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|m|e|n|u| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|n|o|r|e|m|e|n|u| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|u|n|m|e|n|u| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|m|a|p| +0#0000000&@62
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|n|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|N|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|o|p|l|e|f|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|r|y| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|s|e|l|e|c|t| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|y|p|e| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@54
+@57|1@2|7|,|1| @7|9|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_63.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_63.dump
new file mode 100644
index 0000000..890f79f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_63.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o|j|o|i|n| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o|l|i|s|t| +0#0000000&@58
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|h|i|d|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|m|a|p| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|m|e|n|u| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|s|i|l|e|n|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|p|d|a|t|e| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|a|r| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|b|o|s|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|s|i|o|n| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|t|i|c|a|l| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|g|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|9|c|m|d| +0#0000000&@59
+|#+0#0000e05&| |c|a|l@1| |F|o@1|(|)| ||| |v|i|m|9|s|c|r|i|p|t| +0#0000000&@49
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&@59
+@57|1@1|3|5|,|1| @7|9|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_64.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_64.dump
new file mode 100644
index 0000000..11db98b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_64.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&@56
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|s|u|a|l| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|u|s|a|g|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|e|w| +0#0000000&@62
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|m|a|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|n|e|w| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|s|p|l|i|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|r|i|t|e| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|N|e|x|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|a|l@1| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|h|i|l|e| +0#0000000&@61
+@57|1@1|5|3|,|1| @7|9|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_65.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_65.dump
new file mode 100644
index 0000000..3640a53
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_65.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|h|i|l|e| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|s|i|z|e| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|p|o|s| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|n|e|x|t| +0#0000000&@61
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|q| +0#0000000&@64
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|q|a|l@1| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|u|n|d|o| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|a|l@1| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|a|p| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|e|n|u| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|r|e|s|t|o|r|e| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|a|p| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+@57|1@1|7|1|,|1| @7|9|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_66.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_66.dump
new file mode 100644
index 0000000..465500e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_66.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |y+0#af5f00255&|a|n|k| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |z+0#af5f00255&| +0#0000000&@65
+@75
+@75
+>#+0#0000e05&| |L|e|g|a|c|y|-|s|c|r|i|p|t| |o|n|l|y| +0#0000000&@54
+@75
+|:|P|r|i|n|t| @68
+|:+0#af5f00255&|a|p@1|e|n|d| +0#0000000&@67
+| +0#e000002&@3|t|e|x|t| +0#0000000&@66
+|.+0#af5f00255&| +0#0000000&@73
+|:+0#af5f00255&|c|h|a|n|g|e| +0#0000000&@67
+| +0#e000002&@3|t|e|x|t| +0#0000000&@66
+|.+0#af5f00255&| +0#0000000&@73
+|:+0#af5f00255&|i|n|s|e|r|t| +0#0000000&@67
+| +0#e000002&@3|t|e|x|t| +0#0000000&@66
+|.+0#af5f00255&| +0#0000000&@73
+|:|k+0#af5f00255&| +0#0000000&@72
+|:|l+0#af5f00255&|e|t| +0#0000000&@70
+@57|1@1|8|9|,|1| @7|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_67.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_67.dump
new file mode 100644
index 0000000..0292dd4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_67.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|l+0#af5f00255&|e|t| +0#0000000&@70
+|:|m+0#af5f00255&|o|d|e| +0#0000000&@69
+|:|o+0#af5f00255&|p|e|n| +0#0000000&@69
+|:|t+0#af5f00255&| +0#0000000&@72
+|:|u+0#af5f00255&|n|l|e|t| +0#0000000&@68
+>:|x+0#af5f00255&|i|t| +0#0000000&@70
+@75
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a|p@1|e|n|d| @60
+@4|t|e|x|t| @66
+|.+0#af5f00255&| +0#0000000&@73
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|a|n|g|e| +0#0000000&@60
+@4|t|e|x|t| @66
+|.+0#af5f00255&| +0#0000000&@73
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i|n|s|e|r|t| @60
+@4|t|e|x|t| @66
+|.+0#af5f00255&| +0#0000000&@73
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&| +0#0000000&@65
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|t| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|o|d|e| +0#0000000&@62
+@57|1|2|0|7|,|1| @7|9@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_68.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_68.dump
new file mode 100644
index 0000000..1e90095
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_68.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|o|d|e| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|p|e|n| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&| +0#0000000&@65
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|l|e|t| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|i|t| +0#0000000&@63
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2@1|5|,|0|-|1| @5|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_00.dump
index ef9f580..b36eb62 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_00.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_00.dump
@@ -10,11 +10,11 @@
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
|d+0#af5f00255&|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@65
-@2|#+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
+| +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
@75
|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
-@2|#+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
+| +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
|}+0#e000e06&| +0#0000000&@73
@75
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump
index 72a7dfb..1fd26e6 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump
@@ -1,11 +1,11 @@
|e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&@68
@75
|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
-@2|#+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
+| +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
|}+0#e000e06&| +0#0000000&@73
> @74
|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
-@2|#+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
+| +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
|}+0#e000e06&| +0#0000000&@73
|~+0#4040ff13&| @73
|~| @73
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_99.dump b/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_99.dump
deleted file mode 100644
index efaf53b..0000000
--- a/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|#+0#0000e05#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|c|o|m@1|e|n|t|_|s|t|r|i|n|g|s| |=| |v|:|t|r|u|e| +0#0000000&@20
-@75
-|#+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@55
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
-@2|"+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@65
-@2|#+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@75
-|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
-@2|#+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
-|}+0#e000e06&| +0#0000000&@73
-@75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
-@2|#+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
->}+0#e000e06&| +0#0000000&@73
-@57|2@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_00.dump
new file mode 100644
index 0000000..04f643d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m|9| |:|f|u|n|c|t|i|o|n| |a|n|d| |:|d|e|f| |t|a|i|l| |c|o|m@1|e|n|t| |e|r@1|o|r|s| +0#0000000&@29
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |u|n|l|e|t|!| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| +0#0000000&@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|T|e|s|t|1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@14|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|2|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@12|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&| +0#0000000&@64
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@14|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_01.dump
new file mode 100644
index 0000000..cb7caf5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_01.dump
@@ -0,0 +1,20 @@
+|f+0#af5f00255#ffffff0|u|n| +0#0000000&|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@14|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&@54
+>e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@12|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|o|T|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@8|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|4|(+0#e000e06&|)| +0#0000000&@56
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|5|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@12|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@10|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|5+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&@56
+@57|1|9|,|1| @9|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_02.dump b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_02.dump
new file mode 100644
index 0000000..e74df67
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&@56
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|T|e|s|t|6|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@14|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@2|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@6|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@4>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|6+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|6|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#e000e06&|1+0#e000002&|,+0#0000000&| |6+0#e000002&|)+0#e000e06&| +0#0000000&@54
+@2|e+0#af5f00255&|x|e|c| +0#0000000&|$+0#e000002&|'|e|c|h|o| |T|e|s|t|{+0#e000e06&|d+0#00e0e07&|}+0#e000e06&|(+0#e000002&|)|'| +0#0000000&@50
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|,|5| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_00.dump
new file mode 100644
index 0000000..b6ed490
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m|9| |:|f|u|n|c|t|i|o|n| |a|n|d| |:|d|e|f| |t|a|i|l| |c|o|m@1|e|n|t|s| +0#0000000&@35
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |u|n|l|e|t|!| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| +0#0000000&@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|T|e|s|t|1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@14|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|2|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@12|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&| +0#0000000&@64
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@14|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_01.dump
new file mode 100644
index 0000000..6cb37d1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_01.dump
@@ -0,0 +1,20 @@
+|f+0#af5f00255#ffffff0|u|n| +0#0000000&|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@14|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&@54
+>e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@12|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|o|T|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@8|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|4|(+0#e000e06&|)| +0#0000000&@56
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|5|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@12|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@10|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|5+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&@56
+@57|1|9|,|1| @9|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_02.dump b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_02.dump
new file mode 100644
index 0000000..7df9e8f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&@56
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|T|e|s|t|6|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@14|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@2|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@6|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@4>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|6+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|6|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#e000e06&|1+0#e000002&|,+0#0000000&| |6+0#e000002&|)+0#e000e06&| +0#0000000&@54
+@2|e+0#af5f00255&|x|e|c| +0#0000000&|$+0#e000002&|'|e|c|h|o| |T|e|s|t|{+0#e000e06&|d+0#00e0e07&|}+0#e000e06&|(+0#e000002&|)|'| +0#0000000&@50
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|,|5| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_keymap_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_loadkeymap_00.dump
index d1bc96c..9e6247a 100644
--- a/runtime/syntax/testdir/dumps/vim9_keymap_00.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_loadkeymap_00.dump
@@ -1,10 +1,10 @@
>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
@75
-|#+0#0000e05&| |V|i|m| |K|e|y|m|a|p| |f|i|l|e| |f|o|r| |s|y|n|t|a|x| |t|e|s|t|i|n|g| +0#0000000&@38
+|#+0#0000e05&| |V|i|m| |:|l|o|a|d|k|e|y|m|a|p| |c|o|m@1|a|n|d| +0#0000000&@49
@75
|s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&|u|t|f|-+0#af5f00255&|8+0#e000002&| +0#0000000&@54
@75
-|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|k|e|y|m|a|p|_|n|a|m|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|s|y|n|t|a|x|-|t|e|s|t|"| +0#0000000&@41
+|b+0#00e0e07&|:|k|e|y|m|a|p|_|n|a|m|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|s|y|n|t|a|x|-|t|e|s|t|"| +0#0000000&@45
@75
|l+0#af5f00255&|o|a|d|k|e|y|m|a|p| +0#0000000&@64
@75
diff --git a/runtime/syntax/testdir/dumps/vim9_keymap_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_loadkeymap_01.dump
index 1d0823f..1d0823f 100644
--- a/runtime/syntax/testdir/dumps/vim9_keymap_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_loadkeymap_01.dump
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_00.dump
index 191b9f2..9708525 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_00.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_00.dump
@@ -10,11 +10,11 @@
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
|d+0#af5f00255&|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@65
-@2|#+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
+| +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
@75
|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
-@2|#+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
+| +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
|}+0#e000e06&| +0#0000000&@73
@75
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump
index ef54148..bde4dbc 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump
@@ -1,11 +1,11 @@
|e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&@68
@75
|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
-@2|#+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
+| +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
|}+0#e000e06&| +0#0000000&@73
> @74
|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
-@2|#+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
+| +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
|}+0#e000e06&| +0#0000000&@73
|~+0#4040ff13&| @73
|~| @73
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_99.dump b/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_99.dump
deleted file mode 100644
index c384e74..0000000
--- a/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|#+0#0000e05#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|c|o|m@1|e|n|t|_|s|t|r|i|n|g|s| |=| |v|:|f|a|l|s|e| +0#0000000&@19
-@75
-|#+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@55
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
-@2|"+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@65
-@2|#+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@75
-|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
-@2|#+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
-|}+0#e000e06&| +0#0000000&@73
-@75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
-@2|#+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
->}+0#e000e06&| +0#0000000&@73
-@57|2@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_keymap_99.dump b/runtime/syntax/testdir/dumps/vim9_keymap_99.dump
deleted file mode 100644
index 8afcbba..0000000
--- a/runtime/syntax/testdir/dumps/vim9_keymap_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-@2|#+0#0000e05&| |A|n|o|t|h|e|r| |l|i|n|e| |c|o|m@1|e|n|t| +0#0000000&@50
-@75
-|a| |A| @3|B+0#0000e05&|a|s|i|c| |m|a|p@1|i|n|g| +0#0000000&@54
-|'|a| |á| @2|M+0#0000e05&|o|r|e| |t|h|a|n| |o|n|e| |c|h|a|r| |i|n| |f|i|r|s|t| |c|o|l|u|m|n| +0#0000000&@33
-@75
-|#+0#0000e05&| |S|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| +0#0000000&@56
-|<+0#e000e06&|c|h|a|r|-|6|2|>| +0#0000000&@5|B| @14|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |-| |d|e|c|i|m|a|l| +0#0000000&@2
-|c| @13|<+0#e000e06&|c|h|a|r|-|0|1|0|3|>| +0#0000000&@4|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |R|H|S| |-| |o|c|t|a|l| +0#0000000&@4
-|<+0#e000e06&|c|h|a|r|-|0|x|0@1|6|4|>| +0#0000000&@1|<+0#e000e06&|c|h|a|r|-|0|x|0@1|4@1|>| +0#0000000&@2|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |a|n|d| |R|H|S| |-| |h|e
-|x|a|d|e|c|i|m|a|l| +0#0000000&@65
-@75
-|#+0#0000e05&| |V|i|m|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@43
-|\|#| |<+0#e000e06&|c|h|a|r|-|0|x|0@1|a|3|>| +0#0000000&@14|L+0#0000e05&|i|n|e| |s|h|o|u|l|d| |n|o|t| |m|a|t|c|h| |a|s| |a| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e
-|n|t| +0#0000000&@72
-|"| |“| @27|L+0#0000e05&|i|n|e| |s|h|o|u|l|d| |n|o|t| |m|a|t|c|h| |a|s| |a| |l|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m
-@1|e|n|t| +0#0000000&@70
->:| |#| @27|L+0#0000e05&|i|n|e| |s|h|o|u|l|d| |n|o|t| |m|a|t|c|h| |a|s| |a| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e
-|n|t| +0#0000000&@72
-@57|2|6|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_legacy_header_99.dump b/runtime/syntax/testdir/dumps/vim9_legacy_header_99.dump
deleted file mode 100644
index 27ff90e..0000000
--- a/runtime/syntax/testdir/dumps/vim9_legacy_header_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |c|o|m@1|e|n|t| +0#0000000&@65
-@75
-|i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|h+0#00e0e07&|a|s|(+0#e000e06&|'+0#e000002&|v|i|m|9|s|c|r|i|p|t|'|)+0#e000e06&| +0#0000000&@53
-@2|#| |4+0#e000002&|2| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@58
-@2|s+0#af5f00255&|o|u|r|c|e| +0#0000000&|f|o@1|.+0#af5f00255&|v|i|m| +0#0000000&@58
-@2|f+0#af5f00255&|i|n|i|s|h| +0#0000000&@66
-|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-@75
-|v+0#af5f00255&|i|m|9|s|c|r|i|p|t| +0#0000000&|n+0#e000e06&|o|c|l|e|a|r| +0#0000000&@56
-@75
-|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-@75
-@1|#+0#0000e05&| |s|t|r|i|n|g| |o|n|l|y| |r|e|c|o|g|n|i|s|e|d| |w|i|t|h| |l|e|a|d|i|n|g| |c|h|a|r| +0#0000000&@31
-@1>"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&@57
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|6|,|2| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim9_legacy_header_fold_99.dump b/runtime/syntax/testdir/dumps/vim9_legacy_header_fold_99.dump
deleted file mode 100644
index fe339c4..0000000
--- a/runtime/syntax/testdir/dumps/vim9_legacy_header_fold_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|++0#0000e05#a8a8a8255|-@1| |1@1| |l|i|n|e|s|:| |"| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |=| |"|H|"| ||| |s|e|t| |f|d|m|=|s|y|n|t|a|x|-
-|v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&|n+0#e000e06&|o|c|l|e|a|r| +0#0000000&@56
-@75
-|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-@75
-@1|#+0#0000e05&| |s|t|r|i|n|g| |o|n|l|y| |r|e|c|o|g|n|i|s|e|d| |w|i|t|h| |l|e|a|d|i|n|g| |c|h|a|r| +0#0000000&@31
-@1>"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&@57
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|7|,|2| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim9_shebang_99.dump b/runtime/syntax/testdir/dumps/vim9_shebang_99.dump
deleted file mode 100644
index 71f543e..0000000
--- a/runtime/syntax/testdir/dumps/vim9_shebang_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|#+0#e000e06#ffffff0|!|/|u|s|r|/|b|i|n|/|e|n|v| |v|i|m| |-|S| +0#0000000&@53
-|v+0#af5f00255&|i|m|9|s|c|r|i|p|t| +0#0000000&@64
-@75
-|#+0#0000e05&| |V|i|m| |s|h|e|b|a|n|g| |l|i|n|e| +0#0000000&@56
-@75
-|#+0#0000e05&| |j|u|s|t| |a| |l|i|n|e| |c|o|m@1|e|n|t| +0#0000000&@53
->#+0#0000e05&|!|/|u|s|r|/|b|i|n|/|e|n|v| |v|i|m| |-|S| +0#0000000&@53
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|7|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_comment_03.dump b/runtime/syntax/testdir/dumps/vim_comment_03.dump
index 2d40f6c..70c9519 100644
--- a/runtime/syntax/testdir/dumps/vim_comment_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_comment_03.dump
@@ -2,7 +2,7 @@
|"+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1|3|0|4|7| +0#0000000&@59
@75
|i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|"+0#e000002&|:|D|i|f@1|O|r|i|g|"|)+0#e000e06&| +0#0000000&@51
-@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#0000000&|n|o|f|i|l|e| ||+0#af5f00255&| +0#0000000&|r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e|d|i|t| +0#0000000&|#| ||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@1
+@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#af5f00255&|n+0#0000000&|o|f|i|l|e| ||| |r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e|d|i|t| +0#0000000&|#| ||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@1
@18>\+0#e000e06&| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&|p+0#af5f00255&| +0#0000000&||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@33
|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
@75
diff --git a/runtime/syntax/testdir/dumps/vim_comment_99.dump b/runtime/syntax/testdir/dumps/vim_comment_99.dump
deleted file mode 100644
index bb1fbb0..0000000
--- a/runtime/syntax/testdir/dumps/vim_comment_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|"+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1|3|0|4|7| +0#0000000&@59
-@75
-|i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|"+0#e000002&|:|D|i|f@1|O|r|i|g|"|)+0#e000e06&| +0#0000000&@51
-@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#0000000&|n|o|f|i|l|e| ||+0#af5f00255&| +0#0000000&|r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e|d|i|t| +0#0000000&|#| ||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@1
-@18|\+0#e000e06&| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&|p+0#af5f00255&| +0#0000000&||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@33
-|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
-@75
-@75
-|"+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1@1|3|0|7| |a|n|d| |#|1@1|5|6|0| +0#0000000&@48
-@75
-|"+0#0000e05&| |T|h|i|s| |i|s| |w|h|a|t| |w|e| |c|a|l@1| |"| |b|l|a|h| +0#0000000&@45
-@75
-@75
-|"+0#0000e05&| |I|s@1|u|e| |#| |#|9|5|8|7| +0#0000000&@59
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|C|o|m@1|e|n|t|T|i|t|l|e|(+0#e000e06&|)| +0#0000000&@56
-| +0#0000e05&@1|#| |T|i|t|l|e|:| |.@2| +0#0000000&@60
->e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@57|6|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_abbreviate_99.dump b/runtime/syntax/testdir/dumps/vim_ex_abbreviate_99.dump
deleted file mode 100644
index 7622ebf..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_abbreviate_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|a+0#af5f00255#ffffff0|b@1|r|e|v| +0#0000000&|<+0#e000e06&|e|x|p|r|>| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|f|o@1| |f|o@1|b|a|r| @41
-|c+0#af5f00255&|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|e|x|p|r|>| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|c|f|o@1| |c|f|o@1|b|a|r| @38
-|i+0#af5f00255&|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|e|x|p|r|>| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|i|f|o@1| |c|f|o@1|b|a|r| @38
-@75
-|n+0#af5f00255&|o|r|e|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|f|o@1| |f|o@1|b|a|r| @44
-|c+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|c|f|o@1| |c|f|o@1|b|a|r| @41
-|i+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|i|f|o@1| |c|f|o@1|b|a|r| @41
-@75
-|a+0#af5f00255&|b@1|r|e|v| +0#0000000&|<+0#e000e06&|e|x|p|r|>| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|f|o@1| |f|o@1|b|a|r| @41
-|c+0#af5f00255&|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|e|x|p|r|>| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|c|f|o@1| |c|f|o@1|b|a|r| @38
-|i+0#af5f00255&|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|e|x|p|r|>| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|i|f|o@1| |c|f|o@1|b|a|r| @38
-@75
-|u+0#af5f00255&|n|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|f|o@1| @53
-|c+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|c|f|o@1| @51
-|i+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|i|f|o@1| @51
-@75
-|a+0#af5f00255&|b|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@58
-|c+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@57
->i+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@57
-@57|2|5|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_99.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_99.dump
deleted file mode 100644
index 1e07f5b..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_augroup_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |V|i|m| |:|a|u|g|r|o|u|p| |c|o|m@1|a|n|d| +0#0000000&@52
-@75
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|f|o@1| @63
-@2|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*| |e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@41
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @63
-@75
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|f|o@1| ||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @38
-|a+0#af5f00255&|u|g|r|o|u|p|!| +0#0000000&|f|o@1| @62
-@75
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|!|@|#|$|%|^|&|*|(|)|_|+| @54
-@2|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*| |e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@41
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @63
-@75
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|!|@|#|$|%|^|&|*|(|)|_|+| ||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @29
-|a+0#af5f00255&|u|g|r|o|u|p|!| +0#0000000&|!|@|#|$|%|^|&|*|(|)|_|+| @53
-@75
-|"+0#0000e05&| |l|i|s|t| |g|r|o|u|p|s| +0#0000000&@61
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&@67
-> @74
-@57|1|9|,|0|-|1| @7|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_behave_99.dump b/runtime/syntax/testdir/dumps/vim_ex_behave_99.dump
deleted file mode 100644
index c3fefeb..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_behave_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |V|i|m| |b|e|h|a|v|e| |c|o|m@1|a|n|d| +0#0000000&@54
-@75
-|b+0#af5f00255&|e|h|a|v|e| +0#0000000&|m+0#af5f00255&|s|w|i|n| +0#0000000&@62
-|b+0#af5f00255&|e|h|a|v|e| +0#0000000&|x+0#af5f00255&|t|e|r|m| +0#0000000&@62
-@75
-|b+0#af5f00255&|e|h|a|v|e|!| +0#0000000&|m+0#af5f00255&|s|w|i|n| +0#0000000&@61
->b+0#af5f00255&|e|h|a|v|e|!| +0#0000000&|x+0#af5f00255&|t|e|r|m| +0#0000000&@61
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|7|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_call_00.dump b/runtime/syntax/testdir/dumps/vim_ex_call_00.dump
new file mode 100644
index 0000000..117f159
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_call_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|c|a|l@1| |c|o|m@1|a|n|d| +0#0000000&@55
+@75
+@75
+|"+0#0000e05&| |f|u|n|c|t|i|o|n|s| |f|o|r| |w|h|i|c|h| |t|h|e|r|e| |a|r|e| |s|a|m|e|-|n|a|m|e|d| |E|x| |c|o|m@1|a|n|d|s| +0#0000000&@20
+@75
+|c+0#af5f00255&|a|l@1| +0#0000000&|b+0#00e0e07&|r|o|w|s|e|(+0#e000e06&|s+0#00e0e07&|a|v|e|,+0#0000000&| |t+0#00e0e07&|i|t|l|e|,+0#0000000&| |i+0#00e0e07&|n|i|t|d|i|r|,+0#0000000&| |d+0#00e0e07&|e|f|a|u|l|t|)+0#e000e06&| +0#0000000&@32
+|c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|a|l@1|(+0#e000e06&|f+0#00e0e07&|u|n|c|,+0#0000000&| |a+0#00e0e07&|r|g|l|i|s|t|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@44
+|c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|h|d|i|r|(+0#e000e06&|d+0#00e0e07&|i|r|)+0#e000e06&| +0#0000000&@59
+|c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|m+0#00e0e07&|s|g|,+0#0000000&| |c+0#00e0e07&|h|o|i|c|e|s|,+0#0000000&| |d+0#00e0e07&|e|f|a|u|l|t|,+0#0000000&| |t+0#00e0e07&|y|p|e|)+0#e000e06&| +0#0000000&@33
+|c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|o|p|y|(+0#e000e06&|e+0#00e0e07&|x|p|r|)+0#e000e06&| +0#0000000&@59
+|c+0#af5f00255&|a|l@1| +0#0000000&|d+0#00e0e07&|e|l|e|t|e|(+0#e000e06&|f+0#00e0e07&|n|a|m|e|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@49
+|c+0#af5f00255&|a|l@1| +0#0000000&|e+0#00e0e07&|v|a|l|(+0#e000e06&|s+0#00e0e07&|t|r|i|n|g|)+0#e000e06&| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|c+0#00e0e07&|o|m@1|a|n|d|)+0#e000e06&| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|e+0#00e0e07&|x|p|r|1|,+0#0000000&| |e+0#00e0e07&|x|p|r|2|)+0#e000e06&| +0#0000000&@49
+|c+0#af5f00255&|a|l@1| +0#0000000&|f+0#00e0e07&|u|n|c|t|i|o|n|(+0#e000e06&|n+0#00e0e07&|a|m|e|,+0#0000000&| |a+0#00e0e07&|r|g|l|i|s|t|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@40
+|c+0#af5f00255&|a|l@1| +0#0000000&|i+0#00e0e07&|n|s|e|r|t|(+0#e000e06&|o+0#00e0e07&|b|j|e|c|t|,+0#0000000&| |i+0#00e0e07&|t|e|m|,+0#0000000&| |i+0#00e0e07&|d|x|)+0#e000e06&| +0#0000000&@44
+|c+0#af5f00255&|a|l@1| +0#0000000&|j+0#00e0e07&|o|i|n|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |s+0#00e0e07&|e|p|)+0#e000e06&| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|e+0#00e0e07&|x|p|r|1|,+0#0000000&| |e+0#00e0e07&|x|p|r|2|)+0#e000e06&| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|e+0#00e0e07&|x|p|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|t|a|r|t|,+0#0000000&| |c+0#00e0e07&|o|u|n|t|)+0#e000e06&| +0#0000000&@39
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_call_01.dump b/runtime/syntax/testdir/dumps/vim_ex_call_01.dump
new file mode 100644
index 0000000..a32e79e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_call_01.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|e+0#00e0e07&|x|p|r|1|,+0#0000000&| |e+0#00e0e07&|x|p|r|2|)+0#e000e06&| +0#0000000&@49
+|c+0#af5f00255&|a|l@1| +0#0000000&|f+0#00e0e07&|u|n|c|t|i|o|n|(+0#e000e06&|n+0#00e0e07&|a|m|e|,+0#0000000&| |a+0#00e0e07&|r|g|l|i|s|t|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@40
+|c+0#af5f00255&|a|l@1| +0#0000000&|i+0#00e0e07&|n|s|e|r|t|(+0#e000e06&|o+0#00e0e07&|b|j|e|c|t|,+0#0000000&| |i+0#00e0e07&|t|e|m|,+0#0000000&| |i+0#00e0e07&|d|x|)+0#e000e06&| +0#0000000&@44
+|c+0#af5f00255&|a|l@1| +0#0000000&|j+0#00e0e07&|o|i|n|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |s+0#00e0e07&|e|p|)+0#e000e06&| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|e+0#00e0e07&|x|p|r|1|,+0#0000000&| |e+0#00e0e07&|x|p|r|2|)+0#e000e06&| +0#0000000&@52
+>c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|e+0#00e0e07&|x|p|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|t|a|r|t|,+0#0000000&| |c+0#00e0e07&|o|u|n|t|)+0#e000e06&| +0#0000000&@39
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|o|d|e|(+0#e000e06&|e+0#00e0e07&|x|p|r|)+0#e000e06&| +0#0000000&@59
+|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |h+0#00e0e07&|o|w|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@48
+|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|p|l|i|t|(+0#e000e06&|s+0#00e0e07&|t|r|i|n|g|,+0#0000000&| |p+0#00e0e07&|a|t@1|e|r|n|,+0#0000000&| |k+0#00e0e07&|e@1|p|e|m|p|t|y|)+0#e000e06&| +0#0000000&@36
+|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@37
+|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|w|a|p|n|a|m|e|(+0#e000e06&|b+0#00e0e07&|u|f|)+0#e000e06&| +0#0000000&@56
+@75
+|c+0#af5f00255&|a|l@1| +0#0000000&|b+0#00e0e07&|r|o|w|s|e| +0#0000000&|(+0#e000e06&|s+0#00e0e07&|a|v|e|,+0#0000000&| |t+0#00e0e07&|i|t|l|e|,+0#0000000&| |i+0#00e0e07&|n|i|t|d|i|r|,+0#0000000&| |d+0#00e0e07&|e|f|a|u|l|t|)+0#e000e06&| +0#0000000&@31
+|c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|a|l@1| +0#0000000&|(+0#e000e06&|f+0#00e0e07&|u|n|c|,+0#0000000&| |a+0#00e0e07&|r|g|l|i|s|t|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@43
+|c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|h|d|i|r| +0#0000000&|(+0#e000e06&|d+0#00e0e07&|i|r|)+0#e000e06&| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|o|n|f|i|r|m| +0#0000000&|(+0#e000e06&|m+0#00e0e07&|s|g|,+0#0000000&| |c+0#00e0e07&|h|o|i|c|e|s|,+0#0000000&| |d+0#00e0e07&|e|f|a|u|l|t|,+0#0000000&| |t+0#00e0e07&|y|p|e|)+0#e000e06&| +0#0000000&@32
+|c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|o|p|y| +0#0000000&|(+0#e000e06&|e+0#00e0e07&|x|p|r|)+0#e000e06&| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|d+0#00e0e07&|e|l|e|t|e| +0#0000000&|(+0#e000e06&|f+0#00e0e07&|n|a|m|e|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@48
+|c+0#af5f00255&|a|l@1| +0#0000000&|e+0#00e0e07&|v|a|l| +0#0000000&|(+0#e000e06&|s+0#00e0e07&|t|r|i|n|g|)+0#e000e06&| +0#0000000&@56
+@57|1|9|,|1| @9|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_call_02.dump b/runtime/syntax/testdir/dumps/vim_ex_call_02.dump
new file mode 100644
index 0000000..7306304
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_call_02.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|e+0#00e0e07&|v|a|l| +0#0000000&|(+0#e000e06&|s+0#00e0e07&|t|r|i|n|g|)+0#e000e06&| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|e+0#00e0e07&|x|e|c|u|t|e| +0#0000000&|(+0#e000e06&|c+0#00e0e07&|o|m@1|a|n|d|)+0#e000e06&| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|f+0#00e0e07&|i|l|t|e|r| +0#0000000&|(+0#e000e06&|e+0#00e0e07&|x|p|r|1|,+0#0000000&| |e+0#00e0e07&|x|p|r|2|)+0#e000e06&| +0#0000000&@48
+|c+0#af5f00255&|a|l@1| +0#0000000&|f+0#00e0e07&|u|n|c|t|i|o|n| +0#0000000&|(+0#e000e06&|n+0#00e0e07&|a|m|e|,+0#0000000&| |a+0#00e0e07&|r|g|l|i|s|t|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@39
+|c+0#af5f00255&|a|l@1| +0#0000000&|i+0#00e0e07&|n|s|e|r|t| +0#0000000&|(+0#e000e06&|o+0#00e0e07&|b|j|e|c|t|,+0#0000000&| |i+0#00e0e07&|t|e|m|,+0#0000000&| |i+0#00e0e07&|d|x|)+0#e000e06&| +0#0000000&@43
+>c+0#af5f00255&|a|l@1| +0#0000000&|j+0#00e0e07&|o|i|n| +0#0000000&|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |s+0#00e0e07&|e|p|)+0#e000e06&| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p| +0#0000000&|(+0#e000e06&|e+0#00e0e07&|x|p|r|1|,+0#0000000&| |e+0#00e0e07&|x|p|r|2|)+0#e000e06&| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h| +0#0000000&|(+0#e000e06&|e+0#00e0e07&|x|p|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|t|a|r|t|,+0#0000000&| |c+0#00e0e07&|o|u|n|t|)+0#e000e06&| +0#0000000&@38
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|o|d|e| +0#0000000&|(+0#e000e06&|e+0#00e0e07&|x|p|r|)+0#e000e06&| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|o|r|t| +0#0000000&|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |h+0#00e0e07&|o|w|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@47
+|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|p|l|i|t| +0#0000000&|(+0#e000e06&|s+0#00e0e07&|t|r|i|n|g|,+0#0000000&| |p+0#00e0e07&|a|t@1|e|r|n|,+0#0000000&| |k+0#00e0e07&|e@1|p|e|m|p|t|y|)+0#e000e06&| +0#0000000&@35
+|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|u|b|s|t|i|t|u|t|e| +0#0000000&|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@36
+|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|w|a|p|n|a|m|e| +0#0000000&|(+0#e000e06&|b+0#00e0e07&|u|f|)+0#e000e06&| +0#0000000&@55
+@75
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@64
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|r|g|1|)+0#e000e06&| +0#0000000&@60
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|r|g|1|,+0#0000000&| |a+0#00e0e07&|r|g|2|)+0#e000e06&| +0#0000000&@54
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|r+0#00e0e07&|e|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|c+0#00e0e07&|a|l@1|(+0#e000e06&|f+0#00e0e07&|u|n|c|,+0#0000000&| |a+0#00e0e07&|r|g|l|i|s|t|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@39
+@57|3|7|,|1| @9|9|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_call_03.dump b/runtime/syntax/testdir/dumps/vim_ex_call_03.dump
new file mode 100644
index 0000000..857f319
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_call_03.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|r+0#00e0e07&|e|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|c+0#00e0e07&|a|l@1|(+0#e000e06&|f+0#00e0e07&|u|n|c|,+0#0000000&| |a+0#00e0e07&|r|g|l|i|s|t|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@39
+>l+0#af5f00255&|e|t| +0#0000000&|r+0#00e0e07&|e|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|c+0#00e0e07&|a|l@1| +0#0000000&|(+0#e000e06&|f+0#00e0e07&|u|n|c|,+0#0000000&| |a+0#00e0e07&|r|g|l|i|s|t|,+0#0000000&| |d+0#00e0e07&|i|c|t|)+0#e000e06&| +0#0000000&@38
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5|1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_catch_99.dump b/runtime/syntax/testdir/dumps/vim_ex_catch_99.dump
deleted file mode 100644
index 39e47c1..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_catch_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |V|i|m| |:|c|a|t|c|h| |c|o|m@1|a|n|d| +0#0000000&@54
-@75
-|"+0#0000e05&| |:|h|e|l|p| |:|c|a|t|c|h| +0#0000000&@60
-@75
-|c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|^+0#0000000&|V|i|m|:|I|n|t|e|r@1|u|p|t|$|/+0#e000e06&| +0#0000000&@8|"+0#0000e05&| |c|a|t|c|h| |i|n|t|e|r@1|u|p|t|s| |(|C|T|R|L|-|C|)| +0#0000000&@15
-|c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|^+0#0000000&|V|i|m|\+0#e000e06&|%|(|(+0#0000000&|\|a|\|+|)|\+0#e000e06&|)|\+0#0000000&|=|:|E|/+0#e000e06&| +0#0000000&@4|"+0#0000e05&| |c|a|t|c|h| |a|l@1| |V|i|m| |e|r@1|o|r|s| +0#0000000&@20
-|c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|^+0#0000000&|V|i|m|\+0#e000e06&|%|(|(+0#0000000&|\|a|\|+|)|\+0#e000e06&|)|\+0#0000000&|=|:|/+0#e000e06&| +0#0000000&@5|"+0#0000e05&| |c|a|t|c|h| |e|r@1|o|r|s| |a|n|d| |i|n|t|e|r@1|u|p|t|s| +0#0000000&@13
-|c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|^+0#0000000&|V|i|m|(|w|r|i|t|e|)|:|/+0#e000e06&| +0#0000000&@11|"+0#0000e05&| |c|a|t|c|h| |a|l@1| |e|r@1|o|r|s| |i|n| |:|w|r|i|t|e| +0#0000000&@14
-|c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|^+0#0000000&|V|i|m|\+0#e000e06&|%|(|(+0#0000000&|\|a|\|+|)|\+0#e000e06&|)|\+0#0000000&|=|:|E|1|2|3|:|/+0#e000e06&| +0#0000000&|"+0#0000e05&| |c|a|t|c|h| |e|r@1|o|r| |E|1|2|3| +0#0000000&@24
-|c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|m+0#0000000&|y|-|e|x|c|e|p|t|i|o|n|/+0#e000e06&| +0#0000000&@11|"+0#0000e05&| |c|a|t|c|h| |u|s|e|r| |e|x|c|e|p|t|i|o|n| +0#0000000&@20
-|c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|.+0#0000000&|*|/+0#e000e06&| +0#0000000&@21|"+0#0000e05&| |c|a|t|c|h| |e|v|e|r|y|t|h|i|n|g| +0#0000000&@24
-|c+0#af5f00255&|a|t|c|h| +0#0000000&@26|"+0#0000e05&| |s|a|m|e| |a|s| |/|.|*|/| +0#0000000&@28
-@75
-|"+0#0000e05&| |:|h|e|l|p| |:|t|r|y| +0#0000000&@62
-@75
-|t+0#af5f00255&|r|y| +0#0000000&||| |s+0#af5f00255&|l|e@1|p| +0#0000000&|1+0#e000002&|0@1| +0#0000000&||| |c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|^+0#0000000&|V|i|m|:|I|n|t|e|r@1|u|p|t|$|/+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|n|d|t|r|y| +0#0000000&@24
->t+0#af5f00255&|r|y| +0#0000000&||| |e+0#af5f00255&|d|i|t| +0#0000000&||| |c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|^+0#0000000&|V|i|m|(|e|d|i|t|)|:|E|\|d|\|+|/+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|e|r@1|o|r|"| +0#0000000&||| |e+0#af5f00255&|n|d|t|r|y| +0#0000000&@13
-|~+0#4040ff13&| @73
-|~| @73
-| +0#0000000&@56|1|7|,|1| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_99.dump b/runtime/syntax/testdir/dumps/vim_ex_command_99.dump
deleted file mode 100644
index 96cfa16..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_command_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |V|i|m| |:|c|o|m@1|a|n|d| |c|o|m@1|a|n|d| +0#0000000&@52
-@75
-|"+0#0000e05&| |I|s@1|u|e| |#|1|4|1|3|5| +0#0000000&@60
-@75
->c+0#af5f00255&|o|m| +0#0000000&|F|o@1| |c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|y|s|t|e|m|(+0#0000000&|'+0#e000002&|l|s|'|)+0#0000000&| @49
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|5|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_05.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_05.dump
index f280535..fa7c153 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_05.dump
@@ -13,8 +13,8 @@
|:|c+0#af5f00255&|h|e|c|k|p|a|t|h| +0#0000000&@64
|:|c+0#af5f00255&|h|e|c|k|t|i|m|e| +0#0000000&@64
|:|c+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@65
-|:|c+0#af5f00255&|l|a|s@1| +0#0000000&@68
|:|c+0#af5f00255&|l|a|s|t| +0#0000000&@68
|:|c+0#af5f00255&|l|e|a|r|j|u|m|p|s| +0#0000000&@63
|:|c+0#af5f00255&|l|i|s|t| +0#0000000&@68
+|:|c+0#af5f00255&|l|o|s|e| +0#0000000&@68
@57|9|1|,|1| @10|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_06.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_06.dump
index 1e7b7b5..d17f509 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_06.dump
@@ -1,10 +1,9 @@
-|:+0&#ffffff0|c+0#af5f00255&|l|i|s|t| +0#0000000&@68
-|:|c+0#af5f00255&|l|o|s|e| +0#0000000&@68
+|:+0&#ffffff0|c+0#af5f00255&|l|o|s|e| +0#0000000&@68
|:|c+0#af5f00255&|m|a|p| +0#0000000&@69
|:|c+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
|:|c+0#af5f00255&|m|e|n|u| +0#0000000&@68
->:|c+0#af5f00255&|n|e|x|t| +0#0000000&@68
-|:|c+0#af5f00255&|n|e|w|e|r| +0#0000000&@67
+|:|c+0#af5f00255&|n|e|x|t| +0#0000000&@68
+>:|c+0#af5f00255&|n|e|w|e|r| +0#0000000&@67
|:|c+0#af5f00255&|n|f|i|l|e| +0#0000000&@67
|:|c+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
|:|c+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@62
@@ -17,4 +16,5 @@
|:|c+0#af5f00255&|o|m|p|i|l|e|r| +0#0000000&@65
|:|c+0#af5f00255&|o|n|t|i|n|u|e| +0#0000000&@65
|:|c+0#af5f00255&|o|n|f|i|r|m| +0#0000000&@66
+|:|c+0#af5f00255&|o|n|s|t| +0#0000000&@68
@57|1|0|9|,|1| @9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_07.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_07.dump
index e5f9736..f35762b 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_07.dump
@@ -1,10 +1,9 @@
-|:+0&#ffffff0|c+0#af5f00255&|o|n|f|i|r|m| +0#0000000&@66
-|:|c+0#af5f00255&|o|n|s|t| +0#0000000&@68
+|:+0&#ffffff0|c+0#af5f00255&|o|n|s|t| +0#0000000&@68
|:|c+0#af5f00255&|o|p|e|n| +0#0000000&@68
|:|c+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
|:|c+0#af5f00255&|p|f|i|l|e| +0#0000000&@67
->:|c+0#af5f00255&|q|u|i|t| +0#0000000&@68
-|:|c+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
+|:|c+0#af5f00255&|q|u|i|t| +0#0000000&@68
+>:|c+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
|:|c+0#af5f00255&|s|c|o|p|e| +0#0000000&@67
|:|c+0#af5f00255&|s|t|a|g| +0#0000000&@68
|:|c+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
@@ -17,4 +16,5 @@
|:|d+0#af5f00255&|e|f| +0#0000000&@70
|:|d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&@63
|:|d+0#af5f00255&|e|f|e|r| +0#0000000&@68
+|:|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&@63
@57|1|2|7|,|1| @8|1|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_08.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_08.dump
index 2f41043..49fabab 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_08.dump
@@ -1,10 +1,9 @@
-|:+0&#ffffff0|d+0#af5f00255&|e|f|e|r| +0#0000000&@68
-|:|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&@63
+|:+0&#ffffff0|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&@63
|:|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&@62
|:|d+0#af5f00255&|e|l|m|a|r|k|s| +0#0000000&@65
|:|d+0#af5f00255&|i|f@1|u|p|d|a|t|e| +0#0000000&@63
->:|d+0#af5f00255&|i|f@1|g|e|t| +0#0000000&@66
-|:|d+0#af5f00255&|i|f@1|o|f@1| +0#0000000&@66
+|:|d+0#af5f00255&|i|f@1|g|e|t| +0#0000000&@66
+>:|d+0#af5f00255&|i|f@1|o|f@1| +0#0000000&@66
|:|d+0#af5f00255&|i|f@1|p|a|t|c|h| +0#0000000&@64
|:|d+0#af5f00255&|i|f@1|p|u|t| +0#0000000&@66
|:|d+0#af5f00255&|i|f@1|s|p|l|i|t| +0#0000000&@64
@@ -17,4 +16,5 @@
|:|d+0#af5f00255&|l|i|s|t| +0#0000000&@68
|:|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@64
|:|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&@64
+|:|d+0#af5f00255&|p| +0#0000000&@71
@57|1|4|5|,|1| @8|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_09.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_09.dump
index ffe0524..b38d066 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_09.dump
@@ -1,10 +1,9 @@
-|:+0&#ffffff0|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&@64
-|:|d+0#af5f00255&|p| +0#0000000&@71
+|:+0&#ffffff0|d+0#af5f00255&|p| +0#0000000&@71
|:|d+0#af5f00255&|r|o|p| +0#0000000&@69
|:|d+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@66
|:|d+0#af5f00255&|s|p|l|i|t| +0#0000000&@67
->:|e+0#af5f00255&|d|i|t| +0#0000000&@69
-|:|e+0#af5f00255&|a|r|l|i|e|r| +0#0000000&@66
+|:|e+0#af5f00255&|d|i|t| +0#0000000&@69
+>:|e+0#af5f00255&|a|r|l|i|e|r| +0#0000000&@66
|:|e+0#af5f00255&|c|h|o| +0#0000000&@69
|:|e+0#af5f00255&|c|h|o|c|o|n|s|o|l|e| +0#0000000&@62
|:|e+0#af5f00255&|c|h|o|e|r@1| +0#0000000&@66
@@ -15,6 +14,7 @@
|:|e+0#af5f00255&|l|s|e| +0#0000000&@69
|:|e+0#af5f00255&|l|s|e|i|f| +0#0000000&@67
|:|e+0#af5f00255&|m|e|n|u| +0#0000000&@68
-|:|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@65
|:|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@67
+|:|e+0#af5f00255&|n|d|i|f| +0#0000000&@68
+|:|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@67
@57|1|6|3|,|1| @8|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_10.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_10.dump
index 22b28eb..3fb760c 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_10.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_10.dump
@@ -1,15 +1,12 @@
-|:+0&#ffffff0|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@67
-|:|e+0#af5f00255&|n|d|i|f| +0#0000000&@68
-|:|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@67
+|:+0&#ffffff0|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@67
|:|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@62
|:|e+0#af5f00255&|n|d|t|r|y| +0#0000000&@67
->:|e+0#af5f00255&|n|d|w|h|i|l|e| +0#0000000&@65
+|:|e+0#af5f00255&|n|d|w|h|i|l|e| +0#0000000&@65
|:|e+0#af5f00255&|n|e|w| +0#0000000&@69
-|:|e+0#af5f00255&|v|a|l| +0#0000000&@69
+>:|e+0#af5f00255&|v|a|l| +0#0000000&@69
|:|e+0#af5f00255&|x| +0#0000000&@71
|:|e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&@66
|:|e+0#af5f00255&|x|i|t| +0#0000000&@69
-|:|e+0#af5f00255&|x|p|o|r|t| +0#0000000&@67
|:|e+0#af5f00255&|x|u|s|a|g|e| +0#0000000&@66
|:|f+0#af5f00255&|i|l|e| +0#0000000&@69
|:|f+0#af5f00255&|i|l|e|s| +0#0000000&@68
@@ -17,4 +14,7 @@
|:|f+0#af5f00255&|i|l|t|e|r| +0#0000000&@67
|:|f+0#af5f00255&|i|n|d| +0#0000000&@69
|:|f+0#af5f00255&|i|n|a|l| +0#0000000&@68
+|:|f+0#af5f00255&|i|n|a|l@1|y| +0#0000000&@66
+|:|f+0#af5f00255&|i|n|i|s|h| +0#0000000&@67
+|:|f+0#af5f00255&|i|r|s|t| +0#0000000&@68
@57|1|8|1|,|1| @8|1|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_11.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_11.dump
index 7b9a19f..fda4e8f 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_11.dump
@@ -1,12 +1,9 @@
-|:+0&#ffffff0|f+0#af5f00255&|i|n|a|l| +0#0000000&@68
-|:|f+0#af5f00255&|i|n|a|l@1|y| +0#0000000&@66
-|:|f+0#af5f00255&|i|n|i|s|h| +0#0000000&@67
-|:|f+0#af5f00255&|i|r|s|t| +0#0000000&@68
+|:+0&#ffffff0|f+0#af5f00255&|i|r|s|t| +0#0000000&@68
|:|f+0#af5f00255&|i|x|d|e|l| +0#0000000&@67
->:|f+0#af5f00255&|o|l|d| +0#0000000&@69
+|:|f+0#af5f00255&|o|l|d| +0#0000000&@69
|:|f+0#af5f00255&|o|l|d|c|l|o|s|e| +0#0000000&@64
|:|f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@63
-|:|f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@61
+>:|f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@61
|:|f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@65
|:|f+0#af5f00255&|o|r| +0#0000000&@70
|:|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&@65
@@ -17,4 +14,7 @@
|:|g+0#af5f00255&|u|i| +0#0000000&@70
|:|g+0#af5f00255&|v|i|m| +0#0000000&@69
|:|h+0#af5f00255&|a|r|d|c|o|p|y| +0#0000000&@65
+|:|h+0#af5f00255&|e|l|p| +0#0000000&@69
+|:|h+0#af5f00255&|e|l|p|c|l|o|s|e| +0#0000000&@64
+|:|h+0#af5f00255&|e|l|p|f|i|n|d| +0#0000000&@65
@57|1|9@1|,|1| @8|1|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_12.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_12.dump
index 03c5b96..3cbc546 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_12.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_12.dump
@@ -1,12 +1,9 @@
-|:+0&#ffffff0|h+0#af5f00255&|a|r|d|c|o|p|y| +0#0000000&@65
-|:|h+0#af5f00255&|e|l|p| +0#0000000&@69
-|:|h+0#af5f00255&|e|l|p|c|l|o|s|e| +0#0000000&@64
-|:|h+0#af5f00255&|e|l|p|f|i|n|d| +0#0000000&@65
+|:+0&#ffffff0|h+0#af5f00255&|e|l|p|f|i|n|d| +0#0000000&@65
|:|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&@65
->:|h+0#af5f00255&|e|l|p|t|a|g|s| +0#0000000&@65
+|:|h+0#af5f00255&|e|l|p|t|a|g|s| +0#0000000&@65
|:|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&@64
|:|h+0#af5f00255&|i|d|e| +0#0000000&@69
-|:|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@66
+>:|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@66
|:|h+0#af5f00255&|o|r|i|z|o|n|t|a|l| +0#0000000&@63
|:+0#af5f00255&|i|n|s|e|r|t| +0#0000000&@67
| +0#e000002&@3|t|e|x|t| +0#0000000&@66
@@ -17,4 +14,7 @@
|:|i+0#af5f00255&|j|u|m|p| +0#0000000&@68
|:|i+0#af5f00255&|l|i|s|t| +0#0000000&@68
|:|i+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|i+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|i+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|i+0#af5f00255&|m|p|o|r|t| +0#0000000&@67
@57|2|1|7|,|1| @8|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_13.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_13.dump
index 5671882..cc114cf 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_13.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_13.dump
@@ -1,12 +1,9 @@
-|:+0&#ffffff0|i+0#af5f00255&|m|a|p| +0#0000000&@69
-|:|i+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
-|:|i+0#af5f00255&|m|e|n|u| +0#0000000&@68
-|:|i+0#af5f00255&|m|p|o|r|t| +0#0000000&@67
+|:+0&#ffffff0|i+0#af5f00255&|m|p|o|r|t| +0#0000000&@67
|:|i+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
->:|i+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@62
+|:|i+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@62
|:|i+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
|:|i+0#af5f00255&|n|t|r|o| +0#0000000&@68
-|:|i+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@66
+>:|i+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@66
|:|i+0#af5f00255&|s|p|l|i|t| +0#0000000&@67
|:|i+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
|:|i+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&@64
@@ -17,4 +14,7 @@
|:|k+0#af5f00255&|e@1|p|a|l|t| +0#0000000&@66
|:|k+0#af5f00255&|e@1|p|m|a|r|k|s| +0#0000000&@64
|:|k+0#af5f00255&|e@1|p|j|u|m|p|s| +0#0000000&@64
+|:|k+0#af5f00255&|e@1|p@1|a|t@1|e|r|n|s| +0#0000000&@61
+|:|l+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:|l+0#af5f00255&|N|f|i|l|e| +0#0000000&@67
@57|2|3|5|,|1| @8|1|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_14.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_14.dump
index 1442dfd..9834f72 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_14.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_14.dump
@@ -1,12 +1,9 @@
-|:+0&#ffffff0|k+0#af5f00255&|e@1|p|j|u|m|p|s| +0#0000000&@64
-|:|k+0#af5f00255&|e@1|p@1|a|t@1|e|r|n|s| +0#0000000&@61
-|:|l+0#af5f00255&|N|e|x|t| +0#0000000&@68
-|:|l+0#af5f00255&|N|f|i|l|e| +0#0000000&@67
+|:+0&#ffffff0|l+0#af5f00255&|N|f|i|l|e| +0#0000000&@67
|:|l+0#af5f00255&|i|s|t| +0#0000000&@69
->:|l+0#af5f00255&|a|b|o|v|e| +0#0000000&@67
+|:|l+0#af5f00255&|a|b|o|v|e| +0#0000000&@67
|:|l+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@65
|:|l+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@63
-|:|l+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@65
+>:|l+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@65
|:|l+0#af5f00255&|a|f|t|e|r| +0#0000000&@67
|:|l+0#af5f00255&|a|s|t| +0#0000000&@69
|:|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@65
@@ -17,4 +14,7 @@
|:|l+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@66
|:|l+0#af5f00255&|c|d| +0#0000000&@70
|:|l+0#af5f00255&|c|h|d|i|r| +0#0000000&@67
-@57|2|5|3|,|1| @8|2|1|%|
+|:|l+0#af5f00255&|c|l|o|s|e| +0#0000000&@67
+|:|l+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@66
+|:|l+0#af5f00255&|d|o| +0#0000000&@70
+@57|2|5|3|,|1| @8|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_15.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_15.dump
index d72931b..97c287a 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_15.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_15.dump
@@ -1,12 +1,9 @@
-|:+0&#ffffff0|l+0#af5f00255&|c|h|d|i|r| +0#0000000&@67
-|:|l+0#af5f00255&|c|l|o|s|e| +0#0000000&@67
-|:|l+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@66
-|:|l+0#af5f00255&|d|o| +0#0000000&@70
+|:+0&#ffffff0|l+0#af5f00255&|d|o| +0#0000000&@70
|:|l+0#af5f00255&|f|d|o| +0#0000000&@69
->:|l+0#af5f00255&|e|f|t| +0#0000000&@69
+|:|l+0#af5f00255&|e|f|t| +0#0000000&@69
|:|l+0#af5f00255&|e|f|t|a|b|o|v|e| +0#0000000&@64
|:|l+0#af5f00255&|e|g|a|c|y| +0#0000000&@67
-|:|l+0#af5f00255&|e|t| +0#0000000&@70
+>:|l+0#af5f00255&|e|t| +0#0000000&@70
|:|l+0#af5f00255&|e|x|p|r| +0#0000000&@68
|:|l+0#af5f00255&|f|i|l|e| +0#0000000&@68
|:|l+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
@@ -17,4 +14,7 @@
|:|l+0#af5f00255&|g|r|e|p|a|d@1| +0#0000000&@65
|:|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&@64
|:|l+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@65
+|:|l+0#af5f00255&@1| +0#0000000&@71
+|:|l+0#af5f00255&@1|a|s|t| +0#0000000&@68
+|:|l+0#af5f00255&@1|i|s|t| +0#0000000&@68
@57|2|7|1|,|1| @8|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_16.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_16.dump
index 31d88a6..cd1fb67 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_16.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_16.dump
@@ -1,15 +1,12 @@
-|:+0&#ffffff0|l+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@65
-|:|l+0#af5f00255&@1| +0#0000000&@71
-|:|l+0#af5f00255&@1|a|s|t| +0#0000000&@68
-|:|l+0#af5f00255&@1|i|s|t| +0#0000000&@68
+|:+0&#ffffff0|l+0#af5f00255&@1|i|s|t| +0#0000000&@68
|:|l+0#af5f00255&|m|a|k|e| +0#0000000&@68
->:|l+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|l+0#af5f00255&|m|a|p| +0#0000000&@69
|:|l+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
|:|l+0#af5f00255&|n|e|x|t| +0#0000000&@68
-|:|l+0#af5f00255&|n|e|w|e|r| +0#0000000&@67
+>:|l+0#af5f00255&|n|e|w|e|r| +0#0000000&@67
|:|l+0#af5f00255&|n|f|i|l|e| +0#0000000&@67
|:|l+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
-|:|l+0#af5f00255&|o|a|d|k|e|y|m|a|p| +0#0000000&@63
+|"+0#0000e05&| |:|l|o|a|d|k|e|y|m|a|p| |"| |d|i|s|a|b|l|e|d| |-| |r|u|n|s| |u|n|t|i|l| |E|O|F| +0#0000000&@33
|:|l+0#af5f00255&|o|a|d|v|i|e|w| +0#0000000&@65
|:|l+0#af5f00255&|o|c|k|m|a|r|k|s| +0#0000000&@64
|:|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&@66
@@ -17,4 +14,7 @@
|:|l+0#af5f00255&|o|p|e|n| +0#0000000&@68
|:|l+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
|:|l+0#af5f00255&|p|f|i|l|e| +0#0000000&@67
-@57|2|8|9|,|1| @8|2|4|%|
+|:|l+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
+|:|l+0#af5f00255&|s| +0#0000000&@71
+|:|l+0#af5f00255&|t|a|g| +0#0000000&@69
+@57|2|8|9|,|1| @8|2|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_17.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_17.dump
index 58d654d..38631f0 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_17.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_17.dump
@@ -1,20 +1,20 @@
-|:+0&#ffffff0|l+0#af5f00255&|p|f|i|l|e| +0#0000000&@67
-|:|l+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
-|:|l+0#af5f00255&|s| +0#0000000&@71
-|:|l+0#af5f00255&|t|a|g| +0#0000000&@69
+|:+0&#ffffff0|l+0#af5f00255&|t|a|g| +0#0000000&@69
|:|l+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
->:|l+0#af5f00255&|u|a| +0#0000000&@70
+|:|l+0#af5f00255&|u|a| +0#0000000&@70
|:|l+0#af5f00255&|u|a|d|o| +0#0000000&@68
|:|l+0#af5f00255&|u|a|f|i|l|e| +0#0000000&@66
-|:|l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&@65
+>:|l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&@65
|:|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&@62
|:|l+0#af5f00255&|w|i|n|d|o|w| +0#0000000&@66
|:|m+0#af5f00255&|o|v|e| +0#0000000&@69
|:|m+0#af5f00255&|a|r|k| +0#0000000&@69
|:|m+0#af5f00255&|a|k|e| +0#0000000&@69
-|"+0#0000e05&| |r|e|q|u|i|r|e|s| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| |t|o| |d|i|s|t|i|n|g|u|i|s|h| |f|r|o|m| |m|a|p|(|)| +0#0000000&@18
|:|m+0#af5f00255&|a|p| +0#0000000&@70
|:|m+0#af5f00255&|a|p|c|l|e|a|r| +0#0000000&@65
|:|m+0#af5f00255&|a|r|k|s| +0#0000000&@68
|:|m+0#af5f00255&|a|t|c|h| +0#0000000&@68
+|:|m+0#af5f00255&|e|n|u| +0#0000000&@69
+|:|m+0#af5f00255&|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@60
+|:|m+0#af5f00255&|e|s@1|a|g|e|s| +0#0000000&@65
+|:|m+0#af5f00255&|k|e|x|r|c| +0#0000000&@67
@57|3|0|7|,|1| @8|2|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_18.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_18.dump
index a2539b5..87e4bbe 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_18.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_18.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|m+0#af5f00255&|a|t|c|h| +0#0000000&@68
-|:|m+0#af5f00255&|e|n|u| +0#0000000&@69
-|:|m+0#af5f00255&|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@60
-|:|m+0#af5f00255&|e|s@1|a|g|e|s| +0#0000000&@65
-|:|m+0#af5f00255&|k|e|x|r|c| +0#0000000&@67
->:|m+0#af5f00255&|k|s|e|s@1|i|o|n| +0#0000000&@64
+|:+0&#ffffff0|m+0#af5f00255&|k|e|x|r|c| +0#0000000&@67
+|:|m+0#af5f00255&|k|s|e|s@1|i|o|n| +0#0000000&@64
|:|m+0#af5f00255&|k|s|p|e|l@1| +0#0000000&@66
|:|m+0#af5f00255&|k|v|i|m|r|c| +0#0000000&@66
|:|m+0#af5f00255&|k|v|i|e|w| +0#0000000&@67
-|:|m+0#af5f00255&|o|d|e| +0#0000000&@69
+>:|m+0#af5f00255&|o|d|e| +0#0000000&@69
|:|m+0#af5f00255&|z|s|c|h|e|m|e| +0#0000000&@65
|:|m+0#af5f00255&|z|f|i|l|e| +0#0000000&@67
|:|n+0#af5f00255&|b|c|l|o|s|e| +0#0000000&@66
@@ -17,4 +13,8 @@
|:|n+0#af5f00255&|e|w| +0#0000000&@70
|:|n+0#af5f00255&|m|a|p| +0#0000000&@69
|:|n+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
-@57|3|2|5|,|1| @8|2|7|%|
+|:|n+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&@65
+|:|n+0#af5f00255&@1|o|r|e|m|e|n|u| +0#0000000&@64
+|:|n+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@64
+@57|3|2|5|,|1| @8|2|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_19.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_19.dump
index b7f7203..595230c 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_19.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_19.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|n+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
-|:|n+0#af5f00255&|m|e|n|u| +0#0000000&@68
-|:|n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&@65
-|:|n+0#af5f00255&@1|o|r|e|m|e|n|u| +0#0000000&@64
-|:|n+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@64
->:|n+0#af5f00255&|o|r|e|m|a|p| +0#0000000&@66
+|:+0&#ffffff0|n+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@64
+|:|n+0#af5f00255&|o|r|e|m|a|p| +0#0000000&@66
|:|n+0#af5f00255&|o|h|l|s|e|a|r|c|h| +0#0000000&@63
|:|n+0#af5f00255&|o|r|e|a|b@1|r|e|v| +0#0000000&@63
|:|n+0#af5f00255&|o|r|e|m|e|n|u| +0#0000000&@65
-|:|n+0#af5f00255&|o|r|m|a|l| +0#0000000&@67
+>:|n+0#af5f00255&|o|r|m|a|l| +0#0000000&@67
|:|n+0#af5f00255&|o|s|w|a|p|f|i|l|e| +0#0000000&@63
|:|n+0#af5f00255&|u|m|b|e|r| +0#0000000&@67
|:|n+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
@@ -17,4 +13,8 @@
|:|o+0#af5f00255&|m|a|p| +0#0000000&@69
|:|o+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
|:|o+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|o+0#af5f00255&|n|l|y| +0#0000000&@69
+|:|o+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|o+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+|:|o+0#af5f00255&|p|t|i|o|n|s| +0#0000000&@66
@57|3|4|3|,|1| @8|2|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_20.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_20.dump
index cedd6ab..a78314f 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_20.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_20.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|o+0#af5f00255&|m|e|n|u| +0#0000000&@68
-|:|o+0#af5f00255&|n|l|y| +0#0000000&@69
-|:|o+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
-|:|o+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
-|:|o+0#af5f00255&|p|t|i|o|n|s| +0#0000000&@66
->:|o+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:+0&#ffffff0|o+0#af5f00255&|p|t|i|o|n|s| +0#0000000&@66
+|:|o+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
|:|o+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
|:|o+0#af5f00255&|w|n|s|y|n|t|a|x| +0#0000000&@64
|:|p+0#af5f00255&|a|c|k|a|d@1| +0#0000000&@66
-|:|p+0#af5f00255&|a|c|k|l|o|a|d|a|l@1| +0#0000000&@62
+>:|p+0#af5f00255&|a|c|k|l|o|a|d|a|l@1| +0#0000000&@62
|:|p+0#af5f00255&|c|l|o|s|e| +0#0000000&@67
|:|p+0#af5f00255&|e|d|i|t| +0#0000000&@68
|:|p+0#af5f00255&|e|r|l| +0#0000000&@69
@@ -17,4 +13,8 @@
|:|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&@63
|:|p+0#af5f00255&|r|o|m|p|t|r|e|p|l| +0#0000000&@63
|:|p+0#af5f00255&|e|r|l|d|o| +0#0000000&@67
-@57|3|6|1|,|1| @8|3|0|%|
+|:|p+0#af5f00255&|o|p| +0#0000000&@70
+|:|p+0#af5f00255&|o|p|u|p| +0#0000000&@68
+|:|p+0#af5f00255&@1|o|p| +0#0000000&@69
+|:|p+0#af5f00255&|r|e|s|e|r|v|e| +0#0000000&@65
+@57|3|6|1|,|1| @8|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_21.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_21.dump
index b81c5ee..41608a3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_21.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_21.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|p+0#af5f00255&|e|r|l|d|o| +0#0000000&@67
-|:|p+0#af5f00255&|o|p| +0#0000000&@70
-|:|p+0#af5f00255&|o|p|u|p| +0#0000000&@68
-|:|p+0#af5f00255&@1|o|p| +0#0000000&@69
-|:|p+0#af5f00255&|r|e|s|e|r|v|e| +0#0000000&@65
->:|p+0#af5f00255&|r|e|v|i|o|u|s| +0#0000000&@65
+|:+0&#ffffff0|p+0#af5f00255&|r|e|s|e|r|v|e| +0#0000000&@65
+|:|p+0#af5f00255&|r|e|v|i|o|u|s| +0#0000000&@65
|:|p+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@66
|:|p+0#af5f00255&|t|a|g| +0#0000000&@69
|:|p+0#af5f00255&|t|N|e|x|t| +0#0000000&@67
-|:|p+0#af5f00255&|t|f|i|r|s|t| +0#0000000&@66
+>:|p+0#af5f00255&|t|f|i|r|s|t| +0#0000000&@66
|:|p+0#af5f00255&|t|j|u|m|p| +0#0000000&@67
|:|p+0#af5f00255&|t|l|a|s|t| +0#0000000&@67
|:|p+0#af5f00255&|t|n|e|x|t| +0#0000000&@67
@@ -17,4 +13,8 @@
|:|p+0#af5f00255&|u|b|l|i|c| +0#0000000&@67
|:|p+0#af5f00255&|u|t| +0#0000000&@70
|:|p+0#af5f00255&|w|d| +0#0000000&@70
+|:|p+0#af5f00255&|y|3| +0#0000000&@70
+|:|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&@66
+|:|p+0#af5f00255&|y|3|d|o| +0#0000000&@68
+|:|p+0#af5f00255&|y|3|f|i|l|e| +0#0000000&@66
@57|3|7|9|,|1| @8|3|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_22.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_22.dump
index 5007492..b9bd8ba 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_22.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_22.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|p+0#af5f00255&|w|d| +0#0000000&@70
-|:|p+0#af5f00255&|y|3| +0#0000000&@70
-|:|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&@66
-|:|p+0#af5f00255&|y|3|d|o| +0#0000000&@68
-|:|p+0#af5f00255&|y|3|f|i|l|e| +0#0000000&@66
->:|p+0#af5f00255&|y|t|h|o|n| +0#0000000&@67
+|:+0&#ffffff0|p+0#af5f00255&|y|3|f|i|l|e| +0#0000000&@66
+|:|p+0#af5f00255&|y|t|h|o|n| +0#0000000&@67
|:|p+0#af5f00255&|y|d|o| +0#0000000&@69
|:|p+0#af5f00255&|y|f|i|l|e| +0#0000000&@67
|:|p+0#af5f00255&|y|x| +0#0000000&@70
-|:|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&@66
+>:|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&@66
|:|p+0#af5f00255&|y|x|d|o| +0#0000000&@68
|:|p+0#af5f00255&|y|x|f|i|l|e| +0#0000000&@66
|:|q+0#af5f00255&|u|i|t| +0#0000000&@69
@@ -17,4 +13,8 @@
|:|r+0#af5f00255&|e|c|o|v|e|r| +0#0000000&@66
|:|r+0#af5f00255&|e|d|o| +0#0000000&@69
|:|r+0#af5f00255&|e|d|i|r| +0#0000000&@68
-@57|3|9|7|,|1| @8|3@1|%|
+|:|r+0#af5f00255&|e|d|r|a|w| +0#0000000&@67
+|:|r+0#af5f00255&|e|d|r|a|w|s|t|a|t|u|s| +0#0000000&@61
+|:|r+0#af5f00255&|e|d|r|a|w|t|a|b|l|i|n|e| +0#0000000&@60
+|:|r+0#af5f00255&|e|g|i|s|t|e|r|s| +0#0000000&@64
+@57|3|9|7|,|1| @8|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_23.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_23.dump
index 6baf838..0efa896 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_23.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_23.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|r+0#af5f00255&|e|d|i|r| +0#0000000&@68
-|:|r+0#af5f00255&|e|d|r|a|w| +0#0000000&@67
-|:|r+0#af5f00255&|e|d|r|a|w|s|t|a|t|u|s| +0#0000000&@61
-|:|r+0#af5f00255&|e|d|r|a|w|t|a|b|l|i|n|e| +0#0000000&@60
-|:|r+0#af5f00255&|e|g|i|s|t|e|r|s| +0#0000000&@64
->:|r+0#af5f00255&|e|s|i|z|e| +0#0000000&@67
+|:+0&#ffffff0|r+0#af5f00255&|e|g|i|s|t|e|r|s| +0#0000000&@64
+|:|r+0#af5f00255&|e|s|i|z|e| +0#0000000&@67
|:|r+0#af5f00255&|e|t|a|b| +0#0000000&@68
|:|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@67
|:|r+0#af5f00255&|e|w|i|n|d| +0#0000000&@67
-|:|r+0#af5f00255&|i|g|h|t| +0#0000000&@68
+>:|r+0#af5f00255&|i|g|h|t| +0#0000000&@68
|:|r+0#af5f00255&|i|g|h|t|b|e|l|o|w| +0#0000000&@63
|:|r+0#af5f00255&|u|b|y| +0#0000000&@69
|:|r+0#af5f00255&|u|b|y|d|o| +0#0000000&@67
@@ -17,4 +13,8 @@
|:|r+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@65
|:|s+0#af5f00255&|u|b|s|t|i|t|u|t|e| +0#0000000&@63
|:|s+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:|s+0#af5f00255&|a|n|d|b|o|x| +0#0000000&@66
+|:|s+0#af5f00255&|a|r|g|u|m|e|n|t| +0#0000000&@64
+|:|s+0#af5f00255&|a|l@1| +0#0000000&@69
+|:|s+0#af5f00255&|a|v|e|a|s| +0#0000000&@67
@57|4|1|5|,|1| @8|3|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_24.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_24.dump
index 4c937c2..d066eba 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_24.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_24.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|s+0#af5f00255&|N|e|x|t| +0#0000000&@68
-|:|s+0#af5f00255&|a|n|d|b|o|x| +0#0000000&@66
-|:|s+0#af5f00255&|a|r|g|u|m|e|n|t| +0#0000000&@64
-|:|s+0#af5f00255&|a|l@1| +0#0000000&@69
-|:|s+0#af5f00255&|a|v|e|a|s| +0#0000000&@67
->:|s+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@66
+|:+0&#ffffff0|s+0#af5f00255&|a|v|e|a|s| +0#0000000&@67
+|:|s+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@66
|:|s+0#af5f00255&|b|N|e|x|t| +0#0000000&@67
|:|s+0#af5f00255&|b|a|l@1| +0#0000000&@68
|:|s+0#af5f00255&|b|f|i|r|s|t| +0#0000000&@66
-|:|s+0#af5f00255&|b|l|a|s|t| +0#0000000&@67
+>:|s+0#af5f00255&|b|l|a|s|t| +0#0000000&@67
|:|s+0#af5f00255&|b|m|o|d|i|f|i|e|d| +0#0000000&@63
|:|s+0#af5f00255&|b|n|e|x|t| +0#0000000&@67
|:|s+0#af5f00255&|b|p|r|e|v|i|o|u|s| +0#0000000&@63
@@ -17,4 +13,8 @@
|:|s+0#af5f00255&|c|r|i|p|t|v|e|r|s|i|o|n| +0#0000000&@60
|:|s+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@66
|:|s+0#af5f00255&|e|t| +0#0000000&@70
-@57|4|3@1|,|1| @8|3|6|%|
+|:|s+0#af5f00255&|e|t|f|i|l|e|t|y|p|e| +0#0000000&@62
+|:|s+0#af5f00255&|e|t|g|l|o|b|a|l| +0#0000000&@64
+|:|s+0#af5f00255&|e|t|l|o|c|a|l| +0#0000000&@65
+|:|s+0#af5f00255&|f|i|n|d| +0#0000000&@68
+@57|4|3@1|,|1| @8|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_25.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_25.dump
index 6b40f2c..3875533 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_25.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_25.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|s+0#af5f00255&|e|t| +0#0000000&@70
-|:|s+0#af5f00255&|e|t|f|i|l|e|t|y|p|e| +0#0000000&@62
-|:|s+0#af5f00255&|e|t|g|l|o|b|a|l| +0#0000000&@64
-|:|s+0#af5f00255&|e|t|l|o|c|a|l| +0#0000000&@65
-|:|s+0#af5f00255&|f|i|n|d| +0#0000000&@68
->:|s+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
+|:+0&#ffffff0|s+0#af5f00255&|f|i|n|d| +0#0000000&@68
+|:|s+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
|:|s+0#af5f00255&|h|e|l@1| +0#0000000&@68
|:|s+0#af5f00255&|i|m|a|l|t| +0#0000000&@67
|:|s+0#af5f00255&|i|g|n| +0#0000000&@69
-|:|s+0#af5f00255&|i|l|e|n|t| +0#0000000&@67
+>:|s+0#af5f00255&|i|l|e|n|t| +0#0000000&@67
|:|s+0#af5f00255&|l|e@1|p| +0#0000000&@68
|:|s+0#af5f00255&|l|e@1|p|!| +0#0000000&@67
|:|s+0#af5f00255&|l|a|s|t| +0#0000000&@68
@@ -17,4 +13,8 @@
|:|s+0#af5f00255&|m|e|n|u| +0#0000000&@68
|:|s+0#af5f00255&|m|i|l|e| +0#0000000&@68
|:|s+0#af5f00255&|n|e|x|t| +0#0000000&@68
+|:|s+0#af5f00255&|n|o|m|a|g|i|c| +0#0000000&@65
+|:|s+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:|s+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
+|:|s+0#af5f00255&|o|r|t| +0#0000000&@69
@57|4|5|1|,|1| @8|3|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_26.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_26.dump
index f388e4f..0d8a2d2 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_26.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_26.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|s+0#af5f00255&|n|e|x|t| +0#0000000&@68
-|:|s+0#af5f00255&|n|o|m|a|g|i|c| +0#0000000&@65
-|:|s+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
-|:|s+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
-|:|s+0#af5f00255&|o|r|t| +0#0000000&@69
->:|s+0#af5f00255&|o|u|r|c|e| +0#0000000&@67
+|:+0&#ffffff0|s+0#af5f00255&|o|r|t| +0#0000000&@69
+|:|s+0#af5f00255&|o|u|r|c|e| +0#0000000&@67
|:|s+0#af5f00255&|p|e|l@1|d|u|m|p| +0#0000000&@64
|:|s+0#af5f00255&|p|e|l@1|g|o@1|d| +0#0000000&@64
|:|s+0#af5f00255&|p|e|l@1|i|n|f|o| +0#0000000&@64
-|:|s+0#af5f00255&|p|e|l@1|r|a|r|e| +0#0000000&@64
+>:|s+0#af5f00255&|p|e|l@1|r|a|r|e| +0#0000000&@64
|:|s+0#af5f00255&|p|e|l@1|r|e|p|a|l@1| +0#0000000&@62
|:|s+0#af5f00255&|p|e|l@1|u|n|d|o| +0#0000000&@64
|:|s+0#af5f00255&|p|e|l@1|w|r|o|n|g| +0#0000000&@63
@@ -17,4 +13,8 @@
|:|s+0#af5f00255&|t|o|p| +0#0000000&@69
|:|s+0#af5f00255&|t|a|g| +0#0000000&@69
|:|s+0#af5f00255&|t|a|r|t|i|n|s|e|r|t| +0#0000000&@62
-@57|4|6|9|,|1| @8|3|9|%|
+|:|s+0#af5f00255&|t|a|r|t|g|r|e|p|l|a|c|e| +0#0000000&@60
+|:|s+0#af5f00255&|t|a|r|t|r|e|p|l|a|c|e| +0#0000000&@61
+|:|s+0#af5f00255&|t|a|t|i|c| +0#0000000&@67
+|:|s+0#af5f00255&|t|o|p|i|n|s|e|r|t| +0#0000000&@63
+@57|4|6|9|,|1| @8|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_27.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_27.dump
index c2bba89..448d363 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_27.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_27.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|s+0#af5f00255&|t|a|r|t|i|n|s|e|r|t| +0#0000000&@62
-|:|s+0#af5f00255&|t|a|r|t|g|r|e|p|l|a|c|e| +0#0000000&@60
-|:|s+0#af5f00255&|t|a|r|t|r|e|p|l|a|c|e| +0#0000000&@61
-|:|s+0#af5f00255&|t|a|t|i|c| +0#0000000&@67
-|:|s+0#af5f00255&|t|o|p|i|n|s|e|r|t| +0#0000000&@63
->:|s+0#af5f00255&|t|j|u|m|p| +0#0000000&@67
+|:+0&#ffffff0|s+0#af5f00255&|t|o|p|i|n|s|e|r|t| +0#0000000&@63
+|:|s+0#af5f00255&|t|j|u|m|p| +0#0000000&@67
|:|s+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@65
|:|s+0#af5f00255&|u|n|h|i|d|e| +0#0000000&@66
|:|s+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
-|:|s+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+>:|s+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
|:|s+0#af5f00255&|u|s|p|e|n|d| +0#0000000&@66
|:|s+0#af5f00255&|v|i|e|w| +0#0000000&@68
|:|s+0#af5f00255&|w|a|p|n|a|m|e| +0#0000000&@65
@@ -17,4 +13,8 @@
|:|t+0#af5f00255&| +0#0000000&@72
|:|t+0#af5f00255&|N|e|x|t| +0#0000000&@68
|:|t+0#af5f00255&|a|b|N|e|x|t| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|c|l|o|s|e| +0#0000000&@65
+|:|t+0#af5f00255&|a|b|d|o| +0#0000000&@68
+|:|t+0#af5f00255&|a|b|e|d|i|t| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|f|i|n|d| +0#0000000&@66
@57|4|8|7|,|1| @8|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_28.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_28.dump
index f575c6f..add5257 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_28.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_28.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|t+0#af5f00255&|a|b|N|e|x|t| +0#0000000&@66
-|:|t+0#af5f00255&|a|b|c|l|o|s|e| +0#0000000&@65
-|:|t+0#af5f00255&|a|b|d|o| +0#0000000&@68
-|:|t+0#af5f00255&|a|b|e|d|i|t| +0#0000000&@66
-|:|t+0#af5f00255&|a|b|f|i|n|d| +0#0000000&@66
->:|t+0#af5f00255&|a|b|f|i|r|s|t| +0#0000000&@65
+|:+0&#ffffff0|t+0#af5f00255&|a|b|f|i|n|d| +0#0000000&@66
+|:|t+0#af5f00255&|a|b|f|i|r|s|t| +0#0000000&@65
|:|t+0#af5f00255&|a|b|l|a|s|t| +0#0000000&@66
|:|t+0#af5f00255&|a|b|m|o|v|e| +0#0000000&@66
|:|t+0#af5f00255&|a|b|n|e|w| +0#0000000&@67
-|:|t+0#af5f00255&|a|b|n|e|x|t| +0#0000000&@66
+>:|t+0#af5f00255&|a|b|n|e|x|t| +0#0000000&@66
|:|t+0#af5f00255&|a|b|o|n|l|y| +0#0000000&@66
|:|t+0#af5f00255&|a|b|p|r|e|v|i|o|u|s| +0#0000000&@62
|:|t+0#af5f00255&|a|b|r|e|w|i|n|d| +0#0000000&@64
@@ -17,4 +13,8 @@
|:|t+0#af5f00255&|a|g|s| +0#0000000&@69
|:|t+0#af5f00255&|c|d| +0#0000000&@70
|:|t+0#af5f00255&|c|h|d|i|r| +0#0000000&@67
-@57|5|0|5|,|1| @8|4|2|%|
+|:|t+0#af5f00255&|c|l| +0#0000000&@70
+|:|t+0#af5f00255&|c|l|d|o| +0#0000000&@68
+|:|t+0#af5f00255&|c|l|f|i|l|e| +0#0000000&@66
+|:|t+0#af5f00255&|e|a|r|o|f@1| +0#0000000&@66
+@57|5|0|5|,|1| @8|4|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_29.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_29.dump
index 261cf89..d5e29e4 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_29.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_29.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|t+0#af5f00255&|c|h|d|i|r| +0#0000000&@67
-|:|t+0#af5f00255&|c|l| +0#0000000&@70
-|:|t+0#af5f00255&|c|l|d|o| +0#0000000&@68
-|:|t+0#af5f00255&|c|l|f|i|l|e| +0#0000000&@66
-|:|t+0#af5f00255&|e|a|r|o|f@1| +0#0000000&@66
->:|t+0#af5f00255&|e|r|m|i|n|a|l| +0#0000000&@65
+|:+0&#ffffff0|t+0#af5f00255&|e|a|r|o|f@1| +0#0000000&@66
+|:|t+0#af5f00255&|e|r|m|i|n|a|l| +0#0000000&@65
|:|t+0#af5f00255&|f|i|r|s|t| +0#0000000&@67
|:|t+0#af5f00255&|h|r|o|w| +0#0000000&@68
|:|t+0#af5f00255&|j|u|m|p| +0#0000000&@68
-|:|t+0#af5f00255&|l|a|s|t| +0#0000000&@68
+>:|t+0#af5f00255&|l|a|s|t| +0#0000000&@68
|:|t+0#af5f00255&|l|m|e|n|u| +0#0000000&@67
|:|t+0#af5f00255&|l|n|o|r|e|m|e|n|u| +0#0000000&@63
|:|t+0#af5f00255&|l|u|n|m|e|n|u| +0#0000000&@65
@@ -17,4 +13,8 @@
|:|t+0#af5f00255&|n|e|x|t| +0#0000000&@68
|:|t+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
|:|t+0#af5f00255&|o|p|l|e|f|t| +0#0000000&@66
+|:|t+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
+|:|t+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
+|:|t+0#af5f00255&|r|y| +0#0000000&@70
+|:|t+0#af5f00255&|s|e|l|e|c|t| +0#0000000&@66
@57|5|2|3|,|1| @8|4|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_30.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_30.dump
index d00225d..89aa266 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_30.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_30.dump
@@ -1,13 +1,9 @@
-|:+0&#ffffff0|t+0#af5f00255&|o|p|l|e|f|t| +0#0000000&@66
-|:|t+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
-|:|t+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@66
-|:|t+0#af5f00255&|r|y| +0#0000000&@70
-|:|t+0#af5f00255&|s|e|l|e|c|t| +0#0000000&@66
->:|t+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:+0&#ffffff0|t+0#af5f00255&|s|e|l|e|c|t| +0#0000000&@66
+|:|t+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
|:|t+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
|:|u+0#af5f00255&|n|d|o| +0#0000000&@69
|:|u+0#af5f00255&|n|d|o|j|o|i|n| +0#0000000&@65
-|:|u+0#af5f00255&|n|d|o|l|i|s|t| +0#0000000&@65
+>:|u+0#af5f00255&|n|d|o|l|i|s|t| +0#0000000&@65
|:|u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@61
|:|u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@61
|:|u+0#af5f00255&|n|h|i|d|e| +0#0000000&@67
@@ -17,4 +13,8 @@
|:|u+0#af5f00255&|n|m|e|n|u| +0#0000000&@67
|:|u+0#af5f00255&|n|s|i|l|e|n|t| +0#0000000&@65
|:|u+0#af5f00255&|p|d|a|t|e| +0#0000000&@67
-@57|5|4|1|,|1| @8|4|5|%|
+|:|v+0#af5f00255&|g|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@61
+|:|v+0#af5f00255&|e|r|s|i|o|n| +0#0000000&@66
+|:|v+0#af5f00255&|e|r|b|o|s|e| +0#0000000&@66
+|:|v+0#af5f00255&|e|r|t|i|c|a|l| +0#0000000&@65
+@57|5|4|1|,|1| @8|4@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_31.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_31.dump
index 3711988..6aab2b3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_31.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_31.dump
@@ -1,15 +1,9 @@
-|:+0&#ffffff0|u+0#af5f00255&|p|d|a|t|e| +0#0000000&@67
-|:|v+0#af5f00255&|g|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@61
-|:|v+0#af5f00255&|a|r| +0#0000000&@70
-|:|v+0#af5f00255&|e|r|s|i|o|n| +0#0000000&@66
-|:|v+0#af5f00255&|e|r|b|o|s|e| +0#0000000&@66
->:|v+0#af5f00255&|e|r|t|i|c|a|l| +0#0000000&@65
+|:+0&#ffffff0|v+0#af5f00255&|e|r|t|i|c|a|l| +0#0000000&@65
|:|v+0#af5f00255&|i|m|9|c|m|d| +0#0000000&@66
-|"+0#0000e05&| |:|v|i|m|9|s|c|r|i|p|t| +0#0000000&@61
|:|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&@66
|:|v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&@63
|:|v+0#af5f00255&|i|s|u|a|l| +0#0000000&@67
-|:|v+0#af5f00255&|i|u|s|a|g|e| +0#0000000&@66
+>:|v+0#af5f00255&|i|u|s|a|g|e| +0#0000000&@66
|:|v+0#af5f00255&|i|e|w| +0#0000000&@69
|:|v+0#af5f00255&|m|a|p| +0#0000000&@69
|:|v+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
@@ -17,4 +11,10 @@
|:|v+0#af5f00255&|n|e|w| +0#0000000&@69
|:|v+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
|:|v+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
-@57|5@1|9|,|1| @8|4|7|%|
+|:|v+0#af5f00255&|s|p|l|i|t| +0#0000000&@67
+|:|v+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
+|:|v+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
+|:|w+0#af5f00255&|i|n|d|o| +0#0000000&@68
+|:|w+0#af5f00255&|r|i|t|e| +0#0000000&@68
+|:|w+0#af5f00255&|N|e|x|t| +0#0000000&@68
+@57|5@1|9|,|1| @8|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_32.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_32.dump
index 25eecd9..9e2f45d 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_32.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_32.dump
@@ -1,15 +1,9 @@
-|:+0&#ffffff0|v+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
-|:|v+0#af5f00255&|s|p|l|i|t| +0#0000000&@67
-|:|v+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
-|:|v+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
-|:|w+0#af5f00255&|i|n|d|o| +0#0000000&@68
->:|w+0#af5f00255&|r|i|t|e| +0#0000000&@68
-|:|w+0#af5f00255&|N|e|x|t| +0#0000000&@68
+|:+0&#ffffff0|w+0#af5f00255&|N|e|x|t| +0#0000000&@68
|:|w+0#af5f00255&|a|l@1| +0#0000000&@69
|:|w+0#af5f00255&|h|i|l|e| +0#0000000&@68
|:|w+0#af5f00255&|i|n|s|i|z|e| +0#0000000&@66
|:|w+0#af5f00255&|i|n|c|m|d| +0#0000000&@67
-|:|w+0#af5f00255&|i|n|p|o|s| +0#0000000&@67
+>:|w+0#af5f00255&|i|n|p|o|s| +0#0000000&@67
|:|w+0#af5f00255&|n|e|x|t| +0#0000000&@68
|:|w+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@64
|:|w+0#af5f00255&|q| +0#0000000&@71
@@ -17,4 +11,10 @@
|:|w+0#af5f00255&|u|n|d|o| +0#0000000&@68
|:|w+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@65
|:|x+0#af5f00255&|i|t| +0#0000000&@70
-@57|5|7@1|,|1| @8|4|8|%|
+|:|x+0#af5f00255&|a|l@1| +0#0000000&@69
+|:|x+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
+|:|x+0#af5f00255&|m|a|p| +0#0000000&@69
+|:|x+0#af5f00255&|m|e|n|u| +0#0000000&@68
+|:|x+0#af5f00255&|r|e|s|t|o|r|e| +0#0000000&@65
+|:|x+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+@57|5|7@1|,|1| @8|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_33.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_33.dump
index 1339b80..6b423d0 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_33.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_33.dump
@@ -1,15 +1,9 @@
-|:+0&#ffffff0|x+0#af5f00255&|i|t| +0#0000000&@70
-|:|x+0#af5f00255&|a|l@1| +0#0000000&@69
-|:|x+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@64
-|:|x+0#af5f00255&|m|a|p| +0#0000000&@69
-|:|x+0#af5f00255&|m|e|n|u| +0#0000000&@68
->:|x+0#af5f00255&|r|e|s|t|o|r|e| +0#0000000&@65
-|:|x+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
+|:+0&#ffffff0|x+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@65
|:|x+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@64
|:|x+0#af5f00255&|u|n|m|a|p| +0#0000000&@67
|:|x+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@66
|:|y+0#af5f00255&|a|n|k| +0#0000000&@69
-|:|z+0#af5f00255&| +0#0000000&@72
+>:|z+0#af5f00255&| +0#0000000&@72
@75
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)||+0#0000000&|h+0#af5f00255&|e|l|p| +0#0000000&@59
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p| +0#0000000&@57
@@ -17,4 +11,10 @@
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)||+0#0000000&| |h+0#af5f00255&|e|l|p| +0#0000000&@58
@75
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |2+0#af5f00255&|m|a|t|c|h| +0#0000000&@55
-@57|5|9|5|,|1| @8|5|0|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |3+0#af5f00255&|m|a|t|c|h| +0#0000000&@55
+|"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a|p@1|e|n|d| @55
+@4|t|e|x|t| @66
+|.+0#af5f00255&| +0#0000000&@73
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@51
+@57|5|9|5|,|1| @8|4|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_34.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_34.dump
index 2c442cb..ced1b52 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_34.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_34.dump
@@ -1,15 +1,9 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |2+0#af5f00255&|m|a|t|c|h| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |3+0#af5f00255&|m|a|t|c|h| +0#0000000&@55
-|"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a|p@1|e|n|d| @55
-@4|t|e|x|t| @66
->.+0#af5f00255&| +0#0000000&@73
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@51
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b|c|l|e|a|r| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b|o|v|e|l|e|f|t| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|l@1| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|m|e|n|u| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|s| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|a|d@1| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|d|e|d|u|p|e| +0#0000000&@52
@@ -17,4 +11,10 @@
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|e|d|i|t| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|d|o| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g@1|l|o|b|a|l| +0#0000000&@52
-@57|6|1|3|,|1| @8|5|1|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|l|o|c|a|l| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|u|m|e|n|t| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|s|c|i@1| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|F|o@1| ||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @36
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
+@57|6|1|3|,|1| @8|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_35.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_35.dump
index fcc0eb0..c8fa150 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_35.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_35.dump
@@ -1,15 +1,9 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g@1|l|o|b|a|l| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|l|o|c|a|l| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|r|g|u|m|e|n|t| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|s|c|i@1| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|F|o@1| ||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @36
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|f@1|e|r| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|N|e|x|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|a|l@1| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|a|d@1| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|a|l|t| +0#0000000&@57
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|a|l|t| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|d|e|l|e|t|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|e|h|a|v|e| +0#0000000&|m+0#af5f00255&|s|w|i|n| +0#0000000&@49
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|e|h|a|v|e| +0#0000000&|x+0#af5f00255&|t|e|r|m| +0#0000000&@49
@@ -17,4 +11,10 @@
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|f|i|r|s|t| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|l|a|s|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|m|o|d|i|f|i|e|d| +0#0000000&@52
-@57|6|3|1|,|1| @8|5|3|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|n|e|x|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|o|t|r|i|g|h|t| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&@53
+@57|6|3|1|,|1| @8|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_36.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_36.dump
index 816aed4..2b0c603 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_36.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_36.dump
@@ -1,15 +1,9 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|m|o|d|i|f|i|e|d| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|n|e|x|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|o|t|r|i|g|h|t| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&@53
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|r|o|w|s|e| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|f|d|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|f@1|e|r|s| +0#0000000&@54
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|f@1|e|r|s| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|u|n|l|o|a|d| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |b+0#af5f00255&|w|i|p|e|o|u|t| +0#0000000&@53
|"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
@@ -17,4 +11,10 @@
@4|t|e|x|t| @66
|.+0#af5f00255&| +0#0000000&@73
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|e|x|t| +0#0000000&@56
-@57|6|4|9|,|1| @8|5|4|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|f|i|l|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b|o|v|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@53
+@57|6|4|9|,|1| @8|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_37.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_37.dump
index 4e7a780..83f1290 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_37.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_37.dump
@@ -1,15 +1,9 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|e|x|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|f|i|l|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b|o|v|e| +0#0000000&@55
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@53
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|f|t|e|r| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|t|c|h| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|e|f|o|r|e| +0#0000000&@54
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|e|f|o|r|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|e|l|o|w| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|o|t@1|o|m| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@54
@@ -17,4 +11,10 @@
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&@1|l|o|s|e| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|d| +0#0000000&@59
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|d|o| +0#0000000&@58
-@57|6@1|7|,|1| @8|5|6|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|d|o| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|e|n|t|e|r| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|e|x|p|r| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|i|l|e| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|i|r|s|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|g|e|t|b|u|f@1|e|r| +0#0000000&@51
+@57|6@1|7|,|1| @8|5@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_38.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_38.dump
index 51f5a8c..0fba9d4 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_38.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_38.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|d|o| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|d|o| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|e|n|t|e|r| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|e|x|p|r| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|i|l|e| +0#0000000&@56
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|f|i|r|s|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|g|e|t|b|u|f@1|e|r| +0#0000000&@51
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|g|e|t|b|u|f@1|e|r| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|g|e|t|e|x|p|r| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|g|e|t|f|i|l|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|a|n|g|e|s| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|d|i|r| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|e|c|k|p|a|t|h| +0#0000000&@52
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|e|c|k|p|a|t|h| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|e|c|k|t|i|m|e| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|a|s@1| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|a|s|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|e|a|r|j|u|m|p|s| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|i|s|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|o|s|e| +0#0000000&@56
-@57|6|8|5|,|1| @8|5|7|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|a|p| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|e|n|u| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|e|x|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|e|w|e|r| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|f|i|l|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
+@57|6|8|5|,|1| @8|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_39.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_39.dump
index 35d89fb..d494887 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_39.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_39.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|o|s|e| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|a|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|m|e|n|u| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|e|x|t| +0#0000000&@56
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|e|w|e|r| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|f|i|l|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|p|y| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|l|d|e|r| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|l|o|r|s|c|h|e|m|e| +0#0000000&@50
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|l|o|r|s|c|h|e|m|e| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|m|p|i|l|e|r| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|n|t|i|n|u|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|n|f|i|r|m| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|n|s|t| +0#0000000&@56
-@57|7|0|3|,|1| @8|5|9|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|p|e|n| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|p|f|i|l|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|q|u|i|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|s|c|o|p|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|s|t|a|g| +0#0000000&@56
+@57|7|0|3|,|1| @8|5|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_40.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_40.dump
index a4c2e52..9179c26 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_40.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_40.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|n|s|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|o|p|e|n| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|p|f|i|l|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|q|u|i|t| +0#0000000&@56
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|s|c|o|p|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|s|t|a|g| +0#0000000&@56
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|s|t|a|g| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|w|i|n|d|o|w| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|e|t|e| +0#0000000&@55
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|e|t|e| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|b|u|g| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|b|u|g@1|r|e@1|d|y| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|f| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|f|e|r| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&@51
-@57|7|2|1|,|1| @8|6|0|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&@50
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|m|a|r|k|s| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|u|p|d|a|t|e| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|g|e|t| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|o|f@1| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|p|a|t|c|h| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|p|u|t| +0#0000000&@54
+@57|7|2|1|,|1| @8|5|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_41.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_41.dump
index f9fb600..7394fba 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_41.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_41.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&@50
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|l|m|a|r|k|s| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|u|p|d|a|t|e| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|g|e|t| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|o|f@1| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|p|a|t|c|h| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|p|u|t| +0#0000000&@54
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|p|u|t| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|s|p|l|i|t| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|g|r|a|p|h|s| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|s|p|l|a|y| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|s|a|s@1|e|m|b|l|e| +0#0000000&@50
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|s|a|s@1|e|m|b|l|e| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|j|u|m|p| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|l| +0#0000000&@59
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|l|i|s|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|p| +0#0000000&@59
-@57|7|3|9|,|1| @8|6|2|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|r|o|p| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|s|p|l|i|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|d|i|t| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|a|r|l|i|e|r| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|c|o|n|s|o|l|e| +0#0000000&@50
+@57|7|3|9|,|1| @8|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_42.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_42.dump
index 12db3d0..6e0b583 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_42.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_42.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|p| +0#0000000&@59
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|r|o|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|s|p|l|i|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|d|i|t| +0#0000000&@57
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|a|r|l|i|e|r| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|c|o|n|s|o|l|e| +0#0000000&@50
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|c|o|n|s|o|l|e| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|e|r@1| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|h|l| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|n| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|w|i|n|d|o|w| +0#0000000&@51
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|c|h|o|w|i|n|d|o|w| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|l|s|e| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|l|s|e|i|f| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|m|e|n|u| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d@1|e|f| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|i|f| +0#0000000&@56
-@57|7|5|7|,|1| @8|6|3|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@50
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|t|r|y| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|w|h|i|l|e| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|e|w| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|v|a|l| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x| +0#0000000&@59
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&@54
+@57|7|5|7|,|1| @8|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_43.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_43.dump
index fd68f59..e8b1090 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_43.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_43.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|i|f| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@50
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|t|r|y| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|w|h|i|l|e| +0#0000000&@53
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|e|w| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|v|a|l| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x| +0#0000000&@59
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&@54
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|i|t| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|p|o|r|t| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|u|s|a|g|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|e| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|e|s| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|e|t|y|p|e| +0#0000000&@53
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|e|t|y|p|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|l|t|e|r| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|d| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|a|l| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|a|l@1|y| +0#0000000&@54
-@57|7@1|5|,|1| @8|6|5|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|i|s|h| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|r|s|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|x|d|e|l| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d|c|l|o|s|e| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@49
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&@58
+@57|7@1|5|,|1| @8|6|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_44.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_44.dump
index 34a09b1..bac0a9c 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_44.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_44.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|a|l@1|y| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|i|s|h| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|r|s|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|x|d|e|l| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d| +0#0000000&@57
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d|c|l|o|s|e| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@49
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&@58
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|o|t|o| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|r|e|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|r|e|p|a|d@1| +0#0000000&@54
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|r|e|p|a|d@1| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|u|i| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|v|i|m| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|a|r|d|c|o|p|y| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p| +0#0000000&@57
-@57|7|9|3|,|1| @8|6@1|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|c|l|o|s|e| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|f|i|n|d| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|t|a|g|s| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|d|e| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|o|r|i|z|o|n|t|a|l| +0#0000000&@51
+|"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
+@57|7|9|3|,|1| @8|6|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_45.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_45.dump
index 25f608e..6d71599 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_45.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_45.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|c|l|o|s|e| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|f|i|n|d| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|e|l|p|t|a|g|s| +0#0000000&@53
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|d|e| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |h+0#af5f00255&|o|r|i|z|o|n|t|a|l| +0#0000000&@51
-|"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
+|"+0#0000e05#ffffff0| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i|n|s|e|r|t| @55
@4|t|e|x|t| @66
|.+0#af5f00255&| +0#0000000&@73
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@53
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|f| +0#0000000&@59
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|j|u|m|p| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|l|i|s|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|a|p| +0#0000000&@57
-@57|8|1@1|,|1| @8|6|8|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|e|n|u| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|p|o|r|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@50
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|t|r|o| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|s|p|l|i|t| +0#0000000&@55
+@57|8|1@1|,|1| @8|6|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_46.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_46.dump
index 662461b..d5fe918 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_46.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_46.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|a|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|e|n|u| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|m|p|o|r|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|a|b@1|r|e|v| +0#0000000&@50
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|t|r|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|s|p|l|i|t| +0#0000000&@55
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|s|p|l|i|t| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|u|n|a|b@1|r|e|v| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |j+0#af5f00255&|o|i|n| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |j+0#af5f00255&|u|m|p|s| +0#0000000&@56
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |j+0#af5f00255&|u|m|p|s| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&| +0#0000000&@60
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p|a|l|t| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p|m|a|r|k|s| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p|j|u|m|p|s| +0#0000000&@52
-@57|8|2|9|,|1| @8|6|9|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p@1|a|t@1|e|r|n|s| +0#0000000&@49
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|N|e|x|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|N|f|i|l|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|i|s|t| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|b|o|v|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|f|t|e|r| +0#0000000&@55
+@57|8|2|9|,|1| @8|6|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_47.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_47.dump
index 48dcb9c..b66d1b7 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_47.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_47.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p|j|u|m|p|s| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |k+0#af5f00255&|e@1|p@1|a|t@1|e|r|n|s| +0#0000000&@49
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|N|e|x|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|N|f|i|l|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|i|s|t| +0#0000000&@57
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|b|o|v|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|e|x|p|r| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|b|u|f@1|e|r| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|d@1|f|i|l|e| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|f|t|e|r| +0#0000000&@55
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|f|t|e|r| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|s|t| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|a|t|e|r| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|e|f|o|r|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|e|l|o|w| +0#0000000&@55
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|e|l|o|w| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|o|t@1|o|m| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|d| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|h|d|i|r| +0#0000000&@55
-@57|8|4|7|,|1| @8|7|1|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|l|o|s|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|d|o| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|f|d|o| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|f|t| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|f|t|a|b|o|v|e| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|g|a|c|y| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|t| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|x|p|r| +0#0000000&@56
+@57|8|4|7|,|1| @8|7|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_48.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_48.dump
index 6952669..08980e1 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_48.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_48.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|h|d|i|r| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|l|o|s|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|d|o| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|f|d|o| +0#0000000&@57
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|f|t| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|f|t|a|b|o|v|e| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|g|a|c|y| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|t| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|x|p|r| +0#0000000&@56
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|e|x|p|r| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|f|i|l|e| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|f|i|r|s|t| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|e|t|b|u|f@1|e|r| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|e|t|e|x|p|r| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|e|t|f|i|l|e| +0#0000000&@53
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|e|t|f|i|l|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|r|e|p| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|g|r|e|p|a|d@1| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@53
-@57|8|6|5|,|1| @8|7|3|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1| +0#0000000&@59
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1|a|s|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1|i|s|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|k|e| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|p| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|e|x|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|e|w|e|r| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|f|i|l|e| +0#0000000&@55
+@57|8|6|5|,|1| @8|7|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_49.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_49.dump
index 3f47c96..c2052da 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_49.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_49.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|h|i|s|t|o|r|y| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1| +0#0000000&@59
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1|a|s|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&@1|i|s|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|k|e| +0#0000000&@56
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|e|x|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|e|w|e|r| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|f|i|l|e| +0#0000000&@55
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|f|i|l|e| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|a|d|k|e|y|m|a|p| +0#0000000&@51
+|"+0#0000e05&| |c|a|l@1| |F|o@1|(|)| ||| |l|o|a|d|k|e|y|m|a|p| |"| |d|i|s|a|b|l|e|d| |-| |r|u|n|s| |u|n|t|i|l| |E|O|F| +0#0000000&@21
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|a|d|v|i|e|w| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|c|k|m|a|r|k|s| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&@54
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|l|d|e|r| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|o|p|e|n| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|p|f|i|l|e| +0#0000000&@55
-@57|8@1|3|,|1| @8|7|4|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|s| +0#0000000&@59
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|t|a|g| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a|d|o| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a|f|i|l|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&@50
+@57|8@1|3|,|1| @8|7|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_50.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_50.dump
index 01a8246..529c91d 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_50.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_50.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|p|f|i|l|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|s| +0#0000000&@59
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|t|a|g| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a|d|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|u|a|f|i|l|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&@50
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |l+0#af5f00255&|w|i|n|d|o|w| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|o|v|e| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|r|k| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|k|e| +0#0000000&@57
-|"+0#0000e05&| |r|e|q|u|i|r|e|s| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| |t|o| |d|i|s|t|i|n|g|u|i|s|h| |f|r|o|m| |m|a|p|(|)| +0#0000000&@18
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|p| +0#0000000&@58
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|p| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|p|c|l|e|a|r| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|r|k|s| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|t|c|h| +0#0000000&@56
-@57|9|0|1|,|1| @8|7|6|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|n|u| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@48
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|s@1|a|g|e|s| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|e|x|r|c| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|s|e|s@1|i|o|n| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|s|p|e|l@1| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|v|i|m|r|c| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|v|i|e|w| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|o|d|e| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|z|s|c|h|e|m|e| +0#0000000&@53
+@57|9|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_51.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_51.dump
index 0fb8f18..6b12992 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_51.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_51.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|a|t|c|h| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|n|u| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@48
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|e|s@1|a|g|e|s| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|e|x|r|c| +0#0000000&@55
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|s|e|s@1|i|o|n| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|s|p|e|l@1| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|v|i|m|r|c| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|k|v|i|e|w| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|o|d|e| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|z|s|c|h|e|m|e| +0#0000000&@53
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|z|s|c|h|e|m|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |m+0#af5f00255&|z|f|i|l|e| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|b|c|l|o|s|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|b|k|e|y| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|b|s|t|a|r|t| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|e|x|t| +0#0000000&@57
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|e|x|t| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|e|w| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|m|a|p| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
-@57|9|1|9|,|1| @8|7@1|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|m|e|n|u| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&@1|o|r|e|m|e|n|u| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|m|a|p| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|h|l|s|e|a|r|c|h| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|a|b@1|r|e|v| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|m|e|n|u| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|m|a|l| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|s|w|a|p|f|i|l|e| +0#0000000&@51
+@57|9|1|9|,|1| @8|7|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_52.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_52.dump
index 810f100..1a03dbb 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_52.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_52.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|m|e|n|u| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&@1|o|r|e|m|e|n|u| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&@52
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|m|a|p| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|h|l|s|e|a|r|c|h| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|a|b@1|r|e|v| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|e|m|e|n|u| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|r|m|a|l| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|s|w|a|p|f|i|l|e| +0#0000000&@51
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|o|s|w|a|p|f|i|l|e| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|u|m|b|e|r| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |n+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|p|e|n| +0#0000000&@57
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|p|e|n| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|m|a|p| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|m|e|n|u| +0#0000000&@56
-@57|9|3|7|,|1| @8|7|9|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|l|y| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|p|t|i|o|n|s| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|w|n|s|y|n|t|a|x| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|a|c|k|a|d@1| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|a|c|k|l|o|a|d|a|l@1| +0#0000000&@50
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|c|l|o|s|e| +0#0000000&@55
+@57|9|3|7|,|1| @8|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_53.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_53.dump
index 80238a6..76f4d20 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_53.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_53.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|m|e|n|u| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|l|y| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|p|t|i|o|n|s| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |o+0#af5f00255&|w|n|s|y|n|t|a|x| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|a|c|k|a|d@1| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|a|c|k|l|o|a|d|a|l@1| +0#0000000&@50
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|c|l|o|s|e| +0#0000000&@55
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|c|l|o|s|e| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|e|d|i|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|e|r|l| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|i|n|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|f|d|e|l| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|f|i|l|e| +0#0000000&@54
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|f|i|l|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|o|m|p|t|r|e|p|l| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|e|r|l|d|o| +0#0000000&@55
-@57|9|5@1|,|1| @8|8|0|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|o|p| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|o|p|u|p| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&@1|o|p| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|e|s|e|r|v|e| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|e|v|i|o|u|s| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|a|g| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|N|e|x|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|f|i|r|s|t| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|j|u|m|p| +0#0000000&@55
+@57|9|5@1|,|1| @8|7|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_54.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_54.dump
index 67137ba..b511392 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_54.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_54.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|e|r|l|d|o| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|o|p| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|o|p|u|p| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&@1|o|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|e|s|e|r|v|e| +0#0000000&@53
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|r|e|v|i|o|u|s| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|s|e|a|r|c|h| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|a|g| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|N|e|x|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|f|i|r|s|t| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|j|u|m|p| +0#0000000&@55
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|j|u|m|p| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|l|a|s|t| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|n|e|x|t| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|p|r|e|v|i|o|u|s| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|r|e|w|i|n|d| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@53
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|u|b|l|i|c| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|u|t| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|w|d| +0#0000000&@58
-@57|9|7|3|,|1| @8|8|2|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3|d|o| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3|f|i|l|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|d|o| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|f|i|l|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x|d|o| +0#0000000&@56
+@57|9|7|3|,|1| @8|8|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_55.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_55.dump
index 361f834..1c4f533 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_55.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_55.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|w|d| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3|d|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|3|f|i|l|e| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|d|o| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|f|i|l|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x|d|o| +0#0000000&@56
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x|d|o| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|y|x|f|i|l|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |q+0#af5f00255&|u|i|t| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |q+0#af5f00255&|u|i|t|a|l@1| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |q+0#af5f00255&|a|l@1| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|a|d| +0#0000000&@57
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|a|d| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|c|o|v|e|r| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|o| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|i|r| +0#0000000&@56
-@57|9@1|1|,|1| @8|8|3|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w|s|t|a|t|u|s| +0#0000000&@49
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w|t|a|b|l|i|n|e| +0#0000000&@48
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|g|i|s|t|e|r|s| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|s|i|z|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|t|a|b| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|w|i|n|d| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|i|g|h|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|i|g|h|t|b|e|l|o|w| +0#0000000&@51
+@57|9@1|1|,|1| @8|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_56.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_56.dump
index ba57541..7401899 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_56.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_56.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|i|r| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w|s|t|a|t|u|s| +0#0000000&@49
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|d|r|a|w|t|a|b|l|i|n|e| +0#0000000&@48
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|g|i|s|t|e|r|s| +0#0000000&@52
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|s|i|z|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|t|a|b| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|e|w|i|n|d| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|i|g|h|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|i|g|h|t|b|e|l|o|w| +0#0000000&@51
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|i|g|h|t|b|e|l|o|w| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|b|y| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|b|y|d|o| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|b|y|f|i|l|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|n|d|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|n|t|i|m|e| +0#0000000&@54
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|u|n|t|i|m|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |r+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|b|s|t|i|t|u|t|e| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|N|e|x|t| +0#0000000&@56
-@57|1|0@1|9|,|1| @7|8|5|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|n|d|b|o|x| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|r|g|u|m|e|n|t| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|l@1| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|v|e|a|s| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|N|e|x|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|a|l@1| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|f|i|r|s|t| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|l|a|s|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|m|o|d|i|f|i|e|d| +0#0000000&@51
+@57|1|0@1|9|,|1| @7|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_57.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_57.dump
index 031d9c4..a59f4a1 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_57.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_57.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|N|e|x|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|n|d|b|o|x| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|r|g|u|m|e|n|t| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|l@1| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|a|v|e|a|s| +0#0000000&@55
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|u|f@1|e|r| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|N|e|x|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|a|l@1| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|f|i|r|s|t| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|l|a|s|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|m|o|d|i|f|i|e|d| +0#0000000&@51
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|m|o|d|i|f|i|e|d| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|n|e|x|t| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|p|r|e|v|i|o|u|s| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|b|r|e|w|i|n|d| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|r|i|p|t|n|a|m|e|s| +0#0000000&@50
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&@47
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&@47
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|r|i|p|t|v|e|r|s|i|o|n| +0#0000000&@48
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|c|s|c|o|p|e| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&@58
-@57|1|0|2|7|,|1| @7|8|6|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|f|i|l|e|t|y|p|e| +0#0000000&@50
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|g|l|o|b|a|l| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|l|o|c|a|l| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|f|i|n|d| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|f|i|r|s|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|h|e|l@1| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|m|a|l|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|g|n| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|l|e|n|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|e@1|p| +0#0000000&@56
+@57|1|0|2|7|,|1| @7|8|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_58.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_58.dump
index 1d24fd5..67e9545 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_58.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_58.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|f|i|l|e|t|y|p|e| +0#0000000&@50
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|g|l|o|b|a|l| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|e|t|l|o|c|a|l| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|f|i|n|d| +0#0000000&@56
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|f|i|r|s|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|h|e|l@1| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|m|a|l|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|g|n| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|i|l|e|n|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|e@1|p| +0#0000000&@56
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|e@1|p| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|e@1|p|!| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|l|a|s|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|g|i|c| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|e|n|u| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|i|l|e| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|e|x|t| +0#0000000&@56
-@57|1|0|4|5|,|1| @7|8@1|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|m|a|g|i|c| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|o|r|t| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|o|u|r|c|e| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|d|u|m|p| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|g|o@1|d| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|i|n|f|o| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|r|a|r|e| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|r|e|p|a|l@1| +0#0000000&@50
+@57|1|0|4|5|,|1| @7|8|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_59.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_59.dump
index 920861c..1299076 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_59.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_59.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|e|x|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|m|a|g|i|c| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|o|r|t| +0#0000000&@57
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|o|u|r|c|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|d|u|m|p| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|g|o@1|d| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|i|n|f|o| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|r|a|r|e| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|r|e|p|a|l@1| +0#0000000&@50
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|r|e|p|a|l@1| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|u|n|d|o| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|e|l@1|w|r|o|n|g| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|l|i|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|o|p| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|g| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|i|n|s|e|r|t| +0#0000000&@50
-@57|1|0|6|3|,|1| @7|8|9|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|g|r|e|p|l|a|c|e| +0#0000000&@48
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|r|e|p|l|a|c|e| +0#0000000&@49
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|t|i|c| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|o|p|i|n|s|e|r|t| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|j|u|m|p| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|h|i|d|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|s|p|e|n|d| +0#0000000&@54
+@57|1|0|6|3|,|1| @7|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_60.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_60.dump
index 9733757..0818013 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_60.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_60.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|i|n|s|e|r|t| +0#0000000&@50
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|g|r|e|p|l|a|c|e| +0#0000000&@48
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|r|t|r|e|p|l|a|c|e| +0#0000000&@49
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|t|i|c| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|o|p|i|n|s|e|r|t| +0#0000000&@51
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|j|u|m|p| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|s|e|l|e|c|t| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|h|i|d|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|s|p|e|n|d| +0#0000000&@54
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|u|s|p|e|n|d| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|v|i|e|w| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|w|a|p|n|a|m|e| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|y|n|t|a|x| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|y|n|t|i|m|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|y|n|c|b|i|n|d| +0#0000000&@53
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|y|n|c|b|i|n|d| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&| +0#0000000&@60
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|N|e|x|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|N|e|x|t| +0#0000000&@54
-@57|1|0|8|1|,|1| @7|9|1|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|c|l|o|s|e| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|d|o| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|e|d|i|t| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|f|i|n|d| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|f|i|r|s|t| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|l|a|s|t| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|m|o|v|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|n|e|w| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|n|e|x|t| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|o|n|l|y| +0#0000000&@54
+@57|1|0|8|1|,|1| @7|8|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_61.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_61.dump
index f278eb5..62ca86d 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_61.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_61.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|N|e|x|t| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|c|l|o|s|e| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|d|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|e|d|i|t| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|f|i|n|d| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|f|i|r|s|t| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|l|a|s|t| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|m|o|v|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|n|e|w| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|n|e|x|t| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|o|n|l|y| +0#0000000&@54
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|o|n|l|y| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|p|r|e|v|i|o|u|s| +0#0000000&@50
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|r|e|w|i|n|d| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b|s| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|b| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|g| +0#0000000&@58
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|g| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|a|g|s| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|d| +0#0000000&@58
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|h|d|i|r| +0#0000000&@55
-@57|1|0|9@1|,|1| @7|9|2|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l|d|o| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l|f|i|l|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|e|a|r|o|f@1| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|e|r|m|i|n|a|l| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|f|i|r|s|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|h|r|o|w| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|j|u|m|p| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|a|s|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|m|e|n|u| +0#0000000&@55
+@57|1|0|9@1|,|1| @7|9|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_62.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_62.dump
index 933f7a0..c81c02c 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_62.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_62.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|h|d|i|r| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l|d|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|c|l|f|i|l|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|e|a|r|o|f@1| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|e|r|m|i|n|a|l| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|f|i|r|s|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|h|r|o|w| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|j|u|m|p| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|a|s|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|m|e|n|u| +0#0000000&@55
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|m|e|n|u| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|n|o|r|e|m|e|n|u| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|l|u|n|m|e|n|u| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|m|a|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|m|e|n|u| +0#0000000&@56
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|m|e|n|u| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|n|e|x|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|o|p|l|e|f|t| +0#0000000&@54
-@57|1@2|7|,|1| @7|9|4|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|r|y| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|s|e|l|e|c|t| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o|j|o|i|n| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o|l|i|s|t| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@49
+@57|1@2|7|,|1| @7|9|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_63.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_63.dump
index f93ac7c..249c967 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_63.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_63.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|o|p|l|e|f|t| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|r|e|w|i|n|d| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|r|y| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|s|e|l|e|c|t| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o|j|o|i|n| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|d|o|l|i|s|t| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@49
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@49
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|a|b@1|r|e|v|i|a|t|e| +0#0000000&@49
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|h|i|d|e| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|l|e|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|m|a|p| +0#0000000&@56
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|m|a|p| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|m|e|n|u| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|n|s|i|l|e|n|t| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|p|d|a|t|e| +0#0000000&@55
-@57|1@1|3|5|,|1| @7|9|6|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|g|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@49
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|s|i|o|n| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|b|o|s|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|t|i|c|a|l| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|9|c|m|d| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|s|u|a|l| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|u|s|a|g|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|e|w| +0#0000000&@57
+@57|1@1|3|5|,|1| @7|9|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_64.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_64.dump
index bf3df8d..11a5bc3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_64.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_64.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |u+0#af5f00255&|p|d|a|t|e| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|g|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@49
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|a|r| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|s|i|o|n| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|b|o|s|e| +0#0000000&@54
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|e|r|t|i|c|a|l| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|9|c|m|d| +0#0000000&@54
-|"+0#0000e05&| |c|a|l@1| |F|o@1|(|)| ||| |v|i|m|9|s|c|r|i|p|t| +0#0000000&@49
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|s|u|a|l| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|u|s|a|g|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|e|w| +0#0000000&@57
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|i|e|w| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|m|a|p| +0#0000000&@57
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|m|e|n|u| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|n|e|w| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
-@57|1@1|5|3|,|1| @7|9|7|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|s|p|l|i|t| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|d|o| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|r|i|t|e| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|N|e|x|t| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|a|l@1| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|h|i|l|e| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|s|i|z|e| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|p|o|s| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|n|e|x|t| +0#0000000&@56
+@57|1@1|5|3|,|1| @7|9|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_65.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_65.dump
index 0e96806..9dfb7f5 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_65.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_65.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|s|p|l|i|t| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|d|o| +0#0000000&@56
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|r|i|t|e| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|N|e|x|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|a|l@1| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|h|i|l|e| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|s|i|z|e| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|p|o|s| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|n|e|x|t| +0#0000000&@56
+|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|n|e|x|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|q| +0#0000000&@59
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|q|a|l@1| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|u|n|d|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@53
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|i|t| +0#0000000&@58
-@57|1@1|7|1|,|1| @7|9@1|%|
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|a|l@1| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|a|p| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|e|n|u| +0#0000000&@56
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|r|e|s|t|o|r|e| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |y+0#af5f00255&|a|n|k| +0#0000000&@57
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |z+0#af5f00255&| +0#0000000&@60
+@75
+@57|1@1|7|1|,|1| @7|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_66.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_66.dump
index cfb1298..6dd455c 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_66.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_66.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|i|t| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|a|l@1| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|a|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|e|n|u| +0#0000000&@56
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|r|e|s|t|o|r|e| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |y+0#af5f00255&|a|n|k| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |z+0#af5f00255&| +0#0000000&@60
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1@1|8|9|,|1| @7|B|o|t|
+| +0&#ffffff0@74
+@75
+|"+0#0000e05&| |V|i|m|9|-|s|c|r|i|p|t| |o|n|l|y| +0#0000000&@56
+@75
+|:|a+0#af5f00255&|b|s|t|r|a|c|t| +0#0000000&@65
+>:|c+0#af5f00255&|l|a|s@1| +0#0000000&@68
+|:|d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&@63
+|:|d+0#af5f00255&|i|s|a|s@1|e|m|b|l|e| +0#0000000&@62
+|:|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@65
+|:|e+0#af5f00255&|n|d|i|n|t|e|r|f|a|c|e| +0#0000000&@61
+|:|e+0#af5f00255&|n|d|e|n|u|m| +0#0000000&@66
+|:|e+0#af5f00255&|n|u|m| +0#0000000&@69
+|:|e+0#af5f00255&|x|p|o|r|t| +0#0000000&@67
+|:|f+0#af5f00255&|i|n|a|l| +0#0000000&@68
+|:|i+0#af5f00255&|n|t|e|r|f|a|c|e| +0#0000000&@64
+|:|p+0#af5f00255&|u|b|l|i|c| +0#0000000&@67
+|:|s+0#af5f00255&|t|a|t|i|c| +0#0000000&@67
+|:|t+0#af5f00255&|y|p|e| +0#0000000&@69
+|:|v+0#af5f00255&|a|r| +0#0000000&@70
+@57|1@1|8|9|,|1| @7|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_67.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_67.dump
new file mode 100644
index 0000000..e276a66
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_67.dump
@@ -0,0 +1,20 @@
+|:+0&#ffffff0|v+0#af5f00255&|a|r| +0#0000000&@70
+@75
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b|s|t|r|a|c|t| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|l|a|s@1| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&@56
+>F|o@1|(+0#e000e06&|)| +0#0000000&||| |d+0#af5f00255&|i|s|a|s@1|e|m|b|l|e| +0#0000000&@55
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@58
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|e|n|u|m| +0#0000000&@59
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|d|i|n|t|e|r|f|a|c|e| +0#0000000&@54
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|n|u|m| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |e+0#af5f00255&|x|p|o|r|t| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|i|n|a|l| +0#0000000&@61
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|n|t|e|r|f|a|c|e| +0#0000000&@57
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |p+0#af5f00255&|u|b|l|i|c| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|t|a|t|i|c| +0#0000000&@60
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |t+0#af5f00255&|y|p|e| +0#0000000&@62
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|a|r| +0#0000000&@63
+@75
+|~+0#4040ff13&| @73
+| +0#0000000&@56|1|2|0|7|,|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_68.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_68.dump
new file mode 100644
index 0000000..7e1be8b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_68.dump
@@ -0,0 +1,20 @@
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |v+0#af5f00255&|a|r| +0#0000000&@63
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2@1|1|,|0|-|1| @5|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_99.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_99.dump
deleted file mode 100644
index 2c0e2ec..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|c+0#af5f00255#ffffff0|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|i|n|p|o|s| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|n|e|x|t| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|p|r|e|v|i|o|u|s| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|q| +0#0000000&@59
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|q|a|l@1| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|u|n|d|o| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |w+0#af5f00255&|v|i|m|i|n|f|o| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|i|t| +0#0000000&@58
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|a|l@1| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|a|p| +0#0000000&@57
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|m|e|n|u| +0#0000000&@56
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|r|e|s|t|o|r|e| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|n|o|r|e|m|a|p| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|n|o|r|e|m|e|n|u| +0#0000000&@52
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|a|p| +0#0000000&@55
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |x+0#af5f00255&|u|n|m|e|n|u| +0#0000000&@54
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |y+0#af5f00255&|a|n|k| +0#0000000&@57
->c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |z+0#af5f00255&| +0#0000000&@60
-@57|1@1|9|5|,|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_comment_strings_01.dump b/runtime/syntax/testdir/dumps/vim_ex_comment_strings_01.dump
new file mode 100644
index 0000000..2dc2425
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_comment_strings_01.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
+| +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
+|}+0#e000e06&| +0#0000000&@73
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+| +0#0000e05&@1>#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
+|}+0#e000e06&| +0#0000000&@73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|,|3| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_comment_strings_99.dump b/runtime/syntax/testdir/dumps/vim_ex_comment_strings_99.dump
deleted file mode 100644
index 90edc97..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_comment_strings_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|c|o|m@1|e|n|t|_|s|t|r|i|n|g|s| |=| |v|:|t|r|u|e| +0#0000000&@20
-@75
-|"+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@55
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
-@2|"+0#0000e05&| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@65
-| +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@75
-|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
-| +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
-|}+0#e000e06&| +0#0000000&@73
-@75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
-| +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
->}+0#e000e06&| +0#0000000&@73
-@57|2|0|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_05.dump b/runtime/syntax/testdir/dumps/vim_ex_def_05.dump
index 2db207b..28b3259 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_05.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@74
-|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@58
+|e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@55
@75
+|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@58
@75
->"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
+> @74
+|"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
@75
|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |z+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@31
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
@@ -16,5 +17,4 @@
@75
@75
|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
-@57|9|1|,|1| @9|9|4|%|
+@57|9|0|,|0|-|1| @7|9|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_06.dump b/runtime/syntax/testdir/dumps/vim_ex_def_06.dump
new file mode 100644
index 0000000..723aade
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_06.dump
@@ -0,0 +1,20 @@
+|"+0#0000e05#ffffff0| |c|o|m@1|e|n|t|s| +0#0000000&@64
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
+| +0#0000e05&@1|#| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
+@2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&@56
+>e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|8|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_99.dump b/runtime/syntax/testdir/dumps/vim_ex_def_99.dump
deleted file mode 100644
index 9b4249f..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_def_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |z+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@31
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@66
-@4|x+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|,+0#0000000&| @62
-@4|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63
-@4|z+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@52
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@75
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
-| +0#0000e05&@1|#| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
-@2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&@56
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-> @74
-@57|1|0|9|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_fold_02.dump b/runtime/syntax/testdir/dumps/vim_ex_def_fold_02.dump
index 2cfdcd4..a186346 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_fold_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_fold_02.dump
@@ -1,20 +1,20 @@
-|"+0#0000e05#ffffff0| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@53
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |n|u|m|b|e|r| @1|-@41
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)| |#| |c|o|m@1|e|n|t|-@41
-| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |n|u|m|b|e|r| |#| |c|o|m@1|e|n|t|-@33
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f|!| |F|o@1|(|)|:| |n|u|m|b|e|r|-@42
-| +0#0000000#ffffff0@74
+| +0&#ffffff0@74
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |g|:|F|o@1|(|)|:| |n|u|m|b|e|r|-@41
| +0#0000000#ffffff0@74
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |s|:|F|o@1|(|)|:| |n|u|m|b|e|r|-@41
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |<|S|I|D|>|F|o@1|(|)|:| |n|u|m|b|e|r|-@38
+>++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |<|S|I|D|>|F|o@1|(|)|:| |n|u|m|b|e|r|-@38
| +0#0000000#ffffff0@74
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |f|o@1|#|b|a|r|#|F|o@1|(|)|:| |n|u|m|b|e|r|-@35
| +0#0000000#ffffff0@74
|"+0#0000e05&| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@46
|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |s|:|l|s|(|)|-@50
-| +0#0000000#ffffff0@56|3|7|,|1| @9|2|7|%|
+| +0#0000000#ffffff0@74
+@75
+|"+0#0000e05&| |r|e|t|u|r|n| |t|y|p|e|s| +0#0000000&@60
+@75
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |v|o|i|d|-@45
+| +0#0000000#ffffff0@74
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |v|o|i|d| |#| |c|o|m@1|e|n|t|-@35
+| +0#0000000#ffffff0@74
+@57|5|1|,|1| @9|4|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_fold_03.dump b/runtime/syntax/testdir/dumps/vim_ex_def_fold_03.dump
index 6673415..58faca0 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_fold_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_fold_03.dump
@@ -1,20 +1,20 @@
| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |s|:|F|o@1|(|)|:| |n|u|m|b|e|r|-@41
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |l|i|s|t|<|d|i|c|t|<|n|u|m|b|e|r|>@1|-@31
+| +0#0000000#ffffff0@74
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |f|u|n|c|(|d|i|c|t|<|l|i|s|t|<|n|u|m|b|e|r|>@1|,| |f|u|n|c|,| |b|o@1|l|,| |f|u|n|c|(|n|u|m|b|e|r|,|
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |<|S|I|D|>|F|o@1|(|)|:| |n|u|m|b|e|r|-@38
+> @74
+|"+0#0000e05&| |:|e|n|d@1|e|f| |t|r|a|i|l|i|n|g| +0#0000000&@56
+@75
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |f|o@1|#|b|a|r|#|F|o@1|(|)|:| |n|u|m|b|e|r|-@35
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
| +0#0000000#ffffff0@74
-|"+0#0000e05&| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@46
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |s|:|l|s|(|)|-@50
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
| +0#0000000#ffffff0@74
@75
-|"+0#0000e05&| |r|e|t|u|r|n| |t|y|p|e|s| +0#0000000&@60
+|"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
@75
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |v|o|i|d|-@45
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |v|o|i|d| |#| |c|o|m@1|e|n|t|-@35
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |l|i|s|t|<|d|i|c|t|<|n|u|m|b|e|r|>@1|-@31
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|x|:| |b|o@1|l|,| |y| |=| |4|2|,| |z|:| |s|t|r|i|n|g| |=| |"|z|e|d|"|)|-@17
| +0#0000000#ffffff0@74
-@57|5@1|,|1| @9|4@1|%|
+@57|7|8|,|0|-|1| @7|6|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_fold_04.dump b/runtime/syntax/testdir/dumps/vim_ex_def_fold_04.dump
index d2f047b..4a2f2aa 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_fold_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_fold_04.dump
@@ -1,20 +1,20 @@
| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |v|o|i|d|-@45
+|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|-@52
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |v|o|i|d| |#| |c|o|m@1|e|n|t|-@35
-| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |l|i|s|t|<|d|i|c|t|<|n|u|m|b|e|r|>@1|-@31
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|:| |f|u|n|c|(|d|i|c|t|<|l|i|s|t|<|n|u|m|b|e|r|>@1|,| |f|u|n|c|,| |b|o@1|l|,| |f|u|n|c|(|n|u|m|b|e|r|,|
+@75
+|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
+> @74
+|++0#0000e05#a8a8a8255|-@1| @1|4| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
| +0#0000000#ffffff0@74
@75
-|"+0#0000e05&| |:|e|n|d@1|e|f| |t|r|a|i|l|i|n|g| +0#0000000&@56
+|"+0#0000e05&| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@54
@75
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
+|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
| +0#0000000#ffffff0@74
-@75
-@57|7|3|,|1| @9|6|2|%|
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |:|d|e|f| |F|o@1|(|)|-@50
+| +0#0000000#ffffff0@74
+@57|1|0|5|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_fold_05.dump b/runtime/syntax/testdir/dumps/vim_ex_def_fold_05.dump
deleted file mode 100644
index e2decdb..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_def_fold_05.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-> @74
-|"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|x|:| |b|o@1|l|,| |y| |=| |4|2|,| |z|:| |s|t|r|i|n|g| |=| |"|z|e|d|"|)|-@17
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|-@52
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|4| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@54
-@57|9|1|,|0|-|1| @7|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_fold_06.dump b/runtime/syntax/testdir/dumps/vim_ex_def_fold_06.dump
deleted file mode 100644
index 2997eb8..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_def_fold_06.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|-@52
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
->++0#0000e05#a8a8a8255|-@1| @1|4| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@54
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |:|d|e|f| |F|o@1|(|)|-@50
-| +0#0000000#ffffff0@74
-|~+0#4040ff13&| @73
-| +0#0000000&@56|1|0|9|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_fold_07.dump b/runtime/syntax/testdir/dumps/vim_ex_def_fold_07.dump
deleted file mode 100644
index b11b61e..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_def_fold_07.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-> +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |:|d|e|f| |F|o@1|(|)|-@50
-| +0#0000000#ffffff0@74
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|2|7|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_fold_99.dump b/runtime/syntax/testdir/dumps/vim_ex_def_fold_99.dump
deleted file mode 100644
index 3020a24..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_def_fold_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|-@52
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|4| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@54
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |d|e|f| |F|o@1|(|)|-@51
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |:|d|e|f| |F|o@1|(|)|-@50
-> +0#0000000#ffffff0@74
-@57|1|3|0|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump
index 9f6d437..5180ea3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump
@@ -2,7 +2,7 @@
|#+0#0000e05&| |V|i|m|9| |:|d|e|f| |c|o|m@1|a|n|d| |(|n|e|s|t|e|d|)| +0#0000000&@46
@75
|c+0#af5f00255&|l|a|s@1| +0#0000000&|T|e|s|t| @64
-@4|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|a|m|e|:+0#0000000&| |s|t|r|i|n|g| @52
+@4|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|a|m|e|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@52
@75
@4|d+0#af5f00255&|e|f| +0#0000000&|n|e|w|(+0#e000e06&|)| +0#0000000&@61
@8|d+0#af5f00255&|e|f| +0#0000000&|N|a|m|e|(+0#e000e06&|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@48
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_01.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_01.dump
new file mode 100644
index 0000000..a3d1c36
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_nested_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
+@75
+@8|t+0#af5f00255&|h|i|s|.|n+0#0000000&|a|m|e| |=+0#af5f00255&| +0#0000000&|N|a|m|e|(+0#e000e06&|)| +0#0000000&@48
+@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+> @74
+|e+0#af5f00255&|c|h|o| +0#0000000&|T|e|s|t|.|n|e|w|(+0#e000e06&|)| +0#0000000&@59
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_99.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_99.dump
deleted file mode 100644
index 15c078a..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_def_nested_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|#+0#0000e05#ffffff0| |V|i|m|9| |:|d|e|f| |c|o|m@1|a|n|d| |(|n|e|s|t|e|d|)| +0#0000000&@46
-@75
-|c+0#af5f00255&|l|a|s@1| +0#0000000&|T|e|s|t| @64
-@4|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|a|m|e|:+0#0000000&| |s|t|r|i|n|g| @52
-@75
-@4|d+0#af5f00255&|e|f| +0#0000000&|n|e|w|(+0#e000e06&|)| +0#0000000&@61
-@8|d+0#af5f00255&|e|f| +0#0000000&|N|a|m|e|(+0#e000e06&|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@48
-@12|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|G|i|v|e|N|a|m|e|(+0#e000e06&|)| +0#0000000&@43
-@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&|a|n|y|"| +0#0000000&@46
-@12|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@51
-@75
-@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|G|i|v|e|N|a|m|e|(+0#e000e06&|)| +0#0000000&@45
-@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@75
-@8|t+0#af5f00255&|h|i|s|.|n+0#0000000&|a|m|e| |=+0#af5f00255&| +0#0000000&|N|a|m|e|(+0#e000e06&|)| +0#0000000&@48
-@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
-|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
-@75
->e+0#af5f00255&|c|h|o| +0#0000000&|T|e|s|t|.|n|e|w|(+0#e000e06&|)| +0#0000000&@59
-@57|2|0|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump
index 3bcaccc..452fa61 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump
@@ -4,7 +4,7 @@
| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l| |f|d|c|=|2| |f|d|m|=|s|y|n|t|a|x| +0#0000000&@34
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1|c+0#af5f00255#ffffff0|l|a|s@1| +0#0000000&|T|e|s|t| @62
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|a|m|e|:+0#0000000&| |s|t|r|i|n|g| @50
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|a|m|e|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@50
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|++0#0000e05#a8a8a8255| |+|-@1| |1@1| |l|i|n|e|s|:| |d|e|f| |n|e|w|(|)|-@49
| @1|e+0#af5f00255#ffffff0|n|d|c|l|a|s@1| +0#0000000&@64
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_99.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_99.dump
deleted file mode 100644
index 84a08f8..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0#0000e05#a8a8a8255@1|v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@62
-| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|i|m|9| |:|d|e|f| |c|o|m@1|a|n|d| |(|n|e|s|t|e|d|)| +0#0000000&@44
-| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |=| |'|f|'| +0#0000000&@29
-| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l| |f|d|c|=|2| |f|d|m|=|s|y|n|t|a|x| +0#0000000&@34
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|c+0#af5f00255#ffffff0|l|a|s@1| +0#0000000&|T|e|s|t| @62
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|a|m|e|:+0#0000000&| |s|t|r|i|n|g| @50
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| |1@1| |l|i|n|e|s|:| |d|e|f| |n|e|w|(|)|-@49
-| @1|e+0#af5f00255#ffffff0|n|d|c|l|a|s@1| +0#0000000&@64
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1>e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|T|e|s|t|.|n|e|w|(+0#e000e06&|)| +0#0000000&@57
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|2@1|,|1| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_echo_02.dump b/runtime/syntax/testdir/dumps/vim_ex_echo_02.dump
new file mode 100644
index 0000000..47be35b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_echo_02.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|'+0#e000002&|e|n|d|'|:+0#0000000&| |1+0#e000002&|2|3|}+0#e000e06&| +0#0000000&@52
+@75
+|i+0#af5f00255&|f| +0#0000000&|1+0#e000002&|2|3| +0#0000000&@68
+@8|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|f+0#00e0e07&|o@1|.+0#af5f00255&|e+0#00e0e07&|n|d|)+0#e000e06&| +0#0000000&@52
+|e+0#af5f00255&|l|s|e| +0#0000000&@70
+@8>e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|b|a|r|'| +0#0000000&@56
+|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|,|2|-|9| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_echo_99.dump b/runtime/syntax/testdir/dumps/vim_ex_echo_99.dump
deleted file mode 100644
index db81b40..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_echo_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@4|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|4+0#e000002&|2| +0#0000000&@64
-@75
-|"+0#0000e05&| |:|e|c|h|o| |w|i|t|h|o|u|t| |{|e|x|p|r|}| +0#0000000&@52
-|e+0#af5f00255&|c|h|o||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@58
-@75
-|"+0#0000e05&| |t|r|a|i|l|i|n|g| |c|o|m@1|e|n|t| |n|e@1|d|s| ||| +0#0000000&@48
-|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&||| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@52
-@75
-@75
-|"+0#0000e05&| |I|s@1|u|e| |#|9@1|8|7| |(|p|a|r|e|n|t|h|e|s|i|s|e|d| |a|r|g|u|m|e|n|t| |-| |n|o|t| |a| |f|u|n|c|t|i|o|n| |c|a|l@1|)| +0#0000000&@14
-@75
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|'+0#e000002&|e|n|d|'|:+0#0000000&| |1+0#e000002&|2|3|}+0#e000e06&| +0#0000000&@52
-@75
-|i+0#af5f00255&|f| +0#0000000&|1+0#e000002&|2|3| +0#0000000&@68
-@8|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|f+0#00e0e07&|o@1|.+0#af5f00255&|e+0#00e0e07&|n|d|)+0#e000e06&| +0#0000000&@52
-|e+0#af5f00255&|l|s|e| +0#0000000&@70
-@8|e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|b|a|r|'| +0#0000000&@56
->e+0#af5f00255&|n|d|i|f| +0#0000000&@69
-@57|3|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_execute_99.dump b/runtime/syntax/testdir/dumps/vim_ex_execute_99.dump
deleted file mode 100644
index afc498c..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_execute_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|"+0#e000002&|F|o@1|(|)|"| +0#0000000&@59
-@75
-|e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&@67
-@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|c|a|l@1|"| +0#0000000&@60
-@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
-@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|F|o@1|(|)|"| +0#0000000&@59
-@75
-|"+0#0000e05&| |:|e|x|e|c|u|t|e| |w|i|t|h|o|u|t| |{|e|x|p|r|}| +0#0000000&@49
-|e+0#af5f00255&|x|e|c|u|t|e||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@55
-@75
-|"+0#0000e05&| |t|r|a|i|l|i|n|g| |c|o|m@1|e|n|t| |n|e@1|d|s| ||| +0#0000000&@48
-|e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&||| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
-@75
-@75
-|"+0#0000e05&| |I|s@1|u|e| |#|9@1|8|7| |(|p|a|r|e|n|t|h|e|s|i|s|e|d| |a|r|g|u|m|e|n|t| |-| |n|o|t| |a| |f|u|n|c|t|i|o|n| |c|a|l@1|)| +0#0000000&@14
-@75
-|"+0#0000e05&| +0#0000000&|F+0#0000001#ffff4012|I|X|M|E|:+0#e000e06#ffffff0| +0#0000e05&|e|x|e|c|u|t|e| |i|s| |e|x| |c|o|m@1|a|n|d| |n|o|t| |b|u|i|l|t|i|n| |f|u|n|c|t|i|o|n| +0#0000000&@23
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|'+0#e000002&|a|r|g|'|:+0#0000000&| |"+0#e000002&|c|a|l@1| |F|o@1|(|)|"|}+0#e000e06&| +0#0000000&@43
->e+0#00e0e07&|x|e|c|u|t|e| +0#0000000&|(+0#e000e06&|f+0#00e0e07&|o@1|.+0#af5f00255&|a+0#00e0e07&|r|g|)+0#e000e06&| +0#0000000&@57
-@57|4|1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_10.dump b/runtime/syntax/testdir/dumps/vim_ex_function_10.dump
new file mode 100644
index 0000000..37d13e7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_10.dump
@@ -0,0 +1,20 @@
+|"+0#0000e05#ffffff0| |d|e|l|e|t|e| |f|u|n|c|t|i|o|n| +0#0000000&@57
+@75
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @59
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
+>d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|8|1|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_99.dump b/runtime/syntax/testdir/dumps/vim_ex_function_99.dump
deleted file mode 100644
index b00e2ac..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
-@2|"+0#0000e05&| |L|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@49
-@2|#| |4+0#e000002&|2| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@58
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-@75
-|"+0#0000e05&| |d|e|l|e|t|e| |f|u|n|c|t|i|o|n| +0#0000000&@57
-@75
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @59
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
-> @74
-@57|1|8|2|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_00.dump b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_00.dump
new file mode 100644
index 0000000..04f6fd2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|f|u|n|c|t|i|o|n| |a|n|d| |:|d|e|f| |t|a|i|l| |c|o|m@1|e|n|t| |e|r@1|o|r|s| +0#0000000&@30
+|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |u|n|l|e|t|!| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| +0#0000000&@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@12|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|2|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&| +0#0000000&@64
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@12|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_01.dump b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_01.dump
new file mode 100644
index 0000000..3e5b4bd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@75
+>d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|o|T|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@8|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|4|(+0#e000e06&|)| +0#0000000&@56
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|5|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@10|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|5+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&@56
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@75
+@57|1|9|,|1| @9|5|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_02.dump b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_02.dump
new file mode 100644
index 0000000..0d9de4b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|6|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@12|#+0#ffffff16#ff404010| |f|u|n| +0#0000000#ffffff0@37
+@2|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@6|"+0#ffffff16#ff404010| |d|e|f| +0#0000000#ffffff0@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|6+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|"+0#ffffff16#ff404010| |e|n|d@1|e|f| +0#0000000#ffffff0@34
+@2>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|6|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| +0#0000000#ffffff0@34
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#e000e06&|1+0#e000002&|,+0#0000000&| |6+0#e000002&|)+0#e000e06&|-+0#af5f00255&|>|r+0#00e0e07&|e|v|e|r|s|e|(+0#e000e06&|)| +0#0000000&@43
+@2|e+0#af5f00255&|x|e|c| +0#0000000&|$+0#e000002&|'|e|c|h|o| |s|:|T|e|s|t|{+0#e000e06&|d+0#00e0e07&|}+0#e000e06&|(+0#e000002&|)|'| +0#0000000&@48
+@2|e+0#af5f00255&|x|e|c| +0#0000000&|$+0#e000002&|'|d|e|l|f|u|n|c|t|i|o|n| |s|:|T|e|s|t|{+0#e000e06&|d+0#00e0e07&|}+0#e000e06&|'+0#e000002&| +0#0000000&@43
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|,|3| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_00.dump b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_00.dump
new file mode 100644
index 0000000..f8c0ccc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|f|u|n|c|t|i|o|n| |a|n|d| |:|d|e|f| |t|a|i|l| |c|o|m@1|e|n|t|s| +0#0000000&@36
+|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |u|n|l|e|t|!| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| +0#0000000&@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@12|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|2|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&| +0#0000000&@64
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@75
+|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@12|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_01.dump b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_01.dump
new file mode 100644
index 0000000..326a249
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@75
+>d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|o|T|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@8|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|4|(+0#e000e06&|)| +0#0000000&@56
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|5|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@2|f+0#af5f00255&|u|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@10|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|5+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|T|e|s|t|5|(+0#e000e06&|)| +0#0000000&@56
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@25|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@75
+@57|1|9|,|1| @9|5|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_02.dump b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_02.dump
new file mode 100644
index 0000000..8dcb0b9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|f+0#af5f00255&|u|n| +0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|6|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@12|"+0#0000e05&| |f|u|n| +0#0000000&@37
+@2|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@6|#+0#0000e05&| |d|e|f| +0#0000000&@37
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|6+0#e000002&| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|#+0#0000e05&| |e|n|d@1|e|f| +0#0000000&@34
+@2>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|6|(+0#e000e06&|)| +0#0000000&@54
+|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| +0#0000000&@34
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#e000e06&|1+0#e000002&|,+0#0000000&| |6+0#e000002&|)+0#e000e06&|-+0#af5f00255&|>|r+0#00e0e07&|e|v|e|r|s|e|(+0#e000e06&|)| +0#0000000&@43
+@2|e+0#af5f00255&|x|e|c| +0#0000000&|$+0#e000002&|'|e|c|h|o| |s|:|T|e|s|t|{+0#e000e06&|d+0#00e0e07&|}+0#e000e06&|(+0#e000002&|)|'| +0#0000000&@48
+@2|e+0#af5f00255&|x|e|c| +0#0000000&|$+0#e000002&|'|d|e|l|f|u|n|c|t|i|o|n| |s|:|T|e|s|t|{+0#e000e06&|d+0#00e0e07&|}+0#e000e06&|'+0#e000002&| +0#0000000&@43
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|,|3| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump
index 17e220f..0144e3c 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump
@@ -1,15 +1,9 @@
| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o|{|"|o|"|}|(|)|-@42
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |{|"|F|"|}|o|{|"|o|"|}|(|)|-@38
-| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |{|"|F|"|}|{|"|o|"|}|{|"|o|"|}|(|)|-@34
-| +0#0000000#ffffff0@74
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
| +0#0000000#ffffff0@74
|"+0#0000e05&| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@53
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| @1|-@44
-| +0#0000000#ffffff0@74
+> +0#0000000#ffffff0@74
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |"| |c|o|m@1|e|n|t|-@36
| +0#0000000#ffffff0@74
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)|-@45
@@ -17,4 +11,10 @@
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |g|:|F|o@1|(|)|-@44
| +0#0000000#ffffff0@74
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |s|:|F|o@1|(|)|-@44
-| +0#0000000#ffffff0@56|3|7|,|1| @9|1|4|%|
+| +0#0000000#ffffff0@74
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |<|S|I|D|>|F|o@1|(|)|-@41
+| +0#0000000#ffffff0@74
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |f|o@1|#|b|a|r|#|F|o@1|(|)|-@38
+| +0#0000000#ffffff0@74
+|"+0#0000e05&| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@46
+@57|4|7|,|0|-|1| @7|1|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump
index b229e6c..dd8a282 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump
@@ -1,20 +1,20 @@
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| @1|-@44
+|"+0#0000e05#ffffff0| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@46
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |s|:|l|s|(|)|-@45
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |"| |c|o|m@1|e|n|t|-@36
+@75
+|"+0#0000e05&| |m|o|d|i|f|i|e|r|s| +0#0000000&@63
+> @74
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e|-@40
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)|-@45
-> +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |g|:|F|o@1|(|)|-@44
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e| |"| |c|o|m@1|e|n|t|-@30
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |s|:|F|o@1|(|)|-@44
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e|-@40
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |<|S|I|D|>|F|o@1|(|)|-@41
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |a|b|o|r|t|-@40
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |f|o@1|#|b|a|r|#|F|o@1|(|)|-@38
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |d|i|c|t|-@41
| +0#0000000#ffffff0@74
-|"+0#0000e05&| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@46
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |s|:|l|s|(|)|-@45
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |c|l|o|s|u|r|e|-@38
| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |m|o|d|i|f|i|e|r|s| +0#0000000&@63
-@57|5@1|,|0|-|1| @7|2@1|%|
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e| |a|b|o|r|t| |d|i|c|t| |c|l|o|s|u|r|e|-@21
+| +0#0000000#ffffff0@56|7|8|,|0|-|1| @7|3|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump
index d9aa1c9..fb05a00 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump
@@ -1,20 +1,20 @@
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |<|S|I|D|>|F|o@1|(|)|-@41
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e| |a|b|o|r|t| |d|i|c|t| |c|l|o|s|u|r|e|-@21
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |f|o@1|#|b|a|r|#|F|o@1|(|)|-@38
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |r|a|n|g|e|-@39
| +0#0000000#ffffff0@74
-|"+0#0000e05&| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@46
->++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |s|:|l|s|(|)|-@45
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |a|b|o|r|t|-@39
+> +0#0000000#ffffff0@74
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |d|i|c|t|-@40
| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |m|o|d|i|f|i|e|r|s| +0#0000000&@63
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e|-@40
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |c|l|o|s|u|r|e|-@37
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e| |"| |c|o|m@1|e|n|t|-@30
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |r|a|n|g|e| |a|b|o|r|t| |d|i|c|t| |c|l|o|s|u|r|e|-@20
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e|-@40
+@75
+|"+0#0000e05&| |:|e|n|d|f|u|n|c|t|i|o|n| |t|r|a|i|l|i|n|g| +0#0000000&@51
+@75
+|++0#0000e05#a8a8a8255|-@1| @1|4| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |a|b|o|r|t|-@40
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |d|i|c|t|-@41
-| +0#0000000#ffffff0@56|7|3|,|1| @9|3|2|%|
+@57|1@1|2|,|0|-|1| @6|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump
index 989c504..88ca355 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump
@@ -1,20 +1,20 @@
| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e| |"| |c|o|m@1|e|n|t|-@30
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e|-@40
+@75
+|"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
+> @74
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|x|,| |y|,| |z|,| |.@2|)|-@34
| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |a|b|o|r|t|-@40
+|++0#0000e05#a8a8a8255|-@1| @1|7| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|-@47
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |d|i|c|t|-@41
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|x|,| |y| |=| |4|2|,| |z| |=| |"|z|e|d|"|)|-@26
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |c|l|o|s|u|r|e|-@38
+|++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|-@47
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e| |a|b|o|r|t| |d|i|c|t| |c|l|o|s|u|r|e|-@21
+@75
+|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
+@75
+|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |r|a|n|g|e|-@39
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |a|b|o|r|t|-@39
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |d|i|c|t|-@40
-| +0#0000000#ffffff0@74
-@57|9|1|,|1| @9|4|2|%|
+@57|1|4|3|,|0|-|1| @6|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump
index f6619c2..a2f73a0 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump
@@ -1,20 +1,20 @@
| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)| |r|a|n|g|e| |a|b|o|r|t| |d|i|c|t| |c|l|o|s|u|r|e|-@21
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |r|a|n|g|e|-@39
-| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |a|b|o|r|t|-@39
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |d|i|c|t|-@40
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |c|l|o|s|u|r|e|-@37
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |r|a|n|g|e| |a|b|o|r|t| |d|i|c|t| |c|l|o|s|u|r|e|-@20
-| +0#0000000#ffffff0@74
@75
-|"+0#0000e05&| |:|e|n|d|f|u|n|c|t|i|o|n| |t|r|a|i|l|i|n|g| +0#0000000&@51
+|"+0#0000e05&| |d|e|l|e|t|e| |f|u|n|c|t|i|o|n| +0#0000000&@57
@75
-|++0#0000e05#a8a8a8255|-@1| @1|4| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @59
+>d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
+@75
+@75
+|"+0#0000e05&| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@54
+@75
+|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
| +0#0000000#ffffff0@74
|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@56|1|0|9|,|1| @8|5|2|%|
+| +0#0000000#ffffff0@74
+|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
+| +0#0000000#ffffff0@74
+|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
+| +0#0000000#ffffff0@56|1|8|0|,|1| @8|9|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump
index 8e84214..7a93653 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n|!| |F|o@1|(|)| |r|a|n|g|e| |a|b|o|r|t| |d|i|c|t| |c|l|o|s|u|r|e|-@20
+|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |:|e|n|d|f|u|n|c|t|i|o|n| |t|r|a|i|l|i|n|g| +0#0000000&@51
-> @74
-|++0#0000e05#a8a8a8255|-@1| @1|4| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
+|++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
+|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
+> +0#0000000#ffffff0@74
+|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |:|f|u|n|c|t|i|o|n| |F|o@1|(|)|-@45
| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|x|,| |y|,| |z|,| |.@2|)|-@34
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|7| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|-@47
-| +0#0000000#ffffff0@74
-@57|1|2|7|,|0|-|1| @6|6|3|%|
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|1|9|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_08.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_08.dump
deleted file mode 100644
index fb482ff..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_08.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
-@75
->++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|x|,| |y|,| |z|,| |.@2|)|-@34
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|7| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|-@47
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|x|,| |y| |=| |4|2|,| |z| |=| |"|z|e|d|"|)|-@26
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|-@47
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-@75
-@57|1|4|5|,|3|-|1| @6|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_09.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_09.dump
deleted file mode 100644
index 4b6a2d2..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_09.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|7| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|-@47
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|x|,| |y| |=| |4|2|,| |z| |=| |"|z|e|d|"|)|-@26
-| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|-@47
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-@75
-|"+0#0000e05&| |d|e|l|e|t|e| |f|u|n|c|t|i|o|n| +0#0000000&@57
-@75
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @59
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
-@57|1|6|3|,|7|-|1| @6|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump
deleted file mode 100644
index 2e986c4..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|"+0#0000e05&| |d|e|l|e|t|e| |f|u|n|c|t|i|o|n| +0#0000000&@57
-@75
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @59
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
->d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
-@75
-@75
-|"+0#0000e05&| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@54
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-@57|1|8|1|,|1| @8|9|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump
deleted file mode 100644
index 174e250..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |:|f|u|n|c|t|i|o|n| |F|o@1|(|)|-@45
-| +0#0000000#ffffff0@74
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|9@1|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_12.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_12.dump
deleted file mode 100644
index d68f8a1..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_12.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
->++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |:|f|u|n|c|t|i|o|n| |F|o@1|(|)|-@45
-| +0#0000000#ffffff0@74
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|2|1|7|,|5|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_99.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_99.dump
deleted file mode 100644
index 04aa4ba..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
-@75
-@75
-|"+0#0000e05&| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@54
-@75
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|3| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|6| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|5| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|o@1|(|)|-@46
-| +0#0000000#ffffff0@74
-|++0#0000e05#a8a8a8255|-@1| @1|2| |l|i|n|e|s|:| |:|f|u|n|c|t|i|o|n| |F|o@1|(|)|-@45
-> +0#0000000#ffffff0@74
-@57|2@1|3|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_nested_02.dump b/runtime/syntax/testdir/dumps/vim_ex_function_nested_02.dump
new file mode 100644
index 0000000..e60a277
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_nested_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|F|u|n|D|(+0#e000e06&|)| +0#0000000&@55
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|F|u|n|A|(+0#e000e06&|)| +0#0000000&@63
+|e+0#af5f00255&|c|h|o| +0#0000000&|F|u|n|B|(+0#e000e06&|)| +0#0000000&@63
+>e+0#af5f00255&|c|h|o| +0#0000000&|F|u|n|C|(+0#e000e06&|)| +0#0000000&@63
+|e+0#af5f00255&|c|h|o| +0#0000000&|F|u|n|D|(+0#e000e06&|)| +0#0000000&@63
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_nested_99.dump b/runtime/syntax/testdir/dumps/vim_ex_function_nested_99.dump
deleted file mode 100644
index 6ef83ef..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_nested_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@3|d+0#af5f00255&|e|f| +0#0000000&|D|o|F|u|n|C|(+0#e000e06&|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@50
-@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@54
-@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
-@75
-@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|F|u|n|C|(+0#e000e06&|)| +0#0000000&@55
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|u|n|D|(+0#e000e06&|)| +0#0000000&@59
-@4|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|D|o|F|u|n|D|(+0#e000e06&|)| +0#0000000&@53
-@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&|.@3|"| +0#0000000&@53
-@4|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@59
-@75
-@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|D|o|F|u|n|D|(+0#e000e06&|)| +0#0000000&@55
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|e+0#af5f00255&|c|h|o| +0#0000000&|F|u|n|A|(+0#e000e06&|)| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|F|u|n|B|(+0#e000e06&|)| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|F|u|n|C|(+0#e000e06&|)| +0#0000000&@63
->e+0#af5f00255&|c|h|o| +0#0000000&|F|u|n|D|(+0#e000e06&|)| +0#0000000&@63
-@57|3|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_99.dump b/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_99.dump
deleted file mode 100644
index ad1fc05..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|i|m| |:|d|e|f| |a|n|d| |:|f|u|n|c|t|i|o|n| |c|o|m@1|a|n|d|s| |(|n|e|s|t|e|d|)| +0#0000000&@30
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |=| |'|f|'| +0#0000000&@29
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l| |f|d|c|=|2| |f|d|m|=|s|y|n|t|a|x| +0#0000000&@34
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|7| |l|i|n|e|s|:| |d|e|f| |F|u|n|A|(|)|:| |s|t|r|i|n|g|-@40
-| @1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|7| |l|i|n|e|s|:| |d|e|f| |F|u|n|B|(|)|:| |s|t|r|i|n|g|-@40
-| @1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|7| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|u|n|C|(|)|-@43
-| @1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|7| |l|i|n|e|s|:| |f|u|n|c|t|i|o|n| |F|u|n|D|(|)|-@43
-| @1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|F|u|n|A|(+0#e000e06&|)| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|F|u|n|B|(+0#e000e06&|)| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|F|u|n|C|(+0#e000e06&|)| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1>e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|F|u|n|D|(+0#e000e06&|)| +0#0000000&@61
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|4|0|,|1| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_highlight_03.dump b/runtime/syntax/testdir/dumps/vim_ex_highlight_03.dump
new file mode 100644
index 0000000..5d45c19
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_highlight_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@63
+@6|\+0#e000e06&| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@59
+@75
+|h+0#af5f00255&|i| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@63
+@6>\+0#e000e06&| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|7| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_highlight_99.dump b/runtime/syntax/testdir/dumps/vim_ex_highlight_99.dump
deleted file mode 100644
index dbd86d4..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_highlight_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&@54
-@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&@53
-@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@58
-@75
-|h+0#af5f00255&|i| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@64
-@6|\+0#e000e06&| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@57
-@6|\+0#e000e06&| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&@54
-@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&@53
-@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@45
-@75
-|h+0#af5f00255&|i| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@5
-@75
-|h+0#af5f00255&|i| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@63
-@6|\+0#e000e06&| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@59
-@75
-|h+0#af5f00255&|i| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@63
-@6>\+0#e000e06&| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
-@57|5@1|,|7| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_00.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_00.dump
new file mode 100644
index 0000000..d7bfb6b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|l|e|t| |h|e|r|e|d|o|c| |c|o|m@1|a|n|d| +0#0000000&@46
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |=| |"+0#e000002&|h|"| +0#0000000&@29
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l| |f|d|c|=|2| |f|d|l|=|9@1| |f|d|m|=|s|y|n|t|a|x| +0#0000000&@27
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@55
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |t|r|i|m| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_01.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_01.dump
new file mode 100644
index 0000000..623dc27
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_01.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |t|r|i|m| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| >l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|1| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|2| +0#0000000&@65
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|1| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|2| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |i|n|t|e|r|p|o|l|a|t|i|o|n| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@52
+@57|1|9|,|1| @10|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_02.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_02.dump
new file mode 100644
index 0000000..9135666
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_02.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@52
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@47
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&| +0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&| +0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@45
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+@57|3|7|,|3| @9|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_03.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_03.dump
new file mode 100644
index 0000000..4bd2857
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_03.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |n|o| |i|n|t|e|r|p|o|l|a|t|i|o|n| |(|e|s|c|a|p|e|d| |{| |a|n|d| |}|)| +0#0000000&@36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@52
+||+0#0000e05#a8a8a8255| >l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1| +0#0000000&@59
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1| +0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1| +0#0000000&@59
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1| +0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@47
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|5@1|,|1| @9|2|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_04.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_04.dump
new file mode 100644
index 0000000..b763e64
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@45
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |n|o| |i|n|t|e|r|p|o|l|a|t|i|o|n| +0#0000000&@54
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |0|}| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |1|}| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@55
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |0|}| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |1|}| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|7|3|,|0|-|1| @7|3|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_05.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_05.dump
new file mode 100644
index 0000000..e7b8a55
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{|1| |+| |0|}| +0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{|1| |+| |1|}| +0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{|1| |+| |0|}| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{|1| |+| |1|}| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r| |m|u|s|t| |n|o|t| |b|e| |f|o|l@1|o|w|e|d| |b|y| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@25
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|9|1|,|0|-|1| @7|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_06.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_06.dump
new file mode 100644
index 0000000..6ed3eb5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"| |E|N|D| |"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0|E|N|D| | +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|E|N|D| | +0#0000000&@66
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r| |m|u|s|t| |b|e| |v|e|r|t|i|c|a|l@1|y| |a|l|i|g|n|e|d| |w|i|t|h| |:|l|e|t| |(|i|f| |p|r|e|c|e|d|e|d| |b|y| |w|h|i|t|e|s|p
+| +0&#a8a8a8255@1|a+0&#ffffff0|c|e|)| +0#0000000&@68
+@57|1|0|9|,|0|-|1| @6|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_07.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_07.dump
new file mode 100644
index 0000000..85bb2f3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r| |m|u|s|t| |b|e| |v|e|r|t|i|c|a|l@1|y| |a|l|i|g|n|e|d| |w|i|t|h| |:|l|e|t| |(|i|f| |p|r|e|c|e|d|e|d| |b|y| |w|h|i|t|e|s|p
+| +0&#a8a8a8255@1|a+0&#ffffff0|c|e|)| +0#0000000&@68
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@44
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1>E|N|D| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+@57|1|2|5|,|3| @8|6|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_08.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_08.dump
new file mode 100644
index 0000000..16149fe
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_08.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@4|E|N|D| +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@4|E|N|D| | +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+@57|1|4|3|,|3| @8|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_09.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_09.dump
new file mode 100644
index 0000000..fbb7d9d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_09.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| >E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0|E|N|D| +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@2|E|N|D| +0#0000000&@66
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r|s| +0#0000000&@59
+@57|1|6|1|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
new file mode 100644
index 0000000..93db587
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r|s| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@48
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| >!+0#e000e06#ffffff0|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |0|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |0+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |A|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |A+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|r@1|o|r| |-| |l|e|a|d|i|n|g| |l|o|w|e|r|c|a|s|e| |c|h|a|r|a|c|t|e|r| +0#0000000&@35
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1| +0#0000000&|a+0#af5f00255&|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&| +0#0000000&@47
+@57|1|7|9|,|1| @8|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
new file mode 100644
index 0000000..f63b3b6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1| +0#0000000&|a+0#af5f00255&|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&| +0#0000000&@47
+| +0#0000e05#a8a8a8255@1|l+0#0000000#ffffff0|i|n|e|1| @67
+| +0#0000e05#a8a8a8255@1|l+0#0000000#ffffff0|i|n|e|2| @67
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|6|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_00.dump b/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_00.dump
new file mode 100644
index 0000000..bda8d79
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|l|o|a|d|k|e|y|m|a|p| |c|o|m@1|a|n|d| +0#0000000&@49
+@75
+|s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&|u|t|f|-+0#af5f00255&|8+0#e000002&| +0#0000000&@54
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|k|e|y|m|a|p|_|n|a|m|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|s|y|n|t|a|x|-|t|e|s|t|"| +0#0000000&@41
+@75
+|l+0#af5f00255&|o|a|d|k|e|y|m|a|p| +0#0000000&@64
+@75
+|"+0#0000e05&| |L|i|n|e| |c|o|m@1|e|n|t| +0#0000000&@60
+@75
+@2|"+0#0000e05&| |A|n|o|t|h|e|r| |l|i|n|e| |c|o|m@1|e|n|t| +0#0000000&@50
+@75
+|a| |A| @3|B+0#0000e05&|a|s|i|c| |m|a|p@1|i|n|g| +0#0000000&@54
+|'|a| |á| @2|M+0#0000e05&|o|r|e| |t|h|a|n| |o|n|e| |c|h|a|r| |i|n| |f|i|r|s|t| |c|o|l|u|m|n| +0#0000000&@33
+@75
+|"+0#0000e05&| |S|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| +0#0000000&@56
+|<+0#e000e06&|c|h|a|r|-|6|2|>| +0#0000000&@5|B| @14|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |-| |d|e|c|i|m|a|l| +0#0000000&@2
+|c| @13|<+0#e000e06&|c|h|a|r|-|0|1|0|3|>| +0#0000000&@4|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |R|H|S| |-| |o|c|t|a|l| +0#0000000&@4
+|<+0#e000e06&|c|h|a|r|-|0|x|0@1|6|4|>| +0#0000000&@1|<+0#e000e06&|c|h|a|r|-|0|x|0@1|4@1|>| +0#0000000&@2|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |a|n|d| |R|H|S| |-|@+0#4040ff13&@2
+| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_keymap_99.dump b/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_01.dump
index 1b27d57..2fb05a7 100644
--- a/runtime/syntax/testdir/dumps/vim_keymap_99.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_01.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@74
-|"+0#0000e05&| |S|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| @56
-@60| +0#0000000&@14
-|<+0#e000e06&|c|h|a|r|-|6|2|>| +0#0000000&@5|B| @14|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |-| |d|e|c|i|m|a|l| @2
+|'+0&#ffffff0|a| |á| @2|M+0#0000e05&|o|r|e| |t|h|a|n| |o|n|e| |c|h|a|r| |i|n| |f|i|r|s|t| |c|o|l|u|m|n| +0#0000000&@33
@75
+|"+0#0000e05&| |S|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| +0#0000000&@56
+|<+0#e000e06&|c|h|a|r|-|6|2|>| +0#0000000&@5|B| @14|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |-| |d|e|c|i|m|a|l| +0#0000000&@2
+|c| @13|<+0#e000e06&|c|h|a|r|-|0|1|0|3|>| +0#0000000&@4|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |R|H|S| |-| |o|c|t|a|l| +0#0000000&@4
+><+0#e000e06&|c|h|a|r|-|0|x|0@1|6|4|>| +0#0000000&@1|<+0#e000e06&|c|h|a|r|-|0|x|0@1|4@1|>| +0#0000000&@2|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |a|n|d| |R|H|S| |-| |h|e
+|x|a|d|e|c|i|m|a|l| +0#0000000&@65
@75
-@46| +0#0000000&@28
-|c| @13|<+0#e000e06&|c|h|a|r|-|0|1|0|3|>| +0#0000000&@4|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |R|H|S| |-| |o|c|t|a|l| @4
-@60| +0#0000000&@14
-|<+0#e000e06&|c|h|a|r|-|0|x|0@1|6|4|>| +0#0000000&@1|<+0#e000e06&|c|h|a|r|-|0|x|0@1|4@1|>| +0#0000000&@2|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |a|n|d| |R|H|S| |-| |h|e
-|x|a|d|e|c|i|m|a|l| @50| +0#0000000&@14
-@75
-|"+0#0000e05&| |V|i|m|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| |c|h|a|r|a|c|t|e|r|s| @30| +0#0000000&@12
+|"+0#0000e05&| |V|i|m|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@43
|#| |<+0#e000e06&|c|h|a|r|-|0|x|0@1|a|3|>| +0#0000000&@15|L+0#0000e05&|i|n|e| |s|h|o|u|l|d| |n|o|t| |m|a|t|c|h| |a|s| |a| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e
|n|t| +0#0000000&@72
|\|"| |“| @26|L+0#0000e05&|i|n|e| |s|h|o|u|l|d| |n|o|t| |m|a|t|c|h| |a|s| |a| |l|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m
-@1|e|n|t| | +0#0000000&@69
->:| |"| @27|L+0#0000e05&|i|n|e| |s|h|o|u|l|d| |n|o|t| |m|a|t|c|h| |a|s| |a| |l|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m
@1|e|n|t| +0#0000000&@70
-@57|2|7|,|1| @9|B|o|t|
+|:| |"| @27|L+0#0000e05&|i|n|e| |s|h|o|u|l|d| |n|o|t| |m|a|t|c|h| |a|s| |a| |l|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m
+@1|e|n|t| +0#0000000&@70
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_after_bar_00.dump b/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_after_bar_00.dump
new file mode 100644
index 0000000..6649475
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_after_bar_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|l|o|a|d|k|e|y|m|a|p| |c|o|m@1|a|n|d| |(|a|f|t|e|r| |"+0#e000002&|||"|)+0#0000e05&| +0#0000000&@37
+@75
+|s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&|u|t|f|-+0#af5f00255&|8+0#e000002&| +0#0000000&@54
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|k|e|y|m|a|p|_|n|a|m|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|s|y|n|t|a|x|-|t|e|s|t|"| +0#0000000&@41
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&||| |l+0#af5f00255&|o|a|d|k|e|y|m|a|p| +0#0000000&@51
+@75
+|a| |A| @3|B+0#0000e05&|a|s|i|c| |m|a|p@1|i|n|g| +0#0000000&@54
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_after_colon_00.dump b/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_after_colon_00.dump
new file mode 100644
index 0000000..f0e5adc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_loadkeymap_after_colon_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|l|o|a|d|k|e|y|m|a|p| |c|o|m@1|a|n|d| |(|a|f|t|e|r| |"+0#e000002&|:|"|)+0#0000e05&| +0#0000000&@37
+@75
+|s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&|u|t|f|-+0#af5f00255&|8+0#e000002&| +0#0000000&@54
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|k|e|y|m|a|p|_|n|a|m|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|s|y|n|t|a|x|-|t|e|s|t|"| +0#0000000&@41
+@75
+|:|l+0#af5f00255&|o|a|d|k|e|y|m|a|p| +0#0000000&@63
+@75
+|a| |A| @3|B+0#0000e05&|a|s|i|c| |m|a|p@1|i|n|g| +0#0000000&@54
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_map_00.dump b/runtime/syntax/testdir/dumps/vim_ex_map_00.dump
index 371c1ce..763e641 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_map_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_map_00.dump
@@ -5,9 +5,6 @@
|m+0#af5f00255&|a|p| +0#0000000&@71
|m+0#af5f00255&|a|p| +0#0000000&|l|h|s| |r|h|s| @63
@75
-|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |'+0#e000002&|v|:|v|a|l|'|)+0#e000e06&| +0#0000000&@51
-|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p| +0#0000000&|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |'+0#e000002&|v|:|v|a|l|'|)+0#e000e06&| +0#0000000&@50
-@75
|m+0#af5f00255&|a|p|c|l|e|a|r| +0#0000000&@1|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
|m+0#af5f00255&|a|p|c|l|e|a|r|!| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
|n+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
@@ -17,4 +14,7 @@
|o+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
|i+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
|l+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
+|c+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
+|t+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
+@75
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_map_01.dump b/runtime/syntax/testdir/dumps/vim_ex_map_01.dump
index 7b43533..0d9edd4 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_map_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_map_01.dump
@@ -1,12 +1,9 @@
-|v+0#af5f00255#ffffff0|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
-|x+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
-|s+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
-|o+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
+|o+0#af5f00255#ffffff0|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
|i+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
->l+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
+|l+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
|c+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
|t+0#af5f00255&|m|a|p|c|l|e|a|r| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@56
-@75
+> @74
@75
|"+0#0000e05&| |:|h|e|l|p| |m|a|p|-|b|a|r| +0#0000000&@59
@75
@@ -17,4 +14,7 @@
|"+0#0000e05&| |^|V||| @6|a|l|w|a|y|s|,| |i|n| |V|i|m| |a|n|d| |V|i| +0#0000000&@41
|m+0#af5f00255&|a|p| +0#0000000&|_|l| |:|!|l|s| |^+0#0000e05&|V||+0#0000000&| |m|o|r|e|^|M|:|e|c|h|o| |"|r|h|s|"|<+0#e000e06&|C|R|>| +0#0000000&@37
@75
-@57|1|9|,|1| @9|1|9|%|
+|m+0#af5f00255&|a|p| +0#0000000&|l|h|s| |:|s|e|a|r|c|h|(|'|f|o@1|\@1|||b|a|r|'|)|<+0#e000e06&|C|R|>|:+0#0000000&|e|c|h|o| |"|r|h|s|"|<+0#e000e06&|C|R|>| +0#0000000&@27
+@75
+@75
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_map_02.dump b/runtime/syntax/testdir/dumps/vim_ex_map_02.dump
index c598781..58ec003 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_map_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_map_02.dump
@@ -1,12 +1,9 @@
| +0&#ffffff0@74
-|m+0#af5f00255&|a|p| +0#0000000&|l|h|s| |:|s|e|a|r|c|h|(|'|f|o@1|\@1|||b|a|r|'|)|<+0#e000e06&|C|R|>|:+0#0000000&|e|c|h|o| |"|r|h|s|"|<+0#e000e06&|C|R|>| +0#0000000&@27
-@75
-@75
|"+0#0000e05&| |m|u|l|t|i|l|i|n|e| |R|H|S| +0#0000000&@59
-> @74
+@75
|m+0#af5f00255&|a|p| +0#0000000&|<+0#e000e06&|l|e|a|d|e|r|>|b+0#0000000&|a|z| @59
@2|\+0#e000e06&| +0#0000000&|:|e|c|h|o| |(|<+0#e000e06&|b|a|r|>| +0#0000000&@58
-@2|\+0#e000e06&| +0#0000000&@71
+@2>\+0#e000e06&| +0#0000000&@71
@2|\+0#e000e06&|'+0#0000000&|b|a|r|'|)|<+0#e000e06&|c|r|>| +0#0000000&@61
@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
@75
@@ -17,4 +14,7 @@
|m+0#af5f00255&|a|p| +0#0000000&|l|h|s| @67
@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
@2|\+0#e000e06&| +0#0000000&|e|c|h|o| |"|f|o@1|"| @60
-@57|3|7|,|0|-|1| @7|4|5|%|
+@75
+|m+0#af5f00255&|a|p| +0#0000000&|l|h|s|^+0#0000e05&|V| +0#0000000&@65
+@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
+@57|3|7|,|3| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_map_03.dump b/runtime/syntax/testdir/dumps/vim_ex_map_03.dump
index 4ad6e82..62966be 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_map_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_map_03.dump
@@ -1,12 +1,9 @@
-| +0&#ffffff0@1|\+0#e000e06&| +0#0000000&|e|c|h|o| |"|f|o@1|"| @60
-@75
-|m+0#af5f00255&|a|p| +0#0000000&|l|h|s|^+0#0000e05&|V| +0#0000000&@65
-@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
+| +0&#ffffff0@1|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
@2|\+0#e000e06&| +0#0000000&|e|c|h|o| |"|f|o@1|"| @60
-> @74
+@75
|m+0#af5f00255&|a|p| +0#0000000&|l|^+0#0000e05&|V| +0#0000000&|h|s| @64
@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
-@2|\+0#e000e06&| +0#0000000&|e|c|h|o| |"|f|o@1|"| @60
+@2>\+0#e000e06&| +0#0000000&|e|c|h|o| |"|f|o@1|"| @60
@75
|m+0#af5f00255&|a|p| +0#0000000&|l|^+0#0000e05&|V| +0#0000000&|h|s| @64
@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
@@ -17,4 +14,7 @@
@75
|m+0#af5f00255&|a|p| +0#0000000&|l|h|s| @67
@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| |(|m|a|t|c|h|e|s| |a|s| |R|H|S| |b|u|t| |h|a|r|m|l|e|s@1|)| +0#0000000&@32
-@57|5@1|,|0|-|1| @7|7|2|%|
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|c|l|e|a|r|"| +0#0000000&@62
+@75
+@75
+@57|5@1|,|3| @9|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_map_04.dump b/runtime/syntax/testdir/dumps/vim_ex_map_04.dump
index 254fc91..7f12539 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_map_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_map_04.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@1|"+0#0000e05&|\| |c|o|m@1|e|n|t| |(|m|a|t|c|h|e|s| |a|s| |R|H|S| |b|u|t| |h|a|r|m|l|e|s@1|)| +0#0000000&@32
-|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|c|l|e|a|r|"| +0#0000000&@62
+| +0&#ffffff0@74
+|"+0#0000e05&| |D|i|f@1|e|r|e|n|t|i|a|t|e| |m|a|p|(|)| |f|r|o|m| |:|m|a|p| +0#0000000&@43
@75
+|m+0#af5f00255&|a|p| +0#0000000&|(| |:|e|c|h|o| |"|o|p|e|n|-|p|a|r|e|n|"|<+0#e000e06&|C|R|>| +0#0000000&@46
@75
-|"+0#0000e05&| |I|s@1|u|e| @1|#|1|2|6|7|2| +0#0000000&@59
-> @74
-|n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&|<+0#e000e06&|l|e|a|d|e|r|>|f+0#0000000&|o@1| |:|e|c|h|o| |c|a|l@1|(| @42
-@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
-@2|\+0#e000e06&| +0#0000000&|{|x|-|>|x|}|,| @63
-@2|\+0#e000e06&| +0#0000000&|[|'|f|o@1|'|]|)|<+0#e000e06&|c|r|>| +0#0000000&@58
+>c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |'+0#e000002&|v|:|v|a|l|'|)+0#e000e06&| +0#0000000&@51
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p| +0#0000000&|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |'+0#e000002&|v|:|v|a|l|'|)+0#e000e06&| +0#0000000&@50
@75
-|n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&|<+0#e000e06&|l|e|a|d|e|r|>|b+0#0000000&|a|r| |:|e|c|h|o| |(| @46
-@2|\+0#e000e06&| +0#0000000&@71
-@2|\+0#e000e06&| +0#0000000&|'|b|a|r|'|)|<+0#e000e06&|c|r|>| +0#0000000&@60
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@2|m+0#af5f00255&|a|p| +0#0000000&|(| |:|e|c|h|o| |"|o|p|e|n|-|p|a|r|e|n|"|<+0#e000e06&|C|R|>| +0#0000000&@44
+@2|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |'+0#e000002&|v|:|v|a|l|'|)+0#e000e06&| +0#0000000&@49
+@2|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|p| +0#0000000&|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |'+0#e000002&|v|:|v|a|l|'|)+0#e000e06&| +0#0000000&@48
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-@75
-|"+0#0000e05&| +0#0000000&|E+0#e000e06&|x|a|m|p|l|e|:| +0#0000000&@64
-|"+0#0000e05&| @2|/|a|u|t|o|l|o|a|d|/|n|e|t|r|w|.|v|i|m| +0#0000000&@51
-@75
-@57|7|3|,|0|-|1| @7|9|8|%|
+|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
+@2|m+0#af5f00255&|a|p| +0#0000000&|(| |:|e|c|h|o| |"|o|p|e|n|-|p|a|r|e|n|"|<+0#e000e06&|C|R|>| +0#0000000&@44
+@2|m+0#00e0e07&|a|p|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |'+0#e000002&|v|:|v|a|l|'|)+0#e000e06&| +0#0000000&@54
+| +0#0000e05&@1|#| |:|m|a|p| |L|H|S|=|(|l|i|s|t|,| |R|H|S|=|'|v|:|v|a|l|'|)| +0#0000000&@42
+@2|m+0#af5f00255&|a|p| +0#0000000&|(|l|i|s|t|,| |'|v|:|v|a|l|'|)| @53
+@57|7|3|,|1| @9|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_map_99.dump b/runtime/syntax/testdir/dumps/vim_ex_map_05.dump
index 37ee7cf..4bb04c0 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_map_99.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_map_05.dump
@@ -1,7 +1,9 @@
-| +0&#ffffff0@74
+| +0&#ffffff0@1|m+0#af5f00255&|a|p| +0#0000000&|(|l|i|s|t|,| |'|v|:|v|a|l|'|)| @53
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
@75
-|"+0#0000e05&| |I|s@1|u|e| @1|#|1|2|6|7|2| +0#0000000&@59
@75
+|"+0#0000e05&| |I|s@1|u|e| @1|#|1|2|6|7|2| +0#0000000&@59
+> @74
|n+0#af5f00255&@1|o|r|e|m|a|p| +0#0000000&|<+0#e000e06&|l|e|a|d|e|r|>|f+0#0000000&|o@1| |:|e|c|h|o| |c|a|l@1|(| @42
@2|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@62
@2|\+0#e000e06&| +0#0000000&|{|x|-|>|x|}|,| @63
@@ -15,6 +17,4 @@
|"+0#0000e05&| +0#0000000&|E+0#e000e06&|x|a|m|p|l|e|:| +0#0000000&@64
|"+0#0000e05&| @2|/|a|u|t|o|l|o|a|d|/|n|e|t|r|w|.|v|i|m| +0#0000000&@51
@75
->i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|h+0#00e0e07&|a|s|m|a|p|t|o|(+0#e000e06&|'+0#e000002&|<|P|l|u|g|>|N|e|t|r|w|O|p|e|n|F|i|l|e|'|)+0#e000e06&| +0#0000000&@9|||n+0#af5f00255&|m|a|p| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|<+0#e000e06&|s|i|l|e|n|t|>| +0#0000000&|<+0#e000e06&|n|o|w|a|i
-|t|>| +0#0000000&|%| |<+0#e000e06&|P|l|u|g|>|N+0#0000000&|e|t|r|w|O|p|e|n|F|i|l|e|||e+0#af5f00255&|n|d|i|f| +0#0000000&@44
-@57|8|7|,|1| @9|B|o|t|
+@57|9|1|,|0|-|1| @7|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_map_06.dump b/runtime/syntax/testdir/dumps/vim_ex_map_06.dump
new file mode 100644
index 0000000..35e9022
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_map_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+>i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|h+0#00e0e07&|a|s|m|a|p|t|o|(+0#e000e06&|'+0#e000002&|<|P|l|u|g|>|N|e|t|r|w|O|p|e|n|F|i|l|e|'|)+0#e000e06&| +0#0000000&@9|||n+0#af5f00255&|m|a|p| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&|<+0#e000e06&|s|i|l|e|n|t|>| +0#0000000&|<+0#e000e06&|n|o|w|a|i
+|t|>| +0#0000000&|%| |<+0#e000e06&|P|l|u|g|>|N+0#0000000&|e|t|r|w|O|p|e|n|F|i|l|e|||e+0#af5f00255&|n|d|i|f| +0#0000000&@44
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|5|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_match_00.dump b/runtime/syntax/testdir/dumps/vim_ex_match_00.dump
new file mode 100644
index 0000000..c36d37f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_match_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|m|a|t|c|h|,| |:|2|m|a|t|c|h| |a|n|d| |:|3|m|a|t|c|h| |c|o|m@1|a|n|d|s| +0#0000000&@32
+@75
+|m+0#af5f00255&|a|t|c|h| +0#0000000&|F+0#00e0003&|o@1|G|r|o|u|p| +0#0000000&|/+0#e000e06&|F+0#0000000&|o@1|/+0#e000e06&| +0#0000000&@54
+|m+0#af5f00255&|a|t|c|h| +0#0000000&@69
+|m+0#af5f00255&|a|t|c|h| +0#0000000&|n+0#00e0003&|o|n|e| +0#0000000&@64
+@75
+|2+0#af5f00255&|m|a|t|c|h| +0#0000000&|F+0#00e0003&|o@1|G|r|o|u|p| +0#0000000&|/+0#e000e06&|F+0#0000000&|o@1|/+0#e000e06&| +0#0000000&@53
+|2+0#af5f00255&|m|a|t|c|h| +0#0000000&@68
+|2+0#af5f00255&|m|a|t|c|h| +0#0000000&|n+0#00e0003&|o|n|e| +0#0000000&@63
+@75
+|3+0#af5f00255&|m|a|t|c|h| +0#0000000&|F+0#00e0003&|o@1|G|r|o|u|p| +0#0000000&|/+0#e000e06&|F+0#0000000&|o@1|/+0#e000e06&| +0#0000000&@53
+|3+0#af5f00255&|m|a|t|c|h| +0#0000000&@68
+|3+0#af5f00255&|m|a|t|c|h| +0#0000000&|n+0#00e0003&|o|n|e| +0#0000000&@63
+@75
+@75
+|"+0#0000e05&| |D|i|f@1|e|r|e|n|t|i|a|t|e| |m|a|p|(|)| |f|r|o|m| |:|m|a|p| +0#0000000&@43
+@75
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@44
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h| +0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@43
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_match_01.dump b/runtime/syntax/testdir/dumps/vim_ex_match_01.dump
new file mode 100644
index 0000000..815ed68
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_match_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@75
+|"+0#0000e05&| |D|i|f@1|e|r|e|n|t|i|a|t|e| |m|a|p|(|)| |f|r|o|m| |:|m|a|p| +0#0000000&@43
+@75
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@44
+>c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h| +0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@43
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@2|m+0#af5f00255&|a|t|c|h| +0#0000000&|F+0#00e0003&|o@1|G|r|o|u|p| +0#0000000&|/+0#e000e06&|F+0#0000000&|o@1|/+0#e000e06&| +0#0000000&@52
+@2|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@42
+@2|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h| +0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@41
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
+@2|m+0#af5f00255&|a|t|c|h| +0#0000000&|F+0#00e0003&|o@1|G|r|o|u|p| +0#0000000&|/+0#e000e06&|F+0#0000000&|o@1|/+0#e000e06&| +0#0000000&@52
+@2|m+0#af5f00255&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@47
+| +0#0000e05&@1|#| |E|r@1|o|r|:| |b|a|d| |:|m|a|t|c|h| |c|o|m@1|a|n|d| |-| |t|r|a|i|l|i|n|g| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@23
+@2|m+0#af5f00255&|a|t|c|h| +0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@46
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
+@57|1|9|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_menu_03.dump b/runtime/syntax/testdir/dumps/vim_ex_menu_03.dump
index 2ef89ec..2ba8749 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_menu_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_menu_03.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@7|\+0#e000e06&| +0#0000000&|e|n|d|i|f|<+0#e000e06&|C|R|>| +0#0000000&@55
+| +0&#ffffff0@7|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|e|n|d|i|f|<+0#e000e06&|C|R|>| +0#0000000&@55
@75
|a+0#af5f00255&|n| +0#0000000&|<+0#e000e06&|s|i|l|e|n|t|>| +0#0000000&|1+0#e000002&|0|.|3@1|0| +0#0000000&|&+0#e000e06&|F|i|l|e|.|&|C|l|o|s|e|<|T|a|b|>|:|c|l|o|s|e| +0#0000000&|:|i|f| |w|i|n|h|e|i|g|h|t|(|2|)| |<| |0| |&@1| |t|a|b|p|a|g|e|w
|i|n@1|r|(|2|)| |=@1| |0| |<+0#e000e06&|B|a|r|>| +0#0000000&@56
-@8|\+0#e000e06&| +0#0000000&@2|c|o|n|f|i|r|m| |e|n|e|w| |<+0#e000e06&|B|a|r|>| +0#0000000&@44
-@8>\+0#e000e06&| +0#0000000&|e|l|s|e| |<+0#e000e06&|B|a|r|>| +0#0000000&@54
+@8>\+0#e000e06&| +0#0000000&@2|c|o|n|f|i|r|m| |e|n|e|w| |<+0#e000e06&|B|a|r|>| +0#0000000&@44
+@8|\+0#e000e06&| +0#0000000&|e|l|s|e| |<+0#e000e06&|B|a|r|>| +0#0000000&@54
@8|\+0#e000e06&| +0#0000000&@2|c|o|n|f|i|r|m| |c|l|o|s|e| |<+0#e000e06&|B|a|r|>| +0#0000000&@43
@8|\+0#e000e06&| +0#0000000&|e|n|d|i|f|<+0#e000e06&|C|R|>| +0#0000000&@55
@75
@@ -16,5 +17,4 @@
@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
@8|\+0#e000e06&| +0#0000000&@2|c|o|n|f|i|r|m| |c|l|o|s|e| |<+0#e000e06&|B|a|r|>| +0#0000000&@43
@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
-@8|\+0#e000e06&| +0#0000000&|e|n|d|i|f|<+0#e000e06&|C|R|>| +0#0000000&@55
-@57|5@1|,|2|-|9| @7|7|1|%|
+@57|5|4|,|2|-|9| @7|7|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_menu_04.dump b/runtime/syntax/testdir/dumps/vim_ex_menu_04.dump
index ad079e6..7bc4ebd 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_menu_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_menu_04.dump
@@ -1,9 +1,11 @@
-| +0&#ffffff0@74
+| +0&#ffffff0@7|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|e|n|d|i|f|<+0#e000e06&|C|R|>| +0#0000000&@55
+@75
@75
|"+0#0000e05&| |p|o|p|u|p| |m|e|n|u|s| +0#0000000&@61
-|p+0#af5f00255&|o|p|u|p| +0#0000000&|&+0#e000e06&|F|o@1| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
+>p+0#af5f00255&|o|p|u|p| +0#0000000&|&+0#e000e06&|F|o@1| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
|p+0#af5f00255&|o|p|u|p|!| +0#0000000&|&+0#e000e06&|F|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
-> @74
+@75
@75
|"+0#0000e05&| |I|s@1|u|e| |#|1|4|2|3|0| +0#0000000&@60
@75
@@ -15,6 +17,4 @@
@12|H|i|s|t|o|r|y|J|u|m|p|(+0#e000e06&|r+0#00e0e07&|e|s|.+0#af5f00255&|t+0#00e0e07&|e|x|t|)+0#e000e06&| +0#0000000&@41
@8|}+0#e000e06&|)| +0#0000000&@64
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@75
-|p+0#af5f00255&|o|p|u|p|\+0#e000e06&|.|F|i|l|t|e|r|M|e|n|u|<|T|a|b|>|F|i|l|t|e|r|(|)|<|C|R|>| +0#0000000&@40
-@57|7|3|,|0|-|1| @7|9|8|%|
+@57|7|1|,|1| @9|9|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_menu_05.dump b/runtime/syntax/testdir/dumps/vim_ex_menu_05.dump
new file mode 100644
index 0000000..4d9e9cc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_menu_05.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&@68
+@75
+|p+0#af5f00255&|o|p|u|p|\+0#e000e06&|.|F|i|l|t|e|r|M|e|n|u|<|T|a|b|>|F|i|l|t|e|r|(|)|<|C|R|>| +0#0000000&@40
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|8|7|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_menu_99.dump b/runtime/syntax/testdir/dumps/vim_ex_menu_99.dump
deleted file mode 100644
index 80608b7..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_menu_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|"+0#0000e05&| |p|o|p|u|p| |m|e|n|u|s| +0#0000000&@61
-|p+0#af5f00255&|o|p|u|p| +0#0000000&|&+0#e000e06&|F|o@1| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
-|p+0#af5f00255&|o|p|u|p|!| +0#0000000&|&+0#e000e06&|F|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
-@75
-@75
-|"+0#0000e05&| |I|s@1|u|e| |#|1|4|2|3|0| +0#0000000&@60
-@75
-|"+0#0000e05&| |a| |m|e|n|u| |i|t|e|m| |n|a|m|e| |c|a|n@1|o|t| |s|t|a|r|t| |w|i|t|h| |'|.|'| +0#0000000&@34
-@75
-|e+0#af5f00255&|x|p|o|r|t| +0#0000000&|d+0#af5f00255&|e|f| +0#0000000&|H|i|s|t|o|r|y|J|u|m|p|M|e|n|u|(+0#e000e06&|)| +0#0000000&@46
-@4|p+0#af5f00255&|o|p|u|p|.|F+0#0000000&|i|l|t|e|r|M|e|n|u|(+0#e000e06&|"+0#e000002&|J|u|m|p| |h|i|s|t|o|r|y|"|,+0#0000000&| |d+0#00e0e07&|i|r|_|h|i|s|t|,+0#0000000&| @28
-@8|(+0#e000e06&|r+0#00e0e07&|e|s|,+0#0000000&| |_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@53
-@12|H|i|s|t|o|r|y|J|u|m|p|(+0#e000e06&|r+0#00e0e07&|e|s|.+0#af5f00255&|t+0#00e0e07&|e|x|t|)+0#e000e06&| +0#0000000&@41
-@8|}+0#e000e06&|)| +0#0000000&@64
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@75
-|p+0#af5f00255&|o|p|u|p|\+0#e000e06&|.|F|i|l|t|e|r|M|e|n|u|<|T|a|b|>|F|i|l|t|e|r|(|)|<|C|R|>| +0#0000000&@40
-> @74
-@57|8|7|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_menutranslate_03.dump b/runtime/syntax/testdir/dumps/vim_ex_menutranslate_03.dump
new file mode 100644
index 0000000..06d85e9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_menutranslate_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@54
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5|1|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_menutranslate_99.dump b/runtime/syntax/testdir/dumps/vim_ex_menutranslate_99.dump
deleted file mode 100644
index 7f6ccfc..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_menutranslate_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|m+0#af5f00255#ffffff0|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@61
-@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
-@6|\+0#e000e06&| +0#0000000&|&+0#e000e06&|F|o+0#0000000&@1|\+0#e000e06&| |b+0#0000000&|a|r| @57
-@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
-@6|\+0#e000e06&| +0#0000000&|&+0#e000e06&|F|u+0#0000000&|b|a|r| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@47
-@75
-|m+0#af5f00255&|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@61
-@6|\+0#e000e06&| +0#0000000&|&+0#e000e06&|F|o+0#0000000&@1|\+0#e000e06&| |b+0#0000000&|a|r| @57
-@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
-@6|\+0#e000e06&| +0#0000000&|&+0#e000e06&|F|u+0#0000000&|b|a|r||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@48
-@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
-@75
-|m+0#af5f00255&|e|n|u|t|r|a|n|s|l|a|t|e| +0#0000000&@61
-@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
-@6|\+0#e000e06&| +0#0000000&|&+0#e000e06&|F|o+0#0000000&@1|\+0#e000e06&| |b+0#0000000&|a|r| @57
-@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
-@6|\+0#e000e06&| +0#0000000&|&+0#e000e06&|F|u+0#0000000&|b|a|r| @60
-@6|\+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@54
-> @74
-@57|5|1|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_01.dump b/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_01.dump
new file mode 100644
index 0000000..5bf3cf1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_01.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
+| +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
+|}+0#e000e06&| +0#0000000&@73
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+| +0#0000e05&@1>#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
+|}+0#e000e06&| +0#0000000&@73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|,|3| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_99.dump b/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_99.dump
deleted file mode 100644
index 8559c6c..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|c|o|m@1|e|n|t|_|s|t|r|i|n|g|s| |=| |v|:|f|a|l|s|e| +0#0000000&@19
-@75
-|"+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@55
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
-@2|"+0#0000e05&| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@65
-| +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@75
-|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@61
-| +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
-|}+0#e000e06&| +0#0000000&@73
-@75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
-| +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
->}+0#e000e06&| +0#0000000&@73
-@57|2|0|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_00.dump b/runtime/syntax/testdir/dumps/vim_ex_set_00.dump
new file mode 100644
index 0000000..3f0471b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_set_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|s|e|t| |c|o|m@1|a|n|d| +0#0000000&@56
+@75
+|s+0#af5f00255&|e|t| +0#0000000&@71
+|s+0#af5f00255&|e|t|!| +0#0000000&@70
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@67
+|s+0#af5f00255&|e|t|!| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@66
+|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|e|r|m|c|a|p| +0#0000000&@63
+|s+0#af5f00255&|e|t|!| +0#0000000&|t+0#e000e06&|e|r|m|c|a|p| +0#0000000&@62
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|?| +0#0000000&@64
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h| +0#0000000&@65
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|n+0#e000e06&|o|a|l@1|o|w|r|e|v|i|n|s| +0#0000000&@57
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l@1|o|w|r|e|v|i|n|s|!| +0#0000000&@58
+|s+0#af5f00255&|e|t| +0#0000000&|i+0#e000e06&|n|v|a|l@1|o|w|r|e|v|i|n|s| +0#0000000&@56
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|&| +0#0000000&@64
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|&|v|i| +0#0000000&@62
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_01.dump b/runtime/syntax/testdir/dumps/vim_ex_set_01.dump
new file mode 100644
index 0000000..012170e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_set_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l@1|o|w|r|e|v|i|n|s|!| +0#0000000&@58
+|s+0#af5f00255&|e|t| +0#0000000&|i+0#e000e06&|n|v|a|l@1|o|w|r|e|v|i|n|s| +0#0000000&@56
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|&| +0#0000000&@64
+>s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|&|v|i| +0#0000000&@62
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|&|v|i|m| +0#0000000&@61
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l@1|&| +0#0000000&@66
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|=+0#af5f00255&|1+0#0000000&|2|8| @61
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|:+0#af5f00255&|1+0#0000000&|2|8| @61
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h| +0#0000000&|=+0#af5f00255&|1+0#0000000&|2|8| @60
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h| +0#0000000&|:+0#af5f00255&|1+0#0000000&|2|8| @60
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|++0#af5f00255&|=|9+0#0000000&|6| @61
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|^+0#af5f00255&|=|2+0#0000000&| @62
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|-+0#af5f00255&|=|9+0#0000000&|6| @61
+@57|1|9|,|1| @9|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_02.dump b/runtime/syntax/testdir/dumps/vim_ex_set_02.dump
new file mode 100644
index 0000000..d6328d2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_set_02.dump
@@ -0,0 +1,20 @@
+|s+0#af5f00255#ffffff0|e|t| +0#0000000&|a+0#e000e06&|l|e|p|h|-+0#af5f00255&|=|9+0#0000000&|6| @61
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|a|c|k|s|p|a|c|e|++0#af5f00255&|=|n+0#0000000&|o|s|t|o|p| @53
+|s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|a|c|k|s|p|a|c|e|^+0#af5f00255&|=|n+0#0000000&|o|s|t|o|p| @53
+|s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|a|c|k|s|p|a|c|e|-+0#af5f00255&|=|n+0#0000000&|o|s|t|o|p| @53
+> @74
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|i| +0#0000000&|n+0#e000e06&|o|s|i| +0#0000000&|s+0#e000e06&|w|=+0#af5f00255&|3+0#0000000&| |t+0#e000e06&|w|=+0#af5f00255&|3+0#0000000&| @53
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|<|t+0#e000e06&|_|#|4|>+0#0000000&|=|^|[|O|t| |"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@51
+|s+0#af5f00255&|e|t| +0#0000000&|<|M|-|b|>|=|^|[|b| @2|"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@51
+@75
+|s+0#af5f00255&|e|t|l|o|c|a|l| +0#0000000&|a+0#e000e06&|u|t|o|r|e|a|d| +0#0000000&@57
+|s+0#af5f00255&|e|t|g|l|o|b|a|l| +0#0000000&|n+0#e000e06&|o|a|u|t|o|r|e|a|d| +0#0000000&@54
+|s+0#af5f00255&|e|t| +0#0000000&|a+0#e000e06&|u|t|o|r|e|a|d|<| +0#0000000&@61
+@75
+@75
+|"+0#0000e05&| |:|h|e|l|p| |o|p|t|i|o|n|-|b|a|c|k|s|l|a|s|h| +0#0000000&@50
+@75
+|"+0#0000e05&| |W|h|e|n| |s|e|t@1|i|n|g| |o|p|t|i|o|n|s| |u|s|i|n|g| |||:|l|e|t||| |a|n|d| |||l|i|t|e|r|a|l|-|s|t|r|i|n|g|||,| |y|o|u| |n|e@1|d| |t|o| |u|s|@+0#4040ff13&@2
+| +0#0000000&@56|3|7|,|0|-|1| @7|4|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_03.dump b/runtime/syntax/testdir/dumps/vim_ex_set_03.dump
new file mode 100644
index 0000000..fb013bc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_set_03.dump
@@ -0,0 +1,20 @@
+|"+0#0000e05#ffffff0| |W|h|e|n| |s|e|t@1|i|n|g| |o|p|t|i|o|n|s| |u|s|i|n|g| |||:|l|e|t||| |a|n|d| |||l|i|t|e|r|a|l|-|s|t|r|i|n|g|||,| |y|o|u| |n|e@1|d| |t|o| |u|s|e| |o
+|n|e| +0#0000000&@72
+|"+0#0000e05&| |f|e|w|e|r| |l|a|y|e|r| |o|f| |b|a|c|k|s|l|a|s|h|.| |A| |f|e|w| |e|x|a|m|p|l|e|s|:| +0#0000000&@31
+|s+0#af5f00255&|e|t| +0#0000000&|m+0#e000e06&|a|k|e|p|r|g|=+0#af5f00255&|m+0#0000000&|a|k|e|\| |f|i|l|e| @5|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|m|a|k|e| |f|i|l|e|"| +0#0000000&@22
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|m|a|k|e|p|r|g|=+0#af5f00255&|'+0#e000002&|m|a|k|e| |f|i|l|e|'| +0#0000000&@3|"+0#0000e05&| |(|s|a|m|e| |a|s| |a|b|o|v|e|)| +0#0000000&@29
+>s+0#af5f00255&|e|t| +0#0000000&|m+0#e000e06&|a|k|e|p|r|g|=+0#af5f00255&|m+0#0000000&|a|k|e|\@2| |f|i|l|e| @3|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|m|a|k|e|\| |f|i|l|e|"| +0#0000000&@21
+|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|a|g|s|=+0#af5f00255&|t+0#0000000&|a|g|s|\| |/|u|s|r|/|t|a|g|s| @3|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|t|a|g|s|"| +0#0000e05&|a|n|d| |"+0#e000002&|/|u|s|r|/|t|a|g|s|"| +0#0000000&@11
+|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|a|g|s|=+0#af5f00255&|t+0#0000000&|a|g|s|\@2| |f|i|l|e| @6|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|t|a|g|s| |f|i|l|e|"| +0#0000000&@22
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|t|a|g|s|=+0#af5f00255&|'+0#e000002&|t|a|g|s|\| |f|i|l|e|'| +0#0000000&@5|"+0#0000e05&| |(|s|a|m|e| |a|s| |a|b|o|v|e|)| +0#0000000&@29
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|m+0#e000e06&|a|k|e|p|r|g|=+0#af5f00255&|m+0#0000000&|a|k|e|,+0#e000e06&|f+0#0000000&|i|l|e| @6|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|m|a|k|e|,|f|i|l|e|"| +0#0000000&@22
+|s+0#af5f00255&|e|t| +0#0000000&|m+0#e000e06&|a|k|e|p|r|g|=+0#af5f00255&|m+0#0000000&|a|k|e|\@1|,+0#e000e06&|f+0#0000000&|i|l|e| @4|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|m|a|k|e|\|,|f|i|l|e|"| +0#0000000&@21
+|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|a|g|s|=+0#af5f00255&|t+0#0000000&|a|g|s|,+0#e000e06&|f+0#0000000&|i|l|e| @9|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|t|a|g|s|"| +0#0000e05&|a|n|d| |"+0#e000002&|f|i|l|e|"| +0#0000000&@16
+|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|a|g|s|=+0#af5f00255&|t+0#0000000&|a|g|s|\@1|,+0#e000e06&|f+0#0000000&|i|l|e| @7|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|t|a|g|s|,|f|i|l|e|"| +0#0000000&@22
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|t|a|g|s|=+0#af5f00255&|'+0#e000002&|t|a|g|s|\|,|f|i|l|e|'| +0#0000000&@5|"+0#0000e05&| |(|s|a|m|e| |a|s| |a|b|o|v|e|)| +0#0000000&@29
+@75
+|"+0#0000e05&| |T|h|i|s| |e|x|a|m|p|l|e| |s|e|t|s| |t|h|e| |'|t|i|t|l|e|s|t|r|i|n|g|'| |o|p|t|i|o|n| |t|o| |"+0#e000002&|h|i|||t|h|e|r|e|"|:+0#0000e05&| +0#0000000&@15
+|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|h+0#0000000&|i|\|||t|h|e|r|e| @49
+|"+0#0000e05&| |T|h|i|s| |s|e|t|s| |t|h|e| |'|t|i|t|l|e|s|t|r|i|n|g|'| |o|p|t|i|o|n| |t|o| |"+0#e000002&|h|i|"| +0#0000e05&|a|n|d| |'|i|c|o|n|s|t|r|i|n|g|'| |t|o| |"+0#e000002&|t|h|e|r|e|"|:+0#0000e05&| +0#0000000&@1
+@57|5|4|,|1| @9|6|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_04.dump b/runtime/syntax/testdir/dumps/vim_ex_set_04.dump
new file mode 100644
index 0000000..6280f6a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_set_04.dump
@@ -0,0 +1,20 @@
+|"+0#0000e05#ffffff0| |T|h|i|s| |s|e|t|s| |t|h|e| |'|t|i|t|l|e|s|t|r|i|n|g|'| |o|p|t|i|o|n| |t|o| |"+0#e000002&|h|i|"| +0#0000e05&|a|n|d| |'|i|c|o|n|s|t|r|i|n|g|'| |t|o| |"+0#e000002&|t|h|e|r|e|"|:+0#0000e05&| +0#0000000&@1
+|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|h+0#0000000&|i|||s+0#af5f00255&|e|t| +0#0000000&|i+0#e000e06&|c|o|n|s|t|r|i|n|g|=+0#af5f00255&|t+0#0000000&|h|e|r|e| @35
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|d+0#e000e06&|i|r|=+0#af5f00255&|\+0#0000000&@1|m|a|c|h|i|n|e|\|p|a|t|h| @5|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|\@1|m|a|c|h|i|n|e|\|p|a|t|h|"| +0#0000000&@17
+|s+0#af5f00255&|e|t| +0#0000000&|d+0#e000e06&|i|r|=+0#af5f00255&|\+0#0000000&@3|m|a|c|h|i|n|e|\@1|p|a|t|h| @2|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|\@1|m|a|c|h|i|n|e|\|p|a|t|h|"| +0#0000000&@17
+>s+0#af5f00255&|e|t| +0#0000000&|d+0#e000e06&|i|r|=+0#af5f00255&|\+0#0000000&@1|p|a|t|h|\@1|f|i|l|e| @7|"+0#0000e05&| |r|e|s|u|l|t|s| |i|n| |"+0#e000002&|\@1|p|a|t|h|\|f|i|l|e|"| +0#0000e05&|(|w|r|o|n|g|!|)| +0#0000000&@11
+@75
+@75
+|"+0#0000e05&| |:|h|e|l|p| |:|s|e|t|_|e|n|v| +0#0000000&@58
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|e|r|m|=+0#af5f00255&|$+0#e000e06&|T|E|R|M|.+0#0000000&|n|e|w| @56
+|s+0#af5f00255&|e|t| +0#0000000&|p+0#e000e06&|a|t|h|=+0#af5f00255&|/+0#0000000&|u|s|r|/|$+0#e000e06&|I|N|C|L|U|D|E|,|$|H|O|M|E|/+0#0000000&|i|n|c|l|u|d|e|,+0#e000e06&|.+0#0000000&| @36
+@75
+@75
+|"+0#0000e05&| |M|u|l|t|i|l|i|n|e| |:|s|e|t| |a|n|d| |o|p|t|i|o|n| |v|a|l|u|e|s| +0#0000000&@40
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|p+0#e000e06&|a|t|h|=+0#af5f00255&|a+0#0000000&|b|c|,+0#e000e06&|d+0#0000000&|e|f|,+0#e000e06&|g+0#0000000&|h|i| @54
+@6|"+0#0000e05&|\| |d|e|f| |i|s| |t|h|e| |'|d|e|f|i|n|e|'| |o|p|t|i|o|n| +0#0000000&@39
+@6|\+0#e000e06&| +0#0000000&|d+0#e000e06&|e|f|=+0#af5f00255&|a+0#0000000&|b|c|,+0#e000e06&|d+0#0000000&|e|f|,+0#e000e06&|g+0#0000000&|h|i| @51
+@57|7|2|,|1| @9|8|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_05.dump b/runtime/syntax/testdir/dumps/vim_ex_set_05.dump
new file mode 100644
index 0000000..3f67529
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_set_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|d+0#e000e06&|e|f|=+0#af5f00255&|a+0#0000000&|b|c|,+0#e000e06&|d+0#0000000&|e|f|,+0#e000e06&|g+0#0000000&|h|i| @51
+@75
+|s+0#af5f00255&|e|t| +0#0000000&|p+0#e000e06&|a|t|h|=+0#af5f00255&|a+0#0000000&|b|c|,+0#e000e06&| +0#0000000&@61
+@6|"+0#0000e05&|\| |d|e|f| |i|s| |a| |'|p|a|t|h|'| |d|i|r|e|c|t|o|r|y| |v|a|l|u|e| +0#0000000&@34
+@6|\+0#e000e06&|d+0#0000000&|e|f|,+0#e000e06&|g+0#0000000&|h|i| @60
+> @74
+|s+0#af5f00255&|e|t| +0#0000000&|p+0#e000e06&|a|t|h|=+0#af5f00255&| +0#0000000&@65
+@6|"+0#0000e05&|\| |d|e|f| |i|s| |a| |'|p|a|t|h|'| |d|i|r|e|c|t|o|r|y| |v|a|l|u|e| +0#0000000&@34
+@6|\+0#e000e06&|a+0#0000000&|b|c|,+0#e000e06&|d+0#0000000&|e|f| @60
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|9|0|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_sleep_99.dump b/runtime/syntax/testdir/dumps/vim_ex_sleep_99.dump
deleted file mode 100644
index 4fc3d5e..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_sleep_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |V|i|m| |:|s|l|e@1|p| |c|o|m@1|a|n|d| +0#0000000&@54
-@75
-|s+0#af5f00255&|l|e@1|p| +0#0000000&@7|"+0#0000e05&| |s|l|e@1|p| |f|o|r| |o|n|e| |s|e|c|o|n|d| +0#0000000&@39
-|5+0#e000002&| +0#0000000&|s+0#af5f00255&|l|e@1|p| +0#0000000&@5|"+0#0000e05&| |s|l|e@1|p| |f|o|r| |f|i|v|e| |s|e|c|o|n|d|s| +0#0000000&@37
-|s+0#af5f00255&|l|e@1|p| +0#0000000&|1+0#e000002&|0@1|m| +0#0000000&@2|"+0#0000e05&| |s|l|e@1|p| |f|o|r| |1|0@1| |m|i|l@1|i|s|e|c|o|n|d|s| +0#0000000&@33
-|1+0#e000002&|0@1| +0#0000000&|s+0#af5f00255&|l|e@1|p| +0#0000000&|m+0#e000002&| +0#0000000&@1|"+0#0000e05&| |s|l|e@1|p| |f|o|r| |1|0@1| |m|i|l@1|i|s|e|c|o|n|d|s| +0#0000000&@33
-@75
-|s+0#af5f00255&|l|e@1|p|!| +0#0000000&@6|"+0#0000e05&| |s|l|e@1|p| |f|o|r| |o|n|e| |s|e|c|o|n|d| +0#0000000&@39
-|5+0#e000002&| +0#0000000&|s+0#af5f00255&|l|e@1|p|!| +0#0000000&@4|"+0#0000e05&| |s|l|e@1|p| |f|o|r| |f|i|v|e| |s|e|c|o|n|d|s| +0#0000000&@37
-|s+0#af5f00255&|l|e@1|p|!| +0#0000000&|1+0#e000002&|0@1|m| +0#0000000&@1|"+0#0000e05&| |s|l|e@1|p| |f|o|r| |1|0@1| |m|i|l@1|i|s|e|c|o|n|d|s| +0#0000000&@33
->1+0#e000002&|0@1| +0#0000000&|s+0#af5f00255&|l|e@1|p|!| +0#0000000&|m+0#e000002&| +0#0000000&|"+0#0000e05&| |s|l|e@1|p| |f|o|r| |1|0@1| |m|i|l@1|i|s|e|c|o|n|d|s| +0#0000000&@33
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1@1|,|1| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_substitute_08.dump b/runtime/syntax/testdir/dumps/vim_ex_substitute_08.dump
new file mode 100644
index 0000000..f19c40e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_substitute_08.dump
@@ -0,0 +1,20 @@
+|d+0#af5f00255#ffffff0|e|f| +0#0000000&|T|e|s|t|(+0#e000e06&|)| +0#0000000&@64
+@2|s|t|r|[|s|]| @66
+@2|s|t|r|(+0#e000e06&|s+0#00e0e07&|)+0#e000e06&| +0#0000000&@66
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4@1|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_substitute_99.dump b/runtime/syntax/testdir/dumps/vim_ex_substitute_99.dump
deleted file mode 100644
index 6864a4a..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_substitute_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-|"+0#0000e05&| +0#0000000&|F+0#0000001#ffff4012|I|X|M|E|:+0#e000e06#ffffff0| +0#0000e05&|t|r|a|i|l|i|n|g| |c|o|m@1|e|n|t|,| |n|o| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@34
-|s+0#af5f00255&|"+0#0000000&| |c|o|m@1|e|n|t| @64
-|s+0#af5f00255&||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@61
-@75
-|s+0#af5f00255&| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63
-|s+0#af5f00255&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@60
-@75
-@75
-|"+0#0000e05&| |I|s@1|u|e| |#|1|3|8@1|3| +0#0000000&@60
-@75
-|s|t|r|[|s|]| @68
-|s|t|r|(+0#e000e06&|s+0#00e0e07&|)+0#e000e06&| +0#0000000&@68
-@75
-|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|(+0#e000e06&|)| +0#0000000&@64
-@2|s|t|r|[|s|]| @66
-@2|s|t|r|(+0#e000e06&|s+0#00e0e07&|)+0#e000e06&| +0#0000000&@66
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-> @74
-@57|1|4@1|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump
index 800e4a7..bef158c 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
+@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&@57
-@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
-@6>\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|r| @41
+@6>"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|r| @41
@6|"+0#0000e05&|\| |n|e|x|t|g|r|o|u|p| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=|t+0#0000000&|e|s|t|N|e|x|t|0|,|@|t|e|s|t|C|l|u|s|t|e|r| @34
@6|"+0#0000e05&|\| |t|r|a|n|s|p|a|r|e|n|t| |o|p|t|i|o|n| +0#0000000&@47
@@ -16,5 +17,4 @@
@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
@6|"+0#0000e05&|\| |K|E|Y|W|O|R|D|S| |L|I|S|T| +0#0000000&@52
@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |1| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|1| @58
-@57|1|9|,|7| @10|8|%|
+@57|1|8|,|7| @10|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump
index 54d8734..3ff2aba 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|1| @58
+| +0&#ffffff0@5|"+0#0000e05&|\| |k|e|y|w|o|r|d| |1| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|1| @58
@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |2| +0#0000000&@56
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|2| @58
@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |3| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|3| @58
-> @74
+@6>\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|3| @58
+@75
|s+0#af5f00255&|y|n| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t+0#00e0003&|e|s|t|M|a|t|c|h| +0#0000000&@55
@6|"+0#0000e05&|\| |M|A|T|C|H| |P|A|T@1|E|R|N| +0#0000000&@52
@6|"+0#0000e05&|\| |p|a|t@1|e|r|n| |s|t|a|r|t| +0#0000000&@52
@@ -16,5 +17,4 @@
| +0#e000002&@5|\+0#e000e06&|p+0#e000002&|a|t|3|a| |.|*| |p|a|t|3|b| +0#0000000&@53
| +0#e000002&@5|"+0#0000e05&|\| |p|a|t@1|e|r|n| |e|n|d| +0#0000000&@54
| +0#e000002&@5|\+0#e000e06&|/+0#e000002&| +0#0000000&@66
-@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
-@57|3|7|,|0|-|1| @7|1|9|%|
+@57|3|6|,|7| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump
index f0a2481..59d9562 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
+| +0#e000002#ffffff0@5|\+0#e000e06&|/+0#e000002&| +0#0000000&@66
+@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
@6|"+0#0000e05&|\| |c|o|n|c|e|a|l| |o|p|t|i|o|n| +0#0000000&@51
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
-@6>"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
+@6>\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
+@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&@57
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|r| @41
@@ -16,5 +17,4 @@
@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|e|m|p|t|y| +0#0000000&@57
@6|"+0#0000e05&|\| |s|k|i|p|n|l| |o|p|t|i|o|n| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
-@57|5@1|,|7| @9|3|1|%|
+@57|5|4|,|7| @9|3|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump
index 2298efb..4022b48 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
+| +0&#ffffff0@5|"+0#0000e05&|\| |s|k|i|p|n|l| |o|p|t|i|o|n| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| @28
@6|"+0#0000e05&|\| |f|o|l|d| |o|p|t|i|o|n| +0#0000000&@54
-@6|\+0#e000e06&| +0#0000000&|f+0#e000e06&|o|l|d| +0#0000000&@62
-@6>"+0#0000e05&|\| |d|i|s|p|l|a|y| |o|p|t|i|o|n| +0#0000000&@51
+@6>\+0#e000e06&| +0#0000000&|f+0#e000e06&|o|l|d| +0#0000000&@62
+@6|"+0#0000e05&|\| |d|i|s|p|l|a|y| |o|p|t|i|o|n| +0#0000000&@51
@6|\+0#e000e06&| +0#0000000&|d+0#e000e06&|i|s|p|l|a|y| +0#0000000&@59
@6|"+0#0000e05&|\| |e|x|t|e|n|d| |o|p|t|i|o|n| +0#0000000&@52
@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|t|e|n|d| +0#0000000&@60
@@ -16,5 +17,4 @@
@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
@6|"+0#0000e05&|\| |s|t|a|r|t| |o|p|t|i|o|n| +0#0000000&@53
@6|\+0#e000e06&| +0#0000000&|s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|-|p|a|t@1|e|r|n|"| +0#0000000&@45
-@6|"+0#0000e05&|\| |s|k|i|p| |o|p|t|i|o|n| +0#0000000&@54
-@57|7|3|,|7| @9|4|2|%|
+@57|7|2|,|7| @9|4|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump
index 66a6b73..c4c4994 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |s|k|i|p| |o|p|t|i|o|n| +0#0000000&@54
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|-|p|a|t@1|e|r|n|"| +0#0000000&@45
+@6|"+0#0000e05&|\| |s|k|i|p| |o|p|t|i|o|n| +0#0000000&@54
@6|\+0#e000e06&| +0#0000000&|s+0#00e0003&|k|i|p|=|"+0#e000002&|s|k|i|p|-|p|a|t@1|e|r|n|"| +0#0000000&@47
@6|"+0#0000e05&|\| |e|n|d| |o|p|t|i|o|n| +0#0000000&@55
@6|\+0#e000e06&| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e|n|d|-|p|a|t@1|e|r|n|"| +0#0000000&@49
-@6|"+0#0000e05&|\| |c|o|n|c|e|a|l| |o|p|t|i|o|n| +0#0000000&@51
-@6>\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
+@6>"+0#0000e05&|\| |c|o|n|c|e|a|l| |o|p|t|i|o|n| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
@@ -16,5 +17,4 @@
@6|\+0#e000e06&| +0#0000000&|t+0#e000e06&|r|a|n|s|p|a|r|e|n|t| +0#0000000&@55
@6|"+0#0000e05&|\| |s|k|i|p|w|h|i|t|e| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@57
-@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
-@57|9|1|,|7| @9|5|3|%|
+@57|9|0|,|7| @9|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump
index 12c1fbe..6c5e4ce 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@57
+@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|e|m|p|t|y| +0#0000000&@57
@6|"+0#0000e05&|\| |s|k|i|p|n|l| |o|p|t|i|o|n| +0#0000000&@52
@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
-@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
-@6>\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| @28
+@6>"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| @28
@6|"+0#0000e05&|\| |o|n|e|l|i|n|e| |o|p|t|i|o|n| +0#0000000&@51
@6|\+0#e000e06&| +0#0000000&|o+0#e000e06&|n|e|l|i|n|e| +0#0000000&@59
@6|"+0#0000e05&|\| |f|o|l|d| |o|p|t|i|o|n| +0#0000000&@54
@@ -16,5 +17,4 @@
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l|e|n|d|s| +0#0000000&@55
@6|"+0#0000e05&|\| |e|x|c|l|u|d|e|n|l| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|c|l|u|d|e|n|l| +0#0000000&@57
-@6|"+0#0000e05&|\| |k|e@1|p|e|n|d| |o|p|t|i|o|n| +0#0000000&@51
-@57|1|0|9|,|7| @8|6|5|%|
+@57|1|0|8|,|7| @8|6|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump
index d7d1055..2f66e98 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |k|e@1|p|e|n|d| |o|p|t|i|o|n| +0#0000000&@51
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|c|l|u|d|e|n|l| +0#0000000&@57
+@6|"+0#0000e05&|\| |k|e@1|p|e|n|d| |o|p|t|i|o|n| +0#0000000&@51
@6|\+0#e000e06&| +0#0000000&|k+0#e000e06&|e@1|p|e|n|d| +0#0000000&@59
@75
|s+0#af5f00255&|y|n| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t+0#00e0003&|e|s|t|C|l|u|s|t|e|r| +0#0000000&@51
-@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
-@6>"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
+@6>"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
+@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2|,|t|e|s|t|C|o|n|t|a|i|n|e|d|3| @13
@75
|s+0#af5f00255&|y|n| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t+0#00e0003&|e|s|t|C|l|u|s|t|e|r| +0#0000000&@51
@@ -16,5 +17,4 @@
@75
|"+0#0000e05&| |m|u|l|t|i|l|i|n|e| |g|r|o|u|p| |l|i|s|t| +0#0000000&@52
@75
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|0| +0#0000000&|k|e|y|w|o|r|d| @45
-@57|1|2|7|,|7| @8|7|6|%|
+@57|1|2|6|,|7| @8|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump
index 4042d33..db2d97b 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump
@@ -1,9 +1,10 @@
-|s+0#af5f00255#ffffff0|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|0| +0#0000000&|k|e|y|w|o|r|d| @45
+| +0&#ffffff0@74
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|0| +0#0000000&|k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|1| +0#0000000&|k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|2| +0#0000000&|k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|3| +0#0000000&|k|e|y|w|o|r|d| @45
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|4| +0#0000000&|k|e|y|w|o|r|d| @45
->s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|5| +0#0000000&|k|e|y|w|o|r|d| @45
+>s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|4| +0#0000000&|k|e|y|w|o|r|d| @45
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|5| +0#0000000&|k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|6| +0#0000000&|k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|7| +0#0000000&|k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t+0#00e0003&|e|s|t|N|e|x|t|8| +0#0000000&|k|e|y|w|o|r|d| @45
@@ -16,5 +17,4 @@
@6|\+0#e000e06&| +0#0000000&|t|e|s|t|N|e|x|t|0| |,| |t|e|s|t|N|e|x|t|1| |,| @43
@6|"+0#0000e05&|\| |a| |c|o|m@1|e|n|t| +0#0000000&@56
@6|\+0#e000e06&| +0#0000000&|t|e|s|t|N|e|x|t|[|2|-|8|]|.|*| |,| @49
-@6|"+0#0000e05&|\| |a| |c|o|m@1|e|n|t| +0#0000000&@56
-@57|1|4|5|,|1| @8|8|7|%|
+@57|1|4@1|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
index 5240e4e..6295921 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |a| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|t|e|s|t|N|e|x|t|[|2|-|8|]|.|*| |,| @49
+@6|"+0#0000e05&|\| |a| |c|o|m@1|e|n|t| +0#0000000&@56
@6|\+0#e000e06&| +0#0000000&|t|e|s|t|N|e|x|t|9| |,| |@|t|e|s|t|C|l|u|s|t|e|r| |s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@32
@6|"+0#0000e05&|\| |K|E|Y|W|O|R|D|S| |L|I|S|T| +0#0000000&@52
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|4| @58
-@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|5| @58
-@6>\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|6| @58
+@6>\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|5| @58
+@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|6| @58
@75
@75
|"+0#0000e05&| |l|e|a|k|i|n|g| |c|o|n|t|a|i|n|e|d| |g|r|o|u|p|s| +0#0000000&@48
@@ -16,5 +17,4 @@
@2|f+0#af5f00255&|o|r| +0#0000000&|c+0#00e0e07&|l|u|s|t|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[|'+0#e000002&|m|a|r|k|d|o|w|n|H|i|g|h|l|i|g|h|t|_|z|s|h|'|,+0#0000000&| |'+0#e000002&|z|s|h|'|]+0#0000000&| @25
@4|"+0#0000e05&| |.@2| +0#0000000&@65
@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
-@2|"+0#0000e05&| |.@2| +0#0000000&@67
-@57|1|6|3|,|7| @8|9@1|%|
+@57|1|6|2|,|7| @8|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_10.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_10.dump
new file mode 100644
index 0000000..c33c082
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_10.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
+@2|"+0#0000e05&| |.@2| +0#0000000&@67
+>e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|7@1|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_99.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_99.dump
deleted file mode 100644
index c06ac66..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|t|e|s|t|N|e|x|t|9| |,| |@|t|e|s|t|C|l|u|s|t|e|r| |s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@32
-@6|"+0#0000e05&|\| |K|E|Y|W|O|R|D|S| |L|I|S|T| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|4| @58
-@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|5| @58
-@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|6| @58
-@75
-@75
-|"+0#0000e05&| |l|e|a|k|i|n|g| |c|o|n|t|a|i|n|e|d| |g|r|o|u|p|s| +0#0000000&@48
-@75
-|"+0#0000e05&| +0#0000000&|E+0#e000e06&|x|a|m|p|l|e|:| +0#0000e05&|r|u|n|t|i|m|e|/|s|y|n|t|a|x|/|z|s|h|.|v|i|m| +0#0000000&@41
-|"+0#0000e05&| @2|"+0#e000002&|c|l|u|s|t|e|r|"| +0#0000e05&|s|h|o|u|l|d| |n|o|t| |b|e| |h|i|g|h|l|i|g|h|t|e|d| |o|u|t|s|i|d|e| |o|f| |:|s|y|n|t|a|x| |c|o|m@1|a|n|d|s| +0#0000000&@7
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|s+0#e000e06&|:|C+0#0000000&|o|n|t|a|i|n|e|d|G|r|o|u|p|(+0#e000e06&|)| +0#0000000&@46
-@2|"+0#0000e05&| |.@2| +0#0000000&@67
-@2|f+0#af5f00255&|o|r| +0#0000000&|c+0#00e0e07&|l|u|s|t|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[|'+0#e000002&|m|a|r|k|d|o|w|n|H|i|g|h|l|i|g|h|t|_|z|s|h|'|,+0#0000000&| |'+0#e000002&|z|s|h|'|]+0#0000000&| @25
-@4|"+0#0000e05&| |.@2| +0#0000000&@65
-@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
-@2|"+0#0000e05&| |.@2| +0#0000000&@67
->e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@57|1|7@1|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_throw_99.dump b/runtime/syntax/testdir/dumps/vim_ex_throw_99.dump
deleted file mode 100644
index b53fff4..0000000
--- a/runtime/syntax/testdir/dumps/vim_ex_throw_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|"+0#0000e05#ffffff0| |V|i|m| |:|t|h|r|o|w| |c|o|m@1|a|n|d| +0#0000000&@54
-@75
-|"+0#0000e05&| |:|h|e|l|p| |:|t|h|r|o|w| +0#0000000&@60
-@75
->t+0#af5f00255&|r|y| +0#0000000&||| |t+0#af5f00255&|h|r|o|w| +0#0000000&|"+0#e000002&|o@1|p|s|"| +0#0000000&||| |c+0#af5f00255&|a|t|c|h| +0#0000000&|/+0#e000e06&|^+0#0000000&|o@1|/+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|c|a|u|g|h|t|"| +0#0000000&||| |e+0#af5f00255&|n|d|t|r|y| +0#0000000&@17
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|5|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_01.dump b/runtime/syntax/testdir/dumps/vim_expr_01.dump
index 383c730..f1a7330 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_01.dump
@@ -1,10 +1,13 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|$+0#e000002&|'|\|3|1|6| |\|3|1| |\|3| |\|x|1|f| |\|x|f| |\|X|1|F| |\|X|F| |\|u|0|2|a|4| |\|U|0@4|2|a|4| |\|b| |\|e| |\|f| |\|n| |\|r| |\|t| |\@1
+| +0&#ffffff0@74
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|\+0#e000e06&|3|1|6| +0#e000002&|-| |\+0#e000e06&|3|1| +0#e000002&|-| |\+0#e000e06&|3| +0#e000002&|-| |\+0#e000e06&|x|1|f| +0#e000002&|-| |\+0#e000e06&|x|f| +0#e000002&|-| |\+0#e000e06&|X|1|F| +0#e000002&|-| |\+0#e000e06&|X|F| +0#e000002&|-| |\+0#e000e06&|u|0|2|a|4| +0#e000002&|-| |\+0#e000e06&|U|0@4|2|a|4| +0#e000002&|-| |\+0#e000e06&|b
+| +0#e000002&|-| |\+0#e000e06&|e| +0#e000002&|-| |\+0#e000e06&|f| +0#e000002&|-| |\+0#e000e06&|n| +0#e000002&|-| |\+0#e000e06&|r| +0#e000002&|-| |\+0#e000e06&|t| +0#e000002&|-| |\+0#e000e06&@1| +0#e000002&|-| |\+0#e000e06&|"| +0#e000002&|-| |\+0#e000e06&|<|C|-|W|>|"+0#e000002&| +0#0000000&@29
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|\|3|1|6| |\|3|1| |\|3| |\|x|1|f| |\|x|f| |\|X|1|F| |\|X|F| |\|u|0|2|a|4| |\|U|0@4|2|a|4| |\|b| |\|e| |\|f| |\|n| |\|r| |\|t| |\@1
| |\|"| |\|<|C|-|W|>|'| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|\+0#e000e06&|3|1|6|0+0#e000002&| |-| |\+0#e000e06&|x|1|f|0+0#e000002&| |-| |\+0#e000e06&|X|1|F|0+0#e000002&| |-| |\+0#e000e06&|u|0|2|a|4|0+0#e000002&| |-| |\+0#e000e06&|U|0@4|2|a|4|0+0#e000002&|"| +0#0000000&@21
+>e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|\+0#e000e06&|3|1|6|0+0#e000002&| |-| |\+0#e000e06&|x|1|f|0+0#e000002&| |-| |\+0#e000e06&|X|1|F|0+0#e000002&| |-| |\+0#e000e06&|u|0|2|a|4|0+0#e000002&| |-| |\+0#e000e06&|U|0@4|2|a|4|0+0#e000002&|"| +0#0000000&@21
@75
|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|C|-|a|>|"+0#e000002&| +0#0000000&@61
|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|*|C|-|a|>|"+0#e000002&| +0#0000000&@60
->e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|C|-|>@1|"+0#e000002&| +0#0000000&@61
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|C|-|>@1|"+0#e000002&| +0#0000000&@61
|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|*|C|-|>@1|"+0#e000002&| +0#0000000&@60
|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|C|-|>@1|>+0#e000002&|"| +0#0000000&@60
|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|*|C|-|>@1|>+0#e000002&|"| +0#0000000&@59
@@ -14,7 +17,4 @@
|e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|D|o|n|'@1|t| |h|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:| |{@1| |{|1| |+| |2|}| |}@1|'| +0#0000000&@22
|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|D|o|n|'|t| |h|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:| |{@1| |{|1| |+| |2|}| |}@1|"| +0#0000000&@23
|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|H|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:|\|t|{+0#e000e06&@1| +0#e000002&|{+0#e000e06&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|{|'+0#e000002&|f|o@1|'|:+0#0000000&| |'+0#e000002&|b|a|r|'|}+0#e000e06&|)| +0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@8
-|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|H|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:|\|t|{+0#e000e06&@1| +0#e000002&|{+0#e000e06&| +0#0000000&|$+0#e000002&|'|n|e|s|t|e|d|:| |{+0#e000e06&@1| +0#e000002&|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|2+0#e000002&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@6
-|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|H|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:|\+0#e000e06&|t|{@1| +0#e000002&|{+0#e000e06&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|{|"+0#e000002&|f|o@1|"|:+0#0000000&| |"+0#e000002&|b|a|r|"|}+0#e000e06&|)| +0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|"+0#e000002&| +0#0000000&@8
-|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|H|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:|\+0#e000e06&|t|{@1| +0#e000002&|{+0#e000e06&| +0#0000000&|$+0#e000002&|"|n|e|s|t|e|d|:| |{+0#e000e06&@1| +0#e000002&|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|2+0#e000002&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|"+0#e000002&| +0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|"+0#e000002&| +0#0000000&@6
-@57|1|9|,|1| @9|2|4|%|
+@57|1|5|,|1| @9|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_02.dump b/runtime/syntax/testdir/dumps/vim_expr_02.dump
index 97a621d..516a691 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_02.dump
@@ -1,9 +1,13 @@
-| +0&#ffffff0@74
-|"+0#0000e05&| |N|u|m|b|e|r| +0#0000000&@66
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|$+0#e000002&|'|H|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:|\|t|{+0#e000e06&@1| +0#e000002&|{+0#e000e06&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|{|'+0#e000002&|f|o@1|'|:+0#0000000&| |'+0#e000002&|b|a|r|'|}+0#e000e06&|)| +0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@8
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|H|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:|\|t|{+0#e000e06&@1| +0#e000002&|{+0#e000e06&| +0#0000000&|$+0#e000002&|'|n|e|s|t|e|d|:| |{+0#e000e06&@1| +0#e000002&|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|2+0#e000002&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@6
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|H|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:|\+0#e000e06&|t|{@1| +0#e000002&|{+0#e000e06&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|{|"+0#e000002&|f|o@1|"|:+0#0000000&| |"+0#e000002&|b|a|r|"|}+0#e000e06&|)| +0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|"+0#e000002&| +0#0000000&@8
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|H|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:|\+0#e000e06&|t|{@1| +0#e000002&|{+0#e000e06&| +0#0000000&|$+0#e000002&|"|n|e|s|t|e|d|:| |{+0#e000e06&@1| +0#e000002&|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|2+0#e000002&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|"+0#e000002&| +0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|"+0#e000002&| +0#0000000&@6
+@75
+>"+0#0000e05&| |N|u|m|b|e|r| +0#0000000&@66
@75
|"+0#0000e05&| |H|e|x|a|d|e|c|i|m|a|l| +0#0000000&@61
|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|x|F@1| +0#0000000&@64
->e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|X|F@1| +0#0000000&@64
+|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|X|F@1| +0#0000000&@64
|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|x|F@1| +0#0000000&@64
|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|X|F@1| +0#0000000&@64
@75
@@ -13,8 +17,4 @@
@75
|"+0#0000e05&| |O|c|t|a|l| +0#0000000&@67
|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|3|7@1| +0#0000000&@64
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|o|3|7@1| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|O|3|7@1| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|3|7@1| +0#0000000&@64
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|o|3|7@1| +0#0000000&@63
-@57|3|7|,|1| @9|5|8|%|
+@57|3@1|,|1| @9|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_03.dump b/runtime/syntax/testdir/dumps/vim_expr_03.dump
index 41f062f..5300116 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_03.dump
@@ -1,9 +1,13 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|o|3|7@1| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|O|3|7@1| +0#0000000&@63
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&@1|0+0#e000002&|3|7@1| +0#0000000&@64
+|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|o|3|7@1| +0#0000000&@63
+|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|O|3|7@1| +0#0000000&@63
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|3|7@1| +0#0000000&@64
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|o|3|7@1| +0#0000000&@63
+>e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|O|3|7@1| +0#0000000&@63
@75
|"+0#0000e05&| |B|i|n|a|r|y| +0#0000000&@66
|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|b|1@7| +0#0000000&@58
->e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|B|1@7| +0#0000000&@58
+|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|B|1@7| +0#0000000&@58
|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|b|1@7| +0#0000000&@58
|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|B|1@7| +0#0000000&@58
@75
@@ -13,8 +17,4 @@
|e+0#af5f00255&|c|h|o| +0#0000000&|5+0#e000002&@1|.|0| +0#0000000&@65
|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|.|1|2|3| +0#0000000&@63
|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|2|3|4|e|0|3| +0#0000000&@61
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|0|E|-|6| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|3+0#e000002&|.|1|4|1|6|e|+|8@1| +0#0000000&@58
-@75
-|"+0#0000e05&| |B|l|o|b| +0#0000000&@68
-@57|5@1|,|1| @9|9|2|%|
+@57|5|1|,|1| @9|8|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_04.dump b/runtime/syntax/testdir/dumps/vim_expr_04.dump
new file mode 100644
index 0000000..4cb0891
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_expr_04.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|1+0#e000002&|.|2|3|4|e|0|3| +0#0000000&@61
+|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|0|E|-|6| +0#0000000&@63
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|3+0#e000002&|.|1|4|1|6|e|+|8@1| +0#0000000&@58
+@75
+|"+0#0000e05&| |B|l|o|b| +0#0000000&@68
+>e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z| +0#0000000&@67
+|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|E|D|0|1|5|D|A|F| +0#0000000&@55
+|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|.|E|D|0|1|.|5|D|A|F| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|.|0@1|.|E|D|.|0|1|.|5|D|.|A|F| +0#0000000&@50
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|6|9|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_99.dump b/runtime/syntax/testdir/dumps/vim_expr_99.dump
deleted file mode 100644
index e9ba266..0000000
--- a/runtime/syntax/testdir/dumps/vim_expr_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&@1|0+0#e000002&|b|1@7| +0#0000000&@58
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|B|1@7| +0#0000000&@58
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|b|1@7| +0#0000000&@58
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|B|1@7| +0#0000000&@58
-@75
-|"+0#0000e05&| |F|l|o|a|t| +0#0000000&@67
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|2|3|.|4|5|6| +0#0000000&@62
-|e+0#af5f00255&|c|h|o| +0#0000000&|++0#af5f00255&|0+0#e000002&|.|0@2|1| +0#0000000&@62
-|e+0#af5f00255&|c|h|o| +0#0000000&|5+0#e000002&@1|.|0| +0#0000000&@65
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|.|1|2|3| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|2|3|4|e|0|3| +0#0000000&@61
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|0|E|-|6| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|3+0#e000002&|.|1|4|1|6|e|+|8@1| +0#0000000&@58
-@75
-|"+0#0000e05&| |B|l|o|b| +0#0000000&@68
-|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z| +0#0000000&@67
-|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|E|D|0|1|5|D|A|F| +0#0000000&@55
-|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|.|E|D|0|1|.|5|D|A|F| +0#0000000&@53
->e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|.|0@1|.|E|D|.|0|1|.|5|D|.|A|F| +0#0000000&@50
-@57|7|2|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_09.dump b/runtime/syntax/testdir/dumps/vim_key_notation_09.dump
new file mode 100644
index 0000000..d7fc77d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_09.dump
@@ -0,0 +1,20 @@
+|<+0#e000e06#ffffff0|s|f|i|l|e|>| +0#0000000&@67
+|<+0#e000e06&|s|t|a|c|k|>| +0#0000000&@67
+|<+0#e000e06&|s|c|r|i|p|t|>| +0#0000000&@66
+|<+0#e000e06&|s|l|n|u|m|>| +0#0000000&@67
+|<+0#e000e06&|s|f|l|n|u|m|>| +0#0000000&@66
+><+0#e000e06&|c|l|i|e|n|t|>| +0#0000000&@66
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|6|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_99.dump b/runtime/syntax/testdir/dumps/vim_key_notation_99.dump
deleted file mode 100644
index 67dac5f..0000000
--- a/runtime/syntax/testdir/dumps/vim_key_notation_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|<+0#e000e06#ffffff0|I|g|n|o|r|e|>| +0#0000000&@66
-|<+0#e000e06&|C|m|d|>| +0#0000000&@69
-|<+0#e000e06&|S|c|r|i|p|t|C|m|d|>| +0#0000000&@63
-|<+0#e000e06&|F|o|c|u|s|G|a|i|n|e|d|>| +0#0000000&@61
-|<+0#e000e06&|F|o|c|u|s|L|o|s|t|>| +0#0000000&@63
-@75
-|<+0#e000e06&|c|w|o|r|d|>| +0#0000000&@67
-|<+0#e000e06&|c|W|O|R|D|>| +0#0000000&@67
-|<+0#e000e06&|c|e|x|p|r|>| +0#0000000&@67
-|<+0#e000e06&|c|f|i|l|e|>| +0#0000000&@67
-|<+0#e000e06&|a|f|i|l|e|>| +0#0000000&@67
-|<+0#e000e06&|a|b|u|f|>| +0#0000000&@68
-|<+0#e000e06&|a|m|a|t|c|h|>| +0#0000000&@66
-|<+0#e000e06&|s|f|i|l|e|>| +0#0000000&@67
-|<+0#e000e06&|s|t|a|c|k|>| +0#0000000&@67
-|<+0#e000e06&|s|c|r|i|p|t|>| +0#0000000&@66
-|<+0#e000e06&|s|l|n|u|m|>| +0#0000000&@67
-|<+0#e000e06&|s|f|l|n|u|m|>| +0#0000000&@66
-><+0#e000e06&|c|l|i|e|n|t|>| +0#0000000&@66
-@57|1|6|3|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_keymap_00.dump b/runtime/syntax/testdir/dumps/vim_keymap_00.dump
deleted file mode 100644
index 2c43e3d..0000000
--- a/runtime/syntax/testdir/dumps/vim_keymap_00.dump
+++ /dev/null
@@ -1,20 +0,0 @@
->"+0#0000e05#ffffff0| |V|i|m| |K|e|y|m|a|p| |f|i|l|e| |f|o|r| |s|y|n|t|a|x| |t|e|s|t|i|n|g| @38
-@75
-@75
-@46| +0#0000000&@28
-@75
-@75
-|"+0#0000e05&| +0#0000000&|M+0#e000e06&|a|i|n|t|a|i|n|e|r|:| +0#0000e05&@2|D|o|u|g| |K|e|a|r|n|s| |<|d|o|u|g|k|e|a|r|n|s|@|g|m|a|i|l|.|c|o|m|>| @24
-@60| +0#0000000&@14
-|"+0#0000e05&| +0#0000000&|L+0#e000e06&|a|s|t| |C|h|a|n|g|e|d|:| +0#0000e05&|2|0|2|3| |N|o|v| |2|1| @47
-@75
-@75
-@46| +0#0000000&@28
-@75
-@75
-@75
-@75
-|s+0#af5f00255&|c|r|i|p|t|e|n|c|o|d|i|n|g| +0#0000000&|u|t|f|-+0#af5f00255&|8+0#e000002&| +0#0000000&@54
-@75
-|@+0#4040ff13&@2| @71
-| +0#0000000&@56|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_keymap_01.dump b/runtime/syntax/testdir/dumps/vim_keymap_01.dump
deleted file mode 100644
index a07bfc4..0000000
--- a/runtime/syntax/testdir/dumps/vim_keymap_01.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@74
-@75
-|a| |A| @3|B+0#0000e05&|a|s|i|c| |m|a|p@1|i|n|g| @38| +0#0000000&@15
-|'|a| |á| @2|M+0#0000e05&|o|r|e| |t|h|a|n| |o|n|e| |c|h|a|r| |i|n| |f|i|r|s|t| |c|o|l|u|m|n| @10| +0#0000000&@22
-@75
->"+0#0000e05&| |S|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| @56
-@60| +0#0000000&@14
-|<+0#e000e06&|c|h|a|r|-|6|2|>| +0#0000000&@5|B| @14|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |-| |d|e|c|i|m|a|l| @2
-@75
-@75
-@46| +0#0000000&@28
-|c| @13|<+0#e000e06&|c|h|a|r|-|0|1|0|3|>| +0#0000000&@4|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |R|H|S| |-| |o|c|t|a|l| @4
-@60| +0#0000000&@14
-|<+0#e000e06&|c|h|a|r|-|0|x|0@1|6|4|>| +0#0000000&@1|<+0#e000e06&|c|h|a|r|-|0|x|0@1|4@1|>| +0#0000000&@2|S+0#0000e05&|p|e|c|i|a|l| |n|o|t|a|t|i|o|n| |a|l@1|o|w|e|d| |i|n| |L|H|S| |a|n|d| |R|H|S| |-| |h|e
-|x|a|d|e|c|i|m|a|l| @50| +0#0000000&@14
-@75
-|"+0#0000e05&| |V|i|m|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| |c|h|a|r|a|c|t|e|r|s| @30| +0#0000000&@12
-|#| |<+0#e000e06&|c|h|a|r|-|0|x|0@1|a|3|>| +0#0000000&@15|L+0#0000e05&|i|n|e| |s|h|o|u|l|d| |n|o|t| |m|a|t|c|h| |a|s| |a| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e
-|n|t| +0#0000000&@72
-@57|1|9|,|1| @9|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_keymap_99.vim b/runtime/syntax/testdir/dumps/vim_keymap_04.vim
index 546837c..546837c 100644
--- a/runtime/syntax/testdir/dumps/vim9_keymap_99.vim
+++ b/runtime/syntax/testdir/dumps/vim_keymap_04.vim
diff --git a/runtime/syntax/testdir/dumps/vim_line_continuation_99.dump b/runtime/syntax/testdir/dumps/vim_line_continuation_99.dump
deleted file mode 100644
index 3e2c83d..0000000
--- a/runtime/syntax/testdir/dumps/vim_line_continuation_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@5|\+0#e000e06&|)| +0#0000000&@66
-@75
-|l+0#af5f00255&|e|t| +0#0000000&|d+0#00e0e07&|i|c|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000e06&|{| +0#0000000&@61
-@6|"+0#0000e05&|\| |p|a|i|r| |1| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|a+0#00e0e07&|:+0#0000000&| |1+0#e000002&|,+0#0000000&| @61
-@6|"+0#0000e05&|\| |p|a|i|r| |2| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|:+0#0000000&| |2+0#e000002&|,+0#0000000&| @61
-@6|"+0#0000e05&|\| |p|a|i|r| |3| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|c+0#00e0e07&|:+0#0000000&| |3+0#e000002&| +0#0000000&@62
-@6|\+0#e000e06&|}| +0#0000000&@66
-@75
-|l+0#af5f00255&|e|t| +0#0000000&|a+0#00e0e07&|r@1|a|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|[| @61
-@6|"+0#0000e05&|\| |e|l|e|m|e|n|t| |1| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|1+0#e000002&|,+0#0000000&| @64
-@6|"+0#0000e05&|\| |e|l|e|m|e|n|t| |2| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|2+0#e000002&|,+0#0000000&| @64
-@6|"+0#0000e05&|\| |e|l|e|m|e|n|t| |3| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|3+0#e000002&| +0#0000000&@65
-@6>\+0#e000e06&|]+0#0000000&| @66
-@57|4|9|,|7| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_new_99.dump b/runtime/syntax/testdir/dumps/vim_new_99.dump
deleted file mode 100644
index a9fe50f..0000000
--- a/runtime/syntax/testdir/dumps/vim_new_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
-@75
-|#+0#0000e05&| |V|i|m| |:|n|e|w| |c|o|m@1|a|n|d| |a|n|d| |c|l|a|s@1| |c|o|n|s|t|r|u|c|t|o|r|s|.| +0#0000000&@32
-|c+0#af5f00255&|l|a|s@1| +0#0000000&|T|e|s|t| @64
-@8|d+0#af5f00255&|e|f| +0#0000000&|n|e|w|(+0#e000e06&|)| +0#0000000&@57
-@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@8|d+0#af5f00255&|e|f| +0#0000000&|n|e|w|O|t|h|e|r|(+0#e000e06&|)| +0#0000000&@52
-@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@8|d+0#af5f00255&|e|f| +0#0000000&|n|e|w|y|e|t|a|n|o|t|h|e|r|(+0#e000e06&|)| +0#0000000&@47
-@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
-@75
-|T|e|s|t|.+0#af5f00255&|n+0#0000000&|e|w|(+0#e000e06&|)| +0#0000000&@64
-|T|e|s|t|.+0#af5f00255&|n+0#0000000&|e|w|O|t|h|e|r|(+0#e000e06&|)| +0#0000000&@59
-|T|e|s|t|.+0#af5f00255&|n+0#0000000&|e|w|y|e|t|a|n|o|t|h|e|r|(+0#e000e06&|)| +0#0000000&@54
-|n+0#af5f00255&|e|w| +0#0000000&@71
->q+0#af5f00255&|u|i|t| +0#0000000&@70
-|~+0#4040ff13&| @73
-|~| @73
-| +0#0000000&@56|1|7|,|1| @9|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_object_methods_00.dump b/runtime/syntax/testdir/dumps/vim_object_methods_00.dump
index 8089fc1..00c6cb4 100644
--- a/runtime/syntax/testdir/dumps/vim_object_methods_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_object_methods_00.dump
@@ -4,8 +4,8 @@
@75
|#+0#0000e05&| |V|i|m| |||b|u|i|l|t|i|n|-|o|b|j|e|c|t|-|m|e|t|h|o|d|s||| |a|n|d| |n|a|m|e|s|a|k|e| |b|u|i|l|t|i|n| |f|u|n|c|t|i|o|n|s|.| +0#0000000&@12
|c+0#af5f00255&|l|a|s@1| +0#0000000&|P|a|i|r|C|l|a|s@1|T|e|s|t| @55
-@8|p+0#af5f00255&|u|b|l|i|c| +0#0000000&|c+0#af5f00255&|o|n|s|t| +0#0000000&|a+0#00e0e07&|:+0#0000000&| |a|n|y| @47
-@8|p+0#af5f00255&|u|b|l|i|c| +0#0000000&|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|:+0#0000000&| |a|n|y| @47
+@8|p+0#af5f00255&|u|b|l|i|c| +0#0000000&|c+0#af5f00255&|o|n|s|t| +0#0000000&|a+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y| +0#0000000&@47
+@8|p+0#af5f00255&|u|b|l|i|c| +0#0000000&|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y| +0#0000000&@47
@75
@8|d+0#af5f00255&|e|f| +0#0000000&|n|e|w|(+0#e000e06&|a+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|,+0#0000000&| |b+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&@43
@16|t+0#af5f00255&|h|i|s|.|a| +0#0000000&|=+0#af5f00255&| +0#0000000&|a+0#af5f00255&| +0#0000000&@48
diff --git a/runtime/syntax/testdir/dumps/vim_object_methods_02.dump b/runtime/syntax/testdir/dumps/vim_object_methods_02.dump
index 7fd4942..d1c24f1 100644
--- a/runtime/syntax/testdir/dumps/vim_object_methods_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_object_methods_02.dump
@@ -9,9 +9,9 @@
@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
|e+0#af5f00255&|n|d|e|n|u|m| +0#0000000&@67
@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|1|:+0#0000000&| |b|o@1|l| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@27
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|1|:+0#0000000&| |n+0#af5f00255&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@27
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|s+0#00e0e07&|1|:+0#0000000&| |s|t|r|i|n|g| |=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@24
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|1|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@27
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|1|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@27
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|s+0#00e0e07&|1|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@24
|e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|1| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|e+0#0000001#ffff4012|m|p|t|y|(+0#e000e06#ffffff0|)| +0#0000000&@32
|e+0#af5f00255&|c|h|o| +0#0000000&|n+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|0+0#e000002&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|l+0#0000001#ffff4012|e|n|(+0#e000e06#ffffff0|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|0+0#e000002&| +0#0000000&@24
|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|s+0#0000001#ffff4012|t|r|i|n|g|(+0#e000e06#ffffff0|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&@3
diff --git a/runtime/syntax/testdir/dumps/vim_object_methods_03.dump b/runtime/syntax/testdir/dumps/vim_object_methods_03.dump
new file mode 100644
index 0000000..538ba4f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_object_methods_03.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|o|n|s|t| +0#0000000&|p+0#00e0e07&|a|i|r|:+0#0000000&| |P|a|i|r|C|l|a|s@1|T|e|s|t| |=+0#af5f00255&| +0#0000000&|P|a|i|r|C|l|a|s@1|T|e|s|t|.|n|e|w|(+0#e000e06&|0+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#e000e06&| +0#0000000&@23
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|2|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&|=+0#af5f00255&| +0#0000000&|!+0#af5f00255&|p+0#0000000&|a|i|r|.|e+0#0000001#ffff4012|m|p|t|y|(+0#e000e06#ffffff0|)| +0#0000000&@44
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|2|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|p|a|i|r|.|l+0#0000001#ffff4012|e|n|(+0#e000e06#ffffff0|)| +0#0000000&@45
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|s+0#00e0e07&|2|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|p|a|i|r|.|s+0#0000001#ffff4012|t|r|i|n|g|(+0#e000e06#ffffff0|)| +0#0000000&@42
+|e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|2| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&@51
+>e+0#af5f00255&|c|h|o| +0#0000000&|n+0#00e0e07&|2| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|2+0#e000002&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|2+0#e000002&| +0#0000000&@44
+|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|2| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|(|0|,| |1|)|'| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|(|0|,| |1|)|'| +0#0000000&@27
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_object_methods_99.dump b/runtime/syntax/testdir/dumps/vim_object_methods_99.dump
deleted file mode 100644
index b69bf91..0000000
--- a/runtime/syntax/testdir/dumps/vim_object_methods_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@7|d+0#af5f00255&|e|f| +0#0000000&|s+0#0000001#ffff4012|t|r|i|n|g|(+0#e000e06#ffffff0|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@46
-@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0e07&|h|i|s|.+0#af5f00255&|n+0#0000000&|a|m|e| @42
-@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-|e+0#af5f00255&|n|d|e|n|u|m| +0#0000000&@67
-@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|1|:+0#0000000&| |b|o@1|l| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@27
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|1|:+0#0000000&| |n+0#af5f00255&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@27
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|s+0#00e0e07&|1|:+0#0000000&| |s|t|r|i|n|g| |=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@24
-|e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|1| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|e+0#0000001#ffff4012|m|p|t|y|(+0#e000e06#ffffff0|)| +0#0000000&@32
-|e+0#af5f00255&|c|h|o| +0#0000000&|n+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|0+0#e000002&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|l+0#0000001#ffff4012|e|n|(+0#e000e06#ffffff0|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|0+0#e000002&| +0#0000000&@24
-|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|s+0#0000001#ffff4012|t|r|i|n|g|(+0#e000e06#ffffff0|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&@3
-@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|p+0#00e0e07&|a|i|r|:+0#0000000&| |P|a|i|r|C|l|a|s@1|T|e|s|t| |=+0#af5f00255&| +0#0000000&|P|a|i|r|C|l|a|s@1|T|e|s|t|.|n|e|w|(+0#e000e06&|0+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#e000e06&| +0#0000000&@23
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|2|:+0#0000000&| |b|o@1|l| |=+0#af5f00255&| +0#0000000&|!+0#af5f00255&|p+0#0000000&|a|i|r|.|e+0#0000001#ffff4012|m|p|t|y|(+0#e000e06#ffffff0|)| +0#0000000&@44
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|2|:+0#0000000&| |n+0#af5f00255&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|p|a|i|r|.|l+0#0000001#ffff4012|e|n|(+0#e000e06#ffffff0|)| +0#0000000&@45
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|s+0#00e0e07&|2|:+0#0000000&| |s|t|r|i|n|g| |=+0#af5f00255&| +0#0000000&|p|a|i|r|.|s+0#0000001#ffff4012|t|r|i|n|g|(+0#e000e06#ffffff0|)| +0#0000000&@42
-|e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|2| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&@51
-|e+0#af5f00255&|c|h|o| +0#0000000&|n+0#00e0e07&|2| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|2+0#e000002&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|2+0#e000002&| +0#0000000&@44
->e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|2| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|(|0|,| |1|)|'| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|(|0|,| |1|)|'| +0#0000000&@27
-@57|5|6|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_shebang_99.dump b/runtime/syntax/testdir/dumps/vim_shebang_99.dump
deleted file mode 100644
index 0102412..0000000
--- a/runtime/syntax/testdir/dumps/vim_shebang_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|#+0#e000e06#ffffff0|!|/|u|s|r|/|b|i|n|/|e|n|v| |v|i|m| |-|S| +0#0000000&@53
-@75
-|"+0#0000e05&| |V|i|m| |s|h|e|b|a|n|g| |l|i|n|e| +0#0000000&@56
-@75
->#+0#ffffff16#ff404010|!|/|u|s|r|/|b|i|n|/|e|n|v| |v|i|m| |-|S| +0#0000000#ffffff0@53
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|5|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_99.dump b/runtime/syntax/testdir/dumps/vim_variables_99.dump
deleted file mode 100644
index 003603e..0000000
--- a/runtime/syntax/testdir/dumps/vim_variables_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|.+0#e000002#ffffff0@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@47
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@47
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| @61
-@75
-|"+0#0000e05&| |:|f|o|r| +0#0000000&@68
-@75
-|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e|x|p|r| @59
-|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
-@75
-|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e|x|p|r| @52
->e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
-@57|1|3|8|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_00.dump b/runtime/syntax/testdir/dumps/yaml.yaml_00.dump
deleted file mode 100644
index 3b8fd81..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_00.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-><+0#0000e05#ffffff0|!|D|O|C|T|Y|P|E| |h|t|m|l|>| +0#0000000&@59
-|<+0#00e0e07&|h+0#af5f00255&|t|m|l|>+0#00e0e07&| +0#0000000&@68
-|<+0#00e0e07&|h+0#af5f00255&|e|a|d|>+0#00e0e07&| +0#0000000&@68
-|<+0#00e0e07&|m+0#af5f00255&|e|t|a| +0#00e0e07&|c+0#00e0003&|h|a|r|s|e|t|=+0#00e0e07&|"+0#e000002&|U|T|F|-|8|"|>+0#00e0e07&| +0#0000000&@52
-|<+0#00e0e07&|t+0#af5f00255&|i|t|l|e|>+0#00e0e07&|~+0#e000e06&|/|D|r|o|p|b|o|x|/|c|p@1|/|v|i|m|/|r|u|n|t|i|m|e|/|s|y|n|t|a|x|/|t|e|s|t|d|i|r|/|i|n|p|u|t|/|y|a|m|l|.|y|a|m|l|.|h|t|m|l|<+0#00e0e07&|/|t+0#af5f00255&|i|t|l|e
-|>+0#00e0e07&| +0#0000000&@73
-|<+0#00e0e07&|m+0#af5f00255&|e|t|a| +0#00e0e07&|n+0#00e0003&|a|m|e|=+0#00e0e07&|"+0#e000002&|G|e|n|e|r|a|t|o|r|"| +0#00e0e07&|c+0#00e0003&|o|n|t|e|n|t|=+0#00e0e07&|"+0#e000002&|V|i|m|/|9|.|1|"|>+0#00e0e07&| +0#0000000&@33
-|<+0#00e0e07&|m+0#af5f00255&|e|t|a| +0#00e0e07&|n+0#00e0003&|a|m|e|=+0#00e0e07&|"+0#e000002&|p|l|u|g|i|n|-|v|e|r|s|i|o|n|"| +0#00e0e07&|c+0#00e0003&|o|n|t|e|n|t|=+0#00e0e07&|"+0#e000002&|v|i|m|9|.|0|_|v|2|"|>+0#00e0e07&| +0#0000000&@26
-|<+0#00e0e07&|m+0#af5f00255&|e|t|a| +0#00e0e07&|n+0#00e0003&|a|m|e|=+0#00e0e07&|"+0#e000002&|s|y|n|t|a|x|"| +0#00e0e07&|c+0#00e0003&|o|n|t|e|n|t|=+0#00e0e07&|"+0#e000002&|y|a|m|l|"|>+0#00e0e07&| +0#0000000&@39
-|<+0#00e0e07&|m+0#af5f00255&|e|t|a| +0#00e0e07&|n+0#00e0003&|a|m|e|=+0#00e0e07&|"+0#e000002&|s|e|t@1|i|n|g|s|"| +0#00e0e07&|c+0#00e0003&|o|n|t|e|n|t|=+0#00e0e07&|"+0#e000002&|u|s|e|_|c|s@1|,|n|o|_|f|o|l|d|c|o|l|u|m|n|,|e|x|p|a|n|d|_|t|a|b|s|,|p|r|e|_|w|r|a|p|,|p
-|r|e|v|e|n|t|_|c|o|p|y|=|,|u|s|e|_|i|n|p|u|t|_|f|o|r|_|p|c|=|n|o|n|e|"|>+0#00e0e07&| +0#0000000&@38
-|<+0#00e0e07&|m+0#af5f00255&|e|t|a| +0#00e0e07&|n+0#00e0003&|a|m|e|=+0#00e0e07&|"+0#e000002&|c|o|l|o|r|s|c|h|e|m|e|"| +0#00e0e07&|c+0#00e0003&|o|n|t|e|n|t|=+0#00e0e07&|"+0#e000002&|l|a|n|d|s|c|a|p|e|"|>+0#00e0e07&| +0#0000000&@29
-|<+0#00e0e07&|s+0#af5f00255&|t|y|l|e|>+0#00e0e07&| +0#0000000&@67
-|<+0#0000e05&|!|-@1| +0#0000000&@70
-|p+0#af5f00255&|r|e| +0#0000000&|{+0#00e0e07&| +0#0000000&|w+0#00e0003&|h|i|t|e|-|s|p|a|c|e|:+0#0000000&| |p+0#e000002&|r|e|-|w|r|a|p|;+0#0000000&| |f+0#00e0003&|o|n|t|-|f|a|m|i|l|y|:+0#0000000&| |m+0#e000002&|o|n|o|s|p|a|c|e|;+0#0000000&| |c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|f@5|;+0#0000000&| |b+0#00e0003&|a|c|k|g|r
-|o|u|n|d|-|c|o|l|o|r|:+0#0000000&| |#+0#e000002&|0@5|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@52
-|b+0#af5f00255&|o|d|y| +0#0000000&|{+0#00e0e07&| +0#0000000&|f+0#00e0003&|o|n|t|-|f|a|m|i|l|y|:+0#0000000&| |m+0#e000002&|o|n|o|s|p|a|c|e|;+0#0000000&| |c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|f@5|;+0#0000000&| |b+0#00e0003&|a|c|k|g|r|o|u|n|d|-|c|o|l|o|r|:+0#0000000&| |#+0#e000002&|0@5|;+0#0000000&| |}+0#00e0e07&
-|*+0#af5f00255&| +0#0000000&|{+0#00e0e07&| +0#0000000&|f+0#00e0003&|o|n|t|-|s|i|z|e|:+0#0000000&| |1+0#e000002&|e|m|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@53
-|.+0#00e0e07&|I|d|e|n|t|i|f|i|e|r| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|8|7|d|7|f@1|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@43
-@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_01.dump b/runtime/syntax/testdir/dumps/yaml.yaml_01.dump
deleted file mode 100644
index 027a3c3..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_01.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|b+0#af5f00255#ffffff0|o|d|y| +0#0000000&|{+0#00e0e07&| +0#0000000&|f+0#00e0003&|o|n|t|-|f|a|m|i|l|y|:+0#0000000&| |m+0#e000002&|o|n|o|s|p|a|c|e|;+0#0000000&| |c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|f@5|;+0#0000000&| |b+0#00e0003&|a|c|k|g|r|o|u|n|d|-|c|o|l|o|r|:+0#0000000&| |#+0#e000002&|0@5|;+0#0000000&| |}+0#00e0e07&
-|*+0#af5f00255&| +0#0000000&|{+0#00e0e07&| +0#0000000&|f+0#00e0003&|o|n|t|-|s|i|z|e|:+0#0000000&| |1+0#e000002&|e|m|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@53
-|.+0#00e0e07&|I|d|e|n|t|i|f|i|e|r| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|8|7|d|7|f@1|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@43
-|.+0#00e0e07&|S|t|a|t|e|m|e|n|t| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|5|f|d|7|0@1|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@44
-|.+0#00e0e07&|P|r|e|P|r|o|c| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|0@1|a|f@2|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@46
->.+0#00e0e07&|T|y|p|e| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|f@1|5|f@2|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@49
-|.+0#00e0e07&|S|p|e|c|i|a|l|C|h|a|r| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|f@1|8|7|0@1|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@42
-|.+0#00e0e07&|C|o|m@1|e|n|t| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|7|6|7|6|7|6|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@46
-|.+0#00e0e07&|S|t|r|i|n|g| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|f@1|a|f|5|f|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@47
-|.+0#00e0e07&|N|u|m|b|e|r| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|5|f|d|7|f@1|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@47
-|.+0#00e0e07&|F|l|o|a|t| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|5|f@2|a|f|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@48
-|.+0#00e0e07&|C|o|n|s|t|a|n|t| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|8|7|a|f@2|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@45
-|.+0#00e0e07&|S|p|e|c|i|a|l| +0#0000000&|{+0#00e0e07&| +0#0000000&|c+0#00e0003&|o|l|o|r|:+0#0000000&| |#+0#e000002&|d|7|a|f|0@1|;+0#0000000&| |}+0#00e0e07&| +0#0000000&@46
-|-+0#0000e05&@1|>| +0#0000000&@71
-|<+0#00e0e07&|/|s+0#af5f00255&|t|y|l|e|>+0#00e0e07&| +0#0000000&@66
-|<+0#00e0e07&|/|h+0#af5f00255&|e|a|d|>+0#00e0e07&| +0#0000000&@67
-|<+0#00e0e07&|b+0#af5f00255&|o|d|y|>+0#00e0e07&| +0#0000000&@68
-|<+0#00e0e07&|p+0#af5f00255&|r|e| +0#00e0e07&|i+0#00e0003&|d|=+0#00e0e07&|'+0#e000002&|v|i|m|C|o|d|e|E|l|e|m|e|n|t|'|>+0#00e0e07&| +0#0000000&@49
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|%+0#0000000&|Y|A|M|L|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|1+0#0000000&|.|2|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@6
-@57|1|9|,|1| @10|9|%|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_02.dump b/runtime/syntax/testdir/dumps/yaml.yaml_02.dump
deleted file mode 100644
index b0037c8..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_02.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|<+0#00e0e07#ffffff0|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|%+0#0000000&|T|A|G|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|!+0#0000000&@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@4|<+0#00e0e07&|s+0#af5f00255&|p|a
-|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|t+0#0000000&|a|g|:|y|a|m|l|.|o|r|g|,|2|0@1|2|:|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |s|e|c|o|n|d|a|r
-|y| |t|a|g| |h|a|n|d|l|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@55
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|%+0#0000000&|T|A|G|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|!+0#0000000&|y|a|m|l|!|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a
-|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|t+0#0000000&|a|g|:|y|a|m|l|.|o|r|g|,|2|0@1|2|:|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |n|a|m|e|d| |t|a
-|g| |h|a|n|d|l|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@59
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|P|r|e|P|r|o|c|"|>+0#00e0e07&|-+0#0000000&@2|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@42
-><+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|!+0#0000000&|s|t|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1
-|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|0+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@4|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |p|r|i|m|a|r|y| |t|a|g| |h|a|n|d|l|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@1
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|!+0#0000000&@1|s|t|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s
-@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|0+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@3|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |s|e|c|o|n|d|a|r|y| |t|a|g| |h|a|n|d|l|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&
-|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|!+0#0000000&|y|a|m|l|!|s|t|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&
-|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|0+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |n|a|m|e|d| |t|a|g| |h|a|n|d|l|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@3
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|P|r|e|P|r|o|c|"|>+0#00e0e07&|-+0#0000000&@2|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@42
-@75
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|o@1|l|e|a|n|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n
-| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|n|s|t|a|n|t|"|>+0#00e0e07&|f+0#0000000&|a|l|s|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&
-|C|o|n|s|t|a|n|t|"|>+0#00e0e07&|t+0#0000000&|r|u|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|n|s|t|a|n|t|"|>+0#00e0e07&|F+0#0000000&|A|L|S|E|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o
-|@+0#4040ff13&@2| @71
-| +0#0000000&@56|3|7|,|1| @9|2|1|%|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_03.dump b/runtime/syntax/testdir/dumps/yaml.yaml_03.dump
deleted file mode 100644
index d16656d..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_03.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|<+0#00e0e07#ffffff0|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|i+0#0000000&|n|f|i|n|i|t|y|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a
-|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|F|l|o|a|t|"|>+0#00e0e07&|.+0#0000000&|i|n|f|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|F|l|o
-|a|t|"|>+0#00e0e07&|-+0#0000000&|.|I|n|f|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|F|l|o|a|t|"|>+0#00e0e07&|++0#0000000&|.|I|N|F|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|]+0#0000000&|<+0#00e0e07&|/
-|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@69
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|n+0#0000000&|o|t| |a| |n|u|m|b|e|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|F|l|o|a|t|"|>+0#00e0e07&|.+0#0000000&|n|a|n|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&
-|"+0#e000002&|F|l|o|a|t|"|>+0#00e0e07&|.+0#0000000&|N|a|N|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|F|l|o|a|t|"|>+0#00e0e07&|.+0#0000000&|N|A|N|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|]+0#0000000&
-|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@67
-> @74
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|p+0#0000000&|l|a|i|n| |s|t|r|i|n|g|s|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&
-| +0#0000000&@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|a| |b| |c| @34
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|a| |*| |b| |&+0#e000e06&|a|m|p|;| +0#0000000&|c| |@| |d|#| |e| |:| |f|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m
-@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@51
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|{@1| |f|(|'| |'|)| |}@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#|8|2|3|4
-|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@67
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|d+0#0000000&|o|u|b|l|e| |q|u|o|t|e|d| |s|t|r|i|n|g|s|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&
-|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@66
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|&+0#e000e06&|q|u|o|t|;|&|q|u|o|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&
-|@+0#4040ff13&@2| @71
-| +0#0000000&@56|5@1|,|0|-|1| @7|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_04.dump b/runtime/syntax/testdir/dumps/yaml.yaml_04.dump
deleted file mode 100644
index 6a3aecf..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_04.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|<+0#00e0e07#ffffff0|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|l|o|c|k| |f|o|l|d|e|d| |s|t|r|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&
-|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|&+0#e000e06&|g|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@34
-@2|f|o@1| @69
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&
-|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|1+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@52
-@75
-@4><+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|z|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n
-| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|n|s|t|a|n|t|"|>+0#00e0e07&|n+0#0000000&|u|l@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@45
-@75
-@2|&+0#e000e06&|q|u|o|t|;|q+0#0000000&|u|x|&+0#e000e06&|q|u|o|t|;| +0#0000000&@57
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|l|o|c|k| |l|i|t|e|r|a|l| |s|t|r|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&
-|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&||+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@36
-@2|f|o@1| @69
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&
-|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|1+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@52
-@75
-@4|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|z|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n
-| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|n|s|t|a|n|t|"|>+0#00e0e07&|n+0#0000000&|u|l@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@45
-@75
-@57|7|3|,|5| @9|4|5|%|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_05.dump b/runtime/syntax/testdir/dumps/yaml.yaml_05.dump
deleted file mode 100644
index c94413e..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_05.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|l|o|c|k| |l|i|t|e|r|a|l| |s
-|t|r|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&||+0#0000000&|+|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<
-|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@36
-@6|f|o@1| @65
-@6|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p
-|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|1+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@48
-@2><+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&||+0#0000000&|-|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a
-|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#|1@1|5|1|7|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@47
-@6|f|o@1| |&+0#e000e06&|q|u|o|t|;|\+0#0000000&|&+0#e000e06&|q|u|o|t|;| +0#0000000&@51
-@6|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p
-|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|1+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@48
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|l|o|c|k| |i|n|d|e|n|t|a|t|i|o|n| |i|n|d|i|c|a|t|o|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e
-|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@60
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|l|o|c|k| |f|o|l|d|e|d| |s|t
-|r|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|&+0#e000e06&|g|t|;|1+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n
-|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@34
-@5|f|o@1| @66
-@5|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a
-|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|1+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@49
-@57|9|1|,|3| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_06.dump b/runtime/syntax/testdir/dumps/yaml.yaml_06.dump
deleted file mode 100644
index dcd2e6a..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_06.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|e+0#0000000&|m|p|t|y| |m|a|p@1|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a
-|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|{+0#0000000&|}|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@40
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|f+0#0000000&|l|o|w| |s|e|q|u|e|n|c|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a
-|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|f+0#0000000&|o@1|,| |b|a|r|,| |b|a|z|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|]+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n
-|>+0#00e0e07&| +0#0000000&@73
-@2><+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|f+0#0000000&|l|o|w| |m|a|p@1|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n
-|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|{+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|f+0#0000000&|o@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l
-|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|b|a|r|,| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|z|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&
-|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|q|u|x|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|}+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@22
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|f+0#0000000&|l|o|w| |s|t|r|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&
-| +0#0000000&@3|f|o@1| @67
-@4|b|a|r| @67
-@4|b|a|z| @67
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|&+0#e000e06&|q|u|o|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|d+0#0000000&|o|u|b|l|e| |q|u|o|t|e|d| |<+0#00e0e07&|/|s+0#af5f00255&|p
-|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|C|h|a|r|"|>+0#00e0e07&|\+0#0000000&|&+0#e000e06&|q|u|o|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&| +0#0000000&|s|t|r|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p
-|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|&+0#e000e06&|q|u|o|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&
-|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|&+0#e000e06&|q|u|o|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@47
-@4|f|o@1| @67
-@4|b|a|r| @67
-@57|1|0|9|,|3| @8|6|9|%|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_07.dump b/runtime/syntax/testdir/dumps/yaml.yaml_07.dump
deleted file mode 100644
index 6ba7ff1..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_07.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|f+0#0000000&|l|o|w| |c|o|l@1|e|c|t|i|o|n|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&
-|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|f+0#0000000&|o@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a
-|n|>+0#00e0e07&| +0#0000000&@72
-@4|,| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|{+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a
-|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|{|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1
-|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@52
-@6><+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|z|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p
-|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|r|i|n|g|"|>+0#00e0e07&|'+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@48
-@8|q|u|x|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |n|o|t| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@20
-@6|'|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@28
-@4|}|]|}|]| @66
-@75
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|e+0#0000000&|x|p|l|i|c|i|t| |m|a|p@1|i|n|g|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p
-|a|n|>+0#00e0e07&| +0#0000000&@71
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|?+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|f|o@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&
-| +0#0000000&@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|b|a|r|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&
-| +0#0000000&@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|?+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|f|o@1| @5
-@4|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|b|a|r| @34
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|b|a|z| @5
-@57|1|2|7|,|7| @8|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_08.dump b/runtime/syntax/testdir/dumps/yaml.yaml_08.dump
deleted file mode 100644
index e2d7018..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_08.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@3|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|o|n|e| @36
-@4|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|?+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|2+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@10
-@4|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&
-|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|?+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|N|u|m|b|e|r|"|>+0#00e0e07&|3+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@21
-@8|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|t|h|r|e@1| @30
-@6><+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|t|a|t|e|m|e|n|t|"|>+0#00e0e07&|-+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|{+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&
-|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|?+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|4+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i
-|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|f|o|u|r|,| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|?+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&
-|5+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|f|i|v|e|,| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|?+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&
-|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@35
-@8|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|6+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a
-|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|C|o|m@1|e|n|t|"|>+0#00e0e07&| +0#0000000&|#| |c|o|m@1|e|n|t|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@39
-@8|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|{+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|7+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a
-|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|s+0#0000000&|e|v|e|n|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|}+0#0000000&@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@12
-@75
-|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|m+0#0000000&|a|p@1|i|n|g| |m|e|r|g|e|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&
-| +0#0000000&@1|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|f+0#0000000&|o@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&
-|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|&+0#e000e06&|a|m|p|;|f+0#0000000&|o@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@47
-@4|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|b|a|z| @1
-@57|1|4|5|,|7| @8|9|2|%|
diff --git a/runtime/syntax/testdir/dumps/yaml.yaml_99.dump b/runtime/syntax/testdir/dumps/yaml.yaml_99.dump
deleted file mode 100644
index 7467b76..0000000
--- a/runtime/syntax/testdir/dumps/yaml.yaml_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@3|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|z|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n
-| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|&+0#e000e06&|a|m|p|;|b+0#0000000&|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@45
-@6|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|f+0#0000000&|o@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p
-|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|*+0#0000000&|f|o@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i
-|a|l|"|>+0#00e0e07&|]+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@62
-@4|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|q+0#0000000&|u|x|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@5
-@6|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|&+0#e000e06&|l|t|;|&|l|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&
-|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|*+0#0000000&|f|o@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T
-|y|p|e|"|>+0#00e0e07&|*+0#0000000&|b|a|r|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|]+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@28
-@2|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|b+0#0000000&|a|z|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&
-|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|{+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|&+0#e000e06&|l|t|;|&|l|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p
-|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|*+0#0000000&|f|o@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|,+0#0000000&| |<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|I|d|e|n|t|i|f|i|e|r|"|>+0#00e0e07&|q+0#0000000&|u
-|x|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|[+0#0000000&|{|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n
-| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|&+0#e000e06&|l|t|;|&|l|t|;|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|:+0#0000000&|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&|<+0#00e0e07&|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1
-|=+0#00e0e07&|"+0#e000002&|T|y|p|e|"|>+0#00e0e07&|*+0#0000000&|f|o@1|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&|<|s+0#af5f00255&|p|a|n| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|S|p|e|c|i|a|l|"|>+0#00e0e07&|}+0#0000000&|]|}|<+0#00e0e07&|/|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@23
-|<+0#00e0e07&|/|p+0#af5f00255&|r|e|>+0#00e0e07&| +0#0000000&@68
-|<+0#00e0e07&|/|b+0#af5f00255&|o|d|y|>+0#00e0e07&| +0#0000000&@67
-|<+0#00e0e07&|/|h+0#af5f00255&|t|m|l|>+0#00e0e07&| +0#0000000&@67
-><+0#0000e05&|!|-@1| |v|i|m|:| |s|e|t| |f|o|l|d|m|e|t|h|o|d|=|m|a|n|u|a|l| |:| |-@1|>| +0#0000000&@37
-@57|1|6|2|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/yaml_01.dump b/runtime/syntax/testdir/dumps/yaml_01.dump
index ae84e98..bbef58c 100644
--- a/runtime/syntax/testdir/dumps/yaml_01.dump
+++ b/runtime/syntax/testdir/dumps/yaml_01.dump
@@ -11,10 +11,10 @@
@75
|p+0#00e0e07&|l|a|i|n| |s|t|r|i|n|g|s|:+0#e000e06&| +0#0000000&@60
@2|-+0#af5f00255&| +0#0000000&|a| |b| |c| @65
-@2|-+0#af5f00255&| +0#0000000&|a| |*| |b| |&| |c| |@| |d|#| |e| |:| |f| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@40
+@2|-+0#af5f00255&| +0#0000000&|a|:|b| |&| |c| |@| |d|#| |e| |*| |f| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@42
@2|-+0#af5f00255&| +0#0000000&|{@1| |f|(|'| |'|)| |}@1| +0#0000e05&|#|8|2|3|4| +0#0000000&@52
|d+0#00e0e07&|o|u|b|l|e| |q|u|o|t|e|d| |s|t|r|i|n|g|s|:+0#e000e06&| +0#0000000&@52
@2|-+0#af5f00255&| +0#0000000&|"+0#e000002&@1| +0#0000000&@68
@2|-+0#af5f00255&| +0#0000000&|"+0#e000002&|a| |b| |c|"|:+0#e000e06&| +0#0000000&|"+0#e000002&|d| |e| |f|"| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@44
@2|-+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&@2|"|\|a|\|b|\|f|\|n|\|r|\|t|\|v|\|0|\|_|\| |\|N|\|L|\|P|\|x|4|1|\|u|0@1|4|1|\|U|0@5|4|1|"+0#e000002&| +0#0000000&@18
-@57|1|9|,|1| @9|1|2|%|
+@57|1|9|,|1| @9|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/yaml_03.dump b/runtime/syntax/testdir/dumps/yaml_03.dump
index 4d1466e..2ca0df0 100644
--- a/runtime/syntax/testdir/dumps/yaml_03.dump
+++ b/runtime/syntax/testdir/dumps/yaml_03.dump
@@ -17,4 +17,4 @@
@5|b|a|r|:| |1| @63
@2|-+0#af5f00255&| +0#0000000&|b+0#00e0e07&|l|o|c|k| |l|i|t|e|r|a|l| |s|t|r|i|n|g|:+0#e000e06&| +0#0000000&||+0#e000e06&|1|-| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@35
@5|f|o@1| @66
-@57|5@1|,|7| @9|4|5|%|
+@57|5@1|,|7| @9|4@1|%|
diff --git a/runtime/syntax/testdir/dumps/yaml_04.dump b/runtime/syntax/testdir/dumps/yaml_04.dump
index 2503470..3eda526 100644
--- a/runtime/syntax/testdir/dumps/yaml_04.dump
+++ b/runtime/syntax/testdir/dumps/yaml_04.dump
@@ -17,4 +17,4 @@
| +0#e000002&@3|f|o@1| +0#0000000&@67
| +0#e000002&@3|b|a|r| +0#0000000&@67
| +0#e000002&@3|b|a|z|"| +0#0000000&@66
-@57|7|3|,|0|-|1| @7|6|2|%|
+@57|7|3|,|0|-|1| @7|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/yaml_05.dump b/runtime/syntax/testdir/dumps/yaml_05.dump
index d64c48b..570bdc0 100644
--- a/runtime/syntax/testdir/dumps/yaml_05.dump
+++ b/runtime/syntax/testdir/dumps/yaml_05.dump
@@ -6,9 +6,10 @@
@2>i+0#00e0e07&|n|s|i|d|e| |b|l|o|c|k| |m|a|p@1|i|n|g|:+0#e000e06&| +0#0000000&@51
@4|f+0#00e0e07&|o@1|:+0#e000e06&| +0#0000000&|{+0#e000e06&|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&|b|a|z|}+0#e000e06&| +0#0000000&@55
@4|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&|[+0#e000e06&|"+0#e000002&|f|o@1|"|:+0#e000e06&| +0#0000000&|{+0#e000e06&|b+0#00e0e07&|a|z|:+0#e000e06&| +0#0000000&|q|u|x|}+0#e000e06&|]| +0#0000000&@46
-@2|f+0#00e0e07&|l|o|w| |c|o|l@1|e|c|t|i|o|n|:+0#e000e06&| +0#0000000&|[+0#e000e06&|f+0#0000000&|o@1| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@41
+@2|f+0#00e0e07&|l|o|w|:|c|o|l@1|e|c|t|i|o|n|:+0#e000e06&| +0#0000000&|[+0#e000e06&|f+0#0000000&|o@1| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@41
@4|,| |{+0#e000e06&|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&|[+0#e000e06&|{| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@50
-@6|b+0#00e0e07&|a|z|:+0#e000e06&| +0#0000000&|'+0#e000002&| +0#0000000&@62
+@6|b+0#00e0e07&|a|z|:+0#e000e06&| +0#0000000&@64
+@6|'+0#e000002&| +0#0000000&@67
| +0#e000002&@7|q|u|x| |#| |n|o|t| |c|o|m@1|e|n|t| +0#0000000&@49
| +0#e000002&@5|'| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@57
@4|}+0#e000e06&|]|}|]| +0#0000000&@66
@@ -16,5 +17,4 @@
|e+0#00e0e07&|x|p|l|i|c|i|t| |m|a|p@1|i|n|g|:+0#e000e06&| +0#0000000&@57
@2|?+0#e000e06&| +0#0000000&|f|o@1| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@57
@2|:+0#e000e06&| +0#0000000&|b|a|r| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@57
-@2|?+0#e000e06&| +0#0000000&|-+0#af5f00255&| +0#0000000&|f|o@1| @65
-@57|9|1|,|3| @9|7|8|%|
+@57|9|1|,|3| @9|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/yaml_06.dump b/runtime/syntax/testdir/dumps/yaml_06.dump
index f6c83c2..30ea7ff 100644
--- a/runtime/syntax/testdir/dumps/yaml_06.dump
+++ b/runtime/syntax/testdir/dumps/yaml_06.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@1|?+0#e000e06&| +0#0000000&|-+0#af5f00255&| +0#0000000&|f|o@1| @65
+| +0&#ffffff0@1|:+0#e000e06&| +0#0000000&|b|a|r| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@57
+@2|?+0#e000e06&| +0#0000000&|-+0#af5f00255&| +0#0000000&|f|o@1| @65
@4|-+0#af5f00255&| +0#0000000&|b|a|r| @65
@2|:+0#e000e06&| +0#0000000&|-+0#af5f00255&| +0#0000000&|b|a|z| @65
@4|-+0#af5f00255&| +0#0000000&|q|u|x| @65
-@2|?+0#e000e06&| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&| +0#0000000&@61
-@2>:+0#e000e06&| +0#0000000&|?+0#e000e06&| +0#0000000&|1+0#e000002&| +0#0000000&@67
+@2>?+0#e000e06&| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&| +0#0000000&@61
+@2|:+0#e000e06&| +0#0000000&|?+0#e000e06&| +0#0000000&|1+0#e000002&| +0#0000000&@67
@4|:+0#e000e06&| +0#0000000&|o|n|e| @65
@4|?+0#e000e06&| +0#0000000&|2+0#e000002&| +0#0000000&@67
@4|:+0#e000e06&| +0#0000000&|-+0#af5f00255&| +0#0000000&|?+0#e000e06&| +0#0000000&|3+0#e000002&| +0#0000000&@63
@8|:+0#e000e06&| +0#0000000&|t|h|r|e@1| @59
@6|-+0#af5f00255&| +0#0000000&|{+0#e000e06&|?|4+0#00e0e07&|:+0#e000e06&| +0#0000000&|f|o|u|r|,| |?+0#e000e06&| +0#0000000&|5+0#00e0e07&|:+0#e000e06&| +0#0000000&|f|i|v|e|,| |?+0#e000e06&| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@33
@8|6+0#00e0e07&|:+0#e000e06&| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@54
-@8|{+0#e000e06&|7+0#00e0e07&|:+0#e000e06&|s+0#0000000&|e|v|e|n|}+0#e000e06&@1| +0#0000000&@56
+@8|{+0#e000e06&|7+0#0000000&|:|s|e|v|e|n|}+0#e000e06&@1| +0#0000000&@56
@75
|m+0#00e0e07&|a|p@1|i|n|g| |m|e|r|g|e|:+0#e000e06&| +0#0000000&@60
@2|f+0#00e0e07&|o@1|:+0#e000e06&| +0#0000000&|&+0#00e0003&|f|o@1| +0#0000000&@63
@4|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&|b|a|z| @62
@2|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&@68
-@4|<+0#e000e06&@1|:| +0#0000000&|*+0#00e0003&|f|o@1| +0#0000000&@62
-@57|1|0|9|,|3| @8|9|5|%|
+@57|1|0|9|,|3| @8|9|4|%|
diff --git a/runtime/syntax/testdir/dumps/yaml_07.dump b/runtime/syntax/testdir/dumps/yaml_07.dump
index a21684f..ff6d9a2 100644
--- a/runtime/syntax/testdir/dumps/yaml_07.dump
+++ b/runtime/syntax/testdir/dumps/yaml_07.dump
@@ -1,13 +1,9 @@
-| +0&#ffffff0@74
-|m+0#00e0e07&|a|p@1|i|n|g| |m|e|r|g|e|:+0#e000e06&| +0#0000000&@60
-@2|f+0#00e0e07&|o@1|:+0#e000e06&| +0#0000000&|&+0#00e0003&|f|o@1| +0#0000000&@63
-@4|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&|b|a|z| @62
-@2|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&@68
-@4><+0#e000e06&@1|:| +0#0000000&|*+0#00e0003&|f|o@1| +0#0000000&@62
+| +0&#ffffff0@1|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&@68
+@4|<+0#e000e06&@1|:| +0#0000000&|*+0#00e0003&|f|o@1| +0#0000000&@62
@4|b+0#00e0e07&|a|z|:+0#e000e06&| +0#0000000&|&+0#00e0003&|b|a|r| +0#0000000&@61
@6|f+0#00e0e07&|o@1|:+0#e000e06&| +0#0000000&|[+0#e000e06&|*+0#00e0003&|f|o@1|]+0#e000e06&| +0#0000000&@57
@4|q+0#00e0e07&|u|x|:+0#e000e06&| +0#0000000&@66
-@6|<+0#e000e06&@1|:| +0#0000000&|[+0#e000e06&|*+0#00e0003&|f|o@1|,+0#0000000&| |*+0#00e0003&|b|a|r|]+0#e000e06&| +0#0000000&@52
+@6><+0#e000e06&@1|:| +0#0000000&|[+0#e000e06&|*+0#00e0003&|f|o@1|,+0#0000000&| |*+0#00e0003&|b|a|r|]+0#e000e06&| +0#0000000&@52
@2|b+0#00e0e07&|a|z|:+0#e000e06&| +0#0000000&|{+0#e000e06&|<@1|:| +0#0000000&|*+0#00e0003&|f|o@1|,+0#0000000&| |q+0#00e0e07&|u|x|:+0#e000e06&| +0#0000000&|[+0#e000e06&|{|<@1| +0#0000000&|:+0#e000e06&| +0#0000000&|*+0#00e0003&|f|o@1|}+0#e000e06&|]|}| +0#0000000&@37
|~+0#4040ff13&| @73
|~| @73
@@ -17,4 +13,8 @@
|~| @73
|~| @73
|~| @73
-| +0#0000000&@56|1|2|7|,|5| @8|B|o|t|
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2|7|,|7| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/yaml_99.dump b/runtime/syntax/testdir/dumps/yaml_99.dump
deleted file mode 100644
index e81b373..0000000
--- a/runtime/syntax/testdir/dumps/yaml_99.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@1|:+0#e000e06&| +0#0000000&|?+0#e000e06&| +0#0000000&|1+0#e000002&| +0#0000000&@67
-@4|:+0#e000e06&| +0#0000000&|o|n|e| @65
-@4|?+0#e000e06&| +0#0000000&|2+0#e000002&| +0#0000000&@67
-@4|:+0#e000e06&| +0#0000000&|-+0#af5f00255&| +0#0000000&|?+0#e000e06&| +0#0000000&|3+0#e000002&| +0#0000000&@63
-@8|:+0#e000e06&| +0#0000000&|t|h|r|e@1| @59
-@6|-+0#af5f00255&| +0#0000000&|{+0#e000e06&|?|4+0#00e0e07&|:+0#e000e06&| +0#0000000&|f|o|u|r|,| |?+0#e000e06&| +0#0000000&|5+0#00e0e07&|:+0#e000e06&| +0#0000000&|f|i|v|e|,| |?+0#e000e06&| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@33
-@8|6+0#00e0e07&|:+0#e000e06&| +0#0000e05&|#| |c|o|m@1|e|n|t| +0#0000000&@54
-@8|{+0#e000e06&|7+0#00e0e07&|:+0#e000e06&|s+0#0000000&|e|v|e|n|}+0#e000e06&@1| +0#0000000&@56
-@75
-|m+0#00e0e07&|a|p@1|i|n|g| |m|e|r|g|e|:+0#e000e06&| +0#0000000&@60
-@2|f+0#00e0e07&|o@1|:+0#e000e06&| +0#0000000&|&+0#00e0003&|f|o@1| +0#0000000&@63
-@4|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&|b|a|z| @62
-@2|b+0#00e0e07&|a|r|:+0#e000e06&| +0#0000000&@68
-@4|<+0#e000e06&@1|:| +0#0000000&|*+0#00e0003&|f|o@1| +0#0000000&@62
-@4|b+0#00e0e07&|a|z|:+0#e000e06&| +0#0000000&|&+0#00e0003&|b|a|r| +0#0000000&@61
-@6|f+0#00e0e07&|o@1|:+0#e000e06&| +0#0000000&|[+0#e000e06&|*+0#00e0003&|f|o@1|]+0#e000e06&| +0#0000000&@57
-@4|q+0#00e0e07&|u|x|:+0#e000e06&| +0#0000000&@66
-@6|<+0#e000e06&@1|:| +0#0000000&|[+0#e000e06&|*+0#00e0003&|f|o@1|,+0#0000000&| |*+0#00e0003&|b|a|r|]+0#e000e06&| +0#0000000&@52
-@2>b+0#00e0e07&|a|z|:+0#e000e06&| +0#0000000&|{+0#e000e06&|<@1|:| +0#0000000&|*+0#00e0003&|f|o@1|,+0#0000000&| |q+0#00e0e07&|u|x|:+0#e000e06&| +0#0000000&|[+0#e000e06&|{|<@1| +0#0000000&|:+0#e000e06&| +0#0000000&|*+0#00e0003&|f|o@1|}+0#e000e06&|]|}| +0#0000000&@37
-@57|1|2|7|,|3| @8|B|o|t|
diff --git a/runtime/syntax/testdir/input/java_annotations_signature.java b/runtime/syntax/testdir/input/java_annotations_signature.java
new file mode 100644
index 0000000..8236218
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_annotations_signature.java
@@ -0,0 +1,78 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+class Annotations$Tests
+{
+ @Target(ElementType.TYPE_USE)
+ @interface Tag
+ {
+ String value() default "";
+ String kind() default "";
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface Text
+ {
+ String[] value() default {""};
+ }
+
+ @Target({
+ ElementType.METHOD,
+ ElementType.PARAMETER,
+ ElementType.TYPE,
+ })
+ @interface Labels
+ {
+ Label[] value();
+ }
+
+ @java.lang.annotation.Target({
+ java.lang.annotation.ElementType.METHOD,
+ java.lang.annotation.ElementType.PARAMETER,
+ java.lang.annotation.ElementType.TYPE,
+ })
+ @java.lang.annotation.Repeatable(Labels.class)
+ @interface Label
+ {
+ String value() default "";
+ Class<?> type() default Label.class;
+ boolean redundant() default true;
+ Text text() default @Text;
+ Tag head() default @Tag();
+ Tag tail() default @Tag(value = "", kind = "");
+ }
+
+ /* Use identity cast expressions to nest TYPE_USE annotations. */
+ @Label(
+ (@Text({
+ (@Text({ "a", "aa", "aaa", "aaaa", }) String) "as",
+ (@Text({ "b", "bb", "bbb", "bbbb", }) String) "bs",
+ (@Text({ "c", "cc", "ccc", "cccc", }) String) "cs",
+ (@Text({ "d", "dd", "ddd", "dddd", }) String) "ds",
+ }) String) "abcd")
+ interface Primer { }
+
+ @Label @Label() @Label("""
+ n\
+ o\
+ O\
+ p""")
+ @Label(head = @Tag(value = "@Label"/*, kind = "name"*/))
+ @Label(// value = "Method",
+ type = Annotations$Tests.class,
+ redundant = !!!(1 != 1),
+ head = @Tag(value = "@Label"),
+ text = @Text({ "})", "({" }))
+ static void noOp(@Label @Label() @Label("dummy")
+ @Label(head = @Tag(/*value = "@Label",*/ kind = "name"))
+ @Label(// value = "Parameter",
+ type = Annotations$Tests.class,
+ head = @Tag(value = "@Label"),
+ text = @Text({ "){", "}(" }))
+ Object dummy)
+ {
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_enfoldment.java b/runtime/syntax/testdir/input/java_enfoldment.java
index b534122..a1d8822 100644
--- a/runtime/syntax/testdir/input/java_enfoldment.java
+++ b/runtime/syntax/testdir/input/java_enfoldment.java
@@ -1,5 +1,5 @@
// VIM_TEST_SETUP setlocal foldenable foldcolumn=2 foldmethod=syntax
-// VIM_TEST_SETUP let g:java_mark_braces_in_parens_as_errors = 1
+// VIM_TEST_SETUP let g:java_foldtext_show_first_or_second_line = 1
@SuppressWarnings({
"""
@@ -39,7 +39,7 @@ class FoldingTests {
break;
}
default: ;
- };
+ }
}
{ Object bb = ((Object) new byte[]{}); }
@@ -51,6 +51,18 @@ out: {
} while (false);
}
}
+/*\\\*/ {
+ (new java.util.function.Function<Object, Object>() {
+ /**
+ * {@inheritDoc} */
+ public Object apply(Object o) { return o; };
+ }).apply(
+ (new java.util.function.Function<Object, Object>() {
+ /** {@inheritDoc}
+ */
+ public Object apply(Object o) { return o; };
+ }));
+ }
/**
* No operation.
diff --git a/runtime/syntax/testdir/input/java_generics.java b/runtime/syntax/testdir/input/java_generics.java
new file mode 100644
index 0000000..c9b001a
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_generics.java
@@ -0,0 +1,140 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_generics = 1
+// VIM_TEST_SETUP hi link javaGenericsC1 Todo
+// VIM_TEST_SETUP hi link javaGenericsC2 Error
+
+import java.math.BigInteger;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.LongFunction;
+import java.util.function.Predicate;
+
+class GenericsTests<T extends Number & Comparable<? super T>, U>
+{ // JDK 21+.
+ static final Function<Function<Object, Object>, Object> PARTIAL =
+ GenericsTests.y0();
+ static final Function<BigInteger, BigInteger> FACTORIAL_2000 =
+ GenericsTests.<BigInteger, BigInteger>y1()
+ .apply(f -> x -> (x.compareTo(BigInteger.ONE) < 1)
+ ? BigInteger.ONE
+ : x.multiply(f.apply(x.subtract(BigInteger.ONE))));
+
+ static <T1> Y0<T1> y0()
+ {
+ return (Function<T1, T1> f) -> f.apply(
+ GenericsTests.<T1>y0()
+ .apply(f));
+ }
+
+ static <T1, T2> Y1<T1, T2> y1()
+ {
+ return (Function<Function<T1, T2>, Function<T1, T2>> f) ->
+ (T1 x) -> f.apply(GenericsTests.<T1, T2>y1()
+ .apply(f))
+ .apply(x);
+ }
+
+ static<T> void noOp(T dummy) { }
+
+ interface alpha<T> { }
+
+ interface Y0<T1> extends Function<Function<T1, T1>, T1> { }
+
+ interface Y1<T1, T2> extends Function<Function<Function<T1, T2>,
+ Function<T1, T2>>,
+ Function<T1, T2>> { }
+
+ interface Stackable<E> extends Iterable<E>
+ {
+ boolean isEmpty();
+ E peek();
+ E pop();
+ Stackable<E> popAll(Stackable<? super E> elements);
+ Stackable<E> popSome(Stackable<? super E> elements,
+ Predicate<? super E> filter);
+ Stackable<E> push(E element);
+ Stackable<E> pushAll(Iterable<? extends E> elements);
+ Stackable<E> pushSome(Iterable<? extends E> elements,
+ Predicate<? super E> filter);
+ Stackable<E> wind(Consumer<? super Stackable<E>> action);
+ }
+
+ sealed interface Num<N extends Number>
+ {
+ int radix();
+ N value();
+ }
+
+ record Bin<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 2; }
+ }
+
+ record Dec<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 10; }
+ }
+
+ record Hex<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 16; }
+ }
+
+ record Oct<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 8; }
+ }
+
+ static Num<Long> fromDecimal(long x, int radix)
+ {
+ record Pair(LongFunction<Num<Long>> a,
+ LongFunction<String> b) { }
+ final Pair p = switch (radix) {
+ case 2 -> new Pair(Bin::new, Long::toBinaryString);
+ case 8 -> new Pair(Oct::new, Long::toOctalString);
+ case 16 -> new Pair(Hex::new, Long::toHexString);
+ default -> new Pair(Dec::new,
+ y -> Long.toString(y));
+ };
+ return p.a().apply(Long.parseLong(p.b().apply(x), radix));
+ }
+
+ static long toDecimal(Num<Long> x)
+ {
+ return Long.parseLong(switch (x) {
+ case Bin<?>(Long b) -> Long.toBinaryString(b);
+ case Oct<?>(Long o) -> Long.toOctalString(o);
+ case Hex<?>(Long h) -> Long.toHexString(h);
+ default -> Long.toString(x.value());
+ }, x.radix());
+ }
+
+ @java.lang.annotation.Target(
+ java.lang.annotation.ElementType.TYPE_USE)
+ @interface Taggable
+ {
+ String value() default "";
+ }
+
+ {
+ int N = 0, X = 1, Y = 2;
+ Predicate<T> f = y->N<y.intValue();
+ Predicate<T> g = y->X<N&&(Integer)y>N;
+ boolean[] bb = {
+ X<N||N>Y, X < Y, X <Y, X <(Y), X<(Y), (X)<Y,
+ Double.isFinite(X<<Y),
+ X<=Y, X<(int)(byte)Y, X<~Y, X<-Y, X<+Y,
+ };
+ Class<?> klass = GenericsTests.class;
+ Class< java.lang.Class<@Taggable("<>")int[][]> [] [] >
+ [ ] [ ] $ [ ] [ ];
+ if (false) { new GenericsTests<>(); }
+ alpha<?> ao;
+ alpha<U> au;
+ alpha<alpha<U>> aau;
+ alpha<Y0<?>> ay0o;
+ alpha<Y0<U>> ay0u;
+ Y0<alpha<?>> y0ao;
+ Y0<alpha<U>> y0au;
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_generics_signature.java b/runtime/syntax/testdir/input/java_generics_signature.java
new file mode 100644
index 0000000..505e70e
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_generics_signature.java
@@ -0,0 +1,140 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP let g:java_highlight_generics = 1
+// VIM_TEST_SETUP hi link javaGenericsC1 Todo
+// VIM_TEST_SETUP hi link javaGenericsC2 Error
+import java.math.BigInteger;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.LongFunction;
+import java.util.function.Predicate;
+
+class Generics$Tests<T extends Number & Comparable<? super T>, U>
+{ // JDK 21+.
+ static final Function<Function<Object, Object>, Object> PARTIAL =
+ Generics$Tests.y0();
+ static final Function<BigInteger, BigInteger> FACTORIAL_2000 =
+ Generics$Tests.<BigInteger, BigInteger>y1()
+ .apply(f -> x -> (x.compareTo(BigInteger.ONE) < 1)
+ ? BigInteger.ONE
+ : x.multiply(f.apply(x.subtract(BigInteger.ONE))));
+
+ static <T1> Y0<T1> y0()
+ {
+ return (Function<T1, T1> f) -> f.apply(
+ Generics$Tests.<T1>y0()
+ .apply(f));
+ }
+
+ static <T1, T2> Y1<T1, T2> y1()
+ {
+ return (Function<Function<T1, T2>, Function<T1, T2>> f) ->
+ (T1 x) -> f.apply(Generics$Tests.<T1, T2>y1()
+ .apply(f))
+ .apply(x);
+ }
+
+ static<T> void noOp(T dummy) { }
+
+ interface alpha<T> { }
+
+ interface Y0<T1> extends Function<Function<T1, T1>, T1> { }
+
+ interface Y1<T1, T2> extends Function<Function<Function<T1, T2>,
+ Function<T1, T2>>,
+ Function<T1, T2>> { }
+
+ interface Stackable<E> extends Iterable<E>
+ {
+ boolean isEmpty();
+ E peek();
+ E pop();
+ Stackable<E> popAll(Stackable<? super E> elements);
+ Stackable<E> popSome(Stackable<? super E> elements,
+ Predicate<? super E> filter);
+ Stackable<E> push(E element);
+ Stackable<E> pushAll(Iterable<? extends E> elements);
+ Stackable<E> pushSome(Iterable<? extends E> elements,
+ Predicate<? super E> filter);
+ Stackable<E> wind(Consumer<? super Stackable<E>> action);
+ }
+
+ sealed interface Num<N extends Number>
+ {
+ int radix();
+ N value();
+ }
+
+ record Bin<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 2; }
+ }
+
+ record Dec<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 10; }
+ }
+
+ record Hex<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 16; }
+ }
+
+ record Oct<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 8; }
+ }
+
+ static Num<Long> fromDecimal(long x, int radix)
+ {
+ record Pair(LongFunction<Num<Long>> a,
+ LongFunction<String> b) { }
+ final Pair p = switch (radix) {
+ case 2 -> new Pair(Bin::new, Long::toBinaryString);
+ case 8 -> new Pair(Oct::new, Long::toOctalString);
+ case 16 -> new Pair(Hex::new, Long::toHexString);
+ default -> new Pair(Dec::new,
+ y -> Long.toString(y));
+ };
+ return p.a().apply(Long.parseLong(p.b().apply(x), radix));
+ }
+
+ static long toDecimal(Num<Long> x)
+ {
+ return Long.parseLong(switch (x) {
+ case Bin<?>(Long b) -> Long.toBinaryString(b);
+ case Oct<?>(Long o) -> Long.toOctalString(o);
+ case Hex<?>(Long h) -> Long.toHexString(h);
+ default -> Long.toString(x.value());
+ }, x.radix());
+ }
+
+ @java.lang.annotation.Target(
+ java.lang.annotation.ElementType.TYPE_USE)
+ @interface Taggable
+ {
+ String value() default "";
+ }
+
+ {
+ int N = 0, X = 1, Y = 2;
+ Predicate<T> f = y->N<y.intValue();
+ Predicate<T> g = y->X<N&&(Integer)y>N;
+ boolean[] bb = {
+ X<N||N>Y, X < Y, X <Y, X <(Y), X<(Y), (X)<Y,
+ Double.isFinite(X<<Y),
+ X<=Y, X<(int)(byte)Y, X<~Y, X<-Y, X<+Y,
+ };
+ Class<?> klass = Generics$Tests.class;
+ Class< java.lang.Class<@Taggable("<>")int[][]> [] [] >
+ [ ] [ ] $ [ ] [ ];
+ if (false) { new Generics$Tests<>(); }
+ alpha<?> ao;
+ alpha<U> au;
+ alpha<alpha<U>> aau;
+ alpha<Y0<?>> ay0o;
+ alpha<Y0<U>> ay0u;
+ Y0<alpha<?>> y0ao;
+ Y0<alpha<U>> y0au;
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_lambda_expressions.java b/runtime/syntax/testdir/input/java_lambda_expressions.java
index 75f5af4..95531f9 100644
--- a/runtime/syntax/testdir/input/java_lambda_expressions.java
+++ b/runtime/syntax/testdir/input/java_lambda_expressions.java
@@ -136,7 +136,7 @@ class LambdaExpressionsTests // JDK 21+.
case String str_ -> str_;
}): { echo(str); break; }
case null: default: { echo("Other"); }
- };
+ }
echo(switch (null) {
case String str when !"<empty>".equals(
diff --git a/runtime/syntax/testdir/input/java_lambda_expressions_signature.java b/runtime/syntax/testdir/input/java_lambda_expressions_signature.java
new file mode 100644
index 0000000..0d89e9c
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_lambda_expressions_signature.java
@@ -0,0 +1,154 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+
+import java.lang.annotation.ElementType;
+import java.util.function.BinaryOperator;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+class LambdaExpressions$Tests // JDK 21+.
+{
+ <I1, C1, C2, T1, T2, T3, Z1, Z2, Z3, S1, S2, S3> void test()
+ { // Schönfinkel's functions.
+ I<I1> i = x -> x;
+ C<C1, C2> c = x -> y -> x;
+ T<T1, T2, T3> t = f -> y -> x -> f.apply(x).apply(y);
+ Z<Z1, Z2, Z3> z = f -> g -> x -> f.apply(g.apply(x));
+ S<S1, S2, S3> s = f -> g -> x -> f.apply(x)
+ .apply(g.apply(x));
+
+ I<I1> i01 = (var x) -> x;
+ I<I1> i02 = (@Taggable var x) -> x;
+ I<I1> i03 = (@Taggable @Taggable var x) -> x;
+ I<I1> i04 = (final var x) -> x;
+ I<I1> i05 = (@Taggable final var x) -> x;
+ I<I1> i06 = (@Taggable @Taggable final var x) -> x;
+ I<I1> i07 = (I1 x) -> x;
+ I<I1> i08 = (@Taggable I1 x) -> x;
+ I<I1> i09 = (@Taggable @Taggable I1 x) -> x;
+ I<I1> i10 = (final I1 x) -> x;
+ I<I1> i11 = (@Taggable final I1 x) -> x;
+ I<I1> i12 = (@Taggable @Taggable final I1 x) -> x;
+
+ I<I1[]> ii01 = (I1... x) -> x;
+ I<I1[]> ii02 = (@Taggable I1... x) -> x;
+ I<I1[]> ii03 = (@Taggable @Taggable I1... x) -> x;
+ I<I1[]> ii04 = (final I1... x) -> x;
+ I<I1[]> ii05 = (@Taggable final I1... x) -> x;
+ I<I1[]> ii06 = (@Taggable @Taggable final I1... x) -> x;
+
+ BinaryOperator<I1> leftConst01 = (var x, var y) -> x;
+ BinaryOperator<I1> leftConst02 = (@Taggable var x,
+ @Taggable var y) -> x;
+ BinaryOperator<I1> leftConst03 = (@Taggable @Taggable var
+ x, @Taggable @Taggable var y) -> x;
+ BinaryOperator<I1> leftConst04 = (final var x,
+ final var y) -> x;
+ BinaryOperator<I1> leftConst05 = (@Taggable final
+ var x, @Taggable final var y) -> x;
+ BinaryOperator<I1> leftConst06 = (@Taggable
+ @Taggable final var x,
+ @Taggable
+ @Taggable final var y) -> x;
+ BinaryOperator<I1> leftConst07 = (I1 x, I1 y) -> x;
+ BinaryOperator<I1> leftConst08 = (@Taggable I1 x,
+ @Taggable I1 y) -> x;
+ BinaryOperator<I1> leftConst09 = (@Taggable @Taggable I1
+ x, @Taggable @Taggable I1 y) -> x;
+ BinaryOperator<I1> leftConst10 = (final I1 x,
+ final I1 y) -> x;
+ BinaryOperator<I1> leftConst11 = (@Taggable final
+ I1 x, @Taggable final I1 y) -> x;
+ BinaryOperator<I1> leftConst12 = (@Taggable
+ @Taggable final I1 x,
+ @Taggable
+ @Taggable final I1 y) -> x;
+
+ Runnable noOp = () -> {};
+ BinaryOperator<I1> leftConst = (x, y) -> x;
+ I<I1> id1 = (x) -> (x);
+ @SuppressWarnings("unchecked") I<I1> id2 =
+ ((I<I<I1>>) (I<?>) (Function<I1,
+ I1> x) -> x).apply(switch (0) {
+ case ((int) (byte) 1) -> (I1 x) -> x;
+ default -> (@Taggable I1 x) -> x; });
+ C<C1, C2> const1 = (x) -> (y) -> (x);
+ C<C1, C2> const2 = switch(switch ("") {
+ case "->"->"(s)->(s)";
+ default->"default"; }) {
+ case ("->")->(var x)->(var y)->(x);
+ default->(@Taggable var x)->(@Taggable var y)
+ ->(x);
+ };
+ }
+
+ @java.lang.annotation.Target(ElementType.PARAMETER)
+ @java.lang.annotation.Repeatable(Taggables.class)
+ @interface Taggable { String[] value() default ""; }
+
+ @java.lang.annotation.Target(ElementType.PARAMETER)
+ @interface Taggables { Taggable[] value(); }
+
+ interface I<A1> extends Function<A1, A1> { }
+ interface C<A1, A2> extends Function<A1, Function<A2, A1>> { }
+ interface T<A1, A2, A3> extends
+ Function<Function<A1, Function<A2, A3>>,
+ Function<A2,
+ Function<A1, A3>>> { }
+ interface Z<A1, A2, A3> extends Function<Function<A2, A3>,
+ Function<Function<A1, A2>,
+ Function<A1, A3>>> { }
+ interface S<A1, A2, A3> extends
+ Function<Function<A1, Function<A2, A3>>,
+ Function<Function<A1, A2>,
+ Function<A1, A3>>> { }
+
+ static void echo(Object o) { System.out.println(o); }
+
+ static {
+ enum Letters { OTHER, ALPHA, BETA }
+
+ Letters other = Letters.OTHER;
+
+ switch (other) {
+ case Letters alpha when Letters.ALPHA == alpha:
+ { echo(alpha); break; }
+ case Letters beta when Letters.BETA == beta:
+ { echo(beta); break; }
+ default: { echo(other); }
+ }
+
+ echo(switch (other) {
+ case Letters alpha when Letters.ALPHA == alpha
+ -> alpha;
+ case Letters beta when Letters.BETA == beta
+ -> beta;
+ default -> other;
+ });
+
+ switch (null) {
+ case String str when !"<empty>".equals(switch (str) {
+ case String str_ when
+ Predicate.<String>not(text ->
+ !text.isEmpty())
+ .test(str_)
+ -> "<empty>";
+ case String str_ -> str_;
+ }): { echo(str); break; }
+ case null: default: { echo("Other"); }
+ }
+
+ echo(switch (null) {
+ case String str when !"<empty>".equals(
+ switch (str) {
+ case String str_ when
+ Predicate.<String>not(text ->
+ !text.isEmpty())
+ .test(str_)
+ -> "<empty>";
+ case String str_ -> str_;
+ }) -> str;
+ case null, default -> "Other";
+ });
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_method_references.java b/runtime/syntax/testdir/input/java_method_references.java
new file mode 100644
index 0000000..d9cdf42
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_method_references.java
@@ -0,0 +1,186 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_generics = 1
+
+
+import java.lang.invoke.MethodHandle;
+import java.util.function.BiPredicate;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.IntFunction;
+import java.util.function.IntSupplier;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+import java.util.function.ToIntFunction;
+import java.util.function.UnaryOperator;
+
+class MethodReferencesTests
+{
+ static {
+ // Primary :: [TypeArguments] Identifier
+ try {
+ Runnable r1 = ((Runtime) null)::gc;
+ } catch (NullPointerException expected) {
+ }
+
+ Supplier<Integer> s1 = ((Number) 0)::hashCode;
+ Supplier<Integer> s2 = ((Comparable<?>) '\0')::hashCode;
+ Supplier<Integer> s3 = ((Comparable<?>) false)::hashCode;
+ Supplier<Integer> s4 = "::"::hashCode;
+ Supplier<Class<?>> s5 = int[].class::arrayType;
+ Supplier<Integer> s6 = new MethodReferencesTests() ::
+ hashCode;
+ Supplier<Integer> s7 = ((Number)
+ (new MethodReferencesTests().xy)[0])::intValue;
+ Supplier<int[]> s8 = new MethodReferencesTests().xy::
+ clone;
+ Consumer<Object> c1 = System.out :: println;
+ Supplier<byte[]> s9 = ((Supplier<String>) ()->"()").get()
+ ::getBytes;
+ Supplier<String> sa = ((Supplier<String>)
+ ((Supplier<String>) ((Supplier<String>)
+ ((Supplier<String>) ((Supplier<String>)
+ () -> "() -> ()")
+ ::toString)
+ ::toString)
+ ::get)
+ ::toString)
+ ::toString;
+
+ // ExpressionName :: [TypeArguments] Identifier
+ // ReferenceType :: [TypeArguments] Identifier
+ Function<String, IntSupplier> f1 = s ->
+ s :: length;
+ Function<int[][], Supplier<int[]>> f2 = ii ->
+ ((int[]) (ii.length > 0 ? ii[0] : ii))
+ :: clone;
+ UnaryOperator<String> uo1 = String::valueOf;
+ ToIntFunction<String> tif1 = s -> s.transform(
+ String :: length);
+
+ // ClassType :: [TypeArguments] new
+ // ArrayType :: new
+ Function<Object, C2> f3 = C2::<Object>new;
+ Function<C2, C2.C21> f4 = pci -> pci.new
+ <String>C21(null); // Cf. "d".
+ Supplier<C1<?>> sb = C1::new;
+ Function<Byte, C1<?>> f5 = C1<Void> :: <Byte> new;
+ IntFunction<C1<?>[]> if1 = C1<?>[] :: new;
+ IntFunction<byte[]> if2 = byte[] :: new;
+ }
+
+ final int[] xy = { 0, 1 };
+
+ // super :: [TypeArguments] Identifier
+ // TypeName . super :: [TypeArguments] Identifier
+ <T> MethodReferencesTests()
+ {
+ Predicate<T> p1 = MethodReferencesTests.super::equals;
+ Predicate<T> p2 = MethodReferencesTests.this::equals;
+ }
+
+ interface I4<T> extends I3<T>
+ {
+ default Predicate<T> superEqualist()
+ {
+ return I3
+ .super::equals; /* "a" */
+ }
+ }
+
+ interface I3<T> extends I2<T>
+ {
+ default Predicate<T> superEqualist()
+ {
+ return I2.
+ super::equals; /* "b" */
+ }
+ }
+
+ interface I2<T> extends I1<T>
+ {
+ default Predicate<T> superEqualist()
+ { /* Non-capturing gymnastics for super::equals. */
+ return Function.<Function<MethodHandle,
+ Predicate<T>>>
+ identity()
+ .apply(mh -> o -> MethodReferencesTests
+ .invokePredicate(mh, o))
+ .apply(EQUALS.bindTo(this));
+ }
+ }
+
+ interface I1<T>
+ {
+ default Predicate<T> equalist()
+ { /* Non-capturing gymnastics for this::equals. */
+ return Function.<Function<I1<T>, Predicate<T>>>
+ identity()
+ .apply(that -> o -> Function
+ .<BiPredicate<I1<T>, T>>
+ identity()
+ .apply(I1<T>:: /* "c" */
+ equals)
+ .test(that, o))
+ .apply(I1.this);
+ }
+ }
+
+ static <T> boolean invokePredicate(MethodHandle mh, T o)
+ {
+ try {
+ return (boolean) mh.invokeExact(o);
+ } catch (Throwable th) {
+ throw new RuntimeException(th);
+ }
+ }
+
+ private static final MethodHandle EQUALS;
+
+ static {
+ try {
+ EQUALS = java.lang.invoke.MethodHandles.lookup()
+ .findSpecial(
+ I1.class,
+ "equals",
+ java.lang.invoke.MethodType.methodType(
+ boolean.class,
+ Object.class),
+ I2.class);
+ } catch (ReflectiveOperationException e) {
+ throw new Error(e);
+ }
+ }
+
+ static class C1<T>
+ {
+ C1() { }
+ <A> C1(A dummy) { }
+ }
+
+ static class C2
+ {
+ C2() { <String> this(""); }
+
+ <A> C2(A dummy)
+ {
+ C2.stringer().apply(((Function<C2, C2.C21>)
+ C2.C21::new) /* "d" */
+ .apply(C2.this));
+ }
+
+ class C21
+ {
+ C21() { <String> this(""); }
+
+ <B> C21(B dummy)
+ {
+ C2.stringer().apply(C2.this);
+ }
+ }
+
+ static <T extends Object> Function<T, String> stringer()
+ {
+ return T::toString; /* "e" */
+ }
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_method_references_signature.java b/runtime/syntax/testdir/input/java_method_references_signature.java
new file mode 100644
index 0000000..a154b12
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_method_references_signature.java
@@ -0,0 +1,186 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP let g:java_highlight_generics = 1
+
+import java.lang.invoke.MethodHandle;
+import java.util.function.BiPredicate;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.IntFunction;
+import java.util.function.IntSupplier;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+import java.util.function.ToIntFunction;
+import java.util.function.UnaryOperator;
+
+class MethodReferences$Tests
+{
+ static {
+ // Primary :: [TypeArguments] Identifier
+ try {
+ Runnable r1 = ((Runtime) null)::gc;
+ } catch (NullPointerException expected) {
+ }
+
+ Supplier<Integer> s1 = ((Number) 0)::hashCode;
+ Supplier<Integer> s2 = ((Comparable<?>) '\0')::hashCode;
+ Supplier<Integer> s3 = ((Comparable<?>) false)::hashCode;
+ Supplier<Integer> s4 = "::"::hashCode;
+ Supplier<Class<?>> s5 = int[].class::arrayType;
+ Supplier<Integer> s6 = new MethodReferences$Tests() ::
+ hashCode;
+ Supplier<Integer> s7 = ((Number)
+ (new MethodReferences$Tests().xy)[0])::intValue;
+ Supplier<int[]> s8 = new MethodReferences$Tests().xy::
+ clone;
+ Consumer<Object> c1 = System.out :: println;
+ Supplier<byte[]> s9 = ((Supplier<String>) ()->"()").get()
+ ::getBytes;
+ Supplier<String> sa = ((Supplier<String>)
+ ((Supplier<String>) ((Supplier<String>)
+ ((Supplier<String>) ((Supplier<String>)
+ () -> "() -> ()")
+ ::toString)
+ ::toString)
+ ::get)
+ ::toString)
+ ::toString;
+
+ // ExpressionName :: [TypeArguments] Identifier
+ // ReferenceType :: [TypeArguments] Identifier
+ Function<String, IntSupplier> f1 = s ->
+ s :: length;
+ Function<int[][], Supplier<int[]>> f2 = ii ->
+ ((int[]) (ii.length > 0 ? ii[0] : ii))
+ :: clone;
+ UnaryOperator<String> uo1 = String::valueOf;
+ ToIntFunction<String> tif1 = s -> s.transform(
+ String :: length);
+
+ // ClassType :: [TypeArguments] new
+ // ArrayType :: new
+ Function<Object, C2> f3 = C2::<Object>new;
+ Function<C2, C2.C21> f4 = pci -> pci.new
+ <String>C21(null); // Cf. "d".
+ Supplier<C1<?>> sb = C1::new;
+ Function<Byte, C1<?>> f5 = C1<Void> :: <Byte> new;
+ IntFunction<C1<?>[]> if1 = C1<?>[] :: new;
+ IntFunction<byte[]> if2 = byte[] :: new;
+ }
+
+ final int[] xy = { 0, 1 };
+
+ // super :: [TypeArguments] Identifier
+ // TypeName . super :: [TypeArguments] Identifier
+ <T> MethodReferences$Tests()
+ {
+ Predicate<T> p1 = MethodReferences$Tests.super::equals;
+ Predicate<T> p2 = MethodReferences$Tests.this::equals;
+ }
+
+ interface I4<T> extends I3<T>
+ {
+ default Predicate<T> superEqualist()
+ {
+ return I3
+ .super::equals; /* "a" */
+ }
+ }
+
+ interface I3<T> extends I2<T>
+ {
+ default Predicate<T> superEqualist()
+ {
+ return I2.
+ super::equals; /* "b" */
+ }
+ }
+
+ interface I2<T> extends I1<T>
+ {
+ default Predicate<T> superEqualist()
+ { /* Non-capturing gymnastics for super::equals. */
+ return Function.<Function<MethodHandle,
+ Predicate<T>>>
+ identity()
+ .apply(mh -> o -> MethodReferences$Tests
+ .invokePredicate(mh, o))
+ .apply(EQUALS.bindTo(this));
+ }
+ }
+
+ interface I1<T>
+ {
+ default Predicate<T> equalist()
+ { /* Non-capturing gymnastics for this::equals. */
+ return Function.<Function<I1<T>, Predicate<T>>>
+ identity()
+ .apply(that -> o -> Function
+ .<BiPredicate<I1<T>, T>>
+ identity()
+ .apply(I1<T>:: /* "c" */
+ equals)
+ .test(that, o))
+ .apply(I1.this);
+ }
+ }
+
+ static <T> boolean invokePredicate(MethodHandle mh, T o)
+ {
+ try {
+ return (boolean) mh.invokeExact(o);
+ } catch (Throwable th) {
+ throw new RuntimeException(th);
+ }
+ }
+
+ private static final MethodHandle EQUALS;
+
+ static {
+ try {
+ EQUALS = java.lang.invoke.MethodHandles.lookup()
+ .findSpecial(
+ I1.class,
+ "equals",
+ java.lang.invoke.MethodType.methodType(
+ boolean.class,
+ Object.class),
+ I2.class);
+ } catch (ReflectiveOperationException e) {
+ throw new Error(e);
+ }
+ }
+
+ static class C1<T>
+ {
+ C1() { }
+ <A> C1(A dummy) { }
+ }
+
+ static class C2
+ {
+ C2() { <String> this(""); }
+
+ <A> C2(A dummy)
+ {
+ C2.stringer().apply(((Function<C2, C2.C21>)
+ C2.C21::new) /* "d" */
+ .apply(C2.this));
+ }
+
+ class C21
+ {
+ C21() { <String> this(""); }
+
+ <B> C21(B dummy)
+ {
+ C2.stringer().apply(C2.this);
+ }
+ }
+
+ static <T extends Object> Function<T, String> stringer()
+ {
+ return T::toString; /* "e" */
+ }
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_methods_indent2.java b/runtime/syntax/testdir/input/java_methods_indent2.java
index 58a6900..3754cc4 100644
--- a/runtime/syntax/testdir/input/java_methods_indent2.java
+++ b/runtime/syntax/testdir/input/java_methods_indent2.java
@@ -84,9 +84,21 @@ abstract class Indent2MethodsTests
enum E2
{
@SuppressWarnings("bespoke") A("a"),
- B("b"),
- C("c"), D("d"),
- E("e"), F("f"), G("g"), H("h");
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
final String s;
private E2(String s) { this.s = s; }
+ private <δ> E2(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
}
diff --git a/runtime/syntax/testdir/input/java_methods_indent2_signature.java b/runtime/syntax/testdir/input/java_methods_indent2_signature.java
new file mode 100644
index 0000000..05e633b
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_methods_indent2_signature.java
@@ -0,0 +1,104 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'indent2'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP set encoding=utf-8 termencoding=utf-8
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+abstract class Indent2$MethodsTests
+{ // DO NOT retab! THIS FILE; REMEMBER ABOUT testdir/ftplugin.
+ // TYPES.
+ record Τʬ<α>(α a) { }
+
+ enum E
+ {
+ A("a"), B("b"), C("c"), D("d"),
+ E("e"), F("f"), G("g"), H("h");
+ final String s;
+ private E(String s) { this.s = s; }
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @java.lang.annotation.Repeatable(TÉggablɘs.class)
+ @interface TÉggablɘ
+ {
+ String[] value() default "";
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @interface TÉggablɘs
+ {
+ TÉggablɘ[] value();
+ }
+
+ interface Stylable<Α>
+ {
+ default void ascii$0_() { }
+ default Α μʭʭ$0_() { return null; }
+ }
+
+ // FIELDS.
+ private static final Class<?> CLASS_LOCK = classLock();
+
+ private final Object instanceLock = new Object();
+
+ // CONSTRUCTORS.
+ @TÉggablɘ @TÉggablɘ protected Indent2$MethodsTests() { }
+ <T extends Comparable<T>> Indent2$MethodsTests(T t, Void v) { }
+ private <T extends Comparable<T>> Indent2$MethodsTests(T t) { }
+
+ // METHODS.
+ @TÉggablɘ @TÉggablɘ abstract void ascii$0_(////////////////
+ );
+ @TÉggablɘ @TÉggablɘ abstract <α, β> Τʬ<α> μʭʭ$0_(
+ @SuppressWarnings("bespoke") β b);
+
+ @TÉggablɘ private native void ascii$1_(/*////////////*/);
+ @TÉggablɘ private native <α, β> Τʬ<α>[] μʭʭ$1_(
+ java.util.function.Function<β, Τʬ<α>[]> ƒ);
+
+ void Ascii$2_() { }
+ <T, U extends Stylable<T>> void Μʭʭ$2_(U u) { }
+
+ static final native synchronized void ascii$98_();
+ static final native synchronized <α, β> Τʬ<α>[][] μʭʭ$98_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ);
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp void ascii$99_()
+ { ascii$98_(); }
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp <α, β> Τʬ<α>[] μʭʭ$99_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ)
+ {
+ return
+ Indent2$MethodsTests.<α, β>μʭʭ$98_(ƒ)[0];
+ }
+
+ public static Class<?> classLock() { return Indent2$MethodsTests.class; }
+
+ @Override @SuppressWarnings("cast")
+ public String toString() { return (String) "Indent2$MethodsTests"; }
+}
+
+enum E2$
+{
+ @SuppressWarnings("bespoke") A("a"),
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
+ final String s;
+ private E2$(String s) { this.s = s; }
+ private <δ> E2$(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
+}
diff --git a/runtime/syntax/testdir/input/java_methods_indent4.java b/runtime/syntax/testdir/input/java_methods_indent4.java
index 972cdf3..8fc05c0 100644
--- a/runtime/syntax/testdir/input/java_methods_indent4.java
+++ b/runtime/syntax/testdir/input/java_methods_indent4.java
@@ -84,9 +84,21 @@ abstract class Indent4MethodsTests
enum E4
{
@SuppressWarnings("bespoke") A("a"),
- B("b"),
- C("c"), D("d"),
- E("e"), F("f"), G("g"), H("h");
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
final String s;
private E4(String s) { this.s = s; }
+ private <δ> E4(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
}
diff --git a/runtime/syntax/testdir/input/java_methods_indent4_signature.java b/runtime/syntax/testdir/input/java_methods_indent4_signature.java
new file mode 100644
index 0000000..f21d95d
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_methods_indent4_signature.java
@@ -0,0 +1,104 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'indent4'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP set encoding=utf-8 termencoding=utf-8
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+abstract class Indent4$MethodsTests
+{ // DO NOT retab! THIS FILE; REMEMBER ABOUT testdir/ftplugin.
+ // TYPES.
+ record Τʬ<α>(α a) { }
+
+ enum E
+ {
+ A("a"), B("b"), C("c"), D("d"),
+ E("e"), F("f"), G("g"), H("h");
+ final String s;
+ private E(String s) { this.s = s; }
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @java.lang.annotation.Repeatable(TÉggablɘs.class)
+ @interface TÉggablɘ
+ {
+ String[] value() default "";
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @interface TÉggablɘs
+ {
+ TÉggablɘ[] value();
+ }
+
+ interface Stylable<Α>
+ {
+ default void ascii$0_() { }
+ default Α μʭʭ$0_() { return null; }
+ }
+
+ // FIELDS.
+ private static final Class<?> CLASS_LOCK = classLock();
+
+ private final Object instanceLock = new Object();
+
+ // CONSTRUCTORS.
+ @TÉggablɘ @TÉggablɘ protected Indent4$MethodsTests() { }
+ <T extends Comparable<T>> Indent4$MethodsTests(T t, Void v) { }
+ private <T extends Comparable<T>> Indent4$MethodsTests(T t) { }
+
+ // METHODS.
+ @TÉggablɘ @TÉggablɘ abstract void ascii$0_(////////////////
+ );
+ @TÉggablɘ @TÉggablɘ abstract <α, β> Τʬ<α> μʭʭ$0_(
+ @SuppressWarnings("bespoke") β b);
+
+ @TÉggablɘ private native void ascii$1_(/*////////////*/);
+ @TÉggablɘ private native <α, β> Τʬ<α>[] μʭʭ$1_(
+ java.util.function.Function<β, Τʬ<α>[]> ƒ);
+
+ void Ascii$2_() { }
+ <T, U extends Stylable<T>> void Μʭʭ$2_(U u) { }
+
+ static final native synchronized void ascii$98_();
+ static final native synchronized <α, β> Τʬ<α>[][] μʭʭ$98_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ);
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp void ascii$99_()
+ { ascii$98_(); }
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp <α, β> Τʬ<α>[] μʭʭ$99_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ)
+ {
+ return
+ Indent4$MethodsTests.<α, β>μʭʭ$98_(ƒ)[0];
+ }
+
+ public static Class<?> classLock() { return Indent4$MethodsTests.class; }
+
+ @Override @SuppressWarnings("cast")
+ public String toString() { return (String) "Indent4$MethodsTests"; }
+}
+
+enum E4$
+{
+ @SuppressWarnings("bespoke") A("a"),
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
+ final String s;
+ private E4$(String s) { this.s = s; }
+ private <δ> E4$(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
+}
diff --git a/runtime/syntax/testdir/input/java_methods_indent8.java b/runtime/syntax/testdir/input/java_methods_indent8.java
index 40fd26b..d27830c 100644
--- a/runtime/syntax/testdir/input/java_methods_indent8.java
+++ b/runtime/syntax/testdir/input/java_methods_indent8.java
@@ -84,9 +84,21 @@ abstract class Indent8MethodsTests
enum E8
{
@SuppressWarnings("bespoke") A("a"),
- B("b"),
- C("c"), D("d"),
- E("e"), F("f"), G("g"), H("h");
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
final String s;
private E8(String s) { this.s = s; }
+ private <δ> E8(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
}
diff --git a/runtime/syntax/testdir/input/java_methods_indent8_signature.java b/runtime/syntax/testdir/input/java_methods_indent8_signature.java
new file mode 100644
index 0000000..8d82196
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_methods_indent8_signature.java
@@ -0,0 +1,104 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'indent8'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP set encoding=utf-8 termencoding=utf-8
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+abstract class Indent8$MethodsTests
+{ // DO NOT retab! THIS FILE; REMEMBER ABOUT testdir/ftplugin.
+ // TYPES.
+ record Τʬ<α>(α a) { }
+
+ enum E
+ {
+ A("a"), B("b"), C("c"), D("d"),
+ E("e"), F("f"), G("g"), H("h");
+ final String s;
+ private E(String s) { this.s = s; }
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @java.lang.annotation.Repeatable(TÉggablɘs.class)
+ @interface TÉggablɘ
+ {
+ String[] value() default "";
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @interface TÉggablɘs
+ {
+ TÉggablɘ[] value();
+ }
+
+ interface Stylable<Α>
+ {
+ default void ascii$0_() { }
+ default Α μʭʭ$0_() { return null; }
+ }
+
+ // FIELDS.
+ private static final Class<?> CLASS_LOCK = classLock();
+
+ private final Object instanceLock = new Object();
+
+ // CONSTRUCTORS.
+ @TÉggablɘ @TÉggablɘ protected Indent8$MethodsTests() { }
+ <T extends Comparable<T>> Indent8$MethodsTests(T t, Void v) { }
+ private <T extends Comparable<T>> Indent8$MethodsTests(T t) { }
+
+ // METHODS.
+ @TÉggablɘ @TÉggablɘ abstract void ascii$0_(////////////////
+ );
+ @TÉggablɘ @TÉggablɘ abstract <α, β> Τʬ<α> μʭʭ$0_(
+ @SuppressWarnings("bespoke") β b);
+
+ @TÉggablɘ private native void ascii$1_(/*////////////*/);
+ @TÉggablɘ private native <α, β> Τʬ<α>[] μʭʭ$1_(
+ java.util.function.Function<β, Τʬ<α>[]> ƒ);
+
+ void Ascii$2_() { }
+ <T, U extends Stylable<T>> void Μʭʭ$2_(U u) { }
+
+ static final native synchronized void ascii$98_();
+ static final native synchronized <α, β> Τʬ<α>[][] μʭʭ$98_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ);
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp void ascii$99_()
+ { ascii$98_(); }
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp <α, β> Τʬ<α>[] μʭʭ$99_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ)
+ {
+ return
+ Indent8$MethodsTests.<α, β>μʭʭ$98_(ƒ)[0];
+ }
+
+ public static Class<?> classLock() { return Indent8$MethodsTests.class; }
+
+ @Override @SuppressWarnings("cast")
+ public String toString() { return (String) "Indent8$MethodsTests"; }
+}
+
+enum E8$
+{
+ @SuppressWarnings("bespoke") A("a"),
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
+ final String s;
+ private E8$(String s) { this.s = s; }
+ private <δ> E8$(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
+}
diff --git a/runtime/syntax/testdir/input/java_methods_style_signature.java b/runtime/syntax/testdir/input/java_methods_style_signature.java
new file mode 100644
index 0000000..8e3b4d6
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_methods_style_signature.java
@@ -0,0 +1,82 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP set encoding=utf-8 termencoding=utf-8
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+abstract class Style$MethodsTests
+{
+ // TYPES.
+ record Τʬ<α>(α a) { }
+
+ enum E
+ {
+ A("a"), B("b"), C("c"), D("d"),
+ E("e"), F("f"), G("g"), H("h");
+ final String s;
+ private E(String s) { this.s = s; }
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @java.lang.annotation.Repeatable(TÉggablɘs.class)
+ @interface TÉggablɘ
+ {
+ String[] value() default "";
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @interface TÉggablɘs
+ {
+ TÉggablɘ[] value();
+ }
+
+ interface Stylable<Α>
+ {
+ default void ascii$0_() { }
+ default Α μʭʭ$0_() { return null; }
+ }
+
+ // FIELDS.
+ private static final Class<?> CLASS_LOCK = classLock();
+
+ private final Object instanceLock = new Object();
+
+ // CONSTRUCTORS.
+ @TÉggablɘ @TÉggablɘ protected Style$MethodsTests() { }
+ <T extends Comparable<T>> Style$MethodsTests(T t, Void v) { }
+ private <T extends Comparable<T>> Style$MethodsTests(T t) { }
+
+ // METHODS.
+ @TÉggablɘ @TÉggablɘ abstract void ascii$0_(////////////////
+ );
+ @TÉggablɘ @TÉggablɘ abstract <α, β> Τʬ<α> μʭʭ$0_(
+ @SuppressWarnings("bespoke") β b);
+
+ @TÉggablɘ private native void ascii$1_(/*////////////*/);
+ @TÉggablɘ private native <α, β> Τʬ<α>[] μʭʭ$1_(
+ java.util.function.Function<β, Τʬ<α>[]> ƒ);
+
+ void Ascii$2_() { }
+ <T, U extends Stylable<T>> void Μʭʭ$2_(U u) { }
+
+ static final native synchronized void ascii$98_();
+ static final native synchronized <α, β> Τʬ<α>[][] μʭʭ$98_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ);
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp void ascii$99_()
+ { ascii$98_(); }
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp <α, β> Τʬ<α>[] μʭʭ$99_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ)
+ {
+ return
+ Style$MethodsTests.<α, β>μʭʭ$98_(ƒ)[0];
+ }
+
+ public static Class<?> classLock() { return Style$MethodsTests.class; }
+
+ @Override @SuppressWarnings("cast")
+ public String toString() { return (String) "Style$MethodsTests"; }
+}
diff --git a/runtime/syntax/testdir/input/java_switch.java b/runtime/syntax/testdir/input/java_switch.java
index 14b2e11..d82fcb1 100644
--- a/runtime/syntax/testdir/input/java_switch.java
+++ b/runtime/syntax/testdir/input/java_switch.java
@@ -55,7 +55,7 @@ class SwitchTests // JDK 21+.
case null: { echo("null"); break; }
case Letters[] ll: { echo("SwitchTests$1Letters[]"); break; }
default: { echo("java.lang.Object"); break; }
- };
+ }
echo(switch (o) {
case null -> "null";
@@ -69,7 +69,7 @@ class SwitchTests // JDK 21+.
case 'a': { echo('a'); break; }
case 'b': { echo('b'); break; }
default: { echo('\u0000'); break; }
- };
+ }
echo(switch (ch) {
case 'a' -> 'a';
@@ -83,7 +83,7 @@ class SwitchTests // JDK 21+.
case ((byte) 0): { echo((byte) 0); break; }
case ((byte) 1): { echo((byte) 1); break; }
default: { echo((byte) -1); break; }
- };
+ }
echo(switch (b) {
case ((byte) 0) -> (byte) 0;
@@ -97,7 +97,7 @@ class SwitchTests // JDK 21+.
case ((short) 0): { echo((short) 0); break; }
case ((short) 1): { echo((short) 1); break; }
default: { echo((short) -1); break; }
- };
+ }
echo(switch (sh) {
case ((short) 0) -> (short) 0;
@@ -111,7 +111,7 @@ class SwitchTests // JDK 21+.
case 0b0__00___000: { echo(0); break; }
case 0x000___00__1: { echo(1); break; }
default: { echo(-1); break; }
- };
+ }
echo(switch (i) {
case 0_0_0_0_0 -> 0;
diff --git a/runtime/syntax/testdir/input/java_unfoldment.java b/runtime/syntax/testdir/input/java_unfoldment.java
index 78dd234..ffea216 100644
--- a/runtime/syntax/testdir/input/java_unfoldment.java
+++ b/runtime/syntax/testdir/input/java_unfoldment.java
@@ -39,7 +39,7 @@ class UnfoldingTests {
break;
}
default: ;
- };
+ }
}
{ Object bb = ((Object) new byte[]{}); }
@@ -51,6 +51,18 @@ out: {
} while (false);
}
}
+/*\\\*/ {
+ (new java.util.function.Function<Object, Object>() {
+ /**
+ * {@inheritDoc} */
+ public Object apply(Object o) { return o; };
+ }).apply(
+ (new java.util.function.Function<Object, Object>() {
+ /** {@inheritDoc}
+ */
+ public Object apply(Object o) { return o; };
+ }));
+ }
/**
* No operation.
diff --git a/runtime/syntax/testdir/input/progress_comments.p b/runtime/syntax/testdir/input/progress_comments.p
new file mode 100644
index 0000000..dd831fe
--- /dev/null
+++ b/runtime/syntax/testdir/input/progress_comments.p
@@ -0,0 +1,45 @@
+/*
+ * VIM_TEST_SETUP set filetype=progress
+ */
+
+define variable customer_name as character no-undo.
+
+/* The test setup above is an example of a multi-line comment.
+This is too; the leading * and left-hand alignment are not required. */
+for each customer no-lock
+ where customer.customer_id = 12345
+:
+ assign cust_name = customer.customer_name. /* Comments can also appear
+ at the end of a line. */
+end. /* for each customer */
+
+/* Comments can be /* nested */. Here's the same query as above, but
+commented out this time:
+
+for each customer no-lock
+ where customer.customer_id = 12345
+:
+ assign cust_name = customer.customer_name. /* Comments can also appear
+ at the end of a line. */
+end. /* for each customer */
+
+TODO: Note that /*/ does not end the comment, because it actually starts a
+new comment whose first character is a '/'. Now we need two end-comment
+markers to return to actual code. */ */
+
+display customer_name.
+
+// This is the single-line comment syntax.
+
+//No space is required after the slashes. Also, a /* here does not begin a
+//new block comment.
+
+for each supplier no-lock:
+ /* However, a block comment can end inside (what looks like) a
+ single-line comment, because the slashes are just text as far as the
+ // block comment is concerned. */
+ display supplier.
+
+ // TODO: Observe that todo highlighting works in line comments too.
+end.
+
diff --git a/runtime/syntax/testdir/input/selftestdir/README.txt b/runtime/syntax/testdir/input/selftestdir/README.txt
new file mode 100644
index 0000000..035701d
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/README.txt
@@ -0,0 +1,10 @@
+The test files with made-up syntax in this directory serve for additional
+linewise checks to be manually performed whenever the algorithm managing
+screen dump file generation is modified (../../runtest.vim#RunTest()).
+
+This is mainly used for debugging and testing the syntax test suite.
+
+Please test any changes as follows:
+ cd runtime/syntax/
+ VIM_SYNTAX_SELF_TESTING=1 make clean test
+
diff --git a/runtime/syntax/testdir/input/vim_keymap.vim b/runtime/syntax/testdir/input/selftestdir/dots_01
index 424d437..cf78d97 100644
--- a/runtime/syntax/testdir/input/vim_keymap.vim
+++ b/runtime/syntax/testdir/input/selftestdir/dots_01
@@ -1,27 +1,60 @@
-" Vim Keymap file for syntax testing
-
-" Maintainer: Doug Kearns <dougkearns@gmail.com>
-" Last Changed: 2023 Nov 21
-
-scriptencoding utf-8
-
-let b:keymap_name = "syntax-test"
-
-loadkeymap
-
-" Line comment
-
- " Another line comment
-
-a A Basic mapping
-'a á More than one char in first column
-
-" Special notation
-<char-62> B Special notation allowed in LHS - decimal
-c <char-0103> Special notation allowed in RHS - octal
-<char-0x0064> <char-0x0044> Special notation allowed in LHS and RHS - hexadecimal
-
-" Vim-script comment characters
-# <char-0x00a3> Line should not match as a Vim9-script comment
-\" “ Line should not match as a legacy-script comment
-: " Line should not match as a legacy-script comment
+..........................................................................1
+..........................................................................2
+..........................................................................3
+..........................................................................4
+..............................winwidth(0): 75.............................5
+.............................winheight(0): 19.............................6
+.................................ruler....................................7
+..........................................................................8
+..........................................................................9
+.........................................................................10
+.........................................................................11
+.........................................................................12
+.........................................................................13
+.........................................................................14
+.........................................................................15
+.........................................................................16
+.........................................................................17
+.........................................................................18
+.........................................................................19
+.........................................................................20
+.........................................................................21
+.........................................................................22
+.........................................................................23
+.........................................................................24
+.........................................................................25
+.........................................................................26
+.........................................................................27
+.........................................................................28
+.........................................................................29
+.........................................................................30
+.........................................................................31
+.........................................................................32
+.........................................................................33
+.........................................................................34
+.........................................................................35
+.........................................................................36
+.........................................................................37
+.........................................................................38
+.........................................................................39
+.........................................................................40
+.........................................................................41
+.........................................................................42
+.........................................................................43
+.........................................................................44
+.........................................................................45
+.........................................................................46
+.........................................................................47
+.........................................................................48
+.........................................................................49
+.........................................................................50
+.........................................................................51
+.........................................................................52
+.........................................................................53
+.........................................................................54
+.........................................................................55
+.........................................................................56
+.........................................................................57
+.........................................................................58
+.........................................................................59
+.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_02 b/runtime/syntax/testdir/input/selftestdir/dots_02
new file mode 100644
index 0000000..4748fa1
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_02
@@ -0,0 +1,30 @@
+1..........................................................................2
+3..........................................................................4
+5..........................................................................6
+7..........................................................................8
+9............................winwidth(0): 75...............................10
+11..........................winheight(0): 19...............................12
+13..............................ruler......................................14
+15.........................................................................16
+17.........................................................................18
+19.........................................................................20
+21.........................................................................22
+23.........................................................................24
+25.........................................................................26
+27.........................................................................28
+29.........................................................................30
+31.........................................................................32
+33.........................................................................34
+35.........................................................................36
+37.........................................................................38
+39.........................................................................40
+41.........................................................................42
+43.........................................................................44
+45.........................................................................46
+47.........................................................................48
+49.........................................................................50
+51.........................................................................52
+53.........................................................................54
+55.........................................................................56
+57.........................................................................58
+59.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_03 b/runtime/syntax/testdir/input/selftestdir/dots_03
new file mode 100644
index 0000000..a8a16e9
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_03
@@ -0,0 +1,20 @@
+1..........................................................................2..........................................................................3
+4..........................................................................5..........................................................................6
+7..........................................................................8..........................................................................9
+10.........................................................................11.........................................................................12
+13...........................winwidth(0): 75...............................14.........................................................................15
+16..........................winheight(0): 19...............................17.........................................................................18
+19..............................ruler......................................20.........................................................................21
+22.........................................................................23.........................................................................24
+25.........................................................................26.........................................................................27
+28.........................................................................29.........................................................................30
+31.........................................................................32.........................................................................33
+34.........................................................................35.........................................................................36
+37.........................................................................38.........................................................................39
+40.........................................................................41.........................................................................42
+43.........................................................................44.........................................................................45
+46.........................................................................47.........................................................................48
+49.........................................................................50.........................................................................51
+52.........................................................................53.........................................................................54
+55.........................................................................56.........................................................................57
+58.........................................................................59.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_04 b/runtime/syntax/testdir/input/selftestdir/dots_04
new file mode 100644
index 0000000..ac0a26a
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_04
@@ -0,0 +1,15 @@
+1..........................................................................2..........................................................................3..........................................................................4
+5..........................................................................6..........................................................................7..........................................................................8
+9..........................................................................10.........................................................................11.........................................................................12
+13.........................................................................14.........................................................................15.........................................................................16
+17...........................winwidth(0): 75...............................18.........................................................................19.........................................................................20
+21..........................winheight(0): 19...............................22.........................................................................23.........................................................................24
+25..............................ruler......................................26.........................................................................27.........................................................................28
+29.........................................................................30.........................................................................31.........................................................................32
+33.........................................................................34.........................................................................35.........................................................................36
+37.........................................................................38.........................................................................39.........................................................................40
+41.........................................................................42.........................................................................43.........................................................................44
+45.........................................................................46.........................................................................47.........................................................................48
+49.........................................................................50.........................................................................51.........................................................................52
+53.........................................................................54.........................................................................55.........................................................................56
+57.........................................................................58.........................................................................59.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_05 b/runtime/syntax/testdir/input/selftestdir/dots_05
new file mode 100644
index 0000000..2dfb5be
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_05
@@ -0,0 +1,12 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5
+6..........................................................................7..........................................................................8..........................................................................9..........................................................................10
+11.........................................................................12.........................................................................13.........................................................................14.........................................................................15
+16.........................................................................17.........................................................................18.........................................................................19.........................................................................20
+21...........................winwidth(0): 75...............................22.........................................................................23.........................................................................24.........................................................................25
+26..........................winheight(0): 19...............................27.........................................................................28.........................................................................29.........................................................................30
+31..............................ruler......................................32.........................................................................33.........................................................................34.........................................................................35
+36.........................................................................37.........................................................................38.........................................................................39.........................................................................40
+41.........................................................................42.........................................................................43.........................................................................44.........................................................................45
+46.........................................................................47.........................................................................48.........................................................................49.........................................................................50
+51.........................................................................52.........................................................................53.........................................................................54.........................................................................55
+56.........................................................................57.........................................................................58.........................................................................59.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_06 b/runtime/syntax/testdir/input/selftestdir/dots_06
new file mode 100644
index 0000000..87eaf76
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_06
@@ -0,0 +1,10 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6
+7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12
+13.........................................................................14.........................................................................15.........................................................................16.........................................................................17.........................................................................18
+19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24
+25...........................winwidth(0): 75...............................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30
+31..........................winheight(0): 19...............................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36
+37..............................ruler......................................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42
+43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48
+49.........................................................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54
+55.........................................................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_07 b/runtime/syntax/testdir/input/selftestdir/dots_07
new file mode 100644
index 0000000..801c470
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_07
@@ -0,0 +1,9 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7
+8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14
+15.........................................................................16.........................................................................17.........................................................................18.........................................................................19.........................................................................20.........................................................................21
+22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28
+29...........................winwidth(0): 75...............................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34.........................................................................35
+36..........................winheight(0): 19...............................37.........................................................................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42
+43..............................ruler......................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48.........................................................................49
+50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56
+57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_08 b/runtime/syntax/testdir/input/selftestdir/dots_08
new file mode 100644
index 0000000..2b7bdd9
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_08
@@ -0,0 +1,8 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8
+9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14.........................................................................15.........................................................................16
+17.........................................................................18.........................................................................19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24
+25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32
+33...........................winwidth(0): 75...............................34.........................................................................35.........................................................................36.........................................................................37.........................................................................38.........................................................................39.........................................................................40
+41..........................winheight(0): 19...............................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48
+49..............................ruler......................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56
+57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_09 b/runtime/syntax/testdir/input/selftestdir/dots_09
new file mode 100644
index 0000000..76b25e6
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_09
@@ -0,0 +1,7 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9
+10.........................................................................11.........................................................................12.........................................................................13.........................................................................14.........................................................................15.........................................................................16.........................................................................17.........................................................................18
+19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27
+28.........................................................................29.........................................................................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36
+37...........................winwidth(0): 75...............................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45
+46..........................winheight(0): 19...............................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54
+55..............................ruler......................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_10 b/runtime/syntax/testdir/input/selftestdir/dots_10
new file mode 100644
index 0000000..9d6a158
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_10
@@ -0,0 +1,6 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10
+11.........................................................................12.........................................................................13.........................................................................14.........................................................................15.........................................................................16.........................................................................17.........................................................................18.........................................................................19.........................................................................20
+21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30
+31...........................winwidth(0): 75...............................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36.........................................................................37.........................................................................38.........................................................................39.........................................................................40
+41..........................wihheight(0): 19...............................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48.........................................................................49.........................................................................50
+51..............................ruler......................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_11 b/runtime/syntax/testdir/input/selftestdir/dots_11
new file mode 100644
index 0000000..503b734
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_11
@@ -0,0 +1,6 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11
+12.........................................................................13.........................................................................14.........................................................................15.........................................................................16.........................................................................17.........................................................................18.........................................................................19.........................................................................20.........................................................................21.........................................................................22
+23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32.........................................................................33
+34...........................winwidth(0): 75...............................35.........................................................................36.........................................................................37.........................................................................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44
+45..........................winheight(0): 19...............................46.........................................................................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55
+56..............................ruler......................................57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64.........................................................................65.........................................................................66
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_12 b/runtime/syntax/testdir/input/selftestdir/dots_12
new file mode 100644
index 0000000..347feb2
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_12
@@ -0,0 +1,5 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12
+13.........................................................................14.........................................................................15.........................................................................16.........................................................................17.........................................................................18.........................................................................19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24
+25...........................winwidth(0): 75...............................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36
+37..........................winheight(0): 19...............................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48
+49..............................ruler......................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_13 b/runtime/syntax/testdir/input/selftestdir/dots_13
new file mode 100644
index 0000000..b177614
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_13
@@ -0,0 +1,5 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13
+14.........................................................................15.........................................................................16.........................................................................17.........................................................................18.........................................................................19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26
+27...........................winwidth(0): 75...............................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36.........................................................................37.........................................................................38.........................................................................39
+40..........................winheight(0): 19...............................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51.........................................................................52
+53..............................ruler......................................54.........................................................................55.........................................................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64.........................................................................65
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_14 b/runtime/syntax/testdir/input/selftestdir/dots_14
new file mode 100644
index 0000000..9a46c3e
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_14
@@ -0,0 +1,5 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14
+15.........................................................................16.........................................................................17.........................................................................18.........................................................................19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28
+29...........................winwidth(0): 75...............................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36.........................................................................37.........................................................................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42
+43..........................winheight(0): 19...............................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56
+57..............................ruler......................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64.........................................................................65.........................................................................66.........................................................................67.........................................................................68.........................................................................69.........................................................................70
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_15 b/runtime/syntax/testdir/input/selftestdir/dots_15
new file mode 100644
index 0000000..45fbef9
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_15
@@ -0,0 +1,4 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14.........................................................................15
+16...........................winwidth(0): 75...............................17.........................................................................18.........................................................................19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30
+31..........................winheight(0): 19...............................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36.........................................................................37.........................................................................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45
+46..............................ruler......................................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_16 b/runtime/syntax/testdir/input/selftestdir/dots_16
new file mode 100644
index 0000000..1af3caa
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_16
@@ -0,0 +1,4 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14.........................................................................15.........................................................................16
+17...........................winwidth(0): 75...............................18.........................................................................19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32
+33..........................winheight(0): 19...............................34.........................................................................35.........................................................................36.........................................................................37.........................................................................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48
+49..............................ruler......................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_17 b/runtime/syntax/testdir/input/selftestdir/dots_17
new file mode 100644
index 0000000..6dc5050
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_17
@@ -0,0 +1,4 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14.........................................................................15.........................................................................16.........................................................................17
+18...........................winwidth(0): 75...............................19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34
+35..........................winheight(0): 19...............................36.........................................................................37.........................................................................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51
+52...............................ruler.....................................53.........................................................................54.........................................................................55.........................................................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64.........................................................................65.........................................................................66.........................................................................67.........................................................................68
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_18 b/runtime/syntax/testdir/input/selftestdir/dots_18
new file mode 100644
index 0000000..f84a827
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_18
@@ -0,0 +1,4 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14.........................................................................15.........................................................................16.........................................................................17.........................................................................18
+19...........................winwidth(0): 75...............................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36
+37..........................winheight(0): 19...............................38.........................................................................39.........................................................................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54
+55...............................ruler.....................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64.........................................................................65.........................................................................66.........................................................................67.........................................................................68.........................................................................69.........................................................................70.........................................................................71.........................................................................72
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_19 b/runtime/syntax/testdir/input/selftestdir/dots_19
new file mode 100644
index 0000000..9f0ad00
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_19
@@ -0,0 +1,4 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5..........................................................................6..........................................................................7..........................................................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14.........................................................................15.........................................................................16.........................................................................17.........................................................................18.........................................................................19
+20...........................winwidth(0): 75...............................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36.........................................................................37.........................................................................38
+39..........................winheight(0): 19...............................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56.........................................................................57
+58...............................ruler.....................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64.........................................................................65.........................................................................66.........................................................................67.........................................................................68.........................................................................69.........................................................................70.........................................................................71.........................................................................72.........................................................................73.........................................................................74.........................................................................75.........................................................................76
diff --git a/runtime/syntax/testdir/input/selftestdir/dots_20 b/runtime/syntax/testdir/input/selftestdir/dots_20
new file mode 100644
index 0000000..ca3a93d
--- /dev/null
+++ b/runtime/syntax/testdir/input/selftestdir/dots_20
@@ -0,0 +1,2 @@
+1..........................................................................2..........................................................................3..........................................................................4..........................................................................5.............................winwidth(0): 75..............................6............................winheight(0): 19..............................7................................ruler.....................................8..........................................................................9..........................................................................10.........................................................................11.........................................................................12.........................................................................13.........................................................................14.........................................................................15.........................................................................16.........................................................................17.........................................................................18.........................................................................19.........................................................................20.........................................................................21.........................................................................22.........................................................................23.........................................................................24.........................................................................25.........................................................................26.........................................................................27.........................................................................28.........................................................................29.........................................................................30.........................................................................31.........................................................................32.........................................................................33.........................................................................34.........................................................................35.........................................................................36.........................................................................37.........................................................................38
+39.........................................................................40.........................................................................41.........................................................................42.........................................................................43.........................................................................44.........................................................................45.........................................................................46.........................................................................47.........................................................................48.........................................................................49.........................................................................50.........................................................................51.........................................................................52.........................................................................53.........................................................................54.........................................................................55.........................................................................56.........................................................................57.........................................................................58.........................................................................59.........................................................................60.........................................................................61.........................................................................62.........................................................................63.........................................................................64.........................................................................65.........................................................................66.........................................................................67.........................................................................68.........................................................................69.........................................................................70.........................................................................71.........................................................................72.........................................................................73.........................................................................74.........................................................................75.........................................................................76
diff --git a/runtime/syntax/testdir/input/vim9_ex_commands.vim b/runtime/syntax/testdir/input/vim9_ex_commands.vim
new file mode 100644
index 0000000..92ab9dc
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_ex_commands.vim
@@ -0,0 +1,1225 @@
+vim9script
+
+# Vim9 Ex commands
+
+# START NOT MATCHED
+:@
+:@@
+:Next
+:X
+# END NOT MATCHED
+
+:help
+ :help
+: help
+ : help
+
+:2match
+:3match
+:abbreviate
+:abclear
+:aboveleft
+:abstract
+:all
+:amenu
+:anoremenu
+:argadd
+:argdedupe
+:argdelete
+:argdo
+:argedit
+:argglobal
+:arglocal
+:args
+:argument
+:ascii
+:augroup Foo
+:augroup END
+:aunmenu
+:autocmd
+:badd
+:ball
+:balt
+:bdelete
+:behave mswin
+:behave xterm
+:belowright
+:bfirst
+:blast
+:bmodified
+:bnext
+:bNext
+:botright
+:bprevious
+:break
+:breakadd
+:breakdel
+:breaklist
+:brewind
+:browse
+:bufdo
+:buffer
+:buffers
+:bunload
+:bwipeout
+:cabbrev
+:cabclear
+:cabove
+:caddbuffer
+:caddexpr
+:caddfile
+:cafter
+:call
+:catch
+:cbefore
+:cbelow
+:cbottom
+:cbuffer
+:cc
+:cclose
+:cd
+:cdo
+:center
+:cexpr
+:cfdo
+:cfile
+:cfirst
+:cgetbuffer
+:cgetexpr
+:cgetfile
+:changes
+:chdir
+:checkpath
+:checktime
+:chistory
+:class
+:class
+:clast
+:clearjumps
+:clist
+:close
+:cmap
+:cmapclear
+:cmenu
+:cnewer
+:cnext
+:cNext
+:cnfile
+:cNfile
+:cnoreabbrev
+:cnoremap
+:cnoremenu
+:colder
+:colorscheme
+:comclear
+:command
+:compiler
+:confirm
+:const
+:continue
+:copen
+:copy
+:cpfile
+:cprevious
+:cquit
+:crewind
+:cscope
+:cstag
+:cunabbrev
+:cunmap
+:cunmenu
+:cwindow
+:debug
+:debuggreedy
+:def
+:defcompile
+:defcompile
+:defer
+:delcommand
+:delete
+:delfunction
+:delmarks
+:diffget
+:diffoff
+:diffpatch
+:diffput
+:diffsplit
+:diffthis
+:diffupdate
+:digraphs
+:disassemble
+:disassemble
+:display
+:djump
+:dl
+:dlist
+:doautoall
+:doautocmd
+:dp
+:drop
+:dsearch
+:dsplit
+:earlier
+:echo
+:echoconsole
+:echoerr
+:echohl
+:echomsg
+:echon
+:echowindow
+:edit
+:else
+:elseif
+:emenu
+:endclass
+:endclass
+:enddef
+:endenum
+:endfor
+:endfunction
+:endif
+:endinterface
+:endtry
+:endwhile
+:enew
+:enum
+:eval
+:ex
+:execute
+:exit
+:export
+:export
+:exusage
+:file
+:files
+:filetype
+:filter
+:final
+:finally
+:find
+:finish
+:first
+:fixdel
+:fold
+:foldclose
+:folddoclosed
+:folddoopen
+:foldopen
+:for
+:function
+:global/.../
+:goto
+:grep
+:grepadd
+:gui
+:gvim
+:hardcopy
+:help
+:helpclose
+:helpfind
+:helpgrep
+:helptags
+:hide
+:highlight
+:history
+:horizontal
+:iabbrev
+:iabclear
+:if
+:ijump
+:ilist
+:imap
+:imapclear
+:imenu
+:import
+:inoreabbrev
+:inoremap
+:inoremenu
+:interface
+:intro
+:isearch
+:isplit
+:iunabbrev
+:iunmap
+:iunmenu
+:join
+:jumps
+:k
+:keepalt
+:keepjumps
+:keepmarks
+:keeppatterns
+:labove
+:laddbuffer
+:laddexpr
+:laddfile
+:lafter
+:language
+:last
+:later
+:lbefore
+:lbelow
+:lbottom
+:lbuffer
+:lcd
+:lchdir
+:lclose
+:lcscope
+:ldo
+:left
+:leftabove
+:legacy
+:lexpr
+:lfdo
+:lfile
+:lfirst
+:lgetbuffer
+:lgetexpr
+:lgetfile
+:lgrep
+:lgrepadd
+:lhelpgrep
+:lhistory
+:list
+:ll
+:llast
+:llist
+:lmake
+:lmap
+:lmapclear
+:lnewer
+:lnext
+:lNext
+:lnfile
+:lNfile
+:lnoremap
+# :loadkeymap # disabled - runs until EOF
+:loadview
+:lockmarks
+:lockvar
+:lolder
+:lopen
+:lpfile
+:lprevious
+:lrewind
+:ls
+:ltag
+:lua
+:luado
+:luafile
+:lunmap
+:lvimgrep
+:lvimgrepadd
+:lwindow
+:make
+:mapclear
+:map
+:mark
+:marks
+:match
+:menu
+:menutranslate
+:messages
+:mkexrc
+:mksession
+:mkspell
+:mkview
+:mkvimrc
+:move
+:mzfile
+:mzscheme
+:nbclose
+:nbkey
+:nbstart
+:new
+:next
+:nmap
+:nmapclear
+:nmenu
+:nnoremap
+:nnoremenu
+:noautocmd
+:nohlsearch
+:noreabbrev
+:noremap
+:noremenu
+:normal
+:noswapfile
+:number
+:nunmap
+:nunmenu
+:oldfiles
+:omap
+:omapclear
+:omenu
+:only
+:onoremap
+:onoremenu
+:options
+:ounmap
+:ounmenu
+:ownsyntax
+:packadd
+:packloadall
+:pclose
+:pedit
+:perl
+:perldo
+:pop
+:popup
+:ppop
+:preserve
+:previous
+:print
+:profdel
+:profile
+:promptfind
+:promptrepl
+:psearch
+:ptag
+:ptfirst
+:ptjump
+:ptlast
+:ptnext
+:ptNext
+:ptprevious
+:ptrewind
+:ptselect
+:public
+:public
+:put
+:pwd
+:py3
+:py3do
+:py3file
+:pydo
+:pyfile
+:python
+:python3
+:pythonx
+:pyx
+:pyxdo
+:pyxfile
+:qall
+:quit
+:quitall
+:read
+:recover
+:redir
+:redo
+:redraw
+:redrawstatus
+:redrawtabline
+:registers
+:resize
+:retab
+:return
+:rewind
+:right
+:rightbelow
+:ruby
+:rubydo
+:rubyfile
+:rundo
+:runtime
+:rviminfo
+:sall
+:sandbox
+:sargument
+:saveas
+:sball
+:sbfirst
+:sblast
+:sbmodified
+:sbnext
+:sbNext
+:sbprevious
+:sbrewind
+:sbuffer
+:scriptencoding
+:scriptnames
+:scriptversion
+:scscope
+:set
+:setfiletype
+:setglobal
+:setlocal
+:sfind
+:sfirst
+:shell
+:sign
+:silent
+:simalt
+:slast
+:sleep
+:sleep!
+:smagic
+:smap
+:smapclear
+:smenu
+:smile
+:snext
+:sNext
+:snomagic
+:snoremap
+:snoremenu
+:sort
+:source
+:spelldump
+:spellgood
+:spellinfo
+:spellrare
+:spellrepall
+:spellundo
+:spellwrong
+:split
+:sprevious
+:srewind
+:stag
+:startgreplace
+:startinsert
+:startreplace
+:static
+:static
+:stjump
+:stop
+:stopinsert
+:stselect
+:substitute
+:sunhide
+:sunmap
+:sunmenu
+:suspend
+:sview
+:swapname
+:syncbind
+:syntax
+:syntime
+:tab
+:tabclose
+:tabdo
+:tabedit
+:tabfind
+:tabfirst
+:tablast
+:tabmove
+:tabnew
+:tabnext
+:tabNext
+:tabonly
+:tabprevious
+:tabrewind
+:tabs
+:tag
+:tags
+:tcd
+:tchdir
+:tcl
+:tcldo
+:tclfile
+:tearoff
+:terminal
+:tfirst
+:throw
+:tjump
+:tlast
+:tlmenu
+:tlnoremenu
+:tlunmenu
+:tmap
+:tmapclear
+:tmenu
+:tnext
+:tNext
+:tnoremap
+:topleft
+:tprevious
+:trewind
+:try
+:tselect
+:tunmap
+:tunmenu
+:type
+:unabbreviate
+:unabbreviate
+:undo
+:undojoin
+:undolist
+:unhide
+:unlockvar
+:unmap
+:unmenu
+:unsilent
+:update
+:var
+:verbose
+:version
+:vertical
+:vglobal/.../
+:view
+:vim9cmd
+# :vim9script
+:vimgrep
+:vimgrepadd
+:visual
+:viusage
+:vmap
+:vmapclear
+:vmenu
+:vnew
+:vnoremap
+:vnoremenu
+:vsplit
+:vunmap
+:vunmenu
+:wall
+:while
+:wincmd
+:windo
+:winpos
+:winsize
+:wnext
+:wNext
+:wprevious
+:wq
+:wqall
+:write
+:wundo
+:wviminfo
+:xall
+:xmap
+:xmapclear
+:xmenu
+:xnoremap
+:xnoremenu
+:xrestore
+:xunmap
+:xunmenu
+:yank
+:z
+
+Foo()|help
+Foo() | help
+Foo() |help
+Foo()| help
+
+Foo() | 2match
+Foo() | 3match
+Foo() | abbreviate
+Foo() | abclear
+Foo() | aboveleft
+Foo() | abstract
+Foo() | all
+Foo() | amenu
+Foo() | anoremenu
+Foo() | argadd
+Foo() | argdedupe
+Foo() | argdelete
+Foo() | argdo
+Foo() | argedit
+Foo() | argglobal
+Foo() | arglocal
+Foo() | args
+Foo() | argument
+Foo() | ascii
+Foo() | augroup Foo | augroup END
+Foo() | aunmenu
+Foo() | autocmd
+Foo() | badd
+Foo() | ball
+Foo() | balt
+Foo() | bdelete
+Foo() | behave mswin
+Foo() | behave xterm
+Foo() | belowright
+Foo() | bfirst
+Foo() | blast
+Foo() | bmodified
+Foo() | bnext
+Foo() | bNext
+Foo() | botright
+Foo() | bprevious
+Foo() | break
+Foo() | breakadd
+Foo() | breakdel
+Foo() | breaklist
+Foo() | brewind
+Foo() | browse
+Foo() | bufdo
+Foo() | buffer
+Foo() | buffers
+Foo() | bunload
+Foo() | bwipeout
+Foo() | cabbrev
+Foo() | cabclear
+Foo() | cabove
+Foo() | caddbuffer
+Foo() | caddexpr
+Foo() | caddfile
+Foo() | cafter
+Foo() | call
+Foo() | catch
+Foo() | cbefore
+Foo() | cbelow
+Foo() | cbottom
+Foo() | cbuffer
+Foo() | cc
+Foo() | cclose
+Foo() | cd
+Foo() | cdo
+Foo() | center
+Foo() | cexpr
+Foo() | cfdo
+Foo() | cfile
+Foo() | cfirst
+Foo() | cgetbuffer
+Foo() | cgetexpr
+Foo() | cgetfile
+Foo() | changes
+Foo() | chdir
+Foo() | checkpath
+Foo() | checktime
+Foo() | chistory
+Foo() | class
+Foo() | class
+Foo() | clast
+Foo() | clearjumps
+Foo() | clist
+Foo() | close
+Foo() | cmap
+Foo() | cmapclear
+Foo() | cmenu
+Foo() | cnewer
+Foo() | cnext
+Foo() | cNext
+Foo() | cnfile
+Foo() | cNfile
+Foo() | cnoreabbrev
+Foo() | cnoremap
+Foo() | cnoremenu
+Foo() | colder
+Foo() | colorscheme
+Foo() | comclear
+Foo() | command
+Foo() | compiler
+Foo() | confirm
+Foo() | const
+Foo() | continue
+Foo() | copen
+Foo() | copy
+Foo() | cpfile
+Foo() | cprevious
+Foo() | cquit
+Foo() | crewind
+Foo() | cscope
+Foo() | cstag
+Foo() | cunabbrev
+Foo() | cunmap
+Foo() | cunmenu
+Foo() | cwindow
+Foo() | debug
+Foo() | debuggreedy
+Foo() | def
+Foo() | defcompile
+Foo() | defcompile
+Foo() | defer
+Foo() | delcommand
+Foo() | delete
+Foo() | delfunction
+Foo() | delmarks
+Foo() | diffget
+Foo() | diffoff
+Foo() | diffpatch
+Foo() | diffput
+Foo() | diffsplit
+Foo() | diffthis
+Foo() | diffupdate
+Foo() | digraphs
+Foo() | disassemble
+Foo() | disassemble
+Foo() | display
+Foo() | djump
+Foo() | dl
+Foo() | dlist
+Foo() | doautoall
+Foo() | doautocmd
+Foo() | dp
+Foo() | drop
+Foo() | dsearch
+Foo() | dsplit
+Foo() | earlier
+Foo() | echo
+Foo() | echoconsole
+Foo() | echoerr
+Foo() | echohl
+Foo() | echomsg
+Foo() | echon
+Foo() | echowindow
+Foo() | edit
+Foo() | else
+Foo() | elseif
+Foo() | emenu
+Foo() | endclass
+Foo() | endclass
+Foo() | enddef
+Foo() | endenum
+Foo() | endfor
+Foo() | endfunction
+Foo() | endif
+Foo() | endinterface
+Foo() | endtry
+Foo() | endwhile
+Foo() | enew
+Foo() | enum
+Foo() | eval
+Foo() | ex
+Foo() | execute
+Foo() | exit
+Foo() | export
+Foo() | export
+Foo() | exusage
+Foo() | file
+Foo() | files
+Foo() | filetype
+Foo() | filter
+Foo() | final
+Foo() | finally
+Foo() | find
+Foo() | finish
+Foo() | first
+Foo() | fixdel
+Foo() | fold
+Foo() | foldclose
+Foo() | folddoclosed
+Foo() | folddoopen
+Foo() | foldopen
+Foo() | for
+Foo() | function
+Foo() | global/.../
+Foo() | goto
+Foo() | grep
+Foo() | grepadd
+Foo() | gui
+Foo() | gvim
+Foo() | hardcopy
+Foo() | help
+Foo() | helpclose
+Foo() | helpfind
+Foo() | helpgrep
+Foo() | helptags
+Foo() | hide
+Foo() | highlight
+Foo() | history
+Foo() | horizontal
+Foo() | iabbrev
+Foo() | iabclear
+Foo() | if
+Foo() | ijump
+Foo() | ilist
+Foo() | imap
+Foo() | imapclear
+Foo() | imenu
+Foo() | import
+Foo() | inoreabbrev
+Foo() | inoremap
+Foo() | inoremenu
+Foo() | interface
+Foo() | intro
+Foo() | isearch
+Foo() | isplit
+Foo() | iunabbrev
+Foo() | iunmap
+Foo() | iunmenu
+Foo() | join
+Foo() | jumps
+Foo() | keepalt
+Foo() | keepjumps
+Foo() | keepmarks
+Foo() | keeppatterns
+Foo() | labove
+Foo() | laddbuffer
+Foo() | laddexpr
+Foo() | laddfile
+Foo() | lafter
+Foo() | language
+Foo() | last
+Foo() | later
+Foo() | lbefore
+Foo() | lbelow
+Foo() | lbottom
+Foo() | lbuffer
+Foo() | lcd
+Foo() | lchdir
+Foo() | lclose
+Foo() | lcscope
+Foo() | ldo
+Foo() | left
+Foo() | leftabove
+Foo() | legacy
+Foo() | lexpr
+Foo() | lfdo
+Foo() | lfile
+Foo() | lfirst
+Foo() | lgetbuffer
+Foo() | lgetexpr
+Foo() | lgetfile
+Foo() | lgrep
+Foo() | lgrepadd
+Foo() | lhelpgrep
+Foo() | lhistory
+Foo() | list
+Foo() | ll
+Foo() | llast
+Foo() | llist
+Foo() | lmake
+Foo() | lmap
+Foo() | lmapclear
+Foo() | lnewer
+Foo() | lnext
+Foo() | lNext
+Foo() | lnfile
+Foo() | lNfile
+Foo() | lnoremap
+# Foo() | loadkeymap # disabled - runs until EOF
+Foo() | loadview
+Foo() | lockmarks
+Foo() | lockvar
+Foo() | lolder
+Foo() | lopen
+Foo() | lpfile
+Foo() | lprevious
+Foo() | lrewind
+Foo() | ls
+Foo() | ltag
+Foo() | lua
+Foo() | luado
+Foo() | luafile
+Foo() | lunmap
+Foo() | lvimgrep
+Foo() | lvimgrepadd
+Foo() | lwindow
+Foo() | make
+Foo() | mark
+Foo() | move
+Foo() | map
+Foo() | mapclear
+Foo() | marks
+Foo() | match
+Foo() | menu
+Foo() | menutranslate
+Foo() | messages
+Foo() | mkexrc
+Foo() | mksession
+Foo() | mkspell
+Foo() | mkview
+Foo() | mkvimrc
+Foo() | mzfile
+Foo() | mzscheme
+Foo() | nbclose
+Foo() | nbkey
+Foo() | nbstart
+Foo() | new
+Foo() | next
+Foo() | nmap
+Foo() | nmapclear
+Foo() | nmenu
+Foo() | nnoremap
+Foo() | nnoremenu
+Foo() | noautocmd
+Foo() | nohlsearch
+Foo() | noreabbrev
+Foo() | noremap
+Foo() | noremenu
+Foo() | normal
+Foo() | noswapfile
+Foo() | number
+Foo() | nunmap
+Foo() | nunmenu
+Foo() | oldfiles
+Foo() | omap
+Foo() | omapclear
+Foo() | omenu
+Foo() | only
+Foo() | onoremap
+Foo() | onoremenu
+Foo() | options
+Foo() | ounmap
+Foo() | ounmenu
+Foo() | ownsyntax
+Foo() | packadd
+Foo() | packloadall
+Foo() | pclose
+Foo() | pedit
+Foo() | perl
+Foo() | perldo
+Foo() | pop
+Foo() | popup
+Foo() | ppop
+Foo() | preserve
+Foo() | previous
+Foo() | print
+Foo() | profdel
+Foo() | profile
+Foo() | promptfind
+Foo() | promptrepl
+Foo() | psearch
+Foo() | ptag
+Foo() | ptfirst
+Foo() | ptjump
+Foo() | ptlast
+Foo() | ptnext
+Foo() | ptNext
+Foo() | ptprevious
+Foo() | ptrewind
+Foo() | ptselect
+Foo() | public
+Foo() | public
+Foo() | put
+Foo() | pwd
+Foo() | py3
+Foo() | py3do
+Foo() | py3file
+Foo() | pydo
+Foo() | pyfile
+Foo() | python
+Foo() | python3
+Foo() | pythonx
+Foo() | pyx
+Foo() | pyxdo
+Foo() | pyxfile
+Foo() | qall
+Foo() | quit
+Foo() | quitall
+Foo() | read
+Foo() | recover
+Foo() | redir
+Foo() | redo
+Foo() | redraw
+Foo() | redrawstatus
+Foo() | redrawtabline
+Foo() | registers
+Foo() | resize
+Foo() | retab
+Foo() | return
+Foo() | rewind
+Foo() | right
+Foo() | rightbelow
+Foo() | ruby
+Foo() | rubydo
+Foo() | rubyfile
+Foo() | rundo
+Foo() | runtime
+Foo() | rviminfo
+Foo() | sall
+Foo() | sandbox
+Foo() | sargument
+Foo() | saveas
+Foo() | sball
+Foo() | sbfirst
+Foo() | sblast
+Foo() | sbmodified
+Foo() | sbnext
+Foo() | sbNext
+Foo() | sbprevious
+Foo() | sbrewind
+Foo() | sbuffer
+Foo() | scriptencoding
+Foo() | scriptnames
+Foo() | scriptversion
+Foo() | scscope
+Foo() | set
+Foo() | setfiletype
+Foo() | setglobal
+Foo() | setlocal
+Foo() | sfind
+Foo() | sfirst
+Foo() | shell
+Foo() | sign
+Foo() | silent
+Foo() | simalt
+Foo() | slast
+Foo() | sleep
+Foo() | sleep!
+Foo() | smagic
+Foo() | smap
+Foo() | smapclear
+Foo() | smenu
+Foo() | smile
+Foo() | snext
+Foo() | sNext
+Foo() | snomagic
+Foo() | snoremap
+Foo() | snoremenu
+Foo() | sort
+Foo() | source
+Foo() | spelldump
+Foo() | spellgood
+Foo() | spellinfo
+Foo() | spellrare
+Foo() | spellrepall
+Foo() | spellundo
+Foo() | spellwrong
+Foo() | split
+Foo() | sprevious
+Foo() | srewind
+Foo() | stag
+Foo() | startgreplace
+Foo() | startinsert
+Foo() | startreplace
+Foo() | static
+Foo() | static
+Foo() | stjump
+Foo() | stop
+Foo() | stopinsert
+Foo() | stselect
+Foo() | substitute
+Foo() | sunhide
+Foo() | sunmap
+Foo() | sunmenu
+Foo() | suspend
+Foo() | sview
+Foo() | swapname
+Foo() | syncbind
+Foo() | syntax
+Foo() | syntime
+Foo() | tab
+Foo() | tabclose
+Foo() | tabdo
+Foo() | tabedit
+Foo() | tabfind
+Foo() | tabfirst
+Foo() | tablast
+Foo() | tabmove
+Foo() | tabnew
+Foo() | tabnext
+Foo() | tabNext
+Foo() | tabonly
+Foo() | tabprevious
+Foo() | tabrewind
+Foo() | tabs
+Foo() | tag
+Foo() | tags
+Foo() | tcd
+Foo() | tchdir
+Foo() | tcl
+Foo() | tcldo
+Foo() | tclfile
+Foo() | tearoff
+Foo() | terminal
+Foo() | tfirst
+Foo() | throw
+Foo() | tjump
+Foo() | tlast
+Foo() | tlmenu
+Foo() | tlnoremenu
+Foo() | tlunmenu
+Foo() | tmap
+Foo() | tmapclear
+Foo() | tmenu
+Foo() | tnext
+Foo() | tNext
+Foo() | tnoremap
+Foo() | topleft
+Foo() | tprevious
+Foo() | trewind
+Foo() | try
+Foo() | tselect
+Foo() | tunmap
+Foo() | tunmenu
+Foo() | type
+Foo() | unabbreviate
+Foo() | unabbreviate
+Foo() | undo
+Foo() | undojoin
+Foo() | undolist
+Foo() | unhide
+Foo() | unlockvar
+Foo() | unmap
+Foo() | unmenu
+Foo() | unsilent
+Foo() | update
+Foo() | var
+Foo() | verbose
+Foo() | version
+Foo() | vertical
+Foo() | vglobal/.../
+Foo() | vim9cmd
+# call Foo() | vim9script
+Foo() | vimgrep
+Foo() | vimgrepadd
+Foo() | visual
+Foo() | viusage
+Foo() | view
+Foo() | vmap
+Foo() | vmapclear
+Foo() | vmenu
+Foo() | vnew
+Foo() | vnoremap
+Foo() | vnoremenu
+Foo() | vsplit
+Foo() | vunmap
+Foo() | vunmenu
+Foo() | windo
+Foo() | write
+Foo() | wNext
+Foo() | wall
+Foo() | while
+Foo() | winsize
+Foo() | wincmd
+Foo() | winpos
+Foo() | wnext
+Foo() | wprevious
+Foo() | wq
+Foo() | wqall
+Foo() | wundo
+Foo() | wviminfo
+Foo() | xall
+Foo() | xmapclear
+Foo() | xmap
+Foo() | xmenu
+Foo() | xrestore
+Foo() | xnoremap
+Foo() | xnoremenu
+Foo() | xunmap
+Foo() | xunmenu
+Foo() | yank
+Foo() | z
+
+
+# Legacy-script only
+
+:Print
+:append
+ text
+.
+:change
+ text
+.
+:insert
+ text
+.
+:k
+:let
+:mode
+:open
+:t
+:unlet
+:xit
+
+Foo() | append
+ text
+.
+Foo() | change
+ text
+.
+Foo() | insert
+ text
+.
+Foo() | k
+Foo() | let
+Foo() | mode
+Foo() | open
+Foo() | t
+Foo() | unlet
+Foo() | xit
+
diff --git a/runtime/syntax/testdir/input/vim9_ex_function_def_tail_comment_errors.vim b/runtime/syntax/testdir/input/vim9_ex_function_def_tail_comment_errors.vim
new file mode 100644
index 0000000..b4b9f6d
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_ex_function_def_tail_comment_errors.vim
@@ -0,0 +1,44 @@
+vim9script
+
+# Vim9 :function and :def tail comment errors
+# VIM_TEST_SETUP unlet! g:vimsyn_folding
+
+fun Test1() abort # fun
+ return 1
+endfun # endfun
+
+def Test2(): number " def
+ return 2
+enddef " enddef
+
+fun Test3() abort # fun
+ fun s:DoTest3() abort # fun
+ return 3
+ endfun # endfun
+ return s:DoTest3()
+endfun # endfun
+
+def Test4(): number " def
+ def DoTest4(): number " def
+ return 4
+ enddef " enddef
+ return DoTest4()
+enddef " enddef
+
+def Test5(): number " def
+ fun DoTest5() abort # fun
+ return 5
+ endfun # endfun
+ return DoTest5()
+enddef " enddef
+
+fun Test6() abort # fun
+ def s:DoTest6(): number " def
+ return 6
+ enddef " enddef
+ return s:DoTest6()
+endfun # endfun
+
+for d in range(1, 6)
+ exec $'echo Test{d}()'
+endfor
diff --git a/runtime/syntax/testdir/input/vim9_ex_function_def_tail_comments.vim b/runtime/syntax/testdir/input/vim9_ex_function_def_tail_comments.vim
new file mode 100644
index 0000000..12f7942
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_ex_function_def_tail_comments.vim
@@ -0,0 +1,44 @@
+vim9script
+
+# Vim9 :function and :def tail comments
+# VIM_TEST_SETUP unlet! g:vimsyn_folding
+
+fun Test1() abort " fun
+ return 1
+endfun " endfun
+
+def Test2(): number # def
+ return 2
+enddef # enddef
+
+fun Test3() abort " fun
+ fun s:DoTest3() abort " fun
+ return 3
+ endfun " endfun
+ return s:DoTest3()
+endfun " endfun
+
+def Test4(): number # def
+ def DoTest4(): number # def
+ return 4
+ enddef # enddef
+ return DoTest4()
+enddef # enddef
+
+def Test5(): number # def
+ fun DoTest5() abort " fun
+ return 5
+ endfun " endfun
+ return DoTest5()
+enddef # enddef
+
+fun Test6() abort " fun
+ def s:DoTest6(): number # def
+ return 6
+ enddef # enddef
+ return s:DoTest6()
+endfun " endfun
+
+for d in range(1, 6)
+ exec $'echo Test{d}()'
+endfor
diff --git a/runtime/syntax/testdir/input/vim9_keymap.vim b/runtime/syntax/testdir/input/vim9_ex_loadkeymap.vim
index a69b723..126c6dd 100644
--- a/runtime/syntax/testdir/input/vim9_keymap.vim
+++ b/runtime/syntax/testdir/input/vim9_ex_loadkeymap.vim
@@ -1,10 +1,10 @@
vim9script
-# Vim Keymap file for syntax testing
+# Vim :loadkeymap command
scriptencoding utf-8
-let b:keymap_name = "syntax-test"
+b:keymap_name = "syntax-test"
loadkeymap
diff --git a/runtime/syntax/testdir/input/vim_ex_call.vim b/runtime/syntax/testdir/input/vim_ex_call.vim
new file mode 100644
index 0000000..ae6bdc9
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_call.vim
@@ -0,0 +1,51 @@
+" Vim :call command
+
+
+" functions for which there are same-named Ex commands
+
+call browse(save, title, initdir, default)
+call call(func, arglist, dict)
+call chdir(dir)
+call confirm(msg, choices, default, type)
+call copy(expr)
+call delete(fname, flags)
+call eval(string)
+call execute(command)
+call filter(expr1, expr2)
+call function(name, arglist, dict)
+call insert(object, item, idx)
+call join(list, sep)
+call map(expr1, expr2)
+call match(expr, pat, start, count)
+call mode(expr)
+call sort(list, how, dict)
+call split(string, pattern, keepempty)
+call substitute(str, pat, sub, flags)
+call swapname(buf)
+
+call browse (save, title, initdir, default)
+call call (func, arglist, dict)
+call chdir (dir)
+call confirm (msg, choices, default, type)
+call copy (expr)
+call delete (fname, flags)
+call eval (string)
+call execute (command)
+call filter (expr1, expr2)
+call function (name, arglist, dict)
+call insert (object, item, idx)
+call join (list, sep)
+call map (expr1, expr2)
+call match (expr, pat, start, count)
+call mode (expr)
+call sort (list, how, dict)
+call split (string, pattern, keepempty)
+call substitute (str, pat, sub, flags)
+call swapname (buf)
+
+call Foo()
+call Foo(arg1)
+call Foo(arg1, arg2)
+
+let res = call(func, arglist, dict)
+let res = call (func, arglist, dict)
diff --git a/runtime/syntax/testdir/input/vim_ex_commands.vim b/runtime/syntax/testdir/input/vim_ex_commands.vim
index aaa351b..3d03ac3 100644
--- a/runtime/syntax/testdir/input/vim_ex_commands.vim
+++ b/runtime/syntax/testdir/input/vim_ex_commands.vim
@@ -98,7 +98,6 @@
:checkpath
:checktime
:chistory
-:class
:clast
:clearjumps
:clist
@@ -172,7 +171,6 @@
:else
:elseif
:emenu
-:endclass
:enddef
:endif
:endfor
@@ -184,7 +182,6 @@
:ex
:execute
:exit
-:export
:exusage
:file
:files
@@ -292,7 +289,7 @@
:lnewer
:lnfile
:lnoremap
-:loadkeymap
+" :loadkeymap " disabled - runs until EOF
:loadview
:lockmarks
:lockvar
@@ -313,8 +310,7 @@
:move
:mark
:make
-" requires trailing whitespace to distinguish from map()
-:map
+:map
:mapclear
:marks
:match
@@ -553,12 +549,10 @@
:unsilent
:update
:vglobal/.../
-:var
:version
:verbose
:vertical
:vim9cmd
-" :vim9script
:vimgrep
:vimgrepadd
:visual
@@ -691,7 +685,6 @@ call Foo() | chdir
call Foo() | checkpath
call Foo() | checktime
call Foo() | chistory
-call Foo() | class
call Foo() | clast
call Foo() | clearjumps
call Foo() | clist
@@ -765,7 +758,6 @@ call Foo() | echowindow
call Foo() | else
call Foo() | elseif
call Foo() | emenu
-call Foo() | endclass
call Foo() | enddef
call Foo() | endif
call Foo() | endfor
@@ -777,7 +769,6 @@ call Foo() | eval
call Foo() | ex
call Foo() | execute
call Foo() | exit
-call Foo() | export
call Foo() | exusage
call Foo() | file
call Foo() | files
@@ -886,7 +877,7 @@ call Foo() | lnext
call Foo() | lnewer
call Foo() | lnfile
call Foo() | lnoremap
-call Foo() | loadkeymap
+" call Foo() | loadkeymap " disabled - runs until EOF
call Foo() | loadview
call Foo() | lockmarks
call Foo() | lockvar
@@ -907,8 +898,7 @@ call Foo() | lwindow
call Foo() | move
call Foo() | mark
call Foo() | make
-" requires trailing whitespace to distinguish from map()
-call Foo() | map
+call Foo() | map
call Foo() | mapclear
call Foo() | marks
call Foo() | match
@@ -1147,12 +1137,10 @@ call Foo() | unmenu
call Foo() | unsilent
call Foo() | update
call Foo() | vglobal/.../
-call Foo() | var
call Foo() | version
call Foo() | verbose
call Foo() | vertical
call Foo() | vim9cmd
-" call Foo() | vim9script
call Foo() | vimgrep
call Foo() | vimgrepadd
call Foo() | visual
@@ -1193,3 +1181,39 @@ call Foo() | xunmap
call Foo() | xunmenu
call Foo() | yank
call Foo() | z
+
+
+" Vim9-script only
+
+:abstract
+:class
+:defcompile
+:disassemble
+:endclass
+:endinterface
+:endenum
+:enum
+:export
+:final
+:interface
+:public
+:static
+:type
+:var
+
+Foo() | abstract
+Foo() | class
+Foo() | defcompile
+Foo() | disassemble
+Foo() | endclass
+Foo() | endenum
+Foo() | endinterface
+Foo() | enum
+Foo() | export
+Foo() | final
+Foo() | interface
+Foo() | public
+Foo() | static
+Foo() | type
+Foo() | var
+
diff --git a/runtime/syntax/testdir/input/vim_ex_def.vim b/runtime/syntax/testdir/input/vim_ex_def.vim
index 2685ba5..a1d5381 100644
--- a/runtime/syntax/testdir/input/vim_ex_def.vim
+++ b/runtime/syntax/testdir/input/vim_ex_def.vim
@@ -85,7 +85,7 @@ def Foo()
enddef | echo "Foo"
def Foo()
-enddef " comment
+enddef # comment
" parameters
diff --git a/runtime/syntax/testdir/input/vim_ex_def_fold.vim b/runtime/syntax/testdir/input/vim_ex_def_fold.vim
index 3326075..60b1151 100644
--- a/runtime/syntax/testdir/input/vim_ex_def_fold.vim
+++ b/runtime/syntax/testdir/input/vim_ex_def_fold.vim
@@ -86,7 +86,7 @@ def Foo()
enddef | echo "Foo"
def Foo()
-enddef " comment
+enddef # comment
" parameters
@@ -120,7 +120,7 @@ def Foo()
enddef
def Foo()
- let x =<< END
+ var x =<< trim END
endfunction
END
enddef
diff --git a/runtime/syntax/testdir/input/vim_ex_function_def_tail_comment_errors.vim b/runtime/syntax/testdir/input/vim_ex_function_def_tail_comment_errors.vim
new file mode 100644
index 0000000..e5d7464
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_function_def_tail_comment_errors.vim
@@ -0,0 +1,43 @@
+" Vim :function and :def tail comment errors
+" VIM_TEST_SETUP unlet! g:vimsyn_folding
+
+fun s:Test1() abort # fun
+ return 1
+endfun # endfun
+
+def s:Test2(): number " def
+ return 2
+enddef " enddef
+
+fun s:Test3() abort # fun
+ fun s:DoTest3() abort # fun
+ return 3
+ endfun # endfun
+ return s:DoTest3()
+endfun # endfun
+
+def s:Test4(): number " def
+ def DoTest4(): number " def
+ return 4
+ enddef " enddef
+ return DoTest4()
+enddef " enddef
+
+def s:Test5(): number " def
+ fun DoTest5() abort # fun
+ return 5
+ endfun # endfun
+ return DoTest5()
+enddef " enddef
+
+fun s:Test6() abort # fun
+ def s:DoTest6(): number " def
+ return 6
+ enddef " enddef
+ return s:DoTest6()
+endfun # endfun
+
+for d in range(1, 6)->reverse()
+ exec $'echo s:Test{d}()'
+ exec $'delfunction s:Test{d}'
+endfor
diff --git a/runtime/syntax/testdir/input/vim_ex_function_def_tail_comments.vim b/runtime/syntax/testdir/input/vim_ex_function_def_tail_comments.vim
new file mode 100644
index 0000000..e46bf75
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_function_def_tail_comments.vim
@@ -0,0 +1,43 @@
+" Vim :function and :def tail comments
+" VIM_TEST_SETUP unlet! g:vimsyn_folding
+
+fun s:Test1() abort " fun
+ return 1
+endfun " endfun
+
+def s:Test2(): number # def
+ return 2
+enddef # enddef
+
+fun s:Test3() abort " fun
+ fun s:DoTest3() abort " fun
+ return 3
+ endfun " endfun
+ return s:DoTest3()
+endfun " endfun
+
+def s:Test4(): number # def
+ def DoTest4(): number # def
+ return 4
+ enddef # enddef
+ return DoTest4()
+enddef # enddef
+
+def s:Test5(): number # def
+ fun DoTest5() abort " fun
+ return 5
+ endfun " endfun
+ return DoTest5()
+enddef # enddef
+
+fun s:Test6() abort " fun
+ def s:DoTest6(): number # def
+ return 6
+ enddef # enddef
+ return s:DoTest6()
+endfun " endfun
+
+for d in range(1, 6)->reverse()
+ exec $'echo s:Test{d}()'
+ exec $'delfunction s:Test{d}'
+endfor
diff --git a/runtime/syntax/testdir/input/vim_ex_function_fold.vim b/runtime/syntax/testdir/input/vim_ex_function_fold.vim
index dd260ca..fa7edbb 100644
--- a/runtime/syntax/testdir/input/vim_ex_function_fold.vim
+++ b/runtime/syntax/testdir/input/vim_ex_function_fold.vim
@@ -193,10 +193,9 @@ function Foo()
endfunction
function Foo()
- let x =<< END
+ let x =<< trim END
endfunction
END
-
endfunction
function Foo()
diff --git a/runtime/syntax/testdir/input/vim_ex_let_heredoc.vim b/runtime/syntax/testdir/input/vim_ex_let_heredoc.vim
new file mode 100644
index 0000000..2f88f93
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_let_heredoc.vim
@@ -0,0 +1,196 @@
+" Vim :let heredoc command
+" VIM_TEST_SETUP let g:vimsyn_folding = "h"
+" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
+
+
+let foo =<< END
+line1
+line2
+END
+
+ let foo =<< END
+line1
+line2
+END
+
+
+" trim
+
+let foo =<< trim END
+ line1
+ line2
+END
+
+ let foo =<< trim END
+ line1
+ line2
+ END
+
+
+" interpolation
+
+let foo =<< eval END
+line{1 + 0}
+line{1 + 1}
+END
+
+ let foo =<< eval END
+line{1 + 0}
+line{1 + 1}
+END
+
+let foo =<< trim eval END
+ line{1 + 0}
+ line{1 + 1}
+END
+
+ let foo =<< trim eval END
+ line{1 + 0}
+ line{1 + 1}
+ END
+
+" no interpolation (escaped { and })
+
+let foo =<< eval END
+line{{1 + 0}}
+line{{1 + 1}}
+END
+
+ let foo =<< eval END
+line{{1 + 0}}
+line{{1 + 1}}
+END
+
+let foo =<< trim eval END
+ line{{1 + 0}}
+ line{{1 + 1}}
+END
+
+ let foo =<< trim eval END
+ line{{1 + 0}}
+ line{{1 + 1}}
+ END
+
+
+" no interpolation
+
+let foo =<< END
+line{1 + 0}
+line{1 + 1}
+END
+
+ let foo =<< END
+line{1 + 0}
+line{1 + 1}
+END
+
+let foo =<< trim END
+ line{1 + 0}
+ line{1 + 1}
+END
+
+ let foo =<< trim END
+ line{1 + 0}
+ line{1 + 1}
+ END
+
+
+" end marker must not be followed by whitespace
+
+" assert_equal(foo, ["END "])
+let foo =<< END
+END
+END
+
+" assert_equal(foo, [" END "])
+let foo =<< END
+ END
+END
+
+" assert_equal(foo, ["END "])
+let foo =<< trim END
+ END
+END
+
+" assert_equal(foo, ["END "])
+ let foo =<< trim END
+ END
+ END
+
+
+" end marker must be vertically aligned with :let (if preceded by whitespace)
+
+" assert_equal(foo, ["END"])
+let foo =<< trim END
+ END
+END
+
+ " assert_equal(foo, ["END"])
+ let foo =<< trim END
+ END
+ END
+
+" assert_equal(foo, ["END "])
+let foo =<< trim END
+END
+END
+
+ " assert_equal(foo, ["END"])
+ let foo =<< trim END
+ END
+ END
+
+ " assert_equal(foo, ["END "])
+ let foo =<< trim END
+ END
+ END
+
+ " assert_equal(foo, ["END"])
+ let foo =<< trim END
+ END
+ END
+
+ " assert_equal(foo, ["END "])
+ let foo =<< trim END
+ END
+ END
+
+ " assert_equal(foo, ["END "])
+ let foo =<< trim END
+END
+END
+
+ " assert_equal(foo, ["END"])
+ let foo =<< trim END
+ END
+END
+
+ " assert_equal(foo, ["END"])
+ let foo =<< trim END
+ END
+END
+
+
+" end markers
+
+let foo =<< !@#$%^&*()_+
+line1
+line2
+!@#$%^&*()_+
+
+let foo =<< 0!@#$%^&*()_+
+line1
+line2
+0!@#$%^&*()_+
+
+let foo =<< A!@#$%^&*()_+
+line1
+line2
+A!@#$%^&*()_+
+
+" error - leading lowercase character
+let foo =<< a!@#$%^&*()_+
+line1
+line2
+a!@#$%^&*()_+
+
diff --git a/runtime/syntax/testdir/input/vim_ex_loadkeymap.vim b/runtime/syntax/testdir/input/vim_ex_loadkeymap.vim
new file mode 100644
index 0000000..8f4484d
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_loadkeymap.vim
@@ -0,0 +1,24 @@
+" Vim :loadkeymap command
+
+scriptencoding utf-8
+
+let b:keymap_name = "syntax-test"
+
+loadkeymap
+
+" Line comment
+
+ " Another line comment
+
+a A Basic mapping
+'a á More than one char in first column
+
+" Special notation
+<char-62> B Special notation allowed in LHS - decimal
+c <char-0103> Special notation allowed in RHS - octal
+<char-0x0064> <char-0x0044> Special notation allowed in LHS and RHS - hexadecimal
+
+" Vim-script comment characters
+# <char-0x00a3> Line should not match as a Vim9-script comment
+\" “ Line should not match as a legacy-script comment
+: " Line should not match as a legacy-script comment
diff --git a/runtime/syntax/testdir/input/vim_ex_loadkeymap_after_bar.vim b/runtime/syntax/testdir/input/vim_ex_loadkeymap_after_bar.vim
new file mode 100644
index 0000000..029af2c
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_loadkeymap_after_bar.vim
@@ -0,0 +1,10 @@
+" Vim :loadkeymap command (after "|")
+
+scriptencoding utf-8
+
+let b:keymap_name = "syntax-test"
+
+echo "..." | loadkeymap
+
+a A Basic mapping
+
diff --git a/runtime/syntax/testdir/input/vim_ex_loadkeymap_after_colon.vim b/runtime/syntax/testdir/input/vim_ex_loadkeymap_after_colon.vim
new file mode 100644
index 0000000..61578b6
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_loadkeymap_after_colon.vim
@@ -0,0 +1,10 @@
+" Vim :loadkeymap command (after ":")
+
+scriptencoding utf-8
+
+let b:keymap_name = "syntax-test"
+
+:loadkeymap
+
+a A Basic mapping
+
diff --git a/runtime/syntax/testdir/input/vim_ex_map.vim b/runtime/syntax/testdir/input/vim_ex_map.vim
index 95f4292..3ddc9e9 100644
--- a/runtime/syntax/testdir/input/vim_ex_map.vim
+++ b/runtime/syntax/testdir/input/vim_ex_map.vim
@@ -5,9 +5,6 @@ map! lhs rhs
map
map lhs rhs
-call map(list, 'v:val')
-call map (list, 'v:val')
-
mapclear <buffer>
mapclear! <buffer>
nmapclear <buffer>
@@ -69,6 +66,27 @@ map lhs
echo "clear"
+" Differentiate map() from :map
+
+map ( :echo "open-paren"<CR>
+
+call map(list, 'v:val')
+call map (list, 'v:val')
+
+function Foo()
+ map ( :echo "open-paren"<CR>
+ call map(list, 'v:val')
+ call map (list, 'v:val')
+endfunction
+
+def Foo()
+ map ( :echo "open-paren"<CR>
+ map(list, 'v:val')
+ # :map LHS=(list, RHS='v:val')
+ map (list, 'v:val')
+enddef
+
+
" Issue #12672
nnoremap <leader>foo :echo call(
diff --git a/runtime/syntax/testdir/input/vim_ex_match.vim b/runtime/syntax/testdir/input/vim_ex_match.vim
new file mode 100644
index 0000000..8d14628
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_match.vim
@@ -0,0 +1,32 @@
+" Vim :match, :2match and :3match commands
+
+match FooGroup /Foo/
+match
+match none
+
+2match FooGroup /Foo/
+2match
+2match none
+
+3match FooGroup /Foo/
+3match
+3match none
+
+
+" Differentiate map() from :map
+
+call match(haystack, 'needle')
+call match (haystack, 'needle')
+
+function Foo()
+ match FooGroup /Foo/
+ call match(haystack, 'needle')
+ call match (haystack, 'needle')
+endfunction
+
+def Foo()
+ match FooGroup /Foo/
+ match(haystack, 'needle')
+ # Error: bad :match command - trailing characters
+ match (haystack, 'needle')
+enddef
diff --git a/runtime/syntax/testdir/input/vim_ex_set.vim b/runtime/syntax/testdir/input/vim_ex_set.vim
new file mode 100644
index 0000000..00e53a0
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_set.vim
@@ -0,0 +1,93 @@
+" Vim :set command
+
+set
+set!
+set all
+set! all
+set termcap
+set! termcap
+
+set aleph?
+set aleph
+
+set noallowrevins
+
+set allowrevins!
+set invallowrevins
+
+set aleph&
+set aleph&vi
+set aleph&vim
+
+set all&
+
+set aleph=128
+set aleph:128
+
+set aleph =128
+set aleph :128
+
+set aleph+=96
+set aleph^=2
+set aleph-=96
+
+set backspace+=nostop
+set backspace^=nostop
+set backspace-=nostop
+
+set ai nosi sw=3 tw=3
+
+set <t_#4>=^[Ot " FIXME
+set <M-b>=^[b " FIXME
+
+setlocal autoread
+setglobal noautoread
+set autoread<
+
+
+" :help option-backslash
+
+" When setting options using |:let| and |literal-string|, you need to use one
+" fewer layer of backslash. A few examples:
+set makeprg=make\ file " results in "make file"
+let &makeprg='make file' " (same as above)
+set makeprg=make\\\ file " results in "make\ file"
+set tags=tags\ /usr/tags " results in "tags" and "/usr/tags"
+set tags=tags\\\ file " results in "tags file"
+let &tags='tags\ file' " (same as above)
+
+set makeprg=make,file " results in "make,file"
+set makeprg=make\\,file " results in "make\,file"
+set tags=tags,file " results in "tags" and "file"
+set tags=tags\\,file " results in "tags,file"
+let &tags='tags\,file' " (same as above)
+
+" This example sets the 'titlestring' option to "hi|there":
+set titlestring=hi\|there
+" This sets the 'titlestring' option to "hi" and 'iconstring' to "there":
+set titlestring=hi|set iconstring=there
+
+set dir=\\machine\path " results in "\\machine\path"
+set dir=\\\\machine\\path " results in "\\machine\path"
+set dir=\\path\\file " results in "\\path\file" (wrong!)
+
+
+" :help :set_env
+
+set term=$TERM.new
+set path=/usr/$INCLUDE,$HOME/include,.
+
+
+" Multiline :set and option values
+
+set path=abc,def,ghi
+ "\ def is the 'define' option
+ \ def=abc,def,ghi
+
+set path=abc,
+ "\ def is a 'path' directory value
+ \def,ghi
+
+set path=
+ "\ def is a 'path' directory value
+ \abc,def
diff --git a/runtime/syntax/testdir/input/yaml.yaml b/runtime/syntax/testdir/input/yaml.yaml
index d87aca2..72e0a0d 100644
--- a/runtime/syntax/testdir/input/yaml.yaml
+++ b/runtime/syntax/testdir/input/yaml.yaml
@@ -24,7 +24,7 @@ not a number: [.nan, .NaN, .NAN]
plain strings:
- a b c
- - a * b & c @ d# e : f # comment
+ - a:b & c @ d# e * f # comment
- {{ f(' ') }} #8234
double quoted strings:
- ""
@@ -91,9 +91,10 @@ flow collection:
inside block mapping:
foo: {bar: baz}
bar: ["foo": {baz: qux}]
- flow collection: [foo # comment
+ flow:collection: [foo # comment
, {bar: [{ # comment
- baz: '
+ baz:
+ '
qux # not comment
' # comment
}]}]
diff --git a/runtime/syntax/testdir/runtest.vim b/runtime/syntax/testdir/runtest.vim
index e1cfdcf..f9c0db0 100644
--- a/runtime/syntax/testdir/runtest.vim
+++ b/runtime/syntax/testdir/runtest.vim
@@ -85,6 +85,28 @@ func HandleSwapExists()
endif
endfunc
+def IsWinNumOneAtEOF(in_name_and_out_name: string): bool
+ # Expect defaults from term_util#RunVimInTerminal().
+ if winwidth(1) != 75 || winheight(1) != 20
+ ch_log(printf('Aborting for %s: (75 x 20) != (%d x %d)',
+ in_name_and_out_name,
+ winwidth(1),
+ winheight(1)))
+ return true
+ endif
+ # A two-fold role: (1) redraw whenever the first test file is of 19 lines or
+ # less long (not applicable to c.c); (2) redraw in case the terminal buffer
+ # cannot redraw itself just yet (else expect extra files generated).
+ redraw
+ const pos: string = join([
+ screenstring(20, 71),
+ screenstring(20, 72),
+ screenstring(20, 73),
+ screenstring(20, 74),
+ screenstring(20, 75)], '')
+ return (pos == ' All ' || pos == ' Bot ')
+enddef
+
func RunTest()
let ok_count = 0
let failed_tests = []
@@ -94,14 +116,17 @@ func RunTest()
let setup = glob('input/setup/*.vim', 1, 1)
\ ->reduce({d, f -> extend(d, {fnamemodify(f, ':t:r'): f})}, {})
- for fname in glob('input/*.*', 1, 1)
- if fname =~ '\~$'
- " backup file, skip
- continue
- endif
+ if exists("$VIM_SYNTAX_SELF_TESTING")
+ let dirpath = 'input/selftestdir/'
+ let fnames = readdir(dirpath, {fname -> fname !~ '^README\.txt$'})
+ else
+ let dirpath = 'input/'
+ let fnames = readdir(dirpath, {fname -> fname !~ '\~$' && fname =~ '^.\+\..\+$'})
+ endif
- let linecount = readfile(fname)->len()
- let root = fnamemodify(fname, ':t:r')
+ for fname in fnames
+ let root = fnamemodify(fname, ':r')
+ let fname = dirpath .. fname
let filetype = substitute(root, '\([^_.]*\)[_.].*', '\1', '')
let failed_root = 'failed/' .. root
@@ -118,6 +143,10 @@ func RunTest()
call delete('done/' .. root)
let lines =<< trim END
+ " Track the cursor progress through a syntax test file so that any
+ " degenerate input can be reported. Each file will have its own cursor.
+ let s:cursor = 1
+
" extra info for shell variables
func ShellInfo()
let msg = ''
@@ -160,11 +189,111 @@ func RunTest()
call cursor(1, 1)
" BEGIN [runtime/defaults.vim]
" Also, disable italic highlighting to avoid issues on some terminals.
- set display=truncate ruler scrolloff=5 t_ZH= t_ZR=
+ set display=lastline ruler scrolloff=5 t_ZH= t_ZR=
syntax on
" END [runtime/defaults.vim]
redraw!
endfunc
+
+ def s:AssertCursorForwardProgress(): bool
+ const curnum: number = line('.')
+ if curnum <= cursor
+ # Use "actions/upload-artifact@v4" of ci.yml for delivery.
+ writefile([printf('No cursor progress: %d <= %d (%s). Please file an issue.',
+ curnum,
+ cursor,
+ bufname('%'))],
+ 'failed/00-FIXME',
+ 'a')
+ bwipeout!
+ endif
+ cursor = curnum
+ return true
+ enddef
+
+ def ScrollToSecondPage(estate: number, op_wh: number, op_so: number): bool
+ if line('.') != 1 || line('w$') >= line('$')
+ return AssertCursorForwardProgress()
+ endif
+ try
+ set scrolloff=0
+ # Advance mark "c"[ursor] along with the cursor.
+ norm! Lmc
+ if foldclosed('.') < 0 &&
+ (strdisplaywidth(getline('.')) + &l:fdc * winheight(1)) >= estate
+ # Make for an exit for a screenful long line.
+ norm! j^
+ return AssertCursorForwardProgress()
+ else
+ # Place the cursor on the actually last visible line.
+ while winline() < op_wh
+ const lastnum: number = winline()
+ norm! gjmc
+ if lastnum > winline()
+ break
+ endif
+ endwhile
+ norm! zt
+ endif
+ finally
+ # COMPATIBILITY: Scroll up around "scrolloff" lines.
+ &scrolloff = max([1, op_so])
+ endtry
+ norm! ^
+ return AssertCursorForwardProgress()
+ enddef
+
+ def ScrollToNextPage(estate: number, op_wh: number, op_so: number): bool
+ if line('.') == 1 || line('w$') >= line('$')
+ return AssertCursorForwardProgress()
+ endif
+ try
+ set scrolloff=0
+ # Advance mark "c"[ursor] along with the cursor.
+ norm! Lmc
+ if foldclosed('.') < 0 &&
+ (strdisplaywidth(getline('.')) + &l:fdc * winheight(1)) >= estate
+ # Make for an exit for a screenful long line.
+ norm! j^
+ return AssertCursorForwardProgress()
+ else
+ # Place the cursor on the actually last visible line.
+ while winline() < op_wh
+ const lastnum: number = winline()
+ norm! gjmc
+ if lastnum > winline()
+ break
+ endif
+ endwhile
+ endif
+ finally
+ # COMPATIBILITY: Scroll up/down around "scrolloff" lines.
+ &scrolloff = max([1, op_so])
+ endtry
+ norm! zt
+ const marknum: number = line("'c")
+ # Eschew &smoothscroll since line("`c") is not supported.
+ # Remember that "w0" can point to the first line of a _closed_ fold
+ # whereas the last line of a _closed_ fold can be marked.
+ if line('w0') > marknum
+ while line('w0') > marknum
+ exe "norm! \<C-y>"
+ endwhile
+ if line('w0') != marknum
+ exe "norm! \<C-e>H"
+ endif
+ # Handle non-wrapped lines.
+ elseif line('w0') < marknum
+ while line('w0') < marknum
+ exe "norm! \<C-e>"
+ endwhile
+ if line('w0') != marknum
+ exe "norm! \<C-y>H"
+ endif
+ endif
+ norm! ^
+ return AssertCursorForwardProgress()
+ enddef
END
call writefile(lines, 'Xtestscript')
@@ -198,34 +327,39 @@ func RunTest()
" Screendump at the start of the file: failed/root_00.dump
let root_00 = root .. '_00'
- call ch_log('First screendump for ' .. fname .. ': failed/' .. root_00 .. '.dump')
+ let in_name_and_out_name = fname .. ': failed/' .. root_00 .. '.dump'
+ call ch_log('First screendump for ' .. in_name_and_out_name)
let fail = VerifyScreenDump(buf, root_00, {})
- " clear the shell info if there are not enough lines to cause a scroll
- if filetype == 'sh' && linecount <= 19
- call term_sendkeys(buf, ":redraw\<CR>")
- endif
-
" Make a Screendump every 18 lines of the file: failed/root_NN.dump
- let topline = 1
let nr = 1
- while linecount - topline > 20
- let topline += 18
- call term_sendkeys(buf, printf("%dGzt", topline))
- let root_next = root .. printf('_%02d', nr)
- call ch_log('Next screendump for ' .. fname .. ': failed/' .. root_next .. '.dump')
- let fail += VerifyScreenDump(buf, root_next, {})
- let nr += 1
- endwhile
-
- " Screendump at the end of the file: failed/root_99.dump
- call term_sendkeys(buf, 'Gzb')
- let root_last = root .. '_99'
- call ch_log('Last screendump for ' .. fname .. ': failed/' .. root_last .. '.dump')
- let fail += VerifyScreenDump(buf, root_last, {})
-
- call StopVimInTerminal(buf)
- call delete('Xtestscript')
+ let root_next = printf('%s_%02d', root, nr)
+ let in_name_and_out_name = fname .. ': failed/' .. root_next .. '.dump'
+
+ " Accommodate the next code block to "buf"'s contingency for self
+ " wipe-out.
+ try
+ if !IsWinNumOneAtEOF(in_name_and_out_name)
+ call term_sendkeys(buf, ":call ScrollToSecondPage((18 * 75 + 1), 19, 5) | redraw!\<CR>")
+ call ch_log('Next screendump for ' .. in_name_and_out_name)
+ let fail += VerifyScreenDump(buf, root_next, {})
+ let nr += 1
+ let root_next = printf('%s_%02d', root, nr)
+ let in_name_and_out_name = fname .. ': failed/' .. root_next .. '.dump'
+
+ while !IsWinNumOneAtEOF(in_name_and_out_name)
+ call term_sendkeys(buf, ":call ScrollToNextPage((18 * 75 + 1), 19, 5) | redraw!\<CR>")
+ call ch_log('Next screendump for ' .. in_name_and_out_name)
+ let fail += VerifyScreenDump(buf, root_next, {})
+ let nr += 1
+ let root_next = printf('%s_%02d', root, nr)
+ let in_name_and_out_name = fname .. ': failed/' .. root_next .. '.dump'
+ endwhile
+ endif
+ call StopVimInTerminal(buf)
+ finally
+ call delete('Xtestscript')
+ endtry
" redraw here to avoid the following messages to get mixed up with screen
" output.
@@ -275,6 +409,12 @@ func RunTest()
call Message('OK: ' .. ok_count)
call Message('FAILED: ' .. len(failed_tests) .. ': ' .. string(failed_tests))
call Message('skipped: ' .. skipped_count)
+
+ if !empty(failed_tests)
+ call Message('')
+ call Message('View generated screendumps with "../../src/vim --clean -S testdir/viewdumps.vim"')
+ endif
+
call AppendMessages('== SUMMARY ==')
if len(failed_tests) > 0
diff --git a/runtime/syntax/testdir/viewdumps.vim b/runtime/syntax/testdir/viewdumps.vim
new file mode 100644
index 0000000..e1624ff
--- /dev/null
+++ b/runtime/syntax/testdir/viewdumps.vim
@@ -0,0 +1,24 @@
+vim9script
+
+exec 'source ' .. (((cwdpath: string) => cwdpath
+ ->strpart(0, cwdpath->strridx('/vim')))(getcwd()))
+ .. '/vim/src/testdir/commondumps.vim'
+g:Init('\<syntax\>', -1)
+
+# THE FOLLOWING SETTINGS PERTAIN TO "input/" FILES THAT ARE LIKELY TO BE
+# LOADED SIDE BY SIDE WHENEVER BATCHES OF NEW SCREENDUMPS ARE GENERATED.
+
+# Match "LC_ALL=C" of Makefile.
+language C
+
+# Match the settings from term_util.vim#RunVimInTerminal().
+set t_Co=256 background=light
+hi Normal ctermfg=NONE ctermbg=NONE
+
+# Match the settings from runtest.vim#Xtestscript#SetUpVim().
+set display=lastline ruler scrolloff=5 t_ZH= t_ZR=
+
+# Anticipate non-Latin-1 characters in "input/" files.
+set encoding=utf-8 termencoding=utf-8
+
+# vim:fdm=syntax:sw=2:ts=8:noet:nolist:nosta:
diff --git a/runtime/syntax/thrift.vim b/runtime/syntax/thrift.vim
new file mode 100644
index 0000000..502e988
--- /dev/null
+++ b/runtime/syntax/thrift.vim
@@ -0,0 +1,74 @@
+" Vim syntax file
+" Language: Thrift
+" Original Author: Martin Smith <martin@facebook.com>
+" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com>
+" Last Change: 2024/07/29
+" https://github.com/apache/thrift/blob/master/contrib/thrift.vim
+"
+" Licensed to the Apache Software Foundation (ASF) under one
+" or more contributor license agreements. See the NOTICE file
+" distributed with this work for additional information
+" regarding copyright ownership. The ASF licenses this file
+" to you under the Apache License, Version 2.0 (the
+" "License"); you may not use this file except in compliance
+" with the License. You may obtain a copy of the License at
+"
+" http://www.apache.org/licenses/LICENSE-2.0
+"
+" Unless required by applicable law or agreed to in writing,
+" software distributed under the License is distributed on an
+" "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+" KIND, either express or implied. See the License for the
+" specific language governing permissions and limitations
+" under the License.
+"
+
+if exists("b:current_syntax")
+ finish
+endif
+
+" Todo
+syn keyword thriftTodo TODO todo FIXME fixme XXX xxx contained
+
+" Comments
+syn match thriftComment "#.*" contains=thriftTodo
+syn region thriftComment start="/\*" end="\*/" contains=thriftTodo
+syn match thriftComment "//.\{-}\(?>\|$\)\@="
+
+" String
+syn region thriftStringDouble matchgroup=None start=+"+ end=+"+
+
+" Number
+syn match thriftNumber "-\=\<\d\+\>" contained
+
+" Keywords
+syn keyword thriftKeyword namespace
+syn keyword thriftKeyword xsd_all xsd_optional xsd_nillable xsd_attrs
+syn keyword thriftKeyword include cpp_include cpp_type const optional required
+syn keyword thriftBasicTypes void bool byte i8 i16 i32 i64 double string binary
+syn keyword thriftStructure map list set struct typedef exception enum throws union
+
+" Special
+syn match thriftSpecial "\d\+:"
+
+" Structure
+syn keyword thriftStructure service oneway extends
+"async" { return tok_async; }
+"exception" { return tok_xception; }
+"extends" { return tok_extends; }
+"throws" { return tok_throws; }
+"service" { return tok_service; }
+"enum" { return tok_enum; }
+"const" { return tok_const; }
+
+hi def link thriftComment Comment
+hi def link thriftKeyword Special
+hi def link thriftBasicTypes Type
+hi def link thriftStructure StorageClass
+hi def link thriftTodo Todo
+hi def link thriftString String
+hi def link thriftNumber Number
+hi def link thriftSpecial Special
+hi def link thriftStructure Structure
+
+let b:current_syntax = "thrift"
diff --git a/runtime/syntax/tmux.vim b/runtime/syntax/tmux.vim
index 9766ed5..80636f2 100644
--- a/runtime/syntax/tmux.vim
+++ b/runtime/syntax/tmux.vim
@@ -1,5 +1,5 @@
" Language: tmux(1) configuration file
-" Version: 3.4 (git-608d1134)
+" Version: 3.4 (git-171004df)
" URL: https://github.com/ericpruitt/tmux.vim/
" Maintainer: Eric Pruitt <eric.pruitt@gmail.com>
" License: 2-Clause BSD (http://opensource.org/licenses/BSD-2-Clause)
@@ -28,7 +28,7 @@ syn match tmuxKey /\(C-\|M-\|\^\)\+\S\+/ display
syn match tmuxNumber /\<\d\+\>/ display
syn match tmuxFlags /\s-\a\+/ display
syn match tmuxVariableExpansion /\$\({[A-Za-z_]\w*}\|[A-Za-z_]\w*\)/ display
-syn match tmuxControl /\(^\|\s\)%\(if\|elif\|else\|endif\)\($\|\s\)/ display
+syn match tmuxControl /\(^\|\s\)%\(if\|elif\|else\|endif\|hidden\)\($\|\s\)/ display
syn match tmuxEscape /\\\(u\x\{4\}\|U\x\{8\}\|\o\{3\}\|[\\ernt$]\)/ display
" Missing closing bracket.
@@ -99,11 +99,11 @@ syn keyword tmuxOptions
\ after-set-environment after-set-hook after-set-option after-show-environment
\ after-show-messages after-show-options after-split-window after-unbind-key
\ aggressive-resize alert-activity alert-bell alert-silence allow-passthrough
-\ allow-rename alternate-screen assume-paste-time automatic-rename
-\ automatic-rename-format backspace base-index bell-action buffer-limit
-\ client-active client-attached client-detached client-focus-in
+\ allow-rename allow-set-title alternate-screen assume-paste-time
+\ automatic-rename automatic-rename-format backspace base-index bell-action
+\ buffer-limit client-active client-attached client-detached client-focus-in
\ client-focus-out client-resized client-session-changed clock-mode-color
-\ clock-mode-colour clock-mode-style command-alias copy-command
+\ clock-mode-colour clock-mode-style command-alias command-error copy-command
\ copy-mode-current-match-style copy-mode-mark-style copy-mode-match-style
\ cursor-color cursor-colour cursor-style default-command default-shell
\ default-size default-terminal destroy-unattached detach-on-destroy
diff --git a/runtime/syntax/tsv.vim b/runtime/syntax/tsv.vim
new file mode 100644
index 0000000..f0dd9f7
--- /dev/null
+++ b/runtime/syntax/tsv.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: Tab separated values (TSV)
+" Last Change: 2024 Jul 16
+" This runtime file is looking for a new maintainer.
+
+if exists('b:current_syntax')
+ finish
+endif
+
+let b:csv_delimiter = '\t' " enforce tab delimiter
+runtime! syntax/csv.vim
+let b:current_syntax = 'tsv'
diff --git a/runtime/syntax/typst.vim b/runtime/syntax/typst.vim
new file mode 100644
index 0000000..82fdadb
--- /dev/null
+++ b/runtime/syntax/typst.vim
@@ -0,0 +1,472 @@
+" Vim syntax file
+" Language: Typst
+" Maintainer: Gregory Anders <greg@gpanders.com>
+" Last Change: 2024-07-14
+" Based on: https://github.com/kaarmu/typst.vim
+
+if exists('b:current_syntax')
+ finish
+endif
+
+syntax sync fromstart
+syntax spell toplevel
+
+" Common {{{1
+syntax cluster typstCommon
+ \ contains=@typstComment
+
+" Common > Comment {{{2
+syntax cluster typstComment
+ \ contains=typstCommentBlock,typstCommentLine
+syntax match typstCommentBlock
+ \ #/\*\%(\_.\{-}\)\*/#
+ \ contains=typstCommentTodo,@Spell
+syntax match typstCommentLine
+ \ #//.*#
+ \ contains=typstCommentTodo,@Spell
+syntax keyword typstCommentTodo
+ \ contained
+ \ TODO FIXME XXX TBD
+
+
+" Code {{{1
+syntax cluster typstCode
+ \ contains=@typstCommon
+ \ ,@typstCodeKeywords
+ \ ,@typstCodeConstants
+ \ ,@typstCodeIdentifiers
+ \ ,@typstCodeFunctions
+ \ ,@typstCodeParens
+
+" Code > Keywords {{{2
+syntax cluster typstCodeKeywords
+ \ contains=typstCodeConditional
+ \ ,typstCodeRepeat
+ \ ,typstCodeKeyword
+ \ ,typstCodeStatement
+syntax keyword typstCodeConditional
+ \ contained
+ \ if else
+syntax keyword typstCodeRepeat
+ \ contained
+ \ while for
+syntax keyword typstCodeKeyword
+ \ contained
+ \ not in and or return
+syntax region typstCodeStatement
+ \ contained
+ \ matchgroup=typstCodeStatementWord start=/\v(let|set|import|include)>/
+ \ matchgroup=Noise end=/\v%(;|$)/
+ \ contains=@typstCode
+syntax region typstCodeStatement
+ \ contained
+ \ matchgroup=typstCodeStatementWord start=/show/
+ \ matchgroup=Noise end=/\v%(:|$)/ keepend
+ \ contains=@typstCode
+ \ skipwhite nextgroup=@typstCode,typstCodeShowRocket
+syntax match typstCodeShowRocket
+ \ contained
+ \ /.*=>/
+ \ contains=@typstCode
+ \ skipwhite nextgroup=@typstCode
+
+" Code > Identifiers {{{2
+syntax cluster typstCodeIdentifiers
+ \ contains=typstCodeIdentifier
+ \ ,typstCodeFieldAccess
+syntax match typstCodeIdentifier
+ \ contained
+ \ /\v\w\k*>(<%(let|set|show|import|include))@<![\.\[\(]@!/
+syntax match typstCodeFieldAccess
+ \ contained
+ \ /\v\w\k*>(<%(let|set|show|import|include))@<!\.[\[\(]@!/
+ \ nextgroup=typstCodeFieldAccess,typstCodeFunction
+
+" Code > Functions {{{2
+syntax cluster typstCodeFunctions
+ \ contains=typstCodeFunction
+syntax match typstCodeFunction
+ \ contained
+ \ /\v\w\k*>(<%(let|set|show|import|include))@<![\(\[]@=/
+ \ nextgroup=typstCodeFunctionArgument
+syntax match typstCodeFunctionArgument
+ \ contained
+ \ /\v%(%(\(.{-}\)|\[.{-}\]|\{.{-}\}))*/ transparent
+ \ contains=@typstCode
+
+" Code > Constants {{{2
+syntax cluster typstCodeConstants
+ \ contains=typstCodeConstant
+ \ ,typstCodeNumberInteger
+ \ ,typstCodeNumberFloat
+ \ ,typstCodeNumberLength
+ \ ,typstCodeNumberAngle
+ \ ,typstCodeNumberRatio
+ \ ,typstCodeNumberFraction
+ \ ,typstCodeString
+ \ ,typstCodeLabel
+syntax match typstCodeConstant
+ \ contained
+ \ /\v<%(none|auto|true|false)-@!>/
+syntax match typstCodeNumberInteger
+ \ contained
+ \ /\v<\d+>/
+
+syntax match typstCodeNumberFloat
+ \ contained
+ \ /\v<\d+\.\d*>/
+syntax match typstCodeNumberLength
+ \ contained
+ \ /\v<\d+(\.\d*)?(pt|mm|cm|in|em)>/
+syntax match typstCodeNumberAngle
+ \ contained
+ \ /\v<\d+(\.\d*)?(deg|rad)>/
+syntax match typstCodeNumberRatio
+ \ contained
+ \ /\v<\d+(\.\d*)?\%/
+syntax match typstCodeNumberFraction
+ \ contained
+ \ /\v<\d+(\.\d*)?fr>/
+syntax region typstCodeString
+ \ contained
+ \ start=/"/ skip=/\v\\\\|\\"/ end=/"/
+ \ contains=@Spell
+syntax match typstCodeLabel
+ \ contained
+ \ /\v\<\K%(\k*-*)*\>/
+
+" Code > Parens {{{2
+syntax cluster typstCodeParens
+ \ contains=typstCodeParen
+ \ ,typstCodeBrace
+ \ ,typstCodeBracket
+ \ ,typstCodeDollar
+ \ ,typstMarkupRawInline
+ \ ,typstMarkupRawBlock
+syntax region typstCodeParen
+ \ contained
+ \ matchgroup=Noise start=/(/ end=/)/
+ \ contains=@typstCode
+syntax region typstCodeBrace
+ \ contained
+ \ matchgroup=Noise start=/{/ end=/}/
+ \ contains=@typstCode
+syntax region typstCodeBracket
+ \ contained
+ \ matchgroup=Noise start=/\[/ end=/\]/
+ \ contains=@typstMarkup
+syntax region typstCodeDollar
+ \ contained
+ \ matchgroup=Number start=/\\\@<!\$/ end=/\\\@<!\$/
+ \ contains=@typstMath
+
+
+" Hashtag {{{1
+syntax cluster typstHashtag
+ \ contains=@typstHashtagKeywords
+ \ ,@typstHashtagConstants
+ \ ,@typstHashtagIdentifiers
+ \ ,@typstHashtagFunctions
+ \ ,@typstHashtagParens
+
+" Hashtag > Keywords {{{2
+syntax cluster typstHashtagKeywords
+ \ contains=typstHashtagConditional
+ \ ,typstHashtagRepeat
+ \ ,typstHashtagKeywords
+ \ ,typstHashtagStatement
+
+" syntax match typstHashtagControlFlowError
+" \ /\v#%(if|while|for)>-@!.{-}$\_.{-}%(\{|\[|\()/
+syntax match typstHashtagControlFlow
+ \ /\v#%(if|while|for)>.{-}\ze%(\{|\[|\()/
+ \ contains=typstHashtagConditional,typstHashtagRepeat
+ \ nextgroup=@typstCode
+syntax region typstHashtagConditional
+ \ contained
+ \ start=/\v#if>/ end=/\v\ze(\{|\[)/
+ \ contains=@typstCode
+syntax region typstHashtagRepeat
+ \ contained
+ \ start=/\v#(while|for)>/ end=/\v\ze(\{|\[)/
+ \ contains=@typstCode
+syntax match typstHashtagKeyword
+ \ /\v#(return)>/
+ \ skipwhite nextgroup=@typstCode
+syntax region typstHashtagStatement
+ \ matchgroup=typstHashtagStatementWord start=/\v#(let|set|import|include)>/
+ \ matchgroup=Noise end=/\v%(;|$)/
+ \ contains=@typstCode
+syntax region typstHashtagStatement
+ \ matchgroup=typstHashtagStatementWord start=/#show/
+ \ matchgroup=Noise end=/\v%(:|$)/ keepend
+ \ contains=@typstCode
+ \ skipwhite nextgroup=@typstCode,typstCodeShowRocket
+
+" Hashtag > Constants {{{2
+syntax cluster typstHashtagConstants
+ \ contains=typstHashtagConstant
+syntax match typstHashtagConstant
+ \ /\v#(none|auto|true|false)>/
+
+" Hashtag > Identifiers {{{2
+syntax cluster typstHashtagIdentifiers
+ \ contains=typstHashtagIdentifier
+ \ ,typstHashtagFieldAccess
+syntax match typstHashtagIdentifier
+ \ /\v#\w\k*>(<%(let|set|show|import|include))@<![\.\[\(]@!/
+syntax match typstHashtagFieldAccess
+ \ /\v#\w\k*>(<%(let|set|show|import|include))@<!\.[\[\(]@!/
+ \ nextgroup=typstCodeFieldAccess,typstCodeFunction
+
+" Hashtag > Functions {{{2
+syntax cluster typstHashtagFunctions
+ \ contains=typstHashtagFunction
+syntax match typstHashtagFunction
+ \ /\v#\w\k*>(<%(let|set|show|import|include))@<![\(\[]@=/
+ \ nextgroup=typstCodeFunctionArgument
+
+" Hashtag > Parens {{{2
+syntax cluster typstHashtagParens
+ \ contains=typstHashtagParen
+ \ ,typstHashtagBrace
+ \ ,typstHashtagBracket
+ \ ,typstHashtagDollar
+syntax region typstHashtagParen
+ \ matchgroup=Noise start=/#(/ end=/)/
+ \ contains=@typstCode
+syntax region typstHashtagBrace
+ \ matchgroup=Noise start=/#{/ end=/}/
+ \ contains=@typstCode
+syntax region typstHashtagBracket
+ \ matchgroup=Noise start=/#\[/ end=/\]/
+ \ contains=@typstMarkup
+syntax region typstHashtagDollar
+ \ matchgroup=Noise start=/#\$/ end=/\\\@<!\$/
+ \ contains=@typstMath
+
+
+" Markup {{{1
+syntax cluster typstMarkup
+ \ contains=@typstCommon
+ \ ,@Spell
+ \ ,@typstHashtag
+ \ ,@typstMarkupText
+ \ ,@typstMarkupParens
+
+" Markup > Text {{{2
+syntax cluster typstMarkupText
+ \ contains=typstMarkupRawInline
+ \ ,typstMarkupRawBlock
+ \ ,typstMarkupLabel
+ \ ,typstMarkupReference
+ \ ,typstMarkupUrl
+ \ ,typstMarkupHeading
+ \ ,typstMarkupBulletList
+ \ ,typstMarkupEnumList
+ \ ,typstMarkupTermList
+ \ ,typstMarkupBold
+ \ ,typstMarkupItalic
+ \ ,typstMarkupLinebreak
+ \ ,typstMarkupNonbreakingSpace
+ \ ,typstMarkupShy
+ \ ,typstMarkupDash
+ \ ,typstMarkupEllipsis
+
+" Raw Text
+syntax match typstMarkupRawInline
+ \ /`.\{-}`/
+syntax region typstMarkupRawBlock
+ \ matchgroup=Macro start=/```\w*/
+ \ matchgroup=Macro end=/```/ keepend
+syntax region typstMarkupCodeBlockTypst
+ \ matchgroup=Macro start=/```typst/
+ \ matchgroup=Macro end=/```/ contains=@typstCode keepend
+ \ concealends
+
+for s:name in get(g:, 'typst_embedded_languages', [])
+ let s:include = ['syntax include'
+ \ ,'@typstEmbedded_'..s:name
+ \ ,'syntax/'..s:name..'.vim']
+ let s:rule = ['syn region'
+ \,s:name
+ \,'matchgroup=Macro'
+ \,'start=/```'..s:name..'\>/ end=/```/'
+ \,'contains=@typstEmbedded_'..s:name
+ \,'keepend'
+ \,'concealends']
+ execute 'silent! ' .. join(s:include, ' ')
+ unlet! b:current_syntax
+ execute join(s:rule, ' ')
+endfor
+
+" Label & Reference
+syntax match typstMarkupLabel
+ \ /\v\<\K%(\k*-*)*\>/
+syntax match typstMarkupReference
+ \ /\v\@\K%(\k*-*)*/
+
+" URL
+syntax match typstMarkupUrl
+ \ #\v\w+://\S*#
+
+" Heading
+syntax match typstMarkupHeading
+ \ /^\s*\zs=\{1,6}\s.*$/
+ \ contains=typstMarkupLabel,@Spell
+
+" Lists
+syntax match typstMarkupBulletList
+ \ /\v^\s*-\s+/
+syntax match typstMarkupEnumList
+ \ /\v^\s*(\+|\d+\.)\s+/
+syntax region typstMarkupTermList
+ \ oneline start=/\v^\s*\/\s/ end=/:/
+ \ contains=@typstMarkup
+
+" Bold & Italic
+syntax match typstMarkupBold
+ \ /\v(\w|\\)@1<!\*\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!\*/
+ \ contains=typstMarkupBoldRegion
+syntax match typstMarkupItalic
+ \ /\v(\w|\\)@1<!_\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!_/
+ \ contains=typstMarkupItalicRegion
+syntax match typstMarkupBoldItalic
+ \ contained
+ \ /\v(\w|\\)@1<![_\*]\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!\2/
+ \ contains=typstMarkupBoldRegion,typstMarkupItalicRegion
+syntax region typstMarkupBoldRegion
+ \ contained
+ \ transparent matchgroup=typstMarkupBold
+ \ start=/\(^\|[^0-9a-zA-Z]\)\@<=\*/ end=/\*\($\|[^0-9a-zA-Z]\)\@=/
+ \ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
+syntax region typstMarkupItalicRegion
+ \ contained
+ \ transparent matchgroup=typstMarkupItalic
+ \ start=/\(^\|[^0-9a-zA-Z]\)\@<=_/ end=/_\($\|[^0-9a-zA-Z]\)\@=/
+ \ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
+
+" Linebreak & Special Whitespace
+syntax match typstMarkupLinebreak
+ \ /\\\\/
+syntax match typstMarkupNonbreakingSpace
+ \ /\~/
+syntax match typstMarkupShy
+ \ /-?/
+
+" Special Symbols
+syntax match typstMarkupDash
+ \ /-\{2,3}/
+syntax match typstMarkupEllipsis
+ \ /\.\.\./
+
+" Markup > Parens {{{2
+syntax cluster typstMarkupParens
+ \ contains=typstMarkupBracket
+ \ ,typstMarkupDollar
+syntax region typstMarkupBracket
+ \ matchgroup=Noise start=/\[/ end=/\]/
+ \ contains=@typstMarkup
+syntax region typstMarkupDollar
+ \ matchgroup=Special start=/\\\@<!\$/ end=/\\\@<!\$/
+ \ contains=@typstMath
+
+
+" Math {{{1
+syntax cluster typstMath
+ \ contains=@typstCommon
+ \ ,@typstHashtag
+ \ ,typstMathIdentifier
+ \ ,typstMathFunction
+ \ ,typstMathNumber
+ \ ,typstMathSymbol
+ \ ,typstMathBold
+ \ ,typstMathScripts
+ \ ,typstMathQuote
+
+syntax match typstMathIdentifier
+ \ /\a\a\+/
+ \ contained
+syntax match typstMathFunction
+ \ /\a\a\+\ze(/
+ \ contained
+syntax match typstMathNumber
+ \ /\<\d\+\>/
+ \ contained
+syntax region typstMathQuote
+ \ matchgroup=String start=/"/ skip=/\\"/ end=/"/
+ \ contained
+
+" Math > Linked groups {{{2
+highlight default link typstMathIdentifier Identifier
+highlight default link typstMathFunction Statement
+highlight default link typstMathNumber Number
+highlight default link typstMathSymbol Statement
+
+" Highlighting {{{1
+
+" Highlighting > Linked groups {{{2
+highlight default link typstCommentBlock Comment
+highlight default link typstCommentLine Comment
+highlight default link typstCommentTodo Todo
+highlight default link typstCodeConditional Conditional
+highlight default link typstCodeRepeat Repeat
+highlight default link typstCodeKeyword Keyword
+highlight default link typstCodeConstant Constant
+highlight default link typstCodeNumberInteger Number
+highlight default link typstCodeNumberFloat Number
+highlight default link typstCodeNumberLength Number
+highlight default link typstCodeNumberAngle Number
+highlight default link typstCodeNumberRatio Number
+highlight default link typstCodeNumberFraction Number
+highlight default link typstCodeString String
+highlight default link typstCodeLabel Structure
+highlight default link typstCodeStatementWord Statement
+highlight default link typstCodeIdentifier Identifier
+highlight default link typstCodeFieldAccess Identifier
+highlight default link typstCodeFunction Function
+highlight default link typstCodeParen Noise
+highlight default link typstCodeBrace Noise
+highlight default link typstCodeBracket Noise
+highlight default link typstCodeDollar Noise
+" highlight default link typstHashtagControlFlowError Error
+highlight default link typstHashtagConditional Conditional
+highlight default link typstHashtagRepeat Repeat
+highlight default link typstHashtagKeyword Keyword
+highlight default link typstHashtagConstant Constant
+highlight default link typstHashtagStatementWord Statement
+highlight default link typstHashtagIdentifier Identifier
+highlight default link typstHashtagFieldAccess Identifier
+highlight default link typstHashtagFunction Function
+highlight default link typstHashtagParen Noise
+highlight default link typstHashtagBrace Noise
+highlight default link typstHashtagBracket Noise
+highlight default link typstHashtagDollar Noise
+highlight default link typstMarkupRawInline Macro
+highlight default link typstMarkupRawBlock Macro
+highlight default link typstMarkupLabel Structure
+highlight default link typstMarkupReference Structure
+highlight default link typstMarkupBulletList Structure
+" highlight default link typstMarkupItalicError Error
+" highlight default link typstMarkupBoldError Error
+highlight default link typstMarkupEnumList Structure
+highlight default link typstMarkupLinebreak Structure
+highlight default link typstMarkupNonbreakingSpace Structure
+highlight default link typstMarkupShy Structure
+highlight default link typstMarkupDash Structure
+highlight default link typstMarkupEllipsis Structure
+highlight default link typstMarkupTermList Structure
+highlight default link typstMarkupDollar Noise
+
+" Highlighting > Custom Styling {{{2
+highlight! Conceal ctermfg=NONE ctermbg=NONE guifg=NONE guibg=NONE
+
+highlight default typstMarkupHeading term=underline,bold cterm=underline,bold gui=underline,bold
+highlight default typstMarkupUrl term=underline cterm=underline gui=underline
+highlight default typstMarkupBold term=bold cterm=bold gui=bold
+highlight default typstMarkupItalic term=italic cterm=italic gui=italic
+highlight default typstMarkupBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
+
+let b:current_syntax = 'typst'
+
+" }}}1
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 033251f..2fa2e35 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -3,7 +3,7 @@
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougkearns@gmail.com>
" URL: https://github.com/vim-jp/syntax-vim-ex
-" Last Change: 2024 Jun 15
+" Last Change: 2024 Aug 23
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -28,14 +28,12 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell
" regular vim commands {{{2
" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR=''
-syn keyword vimCommand contained abo[veleft] abs[tract] al[l] ar[gs] arga[dd] argd[elete] argdo argded[upe] arge[dit] argg[lobal] argl[ocal] argu[ment] as[cii] b[uffer] bN[ext] ba[ll] bad[d] balt bd[elete] bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bo[tright] bp[revious] br[ewind] brea[k] breaka[dd] breakd[el] breakl[ist] bro[wse] buffers bufd[o] bun[load] bw[ipeout] c[hange] cN[ext] cNf[ile] cabo[ve] cad[dbuffer] cadde[xpr] caddf[ile] caf[ter] cal[l] cb[uffer] cbe[fore] cbel[ow] cbo[ttom] cc ccl[ose] cd cdo ce[nter] cex[pr] cf[ile] cfd[o] cfir[st] cg[etfile] cgetb[uffer] cgete[xpr] chd[ir] changes che[ckpath] checkt[ime] chi[story] cl[ist] cla[st] class clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler]
-syn keyword vimCommand contained con[tinue] conf[irm] cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] debugg[reedy] defc[ompile] defe[r] delc[ommand] delf[unction] di[splay] dif[fupdate] diffg[et] diffo[ff] diffp[atch] diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] el[se] elsei[f] em[enu] en[dif] endin[terface] endc[lass] ende[num] endfo[r] endt[ry] endw[hile] ene[w] enu[m] ev[al] ex exi[t] exp[ort] exu[sage] f[ile] files filet[ype] filt[er] fin[d] fina[l] finall[y] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] for g[lobal] go[to] gr[ep] grepa[dd] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpg[rep]
-syn keyword vimCommand contained helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] ho[rizontal] if ij[ump] il[ist] imp[ort] int[ro] inte[rface] is[earch] isp[lit] j[oin] ju[mps] k kee[pmarks] keepj[umps] keepp[atterns] keepa[lt] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lan[guage] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lc[d] lch[dir] lcl[ose] lcs[cope] ld[o] le[ft] lefta[bove] let lex[pr] leg[acy] lf[ile] lfd[o] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lgr[ep] lgrepa[dd] lh[elpgrep] lhi[story] ll lla[st] lli[st] lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] loadk[eymap] loc[kmarks] lockv[ar] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lua luad[o] luaf[ile] lv[imgrep] lvimgrepa[dd] lw[indow] ls m[ove]
-syn keyword vimCommand contained ma[rk] mak[e] marks mat[ch] menut[ranslate] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] mz[scheme] mzf[ile] n[ext] nb[key] nbc[lose] nbs[tart] noa[utocmd] noh[lsearch] nos[wapfile] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pc[lose] pe[rl] perld[o] ped[it] po[p] pp[op] pre[serve] prev[ious] pro[mptfind] promptr[epl] prof[ile] profd[el] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pub[lic] pw[d] py[thon] pyd[o] pyf[ile] py3 py3d[o] python3 py3f[ile] pyx pyxd[o] pythonx pyxf[ile] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redi[r] redr[aw] redraws[tatus] redrawt[abline] reg[isters] res[ize] ret[ab] retu[rn]
-syn keyword vimCommand contained rew[ind] ri[ght] rightb[elow] ru[ntime] rub[y] rubyd[o] rubyf[ile] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] san[dbox] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] sc[riptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] si[malt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sor[t] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sr[ewind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stat[ic] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sw[apname] synti[me] sync[bind] smi[le] t tN[ext] ta[g] tags tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st]
-syn keyword vimCommand contained tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] thi[s] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] ty[pe] u[ndo] undoj[oin] undol[ist] unh[ide] unl[et] unlo[ckvar] uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim[grep] vimgrepa[dd] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wh[ile] wi[nsize] winc[md] wind[o] winp[os] wn[ext] wp[revious] wq wqa[ll] wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i
-
-syn keyword vimCommand contained 2mat[ch] 3mat[ch]
+syn keyword vimCommand contained abo[veleft] abs[tract] al[l] ar[gs] arga[dd] argd[elete] argdo argded[upe] arge[dit] argg[lobal] argl[ocal] argu[ment] as[cii] b[uffer] bN[ext] ba[ll] bad[d] balt bd[elete] bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bo[tright] bp[revious] br[ewind] brea[k] breaka[dd] breakd[el] breakl[ist] bro[wse] buffers bufd[o] bun[load] bw[ipeout] c[hange] cN[ext] cNf[ile] cabo[ve] cad[dbuffer] cadde[xpr] caddf[ile] caf[ter] cb[uffer] cbe[fore] cbel[ow] cbo[ttom] cc ccl[ose] cd cdo ce[nter] cex[pr] cf[ile] cfd[o] cfir[st] cg[etfile] cgetb[uffer] cgete[xpr] chd[ir] changes che[ckpath] checkt[ime] chi[story] cl[ist] cla[st] class clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler]
+syn keyword vimCommand contained con[tinue] conf[irm] cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] debugg[reedy] defc[ompile] defe[r] delc[ommand] delf[unction] di[splay] dif[fupdate] diffg[et] diffo[ff] diffp[atch] diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] el[se] elsei[f] em[enu] en[dif] endin[terface] endc[lass] ende[num] endfo[r] endt[ry] endw[hile] ene[w] enu[m] ev[al] ex exi[t] exp[ort] exu[sage] f[ile] files filet[ype] filt[er] fin[d] finall[y] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gr[ep] grepa[dd] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpg[rep] helpt[ags]
+syn keyword vimCommand contained ha[rdcopy] hi[ghlight] hid[e] his[tory] ho[rizontal] if ij[ump] il[ist] imp[ort] int[ro] inte[rface] is[earch] isp[lit] j[oin] ju[mps] k kee[pmarks] keepj[umps] keepp[atterns] keepa[lt] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lan[guage] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lc[d] lch[dir] lcl[ose] lcs[cope] ld[o] le[ft] lefta[bove] lex[pr] leg[acy] lf[ile] lfd[o] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lgr[ep] lgrepa[dd] lh[elpgrep] lhi[story] ll lla[st] lli[st] lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] loc[kmarks] lockv[ar] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lua luad[o] luaf[ile] lv[imgrep] lvimgrepa[dd] lw[indow] ls m[ove] ma[rk] mak[e] marks menut[ranslate]
+syn keyword vimCommand contained mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] mz[scheme] mzf[ile] n[ext] nb[key] nbc[lose] nbs[tart] noa[utocmd] noh[lsearch] nos[wapfile] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pc[lose] pe[rl] perld[o] ped[it] po[p] pp[op] pre[serve] prev[ious] pro[mptfind] promptr[epl] prof[ile] profd[el] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pub[lic] pw[d] py[thon] pyd[o] pyf[ile] py3 py3d[o] python3 py3f[ile] pyx pyxd[o] pythonx pyxf[ile] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redi[r] redr[aw] redraws[tatus] redrawt[abline] reg[isters] res[ize] ret[ab] retu[rn] rew[ind] ri[ght] rightb[elow] ru[ntime]
+syn keyword vimCommand contained rub[y] rubyd[o] rubyf[ile] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] san[dbox] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] sc[riptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] si[malt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sor[t] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sr[ewind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stat[ic] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sw[apname] synti[me] sync[bind] smi[le] t tN[ext] ta[g] tags tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly]
+syn keyword vimCommand contained tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] thi[s] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] ty[pe] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim[grep] vimgrepa[dd] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wh[ile] wi[nsize] winc[md] wind[o] winp[os] wn[ext] wp[revious] wq wqa[ll] wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i
" Lower priority for _new_ to distinguish constructors from the command.
syn match vimCommand contained "\<new\>(\@!"
@@ -43,15 +41,15 @@ syn match vimCommand contained "\<z[-+^.=]\=\>"
syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man Over Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Until Winbar XMLent XMLns
" vimOptions are caught only when contained in a vimSet {{{2
-" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR=''
-syn keyword vimOption contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard ch cmdheight cwh cmdwinheight cc colorcolumn co columns com comments cms commentstring cp compatible cpt complete cfu completefunc
-syn keyword vimOption contained cot completeopt cpp completepopup csl completeslash cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells ef errorfile efm errorformat ek esckeys ei eventignore et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase
-syn keyword vimOption contained ft filetype fcs fillchars fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden hl highlight hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc
-syn keyword vimOption contained imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime mco maxcombine mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot mis menuitems msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus
-syn keyword vimOption contained mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt ph pumheight pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions
-syn keyword vimOption contained report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang
-syn keyword vimOption contained spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tal tabline tpm tabpagemax ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir
-syn keyword vimOption contained udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes
+" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
+syn keyword vimOption contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard ch cmdheight cwh cmdwinheight cc colorcolumn co columns com comments cms commentstring cp compatible cpt complete cfu completefunc skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained cot completeopt cpp completepopup csl completeslash cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells ef errorfile efm errorformat ek esckeys ei eventignore et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained ft filetype fcs fillchars fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden hl highlight hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime mco maxcombine mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot mis menuitems msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt ph pumheight pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes skipwhite nextgroup=vimSetEqual,vimSetMod
" vimOptions: These are the turn-off setting variants {{{2
" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
@@ -68,8 +66,8 @@ syn keyword vimOption contained invprompt invro invreadonly invrnu invrelativenu
syn keyword vimOption contained invtf invttyfast invudf invundofile invvb invvisualbell invwarn invwiv invweirdinvert invwic invwildignorecase invwmnu invwildmenu invwfb invwinfixbuf invwfh invwinfixheight invwfw invwinfixwidth invwrap invws invwrapscan invwrite invwa invwriteany invwb invwritebackup invxtermcodes
" termcap codes (which can also be set) {{{2
-" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR=''
-syn keyword vimOption contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo
+" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
+syn keyword vimOption contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo skipwhite nextgroup=vimSetEqual,vimSetMod
" term key codes
syn keyword vimOption contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku
syn match vimOption contained "t_%1"
@@ -90,8 +88,8 @@ syn keyword vimErrSetting contained invakm invaltkeymap invanti invantialias inv
" AutoCmd Events {{{2
syn case ignore
" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR=''
-syn keyword vimAutoEvent contained BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged DirChangedPre EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre
-syn keyword vimAutoEvent contained FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre MenuPopup ModeChanged OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost SessionWritePost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TermResponseAll TextChanged TextChangedI TextChangedP TextChangedT TextYankPost User VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinClosed WinEnter WinLeave WinNew WinNewPre WinResized WinScrolled
+syn keyword vimAutoEvent contained BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedC CursorMovedI DiffUpdated DirChanged DirChangedPre EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost
+syn keyword vimAutoEvent contained FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre KeyInputPre MenuPopup ModeChanged OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost SessionWritePost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TermResponseAll TextChanged TextChangedI TextChangedP TextChangedT TextYankPost User VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinClosed WinEnter WinLeave WinNew WinNewPre WinResized WinScrolled
" Highlight commonly used Groupnames {{{2
syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
@@ -104,20 +102,24 @@ syn case match
" Function Names {{{2
" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR=''
-syn keyword vimFuncName contained abs acos add and append appendbufline argc argidx arglistid argv asin assert_beeps assert_equal assert_equalfile assert_exception assert_fails assert_false assert_inrange assert_match assert_nobeep assert_notequal assert_notmatch assert_report assert_true atan atan2 autocmd_add autocmd_delete autocmd_get balloon_gettext balloon_show balloon_split blob2list browse browsedir bufadd bufexists buflisted bufload bufloaded bufname bufnr bufwinid bufwinnr byte2line byteidx byteidxcomp call ceil ch_canread ch_close ch_close_in ch_evalexpr ch_evalraw ch_getbufnr ch_getjob ch_info ch_log ch_logfile ch_open ch_read ch_readblob ch_readraw ch_sendexpr ch_sendraw ch_setoptions ch_status changenr char2nr charclass charcol charidx chdir cindent
-syn keyword vimFuncName contained clearmatches col complete complete_add complete_check complete_info confirm copy cos cosh count cscope_connection cursor debugbreak deepcopy delete deletebufline did_filetype diff diff_filler diff_hlID digraph_get digraph_getlist digraph_set digraph_setlist echoraw empty environ err_teapot escape eval eventhandler executable execute exepath exists exists_compiled exp expand expandcmd extend extendnew feedkeys filecopy filereadable filewritable filter finddir findfile flatten flattennew float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreach foreground fullcommand funcref function garbagecollect get getbufinfo getbufline getbufoneline getbufvar getcellwidths getchangelist getchar
-syn keyword vimFuncName contained getcharmod getcharpos getcharsearch getcharstr getcmdcompltype getcmdline getcmdpos getcmdscreenpos getcmdtype getcmdwintype getcompletion getcurpos getcursorcharpos getcwd getenv getfontname getfperm getfsize getftime getftype getimstatus getjumplist getline getloclist getmarklist getmatches getmousepos getmouseshape getpid getpos getqflist getreg getreginfo getregion getregionpos getregtype getscriptinfo gettabinfo gettabvar gettabwinvar gettagstack gettext getwininfo getwinpos getwinposx getwinposy getwinvar glob glob2regpat globpath has has_key haslocaldir hasmapto histadd histdel histget histnr hlID hlexists hlget hlset hostname iconv indent index indexof input inputdialog inputlist inputrestore inputsave inputsecret insert
-syn keyword vimFuncName contained instanceof interrupt invert isabsolutepath isdirectory isinf islocked isnan items job_getchannel job_info job_setoptions job_start job_status job_stop join js_decode js_encode json_decode json_encode keys keytrans len libcall libcallnr line line2byte lispindent list2blob list2str listener_add listener_flush listener_remove localtime log log10 luaeval map maparg mapcheck maplist mapnew mapset match matchadd matchaddpos matcharg matchbufline matchdelete matchend matchfuzzy matchfuzzypos matchlist matchstr matchstrlist matchstrpos max menu_info min mkdir mode mzeval nextnonblank nr2char or pathshorten perleval popup_atcursor popup_beval popup_clear popup_close popup_create popup_dialog popup_filter_menu popup_filter_yesno popup_findecho
-syn keyword vimFuncName contained popup_findinfo popup_findpreview popup_getoptions popup_getpos popup_hide popup_list popup_locate popup_menu popup_move popup_notification popup_setoptions popup_settext popup_show pow prevnonblank printf prompt_getprompt prompt_setcallback prompt_setinterrupt prompt_setprompt prop_add prop_add_list prop_clear prop_find prop_list prop_remove prop_type_add prop_type_change prop_type_delete prop_type_get prop_type_list pum_getpos pumvisible py3eval pyeval pyxeval rand range readblob readdir readdirex readfile reduce reg_executing reg_recording reltime reltimefloat reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remote_startserver remove rename repeat resolve reverse round rubyeval screenattr screenchar
-syn keyword vimFuncName contained screenchars screencol screenpos screenrow screenstring search searchcount searchdecl searchpair searchpairpos searchpos server2client serverlist setbufline setbufvar setcellwidths setcharpos setcharsearch setcmdline setcmdpos setcursorcharpos setenv setfperm setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar settagstack setwinvar sha256 shellescape shiftwidth sign_define sign_getdefined sign_getplaced sign_jump sign_place sign_placelist sign_undefine sign_unplace sign_unplacelist simplify sin sinh slice sort sound_clear sound_playevent sound_playfile sound_stop soundfold spellbadword spellsuggest split sqrt srand state str2float str2list str2nr strcharlen strcharpart strchars strdisplaywidth strftime
-syn keyword vimFuncName contained strgetchar stridx string strlen strpart strptime strridx strtrans strutf16len strwidth submatch substitute swapfilelist swapinfo swapname synID synIDattr synIDtrans synconcealed synstack system systemlist tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname term_dumpdiff term_dumpload term_dumpwrite term_getaltscreen term_getansicolors term_getattr term_getcursor term_getjob term_getline term_getscrolled term_getsize term_getstatus term_gettitle term_gettty term_list term_scrape term_sendkeys term_setansicolors term_setapi term_setkill term_setrestore term_setsize term_start term_wait terminalprops test_alloc_fail test_autochdir test_feedinput test_garbagecollect_now test_garbagecollect_soon test_getvalue test_gui_event
-syn keyword vimFuncName contained test_ignore_error test_mswin_event test_null_blob test_null_channel test_null_dict test_null_function test_null_job test_null_list test_null_partial test_null_string test_option_not_set test_override test_refcount test_setmouse test_settime test_srand_seed test_unknown test_void timer_info timer_pause timer_start timer_stop timer_stopall tolower toupper tr trim trunc type typename undofile undotree uniq utf16idx values virtcol virtcol2col visualmode wildmenumode win_execute win_findbuf win_getid win_gettype win_gotoid win_id2tabwin win_id2win win_move_separator win_move_statusline win_screenpos win_splitmove winbufnr wincol windowsversion winheight winlayout winline winnr winrestcmd winrestview winsaveview winwidth wordcount writefile
-syn keyword vimFuncName contained xor
+syn keyword vimFuncName contained abs acos add and append appendbufline argc argidx arglistid argv asin assert_beeps assert_equal assert_equalfile assert_exception assert_fails assert_false assert_inrange assert_match assert_nobeep assert_notequal assert_notmatch assert_report assert_true atan atan2 autocmd_add autocmd_delete autocmd_get balloon_gettext balloon_show balloon_split bindtextdomain blob2list browse browsedir bufadd bufexists buflisted bufload bufloaded bufname bufnr bufwinid bufwinnr byte2line byteidx byteidxcomp call ceil ch_canread ch_close ch_close_in ch_evalexpr ch_evalraw ch_getbufnr ch_getjob ch_info ch_log ch_logfile ch_open ch_read ch_readblob ch_readraw ch_sendexpr ch_sendraw ch_setoptions ch_status changenr char2nr charclass charcol charidx
+syn keyword vimFuncName contained chdir cindent clearmatches col complete complete_add complete_check complete_info confirm copy cos cosh count cscope_connection cursor debugbreak deepcopy delete deletebufline did_filetype diff diff_filler diff_hlID digraph_get digraph_getlist digraph_set digraph_setlist echoraw empty environ err_teapot escape eval eventhandler executable execute exepath exists exists_compiled exp expand expandcmd extend extendnew feedkeys filecopy filereadable filewritable filter finddir findfile flatten flattennew float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreach foreground fullcommand funcref function garbagecollect get getbufinfo getbufline getbufoneline getbufvar getcellwidths getchangelist
+syn keyword vimFuncName contained getchar getcharmod getcharpos getcharsearch getcharstr getcmdcompltype getcmdline getcmdpos getcmdscreenpos getcmdtype getcmdwintype getcompletion getcurpos getcursorcharpos getcwd getenv getfontname getfperm getfsize getftime getftype getimstatus getjumplist getline getloclist getmarklist getmatches getmousepos getmouseshape getpid getpos getqflist getreg getreginfo getregion getregionpos getregtype getscriptinfo gettabinfo gettabvar gettabwinvar gettagstack gettext getwininfo getwinpos getwinposx getwinposy getwinvar glob glob2regpat globpath has has_key haslocaldir hasmapto histadd histdel histget histnr hlID hlexists hlget hlset hostname iconv id indent index indexof input inputdialog inputlist inputrestore inputsave inputsecret
+syn keyword vimFuncName contained insert instanceof interrupt invert isabsolutepath isdirectory isinf islocked isnan items job_getchannel job_info job_setoptions job_start job_status job_stop join js_decode js_encode json_decode json_encode keys keytrans len libcall libcallnr line line2byte lispindent list2blob list2str listener_add listener_flush listener_remove localtime log log10 luaeval map maparg mapcheck maplist mapnew mapset match matchadd matchaddpos matcharg matchbufline matchdelete matchend matchfuzzy matchfuzzypos matchlist matchstr matchstrlist matchstrpos max menu_info min mkdir mode mzeval nextnonblank nr2char or pathshorten perleval popup_atcursor popup_beval popup_clear popup_close popup_create popup_dialog popup_filter_menu popup_filter_yesno
+syn keyword vimFuncName contained popup_findecho popup_findinfo popup_findpreview popup_getoptions popup_getpos popup_hide popup_list popup_locate popup_menu popup_move popup_notification popup_setbuf popup_setoptions popup_settext popup_show pow prevnonblank printf prompt_getprompt prompt_setcallback prompt_setinterrupt prompt_setprompt prop_add prop_add_list prop_clear prop_find prop_list prop_remove prop_type_add prop_type_change prop_type_delete prop_type_get prop_type_list pum_getpos pumvisible py3eval pyeval pyxeval rand range readblob readdir readdirex readfile reduce reg_executing reg_recording reltime reltimefloat reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remote_startserver remove rename repeat resolve reverse round
+syn keyword vimFuncName contained rubyeval screenattr screenchar screenchars screencol screenpos screenrow screenstring search searchcount searchdecl searchpair searchpairpos searchpos server2client serverlist setbufline setbufvar setcellwidths setcharpos setcharsearch setcmdline setcmdpos setcursorcharpos setenv setfperm setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar settagstack setwinvar sha256 shellescape shiftwidth sign_define sign_getdefined sign_getplaced sign_jump sign_place sign_placelist sign_undefine sign_unplace sign_unplacelist simplify sin sinh slice sort sound_clear sound_playevent sound_playfile sound_stop soundfold spellbadword spellsuggest split sqrt srand state str2float str2list str2nr strcharlen strcharpart strchars
+syn keyword vimFuncName contained strdisplaywidth strftime strgetchar stridx string strlen strpart strptime strridx strtrans strutf16len strwidth submatch substitute swapfilelist swapinfo swapname synID synIDattr synIDtrans synconcealed synstack system systemlist tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname term_dumpdiff term_dumpload term_dumpwrite term_getaltscreen term_getansicolors term_getattr term_getcursor term_getjob term_getline term_getscrolled term_getsize term_getstatus term_gettitle term_gettty term_list term_scrape term_sendkeys term_setansicolors term_setapi term_setkill term_setrestore term_setsize term_start term_wait terminalprops test_alloc_fail test_autochdir test_feedinput test_garbagecollect_now test_garbagecollect_soon
+syn keyword vimFuncName contained test_getvalue test_gui_event test_ignore_error test_mswin_event test_null_blob test_null_channel test_null_dict test_null_function test_null_job test_null_list test_null_partial test_null_string test_option_not_set test_override test_refcount test_setmouse test_settime test_srand_seed test_unknown test_void timer_info timer_pause timer_start timer_stop timer_stopall tolower toupper tr trim trunc type typename undofile undotree uniq utf16idx values virtcol virtcol2col visualmode wildmenumode win_execute win_findbuf win_getid win_gettype win_gotoid win_id2tabwin win_id2win win_move_separator win_move_statusline win_screenpos win_splitmove winbufnr wincol windowsversion winheight winlayout winline winnr winrestcmd winrestview winsaveview
+syn keyword vimFuncName contained winwidth wordcount writefile xor
"--- syntax here and above generated by mkvimvim ---
" Special Vim Highlighting (not automatic) {{{1
-" Set up folding commands for this syntax highlighting file {{{2
+" Set up commands for this syntax highlighting file {{{2
+
+com! -nargs=* Vim9 execute <q-args> s:vim9script ? "" : "contained"
+com! -nargs=* VimL execute <q-args> s:vim9script ? "contained" : ""
+
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[afhHlmpPrt]'
if g:vimsyn_folding =~# 'a'
com! -nargs=* VimFolda <args> fold
@@ -200,6 +202,14 @@ else
let s:vimsyn_maxlines= 60
endif
+" Nulls {{{2
+" =====
+Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string
+
+" Booleans {{{2
+" ========
+Vim9 syn keyword vim9Boolean true false
+
" Numbers {{{2
" =======
syn case ignore
@@ -213,7 +223,8 @@ syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSub
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCatch,vimDef,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimGlobal,vimHighlight,vimLet,vimMap,vimMark,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDef,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
+syn cluster vim9CmdList contains=vim9Const,vim9Final,vim9For,vim9Var
syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand
syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
@@ -224,7 +235,8 @@ syn match vimVar "\s\zs&t_k;"
syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
syn keyword vimCommand contained in
-syn cluster vimExprList contains=vimEnvvar,vimFunc,vimFuncVar,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar
+syn cluster vimExprList contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
+syn cluster vim9ExprList contains=vim9Boolean,vim9Null
" Insertions And Appends: insert append {{{2
" (buftype != nofile test avoids having append, change, insert show up in the command window)
@@ -244,6 +256,10 @@ syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vi
syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
syn keyword vimBehaveModel contained mswin xterm
+" Call {{{2
+" ====
+syn match vimCall "\<call\=\>" skipwhite nextgroup=vimFunc
+
" Exception Handling {{{2
syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList
syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern
@@ -278,8 +294,8 @@ syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBan
" Operators: {{{2
" =========
-syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar
-syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
+syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
+syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
syn match vimOper "\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\|!\~#\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
syn match vimOper "\(\<is\|\<isnot\)[?#]\{0,2}\>" skipwhite nextgroup=vimString,vimSpecFile
syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
@@ -294,8 +310,8 @@ syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFunc
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSearch,vimSpecFile,vimString,vimSubst,vimFuncFold
-syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert
-syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment
+syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet
+syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For
syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
@@ -315,19 +331,19 @@ syn keyword vimFuncKey contained fu[nction]
syn keyword vimDefKey contained def
syn keyword vimMethodName contained empty len string
-syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod contains=vimFuncParam,@vimContinue
-syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType contains=vimDefParam,vim9Comment
+syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,@vimContinue
+syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError contains=vimDefParam,vim9Comment,vimFuncParamEquals
syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
-syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod
+syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
-syn region vimFuncBody contained start="^" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList
-syn region vimDefBody contained start="^" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList
+syn region vimFuncBody contained start="^.\=" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+syn region vimDefBody contained start="^.\=" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
-syn match vimEndfunction "\<endf\%[unction]\>"
-syn match vimEnddef "\<enddef\>"
+syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
syn region vimFuncFold start="^\s*:\=\s*fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="^\s*:\=\s*endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
@@ -340,9 +356,9 @@ syn match vimFuncBlank contained "\s\+"
" Types: {{{2
" =====
-" vimTypes : new for vim9
-syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze#" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef contains=vimTypeSep transparent
-syn match vimParamType contained ":\s\+\a" skipwhite skipnl nextgroup=vimFuncParamEquals contains=vimTypeSep,@vimType
+
+syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef,vimCommentError contains=vimTypeSep transparent
+syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
syn keyword vimType contained any blob bool channel float job number string void
@@ -369,7 +385,7 @@ else
endif
syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
-syn region vimKeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
+syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
" Special Filenames, Modifiers, Extension Removal: {{{2
" ===============================================
@@ -402,7 +418,7 @@ endif
syn case ignore
syn keyword vimUserAttrbKey contained bar ban[g] cou[nt] ra[nge] com[plete] n[args] re[gister]
" GEN_SYN_VIM: vimUserAttrbCmplt, START_STR='syn keyword vimUserAttrbCmplt contained', END_STR=''
-syn keyword vimUserAttrbCmplt contained arglist augroup behave buffer color command compiler cscope diff_buffer dir environment event expression file file_in_path filetype function help highlight history keymap locale mapclear mapping menu messages syntax syntime option packadd runtime shellcmd sign tag tag_listfiles user var breakpoint scriptnames
+syn keyword vimUserAttrbCmplt contained arglist augroup behave breakpoint buffer color command compiler cscope diff_buffer dir dir_in_path environment event expression file file_in_path filetype function help highlight history keymap locale mapclear mapping menu messages option packadd runtime scriptnames shellcmd sign syntax syntime tag tag_listfiles user var
syn keyword vimUserAttrbCmplt contained custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
syn match vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
@@ -418,35 +434,26 @@ if get(g:, "vimsyn_comment_strings", 1)
endif
if s:vim9script
- syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString contained
- syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString contained
- syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString contained
- " Vim9 comments - TODO: might be highlighted while they don't work
- syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
- syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
- syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
- " Vim9 comment inside expression
- " syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString
- " syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString
- " syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString
-
syn cluster vimComment contains=vim9Comment
else
- syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
- syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
- syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
- " Vim9 comments - TODO: might be highlighted while they don't work
- syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString contained
- " Vim9 comment inside expression
- syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained
-
syn cluster vimComment contains=vimComment
endif
+VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
+VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
+VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
+" Vim9 comments - TODO: might be highlighted while they don't work
+Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
+Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
+Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
+" Vim9 comment inside expression
+Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained
+Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained
+Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained
+
+syn match vim9CommentError contained "#.*"
+syn match vimCommentError contained +".*+
+
" Environment Variables: {{{2
" =====================
syn match vimEnvvar "\$\I\i*"
@@ -473,11 +480,12 @@ syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1
syn match vimEscape contained "\\<" contains=vimNotation
syn match vimEscape contained "\\<\*[^>]*>\=>"
-syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=vimStringInterpolationBrace,vimStringInterpolationExpr
-syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,vimStringInterpolationBrace,vimStringInterpolationExpr
+syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=@vimStringInterpolation
+syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation
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
" Substitutions: {{{2
" =============
@@ -537,28 +545,45 @@ syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
" Set command and associated set-options (vimOptions) with comment {{{2
-syn region vimSet matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\.\n\@!" end="$" end="|" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=vimSetEqual,vimOption,vimErrSetting,@vimComment,vimSetString,vimSetMod
-syn region vimSetEqual contained start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]"me=e-1 end="$" contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar
-syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
+syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
+syn region vimSetRegion contained start="\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*["#]\\ + matchgroup=vimCmdSep end="|" end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=@vimComment,@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap
+syn region vimSetEqual contained matchgroup=vimOper start="[=:]\|[-+^]=" skip=+\\\\\|\\|\|\\\s\|\n\s*\\\|\n\s*["#]\\ \|^\s*\\\|^\s*["#]\\ + matchgroup=vimCmdSep end="|" end="\ze\s" end="$" contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep
+syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
+syn keyword vimSetAll contained all nextgroup=vimSetMod
+syn keyword vimSetTermcap contained termcap
+syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
syn match vimSetSep contained "[,:]"
-syn match vimSetMod contained "&vim\=\|[!&?<]\|all&"
+syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
-" Let And Var: {{{2
-" ===========
-syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc,vimLetRegister,vimVarList
-syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimLetHereDoc,vimVarList
-syn region vimVarList contained start="\[" end="]" contains=vimVar,vimContinue
+" Variable Declarations: {{{2
+" =====================
+VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
+VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
+syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
-syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
+VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
-VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*\%(trim\s\+\%(eval\s\+\)\=\|eval\s\+\%(trim\s\+\)\=\)\=\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\s*\z1\s*$' extend
-syn keyword vimLet var skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' contains=@vimStringInterpolation extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' contains=@vimStringInterpolation extend
+
+Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
+Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
+Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
+
+syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc
+syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
" For: {{{2
" ===
-syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
+if s:vim9script
+ syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
+else
+ syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
+endif
" Abbreviations: {{{2
" =============
@@ -602,15 +627,17 @@ syn region vimExecute matchgroup=vimCommand start="\<exe\%[cute]\>" skip=+\\|\|\
" Maps: {{{2
" ====
-syn match vimMap "\<map\>\ze\s*(\@!" skipwhite nextgroup=vimMapMod,vimMapLhs
-syn match vimMap "\<map!" contains=vimMapBang skipwhite nextgroup=vimMapMod,vimMapLhs
-" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
-syn keyword vimMap cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] smap snor[emap] tma[p] tno[remap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
+syn keyword vimMap cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] om[ap] ono[remap] smap snor[emap] tma[p] tno[remap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapMod,vimMapLhs
+syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
syn keyword vimMap cmapc[lear] imapc[lear] lmapc[lear] nmapc[lear] omapc[lear] smapc[lear] tmapc[lear] vmapc[lear] xmapc[lear] skipwhite nextgroup=vimMapMod
-syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
-" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
-syn keyword vimUnmap cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] tunma[p] unm[ap] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
+" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
+syn keyword vimUnmap cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] tunma[p] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapMod,vimMapLhs
+syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+
syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
@@ -677,6 +704,8 @@ syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\
syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation,vimMethodName
syn keyword vimFuncEcho contained ec ech echo
+syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+
" User Command Highlighting: {{{2
syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
@@ -694,6 +723,15 @@ endif
syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=vimOper,vimOperParen,vimVar,vimFunc,vimNotation
+" Match: {{{2
+" =====
+syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
+syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
+syn case ignore
+syn keyword vimMatchNone contained none
+syn case match
+syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
+
" Norm: {{{2
" ====
syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
@@ -869,13 +907,9 @@ syn match vimCtrlChar "[- -]"
" Beginners - Patterns that involve ^ {{{2
" =========
-if s:vim9script
- syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
- syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle contained
-else
- syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle
- syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle contained
-endif
+Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
+VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle
+
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
@@ -919,12 +953,12 @@ endif
" Allows users to specify the type of embedded script highlighting
" they want: (perl/python/ruby/tcl support)
" g:vimsyn_embed == 0 : don't embed any scripts
-" g:vimsyn_embed =~# 'l' : embed lua (but only if vim supports it)
-" g:vimsyn_embed =~# 'm' : embed mzscheme (but only if vim supports it)
-" g:vimsyn_embed =~# 'p' : embed perl (but only if vim supports it)
-" g:vimsyn_embed =~# 'P' : embed python (but only if vim supports it)
-" g:vimsyn_embed =~# 'r' : embed ruby (but only if vim supports it)
-" g:vimsyn_embed =~# 't' : embed tcl (but only if vim supports it)
+" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
+" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
+" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
+" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
+" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
+" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
if !exists("g:vimsyn_embed")
let g:vimsyn_embed= "lmpPr"
endif
@@ -943,12 +977,16 @@ if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimLuaRegion
exe "syn include @vimLuaScript ".s:luapath
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+\.$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
syn cluster vimFuncBodyList add=vimLuaRegion
else
- syn region vimEmbedError start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+lua\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
endif
unlet s:luapath
@@ -966,12 +1004,16 @@ if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimPerlRegion
exe "syn include @vimPerlScript ".s:perlpath
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)\ze\(\s*["#].*\)\=$+ end=+^\z1\ze\(\s*[#"].*\)\=$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
syn cluster vimFuncBodyList add=vimPerlRegion
else
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
endif
unlet s:perlpath
@@ -989,12 +1031,16 @@ if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
syn cluster vimFuncBodyList add=vimRubyRegion
unlet! b:current_syntax
exe "syn include @vimRubyScript ".s:rubypath
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimRubyScript
- syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
syn cluster vimFuncBodyList add=vimRubyRegion
else
- syn region vimEmbedError start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
endif
unlet s:rubypath
@@ -1012,14 +1058,18 @@ if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimPythonRegion
exe "syn include @vimPythonScript ".s:pythonpath
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
syn cluster vimFuncBodyList add=vimPythonRegion
else
- syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:pythonpath
@@ -1044,17 +1094,23 @@ if s:trytcl
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimTclRegion
exe "syn include @vimTclScript ".s:tclpath
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
syn cluster vimFuncBodyList add=vimTclScript
else
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:tclpath
else
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:trytcl
@@ -1075,12 +1131,16 @@ if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
exe "syn include @vimMzSchemeScript ".s:mzschemepath
let &isk= s:iskKeep
unlet s:iskKeep
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
syn cluster vimFuncBodyList add=vimMzSchemeRegion
else
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
endif
unlet s:mzschemepath
@@ -1118,7 +1178,6 @@ if !exists("skip_vim_syntax_inits")
hi def link vimBufnrWarn vimWarn
endif
- hi def link vim9Vim9ScriptArg Special
hi def link vimAbb vimCommand
hi def link vimAddress vimMark
hi def link vimAugroupBang vimBang
@@ -1132,20 +1191,20 @@ if !exists("skip_vim_syntax_inits")
hi def link vimBehaveModel vimBehave
hi def link vimBehave vimCommand
hi def link vimBracket Delimiter
+ hi def link vimCall vimCommand
hi def link vimCatch vimCommand
hi def link vimCmplxRepeat SpecialChar
hi def link vimCommand Statement
hi def link vimComment Comment
- hi def link vim9Comment Comment
+ hi def link vimCommentError vimError
hi def link vimCommentString vimString
hi def link vimCommentTitle PreProc
- hi def link vim9CommentTitle PreProc
hi def link vimCondHL vimCommand
hi def link vimConst vimCommand
hi def link vimContinue Special
hi def link vimContinueComment vimComment
hi def link vimCtrlChar SpecialChar
- hi def link vimDefComment vimComment
+ hi def link vimDefComment vim9Comment
hi def link vimDefKey vimCommand
hi def link vimDefParam vimVar
hi def link vimEcho vimCommand
@@ -1206,13 +1265,15 @@ if !exists("skip_vim_syntax_inits")
hi def link vimLetHereDocStop Special
hi def link vimLetRegister Special
hi def link vimLineComment vimComment
- hi def link vim9LineComment vimComment
hi def link vimMapBang vimBang
hi def link vimMapModKey vimFuncSID
hi def link vimMapMod vimBracket
hi def link vimMap vimCommand
hi def link vimMark Number
hi def link vimMarkNumber vimNumber
+ hi def link vimMatch vimCommand
+ hi def link vimMatchGroup vimGroup
+ hi def link vimMatchNone vimGroup
hi def link vimMenuBang vimBang
hi def link vimMenuClear Special
hi def link vimMenuMod vimMapMod
@@ -1246,10 +1307,13 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSearchDelim Statement
hi def link vimSearch vimString
hi def link vimSep Delimiter
+ hi def link vimSet vimCommand
+ hi def link vimSetAll vimOption
+ hi def link vimSetBang vimBang
hi def link vimSetMod vimOption
- hi def link vimSetSep Statement
+ hi def link vimSetSep vimSep
hi def link vimSetString vimString
- hi def link vim9Vim9Script vimCommand
+ hi def link vimSetTermcap vimOption
hi def link vimShebang PreProc
hi def link vimSleep vimCommand
hi def link vimSleepArg Constant
@@ -1310,6 +1374,20 @@ if !exists("skip_vim_syntax_inits")
hi def link vimUserFunc Normal
hi def link vimVar Identifier
hi def link vimWarn WarningMsg
+
+ hi def link vim9Boolean Boolean
+ hi def link vim9Comment Comment
+ hi def link vim9CommentError vimError
+ hi def link vim9CommentTitle PreProc
+ hi def link vim9Const vimCommand
+ hi def link vim9Final vimCommand
+ hi def link vim9For vimCommand
+ hi def link vim9LineComment vimComment
+ hi def link vim9Null Constant
+ hi def link vim9Var vimCommand
+ hi def link vim9Variable vimVar
+ hi def link vim9Vim9Script vimCommand
+ hi def link vim9Vim9ScriptArg Special
endif
" Current Syntax Variable: {{{2
@@ -1317,6 +1395,8 @@ let b:current_syntax = "vim"
" ---------------------------------------------------------------------
" Cleanup: {{{1
+delc Vim9
+delc VimL
delc VimFolda
delc VimFoldf
delc VimFoldh
diff --git a/runtime/syntax/yaml.vim b/runtime/syntax/yaml.vim
index 6ec806a..e992bc0 100644
--- a/runtime/syntax/yaml.vim
+++ b/runtime/syntax/yaml.vim
@@ -129,7 +129,7 @@ syn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' c
execute 'syn match yamlPlainScalar /'.s:ns_plain_out.'/'
execute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/'
-execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\%(\s\+'.s:ns_plain_in.'\)*\ze\s*:/ contained '.
+execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\%(\s\+'.s:ns_plain_in.'\)*\ze\s*:\%(\s\|$\)/ contained '.
\'nextgroup=yamlFlowMappingDelimiter skipwhite'
syn match yamlFlowMappingKeyStart /?/ contained nextgroup=@yamlFlowNode skipwhite
syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlFlowMappingDelimiter skipwhite
diff --git a/runtime/tutor/Makefile b/runtime/tutor/Makefile
index 3c0fe0a..d31729d 100644
--- a/runtime/tutor/Makefile
+++ b/runtime/tutor/Makefile
@@ -13,83 +13,83 @@ include Make_all.mak
all: $(CONVERTED)
tutor.utf-8: tutor
- iconv -f ISO-8859-1 -t UTF-8 $< >$@
+ iconv -f ISO-8859-1 -t UTF-8 $? >$@
tutor.bar: tutor.bar.utf-8
- iconv -f UTF-8 -t ISO-8859-1 $< >$@
+ iconv -f UTF-8 -t ISO-8859-1 $? >$@
tutor.ca.utf-8: tutor.ca
- iconv -f ISO-8859-1 -t UTF-8 $< >$@
+ iconv -f ISO-8859-1 -t UTF-8 $? >$@
tutor.eo: tutor.eo.utf-8
- iconv -f UTF-8 -t ISO-8859-3 $< >$@
+ iconv -f UTF-8 -t ISO-8859-3 $? >$@
tutor.de.utf-8: tutor.de
- iconv -f ISO-8859-1 -t UTF-8 $< >$@
+ iconv -f ISO-8859-1 -t UTF-8 $? >$@
tutor.el: tutor.el.utf-8
- iconv -f UTF-8 -t ISO-8859-7 $< >$@
+ iconv -f UTF-8 -t ISO-8859-7 $? >$@
tutor.el.cp737: tutor.el.utf-8
- iconv -f UTF-8 -t CP737 $< >$@
+ iconv -f UTF-8 -t CP737 $? >$@
tutor.es: tutor.es.utf-8
- iconv -f UTF-8 -t ISO-8859-1 $< >$@
+ iconv -f UTF-8 -t ISO-8859-1 $? >$@
tutor.fr.utf-8: tutor.fr
- iconv -f ISO-8859-1 -t UTF-8 $< >$@
+ iconv -f ISO-8859-1 -t UTF-8 $? >$@
tutor.hu: tutor.hu.utf-8
- iconv -f UTF-8 -t ISO-8859-2 $< >$@
+ iconv -f UTF-8 -t ISO-8859-2 $? >$@
tutor.hu.cp1250: tutor.hu.utf-8
- iconv -f UTF-8 -t CP1250 $< >$@
+ iconv -f UTF-8 -t CP1250 $? >$@
tutor.it.utf-8: tutor.it
- iconv -f ISO-8859-1 -t UTF-8 $< >$@
+ iconv -f ISO-8859-1 -t UTF-8 $? >$@
tutor.hr: tutor.hr.utf-8
- iconv -f UTF-8 -t ISO-8859-2 $< >$@
+ iconv -f UTF-8 -t ISO-8859-2 $? >$@
tutor.hr.cp1250: tutor.hr.utf-8
- iconv -f UTF-8 -t CP1250 $< >$@
+ iconv -f UTF-8 -t CP1250 $? >$@
tutor.ja.sjis: tutor.ja.utf-8
- iconv -f UTF-8 -t CP932 $< >$@
+ iconv -f UTF-8 -t CP932 $? >$@
tutor.ja.euc: tutor.ja.utf-8
- iconv -f UTF-8 -t EUC-JP $< >$@
+ iconv -f UTF-8 -t EUC-JP $? >$@
tutor.ko.euc: tutor.ko.utf-8
- iconv -f UTF-8 -t EUC-KR $< >$@
+ iconv -f UTF-8 -t EUC-KR $? >$@
tutor.nl: tutor.nl.utf-8
- iconv -f UTF-8 -t ISO-8859-1 $< >$@
+ iconv -f UTF-8 -t ISO-8859-1 $? >$@
tutor.no.utf-8: tutor.no
- iconv -f ISO-8859-1 -t UTF-8 $< >$@
+ iconv -f ISO-8859-1 -t UTF-8 $? >$@
# nb is an alias for no
tutor.nb: tutor.no
- cp $< $@
+ cp $? $@
tutor.nb.utf-8: tutor.no.utf-8
- cp $< $@
+ cp $? $@
tutor.ru: tutor.ru.utf-8
- iconv -f UTF-8 -t KOI8-R $< >$@
+ iconv -f UTF-8 -t KOI8-R $? >$@
tutor.ru.cp1251: tutor.ru.utf-8
- iconv -f UTF-8 -t CP1251 $< >$@
+ iconv -f UTF-8 -t CP1251 $? >$@
tutor.tr.iso9: tutor.tr.utf-8
- iconv -f UTF-8 -t ISO-8859-9 $< >$@
+ iconv -f UTF-8 -t ISO-8859-9 $? >$@
tutor.sv.utf-8: tutor.sv
- iconv -f ISO-8859-1 -t UTF-8 $< >$@
+ iconv -f ISO-8859-1 -t UTF-8 $? >$@
tutor.zh.utf-8: tutor.zh.big5
- iconv -f BIG-5 -t UTF-8 $< >$@
+ iconv -f BIG-5 -t UTF-8 $? >$@
clean:
for G in $(CONVERTED); do if [ -f $$G ]; then rm -f $$G; fi; done
diff --git a/runtime/tutor/tutor.es b/runtime/tutor/tutor.es
index ed9397c..601a14f 100644
--- a/runtime/tutor/tutor.es
+++ b/runtime/tutor/tutor.es
@@ -236,7 +236,7 @@ Ahora continúe con la Lección 2.
Muchos comandos que cambian texto están compuestos por un operador y un
movimiento.
- El formato para eliminar un comando con el operador de borrado d es el
+ El formato para comando eliminar con el operador de borrado d es el
siguiente:
d movimiento
diff --git a/runtime/tutor/tutor.es.utf-8 b/runtime/tutor/tutor.es.utf-8
index d6187ff..242df17 100644
--- a/runtime/tutor/tutor.es.utf-8
+++ b/runtime/tutor/tutor.es.utf-8
@@ -236,7 +236,7 @@ Ahora continúe con la Lección 2.
Muchos comandos que cambian texto están compuestos por un operador y un
movimiento.
- El formato para eliminar un comando con el operador de borrado d es el
+ El formato para comando eliminar con el operador de borrado d es el
siguiente:
d movimiento
diff --git a/src/GvimExt/Make_ming.mak b/src/GvimExt/Make_ming.mak
index 85017d8..06ec7b6 100644
--- a/src/GvimExt/Make_ming.mak
+++ b/src/GvimExt/Make_ming.mak
@@ -29,7 +29,7 @@ LDFLAGS += -static-libgcc -static-libstdc++
endif
ifeq ($(CROSS),yes)
-DEL = rm
+DEL = rm -f
ifeq ($(MINGWOLD),yes)
CXXFLAGS := -O2 -fvtable-thunks
else
@@ -38,7 +38,7 @@ endif
else
CXXFLAGS := -O2
ifneq (sh.exe, $(SHELL))
-DEL = rm
+DEL = rm -f
else
DEL = del
endif
diff --git a/src/GvimExt/Make_mvc.mak b/src/GvimExt/Make_mvc.mak
index 7068d8f..132a584 100644
--- a/src/GvimExt/Make_mvc.mak
+++ b/src/GvimExt/Make_mvc.mak
@@ -19,25 +19,24 @@ WINVER = 0x0601
NODEBUG = 1
!endif
-!ifdef PROCESSOR_ARCHITECTURE
-# On Windows NT
-! ifndef CPU
+!ifndef CPU
CPU = i386
-! if !defined(PLATFORM) && defined(TARGET_CPU)
+! ifndef PLATFORM
+! ifdef TARGET_CPU
PLATFORM = $(TARGET_CPU)
+! elseif defined(VSCMD_ARG_TGT_ARCH)
+PLATFORM = $(VSCMD_ARG_TGT_ARCH)
! endif
-! ifdef PLATFORM
-! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
+! endif
+! ifdef PLATFORM
+! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
CPU = AMD64
-! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
+! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
CPU = ARM64
-! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
-! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
-! endif
+! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
+! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
! endif
! endif
-!else
-CPU = i386
!endif
!ifdef SDK_INCLUDE_DIR
@@ -80,7 +79,6 @@ all: gvimext.dll
gvimext.dll: gvimext.obj \
gvimext.res
$(link) $(lflags) -dll -def:gvimext.def -base:$(OFFSET) -out:$*.dll $** $(olelibsdll) shell32.lib comctl32.lib -subsystem:$(SUBSYSTEM)
- if exist $*.dll.manifest mt -nologo -manifest $*.dll.manifest -outputresource:$*.dll;2
gvimext.obj: gvimext.h
@@ -96,4 +94,3 @@ clean:
- if exist gvimext.exp del gvimext.exp
- if exist gvimext.obj del gvimext.obj
- if exist gvimext.res del gvimext.res
- - if exist gvimext.dll.manifest del gvimext.dll.manifest
diff --git a/src/INSTALL b/src/INSTALL
index efa03da..79d7584 100644
--- a/src/INSTALL
+++ b/src/INSTALL
@@ -178,12 +178,6 @@ There used to be a KDE version of Vim, using Qt libraries, but since it didn't
work very well and there was no maintainer it was dropped.
-Unix: COMPILING ON LINUX
-
-On Linux, when using -g to compile (which is default for gcc), the executable
-will probably be statically linked. If you don't want this, remove the -g
-option from CFLAGS.
-
Unix: PUTTING vimrc IN /etc
Some Linux distributions prefer to put the global vimrc file in /etc, and the
diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak
index 20ed903..8aeba67 100644
--- a/src/Make_cyg_ming.mak
+++ b/src/Make_cyg_ming.mak
@@ -130,7 +130,6 @@ ifndef STATIC_STDCPLUS
STATIC_STDCPLUS=no
endif
-
# Link against the shared version of libwinpthread by default. Set
# STATIC_WINPTHREAD to "yes" to link against static version instead.
ifndef STATIC_WINPTHREAD
@@ -140,6 +139,12 @@ endif
# This is used when STATIC_STDCPLUS=yes.
HAS_GCC_EH=yes
+# Reduce the size of the executables by using the --gc-sections linker
+# option. Set USE_GC_SECTIONS to "no" if you see any issues with this.
+ifndef USE_GC_SECTIONS
+USE_GC_SECTIONS=yes
+endif
+
# If the user doesn't want gettext, undefine it.
ifeq (no, $(GETTEXT))
GETTEXT=
@@ -179,7 +184,7 @@ ifeq ($(CROSS),yes)
ifndef CROSS_COMPILE
CROSS_COMPILE = i586-pc-mingw32msvc-
endif
-DEL = rm
+DEL = rm -f
MKDIR = mkdir -p
DIRSLASH = /
else
@@ -207,7 +212,7 @@ CROSS_COMPILE =
# In this case, unix-like commands can be used.
#
ifneq (sh.exe, $(SHELL))
-DEL = rm
+DEL = rm -f
MKDIR = mkdir -p
DIRSLASH = /
else
@@ -386,14 +391,19 @@ endif
# Python3 interface:
# PYTHON3=[Path to Python3 directory] (Set inside Make_cyg.mak or Make_ming.mak)
# DYNAMIC_PYTHON3=yes (to load the Python3 DLL dynamically)
-# PYTHON3_VER=[Python3 version, eg 31, 32] (default is 36)
+# PYTHON3_VER=[Python3 version, eg 31, 32] (default is 38)
ifdef PYTHON3
ifndef DYNAMIC_PYTHON3
DYNAMIC_PYTHON3=yes
endif
+ ifndef DYNAMIC_PYTHON3_STABLE_ABI
+ ifeq (yes,$(DYNAMIC_PYTHON3))
+DYNAMIC_PYTHON3_STABLE_ABI=yes
+ endif
+ endif
ifndef PYTHON3_VER
-PYTHON3_VER=36
+PYTHON3_VER=38
endif
ifeq ($(DYNAMIC_PYTHON3_STABLE_ABI),yes)
PYTHON3_NAME=python3
@@ -1001,6 +1011,9 @@ EXELFLAGS += -s
endif
ifeq ($(COVERAGE),yes)
EXELFLAGS += --coverage
+ else ifndef MZSCHEME
+EXELFLAGS += -nostdlib
+EXECFLAGS = -DUSE_OWNSTARTUP
endif
DEFINES += $(DEF_GUI) -DVIMDLL
OBJ += $(GUIOBJ) $(CUIOBJ)
@@ -1093,6 +1106,16 @@ LIB += -lgcc_eh
LIB += -Wl,-Bstatic -lwinpthread -Wl,-Bdynamic
endif
+# To reduce the file size
+ifeq (yes, $(USE_GC_SECTIONS))
+CFLAGS += -ffunction-sections -fno-asynchronous-unwind-tables
+CXXFLAGS += -fasynchronous-unwind-tables
+LFLAGS += -Wl,--gc-sections
+ ifeq (yes, $(VIMDLL))
+EXELFLAGS += -Wl,--gc-sections
+ endif
+endif
+
ifeq (yes, $(MAP))
LFLAGS += -Wl,-Map=$(TARGET).map
endif
@@ -1122,14 +1145,25 @@ $(EXEOBJG): | $(OUTDIR)
$(EXEOBJC): | $(OUTDIR)
ifeq ($(VIMDLL),yes)
+ ifneq ($(findstring -nostdlib,$(EXELFLAGS)),)
+ # -Wl,--entry needs to be specified when -nostdlib is used.
+ ifeq ($(ARCH),x86-64)
+EXEENTRYC = -Wl,--entry=wmainCRTStartup
+EXEENTRYG = -Wl,--entry=wWinMainCRTStartup
+ else ifeq ($(ARCH),i686)
+EXEENTRYC = -Wl,--entry=_wmainCRTStartup
+EXEENTRYG = -Wl,--entry=_wWinMainCRTStartup@0
+ endif
+ endif
+
$(TARGET): $(OBJ)
$(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid -lgdi32 $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB) $(SODIUMLIB)
$(GVIMEXE): $(EXEOBJG) $(VIMDLLBASE).dll
- $(CC) -L. $(EXELFLAGS) -mwindows -o $@ $(EXEOBJG) -l$(VIMDLLBASE)
+ $(CC) -L. $(EXELFLAGS) -mwindows -o $@ $(EXEOBJG) -l$(VIMDLLBASE) $(EXEENTRYG)
$(VIMEXE): $(EXEOBJC) $(VIMDLLBASE).dll
- $(CC) -L. $(EXELFLAGS) -o $@ $(EXEOBJC) -l$(VIMDLLBASE)
+ $(CC) -L. $(EXELFLAGS) -o $@ $(EXEOBJC) -l$(VIMDLLBASE) $(EXEENTRYC)
else
$(TARGET): $(OBJ)
$(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB) $(SODIUMLIB)
@@ -1160,10 +1194,13 @@ notags:
clean:
-$(DEL) $(OUTDIR)$(DIRSLASH)*.o
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.gcno
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.gcda
-$(DEL) $(OUTDIR)$(DIRSLASH)*.res
-$(DEL) $(OUTDIR)$(DIRSLASH)pathdef.c
-rmdir $(OUTDIR)
-$(DEL) $(MAIN_TARGET) vimrun.exe install.exe uninstall.exe
+ -$(DEL) *.gcno *.gcda
-$(DEL) *.map
ifdef PERL
-$(DEL) if_perl.c
@@ -1297,6 +1334,9 @@ $(OUTDIR)/gui_w32.o: gui_w32.c $(INCL) $(GUI_INCL) version.h
$(OUTDIR)/if_cscope.o: if_cscope.c $(INCL)
$(CC) -c $(CFLAGS) if_cscope.c -o $@
+$(OUTDIR)/if_lua.o: if_lua.c $(INCL)
+ $(CC) -c $(CFLAGS:-fno-asynchronous-unwind-tables=) if_lua.c -o $@
+
$(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) $(MZSCHEME_INCL) $(MZ_EXTRA_DEP)
$(CC) -c $(CFLAGS) if_mzsch.c -o $@
@@ -1330,10 +1370,10 @@ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
$(CC) -c $(CFLAGS) netbeans.c -o $@
$(OUTDIR)/os_w32exec.o: os_w32exe.c $(INCL)
- $(CC) -c $(CFLAGS) -UFEAT_GUI_MSWIN os_w32exe.c -o $@
+ $(CC) -c $(CFLAGS) -UFEAT_GUI_MSWIN $(EXECFLAGS) os_w32exe.c -o $@
$(OUTDIR)/os_w32exeg.o: os_w32exe.c $(INCL)
- $(CC) -c $(CFLAGS) os_w32exe.c -o $@
+ $(CC) -c $(CFLAGS) $(EXECFLAGS) os_w32exe.c -o $@
$(OUTDIR)/os_win32.o: os_win32.c $(INCL) $(MZSCHEME_INCL)
$(CC) -c $(CFLAGS) os_win32.c -o $@
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index e58814b..49d8a33 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -80,7 +80,7 @@
# Python3 interface:
# PYTHON3=[Path to Python3 directory]
# DYNAMIC_PYTHON3=yes (to load the Python3 DLL dynamically)
-# PYTHON3_VER=[Python3 version, eg 30, 31] (default is 36)
+# PYTHON3_VER=[Python3 version, eg 30, 31] (default is 38)
#
# Ruby interface:
# RUBY=[Path to Ruby directory]
@@ -127,15 +127,20 @@
#
# Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
#
-# Processor Version: CPUNR=[any, i686, sse, sse2, avx, avx2] (default is
-# sse2)
+# Processor Version:
+# For x86: CPUNR=[any, i686, sse, sse2, avx, avx2, avx512]
+# For x64: CPUNR=[sse2, avx, avx2, avx512]
+# (default is sse2 (both x86 and x64))
# avx is available on Visual C++ 2010 and after.
# avx2 is available on Visual C++ 2013 Update 2 and after.
+# avx512 is available on Visual C++ 2017 and after.
+# For ARM64:
+# See: https://learn.microsoft.com/en-us/cpp/build/reference/arch-arm64
#
# Version Support: WINVER=[0x0601, 0x0602, 0x0603, 0x0A00] (default is
# 0x0601)
# Supported versions depends on your target SDK, check SDKDDKVer.h
-# See https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt
+# See https://learn.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt
#
# Debug version: DEBUG=yes
# Mapfile: MAP=[no, yes or lines] (default is yes)
@@ -157,53 +162,56 @@
# you can set DEFINES on the command line, e.g.,
# nmake -f Make_mvc.mvc "DEFINES=-DEMACS_TAGS"
-RM= del /f /q
-PS= powershell.exe
+RM = del /f /q
-PSFLAGS= -NoLogo -NoProfile -Command
+# Read MAJOR and MINOR from version.h.
+!IF ![for /f "tokens=2,3" %I in (version.h) do \
+ @if "%I"=="VIM_VERSION_MAJOR" ( \
+ echo MAJOR=%J> .\major.tmp \
+ ) else if "%I"=="VIM_VERSION_MINOR" ( \
+ echo MINOR=%J> .\minor.tmp && exit \
+ )]
+!ENDIF
-!IF ![$(PS) $(PSFLAGS) try{Out-File -FilePath '.\major.tmp' -InputObject \
- \"MAJOR=$$(((Select-String -Pattern 'VIM_VERSION_MAJOR\s+\d{1,2}' \
- -Path '.\version.h').Line[-2..-1^]-join '').Trim())\"} \
- catch{exit 1}]
+!IF EXIST(.\major.tmp)
! INCLUDE .\major.tmp
! IF [$(RM) .\major.tmp]
! ENDIF
!ELSE
# Change this value for the new version
-MAJOR= 9
+MAJOR = 9
!ENDIF
-!IF ![$(PS) $(PSFLAGS) try{Out-File -FilePath '.\minor.tmp' -InputObject \
- \"MINOR=$$(((Select-String -Pattern 'VIM_VERSION_MINOR\s+\d{1,2}' \
- -Path '.\version.h').Line[-2..-1^]-join '').Trim())\"} \
- catch{exit 1}]
+!IF EXIST(.\minor.tmp)
! INCLUDE .\minor.tmp
! IF [$(RM) .\minor.tmp]
! ENDIF
!ELSE
# Change this value for the new version
-MINOR= 1
+MINOR = 1
!ENDIF
-!IF ![$(PS) $(PSFLAGS) try{Out-File -FilePath '.\patchlvl.tmp' -InputObject \
- \"PATCHLEVEL=$$([decimal^]((Get-Content -Path '.\version.c' \
- -TotalCount ((Select-String -Pattern 'static int included_patches' \
- -Path '.\version.c').LineNumber+3))[-1^]).Trim().TrimEnd(','))\"} \
- catch{exit 1}]
+# Read PATCHLEVEL from version.c.
+!IF ![cmd.exe /V:ON /Q /C "set LINE=0&& set FIND=0&& \
+ for /f "tokens=1,3 delims=, " %I in (version.c) do ( \
+ set /A LINE+=1 > NUL && \
+ if "%J"=="included_patches[^]" ( \
+ set /A FIND=LINE+3 > NUL \
+ ) else if "!LINE!"=="!FIND!" ( \
+ echo PATCHLEVEL=%I> .\patchlvl.tmp && exit \
+ ) \
+ )"]
+!ENDIF
+!IF EXIST(.\patchlvl.tmp)
! INCLUDE .\patchlvl.tmp
! IF [$(RM) .\patchlvl.tmp]
! ENDIF
!ENDIF
-
-# Build on Windows NT/XP
-
-TARGETOS = WINNT
-
!IFDEF PATCHLEVEL
-RCFLAGS= -DVIM_VERSION_PATCHLEVEL=$(PATCHLEVEL)
+RCFLAGS = -DVIM_VERSION_PATCHLEVEL=$(PATCHLEVEL)
!ENDIF
+!message Vim version: $(MAJOR).$(MINOR).$(PATCHLEVEL)
!if "$(VIMDLL)" == "yes"
@@ -257,38 +265,29 @@ OBJDIR = $(OBJDIR)V
OBJDIR = $(OBJDIR)d
!endif
-!ifdef PROCESSOR_ARCHITECTURE
-# We're on Windows NT or using VC 6+
-! ifdef CPU
-ASSEMBLY_ARCHITECTURE=$(CPU)
-# Using I386 for $ASSEMBLY_ARCHITECTURE doesn't work for VC7.
-! if "$(CPU)" == "I386"
+!ifdef CPU
+! if "$(CPU)" == "I386"
CPU = i386
-! endif
-! else # !CPU
+! endif
+!else # !CPU
CPU = i386
-! ifndef PLATFORM
-! ifdef TARGET_CPU
+! ifndef PLATFORM
+! ifdef TARGET_CPU
PLATFORM = $(TARGET_CPU)
-! elseif defined(VSCMD_ARG_TGT_ARCH)
+! elseif defined(VSCMD_ARG_TGT_ARCH)
PLATFORM = $(VSCMD_ARG_TGT_ARCH)
-! endif
! endif
-! ifdef PLATFORM
-! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
+! endif
+! ifdef PLATFORM
+! if ("$(PLATFORM)" == "x64") || ("$(PLATFORM)" == "X64")
CPU = AMD64
-! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
+! elseif ("$(PLATFORM)" == "arm64") || ("$(PLATFORM)" == "ARM64")
CPU = ARM64
-! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
-! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
-! endif
-! endif # !PLATFORM
-! endif
-!else # !PROCESSOR_ARCHITECTURE
-# We're on Windows 95
-CPU = i386
-!endif # !PROCESSOR_ARCHITECTURE
-ASSEMBLY_ARCHITECTURE=$(CPU)
+! elseif ("$(PLATFORM)" != "x86") && ("$(PLATFORM)" != "X86")
+! error *** ERROR Unknown target platform "$(PLATFORM)". Make aborted.
+! endif
+! endif # !PLATFORM
+!endif
OBJDIR = $(OBJDIR)$(CPU)
# Build a retail version by default
@@ -303,7 +302,9 @@ MAKEFLAGS_GVIMEXT = DEBUG=yes
LINK = link
# Check VC version.
-!if [echo MSVCVER=_MSC_VER> msvcver.c && $(CC) /EP msvcver.c > msvcver.~ 2> nul]
+!if [echo MSVCVER=_MSC_VER> msvcver.c && \
+ echo MSVC_FULL=_MSC_FULL_VER>> msvcver.c && \
+ $(CC) /EP msvcver.c > msvcver.~ 2> nul]
! message *** ERROR
! message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
! message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
@@ -324,19 +325,6 @@ LINK = link
MSVC_MAJOR = ($(MSVCVER) / 100 - 5)
MSVCRT_VER = ($(MSVCVER) / 100 * 10 - 50)
-# Calculate MSVC_FULL.
-!if [echo MSVC_FULL=_MSC_FULL_VER> msvcfullver.c && $(CC) /EP msvcfullver.c > msvcfullver.~ 2> nul]
-! message *** ERROR
-! message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
-! message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
-! error Make aborted.
-!else
-! include msvcfullver.~
-! if [del msvcfullver.c msvcfullver.~]
-! endif
-!endif
-
-
# Calculate MSVCRT_VER
!if [(set /a MSVCRT_VER="$(MSVCRT_VER)" > nul) && set MSVCRT_VER > msvcrtver.~] == 0
! include msvcrtver.~
@@ -344,6 +332,11 @@ MSVCRT_VER = ($(MSVCVER) / 100 * 10 - 50)
! endif
!endif
+# Show the versions (for debugging).
+#!message _MSC_VER=$(MSVCVER)
+#!message _MSC_FULL_VER=$(MSVC_FULL)
+#!message MSVCRT_VER=$(MSVCRT_VER)
+
# Base name of the msvcrXX.dll (vcruntimeXXX.dll)
MSVCRT_NAME = vcruntime$(MSVCRT_VER)
@@ -355,7 +348,7 @@ WINVER = 0x0601
# Use multiprocess build
USE_MP = yes
-!if "$(FEATURES)"==""
+!if "$(FEATURES)" == ""
FEATURES = HUGE
!endif
@@ -374,7 +367,7 @@ CSCOPE_DEFS = -DFEAT_CSCOPE
!endif
!ifndef TERMINAL
-! if "$(FEATURES)"=="HUGE"
+! if "$(FEATURES)" == "HUGE"
TERMINAL = yes
! else
TERMINAL = no
@@ -384,15 +377,15 @@ TERMINAL = no
!if "$(TERMINAL)" == "yes"
TERM_OBJ = \
$(OBJDIR)/terminal.obj \
- $(OBJDIR)/vterm_encoding.obj \
- $(OBJDIR)/vterm_keyboard.obj \
- $(OBJDIR)/vterm_mouse.obj \
- $(OBJDIR)/vterm_parser.obj \
- $(OBJDIR)/vterm_pen.obj \
- $(OBJDIR)/vterm_screen.obj \
- $(OBJDIR)/vterm_state.obj \
- $(OBJDIR)/vterm_unicode.obj \
- $(OBJDIR)/vterm_vterm.obj
+ $(OBJDIR)/libvterm/encoding.obj \
+ $(OBJDIR)/libvterm/keyboard.obj \
+ $(OBJDIR)/libvterm/mouse.obj \
+ $(OBJDIR)/libvterm/parser.obj \
+ $(OBJDIR)/libvterm/pen.obj \
+ $(OBJDIR)/libvterm/screen.obj \
+ $(OBJDIR)/libvterm/state.obj \
+ $(OBJDIR)/libvterm/unicode.obj \
+ $(OBJDIR)/libvterm/vterm.obj
TERM_DEFS = -DFEAT_TERMINAL
TERM_DEPS = \
libvterm/include/vterm.h \
@@ -403,7 +396,7 @@ TERM_DEPS = \
!endif
!ifndef SOUND
-! if "$(FEATURES)"=="HUGE"
+! if "$(FEATURES)" == "HUGE"
SOUND = yes
! else
SOUND = no
@@ -444,7 +437,7 @@ NETBEANS = $(GUI)
!endif
!ifndef CHANNEL
-! if "$(FEATURES)"=="HUGE" || "$(TERMINAL)"=="yes"
+! if "$(FEATURES)" == "HUGE" || "$(TERMINAL)" == "yes"
CHANNEL = yes
! else
CHANNEL = $(GUI)
@@ -538,9 +531,10 @@ CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
#VIMRUNTIMEDIR = somewhere
CFLAGS = -c /W3 /GF /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DHAVE_STDINT_H \
- $(CSCOPE_DEFS) $(TERM_DEFS) $(SOUND_DEFS) $(NETBEANS_DEFS) $(CHANNEL_DEFS) \
+ $(CSCOPE_DEFS) $(TERM_DEFS) $(SOUND_DEFS) $(NETBEANS_DEFS) \
$(NBDEBUG_DEFS) $(XPM_DEFS) $(SOD_DEFS) $(SOD_INC) \
- $(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
+ $(CHANNEL_DEFS) $(DEFINES) \
+ -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
/source-charset:utf-8
#>>>>> end of choices
@@ -548,41 +542,57 @@ CFLAGS = -c /W3 /GF /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DHAVE_STDINT_H \
DEL_TREE = rmdir /s /q
-INTDIR=$(OBJDIR)
-OUTDIR=$(OBJDIR)
+INTDIR = $(OBJDIR)
+OUTDIR = $(OBJDIR)
### Validate CPUNR
-!ifndef CPUNR
+!if "$(CPU)" == "i386" || "$(CPU)" == "AMD64"
+! ifndef CPUNR
# default to SSE2
CPUNR = sse2
-!elseif "$(CPUNR)" == "i386" || "$(CPUNR)" == "i486" || "$(CPUNR)" == "i586"
+! elseif "$(CPU)" == "i386" \
+ && ("$(CPUNR)" == "i386" || "$(CPUNR)" == "i486" || "$(CPUNR)" == "i586")
# alias i386, i486 and i586 to i686
-! message *** WARNING CPUNR=$(CPUNR) is not a valid target architecture.
-! message Windows 7 is the minimum target OS, with a minimum target
-! message architecture of i686.
-! message Retargeting to i686
+! message *** WARNING CPUNR=$(CPUNR) is not a valid target architecture.
+! message Windows 7 is the minimum target OS, with a minimum target
+! message architecture of i686.
+! message Retargeting to i686
CPUNR = i686
-!elseif "$(CPUNR)" == "pentium4"
+! elseif "$(CPUNR)" == "pentium4"
# alias pentium4 to sse2
-! message *** WARNING CPUNR=pentium4 is deprecated in favour of sse2.
-! message Retargeting to sse2.
+! message *** WARNING CPUNR=pentium4 is deprecated in favour of sse2.
+! message Retargeting to sse2.
CPUNR = sse2
-!elseif "$(CPUNR)" != "any" && "$(CPUNR)" != "i686" && "$(CPUNR)" != "sse" && "$(CPUNR)" != "sse2" && "$(CPUNR)" != "avx" && "$(CPUNR)" != "avx2"
-! error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted.
+! elseif ("$(CPU)" != "i386" \
+ || ("$(CPUNR)" != "any" && "$(CPUNR)" != "i686" \
+ && "$(CPUNR)" != "sse" )) \
+ && "$(CPUNR)" != "sse2" && "$(CPUNR)" != "avx" \
+ && "$(CPUNR)" != "avx2" && "$(CPUNR)" != "avx512"
+! error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted.
+! endif
+!elseif "$(CPU)" == "ARM64"
+# TODO: Validate CPUNR.
!endif
# Convert processor ID to MVC-compatible number
+!if "$(CPU)" == "i386" || "$(CPU)" == "AMD64"
# IA32/SSE/SSE2 are only supported on x86
-!if "$(ASSEMBLY_ARCHITECTURE)" == "i386" && ("$(CPUNR)" == "i686" || "$(CPUNR)" == "any")
+! if "$(CPU)" == "i386" \
+ && ("$(CPUNR)" == "i686" || "$(CPUNR)" == "any")
CPUARG = /arch:IA32
-!elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse"
+! elseif "$(CPU)" == "i386" && "$(CPUNR)" == "sse"
CPUARG = /arch:SSE
-!elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse2"
+! elseif "$(CPU)" == "i386" && "$(CPUNR)" == "sse2"
CPUARG = /arch:SSE2
-!elseif "$(CPUNR)" == "avx"
+! elseif "$(CPUNR)" == "avx"
CPUARG = /arch:AVX
-!elseif "$(CPUNR)" == "avx2"
+! elseif "$(CPUNR)" == "avx2"
CPUARG = /arch:AVX2
+! elseif "$(CPUNR)" == "avx512"
+CPUARG = /arch:AVX512
+! endif
+!elseif "$(CPU)" == "ARM64" && defined(CPUNR)
+CPUARG = /arch:$(CPUNR)
!endif
# Pass CPUARG to GvimExt, to avoid using version-dependent defaults
@@ -590,7 +600,7 @@ MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)"
!if "$(VIMDLL)" == "yes"
VIMDLLBASE = vim
-! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
+! if "$(CPU)" == "i386"
VIMDLLBASE = $(VIMDLLBASE)32
! else
VIMDLLBASE = $(VIMDLLBASE)64
@@ -797,6 +807,13 @@ OBJ = $(OBJ) $(OUTDIR)\os_w32dll.obj $(OUTDIR)\vimd.res
EXEOBJC = $(OUTDIR)\os_w32exec.obj $(OUTDIR)\vimc.res
EXEOBJG = $(OUTDIR)\os_w32exeg.obj $(OUTDIR)\vimg.res
CFLAGS = $(CFLAGS) -DVIMDLL
+! ifdef MZSCHEME
+EXECFLAGS =
+EXELIBC = $(LIBC)
+! else
+EXECFLAGS = -DUSE_OWNSTARTUP /GS-
+EXELIBC =
+! endif
!else
OBJ = $(OBJ) $(OUTDIR)\os_w32exe.obj $(OUTDIR)\vim.res
!endif
@@ -949,11 +966,9 @@ LUA_LIB = "$(LUA)\lib\lua$(LUA_VER).lib"
! endif
!endif
-!ifdef PYTHON
-! ifdef PYTHON3
-DYNAMIC_PYTHON=yes
-DYNAMIC_PYTHON3=yes
-! endif
+!if defined(PYTHON) && defined(PYTHON3)
+DYNAMIC_PYTHON = yes
+DYNAMIC_PYTHON3 = yes
!endif
# PYTHON interface
@@ -979,8 +994,13 @@ PYTHON_LIB = "$(PYTHON)\libs\python$(PYTHON_VER).lib"
# PYTHON3 interface
!ifdef PYTHON3
+! ifndef DYNAMIC_PYTHON3_STABLE_ABI
+! if "$(DYNAMIC_PYTHON3)" == "yes"
+DYNAMIC_PYTHON3_STABLE_ABI = yes
+! endif
+! endif
! ifndef PYTHON3_VER
-PYTHON3_VER = 36
+PYTHON3_VER = 38
! endif
! if "$(DYNAMIC_PYTHON3_STABLE_ABI)" == "yes"
PYTHON3_NAME = python3
@@ -1018,13 +1038,13 @@ PYTHON3_LIB = "$(PYTHON3)\libs\$(PYTHON3_NAME).lib"
MZSCHEME_VER = 3m_a0solc
! endif
! ifndef MZSCHEME_COLLECTS
-MZSCHEME_COLLECTS=$(MZSCHEME)\collects
+MZSCHEME_COLLECTS = $(MZSCHEME)\collects
! endif
CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I "$(MZSCHEME)\include"
! if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib")
-MZSCHEME_MAIN_LIB=mzsch
+MZSCHEME_MAIN_LIB = mzsch
! else
-MZSCHEME_MAIN_LIB=racket
+MZSCHEME_MAIN_LIB = racket
! endif
! if (EXIST("$(MZSCHEME)\lib\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll") \
&& !EXIST("$(MZSCHEME)\lib\libmzgc$(MZSCHEME_VER).dll")) \
@@ -1062,7 +1082,7 @@ MZSCHEME_LIB = "$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib"
! endif
! else
MZSCHEME_LIB = "$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib" \
- "$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib"
+ "$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib"
! endif
! endif
MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
@@ -1164,7 +1184,8 @@ RUBY_INSTALL_NAME = x64-$(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER)
! message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
CFLAGS = $(CFLAGS) -DFEAT_RUBY
RUBY_OBJ = $(OUTDIR)\if_ruby.obj
-RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)"
+RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)" \
+ /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)"
RUBY_LIB = "$(RUBY)\lib\$(RUBY_INSTALL_NAME).lib"
# Do we want to load Ruby dynamically?
! if "$(DYNAMIC_RUBY)" == "yes"
@@ -1214,14 +1235,15 @@ LINK_PDB = /PDB:$(VIM).pdb -debug
!message
# CFLAGS with /Fo$(OUTDIR)/
-CFLAGS_OUTDIR=$(CFLAGS) /Fo$(OUTDIR)/
+CFLAGS_OUTDIR = $(CFLAGS) /Fo$(OUTDIR)/
PATHDEF_SRC = $(OUTDIR)\pathdef.c
LINKARGS1 = /nologo
LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(LIBC) $(OLE_LIB) \
- $(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(PYTHON3_LIB) $(RUBY_LIB) \
- $(TCL_LIB) $(SOUND_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(SOD_LIB) $(LINK_PDB)
+ $(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) \
+ $(PYTHON3_LIB) $(RUBY_LIB) $(TCL_LIB) $(SOUND_LIB) \
+ $(NETBEANS_LIB) $(XPM_LIB) $(SOD_LIB) $(LINK_PDB)
!ifdef NODEBUG
# Add /opt:ref to remove unreferenced functions and data even when /DEBUG is
@@ -1281,36 +1303,40 @@ all: $(MAIN_TARGET) \
!if "$(VIMDLL)" == "yes"
-$(VIMDLLBASE).dll: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
- $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
- $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
- version.c version.h
+$(VIMDLLBASE).dll: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) \
+ $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) $(LUA_OBJ) $(PERL_OBJ) \
+ $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
+ $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
+ $(XPM_OBJ) version.c version.h
$(CC) $(CFLAGS_OUTDIR) version.c
$(LINK) @<<
-$(LINKARGS1) /dll -out:$(VIMDLLBASE).dll $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ)
-$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ)
-$(TCL_OBJ) $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ)
-$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
+$(LINKARGS1) /dll -out:$(VIMDLLBASE).dll $(OBJ) $(XDIFF_OBJ)
+$(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ)
+$(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) $(TERM_OBJ) $(SOUND_OBJ)
+$(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
<<
$(GVIM).exe: $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll
- $(LINK) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(GVIM).exe $(EXEOBJG) $(VIMDLLBASE).lib $(LIBC)
+ $(LINK) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(GVIM).exe \
+ $(EXEOBJG) $(VIMDLLBASE).lib $(EXELIBC)
$(VIM).exe: $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll
- $(LINK) $(LINKARGS1) /subsystem:$(SUBSYSTEM_CON) -out:$(VIM).exe $(EXEOBJC) $(VIMDLLBASE).lib $(LIBC)
+ $(LINK) $(LINKARGS1) /subsystem:$(SUBSYSTEM_CON) -out:$(VIM).exe \
+ $(EXEOBJC) $(VIMDLLBASE).lib $(EXELIBC)
!else
-$(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
- $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
- $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
- version.c version.h
+$(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) \
+ $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) $(LUA_OBJ) $(PERL_OBJ) \
+ $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
+ $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
+ $(XPM_OBJ) version.c version.h
$(CC) $(CFLAGS_OUTDIR) version.c
$(LINK) @<<
-$(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ)
-$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ)
-$(TCL_OBJ) $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ)
-$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
+$(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ)
+$(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ)
+$(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) $(TERM_OBJ) $(SOUND_OBJ)
+$(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
<<
!endif
@@ -1320,18 +1346,20 @@ $(VIM): $(VIM).exe
$(OUTDIR):
if not exist $(OUTDIR)/nul mkdir $(OUTDIR:/=\)
-CFLAGS_INST = /nologo /O2 -DNDEBUG -DWIN32 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) $(CFLAGS_DEPR)
+$(OUTDIR)/libvterm: $(OUTDIR)
+ if not exist $(OUTDIR)/libvterm/nul mkdir $(OUTDIR:/=\)\libvterm
+
+CFLAGS_INST = /nologo /O2 -DNDEBUG -DWIN32 -DWINVER=$(WINVER) \
+ -D_WIN32_WINNT=$(WINVER) $(CFLAGS_DEPR)
!IFDEF PATCHLEVEL
-CFLAGS_INST= $(CFLAGS_INST) -DVIM_VERSION_PATCHLEVEL=$(PATCHLEVEL)
+CFLAGS_INST = $(CFLAGS_INST) -DVIM_VERSION_PATCHLEVEL=$(PATCHLEVEL)
!ENDIF
install.exe: dosinst.c dosinst.h version.h
- $(CC) $(CFLAGS_INST) dosinst.c kernel32.lib shell32.lib \
+ $(CC) $(CFLAGS_INST) /Fe$@ dosinst.c kernel32.lib shell32.lib \
user32.lib ole32.lib advapi32.lib uuid.lib \
-link -subsystem:$(SUBSYSTEM_TOOLS)
- - if exist install.exe del install.exe
- ren dosinst.exe install.exe
uninstall.exe: uninstall.c dosinst.h version.h
$(CC) $(CFLAGS_INST) uninstall.c shell32.lib advapi32.lib \
@@ -1366,12 +1394,16 @@ clean: testclean
- if exist $(OUTDIR)/nul $(DEL_TREE) $(OUTDIR)
- if exist *.obj del *.obj
- if exist $(VIM).exe del $(VIM).exe
+ - if exist $(VIM).exp del $(VIM).exp
+ - if exist $(VIM).lib del $(VIM).lib
- if exist $(VIM).ilk del $(VIM).ilk
- if exist $(VIM).pdb del $(VIM).pdb
- if exist $(VIM).map del $(VIM).map
- if exist $(VIM).ncb del $(VIM).ncb
!if "$(VIMDLL)" == "yes"
- if exist $(GVIM).exe del $(GVIM).exe
+ - if exist $(GVIM).exp del $(GVIM).exp
+ - if exist $(GVIM).lib del $(GVIM).lib
- if exist $(GVIM).map del $(GVIM).map
- if exist $(VIMDLLBASE).dll del $(VIMDLLBASE).dll
- if exist $(VIMDLLBASE).ilk del $(VIMDLLBASE).ilk
@@ -1409,7 +1441,8 @@ cmdidxs: ex_cmds.h
# - change nv_cmds[] in nv_cmds.h to add the new normal/visual mode command.
# - run "make nvcmdidxs" to generate nv_cmdidxs.h
nvcmdidxs: nv_cmds.h
- $(CC) /nologo -I. -Iproto -DNDEBUG create_nvcmdidxs.c -link -subsystem:$(SUBSYSTEM_TOOLS)
+ $(CC) /nologo -I. -Iproto -DNDEBUG create_nvcmdidxs.c \
+ -link -subsystem:$(SUBSYSTEM_TOOLS)
vim --clean -N -X --not-a-term -u create_nvcmdidxs.vim -c quit
-del create_nvcmdidxs.exe
@@ -1420,7 +1453,7 @@ test:
testgvim testgui:
cd testdir
- $(MAKE) /NOLOGO -f Make_mvc.mak VIMPROG=..\gvim
+ $(MAKE) /NOLOGO -f Make_mvc.mak "VIMPROG=..\gvim.exe"
cd ..
testtiny:
@@ -1430,7 +1463,7 @@ testtiny:
testgvimtiny:
cd testdir
- $(MAKE) /NOLOGO -f Make_mvc.mak tiny VIMPROG=..\gvim
+ $(MAKE) /NOLOGO -f Make_mvc.mak "VIMPROG=..\gvim.exe" tiny
cd ..
testclean:
@@ -1471,15 +1504,15 @@ test_vim9:
###########################################################################
# Create a default rule for transforming .c files to .obj files in $(OUTDIR)
-.c{$(OUTDIR)/}.obj::
+.c{$(OUTDIR)}.obj::
$(CC) $(CFLAGS_OUTDIR) $<
# Create a default rule for xdiff.
-{xdiff/}.c{$(OUTDIR)/}.obj::
+{xdiff}.c{$(OUTDIR)}.obj::
$(CC) $(CFLAGS_OUTDIR) $<
# Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
-.cpp{$(OUTDIR)/}.obj::
+.cpp{$(OUTDIR)}.obj::
$(CC) $(CFLAGS_OUTDIR) $<
$(OUTDIR)/alloc.obj: $(OUTDIR) alloc.c $(INCL)
@@ -1605,8 +1638,7 @@ $(OUTDIR)/if_cscope.obj: $(OUTDIR) if_cscope.c $(INCL)
$(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c $(INCL)
$(CC) $(CFLAGS_OUTDIR) $(LUA_INC) if_lua.c
-auto/if_perl.c : if_perl.xs typemap
- -if not exist auto/nul mkdir auto
+auto/if_perl.c: if_perl.xs typemap
$(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
-typemap typemap if_perl.xs -output $@
@@ -1638,7 +1670,6 @@ $(OUTDIR)/if_tcl.obj: $(OUTDIR) if_tcl.c $(INCL)
$(CC) $(CFLAGS_OUTDIR) $(TCL_INC) if_tcl.c
$(OUTDIR)/iscygpty.obj: $(OUTDIR) iscygpty.c $(CUI_INCL)
- $(CC) $(CFLAGS_OUTDIR) iscygpty.c
$(OUTDIR)/job.obj: $(OUTDIR) job.c $(INCL)
@@ -1701,10 +1732,10 @@ $(OUTDIR)/os_w32dll.obj: $(OUTDIR) os_w32dll.c
$(OUTDIR)/os_w32exe.obj: $(OUTDIR) os_w32exe.c $(INCL)
$(OUTDIR)/os_w32exec.obj: $(OUTDIR) os_w32exe.c $(INCL)
- $(CC) $(CFLAGS:-DFEAT_GUI_MSWIN=) /Fo$@ os_w32exe.c
+ $(CC) $(CFLAGS:-DFEAT_GUI_MSWIN=) $(EXECFLAGS) /Fo$@ os_w32exe.c
$(OUTDIR)/os_w32exeg.obj: $(OUTDIR) os_w32exe.c $(INCL)
- $(CC) $(CFLAGS) /Fo$@ os_w32exe.c
+ $(CC) $(CFLAGS) $(EXECFLAGS) /Fo$@ os_w32exe.c
$(OUTDIR)/pathdef.obj: $(OUTDIR) $(PATHDEF_SRC) $(INCL)
$(CC) $(CFLAGS_OUTDIR) $(PATHDEF_SRC)
@@ -1804,7 +1835,8 @@ $(OUTDIR)/vimg.res: $(OUTDIR) vim.rc vim.manifest version.h gui_w32_rc.h \
$(OUTDIR)/vimd.res: $(OUTDIR) vim.rc version.h gui_w32_rc.h \
tools.bmp tearoff.bmp vim.ico vim_error.ico \
vim_alert.ico vim_info.ico vim_quest.ico
- $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) -DRCDLL -DVIMDLLBASE=\"$(VIMDLLBASE)\" vim.rc
+ $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) \
+ -DRCDLL -DVIMDLLBASE=\"$(VIMDLLBASE)\" vim.rc
!else
$(OUTDIR)/vim.res: $(OUTDIR) vim.rc vim.manifest version.h gui_w32_rc.h \
tools.bmp tearoff.bmp vim.ico vim_error.ico \
@@ -1825,32 +1857,27 @@ CCCTERM = $(CC) $(CFLAGS) -Ilibvterm/include -DINLINE="" \
-DGET_SPECIAL_PTY_TYPE_FUNCTION=get_special_pty_type \
-D_CRT_SECURE_NO_WARNINGS
-$(OUTDIR)/vterm_encoding.obj: $(OUTDIR) libvterm/src/encoding.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/encoding.c
+# Create a default rule for vterm.
+{libvterm/src}.c{$(OUTDIR)/libvterm}.obj::
+ $(CCCTERM) /Fo$(OUTDIR)/libvterm/ $<
+
+$(OUTDIR)/libvterm/encoding.obj: $(OUTDIR)/libvterm libvterm/src/encoding.c $(TERM_DEPS)
-$(OUTDIR)/vterm_keyboard.obj: $(OUTDIR) libvterm/src/keyboard.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/keyboard.c
+$(OUTDIR)/libvterm/keyboard.obj: $(OUTDIR)/libvterm libvterm/src/keyboard.c $(TERM_DEPS)
-$(OUTDIR)/vterm_mouse.obj: $(OUTDIR) libvterm/src/mouse.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/mouse.c
+$(OUTDIR)/libvterm/mouse.obj: $(OUTDIR)/libvterm libvterm/src/mouse.c $(TERM_DEPS)
-$(OUTDIR)/vterm_parser.obj: $(OUTDIR) libvterm/src/parser.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/parser.c
+$(OUTDIR)/libvterm/parser.obj: $(OUTDIR)/libvterm libvterm/src/parser.c $(TERM_DEPS)
-$(OUTDIR)/vterm_pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/pen.c
+$(OUTDIR)/libvterm/pen.obj: $(OUTDIR)/libvterm libvterm/src/pen.c $(TERM_DEPS)
-$(OUTDIR)/vterm_screen.obj: $(OUTDIR) libvterm/src/screen.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/screen.c
+$(OUTDIR)/libvterm/screen.obj: $(OUTDIR)/libvterm libvterm/src/screen.c $(TERM_DEPS)
-$(OUTDIR)/vterm_state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/state.c
+$(OUTDIR)/libvterm/state.obj: $(OUTDIR)/libvterm libvterm/src/state.c $(TERM_DEPS)
-$(OUTDIR)/vterm_unicode.obj: $(OUTDIR) libvterm/src/unicode.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/unicode.c
+$(OUTDIR)/libvterm/unicode.obj: $(OUTDIR)/libvterm libvterm/src/unicode.c $(TERM_DEPS)
-$(OUTDIR)/vterm_vterm.obj: $(OUTDIR) libvterm/src/vterm.c $(TERM_DEPS)
- $(CCCTERM) /Fo$@ libvterm/src/vterm.c
+$(OUTDIR)/libvterm/vterm.obj: $(OUTDIR)/libvterm libvterm/src/vterm.c $(TERM_DEPS)
# $CFLAGS may contain backslashes, quotes and chevrons, escape them all.
diff --git a/src/Makefile b/src/Makefile
index 71578eb..257742f 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2189,7 +2189,7 @@ test check: unittests $(TERM_TEST) scripttests
scripttests:
$(MAKE) -f Makefile $(VIMTARGET)
if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \
- cd $(PODIR); $(MAKE) -f Makefile check VIM=../$(VIMTARGET); \
+ cd $(PODIR); $(MAKE) -f Makefile check VIMPROG=../$(VIMTARGET); \
fi
-if test $(VIMTARGET) != vim -a ! -r vim; then \
ln -s $(VIMTARGET) vim; \
@@ -2354,10 +2354,8 @@ installrtbase: $(HELPSOURCE)/vim.1 $(DEST_VIM) $(VIMTARGET) $(DEST_RT) \
cd $(HELPSOURCE); if test -z "$(CROSS_COMPILING)" -a -f tags; then \
mv -f tags tags.dist; fi
@echo generating help tags
- # We can assume Vim was build, but it may not have been installed,
- # thus use the executable in the current directory.
- -@BUILD_DIR="`pwd`"; cd $(HELPSOURCE); if test -z "$(CROSS_COMPILING)"; then \
- $(MAKE) VIMEXE="$$BUILD_DIR/$(VIMTARGET)" vimtags; fi
+ -@BUILD_DIR=`pwd`; cd $(HELPSOURCE); if test -z "$(CROSS_COMPILING)"; then \
+ $(MAKE) VIMPROG="$$BUILD_DIR/$(VIMTARGET)" vimtags; fi
cd $(HELPSOURCE); \
files=`ls *.txt tags`; \
files="$$files `ls *.??x tags-?? 2>/dev/null || true`"; \
@@ -2626,7 +2624,7 @@ ICONTHEMEPATH = $(DATADIR)/icons/hicolor
DESKTOPPATH = $(DESTDIR)$(DATADIR)/applications
KDEPATH = $(HOME)/.kde/share/icons
install-icons:
- if test -n "$(DESTDIR)"; then \
+ if test -n "$(DESTDIR)$(DATADIR)"; then \
$(MKDIR_P) $(ICON48PATH) $(ICON32PATH) \
$(ICON16PATH) $(DESKTOPPATH); \
fi
@@ -2847,6 +2845,8 @@ uninstall_runtime:
-rm -f $(SYS_OPTWIN_FILE)
-rm -f $(DEST_COL)/*.vim $(DEST_COL)/README.txt
-rm -rf $(DEST_COL)/tools
+ -rm -f $(DESKTOPPATH)/vim.desktop $(DESKTOPPATH)/gvim.desktop
+ -rm -f $(ICON16PATH)/gvim.png $(ICON32PATH)/gvim.png $(ICON48PATH)/gvim.png
-rm -rf $(DEST_COL)/lists
-rm -f $(DEST_SYN)/shared/*.vim $(DEST_SYN)/shared/README.txt
-rm -f $(DEST_SYN)/modula2/opt/*.vim
diff --git a/src/arglist.c b/src/arglist.c
index 187e16e..8825c8e 100644
--- a/src/arglist.c
+++ b/src/arglist.c
@@ -184,6 +184,8 @@ alist_set(
/*
* Add file "fname" to argument list "al".
* "fname" must have been allocated and "al" must have been checked for room.
+ *
+ * May trigger Buf* autocommands
*/
void
alist_add(
@@ -196,6 +198,7 @@ alist_add(
if (check_arglist_locked() == FAIL)
return;
arglist_locked = TRUE;
+ curwin->w_locked = TRUE;
#ifdef BACKSLASH_IN_FILENAME
slash_adjust(fname);
@@ -207,6 +210,7 @@ alist_add(
++al->al_ga.ga_len;
arglist_locked = FALSE;
+ curwin->w_locked = FALSE;
}
#if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
@@ -365,6 +369,7 @@ alist_add_list(
mch_memmove(&(ARGLIST[after + count]), &(ARGLIST[after]),
(ARGCOUNT - after) * sizeof(aentry_T));
arglist_locked = TRUE;
+ curwin->w_locked = TRUE;
for (i = 0; i < count; ++i)
{
int flags = BLN_LISTED | (will_edit ? BLN_CURBUF : 0);
@@ -373,6 +378,7 @@ alist_add_list(
ARGLIST[after + i].ae_fnum = buflist_add(files[i], flags);
}
arglist_locked = FALSE;
+ curwin->w_locked = FALSE;
ALIST(curwin)->al_ga.ga_len += count;
if (old_argcount > 0 && curwin->w_arg_idx >= after)
curwin->w_arg_idx += count;
diff --git a/src/auto/configure b/src/auto/configure
index 98b9580..4a99071 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -1575,7 +1575,7 @@ Optional Packages:
--with-python-command=NAME name of the Python 2 command (default: python2 or python)
--with-python-config-dir=PATH Python's config directory (deprecated)
--with-python3-command=NAME name of the Python 3 command (default: python3 or python)
- --with-python3-stable-abi=VERSION stable ABI version to target (e.g. 3.8)
+ --with-python3-stable-abi=VERSION stable ABI version to target (default: 3.8)
--with-python3-config-dir=PATH Python's config directory (deprecated)
--with-tclsh=PATH which tclsh to use (default: tclsh8.0)
--with-ruby-command=RUBY name of the Ruby command (default: ruby)
@@ -7083,14 +7083,21 @@ printf %s "checking Python is 3.0 or better... " >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yep" >&5
printf "%s\n" "yep" >&6; }
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking --with-python3-stable-abi argument" >&5
+ python3_stable_abi_default=3.8
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking --with-python3-stable-abi argument" >&5
printf %s "checking --with-python3-stable-abi argument... " >&6; }
# Check whether --with-python3-stable-abi was given.
if test ${with_python3_stable_abi+y}
then :
- withval=$with_python3_stable_abi; vi_cv_var_python3_stable_abi="$withval"; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_stable_abi" >&5
+ withval=$with_python3_stable_abi;
+ if test "X$withval" = "Xyes"; then
+ vi_cv_var_python3_stable_abi=$python3_stable_abi_default
+ else
+ vi_cv_var_python3_stable_abi="$withval"
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_stable_abi" >&5
printf "%s\n" "$vi_cv_var_python3_stable_abi" >&6; }
else $as_nop
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
@@ -15876,6 +15883,30 @@ then :
fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dgettext" >&5
+printf %s "checking for dgettext... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <libintl.h>
+int
+main (void)
+{
+dgettext("Test", "Test");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }; printf "%s\n" "#define HAVE_DGETTEXT 1" >>confdefs.h
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _nl_msg_cat_cntr" >&5
printf %s "checking for _nl_msg_cat_cntr... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
diff --git a/src/autocmd.c b/src/autocmd.c
index 8380f8a..00f41bd 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -120,6 +120,7 @@ static keyvalue_T event_tab[] = {
KEYVALUE_ENTRY(EVENT_CURSORHOLD, "CursorHold"),
KEYVALUE_ENTRY(EVENT_CURSORHOLDI, "CursorHoldI"),
KEYVALUE_ENTRY(EVENT_CURSORMOVED, "CursorMoved"),
+ KEYVALUE_ENTRY(EVENT_CURSORMOVEDC, "CursorMovedC"),
KEYVALUE_ENTRY(EVENT_CURSORMOVEDI, "CursorMovedI"),
KEYVALUE_ENTRY(EVENT_DIFFUPDATED, "DiffUpdated"),
KEYVALUE_ENTRY(EVENT_DIRCHANGED, "DirChanged"),
@@ -154,6 +155,7 @@ static keyvalue_T event_tab[] = {
KEYVALUE_ENTRY(EVENT_INSERTENTER, "InsertEnter"),
KEYVALUE_ENTRY(EVENT_INSERTLEAVE, "InsertLeave"),
KEYVALUE_ENTRY(EVENT_INSERTLEAVEPRE, "InsertLeavePre"),
+ KEYVALUE_ENTRY(EVENT_KEYINPUTPRE, "KeyInputPre"),
KEYVALUE_ENTRY(EVENT_MENUPOPUP, "MenuPopup"),
KEYVALUE_ENTRY(EVENT_MODECHANGED, "ModeChanged"),
KEYVALUE_ENTRY(EVENT_OPTIONSET, "OptionSet"),
@@ -2021,6 +2023,15 @@ has_insertcharpre(void)
}
/*
+ * Return TRUE when there is an KeyInputPre autocommand defined.
+ */
+ int
+has_keyinputpre(void)
+{
+ return (first_autopat[(int)EVENT_KEYINPUTPRE] != NULL);
+}
+
+/*
* Return TRUE when there is an CmdUndefined autocommand defined.
*/
int
@@ -2250,10 +2261,12 @@ apply_autocmds_group(
|| event == EVENT_CMDLINECHANGED
|| event == EVENT_CMDLINEENTER
|| event == EVENT_CMDLINELEAVE
+ || event == EVENT_CURSORMOVEDC
|| event == EVENT_CMDWINENTER
|| event == EVENT_CMDWINLEAVE
|| event == EVENT_CMDUNDEFINED
|| event == EVENT_FUNCUNDEFINED
+ || event == EVENT_KEYINPUTPRE
|| event == EVENT_REMOTEREPLY
|| event == EVENT_SPELLFILEMISSING
|| event == EVENT_QUICKFIXCMDPRE
diff --git a/src/buffer.c b/src/buffer.c
index cbec9b9..34500e4 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -50,6 +50,7 @@ static void free_buffer(buf_T *);
static void free_buffer_stuff(buf_T *buf, int free_options);
static int bt_nofileread(buf_T *buf);
static void no_write_message_buf(buf_T *buf);
+static int do_buffer_ext(int action, int start, int dir, int count, int flags);
#ifdef UNIX
# define dev_T dev_t
@@ -750,10 +751,16 @@ aucmd_abort:
*/
if (wipe_buf)
{
+ tabpage_T *tp;
+ win_T *wp;
+
// Do not wipe out the buffer if it is used in a window.
if (buf->b_nwindows > 0)
return FALSE;
+ FOR_ALL_TAB_WINDOWS(tp, wp)
+ mark_forget_file(wp, buf->b_fnum);
+
if (action == DOBUF_WIPE_REUSE)
{
// we can re-use this buffer number, store it
@@ -1100,13 +1107,30 @@ goto_buffer(
{
bufref_T old_curbuf;
int save_sea = swap_exists_action;
+ int skip_help_buf;
+
+ switch (eap->cmdidx)
+ {
+ case CMD_bnext:
+ case CMD_sbnext:
+ case CMD_bNext:
+ case CMD_bprevious:
+ case CMD_sbNext:
+ case CMD_sbprevious:
+ skip_help_buf = TRUE;
+ break;
+ default:
+ skip_help_buf = FALSE;
+ break;
+ }
set_bufref(&old_curbuf, curbuf);
if (swap_exists_action == SEA_NONE)
swap_exists_action = SEA_DIALOG;
- (void)do_buffer(*eap->cmd == 's' ? DOBUF_SPLIT : DOBUF_GOTO,
- start, dir, count, eap->forceit);
+ (void)do_buffer_ext(*eap->cmd == 's' ? DOBUF_SPLIT : DOBUF_GOTO, start, dir, count,
+ (eap->forceit ? DOBUF_FORCEIT : 0) |
+ (skip_help_buf ? DOBUF_SKIPHELP : 0));
if (swap_exists_action == SEA_QUIT && *eap->cmd == 's')
{
#if defined(FEAT_EVAL)
@@ -1337,8 +1361,11 @@ do_buffer_ext(
if (buf == NULL)
buf = lastbuf;
}
- // don't count unlisted buffers
- if (unload || buf->b_p_bl)
+ // Don't count unlisted buffers.
+ // Avoid non-help buffers if the starting point was a non-help buffer and
+ // vice-versa.
+ if (unload || (buf->b_p_bl
+ && ((flags & DOBUF_SKIPHELP) == 0 || buf->b_help == bp->b_help)))
{
--count;
bp = NULL; // use this buffer as new starting point
@@ -1457,7 +1484,7 @@ do_buffer_ext(
// (unless it's the only window). Repeat this so long as we end up in
// a window with this buffer.
while (buf == curbuf
- && !(curwin->w_closing || curwin->w_buffer->b_locked > 0)
+ && !(win_locked(curwin) || curwin->w_buffer->b_locked > 0)
&& (!ONE_WINDOW || first_tabpage->tp_next != NULL))
{
if (win_close(curwin, FALSE) == FAIL)
@@ -5443,7 +5470,7 @@ ex_buffer_all(exarg_T *eap)
: wp->w_width != Columns)
|| (had_tab > 0 && wp != firstwin))
&& !ONE_WINDOW
- && !(wp->w_closing || wp->w_buffer->b_locked > 0)
+ && !(win_locked(wp) || wp->w_buffer->b_locked > 0)
&& !win_unlisted(wp))
{
if (win_close(wp, FALSE) == FAIL)
diff --git a/src/bufwrite.c b/src/bufwrite.c
index c9d9875..23cd884 100644
--- a/src/bufwrite.c
+++ b/src/bufwrite.c
@@ -1350,7 +1350,7 @@ buf_write(
p = copybuf + STRLEN(copybuf);
if (after_pathsep(copybuf, p) && p[-1] == p[-2])
// Ends with '//', use full path
- if ((p = make_percent_swname(copybuf, fname)) != NULL)
+ if ((p = make_percent_swname(copybuf, p, fname)) != NULL)
{
backup = modname(p, backup_ext, FALSE);
vim_free(p);
@@ -1564,7 +1564,7 @@ buf_write(
p = IObuff + STRLEN(IObuff);
if (after_pathsep(IObuff, p) && p[-1] == p[-2])
// path ends with '//', use full path
- if ((p = make_percent_swname(IObuff, fname)) != NULL)
+ if ((p = make_percent_swname(IObuff, p, fname)) != NULL)
{
backup = modname(p, backup_ext, FALSE);
vim_free(p);
diff --git a/src/change.c b/src/change.c
index dacc06f..72d01c5 100644
--- a/src/change.c
+++ b/src/change.c
@@ -1355,17 +1355,17 @@ del_bytes(
mch_memmove(newp + col, oldp + col + count, (size_t)movelen);
if (alloc_newp)
ml_replace(lnum, newp, FALSE);
-#ifdef FEAT_PROP_POPUP
else
{
+#ifdef FEAT_PROP_POPUP
// Also move any following text properties.
if (oldlen + 1 < curbuf->b_ml.ml_line_len)
mch_memmove(newp + newlen + 1, oldp + oldlen + 1,
(size_t)curbuf->b_ml.ml_line_len - oldlen - 1);
+#endif
curbuf->b_ml.ml_line_len -= count;
curbuf->b_ml.ml_line_textlen = 0;
}
-#endif
// mark the buffer as changed and prepare for displaying
inserted_bytes(lnum, col, -count);
diff --git a/src/channel.c b/src/channel.c
index b99b3a9..69bbff2 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -2277,7 +2277,7 @@ channel_parse_json(channel_T *channel, ch_part_T part)
{
int timeout;
#ifdef MSWIN
- timeout = GetTickCount() > chanpart->ch_deadline;
+ timeout = (int)(GetTickCount() - chanpart->ch_deadline) > 0;
#else
{
struct timeval now_tv;
diff --git a/src/charset.c b/src/charset.c
index 9aa402a..19b0895 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -827,20 +827,20 @@ linetabsize_no_outer(win_T *wp, linenr_T lnum)
if (cts.cts_text_prop_count)
{
- int write_idx = 0;
- for (int read_idx = 0; read_idx < cts.cts_text_prop_count; read_idx++)
- {
- textprop_T *tp = &cts.cts_text_props[read_idx];
- if (tp->tp_col != MAXCOL)
- {
- if (read_idx != write_idx)
- cts.cts_text_props[write_idx] = *tp;
- write_idx++;
- }
- }
- cts.cts_text_prop_count = write_idx;
- if (cts.cts_text_prop_count == 0)
- VIM_CLEAR(cts.cts_text_props);
+ int write_idx = 0;
+ for (int read_idx = 0; read_idx < cts.cts_text_prop_count; read_idx++)
+ {
+ textprop_T *tp = &cts.cts_text_props[read_idx];
+ if (tp->tp_col != MAXCOL)
+ {
+ if (read_idx != write_idx)
+ cts.cts_text_props[write_idx] = *tp;
+ write_idx++;
+ }
+ }
+ cts.cts_text_prop_count = write_idx;
+ if (cts.cts_text_prop_count == 0)
+ VIM_CLEAR(cts.cts_text_props);
}
win_linetabsize_cts(&cts, (colnr_T)MAXCOL);
@@ -1397,17 +1397,17 @@ win_lbr_chartabsize(
else if (max_head_vcol > vcol + head_prev + prev_rem)
head += (max_head_vcol - (vcol + head_prev + prev_rem)
+ width2 - 1) / width2 * head_mid;
-# ifdef FEAT_PROP_POPUP
else if (max_head_vcol < 0)
{
- int off = 0;
+ int off = mb_added;
+# ifdef FEAT_PROP_POPUP
if (*s != NUL
&& ((State & MODE_NORMAL) || cts->cts_start_incl))
off += cts->cts_cur_text_width;
+# endif
if (off >= prev_rem)
head += (1 + (off - prev_rem) / width) * head_mid;
}
-# endif
}
}
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index 8d8bf06..c1ed03b 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -46,6 +46,7 @@ cmdline_fuzzy_completion_supported(expand_T *xp)
&& xp->xp_context != EXPAND_COLORS
&& xp->xp_context != EXPAND_COMPILER
&& xp->xp_context != EXPAND_DIRECTORIES
+ && xp->xp_context != EXPAND_DIRS_IN_CDPATH
&& xp->xp_context != EXPAND_FILES
&& xp->xp_context != EXPAND_FILES_IN_PATH
&& xp->xp_context != EXPAND_FILETYPE
@@ -107,7 +108,8 @@ wildescape(
|| xp->xp_context == EXPAND_FILES_IN_PATH
|| xp->xp_context == EXPAND_SHELLCMD
|| xp->xp_context == EXPAND_BUFFERS
- || xp->xp_context == EXPAND_DIRECTORIES)
+ || xp->xp_context == EXPAND_DIRECTORIES
+ || xp->xp_context == EXPAND_DIRS_IN_CDPATH)
{
// Insert a backslash into a file name before a space, \, %, #
// and wildmatch characters, except '~'.
@@ -357,6 +359,7 @@ cmdline_pum_create(
compl_match_array[i].pum_info = NULL;
compl_match_array[i].pum_extra = NULL;
compl_match_array[i].pum_kind = NULL;
+ compl_match_array[i].pum_user_hlattr = -1;
}
// Compute the popup menu starting column
@@ -1404,7 +1407,8 @@ addstar(
if (context != EXPAND_FILES
&& context != EXPAND_FILES_IN_PATH
&& context != EXPAND_SHELLCMD
- && context != EXPAND_DIRECTORIES)
+ && context != EXPAND_DIRECTORIES
+ && context != EXPAND_DIRS_IN_CDPATH)
{
// Matching will be done internally (on something other than files).
// So we convert the file-matching-type wildcards into our kind for
@@ -2138,7 +2142,7 @@ set_context_by_cmdname(
case CMD_lcd:
case CMD_lchdir:
if (xp->xp_context == EXPAND_FILES)
- xp->xp_context = EXPAND_DIRECTORIES;
+ xp->xp_context = EXPAND_DIRS_IN_CDPATH;
break;
case CMD_help:
xp->xp_context = EXPAND_HELP;
@@ -2845,6 +2849,8 @@ expand_files_and_dirs(
flags |= EW_FILE;
else if (xp->xp_context == EXPAND_FILES_IN_PATH)
flags |= (EW_FILE | EW_PATH);
+ else if (xp->xp_context == EXPAND_DIRS_IN_CDPATH)
+ flags = (flags | EW_DIR | EW_CDPATH) & ~EW_FILE;
else
flags = (flags | EW_DIR) & ~EW_FILE;
if (options & WILD_ICASE)
@@ -3098,7 +3104,8 @@ ExpandFromContext(
if (xp->xp_context == EXPAND_FILES
|| xp->xp_context == EXPAND_DIRECTORIES
- || xp->xp_context == EXPAND_FILES_IN_PATH)
+ || xp->xp_context == EXPAND_FILES_IN_PATH
+ || xp->xp_context == EXPAND_DIRS_IN_CDPATH)
return expand_files_and_dirs(xp, pat, matches, numMatches, flags,
options);
diff --git a/src/config.h.in b/src/config.h.in
index 8ad9f03..530c082 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -222,7 +222,6 @@
#undef HAVE_UNSETENV
#undef HAVE_USLEEP
#undef HAVE_UTIME
-#undef HAVE_BIND_TEXTDOMAIN_CODESET
#undef HAVE_MBLEN
#undef HAVE_TIMER_CREATE
#undef HAVE_CLOCK_GETTIME
@@ -424,6 +423,12 @@
/* Define if there is a working gettext(). */
#undef HAVE_GETTEXT
+/* Define if there is a working bind_textdomain_codeset(). */
+#undef HAVE_BIND_TEXTDOMAIN_CODESET
+
+/* Define if there is a working dgettext(). */
+#undef HAVE_DGETTEXT
+
/* Define if _nl_msg_cat_cntr is present. */
#undef HAVE_NL_MSG_CAT_CNTR
diff --git a/src/configure.ac b/src/configure.ac
index 946fe52..233e907 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -1539,11 +1539,18 @@ if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic";
AC_MSG_RESULT(yep)
dnl -- get the stable ABI version if passed in
+ python3_stable_abi_default=3.8
AC_MSG_CHECKING(--with-python3-stable-abi argument)
AC_SUBST(vi_cv_var_python3_stable_abi)
- AC_ARG_WITH(python3-stable-abi, [ --with-python3-stable-abi=VERSION stable ABI version to target (e.g. 3.8)],
- vi_cv_var_python3_stable_abi="$withval"; AC_MSG_RESULT($vi_cv_var_python3_stable_abi),
- AC_MSG_RESULT(no))
+ AC_ARG_WITH(python3-stable-abi, [ --with-python3-stable-abi=VERSION stable ABI version to target (default: 3.8)],
+ [
+ if test "X$withval" = "Xyes"; then
+ vi_cv_var_python3_stable_abi=$python3_stable_abi_default
+ else
+ vi_cv_var_python3_stable_abi="$withval"
+ fi
+ AC_MSG_RESULT($vi_cv_var_python3_stable_abi)],
+ AC_MSG_RESULT(no))
if test "X$vi_cv_var_python3_stable_abi" != "X"; then
AC_CACHE_VAL(vi_cv_var_python3_stable_abi_hex,
[
@@ -4497,6 +4504,12 @@ if test "$enable_nls" = "yes"; then
AC_SUBST(MAKEMO)
dnl this was added in GNU gettext 0.10.36
AC_CHECK_FUNCS(bind_textdomain_codeset)
+ AC_MSG_CHECKING([for dgettext])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(
+ [#include <libintl.h>],
+ [dgettext("Test", "Test");])],
+ AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_DGETTEXT),
+ AC_MSG_RESULT([no]))
dnl _nl_msg_cat_cntr is required for GNU gettext
AC_MSG_CHECKING([for _nl_msg_cat_cntr])
AC_LINK_IFELSE([AC_LANG_PROGRAM(
diff --git a/src/dict.c b/src/dict.c
index bf45b0b..d3636f3 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -1222,8 +1222,7 @@ dict_lookup(hashitem_T *hi)
dict_equal(
dict_T *d1,
dict_T *d2,
- int ic, // ignore case for strings
- int recursive) // TRUE when used recursively
+ int ic) // ignore case for strings
{
hashitem_T *hi;
dictitem_T *item2;
@@ -1247,7 +1246,7 @@ dict_equal(
item2 = dict_find(d2, hi->hi_key, -1);
if (item2 == NULL)
return FALSE;
- if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic, recursive))
+ if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic))
return FALSE;
--todo;
}
@@ -1275,7 +1274,7 @@ dict_count(dict_T *d, typval_T *needle, int ic)
if (!HASHITEM_EMPTY(hi))
{
--todo;
- if (tv_equal(&HI2DI(hi)->di_tv, needle, ic, FALSE))
+ if (tv_equal(&HI2DI(hi)->di_tv, needle, ic))
++n;
}
}
diff --git a/src/edit.c b/src/edit.c
index e75a1cf..8a37a61 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -2849,7 +2849,6 @@ cursor_down_inner(win_T *wp, long n)
// count each sequence of folded lines as one logical line
while (n--)
{
- // Move to last line of fold, will fail if it's the end-of-file.
if (hasFoldingWin(wp, lnum, NULL, &last, TRUE, NULL))
lnum = last + 1;
else
@@ -2877,8 +2876,11 @@ cursor_down(
{
linenr_T lnum = curwin->w_cursor.lnum;
linenr_T line_count = curwin->w_buffer->b_ml.ml_line_count;
- // This fails if the cursor is already in the last line or would move
- // beyond the last line and '-' is in 'cpoptions'
+ // This fails if the cursor is already in the last (folded) line, or would
+ // move beyond the last line and '-' is in 'cpoptions'.
+#ifdef FEAT_FOLDING
+ hasFoldingWin(curwin, lnum, NULL, &lnum, TRUE, NULL);
+#endif
if (n > 0
&& (lnum >= line_count
|| (lnum + n > line_count
diff --git a/src/errors.h b/src/errors.h
index 4387a29..03b3c08 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -1038,8 +1038,10 @@ EXTERN char e_missing_argument_str[]
INIT(= N_("E417: Missing argument: %s"));
EXTERN char e_illegal_value_str[]
INIT(= N_("E418: Illegal value: %s"));
+#ifdef FEAT_EVAL
EXTERN char e_im_a_teapot[]
INIT(= N_("E418: I'm a teapot"));
+#endif
EXTERN char e_fg_color_unknown[]
INIT(= N_("E419: FG color unknown"));
EXTERN char e_bg_color_unknown[]
@@ -1273,8 +1275,10 @@ EXTERN char e_is_not_file_or_writable_device[]
INIT(= N_("is not a file or writable device"));
EXTERN char e_str_is_not_file_or_writable_device[]
INIT(= N_("E503: \"%s\" is not a file or writable device"));
+#ifdef FEAT_EVAL
EXTERN char e_coffee_currently_not_available[]
INIT(= N_("E503: Coffee is currently not available"));
+#endif
// E504
EXTERN char e_is_read_only_cannot_override_W_in_cpoptions[]
INIT(= N_("is read-only (cannot override: \"W\" in 'cpoptions')"));
@@ -1571,11 +1575,12 @@ EXTERN char e_too_many_signs_defined[]
EXTERN char e_unknown_printer_font_str[]
INIT(= N_("E613: Unknown printer font: %s"));
#endif
-EXTERN char e_class_required[]
- INIT(= N_("E614: Class required"));
+// E614 unused (deleted)
// E615 unused
+#ifdef FEAT_EVAL
EXTERN char e_object_required_for_argument_nr[]
INIT(= N_("E616: Object required for argument %d"));
+#endif
#ifdef FEAT_GUI_GTK
EXTERN char e_cannot_be_changed_in_gtk_GUI[]
INIT(= N_("E617: Cannot be changed in the GTK GUI"));
@@ -3315,8 +3320,10 @@ EXTERN char e_could_not_check_for_pending_sigalrm_str[]
#ifdef FEAT_EVAL
EXTERN char e_substitute_nesting_too_deep[]
INIT(= N_("E1290: substitute nesting too deep"));
+# ifdef MSWIN
EXTERN char e_invalid_argument_nr[]
INIT(= N_("E1291: Invalid argument: %ld"));
+# endif
#endif
EXTERN char e_cmdline_window_already_open[]
INIT(= N_("E1292: Command-line window is already open"));
@@ -3387,16 +3394,13 @@ EXTERN char e_invalid_object_variable_declaration_str[]
INIT(= N_("E1317: Invalid object variable declaration: %s"));
EXTERN char e_not_valid_command_in_class_str[]
INIT(= N_("E1318: Not a valid command in a class: %s"));
-EXTERN char e_using_class_as_number[]
- INIT(= N_("E1319: Using a Class as a Number"));
+// E1319 unused
EXTERN char e_using_object_as_number[]
INIT(= N_("E1320: Using an Object as a Number"));
-EXTERN char e_using_class_as_float[]
- INIT(= N_("E1321: Using a Class as a Float"));
+// E1321 unused
EXTERN char e_using_object_as_float[]
INIT(= N_("E1322: Using an Object as a Float"));
-EXTERN char e_using_class_as_string[]
- INIT(= N_("E1323: Using a Class as a String"));
+// E1323 unused
EXTERN char e_using_object_as_string[]
INIT(= N_("E1324: Using an Object as a String"));
EXTERN char e_method_not_found_on_class_str_str[]
@@ -3547,8 +3551,7 @@ EXTERN char e_type_can_only_be_defined_in_vim9_script[]
INIT(= N_("E1393: Type can only be defined in Vim9 script"));
EXTERN char e_type_name_must_start_with_uppercase_letter_str[]
INIT(= N_("E1394: Type name must start with an uppercase letter: %s"));
-EXTERN char e_cannot_modify_typealias[]
- INIT(= N_("E1395: Type alias \"%s\" cannot be modified"));
+// E1395 unused
EXTERN char e_typealias_already_exists_for_str[]
INIT(= N_("E1396: Type alias \"%s\" already exists"));
EXTERN char e_missing_typealias_name[]
@@ -3557,20 +3560,16 @@ EXTERN char e_missing_typealias_type[]
INIT(= N_("E1398: Missing type alias type"));
EXTERN char e_type_can_only_be_used_in_script[]
INIT(= N_("E1399: Type can only be used in a script"));
-EXTERN char e_using_typealias_as_number[]
- INIT(= N_("E1400: Using type alias \"%s\" as a Number"));
-EXTERN char e_using_typealias_as_float[]
- INIT(= N_("E1401: Using type alias \"%s\" as a Float"));
-EXTERN char e_using_typealias_as_string[]
- INIT(= N_("E1402: Using type alias \"%s\" as a String"));
+// E1400 unused
+// E1401 unused
+// E1402 unused
EXTERN char e_using_typealias_as_value_str[]
INIT(= N_("E1403: Type alias \"%s\" cannot be used as a value"));
EXTERN char e_abstract_cannot_be_used_in_interface[]
INIT(= N_("E1404: Abstract cannot be used in an interface"));
EXTERN char e_using_class_as_value_str[]
INIT(= N_("E1405: Class \"%s\" cannot be used as a value"));
-EXTERN char e_using_class_as_var_val[]
- INIT(= N_("E1406: Cannot use a Class as a variable or value"));
+// E1406 unused
EXTERN char e_using_typealias_as_var_val[]
INIT(= N_("E1407: Cannot use a Typealias as a variable or value"));
EXTERN char e_final_variable_not_supported_in_interface[]
@@ -3625,20 +3624,26 @@ EXTERN char e_fmt_arg_nr_unused_str[]
INIT(= N_("E1501: format argument %d unused in $-style format: %s"));
EXTERN char e_positional_num_field_spec_reused_str_str[]
INIT(= N_("E1502: Positional argument %d used as field width reused as different type: %s/%s"));
+#ifdef FEAT_EVAL
EXTERN char e_positional_nr_out_of_bounds_str[]
INIT(= N_("E1503: Positional argument %d out of bounds: %s"));
+#endif
EXTERN char e_positional_arg_num_type_inconsistent_str_str[]
INIT(= N_("E1504: Positional argument %d type used inconsistently: %s/%s"));
EXTERN char e_invalid_format_specifier_str[]
INIT(= N_("E1505: Invalid format specifier: %s"));
+#ifdef FEAT_XATTR
EXTERN char e_xattr_erange[]
INIT(= N_("E1506: Buffer too small to copy xattr value or key"));
+#endif
EXTERN char e_aptypes_is_null_nr_str[]
INIT(= "E1507: Internal error: ap_types or ap_types[idx] is NULL: %d: %s");
+#ifdef FEAT_XATTR
EXTERN char e_xattr_e2big[]
INIT(= N_("E1508: Size of the extended attribute value is larger than the maximum size allowed"));
EXTERN char e_xattr_other[]
INIT(= N_("E1509: Error occurred when reading or writing extended attribute"));
+#endif
EXTERN char e_val_too_large[]
INIT(= N_("E1510: Value too large: %s"));
EXTERN char e_wrong_number_of_characters_for_field_str[]
diff --git a/src/eval.c b/src/eval.c
index 7848fea..cc289b4 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3259,7 +3259,7 @@ may_call_simple_func(
char_u *p = STRNCMP(arg, "<SNR>", 5) == 0 ? skipdigits(arg + 5) : arg;
if (to_name_end(p, TRUE) == parens)
- r = call_simple_func(arg, (int)(parens - arg), rettv);
+ r = call_simple_func(arg, (size_t)(parens - arg), rettv);
}
return r;
}
@@ -5923,6 +5923,37 @@ func_tv2string(typval_T *tv, char_u **tofree, int echo_style)
}
/*
+ * Return a textual representation of the object method in "tv", a VAR_PARTIAL.
+ * If the memory is allocated "tofree" is set to it, otherwise NULL.
+ * When "echo_style" is FALSE, put quotes around the function name as
+ * "function()", otherwise does not put quotes around function name.
+ * May return NULL.
+ */
+ static char_u *
+method_tv2string(typval_T *tv, char_u **tofree, int echo_style)
+{
+ char_u buf[MAX_FUNC_NAME_LEN];
+ partial_T *pt = tv->vval.v_partial;
+
+ size_t len = vim_snprintf((char *)buf, sizeof(buf), "<SNR>%d_%s.%s",
+ pt->pt_func->uf_script_ctx.sc_sid,
+ pt->pt_func->uf_class->class_name,
+ pt->pt_func->uf_name);
+ if (len >= sizeof(buf))
+ {
+ if (echo_style)
+ {
+ *tofree = NULL;
+ return (char_u *)"function()";
+ }
+ else
+ return *tofree = string_quote((char_u*)"", TRUE);
+ }
+
+ return *tofree = echo_style ? vim_strsave(buf) : string_quote(buf, TRUE);
+}
+
+/*
* Return a textual representation of a partial in "tv".
* If the memory is allocated "tofree" is set to it, otherwise NULL.
* "numbuf" is used for a number. May return NULL.
@@ -6088,10 +6119,10 @@ dict_tv2string(
*/
static char_u *
jobchan_tv2string(
- typval_T *tv,
- char_u **tofree,
- char_u *numbuf,
- int composite_val)
+ typval_T *tv UNUSED,
+ char_u **tofree UNUSED,
+ char_u *numbuf UNUSED,
+ int composite_val UNUSED)
{
char_u *r = NULL;
@@ -6139,6 +6170,58 @@ class_tv2string(typval_T *tv, char_u **tofree)
}
/*
+ * Return a textual representation of an Object in "tv".
+ * If the memory is allocated "tofree" is set to it, otherwise NULL.
+ * When "copyID" is not zero replace recursive object with "...".
+ * When "restore_copyID" is FALSE, repeated items in the object are
+ * replaced with "...". May return NULL.
+ */
+ static char_u *
+object_tv2string(
+ typval_T *tv,
+ char_u **tofree,
+ int copyID,
+ int restore_copyID,
+ char_u *numbuf,
+ int echo_style,
+ int composite_val)
+{
+ char_u *r = NULL;
+
+ object_T *obj = tv->vval.v_object;
+ if (obj == NULL || obj->obj_class == NULL)
+ {
+ *tofree = NULL;
+ r = (char_u *)"object of [unknown]";
+ }
+ else if (copyID != 0 && obj->obj_copyID == copyID
+ && obj->obj_class->class_obj_member_count != 0)
+ {
+ size_t n = 25 + strlen((char *)obj->obj_class->class_name);
+ r = alloc(n);
+ if (r != NULL)
+ (void)vim_snprintf((char *)r, n, "object of %s {...}",
+ obj->obj_class->class_name);
+ *tofree = r;
+ }
+ else
+ {
+ int old_copyID;
+ if (restore_copyID)
+ old_copyID = obj->obj_copyID;
+
+ obj->obj_copyID = copyID;
+ *tofree = object2string(obj, numbuf, copyID, echo_style,
+ restore_copyID, composite_val);
+ if (restore_copyID)
+ obj->obj_copyID = old_copyID;
+ r = *tofree;
+ }
+
+ return r;
+}
+
+/*
* Return a string with the string representation of a variable.
* If the memory is allocated "tofree" is set to it, otherwise NULL.
* "numbuf" is used for a number.
@@ -6169,7 +6252,7 @@ echo_string_core(
{
// Only give this message once for a recursive call to avoid
// flooding the user with errors. And stop iterating over lists
- // and dicts.
+ // and dicts and objects.
did_echo_string_emsg = TRUE;
emsg(_(e_variable_nested_too_deep_for_displaying));
}
@@ -6189,7 +6272,11 @@ echo_string_core(
break;
case VAR_PARTIAL:
- r = partial_tv2string(tv, tofree, numbuf, copyID);
+ if (tv->vval.v_partial == NULL
+ || tv->vval.v_partial->pt_obj == NULL)
+ r = partial_tv2string(tv, tofree, numbuf, copyID);
+ else
+ r = method_tv2string(tv, tofree, echo_style);
break;
case VAR_BLOB:
@@ -6227,9 +6314,8 @@ echo_string_core(
break;
case VAR_OBJECT:
- *tofree = r = object2string(tv->vval.v_object, numbuf, copyID,
- echo_style, restore_copyID,
- composite_val);
+ r = object_tv2string(tv, tofree, copyID, restore_copyID,
+ numbuf, echo_style, composite_val);
break;
case VAR_FLOAT:
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 9720691..173b544 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -28,6 +28,7 @@ static void f_balloon_show(typval_T *argvars, typval_T *rettv);
static void f_balloon_split(typval_T *argvars, typval_T *rettv);
# endif
#endif
+static void f_bindtextdomain(typval_T *argvars, typval_T *rettv);
static void f_byte2line(typval_T *argvars, typval_T *rettv);
static void f_call(typval_T *argvars, typval_T *rettv);
static void f_changenr(typval_T *argvars, typval_T *rettv);
@@ -81,6 +82,7 @@ static void f_haslocaldir(typval_T *argvars, typval_T *rettv);
static void f_hlID(typval_T *argvars, typval_T *rettv);
static void f_hlexists(typval_T *argvars, typval_T *rettv);
static void f_hostname(typval_T *argvars, typval_T *rettv);
+static void f_id(typval_T *argvars, typval_T *rettv);
static void f_index(typval_T *argvars, typval_T *rettv);
static void f_indexof(typval_T *argvars, typval_T *rettv);
static void f_input(typval_T *argvars, typval_T *rettv);
@@ -1133,6 +1135,7 @@ static argcheck_T arg2_number_bool[] = {arg_number, arg_bool};
static argcheck_T arg2_number_dict_any[] = {arg_number, arg_dict_any};
static argcheck_T arg2_number_list[] = {arg_number, arg_list_any};
static argcheck_T arg2_number_string[] = {arg_number, arg_string};
+static argcheck_T arg2_number_buffer[] = {arg_number, arg_buffer};
static argcheck_T arg2_number_string_or_list[] = {arg_number, arg_string_or_list_any};
static argcheck_T arg2_str_or_nr_or_list_dict[] = {arg_str_or_nr_or_list, arg_dict_any};
static argcheck_T arg2_string[] = {arg_string, arg_string};
@@ -1323,7 +1326,6 @@ ret_list_items(int argcount UNUSED,
*decl_type = &t_list_any;
return &t_list_list_any;
}
-
static type_T *
ret_list_string_items(int argcount UNUSED,
type2_T *argtypes UNUSED,
@@ -1333,6 +1335,14 @@ ret_list_string_items(int argcount UNUSED,
return &t_list_list_string;
}
static type_T *
+ret_list_regionpos(int argcount UNUSED,
+ type2_T *argtypes UNUSED,
+ type_T **decl_type)
+{
+ *decl_type = &t_list_any;
+ return &t_list_list_list_number;
+}
+ static type_T *
ret_dict_any(int argcount UNUSED,
type2_T *argtypes UNUSED,
type_T **decl_type UNUSED)
@@ -1823,6 +1833,8 @@ static funcentry_T global_functions[] =
NULL
#endif
},
+ {"bindtextdomain", 2, 2, 0, arg2_string,
+ ret_bool, f_bindtextdomain},
{"blob2list", 1, 1, FEARG_1, arg1_blob,
ret_list_number, f_blob2list},
{"browse", 4, 4, 0, arg4_browse,
@@ -1963,11 +1975,11 @@ static funcentry_T global_functions[] =
ret_number, f_diff_hlID},
{"digraph_get", 1, 1, FEARG_1, arg1_string,
ret_string, f_digraph_get},
- {"digraph_getlist",0, 1, FEARG_1, arg1_bool,
+ {"digraph_getlist", 0, 1, FEARG_1, arg1_bool,
ret_list_string_items, f_digraph_getlist},
{"digraph_set", 2, 2, FEARG_1, arg2_string,
ret_bool, f_digraph_set},
- {"digraph_setlist",1, 1, FEARG_1, arg1_list_string,
+ {"digraph_setlist", 1, 1, FEARG_1, arg1_list_string,
ret_bool, f_digraph_setlist},
{"echoraw", 1, 1, FEARG_1, arg1_string,
ret_void, f_echoraw},
@@ -2139,8 +2151,8 @@ static funcentry_T global_functions[] =
ret_dict_any, f_getreginfo},
{"getregion", 2, 3, FEARG_1, arg3_list_list_dict,
ret_list_string, f_getregion},
- {"getregionpos", 2, 3, FEARG_1, arg3_list_list_dict,
- ret_list_string, f_getregionpos},
+ {"getregionpos", 2, 3, FEARG_1, arg3_list_list_dict,
+ ret_list_regionpos, f_getregionpos},
{"getregtype", 0, 1, FEARG_1, arg1_string,
ret_string, f_getregtype},
{"getscriptinfo", 0, 1, 0, arg1_dict_any,
@@ -2153,7 +2165,7 @@ static funcentry_T global_functions[] =
ret_any, f_gettabwinvar},
{"gettagstack", 0, 1, FEARG_1, arg1_number,
ret_dict_any, f_gettagstack},
- {"gettext", 1, 1, FEARG_1, arg1_string,
+ {"gettext", 1, 2, FEARG_1, arg2_string,
ret_string, f_gettext},
{"getwininfo", 0, 1, FEARG_1, arg1_number,
ret_list_dict_any, f_getwininfo},
@@ -2203,6 +2215,8 @@ static funcentry_T global_functions[] =
ret_string, f_hostname},
{"iconv", 3, 3, FEARG_1, arg3_string,
ret_string, f_iconv},
+ {"id", 1, 1, FEARG_1, NULL,
+ ret_string, f_id},
{"indent", 1, 1, FEARG_1, arg1_lnum,
ret_number, f_indent},
{"index", 2, 4, FEARG_1, arg24_index,
@@ -2421,6 +2435,8 @@ static funcentry_T global_functions[] =
ret_void, PROP_FUNC(f_popup_move)},
{"popup_notification", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict,
ret_number, PROP_FUNC(f_popup_notification)},
+ {"popup_setbuf", 2, 2, FEARG_1, arg2_number_buffer,
+ ret_number_bool, PROP_FUNC(f_popup_setbuf)},
{"popup_setoptions", 2, 2, FEARG_1, arg2_number_dict_any,
ret_void, PROP_FUNC(f_popup_setoptions)},
{"popup_settext", 2, 2, FEARG_1, arg2_number_string_or_list,
@@ -3118,8 +3134,8 @@ internal_func_check_arg_types(
// functions, check the arguments are not types.
if (!(func_allows_type(idx)))
{
- for (int i = 0; i < argcount; ++i)
- if (check_type_is_value(types[i].type_curr) == FAIL)
+ for (int i = 0; i < argcount; ++i)
+ if (check_type_is_value(types[i].type_curr) == FAIL)
return FAIL;
}
@@ -3474,6 +3490,33 @@ get_buf_arg(typval_T *arg)
}
/*
+ * "bindtextdomain(package, path)" function
+ */
+ static void
+f_bindtextdomain(typval_T *argvars, typval_T *rettv)
+{
+ rettv->v_type = VAR_BOOL;
+ rettv->vval.v_number = VVAL_TRUE;
+
+ if (check_for_nonempty_string_arg(argvars, 0) == FAIL
+ || check_for_nonempty_string_arg(argvars, 1) == FAIL)
+ return;
+
+ if (strcmp((const char *)argvars[0].vval.v_string, VIMPACKAGE) == 0)
+ semsg(_(e_invalid_argument_str), tv_get_string(&argvars[0]));
+ else
+ {
+ if (bindtextdomain((const char *)argvars[0].vval.v_string, (const char *)argvars[1].vval.v_string) == NULL)
+ {
+ do_outofmem_msg((long)0);
+ rettv->vval.v_number = VVAL_FALSE;
+ }
+ }
+
+ return;
+}
+
+/*
* "byte2line(byte)" function
*/
static void
@@ -5110,6 +5153,36 @@ f_get(typval_T *argvars, typval_T *rettv)
list_append_tv(rettv->vval.v_list, &pt->pt_argv[i]);
}
}
+ else if (STRCMP(what, "arity") == 0)
+ {
+ int required = 0, optional = 0, varargs = FALSE;
+ char_u *name = partial_name(pt);
+
+ get_func_arity(name, &required, &optional, &varargs);
+
+ rettv->v_type = VAR_DICT;
+ if (rettv_dict_alloc(rettv) == OK)
+ {
+ dict_T *dict = rettv->vval.v_dict;
+
+ // Take into account the arguments of the partial, if any.
+ // Note that it is possible to supply more arguments than the function
+ // accepts.
+ if (pt->pt_argc >= required + optional)
+ required = optional = 0;
+ else if (pt->pt_argc > required)
+ {
+ optional -= pt->pt_argc - required;
+ required = 0;
+ }
+ else
+ required -= pt->pt_argc;
+
+ dict_add_number(dict, "required", required);
+ dict_add_number(dict, "optional", optional);
+ dict_add_bool(dict, "varargs", varargs);
+ }
+ }
else
semsg(_(e_invalid_argument_str), what);
@@ -6030,11 +6103,39 @@ f_gettagstack(typval_T *argvars, typval_T *rettv)
static void
f_gettext(typval_T *argvars, typval_T *rettv)
{
- if (check_for_nonempty_string_arg(argvars, 0) == FAIL)
+#if defined(HAVE_BIND_TEXTDOMAIN_CODESET)
+ char *prev = NULL;
+#endif
+
+ if (check_for_nonempty_string_arg(argvars, 0) == FAIL
+ || check_for_opt_string_arg(argvars, 1) == FAIL)
return;
rettv->v_type = VAR_STRING;
- rettv->vval.v_string = vim_strsave((char_u *)_(argvars[0].vval.v_string));
+
+ if (argvars[1].v_type == VAR_STRING &&
+ argvars[1].vval.v_string != NULL &&
+ *(argvars[1].vval.v_string) != NUL)
+ {
+#if defined(HAVE_BIND_TEXTDOMAIN_CODESET)
+ prev = bind_textdomain_codeset((const char *)argvars[1].vval.v_string, (char *)p_enc);
+#endif
+
+#if defined(HAVE_DGETTEXT)
+ rettv->vval.v_string = vim_strsave((char_u *)dgettext((const char *)argvars[1].vval.v_string, (const char *)argvars[0].vval.v_string));
+#else
+ textdomain((const char *)argvars[1].vval.v_string);
+ rettv->vval.v_string = vim_strsave((char_u *)_(argvars[0].vval.v_string));
+ textdomain(VIMPACKAGE);
+#endif
+
+#if defined(HAVE_BIND_TEXTDOMAIN_CODESET)
+ if (prev != NULL)
+ bind_textdomain_codeset((const char *)argvars[1].vval.v_string, prev);
+#endif
+ }
+ else
+ rettv->vval.v_string = vim_strsave((char_u *)_(argvars[0].vval.v_string));
}
// for VIM_VERSION_ defines
@@ -7435,6 +7536,54 @@ f_hostname(typval_T *argvars UNUSED, typval_T *rettv)
}
/*
+ * "id()" function
+ * Identity. Return address of item as a hex string, %p format.
+ * Currently only valid for object/container types.
+ * Return empty string if not an object.
+ */
+#ifdef VMS // VMS does not have defined uintptr_t
+# if defined(HAVE_NO_LONG_LONG)
+typedef unsigned int uintptr_t;
+# else
+typedef unsigned long long uintptr_t;
+# endif
+#endif // VMS
+
+ static void
+f_id(typval_T *argvars, typval_T *rettv)
+{
+ char numbuf[NUMBUFLEN];
+ char *p = numbuf;
+
+ switch (argvars[0].v_type)
+ {
+ case VAR_LIST:
+ case VAR_DICT:
+ case VAR_OBJECT:
+ case VAR_JOB:
+ case VAR_CHANNEL:
+ case VAR_BLOB:
+ // Assume pointer value in typval_T vval union at common location.
+ if (argvars[0].vval.v_object != NULL)
+ {
+ // "v" gets the address as an integer
+ uintptr_t v = (uintptr_t)(void *)argvars[0].vval.v_object;
+ // Build a hex string from the item's address; it is in
+ // reverse order. Ignore trailing zeros.
+ for (; p < numbuf + sizeof(uintptr_t) * 2 && v != 0;
+ ++p, v >>= 4)
+ *p = "0123456789abcdef"[v & 0xf];
+ }
+ default:
+ break;
+ }
+ *p = NUL;
+
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = vim_strsave((char_u *)numbuf);
+}
+
+/*
* "index()" function
*/
static void
@@ -7483,7 +7632,7 @@ f_index(typval_T *argvars, typval_T *rettv)
{
tv.v_type = VAR_NUMBER;
tv.vval.v_number = blob_get(b, idx);
- if (tv_equal(&tv, &argvars[1], ic, FALSE))
+ if (tv_equal(&tv, &argvars[1], ic))
{
rettv->vval.v_number = idx;
return;
@@ -7516,7 +7665,7 @@ f_index(typval_T *argvars, typval_T *rettv)
}
for ( ; item != NULL; item = item->li_next, ++idx)
- if (tv_equal(&item->li_tv, &argvars[1], ic, FALSE))
+ if (tv_equal(&item->li_tv, &argvars[1], ic))
{
rettv->vval.v_number = idx;
break;
@@ -9215,69 +9364,47 @@ f_test_srand_seed(typval_T *argvars, typval_T *rettv UNUSED)
static void
init_srand(UINT32_T *x)
{
-#ifndef MSWIN
- static int dev_urandom_state = NOTDONE; // FAIL or OK once tried
-#endif
+ struct {
+ union {
+ UINT32_T number;
+ char_u bytes[sizeof(UINT32_T)];
+ } contents;
+ } buf;
if (srand_seed_for_testing_is_used)
{
*x = srand_seed_for_testing;
return;
}
-#ifndef MSWIN
- if (dev_urandom_state != FAIL)
- {
- int fd = open("/dev/urandom", O_RDONLY);
- struct {
- union {
- UINT32_T number;
- char bytes[sizeof(UINT32_T)];
- } contents;
- } buf;
- // Attempt reading /dev/urandom.
- if (fd == -1)
- dev_urandom_state = FAIL;
- else
- {
- buf.contents.number = 0;
- if (read(fd, buf.contents.bytes, sizeof(UINT32_T))
- != sizeof(UINT32_T))
- dev_urandom_state = FAIL;
- else
- {
- dev_urandom_state = OK;
- *x = buf.contents.number;
- }
- close(fd);
- }
- }
- if (dev_urandom_state != OK)
-#endif
+ if (mch_get_random(buf.contents.bytes, sizeof(buf.contents.bytes)) == OK)
{
- // Reading /dev/urandom doesn't work, fall back to:
- // - randombytes_random()
- // - reltime() or time()
- // - XOR with process ID
+ *x = buf.contents.number;
+ return;
+ }
+
+ // The system's random number generator doesn't work, fall back to:
+ // - randombytes_random()
+ // - reltime() or time()
+ // - XOR with process ID
#if defined(FEAT_SODIUM)
- if (crypt_sodium_init() >= 0)
- *x = crypt_sodium_randombytes_random();
- else
+ if (crypt_sodium_init() >= 0)
+ *x = crypt_sodium_randombytes_random();
+ else
#endif
- {
+ {
#if defined(FEAT_RELTIME)
- proftime_T res;
- profile_start(&res);
+ proftime_T res;
+ profile_start(&res);
# if defined(MSWIN)
- *x = (UINT32_T)res.LowPart;
+ *x = (UINT32_T)res.LowPart;
# else
- *x = (UINT32_T)res.tv_fsec;
+ *x = (UINT32_T)res.tv_fsec;
# endif
#else
- *x = vim_time();
+ *x = vim_time();
#endif
- *x ^= mch_get_pid();
- }
+ *x ^= mch_get_pid();
}
}
diff --git a/src/evalvars.c b/src/evalvars.c
index 6facbeb..f18b516 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -4100,7 +4100,7 @@ set_var_const(
// Modifying a final variable with a List value using the "+="
// operator is allowed. For other types, it is not allowed.
- if (((flags & ASSIGN_FOR_LOOP) == 0
+ if ((((flags & ASSIGN_FOR_LOOP) == 0 || (flags & ASSIGN_DECL) == 0)
&& ((flags & ASSIGN_COMPOUND_OP) == 0
|| !type_inplace_modifiable))
? var_check_permission(di, name) == FAIL
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 8143c24..acddd9c 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -2838,9 +2838,9 @@ do_ecmd(
int did_decrement;
buf_T *was_curbuf = curbuf;
- // Set the w_closing flag to avoid that autocommands close the
+ // Set the w_locked flag to avoid that autocommands close the
// window. And set b_locked for the same reason.
- the_curwin->w_closing = TRUE;
+ the_curwin->w_locked = TRUE;
++buf->b_locked;
if (curbuf == old_curbuf.br_buf)
@@ -2854,7 +2854,7 @@ do_ecmd(
// Autocommands may have closed the window.
if (win_valid(the_curwin))
- the_curwin->w_closing = FALSE;
+ the_curwin->w_locked = FALSE;
--buf->b_locked;
#ifdef FEAT_EVAL
@@ -3360,11 +3360,17 @@ ex_append(exarg_T *eap)
indent = get_indent_lnum(lnum);
}
ex_keep_indent = FALSE;
- if (eap->ea_getline == NULL)
+ if (*eap->arg == '|')
+ {
+ // Get the text after the trailing bar.
+ theline = vim_strsave(eap->arg + 1);
+ *eap->arg = NUL;
+ }
+ else if (eap->ea_getline == NULL)
{
// No getline() function, use the lines that follow. This ends
// when there is no more.
- if (eap->nextcmd == NULL || *eap->nextcmd == NUL)
+ if (eap->nextcmd == NULL)
break;
p = vim_strchr(eap->nextcmd, NL);
if (p == NULL)
@@ -3372,6 +3378,8 @@ ex_append(exarg_T *eap)
theline = vim_strnsave(eap->nextcmd, p - eap->nextcmd);
if (*p != NUL)
++p;
+ else
+ p = NULL;
eap->nextcmd = p;
}
else
@@ -3769,6 +3777,7 @@ ex_substitute(exarg_T *eap)
int endcolumn = FALSE; // cursor in last column when done
pos_T old_cursor = curwin->w_cursor;
int start_nsubs;
+ int keeppatterns = cmdmod.cmod_flags & CMOD_KEEPPATTERNS;
#ifdef FEAT_EVAL
int save_ma = 0;
int save_sandbox = 0;
@@ -3832,11 +3841,11 @@ ex_substitute(exarg_T *eap)
which_pat = RE_LAST; // use last used regexp
delimiter = *cmd++; // remember delimiter character
pat = cmd; // remember start of search pat
- patlen = STRLEN(pat);
cmd = skip_regexp_ex(cmd, delimiter, magic_isset(),
&eap->arg, NULL, NULL);
if (cmd[0] == delimiter) // end delimiter found
*cmd++ = NUL; // replace it with a NUL
+ patlen = STRLEN(pat);
}
/*
@@ -3868,7 +3877,7 @@ ex_substitute(exarg_T *eap)
// out of memory
return;
}
- else
+ else if (!keeppatterns)
{
vim_free(old_sub);
old_sub = vim_strsave(sub);
@@ -3932,7 +3941,7 @@ ex_substitute(exarg_T *eap)
ex_may_print(eap);
}
- if ((cmdmod.cmod_flags & CMOD_KEEPPATTERNS) == 0)
+ if (!keeppatterns)
save_re_pat(RE_SUBST, pat, patlen, magic_isset());
// put pattern in history
add_to_history(HIST_SEARCH, pat, patlen, TRUE, NUL);
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index ce30b8d..0681153 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -197,7 +197,7 @@ dialog_changed(
// restore to empty when write failed
if (empty_bufname)
{
- VIM_CLEAR(buf->b_fname);
+ buf->b_fname = NULL;
VIM_CLEAR(buf->b_ffname);
VIM_CLEAR(buf->b_sfname);
unchanged(buf, TRUE, FALSE);
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 71bfa93..2a59301 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -19,10 +19,6 @@ static int ex_pressedreturn = FALSE;
# define ex_hardcopy ex_ni
#endif
-#if defined(FEAT_EVAL) || defined(PROTO)
-static int cmp_cmdmod_info(const void *a, const void *b);
-#endif
-
#ifdef FEAT_EVAL
static char_u *do_one_cmd(char_u **, int, cstack_T *, char_u *(*fgetline)(int, void *, int, getline_opt_T), void *cookie);
#else
@@ -1460,8 +1456,13 @@ handle_did_throw(void)
current_exception->throw_name = NULL;
discard_current_exception(); // uses IObuff if 'verbose'
- suppress_errthrow = TRUE;
- force_abort = TRUE;
+
+ // If "silent!" is active the uncaught exception is not fatal.
+ if (emsg_silent == 0)
+ {
+ suppress_errthrow = TRUE;
+ force_abort = TRUE;
+ }
if (messages != NULL)
{
@@ -2336,12 +2337,7 @@ do_one_cmd(
{
for (p = ea.arg; *p; ++p)
{
- // Remove one backslash before a newline, so that it's possible to
- // pass a newline to the shell and also a newline that is preceded
- // with a backslash. This makes it impossible to end a shell
- // command in a backslash, but that doesn't appear useful.
- // Halving the number of backslashes is incompatible with previous
- // versions.
+ // Remove one backslash before a newline
if (*p == '\\' && p[1] == '\n')
STRMOVE(p, p + 1);
else if (*p == '\n' && !(ea.argt & EX_EXPR_ARG))
@@ -2722,6 +2718,12 @@ ex_errmsg(char *msg, char_u *arg)
}
/*
+ * The "+" string used in place of an empty command in Ex mode.
+ * This string is used in pointer comparison.
+ */
+static char exmode_plus[] = "+";
+
+/*
* Handle a range without a command.
* Returns an error message on failure.
*/
@@ -2730,7 +2732,8 @@ ex_range_without_command(exarg_T *eap)
{
char *errormsg = NULL;
- if ((*eap->cmd == '|' || (exmode_active && eap->line1 != eap->line2))
+ if ((*eap->cmd == '|' ||
+ (exmode_active && eap->cmd != (char_u *)exmode_plus + 1))
#ifdef FEAT_EVAL
&& !in_vim9script()
#endif
@@ -2860,9 +2863,8 @@ parse_command_modifiers(
{
// The automatically inserted Visual area range is skipped, so that
// typing ":cmdmod cmd" in Visual mode works without having to move the
- // range to after the modififiers. The command will be
- // "'<,'>cmdmod cmd", parse "cmdmod cmd" and then put back "'<,'>"
- // before "cmd" below.
+ // range to after the modifiers. The command will be "'<,'>cmdmod cmd",
+ // parse "cmdmod cmd" and then put back "'<,'>" before "cmd" below.
eap->cmd += 5;
cmd_start = eap->cmd;
has_visual_range = TRUE;
@@ -3213,7 +3215,7 @@ parse_command_modifiers(
eap->cmd = orig_cmd;
}
else if (use_plus_cmd)
- eap->cmd = (char_u *)"+";
+ eap->cmd = (char_u *)exmode_plus;
return OK;
}
@@ -4044,16 +4046,6 @@ static cmdmod_info_T cmdmod_info_tab[] = {
{"vim9cmd", 4, FALSE}
}; // cmdmod_info_tab
-// compare two cmdmod_info_T structs by case sensitive name with length
- static int
-cmp_cmdmod_info(const void *a, const void *b)
-{
- cmdmod_info_T *cm1 = (cmdmod_info_T *)a;
- cmdmod_info_T *cm2 = (cmdmod_info_T *)b;
-
- return STRNCMP(cm1->name, cm2->name, cm2->minlen);
-}
-
/*
* Return length of a command modifier (including optional count).
* Return zero when it's not a modifier.
@@ -4061,36 +4053,20 @@ cmp_cmdmod_info(const void *a, const void *b)
int
modifier_len(char_u *cmd)
{
+ int i, j;
char_u *p = cmd;
- cmdmod_info_T target;
- cmdmod_info_T *entry;
if (VIM_ISDIGIT(*cmd))
p = skipwhite(skipdigits(cmd + 1));
-
- // only lowercase characters can match
- if (!ASCII_ISLOWER(*p))
- return 0;
-
- target.name = (char *)p;
- target.minlen = 0; // not used, see cmp_cmdmod_info()
- target.has_count = FALSE;
-
- entry = (cmdmod_info_T *)bsearch(&target, &cmdmod_info_tab, ARRAY_LENGTH(cmdmod_info_tab), sizeof(cmdmod_info_tab[0]), cmp_cmdmod_info);
- if (entry != NULL)
+ for (i = 0; i < (int)ARRAY_LENGTH(cmdmod_info_tab); ++i)
{
- int i;
-
- for (i = entry->minlen; p[i] != NUL; ++i)
- {
- if (p[i] != entry->name[i])
+ for (j = 0; p[j] != NUL; ++j)
+ if (p[j] != cmdmod_info_tab[i].name[j])
break;
- }
-
- if (!ASCII_ISALPHA(p[i]) && i >= entry->minlen && (p == cmd || entry->has_count))
- return i + (int)(p - cmd);
+ if (!ASCII_ISALPHA(p[j]) && j >= cmdmod_info_tab[i].minlen
+ && (p == cmd || cmdmod_info_tab[i].has_count))
+ return j + (int)(p - cmd);
}
-
return 0;
}
@@ -4104,33 +4080,18 @@ cmd_exists(char_u *name)
{
exarg_T ea;
int full = FALSE;
+ int i;
+ int j;
char_u *p;
- // only lowercase characters can match
- if (ASCII_ISLOWER(*name))
+ // Check command modifiers.
+ for (i = 0; i < (int)ARRAY_LENGTH(cmdmod_info_tab); ++i)
{
- cmdmod_info_T target;
- cmdmod_info_T *entry;
-
- target.name = (char *)name;
- target.minlen = 0; // not used, see cmp_cmdmod_info()
- target.has_count = FALSE;
-
- // Check command modifiers.
- entry = (cmdmod_info_T *)bsearch(&target, &cmdmod_info_tab, ARRAY_LENGTH(cmdmod_info_tab), sizeof(cmdmod_info_tab[0]), cmp_cmdmod_info);
- if (entry != NULL)
- {
- int i;
-
- for (i = entry->minlen; name[i] != NUL; ++i)
- {
- if (name[i] != entry->name[i])
- break;
- }
-
- if (name[i] == NUL && i >= entry->minlen)
- return (entry->name[i] == NUL ? 2 : 1);
- }
+ for (j = 0; name[j] != NUL; ++j)
+ if (name[j] != cmdmod_info_tab[i].name[j])
+ break;
+ if (name[j] == NUL && j >= cmdmod_info_tab[i].minlen)
+ return (cmdmod_info_tab[i].name[j] == NUL ? 2 : 1);
}
// Check built-in commands and user defined commands.
@@ -4698,6 +4659,7 @@ get_address(
if (n == MAXLNUM)
{
emsg(_(e_line_number_out_of_range));
+ cmd = NULL;
goto error;
}
}
@@ -4728,6 +4690,7 @@ get_address(
if (lnum >= 0 && n >= LONG_MAX - lnum)
{
emsg(_(e_line_number_out_of_range));
+ cmd = NULL;
goto error;
}
lnum += n;
@@ -5401,7 +5364,11 @@ separate_nextcmd(exarg_T *eap, int keep_backslash)
&& in_vim9script()
&& !(eap->argt & EX_NOTRLCOM)
&& p > eap->cmd && VIM_ISWHITE(p[-1]))
- || *p == '|' || *p == '\n')
+ || (*p == '|'
+ && eap->cmdidx != CMD_append
+ && eap->cmdidx != CMD_change
+ && eap->cmdidx != CMD_insert)
+ || *p == '\n')
{
/*
* We remove the '\' before the '|', unless EX_CTRLV is used
@@ -5981,6 +5948,10 @@ get_command_name(expand_T *xp UNUSED, int idx)
{
if (idx >= (int)CMD_SIZE)
return expand_user_command_name(idx);
+ // the following are no real commands
+ if (STRNCMP(cmdnames[idx].cmd_name, "{", 1) == 0 ||
+ STRNCMP(cmdnames[idx].cmd_name, "}", 1) == 0)
+ return (char_u *)"";
return cmdnames[idx].cmd_name;
}
@@ -7261,7 +7232,7 @@ ex_resize(exarg_T *eap)
ex_find(exarg_T *eap)
{
if (!check_can_set_curbuf_forceit(eap->forceit))
- return;
+ return;
char_u *fname;
int count;
@@ -7353,7 +7324,7 @@ ex_edit(exarg_T *eap)
// All other commands must obey 'winfixbuf' / ! rules
&& (is_other_file(0, ffname) && !check_can_set_curbuf_forceit(eap->forceit))
)
- return;
+ return;
do_exedit(eap, NULL);
}
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 3ae4958..1b3a699 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1586,6 +1586,7 @@ getcmdline_int(
int res;
int save_msg_scroll = msg_scroll;
int save_State = State; // remember State when called
+ int prev_cmdpos = -1;
int some_key_typed = FALSE; // one of the keys was typed
// mouse drag and release events are ignored, unless they are
// preceded with a mouse down event
@@ -2473,6 +2474,13 @@ getcmdline_int(
* (Sorry for the goto's, I know it is ugly).
*/
cmdline_not_changed:
+ // Trigger CursorMovedC autocommands.
+ if (ccline.cmdpos != prev_cmdpos)
+ {
+ trigger_cmd_autocmd(cmdline_type, EVENT_CURSORMOVEDC);
+ prev_cmdpos = ccline.cmdpos;
+ }
+
#ifdef FEAT_SEARCH_EXTRA
if (!is_state.incsearch_postponed)
continue;
@@ -2484,10 +2492,17 @@ cmdline_changed:
if (is_state.winid != curwin->w_id)
init_incsearch_state(&is_state);
#endif
+ // Trigger CmdlineChanged autocommands.
if (trigger_cmdlinechanged)
- // Trigger CmdlineChanged autocommands.
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
+ // Trigger CursorMovedC autocommands.
+ if (ccline.cmdpos != prev_cmdpos)
+ {
+ trigger_cmd_autocmd(cmdline_type, EVENT_CURSORMOVEDC);
+ prev_cmdpos = ccline.cmdpos;
+ }
+
#ifdef FEAT_SEARCH_EXTRA
if (xpc.xp_context == EXPAND_NOTHING && (KeyTyped || vpeekc() == NUL))
may_do_incsearch_highlighting(firstc, count, &is_state);
@@ -3130,31 +3145,15 @@ redraw:
windgoto(msg_row, msg_col);
pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
- // We are done when a NL is entered, but not when it comes after an
- // odd number of backslashes, that results in a NUL.
- if (line_ga.ga_len > 0 && pend[-1] == '\n')
+ // We are done when a NL is entered, but not when it comes after a
+ // backslash in prompt mode.
+ if (line_ga.ga_len > 0 && pend[-1] == '\n'
+ && (line_ga.ga_len <= 1 || pend[-2] != '\\' || !promptc))
{
- int bcount = 0;
-
- while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\')
- ++bcount;
-
- if (bcount > 0)
- {
- // Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
- // "\NL", etc.
- line_ga.ga_len -= (bcount + 1) / 2;
- pend -= (bcount + 1) / 2;
- pend[-1] = '\n';
- }
-
- if ((bcount & 1) == 0)
- {
- --line_ga.ga_len;
- --pend;
- *pend = NUL;
- break;
- }
+ --line_ga.ga_len;
+ --pend;
+ *pend = NUL;
+ break;
}
}
@@ -4176,6 +4175,7 @@ get_cmdline_completion(void)
{
cmdline_info_T *p;
char_u *buffer;
+ int xp_context;
if (cmdline_star > 0)
return NULL;
@@ -4184,15 +4184,21 @@ get_cmdline_completion(void)
if (p == NULL || p->xpc == NULL)
return NULL;
- set_expand_context(p->xpc);
- if (p->xpc->xp_context == EXPAND_UNSUCCESSFUL)
+ xp_context = p->xpc->xp_context;
+ if (xp_context == EXPAND_NOTHING)
+ {
+ set_expand_context(p->xpc);
+ xp_context = p->xpc->xp_context;
+ p->xpc->xp_context = EXPAND_NOTHING;
+ }
+ if (xp_context == EXPAND_UNSUCCESSFUL)
return NULL;
- char_u *cmd_compl = cmdcomplete_type_to_str(p->xpc->xp_context);
+ char_u *cmd_compl = cmdcomplete_type_to_str(xp_context);
if (cmd_compl == NULL)
return NULL;
- if (p->xpc->xp_context == EXPAND_USER_LIST || p->xpc->xp_context == EXPAND_USER_DEFINED)
+ if (xp_context == EXPAND_USER_LIST || xp_context == EXPAND_USER_DEFINED)
{
buffer = alloc(STRLEN(cmd_compl) + STRLEN(p->xpc->xp_arg) + 2);
if (buffer == NULL)
@@ -4308,6 +4314,7 @@ set_cmdline_pos(
new_cmdpos = 0;
else
new_cmdpos = pos;
+
return 0;
}
diff --git a/src/fileio.c b/src/fileio.c
index e7f3332..d27a172 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3912,7 +3912,7 @@ vim_rename(char_u *from, char_u *to)
/*
* Create the new file with same permissions as the original.
- * Return -1 for failure, 0 for success.
+ * Return FAIL for failure, OK for success.
*/
int
vim_copyfile(char_u *from, char_u *to)
@@ -3936,7 +3936,7 @@ vim_copyfile(char_u *from, char_u *to)
ret = mch_lstat((char *)from, &st);
if (ret >= 0 && S_ISLNK(st.st_mode))
{
- ret = FAIL;
+ ret = -1;
len = readlink((char *)from, linkbuf, MAXPATHL);
if (len > 0)
diff --git a/src/filepath.c b/src/filepath.c
index 9f68d7c..d514aaf 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -3645,11 +3645,15 @@ dos_expandpath(
}
else
{
+ stat_T sb;
+
// no more wildcards, check if there is a match
// remove backslashes for the remaining components only
if (*path_end != 0)
backslash_halve(buf + len + 1);
- if (mch_getperm(buf) >= 0) // add existing file
+ // add existing file
+ if ((flags & EW_ALLLINKS) ? mch_lstat((char *)buf, &sb) >= 0
+ : mch_getperm(buf) >= 0)
addfile(gap, buf, flags);
}
}
@@ -3999,6 +4003,8 @@ gen_expand_wildcards(
int add_pat;
int retval = OK;
int did_expand_in_path = FALSE;
+ char_u *path_option = *curbuf->b_p_path == NUL ?
+ p_path : curbuf->b_p_path;
/*
* expand_env() is called to expand things like "~user". If this fails,
@@ -4088,7 +4094,7 @@ gen_expand_wildcards(
*/
if (mch_has_exp_wildcard(p) || (flags & EW_ICASE))
{
- if ((flags & EW_PATH)
+ if ((flags & (EW_PATH | EW_CDPATH))
&& !mch_isFullName(p)
&& !(p[0] == '.'
&& (vim_ispathsep(p[1])
@@ -4122,8 +4128,8 @@ gen_expand_wildcards(
vim_free(t);
}
- if (did_expand_in_path && ga.ga_len > 0 && (flags & EW_PATH))
- uniquefy_paths(&ga, p);
+ if (did_expand_in_path && ga.ga_len > 0 && (flags & (EW_PATH | EW_CDPATH)))
+ uniquefy_paths(&ga, p, path_option);
if (p != pat[i])
vim_free(p);
}
diff --git a/src/findfile.c b/src/findfile.c
index 2636609..4310a50 100644
--- a/src/findfile.c
+++ b/src/findfile.c
@@ -418,6 +418,7 @@ vim_findfile_init(
{
char_u *helper;
void *ptr;
+ size_t len;
helper = walker;
ptr = vim_realloc(search_ctx->ffsc_stopdirs_v,
@@ -428,18 +429,21 @@ vim_findfile_init(
// ignore, keep what we have and continue
break;
walker = vim_strchr(walker, ';');
- if (walker)
+ len = walker ? (size_t)(walker - helper) : STRLEN(helper);
+ // "" means ascent till top of directory tree.
+ if (*helper != NUL && !vim_isAbsName(helper)
+ && len + 1 < MAXPATHL)
{
+ // Make the stop dir an absolute path name.
+ vim_strncpy(ff_expand_buffer, helper, len);
search_ctx->ffsc_stopdirs_v[dircount-1] =
- vim_strnsave(helper, walker - helper);
- walker++;
+ FullName_save(ff_expand_buffer, FALSE);
}
else
- // this might be "", which means ascent till top
- // of directory tree.
search_ctx->ffsc_stopdirs_v[dircount-1] =
- vim_strsave(helper);
-
+ vim_strnsave(helper, len);
+ if (walker)
+ walker++;
dircount++;
} while (walker != NULL);
@@ -1078,11 +1082,13 @@ vim_findfile(void *search_ctx_arg)
&& search_ctx->ffsc_stopdirs_v != NULL && !got_int)
{
ff_stack_T *sptr;
+ // path_end may point to the NUL or the previous path separator
+ int plen = (path_end - search_ctx->ffsc_start_dir)
+ + (*path_end != NUL);
// is the last starting directory in the stop list?
if (ff_path_in_stoplist(search_ctx->ffsc_start_dir,
- (int)(path_end - search_ctx->ffsc_start_dir),
- search_ctx->ffsc_stopdirs_v) == TRUE)
+ plen, search_ctx->ffsc_stopdirs_v) == TRUE)
break;
// cut of last dir
@@ -1521,22 +1527,14 @@ ff_path_in_stoplist(char_u *path, int path_len, char_u **stopdirs_v)
return TRUE;
for (i = 0; stopdirs_v[i] != NULL; i++)
- {
- if ((int)STRLEN(stopdirs_v[i]) > path_len)
- {
- // match for parent directory. So '/home' also matches
- // '/home/rks'. Check for PATHSEP in stopdirs_v[i], else
- // '/home/r' would also match '/home/rks'
- if (fnamencmp(stopdirs_v[i], path, path_len) == 0
- && vim_ispathsep(stopdirs_v[i][path_len]))
- return TRUE;
- }
- else
- {
- if (fnamecmp(stopdirs_v[i], path) == 0)
- return TRUE;
- }
- }
+ // match for parent directory. So '/home' also matches
+ // '/home/rks'. Check for PATHSEP in stopdirs_v[i], else
+ // '/home/r' would also match '/home/rks'
+ if (fnamencmp(stopdirs_v[i], path, path_len) == 0
+ && ((int)STRLEN(stopdirs_v[i]) <= path_len
+ || vim_ispathsep(stopdirs_v[i][path_len])))
+ return TRUE;
+
return FALSE;
}
@@ -2213,10 +2211,11 @@ is_unique(char_u *maybe_unique, garray_T *gap, int i)
* expanding each into their equivalent path(s).
*/
static void
-expand_path_option(char_u *curdir, garray_T *gap)
+expand_path_option(
+ char_u *curdir,
+ char_u *path_option, // p_path or p_cdpath
+ garray_T *gap)
{
- char_u *path_option = *curbuf->b_p_path == NUL
- ? p_path : curbuf->b_p_path;
char_u *buf;
char_u *p;
int len;
@@ -2331,7 +2330,10 @@ get_path_cutoff(char_u *fname, garray_T *gap)
* that matches the pattern. Beware, this is at least O(n^2) wrt "gap->ga_len".
*/
void
-uniquefy_paths(garray_T *gap, char_u *pattern)
+uniquefy_paths(
+ garray_T *gap,
+ char_u *pattern,
+ char_u *path_option) // p_path or p_cdpath
{
int i;
int len;
@@ -2374,7 +2376,7 @@ uniquefy_paths(garray_T *gap, char_u *pattern)
if ((curdir = alloc(MAXPATHL)) == NULL)
goto theend;
mch_dirname(curdir, MAXPATHL);
- expand_path_option(curdir, &path_ga);
+ expand_path_option(curdir, path_option, &path_ga);
in_curdir = ALLOC_CLEAR_MULT(char_u *, gap->ga_len);
if (in_curdir == NULL)
@@ -2522,13 +2524,17 @@ expand_in_path(
garray_T path_ga;
char_u *paths = NULL;
int glob_flags = 0;
+ char_u *path_option = *curbuf->b_p_path == NUL ? p_path : curbuf->b_p_path;
if ((curdir = alloc(MAXPATHL)) == NULL)
return 0;
mch_dirname(curdir, MAXPATHL);
ga_init2(&path_ga, sizeof(char_u *), 1);
- expand_path_option(curdir, &path_ga);
+ if (flags & EW_CDPATH)
+ expand_path_option(curdir, p_cdpath, &path_ga);
+ else
+ expand_path_option(curdir, path_option, &path_ga);
vim_free(curdir);
if (path_ga.ga_len == 0)
return 0;
@@ -2542,7 +2548,7 @@ expand_in_path(
glob_flags |= WILD_ICASE;
if (flags & EW_ADDSLASH)
glob_flags |= WILD_ADD_SLASH;
- globpath(paths, pattern, gap, glob_flags, FALSE);
+ globpath(paths, pattern, gap, glob_flags, !!(flags & EW_CDPATH));
vim_free(paths);
return gap->ga_len;
diff --git a/src/fold.c b/src/fold.c
index 2cd4dcd..3353cc5 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -1492,6 +1492,9 @@ deleteFoldRecurse(garray_T *gap)
// foldMarkAdjust() {{{2
/*
* Update line numbers of folds for inserted/deleted lines.
+ *
+ * We are adjusting the folds in the range from line1 til line2,
+ * make sure that line2 does not get smaller than line1
*/
void
foldMarkAdjust(
@@ -1505,6 +1508,8 @@ foldMarkAdjust(
// lines, set line2 so that only deleted lines have their folds removed.
if (amount == MAXLNUM && line2 >= line1 && line2 - line1 >= -amount_after)
line2 = line1 - amount_after - 1;
+ if (line2 < line1)
+ line2 = line1;
// If appending a line in Insert mode, it should be included in the fold
// just above the line.
if ((State & MODE_INSERT) && amount == (linenr_T)1 && line2 == MAXLNUM)
diff --git a/src/getchar.c b/src/getchar.c
index 1c544da..96e180f 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -42,6 +42,11 @@ static buffheader_T recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
static int typeahead_char = 0; // typeahead char that's not flushed
+#ifdef FEAT_EVAL
+static char_u typedchars[MAXMAPLEN + 1] = { NUL }; // typed chars before map
+static int typedchars_pos = 0;
+#endif
+
/*
* When block_redo is TRUE the redo buffer will not be changed.
* Used by edit() to repeat insertions.
@@ -96,6 +101,9 @@ static void closescript(void);
static void updatescript(int c);
static int vgetorpeek(int);
static int inchar(char_u *buf, int maxlen, long wait_time);
+#ifdef FEAT_EVAL
+static int do_key_input_pre(int c);
+#endif
/*
* Free and clear a buffer.
@@ -438,9 +446,18 @@ flush_buffers(flush_buffers_T flush_typeahead)
if (flush_typeahead == FLUSH_MINIMAL)
{
- // remove mapped characters at the start only
- typebuf.tb_off += typebuf.tb_maplen;
- typebuf.tb_len -= typebuf.tb_maplen;
+ // remove mapped characters at the start only,
+ // but only when enough space left in typebuf
+ if (typebuf.tb_off + typebuf.tb_maplen >= typebuf.tb_buflen)
+ {
+ typebuf.tb_off = MAXMAPLEN;
+ typebuf.tb_len = 0;
+ }
+ else
+ {
+ typebuf.tb_off += typebuf.tb_maplen;
+ typebuf.tb_len -= typebuf.tb_maplen;
+ }
#if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
if (typebuf.tb_len == 0)
typebuf_was_filled = FALSE;
@@ -1706,6 +1723,13 @@ updatescript(int c)
ml_sync_all(c == 0, TRUE);
count = 0;
}
+#ifdef FEAT_EVAL
+ if (typedchars_pos < MAXMAPLEN)
+ {
+ typedchars[typedchars_pos] = c;
+ typedchars_pos++;
+ }
+#endif
}
/*
@@ -1996,8 +2020,45 @@ vgetc(void)
#endif
}
- // a keypad or special function key was not mapped, use it like
- // its ASCII equivalent
+ // For a multi-byte character get all the bytes and return the
+ // converted character.
+ // Note: This will loop until enough bytes are received!
+ if (has_mbyte && (n = MB_BYTE2LEN_CHECK(c)) > 1)
+ {
+ ++no_mapping;
+ buf[0] = c;
+ for (i = 1; i < n; ++i)
+ {
+ buf[i] = vgetorpeek(TRUE);
+ if (buf[i] == K_SPECIAL
+#ifdef FEAT_GUI
+ || (buf[i] == CSI)
+#endif
+ )
+ {
+ // Must be a K_SPECIAL - KS_SPECIAL - KE_FILLER
+ // sequence, which represents a K_SPECIAL (0x80),
+ // or a CSI - KS_EXTRA - KE_CSI sequence, which
+ // represents a CSI (0x9B),
+ // or a K_SPECIAL - KS_EXTRA - KE_CSI, which is CSI
+ // too.
+ c = vgetorpeek(TRUE);
+ if (vgetorpeek(TRUE) == KE_CSI && c == KS_EXTRA)
+ buf[i] = CSI;
+ }
+ }
+ --no_mapping;
+ c = (*mb_ptr2char)(buf);
+ }
+
+ if (vgetc_char == 0)
+ {
+ vgetc_mod_mask = mod_mask;
+ vgetc_char = c;
+ }
+
+ // A keypad or special function key was not mapped, use it like
+ // its ASCII equivalent.
switch (c)
{
case K_KPLUS: c = '+'; break;
@@ -2059,43 +2120,6 @@ vgetc(void)
case K_XRIGHT: c = K_RIGHT; break;
}
- // For a multi-byte character get all the bytes and return the
- // converted character.
- // Note: This will loop until enough bytes are received!
- if (has_mbyte && (n = MB_BYTE2LEN_CHECK(c)) > 1)
- {
- ++no_mapping;
- buf[0] = c;
- for (i = 1; i < n; ++i)
- {
- buf[i] = vgetorpeek(TRUE);
- if (buf[i] == K_SPECIAL
-#ifdef FEAT_GUI
- || (buf[i] == CSI)
-#endif
- )
- {
- // Must be a K_SPECIAL - KS_SPECIAL - KE_FILLER
- // sequence, which represents a K_SPECIAL (0x80),
- // or a CSI - KS_EXTRA - KE_CSI sequence, which
- // represents a CSI (0x9B),
- // or a K_SPECIAL - KS_EXTRA - KE_CSI, which is CSI
- // too.
- c = vgetorpeek(TRUE);
- if (vgetorpeek(TRUE) == KE_CSI && c == KS_EXTRA)
- buf[i] = CSI;
- }
- }
- --no_mapping;
- c = (*mb_ptr2char)(buf);
- }
-
- if (vgetc_char == 0)
- {
- vgetc_mod_mask = mod_mask;
- vgetc_char = c;
- }
-
break;
}
@@ -2130,6 +2154,13 @@ vgetc(void)
}
#endif
+#ifdef FEAT_EVAL
+ c = do_key_input_pre(c);
+
+ // Clear the next typedchars_pos
+ typedchars_pos = 0;
+#endif
+
// Need to process the character before we know it's safe to do something
// else.
if (c != K_IGNORE)
@@ -2138,6 +2169,78 @@ vgetc(void)
return c;
}
+#ifdef FEAT_EVAL
+/*
+ * Handle the InsertCharPre autocommand.
+ * "c" is the character that was typed.
+ * Return new input character.
+ */
+ static int
+do_key_input_pre(int c)
+{
+ int res = c;
+ char_u buf[MB_MAXBYTES + 1];
+ char_u curr_mode[MODE_MAX_LENGTH];
+ int save_State = State;
+ save_v_event_T save_v_event;
+ dict_T *v_event;
+
+ // Return quickly when there is nothing to do.
+ if (!has_keyinputpre())
+ return res;
+
+ if (IS_SPECIAL(c))
+ {
+ buf[0] = K_SPECIAL;
+ buf[1] = KEY2TERMCAP0(c);
+ buf[2] = KEY2TERMCAP1(c);
+ buf[3] = NUL;
+ }
+ else
+ buf[(*mb_char2bytes)(c, buf)] = NUL;
+
+ typedchars[typedchars_pos] = NUL;
+ vim_unescape_csi(typedchars);
+
+ get_mode(curr_mode);
+
+ // Lock the text to avoid weird things from happening.
+ ++textlock;
+ set_vim_var_string(VV_CHAR, buf, -1); // set v:char
+
+ v_event = get_v_event(&save_v_event);
+ (void)dict_add_bool(v_event, "typed", KeyTyped);
+ (void)dict_add_string(v_event, "typedchar", typedchars);
+
+ if (apply_autocmds(EVENT_KEYINPUTPRE, curr_mode, curr_mode, FALSE, curbuf)
+ && STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
+ {
+ // Get the value of v:char. It may be empty or more than one
+ // character. Only use it when changed, otherwise continue with the
+ // original character.
+ char_u *v_char;
+
+ v_char = get_vim_var_str(VV_CHAR);
+
+ // Convert special bytes when it is special string.
+ if (STRLEN(v_char) >= 3 && v_char[0] == K_SPECIAL)
+ res = TERMCAP2KEY(v_char[1], v_char[2]);
+ else if (STRLEN(v_char) > 0)
+ res = PTR2CHAR(v_char);
+ }
+
+ restore_v_event(v_event, &save_v_event);
+
+ set_vim_var_string(VV_CHAR, NULL, -1); // clear v:char
+ --textlock;
+
+ // Restore the State, it may have been changed.
+ State = save_State;
+
+ return res;
+}
+#endif
+
/*
* Like vgetc(), but never return a NUL when called recursively, get a key
* directly from the user (ignoring typeahead).
@@ -2841,8 +2944,11 @@ handle_mapping(
}
}
else
+ {
// No match; may have to check for termcode at next
- // character. If the first character that didn't match is
+ // character.
+
+ // If the first character that didn't match is
// K_SPECIAL then check for a termcode. This isn't perfect
// but should work in most cases.
if (max_mlen < mlen)
@@ -2852,6 +2958,12 @@ handle_mapping(
}
else if (max_mlen == mlen && mp->m_keys[mlen] == K_SPECIAL)
want_termcode = 1;
+
+ // Check termcode for uppercase character to properly
+ // process "ESC[27;2;<ascii code>~" control sequences.
+ if (ASCII_ISUPPER(mp->m_keys[mlen]))
+ want_termcode = 1;
+ }
}
}
@@ -3053,6 +3165,8 @@ handle_mapping(
int save_m_noremap;
int save_m_silent;
char_u *save_m_keys;
+ char_u *save_alt_m_keys;
+ int save_alt_m_keylen;
#else
# define save_m_noremap mp->m_noremap
# define save_m_silent mp->m_silent
@@ -3101,6 +3215,8 @@ handle_mapping(
save_m_noremap = mp->m_noremap;
save_m_silent = mp->m_silent;
save_m_keys = NULL; // only saved when needed
+ save_alt_m_keys = NULL; // only saved when needed
+ save_alt_m_keylen = mp->m_alt != NULL ? mp->m_alt->m_keylen : 0;
/*
* Handle ":map <expr>": evaluate the {rhs} as an expression. Also
@@ -3117,7 +3233,10 @@ handle_mapping(
vgetc_busy = 0;
may_garbage_collect = FALSE;
- save_m_keys = vim_strsave(mp->m_keys);
+ save_m_keys = vim_strnsave(mp->m_keys, (size_t)mp->m_keylen);
+ save_alt_m_keys = mp->m_alt != NULL
+ ? vim_strnsave(mp->m_alt->m_keys,
+ (size_t)save_alt_m_keylen) : NULL;
map_str = eval_map_expr(mp, NUL);
// The mapping may do anything, but we expect it to take care of
@@ -3175,15 +3294,20 @@ handle_mapping(
noremap = save_m_noremap;
else if (
#ifdef FEAT_EVAL
- STRNCMP(map_str, save_m_keys != NULL ? save_m_keys : mp->m_keys,
- (size_t)keylen)
-#else
- STRNCMP(map_str, mp->m_keys, (size_t)keylen)
+ save_m_expr ?
+ (save_m_keys != NULL
+ && STRNCMP(map_str, save_m_keys, (size_t)keylen) == 0)
+ || (save_alt_m_keys != NULL
+ && STRNCMP(map_str, save_alt_m_keys,
+ (size_t)save_alt_m_keylen) == 0) :
#endif
- != 0)
- noremap = REMAP_YES;
- else
+ STRNCMP(map_str, mp->m_keys, (size_t)keylen) == 0
+ || (mp->m_alt != NULL
+ && STRNCMP(map_str, mp->m_alt->m_keys,
+ (size_t)mp->m_alt->m_keylen) == 0))
noremap = REMAP_SKIP;
+ else
+ noremap = REMAP_YES;
i = ins_typebuf(map_str, noremap,
0, TRUE, cmd_silent || save_m_silent);
#ifdef FEAT_EVAL
@@ -3193,6 +3317,7 @@ handle_mapping(
}
#ifdef FEAT_EVAL
vim_free(save_m_keys);
+ vim_free(save_alt_m_keys);
#endif
*keylenp = keylen;
if (i == FAIL)
diff --git a/src/globals.h b/src/globals.h
index fb5c7b3..77ddea8 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -131,8 +131,8 @@ EXTERN int screen_Columns INIT(= 0); // actual size of ScreenLines[]
*/
EXTERN int mod_mask INIT(= 0); // current key modifiers
-// The value of "mod_mask" and the unomdified character before calling
-// merge_modifyOtherKeys().
+// The value of "mod_mask" and the unmodified character in vgetc() after it has
+// called vgetorpeek() enough times.
EXTERN int vgetc_mod_mask INIT(= 0);
EXTERN int vgetc_char INIT(= 0);
@@ -519,31 +519,37 @@ EXTERN int garbage_collect_at_exit INIT(= FALSE);
#define t_list_list_any (static_types[70])
#define t_const_list_list_any (static_types[71])
-#define t_list_list_string (static_types[72])
-#define t_const_list_list_string (static_types[73])
+#define t_list_list_number (static_types[72])
+#define t_const_list_list_number (static_types[73])
-#define t_dict_bool (static_types[74])
-#define t_const_dict_bool (static_types[75])
+#define t_list_list_string (static_types[74])
+#define t_const_list_list_string (static_types[75])
-#define t_dict_number (static_types[76])
-#define t_const_dict_number (static_types[77])
+#define t_list_list_list_number (static_types[76])
+#define t_const_list_list_list_number (static_types[77])
-#define t_dict_string (static_types[78])
-#define t_const_dict_string (static_types[79])
+#define t_dict_bool (static_types[78])
+#define t_const_dict_bool (static_types[79])
-#define t_super (static_types[80])
-#define t_const_super (static_types[81])
+#define t_dict_number (static_types[80])
+#define t_const_dict_number (static_types[81])
-#define t_object (static_types[82])
-#define t_const_object (static_types[83])
+#define t_dict_string (static_types[82])
+#define t_const_dict_string (static_types[83])
-#define t_class (static_types[84])
-#define t_const_class (static_types[85])
+#define t_super (static_types[84])
+#define t_const_super (static_types[85])
-#define t_typealias (static_types[86])
-#define t_const_typealias (static_types[87])
+#define t_object (static_types[86])
+#define t_const_object (static_types[87])
-EXTERN type_T static_types[88]
+#define t_class (static_types[88])
+#define t_const_class (static_types[89])
+
+#define t_typealias (static_types[90])
+#define t_const_typealias (static_types[91])
+
+EXTERN type_T static_types[92]
#ifdef DO_INIT
= {
// 0: t_unknown
@@ -690,35 +696,43 @@ EXTERN type_T static_types[88]
{VAR_LIST, 0, 0, TTFLAG_STATIC, &t_list_any, NULL, NULL},
{VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_list_any, NULL, NULL},
- // 72: t_list_list_string
+ // 74: t_list_list_number
+ {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_list_number, NULL, NULL},
+ {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_list_number, NULL, NULL},
+
+ // 74: t_list_list_string
{VAR_LIST, 0, 0, TTFLAG_STATIC, &t_list_string, NULL, NULL},
{VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_list_string, NULL, NULL},
- // 74: t_dict_bool
+ // 76: t_list_list_list_number
+ {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_list_list_number, NULL, NULL},
+ {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_list_list_number, NULL, NULL},
+
+ // 78: t_dict_bool
{VAR_DICT, 0, 0, TTFLAG_STATIC, &t_bool, NULL, NULL},
{VAR_DICT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_bool, NULL, NULL},
- // 76: t_dict_number
+ // 80: t_dict_number
{VAR_DICT, 0, 0, TTFLAG_STATIC, &t_number, NULL, NULL},
{VAR_DICT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_number, NULL, NULL},
- // 78: t_dict_string
+ // 82: t_dict_string
{VAR_DICT, 0, 0, TTFLAG_STATIC, &t_string, NULL, NULL},
{VAR_DICT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_string, NULL, NULL},
- // 80: t_super (VAR_CLASS with tt_member set to &t_bool
+ // 84: t_super (VAR_CLASS with tt_member set to &t_bool
{VAR_CLASS, 0, 0, TTFLAG_STATIC, &t_bool, NULL, NULL},
{VAR_CLASS, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_bool, NULL, NULL},
- // 82: t_object
+ // 86: t_object
{VAR_OBJECT, 0, 0, TTFLAG_STATIC, NULL, NULL, NULL},
{VAR_OBJECT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL, NULL},
- // 84: t_class
+ // 88: t_class
{VAR_CLASS, 0, 0, TTFLAG_STATIC, NULL, NULL, NULL},
{VAR_CLASS, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL, NULL},
- // 86: t_typealias
+ // 90: t_typealias
{VAR_TYPEALIAS, 0, 0, TTFLAG_STATIC, NULL, NULL, NULL},
{VAR_TYPEALIAS, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL, NULL},
}
diff --git a/src/gui.c b/src/gui.c
index 25662ef..8e7b079 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -460,7 +460,7 @@ gui_init_check(void)
// and in that case we don't want to overwrite ligatures map that has already
// been correctly populated (as that would lead to a cleared ligatures maps).
if (*p_guiligatures == NUL)
- CLEAR_FIELD(gui.ligatures_map);
+ CLEAR_FIELD(gui.ligatures_map);
#endif
#if defined(ALWAYS_USE_GUI) || defined(VIMDLL)
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 67ee531..6c97d1a 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -797,8 +797,8 @@ draw_event(GtkWidget *widget UNUSED,
# if GTK_CHECK_VERSION(3,10,0)
static gboolean
scale_factor_event(GtkWidget *widget,
- GParamSpec* pspec UNUSED,
- gpointer user_data UNUSED)
+ GParamSpec* pspec UNUSED,
+ gpointer user_data UNUSED)
{
if (gui.surface != NULL)
cairo_surface_destroy(gui.surface);
diff --git a/src/gui_w32.c b/src/gui_w32.c
index f628dd6..78f252a 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -274,13 +274,9 @@ gui_mch_set_rendering_options(char_u *s)
// cproto fails on missing include files
#ifndef PROTO
-
-# ifndef __MINGW32__
-# include <shellapi.h>
-# endif
+# include <shellapi.h>
# include <commctrl.h>
# include <windowsx.h>
-
#endif // PROTO
#ifdef FEAT_MENU
@@ -5526,6 +5522,9 @@ gui_mch_prepare(int *argc, char **argv)
}
#ifdef FEAT_OLE
+# ifdef VIMDLL
+ if (mch_is_gui_executable())
+# endif
{
int bDoRestart = FALSE;
diff --git a/src/help.c b/src/help.c
index a792bf3..1062362 100644
--- a/src/help.c
+++ b/src/help.c
@@ -813,6 +813,8 @@ fix_help_buffer(void)
f1 = fnames[i1];
t1 = gettail(f1);
e1 = vim_strrchr(t1, '.');
+ if (e1 == NULL)
+ continue;
if (fnamecmp(e1, ".txt") != 0
&& fnamecmp(e1, fname + 4) != 0)
{
@@ -828,6 +830,8 @@ fix_help_buffer(void)
continue;
t2 = gettail(f2);
e2 = vim_strrchr(t2, '.');
+ if (e2 == NULL)
+ continue;
if (e1 - f1 != e2 - f2
|| fnamencmp(f1, f2, e1 - f1) != 0)
continue;
diff --git a/src/highlight.c b/src/highlight.c
index a71a100..d3ea2d2 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -3351,8 +3351,8 @@ syn_list_header(
if (msg_col >= endcol) // output at least one space
endcol = msg_col + 1;
- if (Columns <= endcol) // avoid hang for tiny window
- endcol = Columns - 1;
+ if (Columns <= (long)endcol) // avoid hang for tiny window
+ endcol = (int)(Columns - 1);
msg_advance(endcol);
diff --git a/src/if_mzsch.c b/src/if_mzsch.c
index 9a9c487..4a8644c 100644
--- a/src/if_mzsch.c
+++ b/src/if_mzsch.c
@@ -383,7 +383,7 @@ static void (*dll_scheme_set_config_path)(Scheme_Object *p);
# define scheme_null dll_scheme_null
# define scheme_true dll_scheme_true
-// pointers are GetProceAddress'ed as pointers to pointer
+// pointers are GetProcAddress'ed as pointers to pointer
#if !defined(USE_THREAD_LOCAL) && !defined(LINK_EXTENSIONS_BY_TABLE)
# define scheme_current_thread (*dll_scheme_current_thread_ptr)
# endif
@@ -924,7 +924,7 @@ mzscheme_end(void)
#endif
}
-#if HAVE_TLS_SPACE
+#if HAVE_TLS_SPACE && !defined(VIMDLL)
# if defined(_MSC_VER)
static __declspec(thread) void *tls_space;
extern intptr_t _tls_index;
@@ -960,7 +960,24 @@ mzscheme_main(void)
}
#endif
#ifdef HAVE_TLS_SPACE
+# ifdef VIMDLL
+ void **ptls_space;
+ intptr_t tls_index;
+ void (*pget_tls_info)(void ***ptls_space, intptr_t *ptls_index);
+
+ // Get the address of get_tls_info() from (g)vim.exe.
+ pget_tls_info = (void *)GetProcAddress(
+ GetModuleHandle(NULL), "get_tls_info");
+ if (pget_tls_info == NULL)
+ {
+ disabled = TRUE;
+ return vim_main2();
+ }
+ pget_tls_info(&ptls_space, &tls_index);
+ scheme_register_tls_space(ptls_space, tls_index);
+# else
scheme_register_tls_space(&tls_space, _tls_index);
+# endif
#endif
#ifdef TRAMPOLINED_MZVIM_STARTUP
return scheme_main_setup(TRUE, mzscheme_env_main, argc, &argv);
diff --git a/src/if_py_both.h b/src/if_py_both.h
index e0fd3ea..3643f8b 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -358,7 +358,9 @@ static PyObject *py_find_spec;
#else
static PyObject *py_load_module;
#endif
+#if PY_VERSION_HEX < 0x30c00a7
static PyObject *py_find_module;
+#endif
static PyObject *VimError;
@@ -3081,7 +3083,7 @@ ListConcatInPlace(ListObject *self, PyObject *obj)
}
Py_DECREF(lookup_dict);
- Py_INCREF(self);
+ Py_INCREF((PyObject *)self);
return (PyObject *)(self);
}
@@ -4010,7 +4012,7 @@ TabPageNew(tabpage_T *tab)
if (TAB_PYTHON_REF(tab))
{
self = TAB_PYTHON_REF(tab);
- Py_INCREF(self);
+ Py_INCREF((PyObject *)self);
}
else
{
@@ -4204,7 +4206,7 @@ WindowNew(win_T *win, tabpage_T *tab)
if (WIN_PYTHON_REF(win))
{
self = WIN_PYTHON_REF(win);
- Py_INCREF(self);
+ Py_INCREF((PyObject *)self);
}
else
{
@@ -4332,7 +4334,7 @@ WindowAttr(WindowObject *self, char *name)
}
else if (strcmp(name, "tabpage") == 0)
{
- Py_INCREF(self->tabObject);
+ Py_INCREF((PyObject *)self->tabObject);
return (PyObject *)(self->tabObject);
}
else if (strcmp(name, "__members__") == 0)
@@ -4486,7 +4488,7 @@ WinListNew(TabPageObject *tabObject)
self = PyObject_NEW(WinListObject, WinListTypePtr);
self->tabObject = tabObject;
- Py_INCREF(tabObject);
+ Py_INCREF((PyObject *)tabObject);
return (PyObject *)(self);
}
@@ -5381,7 +5383,7 @@ RangeNew(buf_T *buf, PyInt start, PyInt end)
Py_DECREF(self);
return NULL;
}
- Py_INCREF(bufr);
+ Py_INCREF((PyObject *)bufr);
self->buf = bufr;
self->start = start;
@@ -5510,7 +5512,7 @@ BufferNew(buf_T *buf)
if (BUF_PYTHON_REF(buf) != NULL)
{
self = BUF_PYTHON_REF(buf);
- Py_INCREF(self);
+ Py_INCREF((PyObject *)self);
}
else
{
diff --git a/src/if_python3.c b/src/if_python3.c
index c135e7e..ac817bd 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -219,6 +219,17 @@ static HINSTANCE hinstPy3 = 0; // Instance of python.dll
# define PyObject_GetItem py3_PyObject_GetItem
# define PyObject_IsTrue py3_PyObject_IsTrue
# define PyModule_GetDict py3_PyModule_GetDict
+# if defined(USE_LIMITED_API) \
+ && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+# undef Py_INCREF
+# if Py_LIMITED_API+0 >= 0x030a00A7
+# define _Py_IncRef py3__Py_IncRef
+# define Py_INCREF _Py_IncRef
+# else
+# define Py_IncRef py3_Py_IncRef
+# define Py_INCREF Py_IncRef
+# endif
+# endif
# ifdef USE_LIMITED_API
# define Py_CompileString py3_Py_CompileString
# define PyEval_EvalCode py3_PyEval_EvalCode
@@ -232,7 +243,11 @@ static HINSTANCE hinstPy3 = 0; // Instance of python.dll
# define PyObject_HasAttrString py3_PyObject_HasAttrString
# define PyObject_SetAttrString py3_PyObject_SetAttrString
# define PyObject_CallFunctionObjArgs py3_PyObject_CallFunctionObjArgs
-# define _PyObject_CallFunction_SizeT py3__PyObject_CallFunction_SizeT
+# if PY_VERSION_HEX >= 0x030d0000
+# define PyObject_CallFunction py3_PyObject_CallFunction
+# else
+# define _PyObject_CallFunction_SizeT py3__PyObject_CallFunction_SizeT
+# endif
# define PyObject_Call py3_PyObject_Call
# define PyEval_GetLocals py3_PyEval_GetLocals
# define PyEval_GetGlobals py3_PyEval_GetGlobals
@@ -387,6 +402,15 @@ static void (*py3_Py_Finalize)(void);
static void (*py3_PyErr_SetString)(PyObject *, const char *);
static void (*py3_PyErr_SetObject)(PyObject *, PyObject *);
static int (*py3_PyErr_ExceptionMatches)(PyObject *);
+# if defined(USE_LIMITED_API) \
+ && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+# if Py_LIMITED_API+0 >= 0x030a00A7
+# define _Py_IncRef py3__Py_IncRef
+static void (*py3__Py_IncRef)(PyObject *);
+# else
+static void (*py3_Py_IncRef)(PyObject *);
+# endif
+# endif
# ifdef USE_LIMITED_API
static PyObject* (*py3_Py_CompileString)(const char *, const char *, int);
static PyObject* (*py3_PyEval_EvalCode)(PyObject *co, PyObject *globals, PyObject *locals);
@@ -398,7 +422,11 @@ static PyObject* (*py3_PyObject_GetAttrString)(PyObject *, const char *);
static int (*py3_PyObject_HasAttrString)(PyObject *, const char *);
static int (*py3_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
static PyObject* (*py3_PyObject_CallFunctionObjArgs)(PyObject *, ...);
+# if PY_VERSION_HEX >= 0x030d0000
+static PyObject* (*py3_PyObject_CallFunction)(PyObject *, char *, ...);
+# else
static PyObject* (*py3__PyObject_CallFunction_SizeT)(PyObject *, char *, ...);
+# endif
static PyObject* (*py3_PyObject_Call)(PyObject *, PyObject *, PyObject *);
static PyObject* (*py3_PyEval_GetGlobals)(void);
static PyObject* (*py3_PyEval_GetLocals)(void);
@@ -590,6 +618,14 @@ static struct
{"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
{"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject},
{"PyErr_ExceptionMatches", (PYTHON_PROC*)&py3_PyErr_ExceptionMatches},
+# if defined(USE_LIMITED_API) \
+ && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+# if Py_LIMITED_API+0 >= 0x030a00A7
+ {"_Py_IncRef", (PYTHON_PROC*)&py3__Py_IncRef},
+# else
+ {"Py_IncRef", (PYTHON_PROC*)&py3_Py_IncRef},
+# endif
+# endif
# ifdef USE_LIMITED_API
{"Py_CompileString", (PYTHON_PROC*)&py3_Py_CompileString},
{"PyEval_EvalCode", (PYTHON_PROC*)&PyEval_EvalCode},
@@ -601,7 +637,11 @@ static struct
{"PyObject_HasAttrString", (PYTHON_PROC*)&py3_PyObject_HasAttrString},
{"PyObject_SetAttrString", (PYTHON_PROC*)&py3_PyObject_SetAttrString},
{"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&py3_PyObject_CallFunctionObjArgs},
+# if PY_VERSION_HEX >= 0x030d0000
+ {"PyObject_CallFunction", (PYTHON_PROC*)&py3_PyObject_CallFunction},
+# else
{"_PyObject_CallFunction_SizeT", (PYTHON_PROC*)&py3__PyObject_CallFunction_SizeT},
+# endif
{"PyObject_Call", (PYTHON_PROC*)&py3_PyObject_Call},
{"PyEval_GetGlobals", (PYTHON_PROC*)&py3_PyEval_GetGlobals},
{"PyEval_GetLocals", (PYTHON_PROC*)&py3_PyEval_GetLocals},
@@ -762,6 +802,20 @@ py3__Py_XDECREF(PyObject *op)
# define Py_XDECREF(op) py3__Py_XDECREF(_PyObject_CAST(op))
# endif
+# if defined(USE_LIMITED_API) \
+ && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+ static inline void
+py3__Py_XINCREF(PyObject *op)
+{
+ if (op != NULL)
+ {
+ Py_INCREF(op);
+ }
+}
+# undef Py_XINCREF
+# define Py_XINCREF(op) py3__Py_XINCREF(_PyObject_CAST(op))
+# endif
+
# if PY_VERSION_HEX >= 0x030900b0
static inline int
py3_PyType_HasFeature(PyTypeObject *type, unsigned long feature)
@@ -1067,7 +1121,7 @@ static int python_end_called = FALSE;
#ifdef USE_LIMITED_API
# define DESTRUCTOR_FINISH(self) \
- ((freefunc)PyType_GetSlot(Py_TYPE(self), Py_tp_free))((PyObject*)self)
+ ((freefunc)PyType_GetSlot(Py_TYPE((PyObject*)self), Py_tp_free))((PyObject*)self)
#else
# define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self)
#endif
diff --git a/src/indent.c b/src/indent.c
index 777db24..0d6fadb 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -996,7 +996,7 @@ get_breakindent_win(
# else
if (wp->w_briopt_vcol == 0)
prev_indent = get_indent_str(line,
- (int)wp->w_buffer->b_p_ts, no_ts);
+ (int)wp->w_buffer->b_p_ts, no_ts);
# endif
prev_tick = CHANGEDTICK(wp->w_buffer);
prev_listopt = wp->w_briopt_list;
diff --git a/src/insexpand.c b/src/insexpand.c
index c673df9..af818d4 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -58,7 +58,7 @@ static char *ctrl_x_msgs[] =
N_(" Command-line completion (^V^N^P)"),
N_(" User defined completion (^U^N^P)"),
N_(" Omni completion (^O^N^P)"),
- N_(" Spelling suggestion (s^N^P)"),
+ N_(" Spelling suggestion (^S^N^P)"),
N_(" Keyword Local completion (^N^P)"),
NULL, // CTRL_X_EVAL doesn't use msg.
N_(" Command-line completion (^V^N^P)"),
@@ -114,6 +114,8 @@ struct compl_S
int cp_flags; // CP_ values
int cp_number; // sequence number
int cp_score; // fuzzy match score
+ int cp_user_hlattr; // highlight attribute to combine with
+ int cp_user_kind_hlattr; // highlight attribute for kind
};
// values for cp_flags
@@ -203,7 +205,9 @@ static int compl_opt_suppress_empty = FALSE;
static int compl_selected_item = -1;
-static int ins_compl_add(char_u *str, int len, char_u *fname, char_u **cptext, typval_T *user_data, int cdir, int flags, int adup);
+static int *compl_fuzzy_scores;
+
+static int ins_compl_add(char_u *str, int len, char_u *fname, char_u **cptext, typval_T *user_data, int cdir, int flags, int adup, int user_hlattr, int user_kind_hlattr);
static void ins_compl_longest_match(compl_T *match);
static void ins_compl_del_pum(void);
static void ins_compl_files(int count, char_u **files, int thesaurus, int flags, regmatch_T *regmatch, char_u *buf, int *dir);
@@ -743,7 +747,7 @@ ins_compl_add_infercase(
if (icase)
flags |= CP_ICASE;
- res = ins_compl_add(str, len, fname, NULL, NULL, dir, flags, FALSE);
+ res = ins_compl_add(str, len, fname, NULL, NULL, dir, flags, FALSE, -1, -1);
vim_free(tofree);
return res;
}
@@ -776,7 +780,9 @@ ins_compl_add(
typval_T *user_data UNUSED, // "user_data" entry or NULL
int cdir,
int flags_arg,
- int adup) // accept duplicate match
+ int adup, // accept duplicate match
+ int user_hlattr,
+ int user_kind_hlattr)
{
compl_T *match;
int dir = (cdir == 0 ? compl_direction : cdir);
@@ -840,6 +846,8 @@ ins_compl_add(
else
match->cp_fname = NULL;
match->cp_flags = flags;
+ match->cp_user_hlattr = user_hlattr;
+ match->cp_user_kind_hlattr = user_kind_hlattr;
if (cptext != NULL)
{
@@ -992,7 +1000,7 @@ ins_compl_add_matches(
for (i = 0; i < num_matches && add_r != FAIL; i++)
if ((add_r = ins_compl_add(matches[i], -1, NULL, NULL, NULL, dir,
- CP_FAST | (icase ? CP_ICASE : 0), FALSE)) == OK)
+ CP_FAST | (icase ? CP_ICASE : 0), FALSE, -1, -1)) == OK)
// if dir was BACKWARD then honor it just once
dir = FORWARD;
FreeWild(num_matches, matches);
@@ -1306,7 +1314,13 @@ ins_compl_build_pum(void)
{
did_find_shown_match = TRUE;
max_fuzzy_score = compl->cp_score;
- compl_shown_match = compl;
+ if (!compl_no_select)
+ compl_shown_match = compl;
+ }
+
+ if (!shown_match_ok && compl == compl_shown_match && !compl_no_select)
+ {
+ cur = i;
shown_match_ok = TRUE;
}
@@ -1318,8 +1332,6 @@ ins_compl_build_pum(void)
&& (max_fuzzy_score > 0
|| (compl_leader == NULL || lead_len == 0)))
{
- shown_match_ok = TRUE;
- cur = 0;
if (match_at_original_text(compl_shown_match))
compl_shown_match = shown_compl;
}
@@ -1333,6 +1345,8 @@ ins_compl_build_pum(void)
compl_match_array[i].pum_kind = compl->cp_text[CPT_KIND];
compl_match_array[i].pum_info = compl->cp_text[CPT_INFO];
compl_match_array[i].pum_score = compl->cp_score;
+ compl_match_array[i].pum_user_hlattr = compl->cp_user_hlattr;
+ compl_match_array[i].pum_user_kind_hlattr = compl->cp_user_kind_hlattr;
if (compl->cp_text[CPT_MENU] != NULL)
compl_match_array[i++].pum_extra =
compl->cp_text[CPT_MENU];
@@ -1367,6 +1381,7 @@ ins_compl_build_pum(void)
// sort by the largest score of fuzzy match
qsort(compl_match_array, (size_t)compl_match_arraysize,
sizeof(pumitem_T), ins_compl_fuzzy_cmp);
+ shown_match_ok = TRUE;
}
if (!shown_match_ok) // no displayed match at all
@@ -2833,6 +2848,14 @@ theend:
#endif // FEAT_COMPL_FUNC
#if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL) || defined(PROTO)
+
+ static inline int
+get_user_highlight_attr(char_u *hlname)
+{
+ if (hlname != NULL && *hlname != NUL)
+ return syn_name2attr(hlname);
+ return -1;
+}
/*
* Add a match to the list of matches from a typeval_T.
* If the given string is already in the list of completions, then return
@@ -2850,6 +2873,10 @@ ins_compl_add_tv(typval_T *tv, int dir, int fast)
char_u *(cptext[CPT_COUNT]);
typval_T user_data;
int status;
+ char_u *user_hlname;
+ char_u *user_kind_hlname;
+ int user_hlattr = -1;
+ int user_kind_hlattr = -1;
user_data.v_type = VAR_UNKNOWN;
if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
@@ -2859,6 +2886,13 @@ ins_compl_add_tv(typval_T *tv, int dir, int fast)
cptext[CPT_MENU] = dict_get_string(tv->vval.v_dict, "menu", FALSE);
cptext[CPT_KIND] = dict_get_string(tv->vval.v_dict, "kind", FALSE);
cptext[CPT_INFO] = dict_get_string(tv->vval.v_dict, "info", FALSE);
+
+ user_hlname = dict_get_string(tv->vval.v_dict, "hl_group", FALSE);
+ user_hlattr = get_user_highlight_attr(user_hlname);
+
+ user_kind_hlname = dict_get_string(tv->vval.v_dict, "kind_hlgroup", FALSE);
+ user_kind_hlattr = get_user_highlight_attr(user_kind_hlname);
+
dict_get_tv(tv->vval.v_dict, "user_data", &user_data);
if (dict_get_string(tv->vval.v_dict, "icase", FALSE) != NULL
&& dict_get_number(tv->vval.v_dict, "icase"))
@@ -2881,7 +2915,8 @@ ins_compl_add_tv(typval_T *tv, int dir, int fast)
clear_tv(&user_data);
return FAIL;
}
- status = ins_compl_add(word, -1, NULL, cptext, &user_data, dir, flags, dup);
+ status = ins_compl_add(word, -1, NULL, cptext,
+ &user_data, dir, flags, dup, user_hlattr, user_kind_hlattr);
if (status != OK)
clear_tv(&user_data);
return status;
@@ -2968,7 +3003,7 @@ set_completion(colnr_T startcol, list_T *list)
flags |= CP_ICASE;
if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
-1, NULL, NULL, NULL, 0,
- flags | CP_FAST, FALSE) != OK)
+ flags | CP_FAST, FALSE, -1, -1) != OK)
return;
ctrl_x_mode = CTRL_X_EVAL;
@@ -3318,7 +3353,8 @@ typedef struct
process_next_cpt_value(
ins_compl_next_state_T *st,
int *compl_type_arg,
- pos_T *start_match_pos)
+ pos_T *start_match_pos,
+ int in_fuzzy)
{
int compl_type = -1;
int status = INS_COMPL_CPT_OK;
@@ -3334,7 +3370,7 @@ process_next_cpt_value(
st->first_match_pos = *start_match_pos;
// Move the cursor back one character so that ^N can match the
// word immediately after the cursor.
- if (ctrl_x_mode_normal() && dec(&st->first_match_pos) < 0)
+ if (ctrl_x_mode_normal() && (!in_fuzzy && dec(&st->first_match_pos) < 0))
{
// Move the cursor to after the last character in the
// buffer, so that word at start of buffer is found
@@ -3502,6 +3538,18 @@ get_next_tag_completion(void)
}
/*
+ * Compare function for qsort
+ */
+static int compare_scores(const void *a, const void *b)
+{
+ int idx_a = *(const int *)a;
+ int idx_b = *(const int *)b;
+ int score_a = compl_fuzzy_scores[idx_a];
+ int score_b = compl_fuzzy_scores[idx_b];
+ return (score_a > score_b) ? -1 : (score_a < score_b) ? 1 : 0;
+}
+
+/*
* Get the next set of filename matching "compl_pattern".
*/
static void
@@ -3509,6 +3557,77 @@ get_next_filename_completion(void)
{
char_u **matches;
int num_matches;
+ char_u *ptr;
+ garray_T fuzzy_indices;
+ int i;
+ int score;
+ char_u *leader = ins_compl_leader();
+ size_t leader_len = STRLEN(leader);
+ int in_fuzzy = ((get_cot_flags() & COT_FUZZY) != 0 && leader_len > 0);
+ char_u **sorted_matches;
+ int *fuzzy_indices_data;
+ char_u *last_sep = NULL;
+ size_t path_with_wildcard_len;
+ char_u *path_with_wildcard;
+
+#ifdef BACKSLASH_IN_FILENAME
+ char pathsep = (curbuf->b_p_csl[0] == 's') ?
+ '/' : (curbuf->b_p_csl[0] == 'b') ? '\\' : PATHSEP;
+#else
+ char pathsep = PATHSEP;
+#endif
+
+ if (in_fuzzy)
+ {
+#ifdef BACKSLASH_IN_FILENAME
+ if (curbuf->b_p_csl[0] == 's')
+ {
+ for (i = 0; i < leader_len; i++)
+ {
+ if (leader[i] == '\\')
+ leader[i] = '/';
+ }
+ }
+ else if (curbuf->b_p_csl[0] == 'b')
+ {
+ for (i = 0; i < leader_len; i++)
+ {
+ if (leader[i] == '/')
+ leader[i] = '\\';
+ }
+ }
+#endif
+ last_sep = vim_strrchr(leader, pathsep);
+ if (last_sep == NULL)
+ {
+ // No path separator or separator is the last character,
+ // fuzzy match the whole leader
+ vim_free(compl_pattern);
+ compl_pattern = vim_strsave((char_u *)"*");
+ compl_patternlen = STRLEN(compl_pattern);
+ }
+ else if (*(last_sep + 1) == '\0')
+ in_fuzzy = FALSE;
+ else
+ {
+ // Split leader into path and file parts
+ int path_len = last_sep - leader + 1;
+ path_with_wildcard_len = path_len + 2;
+ path_with_wildcard = alloc(path_with_wildcard_len);
+ if (path_with_wildcard != NULL)
+ {
+ vim_strncpy(path_with_wildcard, leader, path_len);
+ vim_strcat(path_with_wildcard, (char_u *)"*", path_with_wildcard_len);
+ vim_free(compl_pattern);
+ compl_pattern = path_with_wildcard;
+ compl_patternlen = STRLEN(compl_pattern);
+
+ // Move leader to the file part
+ leader = last_sep + 1;
+ leader_len = STRLEN(leader);
+ }
+ }
+ }
if (expand_wildcards(1, &compl_pattern, &num_matches, &matches,
EW_FILE|EW_DIR|EW_ADDSLASH|EW_SILENT) != OK)
@@ -3519,12 +3638,9 @@ get_next_filename_completion(void)
#ifdef BACKSLASH_IN_FILENAME
if (curbuf->b_p_csl[0] != NUL)
{
- int i;
-
for (i = 0; i < num_matches; ++i)
{
- char_u *ptr = matches[i];
-
+ ptr = matches[i];
while (*ptr != NUL)
{
if (curbuf->b_p_csl[0] == 's' && *ptr == '\\')
@@ -3536,7 +3652,53 @@ get_next_filename_completion(void)
}
}
#endif
- ins_compl_add_matches(num_matches, matches, p_fic || p_wic);
+
+ if (in_fuzzy)
+ {
+ ga_init2(&fuzzy_indices, sizeof(int), 10);
+ compl_fuzzy_scores = (int *)alloc(sizeof(int) * num_matches);
+
+ for (i = 0; i < num_matches; i++)
+ {
+ ptr = matches[i];
+ score = fuzzy_match_str(ptr, leader);
+ if (score > 0)
+ {
+ if (ga_grow(&fuzzy_indices, 1) == OK)
+ {
+ ((int *)fuzzy_indices.ga_data)[fuzzy_indices.ga_len] = i;
+ compl_fuzzy_scores[i] = score;
+ fuzzy_indices.ga_len++;
+ }
+ }
+ }
+
+ // prevent qsort from deref NULL pointer
+ if (fuzzy_indices.ga_len > 0)
+ {
+ fuzzy_indices_data = (int *)fuzzy_indices.ga_data;
+ qsort(fuzzy_indices_data, fuzzy_indices.ga_len, sizeof(int), compare_scores);
+
+ sorted_matches = (char_u **)alloc(sizeof(char_u *) * fuzzy_indices.ga_len);
+ for (i = 0; i < fuzzy_indices.ga_len; ++i)
+ sorted_matches[i] = vim_strsave(matches[fuzzy_indices_data[i]]);
+
+ FreeWild(num_matches, matches);
+ matches = sorted_matches;
+ num_matches = fuzzy_indices.ga_len;
+ }
+ else if (leader_len > 0)
+ {
+ FreeWild(num_matches, matches);
+ num_matches = 0;
+ }
+
+ vim_free(compl_fuzzy_scores);
+ ga_clear(&fuzzy_indices);
+ }
+
+ if (num_matches > 0)
+ ins_compl_add_matches(num_matches, matches, p_fic || p_wic);
}
/*
@@ -3683,8 +3845,10 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos)
int save_p_scs;
int save_p_ws;
int looped_around = FALSE;
- char_u *ptr;
- int len;
+ char_u *ptr = NULL;
+ int len = 0;
+ int in_fuzzy = (get_cot_flags() & COT_FUZZY) != 0 && compl_length > 0;
+ char_u *leader = ins_compl_leader();
// If 'infercase' is set, don't use 'smartcase' here
save_p_scs = p_scs;
@@ -3698,7 +3862,7 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos)
save_p_ws = p_ws;
if (st->ins_buf != curbuf)
p_ws = FALSE;
- else if (*st->e_cpt == '.')
+ else if (*st->e_cpt == '.' && !in_fuzzy)
p_ws = TRUE;
looped_around = FALSE;
for (;;)
@@ -3709,9 +3873,13 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos)
// ctrl_x_mode_line_or_eval() || word-wise search that
// has added a word that was at the beginning of the line
- if (ctrl_x_mode_line_or_eval() || (compl_cont_status & CONT_SOL))
+ if ((ctrl_x_mode_whole_line() && !in_fuzzy) || ctrl_x_mode_eval() || (compl_cont_status & CONT_SOL))
found_new_match = search_for_exact_line(st->ins_buf,
st->cur_match_pos, compl_direction, compl_pattern);
+ else if (in_fuzzy)
+ found_new_match = search_for_fuzzy_match(st->ins_buf,
+ st->cur_match_pos, leader, compl_direction,
+ start_pos, &len, &ptr, ctrl_x_mode_whole_line());
else
found_new_match = searchit(NULL, st->ins_buf, st->cur_match_pos,
NULL, compl_direction, compl_pattern, compl_patternlen,
@@ -3760,8 +3928,9 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos)
&& start_pos->col == st->cur_match_pos->col)
continue;
- ptr = ins_compl_get_next_word_or_line(st->ins_buf, st->cur_match_pos,
- &len, &cont_s_ipos);
+ if (!in_fuzzy)
+ ptr = ins_compl_get_next_word_or_line(st->ins_buf, st->cur_match_pos,
+ &len, &cont_s_ipos);
if (ptr == NULL)
continue;
@@ -3860,6 +4029,7 @@ ins_compl_get_exp(pos_T *ini)
int i;
int found_new_match;
int type = ctrl_x_mode;
+ int in_fuzzy = (get_cot_flags() & COT_FUZZY) != 0;
if (!compl_started)
{
@@ -3886,7 +4056,7 @@ ins_compl_get_exp(pos_T *ini)
compl_old_match = compl_curr_match; // remember the last current match
st.cur_match_pos = (compl_dir_forward())
- ? &st.last_match_pos : &st.first_match_pos;
+ ? &st.last_match_pos : &st.first_match_pos;
// For ^N/^P loop over all the flags/windows/buffers in 'complete'.
for (;;)
@@ -3900,7 +4070,7 @@ ins_compl_get_exp(pos_T *ini)
if ((ctrl_x_mode_normal() || ctrl_x_mode_line_or_eval())
&& (!compl_started || st.found_all))
{
- int status = process_next_cpt_value(&st, &type, ini);
+ int status = process_next_cpt_value(&st, &type, ini, in_fuzzy);
if (status == INS_COMPL_CPT_END)
break;
@@ -4100,10 +4270,10 @@ find_comp_when_fuzzy(void)
int is_backward = compl_shows_dir_backward();
compl_T *comp = NULL;
- if (compl_match_array == NULL ||
- (is_forward && compl_selected_item == compl_match_arraysize - 1)
+ if ((is_forward && compl_selected_item == compl_match_arraysize - 1)
|| (is_backward && compl_selected_item == 0))
- return compl_first_match;
+ return compl_first_match != compl_shown_match ? compl_first_match :
+ (compl_first_match->cp_prev ? compl_first_match->cp_prev : NULL);
if (is_forward)
target_idx = compl_selected_item + 1;
@@ -4621,7 +4791,6 @@ get_normal_compl_info(char_u *line, int startcol, colnr_T curs_col)
}
compl_patternlen = STRLEN(compl_pattern);
-
return OK;
}
@@ -5066,7 +5235,7 @@ ins_compl_start(void)
if (p_ic)
flags |= CP_ICASE;
if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
- -1, NULL, NULL, NULL, 0, flags, FALSE) != OK)
+ -1, NULL, NULL, NULL, 0, flags, FALSE, -1, -1) != OK)
{
VIM_CLEAR(compl_pattern);
compl_patternlen = 0;
diff --git a/src/list.c b/src/list.c
index 9479b4b..36ce494 100644
--- a/src/list.c
+++ b/src/list.c
@@ -365,8 +365,7 @@ list_len(list_T *l)
list_equal(
list_T *l1,
list_T *l2,
- int ic, // ignore case for strings
- int recursive) // TRUE when used recursively
+ int ic) // ignore case for strings
{
listitem_T *item1, *item2;
@@ -386,7 +385,7 @@ list_equal(
for (item1 = l1->lv_first, item2 = l2->lv_first;
item1 != NULL && item2 != NULL;
item1 = item1->li_next, item2 = item2->li_next)
- if (!tv_equal(&item1->li_tv, &item2->li_tv, ic, recursive))
+ if (!tv_equal(&item1->li_tv, &item2->li_tv, ic))
return FALSE;
return item1 == NULL && item2 == NULL;
}
@@ -2727,7 +2726,7 @@ list_count(list_T *l, typval_T *needle, long idx, int ic)
}
for ( ; li != NULL; li = li->li_next)
- if (tv_equal(&li->li_tv, needle, ic, FALSE))
+ if (tv_equal(&li->li_tv, needle, ic))
++n;
return n;
diff --git a/src/macros.h b/src/macros.h
index 190778e..38983ac 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -194,7 +194,11 @@
#ifdef HAVE_LSTAT
# define mch_lstat(n, p) lstat((n), (p))
#else
-# define mch_lstat(n, p) mch_stat((n), (p))
+# ifdef MSWIN
+# define mch_lstat(n, p) vim_lstat((n), (p))
+# else
+# define mch_lstat(n, p) mch_stat((n), (p))
+# endif
#endif
#ifdef VMS
diff --git a/src/map.c b/src/map.c
index c416c0a..91ab6e3 100644
--- a/src/map.c
+++ b/src/map.c
@@ -85,6 +85,8 @@ map_free(mapblock_T **mpp)
mp = *mpp;
vim_free(mp->m_keys);
+ if (mp->m_alt != NULL)
+ mp->m_alt->m_alt = NULL;
vim_free(mp->m_str);
vim_free(mp->m_orig_str);
*mpp = mp->m_next;
@@ -213,7 +215,7 @@ theend:
--map_locked;
}
- static int
+ static mapblock_T *
map_add(
mapblock_T **map_table,
mapblock_T **abbr_table,
@@ -236,7 +238,7 @@ map_add(
mapblock_T *mp = ALLOC_CLEAR_ONE(mapblock_T);
if (mp == NULL)
- return FAIL;
+ return NULL;
// If CTRL-C has been mapped, don't always use it for Interrupting.
if (*keys == Ctrl_C)
@@ -256,7 +258,7 @@ map_add(
vim_free(mp->m_str);
vim_free(mp->m_orig_str);
vim_free(mp);
- return FAIL;
+ return NULL;
}
mp->m_keylen = (int)STRLEN(mp->m_keys);
mp->m_noremap = noremap;
@@ -292,7 +294,7 @@ map_add(
mp->m_next = map_table[n];
map_table[n] = mp;
}
- return OK;
+ return mp;
}
/*
@@ -444,6 +446,7 @@ do_map(
{
char_u *keys;
mapblock_T *mp, **mpp;
+ mapblock_T *mp_result[2] = {NULL, NULL};
char_u *rhs;
char_u *p;
int n;
@@ -844,6 +847,8 @@ do_map(
retval = 4; // no mem
goto theend;
}
+ if (mp->m_alt != NULL)
+ mp->m_alt = mp->m_alt->m_alt = NULL;
vim_free(mp->m_str);
mp->m_str = newstr;
vim_free(mp->m_orig_str);
@@ -858,6 +863,7 @@ do_map(
mp->m_script_ctx = current_sctx;
mp->m_script_ctx.sc_lnum += SOURCING_LNUM;
#endif
+ mp_result[keyround - 1] = mp;
did_it = TRUE;
}
}
@@ -921,18 +927,25 @@ do_map(
continue; // have added the new entry already
// Get here when adding a new entry to the maphash[] list or abbrlist.
- if (map_add(map_table, abbr_table, keys, rhs, orig_rhs,
- noremap, nowait, silent, mode, abbrev,
+ mp_result[keyround - 1] = map_add(map_table, abbr_table, keys,
+ rhs, orig_rhs, noremap, nowait, silent, mode, abbrev,
#ifdef FEAT_EVAL
expr, /* sid */ 0, /* scriptversion */ 0, /* lnum */ 0,
#endif
- keyround1_simplified) == FAIL)
+ keyround1_simplified);
+ if (mp_result[keyround - 1] == NULL)
{
retval = 4; // no mem
goto theend;
}
}
+ if (mp_result[0] != NULL && mp_result[1] != NULL)
+ {
+ mp_result[0]->m_alt = mp_result[1];
+ mp_result[1]->m_alt = mp_result[0];
+ }
+
theend:
vim_free(keys_buf);
vim_free(alt_keys_buf);
@@ -2710,6 +2723,7 @@ f_mapset(typval_T *argvars, typval_T *rettv UNUSED)
int nowait;
char_u *arg;
int dict_only;
+ mapblock_T *mp_result[2] = {NULL, NULL};
// If first arg is a dict, then that's the only arg permitted.
dict_only = argvars[0].v_type == VAR_DICT;
@@ -2806,12 +2820,20 @@ f_mapset(typval_T *argvars, typval_T *rettv UNUSED)
do_map(MAPTYPE_UNMAP, arg, mode, is_abbr);
vim_free(arg);
- (void)map_add(map_table, abbr_table, lhsraw, rhs, orig_rhs, noremap,
- nowait, silent, mode, is_abbr, expr, sid, scriptversion, lnum, 0);
+ mp_result[0] = map_add(map_table, abbr_table, lhsraw, rhs, orig_rhs,
+ noremap, nowait, silent, mode, is_abbr, expr, sid,
+ scriptversion, lnum, 0);
if (lhsrawalt != NULL)
- (void)map_add(map_table, abbr_table, lhsrawalt, rhs, orig_rhs, noremap,
- nowait, silent, mode, is_abbr, expr, sid, scriptversion,
- lnum, 1);
+ mp_result[1] = map_add(map_table, abbr_table, lhsrawalt, rhs, orig_rhs,
+ noremap, nowait, silent, mode, is_abbr, expr, sid,
+ scriptversion, lnum, 1);
+
+ if (mp_result[0] != NULL && mp_result[1] != NULL)
+ {
+ mp_result[0]->m_alt = mp_result[1];
+ mp_result[1]->m_alt = mp_result[0];
+ }
+
vim_free(arg_buf);
}
#endif
diff --git a/src/mark.c b/src/mark.c
index 22e3c62..9f6a9cc 100644
--- a/src/mark.c
+++ b/src/mark.c
@@ -130,6 +130,38 @@ setmark_pos(int c, pos_T *pos, int fnum)
}
/*
+ * Delete every entry referring to file 'fnum' from both the jumplist and the
+ * tag stack.
+ */
+ void
+mark_forget_file(win_T *wp, int fnum)
+{
+ int i;
+
+ for (i = wp->w_jumplistlen - 1; i >= 0; --i)
+ if (wp->w_jumplist[i].fmark.fnum == fnum)
+ {
+ vim_free(wp->w_jumplist[i].fname);
+ if (wp->w_jumplistidx > i)
+ --wp->w_jumplistidx;
+ --wp->w_jumplistlen;
+ mch_memmove(&wp->w_jumplist[i], &wp->w_jumplist[i + 1],
+ (wp->w_jumplistlen - i) * sizeof(wp->w_jumplist[i]));
+ }
+
+ for (i = wp->w_tagstacklen - 1; i >= 0; --i)
+ if (wp->w_tagstack[i].fmark.fnum == fnum)
+ {
+ tagstack_clear_entry(&wp->w_tagstack[i]);
+ if (wp->w_tagstackidx > i)
+ --wp->w_tagstackidx;
+ --wp->w_tagstacklen;
+ mch_memmove(&wp->w_tagstack[i], &wp->w_tagstack[i + 1],
+ (wp->w_tagstacklen - i) * sizeof(wp->w_tagstack[i]));
+ }
+}
+
+/*
* Set the previous context mark to the current position and add it to the
* jump list.
*/
diff --git a/src/mbyte.c b/src/mbyte.c
index 07446ca..d8c47ac 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -102,7 +102,7 @@
# define WINBYTE BYTE
#endif
-#if (defined(MSWIN) || defined(WIN32UNIX)) && !defined(__MINGW32__)
+#if defined(MSWIN) || defined(WIN32UNIX)
# include <winnls.h>
#endif
@@ -3801,6 +3801,15 @@ utf_strnicmp(
* two characters otherwise.
*/
int
+mb_strnicmp2(char_u *s1, char_u *s2, size_t n1, size_t n2)
+{
+ if (n1 == n2 || !enc_utf8)
+ return mb_strnicmp(s1, s2, n1);
+ else
+ return utf_strnicmp(s1, s2, n1, n2);
+}
+
+ int
mb_strnicmp(char_u *s1, char_u *s2, size_t nn)
{
int i, l;
diff --git a/src/memline.c b/src/memline.c
index 6c63fad..b93eb0a 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -1975,7 +1975,7 @@ recover_names(
if (after_pathsep(dir_name, p) && len > 1 && p[-1] == p[-2])
{
// Ends with '//', Use Full path for swap name
- tail = make_percent_swname(dir_name, fname_res);
+ tail = make_percent_swname(dir_name, p, fname_res);
}
else
#endif
@@ -2143,7 +2143,7 @@ recover_names(
* removed.
*/
char_u *
-make_percent_swname(char_u *dir, char_u *name)
+make_percent_swname(char_u *dir, char_u *dir_end, char_u *name)
{
char_u *d = NULL, *s, *f;
@@ -2159,7 +2159,7 @@ make_percent_swname(char_u *dir, char_u *name)
if (vim_ispathsep(*d))
*d = '%';
- dir[STRLEN(dir) - 1] = NUL; // remove one trailing slash
+ dir_end[-1] = NUL; // remove one trailing slash
d = concat_fnames(dir, s, TRUE);
vim_free(s);
}
@@ -2710,7 +2710,7 @@ ml_get_buf_len(buf_T *buf, linenr_T lnum)
char_u *line;
if (*(line = ml_get_buf(buf, lnum, FALSE)) == NUL)
- return 0;
+ return 0;
if (buf->b_ml.ml_line_textlen <= 0)
buf->b_ml.ml_line_textlen = (int)STRLEN(line) + 1;
@@ -4676,7 +4676,7 @@ makeswapname(
if (after_pathsep(dir_name, s) && len > 1 && s[-1] == s[-2])
{ // Ends with '//', Use Full path
r = NULL;
- if ((s = make_percent_swname(dir_name, fname_res)) != NULL)
+ if ((s = make_percent_swname(dir_name, s, fname_res)) != NULL)
{
r = modname(s, (char_u *)".swp", FALSE);
vim_free(s);
diff --git a/src/misc1.c b/src/misc1.c
index 8348488..0898efb 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -678,17 +678,6 @@ get_mode(char_u *buf)
buf[i++] = 't';
}
#endif
- else if (VIsual_active)
- {
- if (VIsual_select)
- buf[i++] = VIsual_mode + 's' - 'v';
- else
- {
- buf[i++] = VIsual_mode;
- if (restart_VIsual_select)
- buf[i++] = 's';
- }
- }
else if (State == MODE_HITRETURN || State == MODE_ASKMORE
|| State == MODE_SETWSIZE
|| State == MODE_CONFIRM)
@@ -731,6 +720,17 @@ get_mode(char_u *buf)
if ((State & MODE_CMDLINE) && cmdline_overstrike())
buf[i++] = 'r';
}
+ else if (VIsual_active)
+ {
+ if (VIsual_select)
+ buf[i++] = VIsual_mode + 's' - 'v';
+ else
+ {
+ buf[i++] = VIsual_mode;
+ if (restart_VIsual_select)
+ buf[i++] = 's';
+ }
+ }
else
{
buf[i++] = 'n';
diff --git a/src/misc2.c b/src/misc2.c
index c07ed80..b5044fb 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -72,7 +72,7 @@ coladvance_force(colnr_T wcol)
* Get the screen position of character col with a coladd in the cursor line.
*/
int
-getviscol2(colnr_T col, colnr_T coladd UNUSED)
+getviscol2(colnr_T col, colnr_T coladd)
{
colnr_T x;
pos_T pos;
diff --git a/src/move.c b/src/move.c
index 71654dd..f2780e5 100644
--- a/src/move.c
+++ b/src/move.c
@@ -3281,10 +3281,13 @@ pagescroll(int dir, long count, int half)
MAX(1, p_window - 2) : get_scroll_overlap(dir));
nochange = scroll_with_sms(dir, count, &count);
- // Place cursor at top or bottom of window.
- validate_botline();
- curwin->w_cursor.lnum = (dir == FORWARD ? curwin->w_topline
+ if (!nochange)
+ {
+ // Place cursor at top or bottom of window.
+ validate_botline();
+ curwin->w_cursor.lnum = (dir == FORWARD ? curwin->w_topline
: curwin->w_botline - 1);
+ }
}
if (get_scrolloff_value() > 0)
diff --git a/src/netbeans.c b/src/netbeans.c
index 3b68869..781caa8 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -1689,8 +1689,10 @@ nb_do_cmd(
if (streq((char *)args, "T") && buf->bufp != curbuf)
{
exarg_T exarg;
+ CLEAR_FIELD(exarg);
exarg.cmd = (char_u *)"goto";
exarg.forceit = FALSE;
+ exarg.cmdidx = CMD_USER;
dosetvisible = TRUE;
goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
do_update = 1;
diff --git a/src/normal.c b/src/normal.c
index b55d941..a929dd8 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -4462,7 +4462,7 @@ nv_brackets(cmdarg_T *cap)
SAFE_islower(cap->nchar) ? ACTION_SHOW : ACTION_GOTO,
cap->cmdchar == ']' ? curwin->w_cursor.lnum + 1 : (linenr_T)1,
(linenr_T)MAXLNUM,
- FALSE);
+ FALSE);
vim_free(ptr);
curwin->w_set_curswant = TRUE;
}
@@ -6598,8 +6598,12 @@ nv_wordcmd(cmdarg_T *cap)
// "ce" will change until the end of the next word, but "cw"
// will change only one character! This is done by setting
// flag.
- cap->oap->inclusive = TRUE;
- word_end = TRUE;
+ // This can be configured using :set cpo-z
+ if (vim_strchr(p_cpo, CPO_WORD) != NULL)
+ {
+ cap->oap->inclusive = TRUE;
+ word_end = TRUE;
+ }
flag = TRUE;
}
}
diff --git a/src/ops.c b/src/ops.c
index eb75c34..eb8f64c 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -240,8 +240,8 @@ shift_line(
if (round) // round off indent
{
- i = count / sw_val; // number of 'shiftwidth' rounded down
- j = count % sw_val; // extra spaces
+ i = trim_to_int(count) / sw_val; // number of 'shiftwidth' rounded down
+ j = trim_to_int(count) % sw_val; // extra spaces
if (j && left) // first remove extra spaces
--amount;
if (left)
@@ -676,6 +676,7 @@ op_delete(oparg_T *oap)
&& !oap->block_mode
&& oap->line_count > 1
&& oap->motion_force == NUL
+ && (vim_strchr(p_cpo, CPO_WORD) != NULL)
&& oap->op_type == OP_DELETE)
{
ptr = ml_get(oap->end.lnum) + oap->end.col;
@@ -2673,6 +2674,8 @@ do_addsub(
int do_bin;
int do_alpha;
int do_unsigned;
+ int do_blank;
+ int blank_unsigned = FALSE; // blank: treat as unsigned?
int firstdigit;
int subtract;
int negative = FALSE;
@@ -2690,6 +2693,7 @@ do_addsub(
do_bin = (vim_strchr(curbuf->b_p_nf, 'b') != NULL); // "Bin"
do_alpha = (vim_strchr(curbuf->b_p_nf, 'p') != NULL); // "alPha"
do_unsigned = (vim_strchr(curbuf->b_p_nf, 'u') != NULL); // "Unsigned"
+ do_blank = (vim_strchr(curbuf->b_p_nf, 'k') != NULL); // "blanK"
if (virtual_active())
{
@@ -2813,8 +2817,13 @@ do_addsub(
&& (!has_mbyte || !(*mb_head_off)(ptr, ptr + col - 1))
&& !do_unsigned)
{
- negative = TRUE;
- was_positive = FALSE;
+ if (do_blank && col >= 2 && !VIM_ISWHITE(ptr[col - 2]))
+ blank_unsigned = TRUE;
+ else
+ {
+ negative = TRUE;
+ was_positive = FALSE;
+ }
}
}
@@ -2875,10 +2884,16 @@ do_addsub(
&& !visual
&& !do_unsigned)
{
- // negative number
- --col;
- negative = TRUE;
+ if (do_blank && col >= 2 && !VIM_ISWHITE(ptr[col - 2]))
+ blank_unsigned = TRUE;
+ else
+ {
+ // negative number
+ --col;
+ negative = TRUE;
+ }
}
+
// get the number value (unsigned)
if (visual && VIsual_mode != 'V')
maxlen = (curbuf->b_visual.vi_curswant == MAXCOL
@@ -2938,7 +2953,7 @@ do_addsub(
negative = FALSE;
}
- if (do_unsigned && negative)
+ if ((do_unsigned || blank_unsigned) && negative)
{
if (subtract)
// sticking at zero.
diff --git a/src/option.h b/src/option.h
index 91d8d95..fba2672 100644
--- a/src/option.h
+++ b/src/option.h
@@ -212,6 +212,7 @@ typedef enum {
#define CPO_REPLCNT 'X' // "R" with a count only deletes chars once
#define CPO_YANK 'y'
#define CPO_KEEPRO 'Z' // don't reset 'readonly' on ":w!"
+#define CPO_WORD 'z' // do not special-case word motions cw and dw
#define CPO_DOLLAR '$'
#define CPO_FILTER '!'
#define CPO_MATCH '%'
@@ -231,9 +232,9 @@ typedef enum {
#define CPO_SCOLON ';' // using "," and ";" will skip over char if
// cursor would not move
// default values for Vim, Vi and POSIX
-#define CPO_VIM "aABceFs"
-#define CPO_VI "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;"
-#define CPO_ALL "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\.;"
+#define CPO_VIM "aABceFsz"
+#define CPO_VI "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZz$!%*-+<>;"
+#define CPO_ALL "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZz$!%*-+<>#{|&/\\.;"
// characters for p_ww option:
#define WW_ALL "bshl<>[]~"
@@ -520,13 +521,13 @@ EXTERN unsigned cot_flags; // flags from 'completeopt'
#define COT_ANY_MENU 0x003 // combination of menu flags
#define COT_LONGEST 0x004 // FALSE: insert full match,
// TRUE: insert longest prefix
-#define COT_PREVIEW 0x008
-#define COT_POPUP 0x010
-#define COT_POPUPHIDDEN 0x020
-#define COT_ANY_PREVIEW 0x038 // combination of preview flags
-#define COT_NOINSERT 0x040 // FALSE: select & insert, TRUE: noinsert
-#define COT_NOSELECT 0x080 // FALSE: select & insert, TRUE: noselect
-#define COT_FUZZY 0x100 // TRUE: fuzzy match enabled
+#define COT_PREVIEW 0x008
+#define COT_POPUP 0x010
+#define COT_POPUPHIDDEN 0x020
+#define COT_ANY_PREVIEW 0x038 // combination of preview flags
+#define COT_NOINSERT 0x040 // FALSE: select & insert, TRUE: noinsert
+#define COT_NOSELECT 0x080 // FALSE: select & insert, TRUE: noselect
+#define COT_FUZZY 0x100 // TRUE: fuzzy match enabled
#ifdef BACKSLASH_IN_FILENAME
EXTERN char_u *p_csl; // 'completeslash'
#endif
@@ -955,7 +956,6 @@ EXTERN int p_sol; // 'startofline'
EXTERN char_u *p_su; // 'suffixes'
EXTERN char_u *p_sws; // 'swapsync'
EXTERN char_u *p_swb; // 'switchbuf'
-EXTERN char_u *p_spk; // 'splitkeep'
EXTERN unsigned swb_flags;
// Keep in sync with p_swb_values in optionstr.c
#define SWB_USEOPEN 0x001
@@ -964,9 +964,14 @@ EXTERN unsigned swb_flags;
#define SWB_NEWTAB 0x008
#define SWB_VSPLIT 0x010
#define SWB_USELAST 0x020
+EXTERN char_u *p_spk; // 'splitkeep'
#ifdef FEAT_SYN_HL
EXTERN char_u *p_syn; // 'syntax'
#endif
+EXTERN char_u *p_tcl; // 'tabclose'
+EXTERN unsigned tcl_flags; // flags from 'tabclose'
+#define TCL_LEFT 0x001
+#define TCL_USELAST 0x002
EXTERN long p_ts; // 'tabstop'
EXTERN int p_tbs; // 'tagbsearch'
EXTERN char_u *p_tc; // 'tagcase'
diff --git a/src/optiondefs.h b/src/optiondefs.h
index 617f3ce..8982ac6 100644
--- a/src/optiondefs.h
+++ b/src/optiondefs.h
@@ -621,13 +621,12 @@ static struct vimoption options[] =
{"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
(char_u *)&Columns, PV_NONE, NULL, NULL,
{(char_u *)80L, (char_u *)0L} SCTX_INIT},
- {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA
- |P_NODUP|P_CURSWANT,
+ {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
(char_u *)&p_com, PV_COM, did_set_comments, NULL,
{(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
(char_u *)0L}
SCTX_INIT},
- {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
#ifdef FEAT_FOLDING
(char_u *)&p_cms, PV_CMS, did_set_commentstring, NULL,
{(char_u *)"/* %s */", (char_u *)0L}
@@ -801,7 +800,7 @@ static struct vimoption options[] =
{"debug", NULL, P_STRING|P_VI_DEF,
(char_u *)&p_debug, PV_NONE, did_set_debug, expand_set_debug,
{(char_u *)"", (char_u *)0L} SCTX_INIT},
- {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF,
#ifdef FEAT_FIND_ID
(char_u *)&p_def, PV_DEF, NULL, NULL,
{(char_u *)"^\\s*#\\s*define", (char_u *)0L}
@@ -2462,6 +2461,9 @@ static struct vimoption options[] =
{(char_u *)0L, (char_u *)0L}
#endif
SCTX_INIT},
+ {"tabclose", "tcl", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_tcl, PV_NONE, did_set_tabclose, expand_set_tabclose,
+ {(char_u *)"", (char_u *)0L} SCTX_INIT},
{"tabline", "tal", P_STRING|P_VI_DEF|P_RALL|P_MLE,
#ifdef FEAT_STL_OPT
(char_u *)&p_tal, PV_NONE, did_set_tabline, NULL,
@@ -2852,13 +2854,13 @@ static struct vimoption options[] =
{"window", "wi", P_NUM|P_VI_DEF,
(char_u *)&p_window, PV_NONE, did_set_window, NULL,
{(char_u *)0L, (char_u *)0L} SCTX_INIT},
- {"winfixbuf", "wfb", P_BOOL|P_VI_DEF|P_RWIN,
+ {"winfixbuf", "wfb", P_BOOL|P_VI_DEF,
(char_u *)VAR_WIN, PV_WFB, NULL, NULL,
{(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
{"winfixheight", "wfh", P_BOOL|P_VI_DEF|P_RSTAT,
(char_u *)VAR_WIN, PV_WFH, NULL, NULL,
{(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
- {"winfixwidth", "wfw", P_BOOL|P_VI_DEF|P_RSTAT,
+ {"winfixwidth", "wfw", P_BOOL|P_VI_DEF|P_RSTAT,
(char_u *)VAR_WIN, PV_WFW, NULL, NULL,
{(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
{"winheight", "wh", P_NUM|P_VI_DEF,
@@ -2868,7 +2870,7 @@ static struct vimoption options[] =
{"winminheight", "wmh", P_NUM|P_VI_DEF,
(char_u *)&p_wmh, PV_NONE, did_set_winminheight, NULL,
{(char_u *)1L, (char_u *)0L} SCTX_INIT},
- {"winminwidth", "wmw", P_NUM|P_VI_DEF,
+ {"winminwidth", "wmw", P_NUM|P_VI_DEF,
(char_u *)&p_wmw, PV_NONE, did_set_winminwidth, NULL,
{(char_u *)1L, (char_u *)0L} SCTX_INIT},
{"winptydll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
diff --git a/src/optionstr.c b/src/optionstr.c
index d722981..b6249a2 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -33,7 +33,7 @@ static char *(p_briopt_values[]) = {"shift:", "min:", "sbr", "list:", "column:",
static char *(p_dip_values[]) = {"filler", "context:", "iblank", "icase", "iwhite", "iwhiteall", "iwhiteeol", "horizontal", "vertical", "closeoff", "hiddenoff", "foldcolumn:", "followwrap", "internal", "indent-heuristic", "algorithm:", NULL};
static char *(p_dip_algorithm_values[]) = {"myers", "minimal", "patience", "histogram", NULL};
#endif
-static char *(p_nf_values[]) = {"bin", "octal", "hex", "alpha", "unsigned", NULL};
+static char *(p_nf_values[]) = {"bin", "octal", "hex", "alpha", "unsigned", "blank", NULL};
static char *(p_ff_values[]) = {FF_UNIX, FF_DOS, FF_MAC, NULL};
#ifdef FEAT_CLIPBOARD
// Note: Keep this in sync with did_set_clipboard()
@@ -81,6 +81,8 @@ static char *(p_ssop_values[]) = {"buffers", "winpos", "resize", "winsize",
static char *(p_swb_values[]) = {"useopen", "usetab", "split", "newtab", "vsplit", "uselast", NULL};
static char *(p_spk_values[]) = {"cursor", "screen", "topline", NULL};
static char *(p_tc_values[]) = {"followic", "ignore", "match", "followscs", "smart", NULL};
+// Keep in sync with TCL_ flags in option.h
+static char *(p_tcl_values[]) = {"left", "uselast", NULL};
#if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_MSWIN)
static char *(p_toolbar_values[]) = {"text", "icons", "tooltips", "horiz", NULL};
#endif
@@ -166,6 +168,7 @@ didset_string_options(void)
(void)opt_strings_flags(p_tbis, p_tbis_values, &tbis_flags, FALSE);
#endif
(void)opt_strings_flags(p_swb, p_swb_values, &swb_flags, TRUE);
+ (void)opt_strings_flags(p_tcl, p_tcl_values, &tcl_flags, TRUE);
}
#if defined(FEAT_EVAL) || defined(PROTO)
@@ -3669,6 +3672,26 @@ expand_set_switchbuf(optexpand_T *args, int *numMatches, char_u ***matches)
matches);
}
+/*
+ * The 'tabclose' option is changed.
+ */
+ char *
+did_set_tabclose(optset_T *args UNUSED)
+{
+ return did_set_opt_flags(p_tcl, p_tcl_values, &tcl_flags, TRUE);
+}
+
+ int
+expand_set_tabclose(optexpand_T *args, int *numMatches, char_u ***matches)
+{
+ return expand_set_opt_string(
+ args,
+ p_tcl_values,
+ ARRAY_LENGTH(p_tcl_values) - 1,
+ numMatches,
+ matches);
+}
+
#if defined(FEAT_STL_OPT) || defined(PROTO)
/*
* The 'tabline' option is changed.
diff --git a/src/os_mswin.c b/src/os_mswin.c
index 512fa40..95e3cbc 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -18,20 +18,12 @@
#include <sys/types.h>
#include <signal.h>
#include <limits.h>
+
+// cproto fails on missing include files
#ifndef PROTO
# include <process.h>
-#endif
-
-#undef chdir
-#ifdef __GNUC__
-# ifndef __MINGW32__
-# include <dirent.h>
-# endif
-#else
# include <direct.h>
-#endif
-#ifndef PROTO
# if !defined(FEAT_GUI_MSWIN)
# include <shellapi.h>
# endif
@@ -41,37 +33,8 @@
# include <winspool.h>
# include <commdlg.h>
# endif
-
#endif // PROTO
-#ifdef __MINGW32__
-# ifndef FROM_LEFT_1ST_BUTTON_PRESSED
-# define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
-# endif
-# ifndef RIGHTMOST_BUTTON_PRESSED
-# define RIGHTMOST_BUTTON_PRESSED 0x0002
-# endif
-# ifndef FROM_LEFT_2ND_BUTTON_PRESSED
-# define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
-# endif
-# ifndef FROM_LEFT_3RD_BUTTON_PRESSED
-# define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
-# endif
-# ifndef FROM_LEFT_4TH_BUTTON_PRESSED
-# define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
-# endif
-
-/*
- * EventFlags
- */
-# ifndef MOUSE_MOVED
-# define MOUSE_MOVED 0x0001
-# endif
-# ifndef DOUBLE_CLICK
-# define DOUBLE_CLICK 0x0002
-# endif
-#endif
-
/*
* When generating prototypes for Win32 on Unix, these lines make the syntax
* errors disappear. They do not need to be correct.
@@ -144,37 +107,6 @@ static HWND s_hwnd = 0; // console window handle, set by GetConsoleHwnd()
int WSInitialized = FALSE; // WinSock is initialized
#endif
-// Don't generate prototypes here, because some systems do have these
-// functions.
-#if defined(__GNUC__) && !defined(PROTO)
-# ifndef __MINGW32__
-int _stricoll(char *a, char *b)
-{
- // the ANSI-ish correct way is to use strxfrm():
- char a_buff[512], b_buff[512]; // file names, so this is enough on Win32
- strxfrm(a_buff, a, 512);
- strxfrm(b_buff, b, 512);
- return strcoll(a_buff, b_buff);
-}
-
-char * _fullpath(char *buf, char *fname, int len)
-{
- LPTSTR toss;
-
- return (char *)GetFullPathName(fname, len, buf, &toss);
-}
-# endif
-
-# if !defined(__MINGW32__) || (__GNUC__ < 4)
-int _chdrive(int drive)
-{
- char temp [3] = "-:";
- temp[0] = drive + 'A' - 1;
- return !SetCurrentDirectory(temp);
-}
-# endif
-#endif
-
#ifndef PROTO
/*
@@ -430,16 +362,6 @@ slash_adjust(char_u *p)
}
}
-// Use 64-bit stat functions.
-#undef stat
-#undef _stat
-#undef _wstat
-#undef _fstat
-#define stat _stat64
-#define _stat _stat64
-#define _wstat _wstat64
-#define _fstat _fstat64
-
static int
read_reparse_point(const WCHAR *name, char_u *buf, DWORD *buf_len)
{
@@ -461,58 +383,6 @@ read_reparse_point(const WCHAR *name, char_u *buf, DWORD *buf_len)
return ok ? OK : FAIL;
}
- static int
-wstat_symlink_aware(const WCHAR *name, stat_T *stp)
-{
-#if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__MINGW32__)
- // Work around for VC12 or earlier (and MinGW). _wstat() can't handle
- // symlinks properly.
- // VC9 or earlier: _wstat() doesn't support a symlink at all. It retrieves
- // status of a symlink itself.
- // VC10: _wstat() supports a symlink to a normal file, but it doesn't
- // support a symlink to a directory (always returns an error).
- // VC11 and VC12: _wstat() doesn't return an error for a symlink to a
- // directory, but it doesn't set S_IFDIR flag.
- // MinGW: Same as VC9.
- int n;
- BOOL is_symlink = FALSE;
- HANDLE hFind, h;
- DWORD attr = 0;
- WIN32_FIND_DATAW findDataW;
-
- hFind = FindFirstFileW(name, &findDataW);
- if (hFind != INVALID_HANDLE_VALUE)
- {
- attr = findDataW.dwFileAttributes;
- if ((attr & FILE_ATTRIBUTE_REPARSE_POINT)
- && (findDataW.dwReserved0 == IO_REPARSE_TAG_SYMLINK))
- is_symlink = TRUE;
- FindClose(hFind);
- }
- if (is_symlink)
- {
- h = CreateFileW(name, FILE_READ_ATTRIBUTES,
- FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
- OPEN_EXISTING,
- (attr & FILE_ATTRIBUTE_DIRECTORY)
- ? FILE_FLAG_BACKUP_SEMANTICS : 0,
- NULL);
- if (h != INVALID_HANDLE_VALUE)
- {
- int fd;
-
- fd = _open_osfhandle((intptr_t)h, _O_RDONLY);
- n = _fstat(fd, (struct _stat *)stp);
- if ((n == 0) && (attr & FILE_ATTRIBUTE_DIRECTORY))
- stp->st_mode = (stp->st_mode & ~S_IFREG) | S_IFDIR;
- _close(fd);
- return n;
- }
- }
-#endif
- return _wstat(name, (struct _stat *)stp);
-}
-
char_u *
resolve_appexeclink(char_u *fname)
{
@@ -568,11 +438,76 @@ resolve_appexeclink(char_u *fname)
return utf16_to_enc(p, NULL);
}
+// Use 64-bit stat functions.
+#undef stat
+#undef _stat
+#undef _wstat
+#undef _fstat
+#define stat _stat64
+#define _stat _stat64
+#define _wstat _wstat64
+#define _fstat _fstat64
+
+/*
+ * Implements lstat() and stat() that can handle symlinks properly.
+ */
+ static int
+mswin_stat_impl(const WCHAR *name, stat_T *stp, const int resolve)
+{
+ int n;
+ int fd;
+ BOOL is_symlink = FALSE;
+ HANDLE hFind, h;
+ DWORD attr = 0;
+ DWORD flag = 0;
+ WIN32_FIND_DATAW findDataW;
+
+#ifdef _UCRT
+ if (resolve)
+ // Universal CRT can handle symlinks properly.
+ return _wstat(name, stp);
+#endif
+
+ hFind = FindFirstFileW(name, &findDataW);
+ if (hFind != INVALID_HANDLE_VALUE)
+ {
+ attr = findDataW.dwFileAttributes;
+ if ((attr & FILE_ATTRIBUTE_REPARSE_POINT)
+ && (findDataW.dwReserved0 == IO_REPARSE_TAG_SYMLINK))
+ is_symlink = TRUE;
+ FindClose(hFind);
+ }
+
+ // Use the plain old stat() whenever it's possible.
+ if (!is_symlink)
+ return _wstat(name, stp);
+
+ if (!resolve && is_symlink)
+ flag = FILE_FLAG_OPEN_REPARSE_POINT;
+ if (attr & FILE_ATTRIBUTE_DIRECTORY)
+ flag |= FILE_FLAG_BACKUP_SEMANTICS;
+
+ h = CreateFileW(name, FILE_READ_ATTRIBUTES,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, flag,
+ NULL);
+ if (h == INVALID_HANDLE_VALUE)
+ return -1;
+
+ fd = _open_osfhandle((intptr_t)h, _O_RDONLY);
+ n = _fstat(fd, (struct _stat *)stp);
+ if ((n == 0) && (attr & FILE_ATTRIBUTE_DIRECTORY))
+ stp->st_mode = (stp->st_mode & ~S_IFMT) | S_IFDIR;
+ _close(fd);
+
+ return n;
+}
+
/*
* stat() can't handle a trailing '/' or '\', remove it first.
+ * When 'resolve' is true behave as lstat() wrt symlinks.
*/
- int
-vim_stat(const char *name, stat_T *stp)
+ static int
+stat_impl(const char *name, stat_T *stp, const int resolve)
{
// WinNT and later can use _MAX_PATH wide characters for a pathname, which
// means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is
@@ -607,11 +542,23 @@ vim_stat(const char *name, stat_T *stp)
if (wp == NULL)
return -1;
- n = wstat_symlink_aware(wp, stp);
+ n = mswin_stat_impl(wp, stp, resolve);
vim_free(wp);
return n;
}
+ int
+vim_lstat(const char *name, stat_T *stp)
+{
+ return stat_impl(name, stp, FALSE);
+}
+
+ int
+vim_stat(const char *name, stat_T *stp)
+{
+ return stat_impl(name, stp, TRUE);
+}
+
#if (defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)) || defined(PROTO)
void
mch_settmode(tmode_T tmode UNUSED)
@@ -883,6 +830,40 @@ mch_icon_load(HANDLE *iconp)
0, mch_icon_load_cb, iconp);
}
+/*
+ * Fill the buffer 'buf' with 'len' random bytes.
+ * Returns FAIL if the OS PRNG is not available or something went wrong.
+ */
+ int
+mch_get_random(char_u *buf, int len)
+{
+ static int initialized = NOTDONE;
+ static HINSTANCE hInstLib;
+ static BOOL (WINAPI *pProcessPrng)(PUCHAR, ULONG);
+
+ if (initialized == NOTDONE)
+ {
+ hInstLib = vimLoadLib("bcryptprimitives.dll");
+ if (hInstLib != NULL)
+ pProcessPrng = (void *)GetProcAddress(hInstLib, "ProcessPrng");
+ if (hInstLib == NULL || pProcessPrng == NULL)
+ {
+ FreeLibrary(hInstLib);
+ initialized = FAIL;
+ }
+ else
+ initialized = OK;
+ }
+
+ if (initialized == FAIL)
+ return FAIL;
+
+ // According to the documentation this call cannot fail.
+ pProcessPrng(buf, len);
+
+ return OK;
+}
+
int
mch_libcall(
char_u *libname,
@@ -2940,7 +2921,7 @@ expand_font_enumproc(
// Filter only on ANSI. Otherwise will see a lot of random fonts that we
// usually don't want.
if (lf->lfCharSet != ANSI_CHARSET)
- return 1;
+ return 1;
int (*add_match)(char_u *) = (int (*)(char_u *))lparam;
@@ -2974,7 +2955,7 @@ gui_mch_expand_font(optexpand_T *args, void *param UNUSED, int (*add_match)(char
// Always fill in with the current font size as first option for
// convenience. We simply round to the closest integer for simplicity.
- int font_height = (int)round(
+ int font_height = (int)round(
pixels_to_points(-current_font_height, TRUE, (long_i)NULL));
vim_snprintf(buf, ARRAY_LENGTH(buf), "h%d", font_height);
add_match((char_u *)buf);
diff --git a/src/os_unix.c b/src/os_unix.c
index d155142..e77a4b2 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -2699,6 +2699,9 @@ mch_FullName(
if ((force || !mch_isFullName(fname))
&& ((p = vim_strrchr(fname, '/')) == NULL || p != fname))
{
+ if (p == NULL && STRCMP(fname, "..") == 0)
+ // Handle ".." without path separators.
+ p = fname + 2;
/*
* If the file name has a path, change to that directory for a moment,
* and then get the directory (and get back to where we were).
@@ -2707,7 +2710,7 @@ mch_FullName(
if (p != NULL)
{
if (STRCMP(p, "/..") == 0)
- // for "/path/dir/.." include the "/.."
+ // For "/path/dir/.." include the "/..".
p += 3;
#ifdef HAVE_FCHDIR
@@ -7498,9 +7501,9 @@ gpm_open(void)
{
Gpm_Close(); // We don't want to talk to xterm via gpm
- // Gpm_Close fails to properly restore the WINCH and TSTP handlers,
- // leading to Vim ignoring resize signals. We have to re-initialize
- // these handlers again here.
+ // Gpm_Close fails to properly restore the WINCH and TSTP handlers,
+ // leading to Vim ignoring resize signals. We have to re-initialize
+ // these handlers again here.
# ifdef SIGWINCH
mch_signal(SIGWINCH, sig_winch);
# endif
@@ -7722,6 +7725,37 @@ sig_sysmouse SIGDEFARG(sigarg)
}
#endif // FEAT_SYSMOUSE
+/*
+ * Fill the buffer 'buf' with 'len' random bytes.
+ * Returns FAIL if the OS PRNG is not available or something went wrong.
+ */
+ int
+mch_get_random(char_u *buf, int len)
+{
+ static int dev_urandom_state = NOTDONE;
+
+ if (dev_urandom_state == FAIL)
+ return FAIL;
+
+ int fd = open("/dev/urandom", O_RDONLY);
+
+ // Attempt reading /dev/urandom.
+ if (fd == -1)
+ dev_urandom_state = FAIL;
+ else if (read(fd, buf, len) == len)
+ {
+ dev_urandom_state = OK;
+ close(fd);
+ }
+ else
+ {
+ dev_urandom_state = FAIL;
+ close(fd);
+ }
+
+ return dev_urandom_state;
+}
+
#if defined(FEAT_LIBCALL) || defined(PROTO)
typedef char_u * (*STRPROCSTR)(char_u *);
typedef char_u * (*INTPROCSTR)(int);
diff --git a/src/os_w32dll.c b/src/os_w32dll.c
index e7ba99b..651f96c 100644
--- a/src/os_w32dll.c
+++ b/src/os_w32dll.c
@@ -7,7 +7,7 @@
* See README.txt for an overview of the Vim source code.
*/
/*
- * Windows GUI: main program (DLL) entry point:
+ * Windows GUI/Console: main program (DLL) entry point:
*
* Ron Aaron <ronaharon@yahoo.com> wrote this and the DLL support code.
* Adapted by Ken Takata.
diff --git a/src/os_w32exe.c b/src/os_w32exe.c
index c4f0294..7aa4ead 100644
--- a/src/os_w32exe.c
+++ b/src/os_w32exe.c
@@ -8,10 +8,10 @@
* See README.txt for an overview of the Vim source code.
*/
/*
- * Windows GUI: main program (EXE) entry point:
+ * Windows GUI/Console: main program (EXE) entry point:
*
- * Ron Aaron <ronaharon@yahoo.com> wrote this and the (now deleted) DLL support
- * code.
+ * Ron Aaron <ronaharon@yahoo.com> wrote this and the DLL support code.
+ * Adapted by Ken Takata.
*/
#include "vim.h"
@@ -20,32 +20,74 @@
__declspec(dllimport)
#endif
int VimMain(int argc, char **argv);
-#ifndef VIMDLL
+
+#ifdef VIMDLL
+# define SaveInst(hInst) // Do nothing
+#else
void SaveInst(HINSTANCE hInst);
#endif
-#ifndef PROTO
-# ifdef FEAT_GUI
+#ifdef FEAT_GUI
int WINAPI
wWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInst UNUSED,
LPWSTR lpszCmdLine UNUSED,
int nCmdShow UNUSED)
-# else
+{
+ SaveInst(hInstance);
+ return VimMain(0, NULL);
+}
+#else
int
wmain(int argc UNUSED, wchar_t **argv UNUSED)
-# endif
{
-# ifndef VIMDLL
-# ifdef FEAT_GUI
- SaveInst(hInstance);
-# else
SaveInst(GetModuleHandleW(NULL));
-# endif
-# endif
+ return VimMain(0, NULL);
+}
+#endif
+
+#ifdef USE_OWNSTARTUP
+// Use our own entry point and don't use the default CRT startup code to
+// reduce the size of (g)vim.exe. This works only when VIMDLL is defined.
+//
+// For MSVC, the /GS- compiler option is needed to avoid the undefined symbol
+// error. (It disables the security check. However, it affects only this
+// function and doesn't have any effect on Vim itself.)
+// For MinGW, the -nostdlib compiler option and the --entry linker option are
+// needed.
+# ifdef FEAT_GUI
+ void WINAPI
+wWinMainCRTStartup(void)
+{
VimMain(0, NULL);
+}
+# else
+ void
+wmainCRTStartup(void)
+{
+ VimMain(0, NULL);
+}
+# endif
+#endif // USE_OWNSTARTUP
+
+
+#if defined(VIMDLL) && defined(FEAT_MZSCHEME)
- return 0;
+# if defined(_MSC_VER)
+static __declspec(thread) void *tls_space;
+extern intptr_t _tls_index;
+# elif defined(__MINGW32__)
+static __thread void *tls_space;
+extern intptr_t _tls_index;
+# endif
+
+// Get TLS information that is needed for if_mzsch.
+ __declspec(dllexport) void
+get_tls_info(void ***ptls_space, intptr_t *ptls_index)
+{
+ *ptls_space = &tls_space;
+ *ptls_index = _tls_index;
+ return;
}
#endif
diff --git a/src/os_win32.c b/src/os_win32.c
index 9947150..6384ac8 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -34,52 +34,14 @@
#ifndef PROTO
# include <process.h>
# include <winternl.h>
-#endif
-
-#undef chdir
-#ifdef __GNUC__
-# ifndef __MINGW32__
-# include <dirent.h>
-# endif
-#else
# include <direct.h>
-#endif
-#ifndef PROTO
# if !defined(FEAT_GUI_MSWIN)
# include <shellapi.h>
# endif
-#endif
-
-#ifdef FEAT_JOB_CHANNEL
-# include <tlhelp32.h>
-#endif
-#ifdef __MINGW32__
-# ifndef FROM_LEFT_1ST_BUTTON_PRESSED
-# define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
-# endif
-# ifndef RIGHTMOST_BUTTON_PRESSED
-# define RIGHTMOST_BUTTON_PRESSED 0x0002
-# endif
-# ifndef FROM_LEFT_2ND_BUTTON_PRESSED
-# define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
-# endif
-# ifndef FROM_LEFT_3RD_BUTTON_PRESSED
-# define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
-# endif
-# ifndef FROM_LEFT_4TH_BUTTON_PRESSED
-# define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
-# endif
-
-/*
- * EventFlags
- */
-# ifndef MOUSE_MOVED
-# define MOUSE_MOVED 0x0001
-# endif
-# ifndef DOUBLE_CLICK
-# define DOUBLE_CLICK 0x0002
+# ifdef FEAT_JOB_CHANNEL
+# include <tlhelp32.h>
# endif
#endif
@@ -1302,6 +1264,13 @@ decode_key_event(
}
}
}
+ else if (pker->wVirtualKeyCode == VK_INSERT
+ && (nModifs & SHIFT) != 0
+ && (nModifs & ~SHIFT) == 0)
+ {
+ *pmodifiers = 0;
+ *pch2 = VirtKeyMap[i].chShift;
+ }
else
{
*pch2 = VirtKeyMap[i].chAlone;
@@ -2762,12 +2731,6 @@ theend:
#endif // FEAT_GUI_MSWIN
}
-#ifndef PROTO
-# ifndef __MINGW32__
-# include <shellapi.h> // required for FindExecutable()
-# endif
-#endif
-
/*
* Return TRUE if "name" is an executable file, FALSE if not or it doesn't exist.
* When returning TRUE and "path" is not NULL save the path and set "*path" to
@@ -3598,6 +3561,10 @@ mch_exit_c(int r)
vtp_exit();
stoptermcap();
+ // Switch back to main screen buffer.
+ if (use_alternate_screen_buffer)
+ vtp_printf("\033[?1049l");
+
if (g_fWindInitCalled)
settmode(TMODE_COOK);
@@ -5529,11 +5496,7 @@ mch_call_shell(
* CTRL-C, Ctrl-Break or illegal instruction might otherwise kill us.
*/
mch_signal(SIGINT, SIG_IGN);
-#if defined(__GNUC__) && !defined(__MINGW32__)
- mch_signal(SIGKILL, SIG_IGN);
-#else
mch_signal(SIGBREAK, SIG_IGN);
-#endif
mch_signal(SIGILL, SIG_IGN);
mch_signal(SIGFPE, SIG_IGN);
mch_signal(SIGSEGV, SIG_IGN);
@@ -5768,11 +5731,7 @@ mch_call_shell(
resettitle();
mch_signal(SIGINT, SIG_DFL);
-#if defined(__GNUC__) && !defined(__MINGW32__)
- mch_signal(SIGKILL, SIG_DFL);
-#else
mch_signal(SIGBREAK, SIG_DFL);
-#endif
mch_signal(SIGILL, SIG_DFL);
mch_signal(SIGFPE, SIG_DFL);
mch_signal(SIGSEGV, SIG_DFL);
@@ -6379,10 +6338,6 @@ termcap_mode_end(void)
RestoreConsoleBuffer(cb, p_rs);
restore_console_color_rgb();
- // Switch back to main screen buffer.
- if (exiting && use_alternate_screen_buffer)
- vtp_printf("\033[?1049l");
-
if (!USE_WT && (p_rs || exiting))
{
/*
diff --git a/src/po/Make_cyg.mak b/src/po/Make_cyg.mak
index 705858d..c04837e 100644
--- a/src/po/Make_cyg.mak
+++ b/src/po/Make_cyg.mak
@@ -16,7 +16,7 @@ endif
include Make_all.mak
PACKAGE = vim
-VIM = ../vim
+VIMPROG = ../vim
# Uncomment one of the lines below or modify it to put the path to your
# gettext binaries
@@ -64,18 +64,18 @@ PO_INPUTLIST = \
vim.desktop.in
first_time: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
- $(VIM) -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
$(XGETTEXT) --default-domain=$(LANGUAGE) \
--add-comments $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
- $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
$(RM) *.js
$(PACKAGE).pot: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
- $(VIM) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
$(XGETTEXT) --default-domain=$(PACKAGE) \
--add-comments $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
$(MV) $(PACKAGE).po $(PACKAGE).pot
- $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
$(RM) *.js
# Don't add a dependency here, we only want to update the .po files manually
diff --git a/src/po/Make_ming.mak b/src/po/Make_ming.mak
index 42dab84..21d2d20 100644
--- a/src/po/Make_ming.mak
+++ b/src/po/Make_ming.mak
@@ -23,9 +23,9 @@ include Make_all.mak
PACKAGE = vim
ifeq (sh.exe, $(SHELL))
-VIM = ..\vim
+VIMPROG = ..\vim
else
-VIM = ../vim
+VIMPROG = ../vim
endif
# Uncomment one of the lines below or modify it to put the path to your
@@ -77,18 +77,18 @@ PO_INPUTLIST = \
vim.desktop.in
first_time: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
- $(VIM) -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
$(XGETTEXT) --default-domain=$(LANGUAGE) \
--add-comments $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
- $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
$(RM) *.js
$(PACKAGE).pot: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
- $(VIM) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
$(XGETTEXT) --default-domain=$(PACKAGE) \
--add-comments $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
$(MV) $(PACKAGE).po $(PACKAGE).pot
- $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
$(RM) *.js
# Don't add a dependency here, we only want to update the .po files manually
diff --git a/src/po/Make_mvc.mak b/src/po/Make_mvc.mak
index a9a69fd..f567d88 100644
--- a/src/po/Make_mvc.mak
+++ b/src/po/Make_mvc.mak
@@ -40,7 +40,9 @@ VIMRUNTIME = ..\..\runtime
PACKAGE = vim
# Correct the following line for the where executeable file vim is
# installed. Please do not put the path in quotes.
-VIM = ..\vim.exe
+!IFNDEF VIMPROG
+VIMPROG = ..\vim.exe
+!ENDIF
# Correct the following line for the directory where gettext et al is
# installed. Please do not put the path in quotes.
@@ -102,7 +104,7 @@ originals : $(MOFILES)
converted: $(MOCONVERTED)
.po.ck:
- "$(VIM)" -u NONE --noplugins -e -s -X --cmd "set enc=utf-8" -S check.vim \
+ "$(VIMPROG)" -u NONE --noplugins -e -s -X --cmd "set enc=utf-8" -S check.vim \
-c "if error == 0 | q | else | num 2 | cq | endif" $<
$(TOUCH_TARGET)
@@ -122,9 +124,7 @@ nb.po: no.po
ja.sjis.po: ja.po
@$(MAKE) -nologo -f Make_mvc.mak sjiscorr
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t CP932 $? | .\sjiscorr.exe > $@
-!ELSEIF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f UTF-8 -t CP932 $? | .\sjiscorr.exe > $@
!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
@@ -146,23 +146,19 @@ sjiscorr: sjiscorr.c
# Convert ja.po to create ja.euc-jp.po.
ja.euc-jp.po: ja.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t EUC-JP -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f UTF-8 -t EUC-JP $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(65001)), \
[System.Text.Encoding]::GetEncoding(20932))
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(20932)) -replace \
'charset=utf-8', 'charset=EUC-JP'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(20932))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(20932)) -replace \
'# Original translations', \
@@ -173,23 +169,19 @@ ja.euc-jp.po: ja.po
# Convert cs.po to create cs.cp1250.po.
cs.cp1250.po: cs.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t CP1250 -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f ISO-8859-2 -t CP1250 $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(28592)), \
[System.Text.Encoding]::GetEncoding(1250))
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1250)) -replace \
'charset=iso-8859-2', 'charset=CP1250'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(1250))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1250)) -replace \
'# Original translations', \
@@ -200,23 +192,19 @@ cs.cp1250.po: cs.po
# Convert pl.po to create pl.cp1250.po.
pl.cp1250.po: pl.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t CP1250 -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f ISO-8859-2 -t CP1250 $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(28592)), \
[System.Text.Encoding]::GetEncoding(1250))
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1250)) -replace \
'charset=iso-8859-2', 'charset=CP1250'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(1250))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1250)) -replace \
'# Original translations', \
@@ -227,20 +215,16 @@ pl.cp1250.po: pl.po
# Convert pl.po to create pl.UTF-8.po.
pl.UTF-8.po: pl.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t UTF-8 -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f ISO-8859-2 -t UTF-8 $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(28592)))
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) (Get-Content -Raw -Encoding UTF8 $@ \
^| % {$$_-replace 'charset=iso-8859-2', 'charset=UTF-8'}) \
^| 1>nul New-Item -Force -Path . -ItemType file -Name $@
-!ENDIF
$(PS) $(PSFLAGS) (Get-Content -Raw -Encoding UTF8 $@ \
^| % {$$_-replace '# Original translations', \
'# Generated from $?, DO NOT EDIT'}) \
@@ -249,23 +233,19 @@ pl.UTF-8.po: pl.po
# Convert sk.po to create sk.cp1250.po.
sk.cp1250.po: sk.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t CP1250 -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f ISO-8859-2 -t CP1250 $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(28592)), \
[System.Text.Encoding]::GetEncoding(1250))
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1250)) -replace \
'charset=iso-8859-2', 'charset=CP1250'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(1250))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1250)) -replace \
'# Original translations', \
@@ -276,24 +256,20 @@ sk.cp1250.po: sk.po
# Convert zh_CN.UTF-8.po to create zh_CN.po.
zh_CN.po: zh_CN.UTF-8.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t GB2312 -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f UTF-8 -t GB2312 $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(65001)), \
[System.Text.Encoding]::GetEncoding(936))
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(936)) -replace \
'charset=UTF-8', 'charset=GB2312'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(936))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(936)) -replace \
'# Original translations', \
@@ -326,24 +302,19 @@ zh_CN.cp936.po: zh_CN.UTF-8.po
# Convert zh_TW.UTF-8.po to create zh_TW.po.
zh_TW.po: zh_TW.UTF-8.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t BIG5 -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f UTF-8 -t BIG5 $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(65001)), \
[System.Text.Encoding]::GetEncoding(950))
-
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(950)) -replace \
'charset=UTF-8', 'charset=BIG5'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(950))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(950)) -replace \
'# Original translations', \
@@ -371,9 +342,7 @@ zh_TW.po: zh_TW.UTF-8.po
#zh_TW.po: zh_TW.UTF-8.po
# @$(MAKE) -nologo -f Make_mvc.mak big5corr
# -$(RM) $@
-#!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
-# "$(GETTEXT_PATH)\msgconv.exe" -t BIG5 $? | .\big5corr.exe > $@
-#!ELSEIF DEFINED (ICONV)
+#!IF DEFINED (ICONV)
# $(ICONV) -f UTF-8 -t BIG5 $? | .\big5corr.exe > $@
#!ELSE
# $(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
@@ -396,24 +365,20 @@ zh_TW.po: zh_TW.UTF-8.po
# Convert ko.UTF-8.po to create ko.po.
ko.po: ko.UTF-8.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t EUC-KR -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f UTF-8 -t EUC-KR $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(65001)), \
[System.Text.Encoding]::GetEncoding(51949))
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(51949)) -replace \
'charset=UTF-8', 'charset=EUC-KR'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(51949))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(51949)) -replace \
'# Original translations', \
@@ -424,24 +389,19 @@ ko.po: ko.UTF-8.po
# Convert ru.po to create ru.cp1251.po.
ru.cp1251.po: ru.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t CP1251 -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f UTF-8 -t CP1251 $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(65001)), \
[System.Text.Encoding]::GetEncoding(1251))
-
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1251)) -replace \
'charset=UTF-8', 'charset=CP1251'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(1251))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1251)) -replace \
'# Original translations', \
@@ -452,24 +412,19 @@ ru.cp1251.po: ru.po
# Convert uk.po to create uk.cp1251.po.
uk.cp1251.po: uk.po
-$(RM) $@
-!IF EXIST ("$(GETTEXT_PATH)\msgconv.exe")
- "$(GETTEXT_PATH)\msgconv.exe" -t CP1251 -o $@ $?
-!ELSE
-! IF DEFINED (ICONV)
+!IF DEFINED (ICONV)
$(ICONV) -f UTF-8 -t CP1251 $? > $@
-! ELSE
+!ELSE
$(PS) $(PSFLAGS) [System.IO.File]::WriteAllText(\"$@\", \
[System.IO.File]::ReadAllText(\"$?\", \
[System.Text.Encoding]::GetEncoding(65001)), \
[System.Text.Encoding]::GetEncoding(1251))
-
-! ENDIF
+!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1251)) -replace \
'charset=UTF-8', 'charset=CP1251'; \
[System.IO.File]::WriteAllText(\"$@\", $$out, \
[System.Text.Encoding]::GetEncoding(1251))
-!ENDIF
$(PS) $(PSFLAGS) $$out = [System.IO.File]::ReadAllText(\"$@\", \
[System.Text.Encoding]::GetEncoding(1251)) -replace \
'# Original translations', \
@@ -496,27 +451,28 @@ files: $(PO_INPUTLIST)
$(LS) $(LSFLAGS) $(PO_INPUTLIST) > .\files
first_time: files
- "$(VIM)" -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).po \
+ "$(VIMPROG)" -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).po \
$(PO_VIM_INPUTLIST)
+ @ copy /b .\files+.\vim_to_js .\allfiles
set OLD_PO_FILE_INPUT=yes
set OLD_PO_FILE_OUTPUT=yes
$(XGETTEXT) --default-domain=$(LANGUAGE) --add-comments $(XGETTEXT_KEYWORDS) \
- --files-from=.\files $(PO_VIM_JSLIST)
- "$(VIM)" -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).po \
+ --files-from=.\allfiles
+ "$(VIMPROG)" -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).po \
$(PO_VIM_INPUTLIST)
- $(RM) *.js
+ $(RM) *.js .\vim_to_js
$(PACKAGE).pot: files
- "$(VIM)" -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot \
+ "$(VIMPROG)" -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot \
$(PO_VIM_INPUTLIST)
+ @ copy /b .\files+.\vim_to_js .\allfiles
set OLD_PO_FILE_INPUT=yes
set OLD_PO_FILE_OUTPUT=yes
- $(XGETTEXT) --default-domain=$(PACKAGE) --add-comments $(XGETTEXT_KEYWORDS) \
- --files-from=.\files $(PO_VIM_JSLIST)
- $(MV) $(PACKAGE).po $(PACKAGE).pot
- "$(VIM)" -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot \
+ $(XGETTEXT) --default-domain=$(PACKAGE) --output=$(PACKAGE).pot \
+ --add-comments $(XGETTEXT_KEYWORDS) --files-from=.\allfiles
+ "$(VIMPROG)" -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot \
$(PO_VIM_INPUTLIST)
- $(RM) *.js
+ $(RM) *.js .\vim_to_js
# Only original translations with default encoding should be updated.
# The files that are converted to a different encoding clearly state "DO NOT EDIT".
@@ -541,16 +497,39 @@ install-all: all
"$(VIMRUNTIME)\lang\%%l\LC_MESSAGES\$(PACKAGE).mo"
cleanup-po: $(LANGUAGE).po
- "$(VIM)" -u NONE -e -X -S cleanup.vim -c wq $(LANGUAGE).po
+ "$(VIMPROG)" -u NONE -e -X -S cleanup.vim -c wq $(LANGUAGE).po
cleanup-po-all: $(POFILES)
- !"$(VIM)" -u NONE -e -X -S cleanup.vim -c wq $**
+ !"$(VIMPROG)" -u NONE -e -X -S cleanup.vim -c wq $**
+
+#######
+# For translations of plug-ins
+#######
+
+# Preparing the POT file of the plug-in package
+POT_PLUGPACKAGE_PATH = $(MAKEDIR)
+$(PLUGPACKAGE).pot : $(PO_PLUG_INPUTLIST)
+ "$(VIMPROG)" -u NONE --not-a-term -S tojavascript.vim \
+ $(PLUGPACKAGE).pot $**
+ $(XGETTEXT) --from-code=UTF-8 --default-domain=$(PLUGPACKAGE) \
+ --package-name=$(PLUGPACKAGE) \
+ --output-dir="$(POT_PLUGPACKAGE_PATH)" \
+ --output=$(PLUGPACKAGE).pot --files-from=.\vim_to_js
+ "$(VIMPROG)" -u NONE --not-a-term -S fixfilenames.vim \
+ "$(POT_PLUGPACKAGE_PATH)\$(PLUGPACKAGE).pot" $**
+ $(RM) *.js .\vim_to_js
+
+# Converting the PO file of the plug-in package to the binary format of the MO file
+MO_PLUGPACKAGE_PATH = $(MAKEDIR)
+$(PLUGPACKAGE).mo : $(PO_PLUGPACKAGE)
+ $(MSGFMT) -o $(MO_PLUGPACKAGE_PATH)\$@ $?
+
clean: checkclean
$(RM) *.mo
$(RM) *.pot
$(RM) *.orig
- $(RM) files
+ $(RM) files allfiles
$(RM) sjiscorr.obj sjiscorr.exe
# $(RM) big5corr.obj big5corr.exe
diff --git a/src/po/Makefile b/src/po/Makefile
index cc4008f..95259a6 100644
--- a/src/po/Makefile
+++ b/src/po/Makefile
@@ -11,7 +11,7 @@ include Make_all.mak
PACKAGE = vim
SHELL = /bin/sh
-VIM = ../vim
+VIMPROG = ../vim
# MacOS sed is locale aware, set $LANG to avoid problems.
SED = LANG=C sed
@@ -40,8 +40,8 @@ converted: $(MOCONVERTED)
$(MSGFMTCMD) -o $@ $<
.po.ck:
- $(VIM) -u NONE --noplugins -e -s -X --cmd "set enc=utf-8" -S check.vim \
- -c "if error == 0 | q | else | num 2 | cq | endif" $<
+ $(VIMPROG) -u NONE --noplugins -e -s -X --cmd "set enc=utf-8" \
+ -S check.vim -c "if error == 0 | q | else | num 2 | cq | endif" $< >/dev/null
touch $@
check: $(CHECKFILES)
@@ -107,55 +107,55 @@ nb.po: no.po
ja.sjis.po: ja.po
@$(MAKE) sjiscorr
rm -f $@
- iconv -f UTF-8 -t CP932 $< | ./sjiscorr > $@
+ iconv -f UTF-8 -t CP932 $? | ./sjiscorr > $@
sjiscorr: sjiscorr.c
$(CC) -o sjiscorr sjiscorr.c
ja.euc-jp.po: ja.po
- iconv -f UTF-8 -t EUC-JP $< | \
+ iconv -f UTF-8 -t EUC-JP $? | \
$(SED) -e 's/charset=[uU][tT][fF]-8/charset=EUC-JP/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert cs.po to create cs.cp1250.po.
cs.cp1250.po: cs.po
rm -f $@
- iconv -f ISO-8859-2 -t CP1250 $< | \
+ iconv -f ISO-8859-2 -t CP1250 $? | \
$(SED) -e 's/charset=[iI][sS][oO]-8859-2/charset=CP1250/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert pl.po to create pl.cp1250.po.
pl.cp1250.po: pl.po
rm -f $@
- iconv -f ISO-8859-2 -t CP1250 $< | \
+ iconv -f ISO-8859-2 -t CP1250 $? | \
$(SED) -e 's/charset=[iI][sS][oO]-8859-2/charset=CP1250/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert pl.po to create pl.UTF-8.po.
pl.UTF-8.po: pl.po
rm -f $@
- iconv -f ISO-8859-2 -t UTF-8 $< | \
+ iconv -f ISO-8859-2 -t UTF-8 $? | \
$(SED) -e 's/charset=[iI][sS][oO]-8859-2/charset=UTF-8/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert sk.po to create sk.cp1250.po.
sk.cp1250.po: sk.po
rm -f $@
- iconv -f ISO-8859-2 -t CP1250 $< | \
+ iconv -f ISO-8859-2 -t CP1250 $? | \
$(SED) -e 's/charset=[iI][sS][oO]-8859-2/charset=CP1250/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert zh_CN.UTF-8.po to create zh_CN.po.
zh_CN.po: zh_CN.UTF-8.po
rm -f $@
- iconv -f UTF-8 -t GB2312 $< | \
+ iconv -f UTF-8 -t GB2312 $? | \
$(SED) -e 's/charset=[uU][tT][fF]-8/charset=GB2312/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert zh_CN.UTF-8.po to create zh_CN.cp936.po.
@@ -163,17 +163,17 @@ zh_CN.po: zh_CN.UTF-8.po
# This used to convert from zh_CN.po, but that results in a conversion error.
zh_CN.cp936.po: zh_CN.UTF-8.po
rm -f $@
- iconv -f UTF-8 -t CP936 $< | \
+ iconv -f UTF-8 -t CP936 $? | \
$(SED) -e 's/charset=[uU][tT][fF]-8/charset=GBK/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert zh_TW.UTF-8.po to create zh_TW.po.
zh_TW.po: zh_TW.UTF-8.po
rm -f $@
- iconv -f UTF-8 -t BIG5 $< | \
+ iconv -f UTF-8 -t BIG5 $? | \
$(SED) -e 's/charset=[uU][tT][fF]-8/charset=BIG5/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
@@ -197,7 +197,7 @@ zh_TW.po: zh_TW.UTF-8.po
#zh_TW.po: zh_TW.UTF-8.po
# @$(MAKE) big5corr
# rm -f $@
-# iconv -f UTF-8 -t BIG5 $< | ./big5corr > $@
+# iconv -f UTF-8 -t BIG5 $? | ./big5corr > $@
# 06.11.23, added by Restorer
@@ -209,25 +209,25 @@ zh_TW.po: zh_TW.UTF-8.po
# Convert ko.UTF-8.po to create ko.po.
ko.po: ko.UTF-8.po
rm -f $@
- iconv -f UTF-8 -t EUC-KR $< | \
+ iconv -f UTF-8 -t EUC-KR $? | \
$(SED) -e 's/charset=[uU][tT][fF]-8/charset=EUC-KR/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert ru.po to create ru.cp1251.po.
ru.cp1251.po: ru.po
rm -f $@
- iconv -f UTF-8 -t CP1251 $< | \
+ iconv -f UTF-8 -t CP1251 $? | \
$(SED) -e 's/charset=[uU][tT][fF]-8/charset=CP1251/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
# Convert uk.po to create uk.cp1251.po.
uk.cp1251.po: uk.po
rm -f $@
- iconv -f UTF-8 -t CP1251 $< | \
+ iconv -f UTF-8 -t CP1251 $? | \
$(SED) -e 's/charset=[uU][tT][fF]-8/charset=CP1251/' \
- -e 's/# Original translations/# Generated from $<, DO NOT EDIT/' \
+ -e 's/# Original translations/# Generated from $?, DO NOT EDIT/' \
> $@
prefixcheck:
@@ -241,6 +241,7 @@ prefixcheck:
clean: checkclean
rm -f core core.* *.old.po *.mo *.pot sjiscorr
rm -f LINGUAS vim.desktop gvim.desktop tmp_*desktop
+ rm -f ./allfiles
# rm -f big5corr
distclean: clean
@@ -261,21 +262,25 @@ PO_INPUTLIST = \
$(PACKAGE).pot: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
# Convert the Vim scripts to (what looks like) Javascript.
- $(VIM) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot \
+ $(PO_VIM_INPUTLIST)
+ @ echo ${PO_INPUTLIST} | tr ' ' '\n' > ./allfiles
+ @ cat ./vim_to_js >> ./allfiles
# Create vim.pot.
- $(XGETTEXT) --default-domain=$(PACKAGE) --add-comments \
- $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
- mv -f $(PACKAGE).po $(PACKAGE).pot
+ $(XGETTEXT) --default-domain=$(PACKAGE) --output=$(PACKAGE).pot \
+ --add-comments $(XGETTEXT_KEYWORDS) --files-from=./allfiles
# Fix Vim scripts names, so that "gf" works.
- $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot \
+ $(PO_VIM_INPUTLIST)
# Delete the temporary files.
- rm *.js
+ rm -f *.js ./vim_to_js
vim.desktop: vim.desktop.in $(POFILES)
echo $(LANGUAGES) | tr " " "\n" |$(SED) -e '/\./d' | sort > LINGUAS
$(MSGFMT) --desktop -d . --template vim.desktop.in -o tmp_vim.desktop
rm -f LINGUAS
- if command -v desktop-file-validate; then desktop-file-validate tmp_vim.desktop; fi
+ if command -v desktop-file-validate; \
+ then desktop-file-validate tmp_vim.desktop; fi
mv tmp_vim.desktop vim.desktop
# The dependency on vim.desktop is only to avoid the two targets are build at
@@ -284,7 +289,8 @@ gvim.desktop: gvim.desktop.in $(POFILES) vim.desktop
echo $(LANGUAGES) | tr " " "\n" |$(SED) -e '/\./d' | sort > LINGUAS
$(MSGFMT) --desktop -d . --template gvim.desktop.in -o tmp_gvim.desktop
rm -f LINGUAS
- if command -v desktop-file-validate; then desktop-file-validate tmp_gvim.desktop; fi
+ if command -v desktop-file-validate; \
+ then desktop-file-validate tmp_gvim.desktop; fi
mv tmp_gvim.desktop gvim.desktop
# Only original translations with default encoding should be updated.
@@ -301,3 +307,28 @@ $(LANGUAGES):
else \
echo "msgmerge for $@.po failed!"; mv $@.po.old $@.po; \
fi
+
+
+#######
+# For translations of plug-ins
+#######
+
+# Preparing the POT file of the plug-in package
+POT_PLUGPACKAGE_PATH = $(PWD)
+$(PLUGPACKAGE).pot: $(PO_PLUG_INPUTLIST)
+ $(VIMPROG) -u NONE --not-a-term -S tojavascript.vim \
+ $(PLUGPACKAGE).pot $?
+ $(XGETTEXT) --from-code=UTF-8 --default-domain=$(PLUGPACKAGE) \
+ --package-name=$(PLUGPACKAGE) \
+ --output-dir=$(POT_PLUGPACKAGE_PATH) \
+ --output=$(PLUGPACKAGE).pot --files-from=./vim_to_js
+ $(VIMPROG) -u NONE --not-a-term -S fixfilenames.vim \
+ $(POT_PLUGPACKAGE_PATH)/$(PLUGPACKAGE).pot $?
+ rm -f *.js ./vim_to_js
+
+# Converting the PO file of the plug-in package to the binary format of the MO
+MO_PLUGPACKAGE_PATH = $(PWD)
+$(PLUGPACKAGE).mo: $(PO_PLUGPACKAGE)
+ $(MSGFMTCMD) -o $(MO_PLUGPACKAGE_PATH)/$@ $?
+
+# vim: set noet sw=8 ts=8 sts=0 wm=0 tw=0 ft=make:
diff --git a/src/po/README.txt b/src/po/README.txt
index 50aff6a..801f5e5 100644
--- a/src/po/README.txt
+++ b/src/po/README.txt
@@ -160,3 +160,20 @@ convert ja.po to EUC-JP (supposed as your system encoding):
"Content-Type: text/plain; charset=EUC-JP\n"
There are examples in the Makefile for the conversions already supported.
+
+
+TRANSLATION OF VIM THE EDITOR PLUG-INS
+
+Vim supports displaying plugin messages for various native languages.
+Translation is available both for plugins that are supplied as part of the Vim
+editor (e.g. "optwin.vim") and for third-party plugin packages.
+
+To translate the plugins supplied with the Vim editor, you must specify a
+gettext() function call for the strings you want to translate.
+The translation of these strings will be retrieved by gettext() from the MO
+file "vim.mo".
+
+For third-party plugins, it is necessary to specify a one-time call to the
+bindtextdomain() function in scripts containing translation strings and for
+all message strings to add a {package} argument to the gettext() function. For
+more information, see ":help package-translation".
diff --git a/src/po/README_mvc.txt b/src/po/README_mvc.txt
index ae9fa2b..e5fd85e 100644
--- a/src/po/README_mvc.txt
+++ b/src/po/README_mvc.txt
@@ -137,4 +137,22 @@ command:
nmake.exe -f Make_mvc.mak clean
+
+TRANSLATION OF VIM THE EDITOR PLUG-INS
+
+Vim supports displaying plugin messages for various native languages.
+Translation is available both for plugins that are supplied as part of the Vim
+editor (e.g. "optwin.vim") and for third-party plugin packages.
+
+To translate the plugins supplied with the Vim editor, you must specify a
+gettext() function call for the strings you want to translate.
+The translation of these strings will be retrieved by gettext() from the MO
+file "vim.mo".
+
+For third-party plugins, it is necessary to specify a one-time call to the
+bindtextdomain() function in scripts containing translation strings and for
+all message strings to add a {package} argument to the gettext() function. For
+more information, see ":help package-translation".
+
+
vim:tw=78:
diff --git a/src/po/ca.po b/src/po/ca.po
index caf02a9..052caad 100644
--- a/src/po/ca.po
+++ b/src/po/ca.po
@@ -1326,8 +1326,8 @@ msgstr " Compleció definida per l'usuari (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni-compleció (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Suggeriment d'ortografia (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Suggeriment d'ortografia (^S^N^P)"
# i C-x C-p
msgid " Keyword Local completion (^N^P)"
diff --git a/src/po/cleanup.vim b/src/po/cleanup.vim
index 1af188a..5e1b967 100644
--- a/src/po/cleanup.vim
+++ b/src/po/cleanup.vim
@@ -9,24 +9,24 @@ let s:was_diff = &diff
setl nodiff
" untranslated message preceded by c-format or comment
-silent g/^#, c-format\n#/.d
-silent g/^#\..*\n#/.d
+silent g/^#, c-format\n#/.d _
+silent g/^#\..*\n#/.d _
" c-format comments have no effect, the check.vim scripts checks it.
" But they might still be useful?
-" silent g/^#, c-format$/d
+" silent g/^#, c-format$/d _
-silent g/^#[:~] /d
+silent g/^#[:~] /d _
silent g/^#, fuzzy\(, .*\)\=\nmsgid ""\@!/.+1,/^$/-1s/^/#\~ /
silent g/^msgstr"/s//msgstr "/
silent g/^msgid"/s//msgid "/
silent g/^msgstr ""\(\n"\)\@!/?^msgid?,.s/^/#\~ /
" Comments only useful for the translator
-silent g/^#\. /d
+silent g/^#\./d _
" clean up empty lines
-silent g/^\n\n\n/.d
+silent g/^\n\n\n/.d _
silent! %s/\n\+\%$//
if s:was_diff
diff --git a/src/po/cs.cp1250.po b/src/po/cs.cp1250.po
index bed2595..24209c9 100644
--- a/src/po/cs.cp1250.po
+++ b/src/po/cs.cp1250.po
@@ -13,7 +13,7 @@ msgstr ""
"Last-Translator: Jiøí Pavlovský <jpavlovsky@mbox.vol.cz>\n"
"Language-Team: Czech <cs@li.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=cp1250\n"
+"Content-Type: text/plain; charset=CP1250\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "E82: Cannot allocate any buffer, exiting..."
diff --git a/src/po/da.po b/src/po/da.po
index 80cc6fe..4cb212a 100644
--- a/src/po/da.po
+++ b/src/po/da.po
@@ -412,8 +412,8 @@ msgstr " Fuldførelse af brugerdefineret (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Fuldførelse af omni (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Staveforslag (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Staveforslag (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Fuldførelse af nøgleord local (^N^P)"
diff --git a/src/po/de.po b/src/po/de.po
index f0f00d7..99a62db 100644
--- a/src/po/de.po
+++ b/src/po/de.po
@@ -1376,8 +1376,8 @@ msgstr " Benutzerdefinierte Vervollständigung (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni-Vervollständigung (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Vorschlag der Rechtschreibprüfung (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Vorschlag der Rechtschreibprüfung (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Lokale Stichwort-Vervollständigung(^N^P)"
diff --git a/src/po/eo.po b/src/po/eo.po
index a9aaefa..3f86652 100644
--- a/src/po/eo.po
+++ b/src/po/eo.po
@@ -2616,8 +2616,8 @@ msgstr " Kompletigo difinita de uzanto (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Kompletigo Omni (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Sugesto de literumo (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Sugesto de literumo (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Kompletigo loka de Ålosilvorto (^N/^P)"
diff --git a/src/po/es.po b/src/po/es.po
index f4a02fa..8b072d8 100644
--- a/src/po/es.po
+++ b/src/po/es.po
@@ -1351,8 +1351,8 @@ msgstr " Completar definido por usuario (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Completar con método Omni (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Sugerencia de ortografía (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Sugerencia de ortografía (^S^N^P)"
# Scroll has its own msgs, in its place there is the msg for local
# * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL) -- Acevedo
diff --git a/src/po/fi.po b/src/po/fi.po
index d2fd336..9dc24d3 100644
--- a/src/po/fi.po
+++ b/src/po/fi.po
@@ -1325,8 +1325,8 @@ msgstr " Käyttäjän määrittelemä täydennys (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omnitäydennys (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Oikaisulukuehdotus (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Oikaisulukuehdotus (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Avainsanan paikallinen täydennys (^N^P)"
diff --git a/src/po/fixfilenames.vim b/src/po/fixfilenames.vim
index 04bc079..2344b3b 100644
--- a/src/po/fixfilenames.vim
+++ b/src/po/fixfilenames.vim
@@ -3,9 +3,11 @@
set shortmess+=A
-for name in argv()[1:]
- let jsname = fnamemodify(name, ":t:r") .. ".js"
- exe "%s+" .. jsname .. "+" .. substitute(name, '\\', '/', 'g') .. "+"
+let s:namenum = 0
+for s:name in argv()[1:]
+ let s:jsname = fnamemodify(s:name, ":t:r") .. s:namenum .. ".js"
+ exe "%s+" .. s:jsname .. "+" .. substitute(s:name, '\\', '/', 'g') .. "+ge"
+ let s:namenum +=1
endfor
write
diff --git a/src/po/fr.po b/src/po/fr.po
index 27f11eb..3a55f8d 100644
--- a/src/po/fr.po
+++ b/src/po/fr.po
@@ -2738,8 +2738,8 @@ msgstr " Complètement défini par l'utilisateur (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Complètement selon le type de fichier (Omni) (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Suggestion d'orthographe (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Suggestion d'orthographe (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Complètement local de mot-clé (^N/^P)"
diff --git a/src/po/ga.po b/src/po/ga.po
index e81ef69..cd1a029 100644
--- a/src/po/ga.po
+++ b/src/po/ga.po
@@ -1401,8 +1401,8 @@ msgstr " Comhlánú saincheaptha (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Comhlánú Omni (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Moladh litrithe (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Moladh litrithe (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Comhlánú logánta lorgfhocal (^N^P)"
diff --git a/src/po/hu.po b/src/po/hu.po
index 0a11847..221cf33 100644
--- a/src/po/hu.po
+++ b/src/po/hu.po
@@ -264,8 +264,8 @@ msgstr " Felhasználó által definiált kiegészítés (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni kiegészítés (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Helyesírási javaslat (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Helyesírási javaslat (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Kulcsszó helyi kiegészítés (^N^P)"
diff --git a/src/po/it.po b/src/po/it.po
index fde1c23..78c2130 100644
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -14,8 +14,8 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-05-28 09:50+0200\n"
-"PO-Revision-Date: 2024-03-06 15:00+0100\n"
+"POT-Creation-Date: 2024-08-11 10:10+0200\n"
+"PO-Revision-Date: 2024-08-11 10:36+0100\n"
"Last-Translator: Antonio Colombo <azc100@gmail.com>\n"
"Language-Team: Italian\n"
"Language: it\n"
@@ -583,16 +583,16 @@ msgid "Greetings, Vim user!"
msgstr "Salve, utente Vim!"
msgid "Already only one tab page"
-msgstr "C'è già un'unica pagina di linguette"
+msgstr "C'è già un'unica pagina di schede"
msgid "Edit File in new tab page"
-msgstr "Apri il File in una nuova pagina di linguette"
+msgstr "Apri il File in una nuova pagina di schede"
msgid "Edit File in new window"
msgstr "Apri il File in una nuova finestra"
msgid "Tab page %d"
-msgstr "Pagina di linguette %d"
+msgstr "Pagina di schede %d"
msgid "No swap file"
msgstr "Non posso creare un file di swap"
@@ -895,13 +895,13 @@ msgid "Vim: Received \"die\" request from session manager\n"
msgstr "Vim: Ricevuta richiesta \"die\" dal Session Manager\n"
msgid "Close tab"
-msgstr "Chiudi linguetta"
+msgstr "Chiudi scheda"
msgid "New tab"
-msgstr "Nuova linguetta"
+msgstr "Nuova scheda"
msgid "Open Tab..."
-msgstr "Apri linguetta..."
+msgstr "Apri scheda..."
msgid "Vim: Main window unexpectedly destroyed\n"
msgstr "Vim: Finestra principale distrutta inaspettatamente\n"
@@ -946,7 +946,7 @@ msgid "&Undo"
msgstr "&U Disfa"
msgid "Open tab..."
-msgstr "Apri linguetta..."
+msgstr "Apri scheda..."
msgid "Find string"
msgstr "Trova stringa"
@@ -1287,8 +1287,8 @@ msgstr " Completamento definito dall'utente (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Completamento globale (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Suggerimento ortografico (s^N^P)"
+msgid " Spelling suggestion (^s^N^P)"
+msgstr " Suggerimento ortografico (^s^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Completamento Parola Locale (^N^P)"
@@ -1604,7 +1604,7 @@ msgid "--noplugin\t\tDon't load plugin scripts"
msgstr "--noplugin\t\tNon caricare script plugin"
msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-o[N]\t\tApri N pagine di linguette (predefinito: una per ogni file)"
+msgstr "-o[N]\t\tApri N pagine di schede (predefinito: una per ogni file)"
msgid "-o[N]\t\tOpen N windows (default: one for each file)"
msgstr "-o[N]\t\tApri N finestre (predefinito: una per ogni file)"
@@ -1667,7 +1667,7 @@ msgid ""
"--remote-tab[-wait][-silent] <files> As --remote but use tab page per file"
msgstr ""
"--remote-tab[-wait][-silent] <file> Come --remote, ma apre una pagina di "
-"linguette per file"
+"schede per file"
msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
msgstr "--remote-send <tasti>\tInvia <tasti> a un server Vim ed esci"
@@ -5538,9 +5538,6 @@ msgstr "E612: Troppi 'sign' definiti"
msgid "E613: Unknown printer font: %s"
msgstr "E613: Carattere di stampa sconosciuto: %s"
-msgid "E614: Class required"
-msgstr "E614: Classe richiesta"
-
msgid "E616: Object required for argument %d"
msgstr "E616: Object richiesto per argomento %d"
@@ -6045,7 +6042,7 @@ msgid "E783: Duplicate char in MAP entry"
msgstr "E783: Carattere duplicato nell'elemento MAP"
msgid "E784: Cannot close last tab page"
-msgstr "E784: Non posso chiudere l'ultima pagina di linguette"
+msgstr "E784: Non posso chiudere l'ultima pagina di schede"
msgid "E785: complete() can only be used in Insert mode"
msgstr "E785: complete() può essere usata solo in modalità inserimento"
@@ -6747,7 +6744,7 @@ msgid "E996: Cannot lock a register"
msgstr "E996: Non posso bloccare un registro"
msgid "E997: Tabpage not found: %d"
-msgstr "E997: Pagina-di-linguette non trovata: %d"
+msgstr "E997: Pagina-di-schede non trovata: %d"
msgid "E998: Reduce of an empty %s with no initial value"
msgstr ""
@@ -7715,7 +7712,7 @@ msgstr "E1307: Argomento %d: Tenta di modificare la costante %s"
msgid "E1308: Cannot resize a window in another tab page"
msgstr ""
-"E1308: Non posso ridimensionare una finestra in un'altra pagine di linguette"
+"E1308: Non posso ridimensionare una finestra in un'altra pagine di schede"
msgid "E1309: Cannot change mappings while listing"
msgstr "E1309: Non posso modificare mappature mentre le sto elencando"
@@ -7749,21 +7746,12 @@ msgstr "E1317: Dichiarazione di variabile Object non valida: %s"
msgid "E1318: Not a valid command in a class: %s"
msgstr "E1318: Comando non valido in una Classe: %s"
-msgid "E1319: Using a Class as a Number"
-msgstr "E1319: Uso di una Classe come un Numero"
-
msgid "E1320: Using an Object as a Number"
msgstr "E1320: Uso di un Object come un Numero"
-msgid "E1321: Using a Class as a Float"
-msgstr "E1321: Uso di una Classe come un Numero-a-virgola-mobile"
-
msgid "E1322: Using an Object as a Float"
msgstr "E1322: Uso di un Object come un Numero-a-virgola-mobile"
-msgid "E1323: Using a Class as a String"
-msgstr "E1323: Uso di una Classe come una Stringa"
-
msgid "E1324: Using an Object as a String"
msgstr "E1324: Uso di un Object come una Stringa"
@@ -7794,8 +7782,8 @@ msgstr ""
msgid "E1332: public variable name cannot start with underscore: %s"
msgstr ""
-"E1332: Il nome di un elemento public non può iniziare con il trattino "
-"basso: %s"
+"E1332: Il nome di un elemento public non può iniziare con il trattino basso: "
+"%s"
msgid "E1333: Cannot access protected variable \"%s\" in class \"%s\""
msgstr ""
@@ -8004,9 +7992,6 @@ msgstr "E1393: Il Tipo può essere definito solo negli script Vim9"
msgid "E1394: Type name must start with an uppercase letter: %s"
msgstr "E1394: Il nome di un Tipo deve iniziare con una lettera maiuscola: %s"
-msgid "E1395: Type alias \"%s\" cannot be modified"
-msgstr "E1395: Il Tipo alias \"%s\" non può essere modificato"
-
msgid "E1396: Type alias \"%s\" already exists"
msgstr "E1396: Il Tipo alias \"%s\" esiste già"
@@ -8019,15 +8004,6 @@ msgstr "E1398: Manca il tipo del Tipo alias"
msgid "E1399: Type can only be used in a script"
msgstr "E1399: \"Tipo\" si può usare solo in uno script"
-msgid "E1400: Using type alias \"%s\" as a Number"
-msgstr "E1400: Uso del Tipo alias \"%s\" come un Numero"
-
-msgid "E1401: Using type alias \"%s\" as a Float"
-msgstr "E1401: Uso del Tipo alias \"%s\" come un Numero-a-virgola-mobile"
-
-msgid "E1402: Using type alias \"%s\" as a String"
-msgstr "E1402: Uso del Tipo alias \"%s\" come una Stringa"
-
msgid "E1403: Type alias \"%s\" cannot be used as a value"
msgstr "E1403: Impossibile usare il Tipo alias \"%s\" come valore"
@@ -8037,9 +8013,6 @@ msgstr "E1404: Impossibile usare \"Abstract\" in un'Interfaccia"
msgid "E1405: Class \"%s\" cannot be used as a value"
msgstr "E1405: Impossibile usare Classe \"%s\" come valore"
-msgid "E1406: Cannot use a Class as a variable or value"
-msgstr "E1406: Impossibile usare una Classe come variabile o valore"
-
msgid "E1407: Cannot use a Typealias as a variable or value"
msgstr "E1407: Impossibile usare un Tipo alias come variabile o valore"
@@ -8158,8 +8131,8 @@ msgid "E1512: Wrong character width for field \"%s\""
msgstr "E1512: Larghezza carattere errata per campo \"%s\""
msgid "E1513: Cannot switch buffer. 'winfixbuf' is enabled"
-msgstr "E1513: Non riesco a passare a un altro buffer. Opzione "
-"'winfixbuf' attiva"
+msgstr ""
+"E1513: Non riesco a passare a un altro buffer. Opzione 'winfixbuf' attiva"
#. type of cmdline window or 0
#. result of cmdline window or 0
@@ -8362,10 +8335,10 @@ msgid "unable to unset option %s which does not have global value"
msgstr "impossibile rimuovere l'opzione %s che non ha un valore globale"
msgid "attempt to refer to deleted tab page"
-msgstr "tentativo di riferimento a pagina di linguette cancellata"
+msgstr "tentativo di riferimento a pagina di schede cancellata"
msgid "no such tab page"
-msgstr "pagina di linguette inesistente"
+msgstr "pagina di schede inesistente"
msgid "attempt to refer to deleted window"
msgstr "tentativo di riferimento a una finestra cancellata"
@@ -8399,7 +8372,7 @@ msgstr "atteso Object vim.Window, ottenuto %s"
msgid "failed to find window in the current tab page"
msgstr ""
-"non è stato possibile trovare la finestra nella pagina di linguette corrente"
+"non è stato possibile trovare la finestra nella pagina di schede corrente"
msgid "did not switch to the specified window"
msgstr "passaggio alla finestra specificata non effettuato"
@@ -8408,7 +8381,7 @@ msgid "expected vim.TabPage object, but got %s"
msgstr "atteso Object vim.TabPage, ottenuto %s"
msgid "did not switch to the specified tab page"
-msgstr "passaggio alla pagina di linguette specificata non effettuato"
+msgstr "passaggio alla pagina di schede specificata non effettuato"
msgid "failed to run the code"
msgstr "esecuzione del codice non riuscita"
@@ -8988,24 +8961,28 @@ msgid "name of the winpty dynamic library"
msgstr "nome della libreria dinamica winpty"
msgid "multiple tab pages"
-msgstr "più di una pagina di linguette"
+msgstr "più di una pagina di schede"
msgid "0, 1 or 2; when to use a tab pages line"
-msgstr "0, 1 o 2; utilizzo della riga che descrive pagine di linguette"
+msgstr "0, 1 o 2; utilizzo della riga che descrive pagine di schede"
+
+msgid "behaviour when closing tab pages: left, uselast or empty"
+msgstr ""
+"comportamento alla chiusura di pagine di schede: left, uselast o empty"
msgid "maximum number of tab pages to open for -p and \"tab all\""
msgstr ""
-"massimo numero di pagine di linguette da aprire\n"
+"massimo numero di pagine di schede da aprire\n"
"per -p e \"tab all\""
msgid "custom tab pages line"
-msgstr "personalizzazione riga che descrive le pagine di linguette"
+msgstr "personalizzazione riga che descrive le pagine di schede"
msgid "custom tab page label for the GUI"
-msgstr "personalizzazione etichetta per le pagine di linguette nella GUI"
+msgstr "personalizzazione etichetta per le pagine di schede nella GUI"
msgid "custom tab page tooltip for the GUI"
-msgstr "personalizzazione suggerimento per le pagine di linguette nella GUI"
+msgstr "personalizzazione suggerimento per le pagine di schede nella GUI"
msgid "terminal"
msgstr "terminale"
diff --git a/src/po/ja.euc-jp.po b/src/po/ja.euc-jp.po
index 362be9e..ced4cd9 100644
--- a/src/po/ja.euc-jp.po
+++ b/src/po/ja.euc-jp.po
@@ -3,7 +3,7 @@
# Do ":help uganda" in Vim to read copying and usage conditions.
# Do ":help credits" in Vim to see a list of people who contributed.
#
-# Copyright (C) 2001-2023 MURAOKA Taro <koron.kaoriya@gmail.com>,
+# Copyright (C) 2001-2024 MURAOKA Taro <koron.kaoriya@gmail.com>,
# vim-jp <http://vim-jp.org/>
#
# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
@@ -12,10 +12,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Vim 9.0\n"
+"Project-Id-Version: Vim 9.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-12-18 16:41+0900\n"
-"PO-Revision-Date: 2023-12-19 12:45+0900\n"
+"POT-Creation-Date: 2024-07-23 10:59+0900\n"
+"PO-Revision-Date: 2024-08-15 12:54+0900\n"
"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
"Language-Team: Japanese <https://github.com/vim-jp/lang-ja>\n"
"Language: ja\n"
@@ -175,6 +175,9 @@ msgstr " (file %d of %d)"
msgid " (file (%d) of %d)"
msgstr " (file (%d) of %d)"
+msgid "[Command Line]"
+msgstr "[¥³¥Þ¥ó¥É¥é¥¤¥ó]"
+
msgid "[Prompt]"
msgstr "[¥×¥í¥ó¥×¥È]"
@@ -439,10 +442,6 @@ msgstr "ÊÒ²¾Ì¾"
msgid "Bopomofo"
msgstr "Ãí²»»úÊì"
-msgid "Not enough memory to set references, garbage collection aborted!"
-msgstr ""
-"¥¬¡¼¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤òÃæ»ß¤·¤Þ¤·¤¿! »²¾È¤òºîÀ®¤¹¤ë¤Î¤Ë¥á¥â¥ê¤¬ÉÔ­¤·¤Þ¤·¤¿"
-
msgid ""
"\n"
"\tLast set from "
@@ -688,9 +687,6 @@ msgstr "¥¨¥é¡¼"
msgid "Interrupt"
msgstr "³ä¹þ¤ß"
-msgid "[Command Line]"
-msgstr "[¥³¥Þ¥ó¥É¥é¥¤¥ó]"
-
msgid "is a directory"
msgstr "¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
@@ -854,6 +850,10 @@ msgid "+-%s%3ld line: "
msgid_plural "+-%s%3ld lines: "
msgstr[0] "+-%s%3ld ¹Ô: "
+msgid "Not enough memory to set references, garbage collection aborted!"
+msgstr ""
+"¥¬¡¼¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤òÃæ»ß¤·¤Þ¤·¤¿! »²¾È¤òºîÀ®¤¹¤ë¤Î¤Ë¥á¥â¥ê¤¬ÉÔ­¤·¤Þ¤·¤¿"
+
msgid "No match at cursor, finding next"
msgstr "¥«¡¼¥½¥ë¤Î°ÌÃ֤˥ޥåÁ¤Ï¤¢¤ê¤Þ¤»¤ó¡¢¼¡¤ò¸¡º÷¤·¤Æ¤¤¤Þ¤¹"
@@ -1337,8 +1337,8 @@ msgstr " ¥æ¡¼¥¶¡¼ÄêµÁÊä´° (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " ¥ª¥à¥ËÊä´° (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Ä֤꽤Àµ¸õÊä (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Ä֤꽤Àµ¸õÊä (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " ¶É½ê¥­¡¼¥ï¡¼¥ÉÊä´° (^N^P)"
@@ -1416,6 +1416,9 @@ msgstr "mapnew() ¤Î°ú¿ô"
msgid "filter() argument"
msgstr "filter() ¤Î°ú¿ô"
+msgid "foreach() argument"
+msgstr "foreach() ¤Î°ú¿ô"
+
msgid "extendnew() argument"
msgstr "extendnew() ¤Î°ú¿ô"
@@ -2454,6 +2457,9 @@ msgstr "%s ¤Ø (%s ¾å¤Î)"
msgid "Printing '%s'"
msgstr "°õºþ¤·¤Æ¤¤¤Þ¤¹: '%s'"
+#~ msgid "DefaultFontNameForWindows"
+#~ msgstr ""
+
#, c-format
msgid "Opening the X display took %ld msec"
msgstr "X¥µ¡¼¥Ð¡¼¤Ø¤ÎÀܳ¤Ë %ld ¥ß¥êÉ䫤«¤ê¤Þ¤·¤¿"
@@ -3394,8 +3400,8 @@ msgid "%s returning %s"
msgstr "%s ¤¬ %s ¤òÊÖ¤·¤Þ¤·¤¿"
#, c-format
-msgid "Function %s does not need compiling"
-msgstr "´Ø¿ô %s ¤Ï¥³¥ó¥Ñ¥¤¥ë¤ÎɬÍפ¬¤¢¤ê¤Þ¤»¤ó"
+msgid "Function %s%s%s does not need compiling"
+msgstr "´Ø¿ô %s%s%s ¤Ï¥³¥ó¥Ñ¥¤¥ë¤ÎɬÍפ¬¤¢¤ê¤Þ¤»¤ó"
#, c-format
msgid "%s (%s, compiled %s)"
@@ -3554,6 +3560,9 @@ msgstr " Âè2¥æ¡¼¥¶¡¼ vimrc: \""
msgid " 3rd user vimrc file: \""
msgstr " Âè3¥æ¡¼¥¶¡¼ vimrc: \""
+msgid " 4th user vimrc file: \""
+msgstr " Âè4¥æ¡¼¥¶¡¼ vimrc: \""
+
msgid " user exrc file: \""
msgstr " ¥æ¡¼¥¶¡¼ exrc: \""
@@ -4158,6 +4167,10 @@ msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: :source ¤Ç¼è¹þ¤à¥Õ¥¡¥¤¥ë°Ê³°¤Ç¤Ï :loadkeymap ¤ò»È¤¨¤Þ¤»¤ó"
#, c-format
+msgid "E106: Unsupported diff output format: %s"
+msgstr "E106: ¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤diff½ÐÎÏ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹: %s"
+
+#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: ¥«¥Ã¥³ '(' ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
@@ -4486,8 +4499,8 @@ msgstr "E196: ¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¹ç»ú¤Ï¤¢¤ê¤Þ¤»¤ó"
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: ¸À¸ì¤ò \"%s\" ¤ËÀßÄê¤Ç¤­¤Þ¤»¤ó"
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: ¥¢¥¯¥Æ¥£¥Ö¤Ê¥¦¥£¥ó¥É¥¦¤«¥Ð¥Ã¥Õ¥¡¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿"
+msgid "E199: Active window or buffer changed or deleted"
+msgstr "E199: ¥¢¥¯¥Æ¥£¥Ö¤Ê¥¦¥£¥ó¥É¥¦¤«¥Ð¥Ã¥Õ¥¡¤¬Êѹ¹¤Þ¤¿¤Ïºï½ü¤µ¤ì¤Þ¤·¤¿"
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: *ReadPre ¼«Æ°¥³¥Þ¥ó¥É ¤¬¥Õ¥¡¥¤¥ë¤òÆɹþÉԲĤˤ·¤Þ¤·¤¿"
@@ -5857,9 +5870,6 @@ msgstr "E612: sign¤ÎÄêµÁ¤¬Â¿²á¤®¤Þ¤¹"
msgid "E613: Unknown printer font: %s"
msgstr "E613: ̤ÃΤΥץê¥ó¥¿¥ª¥×¥·¥ç¥ó¤Ç¤¹: %s"
-msgid "E614: Class required"
-msgstr "E614: ¥¯¥é¥¹¤¬É¬ÍפǤ¹"
-
#, c-format
msgid "E616: Object required for argument %d"
msgstr "E616: °ú¿ô %d ¤Ë¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤¬É¬ÍפǤ¹"
@@ -6696,7 +6706,7 @@ msgid "E862: Cannot use g: here"
msgstr "E862: ¤³¤³¤Ç¤Ï g: ¤Ï»È¤¨¤Þ¤»¤ó"
msgid "E863: Not allowed for a terminal in a popup window"
-msgstr "E863: üËö¤Ï¥Ý¥Ã¥×¥¢¥Ã¥×¥¦¥£¥ó¥É¥¦¤Ç¤Ïµö¤µ¤ì¤Þ¤»¤ó"
+msgstr "E863: ¥Ý¥Ã¥×¥¢¥Ã¥×¥¦¥£¥ó¥É¥¦Æâ¤ÎüËö¤Ç¤Ïµö¤µ¤ì¤Þ¤»¤ó"
#, no-c-format
msgid ""
@@ -6753,6 +6763,10 @@ msgstr ""
msgid "E876: (NFA regexp) Not enough space to store the whole NFA"
msgstr "E876: (NFA Àµµ¬É½¸½) NFAÁ´ÂΤòÊݸ¤¹¤ë¤Ë¤Ï¶õ¤­¥¹¥Ú¡¼¥¹¤¬Â­¤ê¤Þ¤»¤ó"
+#, c-format
+msgid "E877: (NFA regexp) Invalid character class: %d"
+msgstr "E877: (NFA Àµµ¬É½¸½) ̵¸ú¤Êʸ»ú¥¯¥é¥¹¤Ç¤¹: %d"
+
msgid "E878: (NFA regexp) Could not allocate memory for branch traversal!"
msgstr ""
"E878: (NFA Àµµ¬É½¸½) ¸½ºß²£ÃÇÃæ¤Î¥Ö¥é¥ó¥Á¤Ë½½Ê¬¤Ê¥á¥â¥ê¤ò³ä¤êÅö¤Æ¤é¤ì¤Þ¤»¤ó!"
@@ -8319,21 +8333,12 @@ msgstr "E1317: ÉÔÀµ¤Ê¥ª¥Ö¥¸¥§¥¯¥ÈÊÑ¿ô¤ÎÀë¸À¤Ç¤¹: %s"
msgid "E1318: Not a valid command in a class: %s"
msgstr "E1318: ¥¯¥é¥¹Æâ¤Ç¤Ï»È¤¨¤Ê¤¤¥³¥Þ¥ó¥É¤Ç¤¹: %s"
-msgid "E1319: Using a Class as a Number"
-msgstr "E1319: ¥¯¥é¥¹¤ò¿ôÃͤȤ·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
-
msgid "E1320: Using an Object as a Number"
msgstr "E1320: ¥ª¥Ö¥¸¥§¥¯¥È¤ò¿ôÃͤȤ·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
-msgid "E1321: Using a Class as a Float"
-msgstr "E1321: ¥¯¥é¥¹¤òÉâÆ°¾®¿ôÅÀ¿ô¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
-
msgid "E1322: Using an Object as a Float"
msgstr "E1322: ¥ª¥Ö¥¸¥§¥¯¥È¤òÉâÆ°¾®¿ôÅÀ¿ô¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
-msgid "E1323: Using a Class as a String"
-msgstr "E1323: ¥¯¥é¥¹¤òʸ»úÎó¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
-
msgid "E1324: Using an Object as a String"
msgstr "E1324: ¥ª¥Ö¥¸¥§¥¯¥È¤òʸ»úÎó¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
@@ -8362,14 +8367,14 @@ msgid "E1330: Invalid type for object variable: %s"
msgstr "E1330: ¥ª¥Ö¥¸¥§¥¯¥ÈÊÑ¿ô¤È¤·¤Æ̵¸ú¤Ê·¿¤Ç¤¹: %s"
msgid ""
-"E1331: Public must be followed by \"var\" or \"static\" or \"final\" or "
+"E1331: public must be followed by \"var\" or \"static\" or \"final\" or "
"\"const\""
msgstr ""
"E1331: public ¤Î¸å¤í¤Ë \"var\", \"static\", \"final\" ¤Þ¤¿¤Ï \"const\" ¤¬É¬Í×"
"¤Ç¤¹"
#, c-format
-msgid "E1332: Public variable name cannot start with underscore: %s"
+msgid "E1332: public variable name cannot start with underscore: %s"
msgstr "E1332: ¥Ñ¥Ö¥ê¥Ã¥¯ÊÑ¿ô̾¤Ï¥¢¥ó¥À¡¼¥¹¥³¥¢¤Ç»Ï¤á¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó: %s"
#, c-format
@@ -8575,10 +8580,10 @@ msgstr ""
"E1386: ¥ª¥Ö¥¸¥§¥¯¥È¥á¥½¥Ã¥É \"%s\" ¤Ï¥¯¥é¥¹ \"%s\" ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò»È¤¦¤³¤È¤Î"
"¤ß¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤¹"
-msgid "E1387: Public variable not supported in an interface"
+msgid "E1387: public variable not supported in an interface"
msgstr "E1387: ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Æâ¤Ç¥Ñ¥Ö¥ê¥Ã¥¯ÊÑ¿ô¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
-msgid "E1388: Public keyword not supported for a method"
+msgid "E1388: public keyword not supported for a method"
msgstr "E1388: ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Æâ¤Ç public ¥­¡¼¥ï¡¼¥É¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
msgid "E1389: Missing name after implements"
@@ -8608,10 +8613,6 @@ msgid "E1394: Type name must start with an uppercase letter: %s"
msgstr "E1394: ·¿¤Î̾Á°¤Ï±ÑÂçʸ»ú¤Ç»Ï¤Þ¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó: %s"
#, c-format
-msgid "E1395: Type alias \"%s\" cannot be modified"
-msgstr "E1395: ·¿¥¨¥¤¥ê¥¢¥¹ \"%s\" ¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó"
-
-#, c-format
msgid "E1396: Type alias \"%s\" already exists"
msgstr "E1396: ·¿¥¨¥¤¥ê¥¢¥¹ \"%s\" ¤Ï´û¤Ë¸ºß¤·¤Þ¤¹"
@@ -8625,18 +8626,6 @@ msgid "E1399: Type can only be used in a script"
msgstr "E1399: ·¿¤Ï¥¹¥¯¥ê¥×¥È¤ÎÃæ¤Ç¤Î¤ß»ÈÍѤǤ­¤Þ¤¹"
#, c-format
-msgid "E1400: Using type alias \"%s\" as a Number"
-msgstr "E1400: ·¿¥¨¥¤¥ê¥¢¥¹ \"%s\" ¤ò¿ôÃͤȤ·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
-
-#, c-format
-msgid "E1401: Using type alias \"%s\" as a Float"
-msgstr "E1401: ·¿¥¨¥¤¥ê¥¢¥¹ \"%s\" ¤òÉâÆ°¾®¿ôÅÀ¿ô¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
-
-#, c-format
-msgid "E1402: Using type alias \"%s\" as a String"
-msgstr "E1402: ·¿¥¨¥¤¥ê¥¢¥¹ \"%s\" ¤òʸ»úÎó¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
-
-#, c-format
msgid "E1403: Type alias \"%s\" cannot be used as a value"
msgstr "E1403: ·¿¥¨¥¤¥ê¥¢¥¹ \"%s\" ¤òÃͤȤ·¤Æ»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
@@ -8647,9 +8636,6 @@ msgstr "E1404: abstract ¤ò¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Æâ¤Ç»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
msgid "E1405: Class \"%s\" cannot be used as a value"
msgstr "E1405: ¥¯¥é¥¹ \"%s\" ¤òÃͤȤ·¤Æ»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
-msgid "E1406: Cannot use a Class as a variable or value"
-msgstr "E1406: ¥¯¥é¥¹¤òÊÑ¿ô¤äÃͤȤ·¤Æ»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
-
msgid "E1407: Cannot use a Typealias as a variable or value"
msgstr "E1407: ·¿¥¨¥¤¥ê¥¢¥¹¤òÊÑ¿ô¤äÃͤȤ·¤Æ»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
@@ -8665,6 +8651,76 @@ msgid "E1410: Const variable not supported in an interface"
msgstr "E1410: ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Æâ¤Ç const ÊÑ¿ô¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
#, c-format
+msgid "E1411: Missing dot after object \"%s\""
+msgstr "E1411: ¥ª¥Ö¥¸¥§¥¯¥È \"%s\" ¤Î¸å¤Ë¥É¥Ã¥È¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E1412: Builtin object method \"%s\" not supported"
+msgstr "E1412: ÁȤ߹þ¤ß¥ª¥Ö¥¸¥§¥¯¥È¥á¥½¥Ã¥É \"%s\" ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E1413: Builtin class method not supported"
+msgstr "E1413: ÁȤ߹þ¤ß¥¯¥é¥¹¥á¥½¥Ã¥É¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E1414: Enum can only be defined in Vim9 script"
+msgstr "E1414: Îóµó·¿¤Ï Vim9 script ¤ÎÃæ¤Ç¤Î¤ßÄêµÁ¤Ç¤­¤Þ¤¹"
+
+#, c-format
+msgid "E1415: Enum name must start with an uppercase letter: %s"
+msgstr "E1415: Îóµó·¿¤Î̾Á°¤Ï±ÑÂçʸ»ú¤Ç»Ï¤Þ¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó: %s"
+
+msgid "E1416: Enum cannot extend a class or enum"
+msgstr "E1416: Îóµó·¿¤Ï¥¯¥é¥¹¤äÎóµó·¿¤ò³ÈÄ¥¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E1417: Abstract cannot be used in an Enum"
+msgstr "E1417: abstract ¤òÎóµó·¿Æâ¤Ç»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E1418: Invalid enum value declaration: %s"
+msgstr "E1418: ÉÔÀµ¤ÊÎóµóÃͤÎÀë¸À¤Ç¤¹: %s"
+
+#, c-format
+msgid "E1419: Not a valid command in an Enum: %s"
+msgstr "E1419: Îóµó·¿Æâ¤Ç¤Ï»È¤¨¤Ê¤¤¥³¥Þ¥ó¥É¤Ç¤¹: %s"
+
+msgid "E1420: Missing :endenum"
+msgstr "E1420: :endenum ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E1421: Enum \"%s\" cannot be used as a value"
+msgstr "E1421: Îóµó·¿ \"%s\" ¤òÃͤȤ·¤Æ»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E1422: Enum value \"%s\" not found in enum \"%s\""
+msgstr "E1422: ÎóµóÃÍ \"%s\" ¤¬Îóµó·¿ \"%s\" Æâ¤Ç¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E1423: Enum value \"%s.%s\" cannot be modified"
+msgstr "E1423: ÎóµóÃÍ \"%s.%s\" ¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E1424: Using an Enum \"%s\" as a Number"
+msgstr "E1424: Îóµó·¿ \"%s\" ¤ò¿ôÃͤȤ·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E1425: Using an Enum \"%s\" as a String"
+msgstr "E1425: Îóµó·¿ \"%s\" ¤òʸ»úÎó¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E1426: Enum \"%s\" ordinal value cannot be modified"
+msgstr "E1426: Îóµó·¿ \"%s\" ¤Î½ç½øÃͤÏÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E1427: Enum \"%s\" name cannot be modified"
+msgstr "E1427: Îóµó·¿ \"%s\" ¤Î̾Á°¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E1428: Duplicate enum value: %s"
+msgstr "E1428: ÎóµóÃͤ¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹: %s"
+
+msgid "E1429: Class can only be used in a script"
+msgstr "E1429: ¥¯¥é¥¹¤Ï¥¹¥¯¥ê¥×¥È¤ÎÃæ¤Ç¤Î¤ß»ÈÍѤǤ­¤Þ¤¹"
+
+#, c-format
msgid "E1500: Cannot mix positional and non-positional arguments: %s"
msgstr "E1500: °ÌÃÖ°ú¿ô¤ÈÈó°ÌÃÖ°ú¿ô¤òº®¤¼¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó: %s"
@@ -8708,6 +8764,17 @@ msgstr "E1509: ³Èĥ°À­¤ÎÆɹþ¤ß¤Þ¤¿¤Ï½ñ¹þ¤ß¤Ç¥¨¥é¡¼¤¬µ¯¤­¤Þ¤·¤¿"
msgid "E1510: Value too large: %s"
msgstr "E1510: Ãͤ¬Â礭²á¤®¤Þ¤¹: %s"
+#, c-format
+msgid "E1511: Wrong number of characters for field \"%s\""
+msgstr "E1511: ¥Õ¥£¡¼¥ë¥É \"%s\" ¤Îʸ»ú¿ô¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E1512: Wrong character width for field \"%s\""
+msgstr "E1512: ¥Õ¥£¡¼¥ë¥É \"%s\" ¤Îʸ»úÉý¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E1513: Cannot switch buffer. 'winfixbuf' is enabled"
+msgstr "E1513: ¥Ð¥Ã¥Õ¥¡¤òÀÚ¤êÂؤ¨¤é¤ì¤Þ¤»¤ó¡£'winfixbuf' ¤¬Í­¸ú²½¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
msgid "--No lines in buffer--"
msgstr "--¥Ð¥Ã¥Õ¥¡¤Ë¹Ô¤¬¤¢¤ê¤Þ¤»¤ó--"
@@ -9096,7 +9163,7 @@ msgid "\" Hit <Enter> on an index line to jump there."
msgstr "\" ¥¤¥ó¥Ç¥Ã¥¯¥¹¹Ô¤Ç <Enter> ¤òÂǤĤȡ¢¤½¤³¤Ë¥¸¥ã¥ó¥×¤·¤Þ¤¹¡£"
msgid "\" Hit <Space> on a \"set\" line to refresh it."
-msgstr "\" \"set\" ¹Ô¤Ç <Spece> ¤òÂǤĤȡ¢ºÇ¿·¤ÎÃͤ¬Æɹþ¤Þ¤ì¤Þ¤¹¡£"
+msgstr "\" \"set\" ¹Ô¤Ç <Space> ¤òÂǤĤȡ¢ºÇ¿·¤ÎÃͤ¬Æɹþ¤Þ¤ì¤Þ¤¹¡£"
msgid "important"
msgstr "½ÅÍ×"
@@ -9415,6 +9482,9 @@ msgstr "¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤Ë»È¤ï¤ì¤ëºÇ¾®¹Ô¿ô"
msgid "minimal number of lines used for any window"
msgstr "Ǥ°Õ¤Î¥¦¥£¥ó¥É¥¦¤Ë»È¤ï¤ì¤ëºÇ¾®¹Ô¿ô"
+msgid "keep window focused on a single buffer"
+msgstr "¥¦¥£¥ó¥É¥¦¤¬Ê̤ΥХåե¡¤ËÀÚ¤êÂؤï¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë"
+
msgid "keep the height of the window"
msgstr "¥¦¥£¥ó¥É¥¦¤Î¹â¤µ¤òÊݤÄ"
@@ -9490,6 +9560,9 @@ msgstr "Ê£¿ô¥¿¥Ö¥Ú¡¼¥¸"
msgid "0, 1 or 2; when to use a tab pages line"
msgstr "0, 1 ¤Þ¤¿¤Ï 2; ¥¿¥Ö¥Ú¡¼¥¸¹Ô¤ò¤¤¤Ä»È¤¦¤«"
+msgid "behaviour when closing tab pages: left, uselast or empty"
+msgstr "¥¿¥Ö¥Ú¡¼¥¸¤òÊĤ¸¤ë¤È¤­¤ÎµóÆ°: left, uselast ¤Þ¤¿¤Ï empty"
+
msgid "maximum number of tab pages to open for -p and \"tab all\""
msgstr "-p ¤È \"tab all\" ¤Ç³«¤«¤ì¤ë¥¿¥Ö¥Ú¡¼¥¸¤ÎºÇÂç¿ô"
diff --git a/src/po/ja.po b/src/po/ja.po
index 5464bcc..5bcf8e1 100644
--- a/src/po/ja.po
+++ b/src/po/ja.po
@@ -3,7 +3,7 @@
# Do ":help uganda" in Vim to read copying and usage conditions.
# Do ":help credits" in Vim to see a list of people who contributed.
#
-# Copyright (C) 2001-2023 MURAOKA Taro <koron.kaoriya@gmail.com>,
+# Copyright (C) 2001-2024 MURAOKA Taro <koron.kaoriya@gmail.com>,
# vim-jp <http://vim-jp.org/>
#
# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
@@ -12,10 +12,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Vim 9.0\n"
+"Project-Id-Version: Vim 9.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-12-18 16:41+0900\n"
-"PO-Revision-Date: 2023-12-19 12:45+0900\n"
+"POT-Creation-Date: 2024-07-23 10:59+0900\n"
+"PO-Revision-Date: 2024-08-15 12:54+0900\n"
"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
"Language-Team: Japanese <https://github.com/vim-jp/lang-ja>\n"
"Language: ja\n"
@@ -175,6 +175,9 @@ msgstr " (file %d of %d)"
msgid " (file (%d) of %d)"
msgstr " (file (%d) of %d)"
+msgid "[Command Line]"
+msgstr "[コマンドライン]"
+
msgid "[Prompt]"
msgstr "[プロンプト]"
@@ -439,10 +442,6 @@ msgstr "片仮å"
msgid "Bopomofo"
msgstr "注音字æ¯"
-msgid "Not enough memory to set references, garbage collection aborted!"
-msgstr ""
-"ガーベッジコレクションを中止ã—ã¾ã—ãŸ! å‚照を作æˆã™ã‚‹ã®ã«ãƒ¡ãƒ¢ãƒªãŒä¸è¶³ã—ã¾ã—ãŸ"
-
msgid ""
"\n"
"\tLast set from "
@@ -688,9 +687,6 @@ msgstr "エラー"
msgid "Interrupt"
msgstr "割込ã¿"
-msgid "[Command Line]"
-msgstr "[コマンドライン]"
-
msgid "is a directory"
msgstr "ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™"
@@ -854,6 +850,10 @@ msgid "+-%s%3ld line: "
msgid_plural "+-%s%3ld lines: "
msgstr[0] "+-%s%3ld 行: "
+msgid "Not enough memory to set references, garbage collection aborted!"
+msgstr ""
+"ガーベッジコレクションを中止ã—ã¾ã—ãŸ! å‚照を作æˆã™ã‚‹ã®ã«ãƒ¡ãƒ¢ãƒªãŒä¸è¶³ã—ã¾ã—ãŸ"
+
msgid "No match at cursor, finding next"
msgstr "カーソルã®ä½ç½®ã«ãƒžãƒƒãƒã¯ã‚ã‚Šã¾ã›ã‚“ã€æ¬¡ã‚’検索ã—ã¦ã„ã¾ã™"
@@ -1337,8 +1337,8 @@ msgstr " ユーザー定義補完 (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " オムニ補完 (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " 綴り修正候補 (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " 綴り修正候補 (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " 局所キーワード補完 (^N^P)"
@@ -1416,6 +1416,9 @@ msgstr "mapnew() ã®å¼•æ•°"
msgid "filter() argument"
msgstr "filter() ã®å¼•æ•°"
+msgid "foreach() argument"
+msgstr "foreach() ã®å¼•æ•°"
+
msgid "extendnew() argument"
msgstr "extendnew() ã®å¼•æ•°"
@@ -2454,6 +2457,9 @@ msgstr "%s 㸠(%s 上ã®)"
msgid "Printing '%s'"
msgstr "å°åˆ·ã—ã¦ã„ã¾ã™: '%s'"
+#~ msgid "DefaultFontNameForWindows"
+#~ msgstr ""
+
#, c-format
msgid "Opening the X display took %ld msec"
msgstr "Xサーãƒãƒ¼ã¸ã®æŽ¥ç¶šã« %ld ミリ秒ã‹ã‹ã‚Šã¾ã—ãŸ"
@@ -3394,8 +3400,8 @@ msgid "%s returning %s"
msgstr "%s ㌠%s ã‚’è¿”ã—ã¾ã—ãŸ"
#, c-format
-msgid "Function %s does not need compiling"
-msgstr "関数 %s ã¯ã‚³ãƒ³ãƒ‘イルã®å¿…è¦ãŒã‚ã‚Šã¾ã›ã‚“"
+msgid "Function %s%s%s does not need compiling"
+msgstr "関数 %s%s%s ã¯ã‚³ãƒ³ãƒ‘イルã®å¿…è¦ãŒã‚ã‚Šã¾ã›ã‚“"
#, c-format
msgid "%s (%s, compiled %s)"
@@ -3554,6 +3560,9 @@ msgstr " 第2ユーザー vimrc: \""
msgid " 3rd user vimrc file: \""
msgstr " 第3ユーザー vimrc: \""
+msgid " 4th user vimrc file: \""
+msgstr " 第4ユーザー vimrc: \""
+
msgid " user exrc file: \""
msgstr " ユーザー exrc: \""
@@ -4158,6 +4167,10 @@ msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: :source ã§å–込むファイル以外ã§ã¯ :loadkeymap を使ãˆã¾ã›ã‚“"
#, c-format
+msgid "E106: Unsupported diff output format: %s"
+msgstr "E106: サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„diff出力フォーマットã§ã™: %s"
+
+#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: カッコ '(' ãŒã‚ã‚Šã¾ã›ã‚“: %s"
@@ -4486,8 +4499,8 @@ msgstr "E196: ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«åˆå­—ã¯ã‚ã‚Šã¾ã›ã‚“"
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: 言語を \"%s\" ã«è¨­å®šã§ãã¾ã›ã‚“"
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: アクティブãªã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‹ãƒãƒƒãƒ•ã‚¡ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
+msgid "E199: Active window or buffer changed or deleted"
+msgstr "E199: アクティブãªã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‹ãƒãƒƒãƒ•ã‚¡ãŒå¤‰æ›´ã¾ãŸã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: *ReadPre 自動コマンド ãŒãƒ•ã‚¡ã‚¤ãƒ«ã‚’読込ä¸å¯ã«ã—ã¾ã—ãŸ"
@@ -5857,9 +5870,6 @@ msgstr "E612: signã®å®šç¾©ãŒå¤šéŽãŽã¾ã™"
msgid "E613: Unknown printer font: %s"
msgstr "E613: 未知ã®ãƒ—リンタオプションã§ã™: %s"
-msgid "E614: Class required"
-msgstr "E614: クラスãŒå¿…è¦ã§ã™"
-
#, c-format
msgid "E616: Object required for argument %d"
msgstr "E616: 引数 %d ã«ã¯ã‚ªãƒ–ジェクトãŒå¿…è¦ã§ã™"
@@ -6696,7 +6706,7 @@ msgid "E862: Cannot use g: here"
msgstr "E862: ã“ã“ã§ã¯ g: ã¯ä½¿ãˆã¾ã›ã‚“"
msgid "E863: Not allowed for a terminal in a popup window"
-msgstr "E863: 端末ã¯ãƒãƒƒãƒ—アップウィンドウã§ã¯è¨±ã•ã‚Œã¾ã›ã‚“"
+msgstr "E863: ãƒãƒƒãƒ—アップウィンドウ内ã®ç«¯æœ«ã§ã¯è¨±ã•ã‚Œã¾ã›ã‚“"
#, no-c-format
msgid ""
@@ -6753,6 +6763,10 @@ msgstr ""
msgid "E876: (NFA regexp) Not enough space to store the whole NFA"
msgstr "E876: (NFA æ­£è¦è¡¨ç¾) NFA全体をä¿å­˜ã™ã‚‹ã«ã¯ç©ºãスペースãŒè¶³ã‚Šã¾ã›ã‚“"
+#, c-format
+msgid "E877: (NFA regexp) Invalid character class: %d"
+msgstr "E877: (NFA æ­£è¦è¡¨ç¾) 無効ãªæ–‡å­—クラスã§ã™: %d"
+
msgid "E878: (NFA regexp) Could not allocate memory for branch traversal!"
msgstr ""
"E878: (NFA æ­£è¦è¡¨ç¾) ç¾åœ¨æ¨ªæ–­ä¸­ã®ãƒ–ランãƒã«å分ãªãƒ¡ãƒ¢ãƒªã‚’割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“!"
@@ -8319,21 +8333,12 @@ msgstr "E1317: ä¸æ­£ãªã‚ªãƒ–ジェクト変数ã®å®£è¨€ã§ã™: %s"
msgid "E1318: Not a valid command in a class: %s"
msgstr "E1318: クラス内ã§ã¯ä½¿ãˆãªã„コマンドã§ã™: %s"
-msgid "E1319: Using a Class as a Number"
-msgstr "E1319: クラスを数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
-
msgid "E1320: Using an Object as a Number"
msgstr "E1320: オブジェクトを数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
-msgid "E1321: Using a Class as a Float"
-msgstr "E1321: クラスを浮動å°æ•°ç‚¹æ•°ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
-
msgid "E1322: Using an Object as a Float"
msgstr "E1322: オブジェクトを浮動å°æ•°ç‚¹æ•°ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
-msgid "E1323: Using a Class as a String"
-msgstr "E1323: クラスを文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
-
msgid "E1324: Using an Object as a String"
msgstr "E1324: オブジェクトを文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
@@ -8362,14 +8367,14 @@ msgid "E1330: Invalid type for object variable: %s"
msgstr "E1330: オブジェクト変数ã¨ã—ã¦ç„¡åŠ¹ãªåž‹ã§ã™: %s"
msgid ""
-"E1331: Public must be followed by \"var\" or \"static\" or \"final\" or "
+"E1331: public must be followed by \"var\" or \"static\" or \"final\" or "
"\"const\""
msgstr ""
"E1331: public ã®å¾Œã‚ã« \"var\", \"static\", \"final\" ã¾ãŸã¯ \"const\" ãŒå¿…è¦"
"ã§ã™"
#, c-format
-msgid "E1332: Public variable name cannot start with underscore: %s"
+msgid "E1332: public variable name cannot start with underscore: %s"
msgstr "E1332: パブリック変数åã¯ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã§å§‹ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“: %s"
#, c-format
@@ -8575,10 +8580,10 @@ msgstr ""
"E1386: オブジェクトメソッド \"%s\" ã¯ã‚¯ãƒ©ã‚¹ \"%s\" ã®ã‚ªãƒ–ジェクトを使ã†ã“ã¨ã®"
"ã¿ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™"
-msgid "E1387: Public variable not supported in an interface"
+msgid "E1387: public variable not supported in an interface"
msgstr "E1387: インターフェイス内ã§ãƒ‘ブリック変数ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
-msgid "E1388: Public keyword not supported for a method"
+msgid "E1388: public keyword not supported for a method"
msgstr "E1388: インターフェイス内㧠public キーワードã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
msgid "E1389: Missing name after implements"
@@ -8608,10 +8613,6 @@ msgid "E1394: Type name must start with an uppercase letter: %s"
msgstr "E1394: åž‹ã®åå‰ã¯è‹±å¤§æ–‡å­—ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s"
#, c-format
-msgid "E1395: Type alias \"%s\" cannot be modified"
-msgstr "E1395: 型エイリアス \"%s\" ã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
-
-#, c-format
msgid "E1396: Type alias \"%s\" already exists"
msgstr "E1396: 型エイリアス \"%s\" ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™"
@@ -8625,18 +8626,6 @@ msgid "E1399: Type can only be used in a script"
msgstr "E1399: åž‹ã¯ã‚¹ã‚¯ãƒªãƒ—トã®ä¸­ã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™"
#, c-format
-msgid "E1400: Using type alias \"%s\" as a Number"
-msgstr "E1400: 型エイリアス \"%s\" を数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
-
-#, c-format
-msgid "E1401: Using type alias \"%s\" as a Float"
-msgstr "E1401: 型エイリアス \"%s\" を浮動å°æ•°ç‚¹æ•°ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
-
-#, c-format
-msgid "E1402: Using type alias \"%s\" as a String"
-msgstr "E1402: 型エイリアス \"%s\" を文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
-
-#, c-format
msgid "E1403: Type alias \"%s\" cannot be used as a value"
msgstr "E1403: 型エイリアス \"%s\" を値ã¨ã—ã¦ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“"
@@ -8647,9 +8636,6 @@ msgstr "E1404: abstract をインターフェイス内ã§ä½¿ã†ã“ã¨ã¯ã§ãã
msgid "E1405: Class \"%s\" cannot be used as a value"
msgstr "E1405: クラス \"%s\" を値ã¨ã—ã¦ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“"
-msgid "E1406: Cannot use a Class as a variable or value"
-msgstr "E1406: クラスを変数や値ã¨ã—ã¦ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“"
-
msgid "E1407: Cannot use a Typealias as a variable or value"
msgstr "E1407: 型エイリアスを変数や値ã¨ã—ã¦ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“"
@@ -8665,6 +8651,76 @@ msgid "E1410: Const variable not supported in an interface"
msgstr "E1410: インターフェイス内㧠const 変数ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
#, c-format
+msgid "E1411: Missing dot after object \"%s\""
+msgstr "E1411: オブジェクト \"%s\" ã®å¾Œã«ãƒ‰ãƒƒãƒˆãŒã‚ã‚Šã¾ã›ã‚“"
+
+#, c-format
+msgid "E1412: Builtin object method \"%s\" not supported"
+msgstr "E1412: 組ã¿è¾¼ã¿ã‚ªãƒ–ジェクトメソッド \"%s\" ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+msgid "E1413: Builtin class method not supported"
+msgstr "E1413: 組ã¿è¾¼ã¿ã‚¯ãƒ©ã‚¹ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+msgid "E1414: Enum can only be defined in Vim9 script"
+msgstr "E1414: 列挙型㯠Vim9 script ã®ä¸­ã§ã®ã¿å®šç¾©ã§ãã¾ã™"
+
+#, c-format
+msgid "E1415: Enum name must start with an uppercase letter: %s"
+msgstr "E1415: 列挙型ã®åå‰ã¯è‹±å¤§æ–‡å­—ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s"
+
+msgid "E1416: Enum cannot extend a class or enum"
+msgstr "E1416: 列挙型ã¯ã‚¯ãƒ©ã‚¹ã‚„列挙型を拡張ã§ãã¾ã›ã‚“"
+
+msgid "E1417: Abstract cannot be used in an Enum"
+msgstr "E1417: abstract を列挙型内ã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "E1418: Invalid enum value declaration: %s"
+msgstr "E1418: ä¸æ­£ãªåˆ—挙値ã®å®£è¨€ã§ã™: %s"
+
+#, c-format
+msgid "E1419: Not a valid command in an Enum: %s"
+msgstr "E1419: 列挙型内ã§ã¯ä½¿ãˆãªã„コマンドã§ã™: %s"
+
+msgid "E1420: Missing :endenum"
+msgstr "E1420: :endenum ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#, c-format
+msgid "E1421: Enum \"%s\" cannot be used as a value"
+msgstr "E1421: 列挙型 \"%s\" を値ã¨ã—ã¦ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "E1422: Enum value \"%s\" not found in enum \"%s\""
+msgstr "E1422: 列挙値 \"%s\" ãŒåˆ—挙型 \"%s\" 内ã§è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+
+#, c-format
+msgid "E1423: Enum value \"%s.%s\" cannot be modified"
+msgstr "E1423: 列挙値 \"%s.%s\" ã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "E1424: Using an Enum \"%s\" as a Number"
+msgstr "E1424: 列挙型 \"%s\" を数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
+
+#, c-format
+msgid "E1425: Using an Enum \"%s\" as a String"
+msgstr "E1425: 列挙型 \"%s\" を文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
+
+#, c-format
+msgid "E1426: Enum \"%s\" ordinal value cannot be modified"
+msgstr "E1426: 列挙型 \"%s\" ã®é †åºå€¤ã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "E1427: Enum \"%s\" name cannot be modified"
+msgstr "E1427: 列挙型 \"%s\" ã®åå‰ã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "E1428: Duplicate enum value: %s"
+msgstr "E1428: 列挙値ãŒé‡è¤‡ã—ã¦ã„ã¾ã™: %s"
+
+msgid "E1429: Class can only be used in a script"
+msgstr "E1429: クラスã¯ã‚¹ã‚¯ãƒªãƒ—トã®ä¸­ã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™"
+
+#, c-format
msgid "E1500: Cannot mix positional and non-positional arguments: %s"
msgstr "E1500: ä½ç½®å¼•æ•°ã¨éžä½ç½®å¼•æ•°ã‚’æ··ãœã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“: %s"
@@ -8708,6 +8764,17 @@ msgstr "E1509: 拡張属性ã®èª­è¾¼ã¿ã¾ãŸã¯æ›¸è¾¼ã¿ã§ã‚¨ãƒ©ãƒ¼ãŒèµ·ãã
msgid "E1510: Value too large: %s"
msgstr "E1510: 値ãŒå¤§ãéŽãŽã¾ã™: %s"
+#, c-format
+msgid "E1511: Wrong number of characters for field \"%s\""
+msgstr "E1511: フィールド \"%s\" ã®æ–‡å­—æ•°ãŒé–“é•ã£ã¦ã„ã¾ã™"
+
+#, c-format
+msgid "E1512: Wrong character width for field \"%s\""
+msgstr "E1512: フィールド \"%s\" ã®æ–‡å­—å¹…ãŒé–“é•ã£ã¦ã„ã¾ã™"
+
+msgid "E1513: Cannot switch buffer. 'winfixbuf' is enabled"
+msgstr "E1513: ãƒãƒƒãƒ•ã‚¡ã‚’切り替ãˆã‚‰ã‚Œã¾ã›ã‚“。'winfixbuf' ãŒæœ‰åŠ¹åŒ–ã•ã‚Œã¦ã„ã¾ã™"
+
msgid "--No lines in buffer--"
msgstr "--ãƒãƒƒãƒ•ã‚¡ã«è¡ŒãŒã‚ã‚Šã¾ã›ã‚“--"
@@ -9096,7 +9163,7 @@ msgid "\" Hit <Enter> on an index line to jump there."
msgstr "\" インデックス行㧠<Enter> を打ã¤ã¨ã€ãã“ã«ã‚¸ãƒ£ãƒ³ãƒ—ã—ã¾ã™ã€‚"
msgid "\" Hit <Space> on a \"set\" line to refresh it."
-msgstr "\" \"set\" 行㧠<Spece> を打ã¤ã¨ã€æœ€æ–°ã®å€¤ãŒèª­è¾¼ã¾ã‚Œã¾ã™ã€‚"
+msgstr "\" \"set\" 行㧠<Space> を打ã¤ã¨ã€æœ€æ–°ã®å€¤ãŒèª­è¾¼ã¾ã‚Œã¾ã™ã€‚"
msgid "important"
msgstr "é‡è¦"
@@ -9415,6 +9482,9 @@ msgstr "ç¾åœ¨ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ä½¿ã‚れる最å°è¡Œæ•°"
msgid "minimal number of lines used for any window"
msgstr "ä»»æ„ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ä½¿ã‚れる最å°è¡Œæ•°"
+msgid "keep window focused on a single buffer"
+msgstr "ウィンドウãŒåˆ¥ã®ãƒãƒƒãƒ•ã‚¡ã«åˆ‡ã‚Šæ›¿ã‚らãªã„よã†ã«ã™ã‚‹"
+
msgid "keep the height of the window"
msgstr "ウィンドウã®é«˜ã•ã‚’ä¿ã¤"
@@ -9490,6 +9560,9 @@ msgstr "複数タブページ"
msgid "0, 1 or 2; when to use a tab pages line"
msgstr "0, 1 ã¾ãŸã¯ 2; タブページ行をã„ã¤ä½¿ã†ã‹"
+msgid "behaviour when closing tab pages: left, uselast or empty"
+msgstr "タブページを閉ã˜ã‚‹ã¨ãã®æŒ™å‹•: left, uselast ã¾ãŸã¯ empty"
+
msgid "maximum number of tab pages to open for -p and \"tab all\""
msgstr "-p 㨠\"tab all\" ã§é–‹ã‹ã‚Œã‚‹ã‚¿ãƒ–ページã®æœ€å¤§æ•°"
diff --git a/src/po/ja.sjis.po b/src/po/ja.sjis.po
index 589fd5a..7505121 100644
--- a/src/po/ja.sjis.po
+++ b/src/po/ja.sjis.po
@@ -3,7 +3,7 @@
# Do ":help uganda" in Vim to read copying and usage conditions.
# Do ":help credits" in Vim to see a list of people who contributed.
#
-# Copyright (C) 2001-2023 MURAOKA Taro <koron.kaoriya@gmail.com>,
+# Copyright (C) 2001-2024 MURAOKA Taro <koron.kaoriya@gmail.com>,
# vim-jp <http://vim-jp.org/>
#
# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
@@ -12,10 +12,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Vim 9.0\n"
+"Project-Id-Version: Vim 9.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-12-18 16:41+0900\n"
-"PO-Revision-Date: 2023-12-19 12:45+0900\n"
+"POT-Creation-Date: 2024-07-23 10:59+0900\n"
+"PO-Revision-Date: 2024-08-15 12:54+0900\n"
"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
"Language-Team: Japanese <https://github.com/vim-jp/lang-ja>\n"
"Language: ja\n"
@@ -175,6 +175,9 @@ msgstr " (file %d of %d)"
msgid " (file (%d) of %d)"
msgstr " (file (%d) of %d)"
+msgid "[Command Line]"
+msgstr "[ƒRƒ}ƒ“ƒhƒ‰ƒCƒ“]"
+
msgid "[Prompt]"
msgstr "[ƒvƒƒ“ƒvƒg]"
@@ -439,10 +442,6 @@ msgstr "•Ð‰¼–¼"
msgid "Bopomofo"
msgstr "’‰¹Žš•ê"
-msgid "Not enough memory to set references, garbage collection aborted!"
-msgstr ""
-"ƒK[ƒxƒbƒWƒRƒŒƒNƒVƒ‡ƒ“‚𒆎~‚µ‚Ü‚µ‚½! ŽQÆ‚ð쬂·‚é‚̂Ƀƒ‚ƒŠ‚ª•s‘«‚µ‚Ü‚µ‚½"
-
msgid ""
"\n"
"\tLast set from "
@@ -688,9 +687,6 @@ msgstr "ƒGƒ‰["
msgid "Interrupt"
msgstr "Š„ž‚Ý"
-msgid "[Command Line]"
-msgstr "[ƒRƒ}ƒ“ƒhƒ‰ƒCƒ“]"
-
msgid "is a directory"
msgstr "‚̓fƒBƒŒƒNƒgƒŠ‚Å‚·"
@@ -854,6 +850,10 @@ msgid "+-%s%3ld line: "
msgid_plural "+-%s%3ld lines: "
msgstr[0] "+-%s%3ld s: "
+msgid "Not enough memory to set references, garbage collection aborted!"
+msgstr ""
+"ƒK[ƒxƒbƒWƒRƒŒƒNƒVƒ‡ƒ“‚𒆎~‚µ‚Ü‚µ‚½! ŽQÆ‚ð쬂·‚é‚̂Ƀƒ‚ƒŠ‚ª•s‘«‚µ‚Ü‚µ‚½"
+
msgid "No match at cursor, finding next"
msgstr "ƒJ[ƒ\\ƒ‹‚̈ʒu‚Ƀ}ƒbƒ`‚Í‚ ‚è‚Ü‚¹‚ñAŽŸ‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚·"
@@ -1337,8 +1337,8 @@ msgstr " ƒ†[ƒU[’è‹`•âŠ® (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " ƒIƒ€ƒj•âŠ® (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ’Ô‚èC³Œó•â (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " ’Ô‚èC³Œó•â (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " ‹ÇŠƒL[ƒ[ƒh•âŠ® (^N^P)"
@@ -1416,6 +1416,9 @@ msgstr "mapnew() ‚̈ø”"
msgid "filter() argument"
msgstr "filter() ‚̈ø”"
+msgid "foreach() argument"
+msgstr "foreach() ‚̈ø”"
+
msgid "extendnew() argument"
msgstr "extendnew() ‚̈ø”"
@@ -2454,6 +2457,9 @@ msgstr "%s ‚Ö (%s ã‚Ì)"
msgid "Printing '%s'"
msgstr "ˆóü‚µ‚Ä‚¢‚Ü‚·: '%s'"
+#~ msgid "DefaultFontNameForWindows"
+#~ msgstr ""
+
#, c-format
msgid "Opening the X display took %ld msec"
msgstr "XƒT[ƒo[‚Ö‚ÌÚ‘±‚É %ld ƒ~ƒŠ•b‚©‚©‚è‚Ü‚µ‚½"
@@ -3394,8 +3400,8 @@ msgid "%s returning %s"
msgstr "%s ‚ª %s ‚ð•Ô‚µ‚Ü‚µ‚½"
#, c-format
-msgid "Function %s does not need compiling"
-msgstr "ŠÖ” %s ‚̓Rƒ“ƒpƒCƒ‹‚Ì•K—v‚ª‚ ‚è‚Ü‚¹‚ñ"
+msgid "Function %s%s%s does not need compiling"
+msgstr "ŠÖ” %s%s%s ‚̓Rƒ“ƒpƒCƒ‹‚Ì•K—v‚ª‚ ‚è‚Ü‚¹‚ñ"
#, c-format
msgid "%s (%s, compiled %s)"
@@ -3554,6 +3560,9 @@ msgstr " ‘æ2ƒ†[ƒU[ vimrc: \""
msgid " 3rd user vimrc file: \""
msgstr " ‘æ3ƒ†[ƒU[ vimrc: \""
+msgid " 4th user vimrc file: \""
+msgstr " ‘æ4ƒ†[ƒU[ vimrc: \""
+
msgid " user exrc file: \""
msgstr " ƒ†[ƒU[ exrc: \""
@@ -4158,6 +4167,10 @@ msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: :source ‚ÅŽæž‚Þƒtƒ@ƒCƒ‹ˆÈŠO‚Å‚Í :loadkeymap ‚ðŽg‚¦‚Ü‚¹‚ñ"
#, c-format
+msgid "E106: Unsupported diff output format: %s"
+msgstr "E106: ƒTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢diffo—̓tƒH[ƒ}ƒbƒg‚Å‚·: %s"
+
+#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: ƒJƒbƒR '(' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
@@ -4486,8 +4499,8 @@ msgstr "E196: ‚±‚̃o[ƒWƒ‡ƒ“‚ɇŽš‚Í‚ ‚è‚Ü‚¹‚ñ"
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: Œ¾Œê‚ð \"%s\" ‚ÉÝ’è‚Å‚«‚Ü‚¹‚ñ"
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: ƒAƒNƒeƒBƒu‚ȃEƒBƒ“ƒhƒE‚©ƒoƒbƒtƒ@‚ªíœ‚³‚ê‚Ü‚µ‚½"
+msgid "E199: Active window or buffer changed or deleted"
+msgstr "E199: ƒAƒNƒeƒBƒu‚ȃEƒBƒ“ƒhƒE‚©ƒoƒbƒtƒ@‚ª•ÏX‚Ü‚½‚Í휂³‚ê‚Ü‚µ‚½"
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: *ReadPre Ž©“®ƒRƒ}ƒ“ƒh ‚ªƒtƒ@ƒCƒ‹‚ð“Çž•s‰Â‚É‚µ‚Ü‚µ‚½"
@@ -5857,9 +5870,6 @@ msgstr "E612: sign‚Ì’è‹`‚ª‘½‰ß‚¬‚Ü‚·"
msgid "E613: Unknown printer font: %s"
msgstr "E613: –¢’m‚̃vƒŠƒ“ƒ^ƒIƒvƒVƒ‡ƒ“‚Å‚·: %s"
-msgid "E614: Class required"
-msgstr "E614: ƒNƒ‰ƒX‚ª•K—v‚Å‚·"
-
#, c-format
msgid "E616: Object required for argument %d"
msgstr "E616: ˆø” %d ‚ɂ̓IƒuƒWƒFƒNƒg‚ª•K—v‚Å‚·"
@@ -6696,7 +6706,7 @@ msgid "E862: Cannot use g: here"
msgstr "E862: ‚±‚±‚Å‚Í g: ‚ÍŽg‚¦‚Ü‚¹‚ñ"
msgid "E863: Not allowed for a terminal in a popup window"
-msgstr "E863: ’[––‚̓|ƒbƒvƒAƒbƒvƒEƒBƒ“ƒhƒE‚Å‚Í‹–‚³‚ê‚Ü‚¹‚ñ"
+msgstr "E863: ƒ|ƒbƒvƒAƒbƒvƒEƒBƒ“ƒhƒE“à‚Ì’[––‚Å‚Í‹–‚³‚ê‚Ü‚¹‚ñ"
#, no-c-format
msgid ""
@@ -6753,6 +6763,10 @@ msgstr ""
msgid "E876: (NFA regexp) Not enough space to store the whole NFA"
msgstr "E876: (NFA ³‹K•\\Œ») NFA‘S‘Ì‚ð•Û‘¶‚·‚é‚ɂ͋󂫃Xƒy[ƒX‚ª‘«‚è‚Ü‚¹‚ñ"
+#, c-format
+msgid "E877: (NFA regexp) Invalid character class: %d"
+msgstr "E877: (NFA ³‹K•\\Œ») –³Œø‚È•¶ŽšƒNƒ‰ƒX‚Å‚·: %d"
+
msgid "E878: (NFA regexp) Could not allocate memory for branch traversal!"
msgstr ""
"E878: (NFA ³‹K•\\Œ») Œ»Ý‰¡’f’†‚̃uƒ‰ƒ“ƒ`‚É\\•ª‚ȃƒ‚ƒŠ‚ðŠ„‚è“–‚Ä‚ç‚ê‚Ü‚¹‚ñ!"
@@ -8319,21 +8333,12 @@ msgstr "E1317: •s³‚ȃIƒuƒWƒFƒNƒg•Ï”‚Ì錾‚Å‚·: %s"
msgid "E1318: Not a valid command in a class: %s"
msgstr "E1318: ƒNƒ‰ƒX“à‚Å‚ÍŽg‚¦‚È‚¢ƒRƒ}ƒ“ƒh‚Å‚·: %s"
-msgid "E1319: Using a Class as a Number"
-msgstr "E1319: ƒNƒ‰ƒX‚ð”’l‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
msgid "E1320: Using an Object as a Number"
msgstr "E1320: ƒIƒuƒWƒFƒNƒg‚ð”’l‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-msgid "E1321: Using a Class as a Float"
-msgstr "E1321: ƒNƒ‰ƒX‚ð•‚“®¬”“_”‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
msgid "E1322: Using an Object as a Float"
msgstr "E1322: ƒIƒuƒWƒFƒNƒg‚ð•‚“®¬”“_”‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-msgid "E1323: Using a Class as a String"
-msgstr "E1323: ƒNƒ‰ƒX‚𕶎š—ñ‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
msgid "E1324: Using an Object as a String"
msgstr "E1324: ƒIƒuƒWƒFƒNƒg‚𕶎š—ñ‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
@@ -8362,14 +8367,14 @@ msgid "E1330: Invalid type for object variable: %s"
msgstr "E1330: ƒIƒuƒWƒFƒNƒg•Ï”‚Æ‚µ‚Ä–³Œø‚ÈŒ^‚Å‚·: %s"
msgid ""
-"E1331: Public must be followed by \"var\" or \"static\" or \"final\" or "
+"E1331: public must be followed by \"var\" or \"static\" or \"final\" or "
"\"const\""
msgstr ""
"E1331: public ‚ÌŒã‚ë‚É \"var\", \"static\", \"final\" ‚Ü‚½‚Í \"const\" ‚ª•K—v"
"‚Å‚·"
#, c-format
-msgid "E1332: Public variable name cannot start with underscore: %s"
+msgid "E1332: public variable name cannot start with underscore: %s"
msgstr "E1332: ƒpƒuƒŠƒbƒN•Ï”–¼‚̓Aƒ“ƒ_[ƒXƒRƒA‚ÅŽn‚߂邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ: %s"
#, c-format
@@ -8575,10 +8580,10 @@ msgstr ""
"E1386: ƒIƒuƒWƒFƒNƒgƒƒ\\ƒbƒh \"%s\" ‚̓Nƒ‰ƒX \"%s\" ‚̃IƒuƒWƒFƒNƒg‚ðŽg‚¤‚±‚Æ‚Ì"
"‚݂ŃAƒNƒZƒX‚Å‚«‚Ü‚·"
-msgid "E1387: Public variable not supported in an interface"
+msgid "E1387: public variable not supported in an interface"
msgstr "E1387: ƒCƒ“ƒ^[ƒtƒFƒCƒX“à‚ŃpƒuƒŠƒbƒN•Ï”‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-msgid "E1388: Public keyword not supported for a method"
+msgid "E1388: public keyword not supported for a method"
msgstr "E1388: ƒCƒ“ƒ^[ƒtƒFƒCƒX“à‚Å public ƒL[ƒ[ƒh‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
msgid "E1389: Missing name after implements"
@@ -8608,10 +8613,6 @@ msgid "E1394: Type name must start with an uppercase letter: %s"
msgstr "E1394: Œ^‚Ì–¼‘O‚͉p‘啶Žš‚ÅŽn‚Ü‚ç‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ: %s"
#, c-format
-msgid "E1395: Type alias \"%s\" cannot be modified"
-msgstr "E1395: Œ^ƒGƒCƒŠƒAƒX \"%s\" ‚Í•ÏX‚Å‚«‚Ü‚¹‚ñ"
-
-#, c-format
msgid "E1396: Type alias \"%s\" already exists"
msgstr "E1396: Œ^ƒGƒCƒŠƒAƒX \"%s\" ‚ÍŠù‚É‘¶Ý‚µ‚Ü‚·"
@@ -8625,18 +8626,6 @@ msgid "E1399: Type can only be used in a script"
msgstr "E1399: Œ^‚̓XƒNƒŠƒvƒg‚Ì’†‚Å‚Ì‚ÝŽg—p‚Å‚«‚Ü‚·"
#, c-format
-msgid "E1400: Using type alias \"%s\" as a Number"
-msgstr "E1400: Œ^ƒGƒCƒŠƒAƒX \"%s\" ‚ð”’l‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#, c-format
-msgid "E1401: Using type alias \"%s\" as a Float"
-msgstr "E1401: Œ^ƒGƒCƒŠƒAƒX \"%s\" ‚ð•‚“®¬”“_”‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#, c-format
-msgid "E1402: Using type alias \"%s\" as a String"
-msgstr "E1402: Œ^ƒGƒCƒŠƒAƒX \"%s\" ‚𕶎š—ñ‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#, c-format
msgid "E1403: Type alias \"%s\" cannot be used as a value"
msgstr "E1403: Œ^ƒGƒCƒŠƒAƒX \"%s\" ‚ð’l‚Æ‚µ‚ÄŽg‚¤‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ"
@@ -8647,9 +8636,6 @@ msgstr "E1404: abstract ‚ðƒCƒ“ƒ^[ƒtƒFƒCƒX“à‚ÅŽg‚¤‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ"
msgid "E1405: Class \"%s\" cannot be used as a value"
msgstr "E1405: ƒNƒ‰ƒX \"%s\" ‚ð’l‚Æ‚µ‚ÄŽg‚¤‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ"
-msgid "E1406: Cannot use a Class as a variable or value"
-msgstr "E1406: ƒNƒ‰ƒX‚ð•Ï”‚â’l‚Æ‚µ‚ÄŽg‚¤‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ"
-
msgid "E1407: Cannot use a Typealias as a variable or value"
msgstr "E1407: Œ^ƒGƒCƒŠƒAƒX‚ð•Ï”‚â’l‚Æ‚µ‚ÄŽg‚¤‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ"
@@ -8665,6 +8651,76 @@ msgid "E1410: Const variable not supported in an interface"
msgstr "E1410: ƒCƒ“ƒ^[ƒtƒFƒCƒX“à‚Å const •Ï”‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
#, c-format
+msgid "E1411: Missing dot after object \"%s\""
+msgstr "E1411: ƒIƒuƒWƒFƒNƒg \"%s\" ‚ÌŒã‚Ƀhƒbƒg‚ª‚ ‚è‚Ü‚¹‚ñ"
+
+#, c-format
+msgid "E1412: Builtin object method \"%s\" not supported"
+msgstr "E1412: ‘g‚Ýž‚݃IƒuƒWƒFƒNƒgƒƒ\\ƒbƒh \"%s\" ‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
+
+msgid "E1413: Builtin class method not supported"
+msgstr "E1413: ‘g‚Ýž‚݃Nƒ‰ƒXƒƒ\\ƒbƒh‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
+
+msgid "E1414: Enum can only be defined in Vim9 script"
+msgstr "E1414: —ñ‹“Œ^‚Í Vim9 script ‚Ì’†‚Å‚Ì‚Ý’è‹`‚Å‚«‚Ü‚·"
+
+#, c-format
+msgid "E1415: Enum name must start with an uppercase letter: %s"
+msgstr "E1415: —ñ‹“Œ^‚Ì–¼‘O‚͉p‘啶Žš‚ÅŽn‚Ü‚ç‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ: %s"
+
+msgid "E1416: Enum cannot extend a class or enum"
+msgstr "E1416: —ñ‹“Œ^‚̓Nƒ‰ƒX‚â—ñ‹“Œ^‚ðŠg’£‚Å‚«‚Ü‚¹‚ñ"
+
+msgid "E1417: Abstract cannot be used in an Enum"
+msgstr "E1417: abstract ‚ð—ñ‹“Œ^“à‚ÅŽg‚¤‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ"
+
+#, c-format
+msgid "E1418: Invalid enum value declaration: %s"
+msgstr "E1418: •s³‚È—ñ‹“’l‚Ì錾‚Å‚·: %s"
+
+#, c-format
+msgid "E1419: Not a valid command in an Enum: %s"
+msgstr "E1419: —ñ‹“Œ^“à‚Å‚ÍŽg‚¦‚È‚¢ƒRƒ}ƒ“ƒh‚Å‚·: %s"
+
+msgid "E1420: Missing :endenum"
+msgstr "E1420: :endenum ‚ª‚ ‚è‚Ü‚¹‚ñ"
+
+#, c-format
+msgid "E1421: Enum \"%s\" cannot be used as a value"
+msgstr "E1421: —ñ‹“Œ^ \"%s\" ‚ð’l‚Æ‚µ‚ÄŽg‚¤‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ"
+
+#, c-format
+msgid "E1422: Enum value \"%s\" not found in enum \"%s\""
+msgstr "E1422: —ñ‹“’l \"%s\" ‚ª—ñ‹“Œ^ \"%s\" “à‚ÅŒ©‚‚©‚è‚Ü‚¹‚ñ"
+
+#, c-format
+msgid "E1423: Enum value \"%s.%s\" cannot be modified"
+msgstr "E1423: —ñ‹“’l \"%s.%s\" ‚Í•ÏX‚Å‚«‚Ü‚¹‚ñ"
+
+#, c-format
+msgid "E1424: Using an Enum \"%s\" as a Number"
+msgstr "E1424: —ñ‹“Œ^ \"%s\" ‚ð”’l‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
+
+#, c-format
+msgid "E1425: Using an Enum \"%s\" as a String"
+msgstr "E1425: —ñ‹“Œ^ \"%s\" ‚𕶎š—ñ‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
+
+#, c-format
+msgid "E1426: Enum \"%s\" ordinal value cannot be modified"
+msgstr "E1426: —ñ‹“Œ^ \"%s\" ‚̇˜’l‚Í•ÏX‚Å‚«‚Ü‚¹‚ñ"
+
+#, c-format
+msgid "E1427: Enum \"%s\" name cannot be modified"
+msgstr "E1427: —ñ‹“Œ^ \"%s\" ‚Ì–¼‘O‚Í•ÏX‚Å‚«‚Ü‚¹‚ñ"
+
+#, c-format
+msgid "E1428: Duplicate enum value: %s"
+msgstr "E1428: —ñ‹“’l‚ªd•¡‚µ‚Ä‚¢‚Ü‚·: %s"
+
+msgid "E1429: Class can only be used in a script"
+msgstr "E1429: ƒNƒ‰ƒX‚̓XƒNƒŠƒvƒg‚Ì’†‚Å‚Ì‚ÝŽg—p‚Å‚«‚Ü‚·"
+
+#, c-format
msgid "E1500: Cannot mix positional and non-positional arguments: %s"
msgstr "E1500: ˆÊ’uˆø”‚Æ”ñˆÊ’uˆø”‚𬂺‚邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñ: %s"
@@ -8708,6 +8764,17 @@ msgstr "E1509: Šg’£‘®«‚Ì“Çž‚Ý‚Ü‚½‚Í‘ž‚݂ŃGƒ‰[‚ª‹N‚«‚Ü‚µ‚½"
msgid "E1510: Value too large: %s"
msgstr "E1510: ’l‚ª‘å‚«‰ß‚¬‚Ü‚·: %s"
+#, c-format
+msgid "E1511: Wrong number of characters for field \"%s\""
+msgstr "E1511: ƒtƒB[ƒ‹ƒh \"%s\" ‚Ì•¶Žš”‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚·"
+
+#, c-format
+msgid "E1512: Wrong character width for field \"%s\""
+msgstr "E1512: ƒtƒB[ƒ‹ƒh \"%s\" ‚Ì•¶Žš•‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚·"
+
+msgid "E1513: Cannot switch buffer. 'winfixbuf' is enabled"
+msgstr "E1513: ƒoƒbƒtƒ@‚ðØ‚è‘Ö‚¦‚ç‚ê‚Ü‚¹‚ñB'winfixbuf' ‚ª—LŒø‰»‚³‚ê‚Ä‚¢‚Ü‚·"
+
msgid "--No lines in buffer--"
msgstr "--ƒoƒbƒtƒ@‚És‚ª‚ ‚è‚Ü‚¹‚ñ--"
@@ -9096,7 +9163,7 @@ msgid "\" Hit <Enter> on an index line to jump there."
msgstr "\" ƒCƒ“ƒfƒbƒNƒXs‚Å <Enter> ‚ð‘ł‚ÆA‚»‚±‚ɃWƒƒƒ“ƒv‚µ‚Ü‚·B"
msgid "\" Hit <Space> on a \"set\" line to refresh it."
-msgstr "\" \"set\" s‚Å <Spece> ‚ð‘ł‚ÆAÅV‚Ì’l‚ª“Çž‚Ü‚ê‚Ü‚·B"
+msgstr "\" \"set\" s‚Å <Space> ‚ð‘ł‚ÆAÅV‚Ì’l‚ª“Çž‚Ü‚ê‚Ü‚·B"
msgid "important"
msgstr "d—v"
@@ -9415,6 +9482,9 @@ msgstr "Œ»Ý‚̃EƒBƒ“ƒhƒE‚ÉŽg‚í‚ê‚éŬs”"
msgid "minimal number of lines used for any window"
msgstr "”CˆÓ‚̃EƒBƒ“ƒhƒE‚ÉŽg‚í‚ê‚éŬs”"
+msgid "keep window focused on a single buffer"
+msgstr "ƒEƒBƒ“ƒhƒE‚ª•Ê‚̃oƒbƒtƒ@‚ÉØ‚è‘Ö‚í‚ç‚È‚¢‚悤‚É‚·‚é"
+
msgid "keep the height of the window"
msgstr "ƒEƒBƒ“ƒhƒE‚Ì‚‚³‚ð•Û‚Â"
@@ -9490,6 +9560,9 @@ msgstr "•¡”ƒ^ƒuƒy[ƒW"
msgid "0, 1 or 2; when to use a tab pages line"
msgstr "0, 1 ‚Ü‚½‚Í 2; ƒ^ƒuƒy[ƒWs‚ð‚¢‚ÂŽg‚¤‚©"
+msgid "behaviour when closing tab pages: left, uselast or empty"
+msgstr "ƒ^ƒuƒy[ƒW‚ð•Â‚¶‚é‚Æ‚«‚Ì‹““®: left, uselast ‚Ü‚½‚Í empty"
+
msgid "maximum number of tab pages to open for -p and \"tab all\""
msgstr "-p ‚Æ \"tab all\" ‚ÅŠJ‚©‚ê‚éƒ^ƒuƒy[ƒW‚ÌÅ‘å”"
diff --git a/src/po/ko.UTF-8.po b/src/po/ko.UTF-8.po
index a9ee0ca..f7714ae 100644
--- a/src/po/ko.UTF-8.po
+++ b/src/po/ko.UTF-8.po
@@ -411,8 +411,8 @@ msgstr " ì‚¬ìš©ìž ì •ì˜ ì™„ì„± (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni 완성 (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " 단어 제안 (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " 단어 제안 (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " ë‚±ë§ ë¡œì»¬ 완성 (^N^P)"
diff --git a/src/po/ko.po b/src/po/ko.po
index 00fb486..2b3c785 100644
--- a/src/po/ko.po
+++ b/src/po/ko.po
@@ -1,8 +1,8 @@
-# Generated from ko.UTF-8.po, DO NOT EDIT
+# Korean translation for Vim
#
# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2018
#
-# Original translations.
+# Generated from ko.UTF-8.po, DO NOT EDIT.
#
msgid ""
msgstr ""
@@ -14,7 +14,7 @@ msgstr ""
"Language-Team: Korean\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=euc-kr\n"
+"Content-Type: text/plain; charset=EUC-KR\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -411,8 +411,8 @@ msgstr " »ç¿ëÀÚ Á¤ÀÇ ¿Ï¼º (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni ¿Ï¼º (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ´Ü¾î Á¦¾È (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " ´Ü¾î Á¦¾È (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " ³¹¸» ·ÎÄà ¿Ï¼º (^N^P)"
diff --git a/src/po/nb.po b/src/po/nb.po
index d9f527b..957b99d 100644
--- a/src/po/nb.po
+++ b/src/po/nb.po
@@ -283,9 +283,8 @@ msgstr " Brukerdefinert fullføring (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni-fullføring (^O^N^P)"
-#, fuzzy
-#~ msgid " Spelling suggestion (s^N^P)"
-#~ msgstr " Staveforslag (^S^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Staveforslag (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Lokal nøkkelordfullføring (^N^P)"
diff --git a/src/po/nl.po b/src/po/nl.po
index 09f281b..6ac59ca 100644
--- a/src/po/nl.po
+++ b/src/po/nl.po
@@ -287,8 +287,8 @@ msgstr " gebruikergedefinieerde voltooiing (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " omni-voltooiing (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " spellingsuggestie (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " spellingsuggestie (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " lokaal-trefwoordvoltooiing (^N^P)"
diff --git a/src/po/no.po b/src/po/no.po
index d9f527b..957b99d 100644
--- a/src/po/no.po
+++ b/src/po/no.po
@@ -283,9 +283,8 @@ msgstr " Brukerdefinert fullføring (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni-fullføring (^O^N^P)"
-#, fuzzy
-#~ msgid " Spelling suggestion (s^N^P)"
-#~ msgstr " Staveforslag (^S^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Staveforslag (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Lokal nøkkelordfullføring (^N^P)"
diff --git a/src/po/pl.UTF-8.po b/src/po/pl.UTF-8.po
index c9036a3..39064f6 100644
--- a/src/po/pl.UTF-8.po
+++ b/src/po/pl.UTF-8.po
@@ -298,8 +298,8 @@ msgstr "Dopełnianie zdefiniowane przez użytkownika (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni uzupełnianie (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr "Propozycja pisowni (^L^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr "Propozycja pisowni (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Lokalne dopełnianie słów kluczowych (^N^P)"
diff --git a/src/po/pl.cp1250.po b/src/po/pl.cp1250.po
index 9280d2f..6f9b66d 100644
--- a/src/po/pl.cp1250.po
+++ b/src/po/pl.cp1250.po
@@ -17,7 +17,7 @@ msgstr ""
"Language-Team: Polish\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=cp1250\n"
+"Content-Type: text/plain; charset=CP1250\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
@@ -298,8 +298,8 @@ msgstr "Dope³nianie zdefiniowane przez u¿ytkownika (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni uzupe³nianie (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr "Propozycja pisowni (^L^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr "Propozycja pisowni (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Lokalne dope³nianie s³ów kluczowych (^N^P)"
diff --git a/src/po/pl.po b/src/po/pl.po
index f10897d..aebc33f 100644
--- a/src/po/pl.po
+++ b/src/po/pl.po
@@ -298,8 +298,8 @@ msgstr "Dope³nianie zdefiniowane przez u¿ytkownika (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni uzupe³nianie (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr "Propozycja pisowni (^L^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr "Propozycja pisowni (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Lokalne dope³nianie s³ów kluczowych (^N^P)"
diff --git a/src/po/pt_BR.po b/src/po/pt_BR.po
index 3a8844a..1cf15b5 100644
--- a/src/po/pt_BR.po
+++ b/src/po/pt_BR.po
@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: Vim 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-09-10 11:11-0300\n"
-"PO-Revision-Date: 2017-09-10 11:12-0300\n"
+"PO-Revision-Date: 2024-08-23 18:04+0200\n"
"Last-Translator: Eduardo S. Dobay <edudobay@gmail.com>\n"
"Language-Team: Brazilian Portuguese\n"
"Language: pt_BR\n"
@@ -226,20 +226,20 @@ msgstr "E898: socket() em channel_open()"
# TODO: Capitalise first word of message?
msgid "E903: Received command with non-string argument"
-msgstr "E903: comando recebido com argumento não-string"
+msgstr "E903: Comando recebido com argumento não-string"
# TODO: Capitalise first word of message?
msgid "E904: Last argument for expr/call must be a number"
-msgstr "E904: último argumento para expr/call deve ser numérico"
+msgstr "E904: Último argumento para expr/call deve ser numérico"
# TODO: Capitalise first word of message?
msgid "E904: Third argument for call must be a list"
-msgstr "E904: terceiro argumento para call deve ser uma lista"
+msgstr "E904: Terceiro argumento para call deve ser uma lista"
#, c-format
# TODO: Capitalise first word of message?
msgid "E905: Received unknown command: %s"
-msgstr "E905: comando desconhecido recebido: %s"
+msgstr "E905: Comando desconhecido recebido: %s"
#, c-format
# TODO: Capitalise first word of message?
@@ -273,7 +273,7 @@ msgstr "E915: buffer in_io requer definição de in_buf ou in_name"
#, c-format
# TODO: Capitalise first word of message?
msgid "E918: Buffer must be loaded: %s"
-msgstr "E918: buffer precisa ser carregado: %s"
+msgstr "E918: Buffer precisa ser carregado: %s"
msgid "E821: File is encrypted with unknown method"
msgstr "E821: Arquivo criptografado com método desconhecido"
@@ -406,8 +406,8 @@ msgstr " Completar definido pelo usuário (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Completação inteligente (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Sugestão de ortografia (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Sugestão de ortografia (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Completar palavra-chave local (^N^P)"
@@ -536,7 +536,7 @@ msgstr "E940: Impossível travar ou destravar variável %s"
# TODO: Capitalise first word of message?
msgid "E743: Variable nested too deep for (un)lock"
-msgstr "E743: variável aninhada demais para (des)bloquear"
+msgstr "E743: Variável aninhada demais para (des)bloquear"
msgid "E109: Missing ':' after '?'"
msgstr "E109: ':' faltando depois de '?'"
@@ -590,7 +590,7 @@ msgstr ""
# TODO: Capitalise first word of message?
msgid "E724: Variable nested too deep for displaying"
-msgstr "E724: variável aninhada demais para ser exibida"
+msgstr "E724: Variável aninhada demais para ser exibida"
msgid "E805: Using a Float as a Number"
msgstr "E805: Float usado como Número"
@@ -669,7 +669,7 @@ msgstr "E742: Não é possível mudar valor de %s"
# TODO: Capitalise first word of message?
msgid "E698: Variable nested too deep for making a copy"
-msgstr "E698: variável aninhada demais para fazer uma cópia"
+msgstr "E698: Variável aninhada demais para fazer uma cópia"
msgid ""
"\n"
@@ -739,7 +739,7 @@ msgstr "E786: Intervalos não são permitidos"
# TODO: Capitalise first word of message?
msgid "E916: Not a valid job"
-msgstr "E916: não é um trabalho válido"
+msgstr "E916: Não é um trabalho válido"
msgid "E701: Invalid type for len()"
msgstr "E701: Tipo inválido para len()"
@@ -808,7 +808,7 @@ msgstr "(Inválido)"
#, c-format
# TODO: Capitalise first word of message?
msgid "E935: Invalid submatch number: %d"
-msgstr "E935: número inválido para subpadrão: %d"
+msgstr "E935: Número inválido para subpadrão: %d"
msgid "E677: Error writing temp file"
msgstr "E677: Erro ao gravar o arquivo temporário"
@@ -1107,7 +1107,7 @@ msgstr "E157: ID de sinal inválido: %ld"
#, c-format
msgid "E885: Not possible to change sign %s"
-msgstr "E885: Não é possível mudar o sinal %s"
+msgstr "E885: Não é possível alterar o sinal %s"
msgid " (NOT FOUND)"
msgstr " (NÃO ENCONTRADO)"
@@ -1184,7 +1184,7 @@ msgstr "E165: Impossível ir além do último arquivo"
#, c-format
# TODO: Capitalise first word of message?
msgid "E666: Compiler not supported: %s"
-msgstr "E666: compilador não suportado: %s"
+msgstr "E666: Compilador não suportado: %s"
#, c-format
msgid "Searching for \"%s\" in \"%s\""
@@ -1409,6 +1409,9 @@ msgstr "E784: Não é possível fechar a última aba"
msgid "Already only one tab page"
msgstr "Já há apenas uma aba"
+msgid "Edit File in new tab page"
+msgstr "Editar arquivo na nova aba"
+
msgid "Edit File in new window"
msgstr "Editar arquivo em nova janela"
@@ -1653,7 +1656,7 @@ msgstr ""
"# Histórico de %s (mais recente primeiro):\n"
msgid "Command Line"
-msgstr "linha de comando"
+msgstr "Linha de comando"
msgid "Search String"
msgstr "expressões de busca"
@@ -1725,7 +1728,7 @@ msgid "[socket]"
msgstr "[socket]"
msgid "[character special]"
-msgstr "[dispositivo de caractere]"
+msgstr "[caractere especial]"
msgid "[CR missing]"
msgstr "[CR faltando]"
@@ -1838,7 +1841,7 @@ msgstr " ERRO DE CONVERSÃO"
#, c-format
msgid " in line %ld;"
-msgstr "na linha %ld;"
+msgstr " na linha %ld;"
msgid "[Device]"
msgstr "[Dispositivo]"
diff --git a/src/po/ru.cp1251.po b/src/po/ru.cp1251.po
index 05d10e0..d598cbf 100644
--- a/src/po/ru.cp1251.po
+++ b/src/po/ru.cp1251.po
@@ -475,8 +475,7 @@ msgstr ""
# :!~ Restorer
#, c-format
msgid "xchacha20v2: using custom algorithm \"%d\" for Key derivation."
-msgstr ""
-"XChaCha20v2: äëÿ ïîëó÷åíèÿ êëþ÷à ïðèìåí¸í íåñòàíäàðòíûé àëãîðèòì \"%d\""
+msgstr "XChaCha20v2: äëÿ ïîëó÷åíèÿ êëþ÷à ïðèìåí¸í íåñòàíäàðòíûé àëãîðèòì \"%d\""
# #Restorer: âûâîäèòñÿ ïðè çíà÷åíèè 'verbose'>0
# :!~ Restorer
@@ -722,8 +721,7 @@ msgstr ""
# :!~ Restorer
msgid "called inputrestore() more often than inputsave()"
msgstr ""
-"Êîëè÷åñòâî âûçîâîâ ôóíêöèè inputrestore() ïðåâûøàåò âûçîâû ôóíêöèè "
-"inputsave()"
+"Êîëè÷åñòâî âûçîâîâ ôóíêöèè inputrestore() ïðåâûøàåò âûçîâû ôóíêöèè inputsave()"
# #Restorer: íàïðèìåð, êîìàíäà `:ascii` è `ga`
# #Restorer: åñëè ïîäêëþ÷åí êîìïîíåíò +digraphs è äëÿ ñèìâîëà åñòü äèãðàô
@@ -1243,8 +1241,7 @@ msgstr "[íåò ñèìâîëà çàâåðøåíèÿ ñòðîêè]"
msgid ""
"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
"well"
-msgstr ""
-"W12: Âíèìàíèå! Íå ñâÿçàííûå èçìåíåíèÿ ñîäåðæèìîãî áóôåðà è ôàéëà \"%s\""
+msgstr "W12: Âíèìàíèå! Íå ñâÿçàííûå èçìåíåíèÿ ñîäåðæèìîãî áóôåðà è ôàéëà \"%s\""
# :!~ Restorer
msgid "See \":help W12\" for more info."
@@ -1264,8 +1261,7 @@ msgstr "×òîáû ïîëó÷èòü äîïîëíèòåëüíóþ èíôîðìàöèþ, íàáåðèòå `:help W11`"
#, c-format
msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
msgstr ""
-"W16: Âíèìàíèå! Ïîñëå ñ÷èòûâàíèÿ â áóôåð, èçìåíåíû ïðàâà äîñòóïà ê ôàéëó "
-"\"%s\""
+"W16: Âíèìàíèå! Ïîñëå ñ÷èòûâàíèÿ â áóôåð, èçìåíåíû ïðàâà äîñòóïà ê ôàéëó \"%s\""
# :!~ Restorer
msgid "See \":help W16\" for more info."
@@ -1958,12 +1954,10 @@ msgstr "âûïîëíåíèå ïðåðâàíî ïîëüçîâàòåëåì"
# :!~ Restorer
msgid "cannot create buffer/window command: object is being deleted"
msgstr ""
-"îáúåêò áóôåðà èëè îêíà â ïðîöåññå óäàëåíèÿ. Íå óäàëîñü ñîçäàòü äëÿ íèõ "
-"êîìàíäó"
+"îáúåêò áóôåðà èëè îêíà â ïðîöåññå óäàëåíèÿ. Íå óäàëîñü ñîçäàòü äëÿ íèõ êîìàíäó"
# :!~ Restorer
-msgid ""
-"cannot register callback command: buffer/window is already being deleted"
+msgid "cannot register callback command: buffer/window is already being deleted"
msgstr ""
"îáúåêò áóôåðà èëè îêíà â ïðîöåññå óäàëåíèÿ. Íå óäàëîñü çàðåãèñòðèðîâàòü "
"êîìàíäó"
@@ -2045,7 +2039,7 @@ msgid " Omni completion (^O^N^P)"
msgstr " Ïîäñòàíîâêà ïî êîíòåêñòó CTRL+O è CTRL+N èëè CTRL+P"
# :!~ Restorer
-msgid " Spelling suggestion (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
msgstr " Ïîäñòàíîâêà âàðèàíòîâ íàïèñàíèÿ CTRL+S è CTRL+N èëè CTRL+P"
# :!~ Restorer
@@ -2248,8 +2242,7 @@ msgstr ""
# :!~ Restorer
msgid "Vim: Error: This version of Vim does not run in a Cygwin terminal\n"
-msgstr ""
-"Ïðîãðàììà Vim. Äàííàÿ âåðñèÿ ïðîãðàììû íå ðàáîòàåò â òåðìèíàëå Cygwin\n"
+msgstr "Ïðîãðàììà Vim. Äàííàÿ âåðñèÿ ïðîãðàììû íå ðàáîòàåò â òåðìèíàëå Cygwin\n"
# :!~ Restorer
msgid "Vim: Warning: Output is not to a terminal\n"
@@ -2481,8 +2474,7 @@ msgstr "--not-a-term\t\tÍå ñîîáùàòü îá îòñóòñòâèè òåðìèíàëà äëÿ ââîäà-âûâîäà"
# :!~ Restorer
msgid "--gui-dialog-file {fname} For testing: write dialog text"
-msgstr ""
-"--gui-dialog-file {ôàéë} Çàïèñü ñîîáùåíèé äèàëîãîâûõ îêîí. Äëÿ îòëàäêè"
+msgstr "--gui-dialog-file {ôàéë} Çàïèñü ñîîáùåíèé äèàëîãîâûõ îêîí. Äëÿ îòëàäêè"
# :!~ Restorer
msgid "--ttyfail\t\tExit if input or output is not a terminal"
@@ -2564,13 +2556,11 @@ msgstr "-X\t\t\tÇàïóñê ïðîãðàììû áåç ïîäêëþ÷åíèÿ ê X-ñåðâåðó"
# :!~ Restorer
msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-msgstr ""
-"--remote <ôàéëû>\tÐåäàêòèðîâàíèå <ôàéëîâ> íà Vim-ñåðâåðå, åñëè äîñòóïåí"
+msgstr "--remote <ôàéëû>\tÐåäàêòèðîâàíèå <ôàéëîâ> íà Vim-ñåðâåðå, åñëè äîñòóïåí"
# :!~ Restorer
msgid "--remote-silent <files> Same, don't complain if there is no server"
-msgstr ""
-"--remote-silent <ôàéëû> Òî æå, íî íå ñîîáùàòü î íåäîñòóïíîñòè ñåðâåðà"
+msgstr "--remote-silent <ôàéëû> Òî æå, íî íå ñîîáùàòü î íåäîñòóïíîñòè ñåðâåðà"
# #Restorer: äîáàâèë ïàðó ïðîáåëüíûõ ñèìâîëîâ, äàáû ïîäðàâíÿòü ñîîáùåíèå
# ~!: earlier
@@ -2580,8 +2570,7 @@ msgstr ""
"--remote-wait <ôàéëû> Òî æå, ÷òî è --remote, íî ñ îæèäàíèåì çàâåðøåíèÿ"
# :!~ Restorer
-msgid ""
-"--remote-wait-silent <files> Same, don't complain if there is no server"
+msgid "--remote-wait-silent <files> Same, don't complain if there is no server"
msgstr ""
"--remote-wait-silent <ôàéëû> Òî æå, íî íå ñîîáùàòü î íåäîñòóïíîñòè ñåðâåðà"
@@ -2614,8 +2603,7 @@ msgstr "--startuptime <ôàéë>\tÇàïèñàòü õðîíîìåòðàæ çàïóñêà ïðîãðàììû â <ôàéë>"
# :!~ Restorer
msgid "--log <file>\t\tStart logging to <file> early"
-msgstr ""
-"--log <ôàéë>\t\tÇàïèñü ïðîòîêîëà ðàáîòû ñ ýòàïà èíèöèàëèçàöèè ïðîãðàììû"
+msgstr "--log <ôàéë>\t\tÇàïèñü ïðîòîêîëà ðàáîòû ñ ýòàïà èíèöèàëèçàöèè ïðîãðàììû"
# :!~ Restorer
msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
@@ -2715,8 +2703,7 @@ msgstr ""
# :!~ Restorer
msgid "--role <role>\tSet a unique role to identify the main window"
-msgstr ""
-"--role <ðîëü>\tÇàäàòü óíèêàëüíóþ <ðîëü> ãëàâíîãî îêíà äëÿ èäåíòèôèêàöèè"
+msgstr "--role <ðîëü>\tÇàäàòü óíèêàëüíóþ <ðîëü> ãëàâíîãî îêíà äëÿ èäåíòèôèêàöèè"
# :!~ Restorer
msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
@@ -2841,8 +2828,7 @@ msgstr "Äëÿ âîññòàíîâëåíèÿ ýòîãî ôàéëà, èñïîëüçóéòå ïðîãðàììó Vim âåðñèè 3.0\n"
# :!~ Restorer
msgid " cannot be used on this computer.\n"
-msgstr ""
-" íåñîâìåñòèì ñ ïðîãðàììíî-àïïàðàòíîé àðõèòåêòóðîé äàííîãî êîìïüþòåðà.\n"
+msgstr " íåñîâìåñòèì ñ ïðîãðàììíî-àïïàðàòíîé àðõèòåêòóðîé äàííîãî êîìïüþòåðà.\n"
# ~!: earlier
msgid "The file was created on "
@@ -3098,8 +3084,7 @@ msgid ""
" [not usable on this computer]"
msgstr ""
"\n"
-" [íåñîâìåñòèì ñ ïðîãðàììíî-àïïàðàòíîé àðõèòåêòóðîé äàííîãî "
-"êîìïüþòåðà]"
+" [íåñîâìåñòèì ñ ïðîãðàììíî-àïïàðàòíîé àðõèòåêòóðîé äàííîãî êîìïüþòåðà]"
# :!~ Restorer
msgid " [cannot be read]"
@@ -3169,8 +3154,7 @@ msgstr ""
"(1) Âîçìîæíî, ðåäàêòèðîâàíèå ýòîãî æå ôàéëà âûïîëíÿåòñÿ â äðóãîé ïðîãðàììå\n"
" íà ýòîì æå êîìïüþòåðå èëè ïî ñåòåâîìó ïîäêëþ÷åíèþ.\n"
"\n"
-" ýòîì ñëó÷àå ëó÷øå íå ðåäàêòèðîâàòü ýòîò ôàéë èëè äåëàòü ýòî "
-"îñìîòðèòåëüíî,\n"
+" ýòîì ñëó÷àå ëó÷øå íå ðåäàêòèðîâàòü ýòîò ôàéë èëè äåëàòü ýòî îñìîòðèòåëüíî,\n"
"÷òîáû íå ïîÿâèëîñü äâà âàðèàíòà îäíîãî è òîãî æå ôàéëà.\n"
"Áóäüòå âíèìàòåëüíû è åù¸ ðàç âñ¸ ïðîâåðüòå.\n"
"\n"
@@ -3495,8 +3479,8 @@ msgid ""
"Col %s of %s; Line %ld of %ld; Word %lld of %lld; Char %lld of %lld; Byte "
"%lld of %lld"
msgstr ""
-"Êîëîíêà %s èç %s; ñòðîêà %ld èç %ld; ñëîâî %lld èç %lld; ëèòåðà %lld èç "
-"%lld; áàéò %lld èç %lld"
+"Êîëîíêà %s èç %s; ñòðîêà %ld èç %ld; ñëîâî %lld èç %lld; ëèòåðà %lld èç %lld; "
+"áàéò %lld èç %lld"
# #Restorer: äîáàâëÿåòñÿ ê ñîîáùåíèþ î ïîçèöèè êàðåòêè èç ïðåäûäóùèõ msgid
# #Restorer: âñòàâèë ïðîáåë ïåðåä ñêîáêîé, ïîñìîòðèì, êàê áóäåò âûãëÿäåòü
@@ -3509,8 +3493,7 @@ msgstr " (+%lld ñ ó÷¸òîì ÌÏÁ)"
# :!~ Restorer
msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
msgstr ""
-"W17: Äëÿ ðàáîòû ñ àðàáñêîé ïèñüìåííîñòüþ ââåäèòå êîìàíäó `:set "
-"encoding=utf-8`"
+"W17: Äëÿ ðàáîòû ñ àðàáñêîé ïèñüìåííîñòüþ ââåäèòå êîìàíäó `:set encoding=utf-8`"
# #Restorer: âûâîäèòñÿ ïî êîìàíäå `:set termcap`
# :!~ Restorer
@@ -3559,8 +3542,7 @@ msgstr "Ïðîãðàììà VIM. Íå óäàëîñü îòîáðàçèòü îêíî íà ýêðàíå!\n"
# :!~ Restorer
msgid "Need Amigados version 2.04 or later\n"
-msgstr ""
-"Òðåáóåòñÿ îïåðàöèîííàÿ ñèñòåìà Amigados âåðñèè 2.04 èëè áîëåå ïîçäíåé\n"
+msgstr "Òðåáóåòñÿ îïåðàöèîííàÿ ñèñòåìà Amigados âåðñèè 2.04 èëè áîëåå ïîçäíåé\n"
# :!~ Restorer
#, c-format
@@ -3858,8 +3840,7 @@ msgstr "Íå óäàëîñü îòêðûòü ôàéë \"%s\""
# :!~ Restorer
msgid "cannot have both a list and a \"what\" argument"
msgstr ""
-"â ôóíêöèè setqflist(). Äîëæåí áûòü óêàçàí ëèáî ïåðâûé, ëèáî ïîñëåäíèé "
-"àðãóìåíò"
+"â ôóíêöèè setqflist(). Äîëæåí áûòü óêàçàí ëèáî ïåðâûé, ëèáî ïîñëåäíèé àðãóìåíò"
# #Restorer: âûâîäèòñÿ ïðè 'verbose'>0
# :!~ Restorer
@@ -4308,8 +4289,7 @@ msgstr " ôàéëå %s íà ñòðîêå %d íåäîïóñòèìîå çíà÷åíèå ïðàâèëà COMPOUNDMIN %s"
# :!~ Restorer
#, c-format
msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr ""
-" ôàéëå %s íà ñòðîêå %d íåäîïóñòèìîå çíà÷åíèå ïðàâèëà COMPOUNDSYLMAX %s"
+msgstr " ôàéëå %s íà ñòðîêå %d íåäîïóñòèìîå çíà÷åíèå ïðàâèëà COMPOUNDSYLMAX %s"
# :!~ Restorer
#, c-format
@@ -4321,8 +4301,7 @@ msgstr ""
#, c-format
msgid "Different combining flag in continued affix block in %s line %d: %s"
msgstr ""
-"Â ôàéëå %s íà ñòðîêå %d íåäîïóñòèìûé ïðèçíàê êîìáèíèðîâàíèÿ áëîêîâ àôôèêñîâ "
-"%s"
+"Â ôàéëå %s íà ñòðîêå %d íåäîïóñòèìûé ïðèçíàê êîìáèíèðîâàíèÿ áëîêîâ àôôèêñîâ %s"
# :!~ Restorer
#, c-format
@@ -4351,8 +4330,7 @@ msgstr "Â ôàéëå %s íà ñòðîêå %d íåäîïóñòèìîå äëÿ âûïîëíåíèÿ ïîèñêà óñëîâèå %s"
# :!~ Restorer
#, c-format
msgid "Expected REP(SAL) count in %s line %d"
-msgstr ""
-" ôàéëå %s íà ñòðîêå %d äëÿ ïðàâèë REP èëè REPSAL íå óêàçàíî êîëè÷åñòâî"
+msgstr " ôàéëå %s íà ñòðîêå %d äëÿ ïðàâèë REP èëè REPSAL íå óêàçàíî êîëè÷åñòâî"
# :!~ Restorer
#, c-format
@@ -4539,8 +4517,7 @@ msgstr "Îöåíêà èñïîëüçîâàíèÿ ïàìÿòè ïðè âûïîëíåíèè: %d áàéò"
# :!~ Restorer
msgid "Warning: both compounding and NOBREAK specified"
-msgstr ""
-"Âíèìàíèå! Óêàçàíû êàê ïðàâèëà äëÿ ñîñòàâíûõ ñëîâ, òàê è ïðàâèëî NOBREAK"
+msgstr "Âíèìàíèå! Óêàçàíû êàê ïðàâèëà äëÿ ñîñòàâíûõ ñëîâ, òàê è ïðàâèëî NOBREAK"
# :!~ Restorer
#, c-format
@@ -5307,32 +5284,28 @@ msgstr "Íåñ÷àñòíûì äåòÿì Óãàíäû òðåáóåòñÿ âàøà ïîìîùü!"
# :!~ Restorer
msgid "type :help iccf<Enter> for information "
msgstr ""
-"íàáåðèòå :help iccf<ENTER> ÷òîáû óçíàòü îá ýòîì "
-"ïîäðîáíåå "
+"íàáåðèòå :help iccf<ENTER> ÷òîáû óçíàòü îá ýòîì ïîäðîáíåå "
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# #Restorer: âûðàâíèâàåòñÿ ïî ñàìîìó äëèííîìó ïîäîáíîìó ñîîáùåíèþ
# :!~ Restorer
msgid "type :q<Enter> to exit "
msgstr ""
-"íàáåðèòå :q<ENTER> ÷òîáû çàâåðøèòü ðàáîòó ñ "
-"ïðîãðàììîé "
+"íàáåðèòå :q<ENTER> ÷òîáû çàâåðøèòü ðàáîòó ñ ïðîãðàììîé "
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# #Restorer: âûðàâíèâàåòñÿ ïî ñàìîìó äëèííîìó ïîäîáíîìó ñîîáùåíèþ
# :!~ Restorer
msgid "type :help<Enter> or <F1> for on-line help"
msgstr ""
-"íàáåðèòå :help<ENTER> èëè íàæìèòå <F1> ÷òîáû îçíàêîìèòüñÿ ñ "
-"äîêóìåíòàöèåé "
+"íàáåðèòå :help<ENTER> èëè íàæìèòå <F1> ÷òîáû îçíàêîìèòüñÿ ñ äîêóìåíòàöèåé "
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# #Restorer: âûðàâíèâàåòñÿ ïî ñàìîìó äëèííîìó ïîäîáíîìó ñîîáùåíèþ
# :!~ Restorer
msgid "type :help version9<Enter> for version info"
msgstr ""
-"íàáåðèòå :help version9<ENTER> ÷òîáû óçíàòü ïîäðîáíåå îá ýòîé "
-"âåðñèè"
+"íàáåðèòå :help version9<ENTER> ÷òîáû óçíàòü ïîäðîáíåå îá ýòîé âåðñèè"
# :!~ Restorer
msgid "Running in Vi compatible mode"
@@ -5343,61 +5316,53 @@ msgstr "Ïðîãðàììà ðàáîòàåò â ðåæèìå ñîâìåñòèìîñòè ñ ðåäàêòîðîì Vi"
# :!~ Restorer
msgid "type :set nocp<Enter> for Vim defaults"
msgstr ""
-"íàáåðèòå :set nocp<ENTER> ÷òîáû àêòèâèðîâàòü âîçìîæíîñòè "
-"Vim "
+"íàáåðèòå :set nocp<ENTER> ÷òîáû àêòèâèðîâàòü âîçìîæíîñòè Vim "
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# #Restorer: âûðàâíèâàåòñÿ ïî ñàìîìó äëèííîìó ïîäîáíîìó ñîîáùåíèþ
# :!~ Restorer
msgid "type :help cp-default<Enter> for info on this"
msgstr ""
-"íàáåðèòå :help cp-default<ENTER> ÷òîáû óçíàòü îá ýòîì "
-"ïîäðîáíåå "
+"íàáåðèòå :help cp-default<ENTER> ÷òîáû óçíàòü îá ýòîì ïîäðîáíåå "
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# #Restorer: âûðàâíèâàåòñÿ ïî ñàìîìó äëèííîìó ïîäîáíîìó ñîîáùåíèþ
# :!~ Restorer
msgid "menu Help->Orphans for information "
msgstr ""
-"ìåíþ Ñïðàâêà->Áëàãîòâîðèòåëüíîñòü ÷òîáû óçíàòü îá ýòîì "
-"ïîäðîáíåå"
+"ìåíþ Ñïðàâêà->Áëàãîòâîðèòåëüíîñòü ÷òîáû óçíàòü îá ýòîì ïîäðîáíåå"
# #Restorer: âûâîäèòñÿ òîëüêî â ÃÈÏ ïðè çàïóñêå gVim Easy
# :!~ Restorer
msgid "Running modeless, typed text is inserted"
msgstr ""
-"Óïðîù¸ííûé âàðèàíò. Âñ¸ ÷òî íàáèðàåòñÿ, ñ÷èòàåòñÿ òåêñòîì è ïîìåùàåòñÿ â "
-"áóôåð"
+"Óïðîù¸ííûé âàðèàíò. Âñ¸ ÷òî íàáèðàåòñÿ, ñ÷èòàåòñÿ òåêñòîì è ïîìåùàåòñÿ â áóôåð"
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# #Restorer: âûðàâíèâàåòñÿ ïî ñàìîìó äëèííîìó ïîäîáíîìó ñîîáùåíèþ
# :!~ Restorer
msgid "menu Edit->Global Settings->Toggle Insert Mode "
msgstr ""
-"ìåíþ Ïðàâêà->Îáùèå ïàðàìåòðû->Ðåæèì âñòàâêè ÷òîáû ïåðåêëþ÷àòü "
-"èç "
+"ìåíþ Ïðàâêà->Îáùèå ïàðàìåòðû->Ðåæèì âñòàâêè ÷òîáû ïåðåêëþ÷àòü èç "
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# :!~ Restorer
msgid " for two modes "
msgstr ""
-" ðåæèìà âñòàâêè â ðåæèì "
-"êîìàíä"
+" ðåæèìà âñòàâêè â ðåæèì êîìàíä"
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# #Restorer: âûðàâíèâàåòñÿ ïî ñàìîìó äëèííîìó ïîäîáíîìó ñîîáùåíèþ
# :!~ Restorer
msgid "menu Edit->Global Settings->Toggle Vi Compatible"
msgstr ""
-"ìåíþ Ïðàâêà->Îáùèå ïàðàìåòðû->Ñîâìåñòèìîñòü ñ Vi ÷òîáû "
-"àêòèâèðîâàòü "
+"ìåíþ Ïðàâêà->Îáùèå ïàðàìåòðû->Ñîâìåñòèìîñòü ñ Vi ÷òîáû àêòèâèðîâàòü "
# #Restorer: ïðîáåëû íå óáèðàòü, ñäåëàíî äëÿ âûðàâíèâàíèÿ ñîîáùåíèé
# :!~ Restorer
msgid " for Vim defaults "
msgstr ""
-" âîçìîæíîñòè ðåäàêòîðà "
-"Vim "
+" âîçìîæíîñòè ðåäàêòîðà Vim "
# :!~ Restorer
msgid "Sponsor Vim development!"
@@ -5426,8 +5391,7 @@ msgstr ""
# :!~ Restorer
msgid "menu Help->Sponsor/Register for information "
msgstr ""
-"ìåíþ Ñïðàâêà->Ñîäåéñòâèå è ðåãèñòðàöèÿ ÷òîáû óçíàòü îá ýòîì "
-"ïîäðîáíåå"
+"ìåíþ Ñïðàâêà->Ñîäåéñòâèå è ðåãèñòðàöèÿ ÷òîáû óçíàòü îá ýòîì ïîäðîáíåå"
# #Restorer: ïîäñòàâëÿåòñÿ â «E1016: Cannot declare a %s variable: %s» êàê
# #Restorer: ïåðâàÿ %s. Ìîæåò ëó÷øå íå ïåðåâîäèòü? Ïîêà ñäåëàë. Âûãëÿäèò òàê
@@ -6120,8 +6084,7 @@ msgstr "E108: Íå ñóùåñòâóåò ïåðåìåííîé \"%s\""
# :!~ Restorer
msgid "E109: Missing ':' after '?'"
-msgstr ""
-"E109: Îòñóòñòâóåò ñèìâîë äâîåòî÷èÿ ':' â îïåðàòîðå ïðîâåðêè óñëîâèÿ `?`"
+msgstr "E109: Îòñóòñòâóåò ñèìâîë äâîåòî÷èÿ ':' â îïåðàòîðå ïðîâåðêè óñëîâèÿ `?`"
# :!~ Restorer
msgid "E110: Missing ')'"
@@ -6237,8 +6200,7 @@ msgstr "E131: Óäàëåíèå íå âûïîëíåíî. Ýòà ôóíêöèÿ ñåé÷àñ èñïîëüçóåòñÿ %s"
# :!~ Restorer
msgid "E132: Function call depth is higher than 'maxfuncdepth'"
msgstr ""
-"E132: Êîëè÷åñòâî âûçîâîâ ôóíêöèé ïðåâûøàåò çíà÷åíèå â ïàðàìåòðå "
-"'maxfuncdepth'"
+"E132: Êîëè÷åñòâî âûçîâîâ ôóíêöèé ïðåâûøàåò çíà÷åíèå â ïàðàìåòðå 'maxfuncdepth'"
# :!~ Restorer
msgid "E133: :return not inside a function"
@@ -6258,8 +6220,7 @@ msgstr ""
# :!~ Restorer
msgid "E136: viminfo: Too many errors, skipping rest of file"
msgstr ""
-"E136: Îáíàðóæåíî ìíîæåñòâî îøèáîê â viminfo-ôàéëå. Ñ÷èòûâàíèå ôàéëà "
-"ïðåêðàùåíî"
+"E136: Îáíàðóæåíî ìíîæåñòâî îøèáîê â viminfo-ôàéëå. Ñ÷èòûâàíèå ôàéëà ïðåêðàùåíî"
# :!~ Restorer
#, c-format
@@ -6565,8 +6526,7 @@ msgstr "E199: Óäàëåíèå èëè èçìåíåíèå òåêóùåãî îêíà èëè áóôåðà"
# :!~ Restorer
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr ""
-"E200: Â ðåçóëüòàòå äåéñòâèé àâòîêîìàíä ïî ñîáûòèÿì *ReadPre ôàéë ñòàë "
-"íå÷èòàåì"
+"E200:  ðåçóëüòàòå äåéñòâèé àâòîêîìàíä ïî ñîáûòèÿì *ReadPre ôàéë ñòàë íå÷èòàåì"
# :!~ Restorer
msgid "E201: *ReadPre autocommands must not change current buffer"
@@ -6800,8 +6760,7 @@ msgstr "E250: Â íàáîðå øðèôòîâ %s îòñóòñòâóþò øðèôòû ñî ñëåäóþùèìè ñèìâîëàìè:"
# :!~ Restorer
msgid "E251: VIM instance registry property is badly formed. Deleted!"
msgstr ""
-"E251: Óäàëåíî çàðåãèñòðèðîâàííîå ïðîãðàììîé Vim ñâîéñòâî íåäîïóñòèìîãî "
-"ôîðìàòà"
+"E251: Óäàëåíî çàðåãèñòðèðîâàííîå ïðîãðàììîé Vim ñâîéñòâî íåäîïóñòèìîãî ôîðìàòà"
# :!~ Restorer
#, c-format
@@ -6853,11 +6812,9 @@ msgstr "E262: Îøèáêà ïðè ñ÷èòûâàíèè èç áàçû äàííûõ cscope íîìåð %d"
# :!~ Restorer
msgid ""
-"E263: Sorry, this command is disabled, the Python library could not be "
-"loaded."
+"E263: Sorry, this command is disabled, the Python library could not be loaded."
msgstr ""
-"E263: Íå óäàëîñü ïîäêëþ÷èòü ôàéë áèáëèîòåêè ÿçûêà Python. Êîìàíäà íå "
-"âûïîëíåíà"
+"E263: Íå óäàëîñü ïîäêëþ÷èòü ôàéë áèáëèîòåêè ÿçûêà Python. Êîìàíäà íå âûïîëíåíà"
# :!~ Restorer
msgid "E264: Python: Error initialising I/O objects"
@@ -6953,8 +6910,7 @@ msgstr "E286: Îøèáêà ïðè çàïóñêå ñëóæáû ìåòîäà ââîäà"
# :!~ Restorer
msgid "E287: Warning: Could not set destroy callback to IM"
msgstr ""
-"E287: Âíèìàíèå! Íå óäàëîñü íàçíà÷èòü ôóíêöèþ äëÿ îñòàíîâêè ñëóæáû ìåòîäà "
-"ââîäà"
+"E287: Âíèìàíèå! Íå óäàëîñü íàçíà÷èòü ôóíêöèþ äëÿ îñòàíîâêè ñëóæáû ìåòîäà ââîäà"
# :!~ Restorer
msgid "E288: Input method doesn't support any style"
@@ -6963,8 +6919,7 @@ msgstr "E288: Ñëóæáà ìåòîäà ââîäà íå ïîääåðæèâàåò ñòèëè îòîáðàæåíèÿ"
# #Restorer: âûâîäèòñÿ òîëüêî ïðè çíà÷åíèè ïàðàìåòðà 'verbose'>0
# :!~ Restorer
msgid "E289: Input method doesn't support my preedit type"
-msgstr ""
-"E289: Ñëóæáà ìåòîäà ââîäà íå ïîääåðæèâàåò íàçíà÷åííûé ñòèëü îòîáðàæåíèÿ"
+msgstr "E289: Ñëóæáà ìåòîäà ââîäà íå ïîääåðæèâàåò íàçíà÷åííûé ñòèëü îòîáðàæåíèÿ"
# #Restorer: âûâîäèòñÿ äëÿ ôóíêöèè matchaddpos()
# :!~ Restorer
@@ -7039,16 +6994,14 @@ msgstr "E309: Íå óäàëîñü ñ÷èòàòü áëîê íîìåð 1 èç %s"
#, c-format
msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
msgstr ""
-"E310: Íåäîïóñòèìûé èäåíòèôèêàòîð â áëîêå 1 (âîçìîæíî, ýòî íå ôàéë ïîäêà÷êè "
-"%s)"
+"E310: Íåäîïóñòèìûé èäåíòèôèêàòîð â áëîêå 1 (âîçìîæíî, ýòî íå ôàéë ïîäêà÷êè %s)"
# ~!: earlier
msgid "E311: Recovery Interrupted"
msgstr "E311: Âîññòàíîâëåíèå ïðåðâàíî"
# :!~ Restorer
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
+msgid "E312: Errors detected while recovering; look for lines starting with ???"
msgstr "E312: Îøèáêè ïðè âîññòàíîâëåíèè. Òàêèå ñòðîêè ïîìå÷åíû ñèìâîëàìè ???"
# :!~ Restorer
@@ -7110,8 +7063,7 @@ msgstr ""
# :!~ Restorer
msgid "E333: Menu path must lead to a menu item"
-msgstr ""
-"E333: Öåïî÷êà ïóíêòîâ ìåíþ äîëæíà îêàí÷èâàòüñÿ èñïîëíÿåìûì ïóíêòîì ìåíþ"
+msgstr "E333: Öåïî÷êà ïóíêòîâ ìåíþ äîëæíà îêàí÷èâàòüñÿ èñïîëíÿåìûì ïóíêòîì ìåíþ"
# :!~ Restorer
#, c-format
@@ -7143,8 +7095,7 @@ msgstr "E339: Ïðåâûøåíà äëèíà ðåãóëÿðíîãî âûðàæåíèÿ"
# :!~ Restorer
msgid "E340: Internal error; if you can reproduce please report a bug"
msgstr ""
-"E340: Âíóòðåííÿÿ îøèáêà. Åñëè âîçìîæíî å¸ âîñïðîèçâåñòè, ñîîáùèòå "
-"ðàçðàáîò÷èêó"
+"E340: Âíóòðåííÿÿ îøèáêà. Åñëè âîçìîæíî å¸ âîñïðîèçâåñòè, ñîîáùèòå ðàçðàáîò÷èêó"
# :!~ Restorer
#, c-format
@@ -7240,8 +7191,8 @@ msgstr "E359: Óñòàíîâêà ðåæèìà ýêðàíà íå ïîääåðæèâàåòñÿ"
# :!~ Restorer
msgid "E360: Cannot execute shell with -f option"
msgstr ""
-"E360: Íå óäàëîñü âûçâàòü êîìàíäíóþ îáîëî÷êó. Ïðîãðàììà çàïóùåíà ñ àðãóìåíòîì "
-"-f"
+"E360: Íå óäàëîñü âûçâàòü êîìàíäíóþ îáîëî÷êó. Ïðîãðàììà çàïóùåíà ñ àðãóìåíòîì -"
+"f"
# :!~ Restorer
msgid "E362: Using a boolean value as a Float"
@@ -7303,8 +7254,7 @@ msgstr "E373: Â ôîðìàòíîé ñòðîêå íåïðåäâèäåííîå ïîÿâëåíèå ñïåöèôèêàòîðà %%%c"
# :!~ Restorer
msgid "E374: Missing ] in format string"
-msgstr ""
-"E374: Íå óêàçàí ñèìâîë çàêðûâàþùåé êâàäðàòíîé ñêîáêè â ôîðìàòíîé ñòðîêå"
+msgstr "E374: Íå óêàçàí ñèìâîë çàêðûâàþùåé êâàäðàòíîé ñêîáêè â ôîðìàòíîé ñòðîêå"
# :!~ Restorer
#, c-format
@@ -7339,8 +7289,7 @@ msgstr "E381: Äîñòèãíóòà âåðõíÿÿ ãðàíèöà ñïèñêà ðåçóëüòàòîâ"
# :!~ Restorer
msgid "E382: Cannot write, 'buftype' option is set"
-msgstr ""
-"E382: Íåâîçìîæíà çàïèñü áóôåðà ïðè òåêóùåì çíà÷åíèè ïàðàìåòðà 'buftype'"
+msgstr "E382: Íåâîçìîæíà çàïèñü áóôåðà ïðè òåêóùåì çíà÷åíèè ïàðàìåòðà 'buftype'"
# :!~ Restorer
#, c-format
@@ -7477,8 +7426,7 @@ msgstr "E411: Íå íàéäåíà ãðóïïó ïîäñâåòêè %s"
# :!~ Restorer
#, c-format
msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr ""
-"E412: Óêàçàíû íå âñå òðåáóåìûå ïàðàìåòðû â êîìàíäå `:highlight link %s`"
+msgstr "E412: Óêàçàíû íå âñå òðåáóåìûå ïàðàìåòðû â êîìàíäå `:highlight link %s`"
# :!~ Restorer
#, c-format
@@ -7606,8 +7554,7 @@ msgstr "E441: Îòñóòñòâóåò îêíî ïðîñìîòðà"
# :!~ Restorer
msgid "E442: Can't split topleft and botright at the same time"
-msgstr ""
-"E442: Íå äîïóñêàåòñÿ îäíîâðåìåííîå óêàçàíèå êîìàíä :topleft è :botright"
+msgstr "E442: Íå äîïóñêàåòñÿ îäíîâðåìåííîå óêàçàíèå êîìàíä :topleft è :botright"
# :!~ Restorer
msgid "E443: Cannot rotate when another window is split"
@@ -7942,8 +7889,7 @@ msgstr "E503: Êîôå åù¸ íå ãîòîâ"
# #Restorer: îøèáêà E504:
# :!~ Restorer
msgid "is read-only (cannot override: \"W\" in 'cpoptions')"
-msgstr ""
-"ôàéë òîëüêî äëÿ ÷òåíèÿ (÷òîáû çàïèñàòü, óáåðèòå ôëàã 'W' â 'cpoptions')"
+msgstr "ôàéë òîëüêî äëÿ ÷òåíèÿ (÷òîáû çàïèñàòü, óáåðèòå ôëàã 'W' â 'cpoptions')"
# #Restorer: îøèáêà E505:
# :!~ Restorer
@@ -8279,8 +8225,7 @@ msgstr "íåäîïóñòèìûé íà÷àëüíûé ñèìâîë"
# #Restorer: âûâîäèòñÿ êàê îøèáêà E576:
# :!~ Restorer
msgid "Missing '>'"
-msgstr ""
-"îòñóòñòâóåò ñèìâîë çàêðûâàþùåé óãëîâîé ñêîáêè â çàïèñè æóðíàëà çàêëàäîê"
+msgstr "îòñóòñòâóåò ñèìâîë çàêðûâàþùåé óãëîâîé ñêîáêè â çàïèñè æóðíàëà çàêëàäîê"
# #Restorer: âûâîäèòñÿ êàê îøèáêà E577:
# :!~ Restorer
@@ -8422,8 +8367,7 @@ msgstr "E607: Íåñêîëüêî ñëåäóþùèõ îäíà çà äðóãîé êîìàíä :finally"
# :!~ Restorer
msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
msgstr ""
-"E608:  íàçíà÷åííûõ ïîëüçîâàòåëåì èñêëþ÷åíèÿõ çàïðåùåíî óêàçàíèå ïðèñòàâêè "
-"VIM"
+"E608:  íàçíà÷åííûõ ïîëüçîâàòåëåì èñêëþ÷åíèÿõ çàïðåùåíî óêàçàíèå ïðèñòàâêè VIM"
# :!~ Restorer
#, c-format
@@ -8634,8 +8578,7 @@ msgstr "E658: Ïîòåðÿíî ñîåäèíåíèå ñðåäû ðàçðàáîòêè NetBeans ñ áóôåðîì %d"
# :!~ Restorer
msgid "E659: Cannot invoke Python recursively"
msgstr ""
-"E659: Â äàííîé âåðñèè ïðîãðàììû íå äîïóñêàåòñÿ ðåêóðñèâíûé âûçîâ êîìàíä "
-"Python"
+"E659: Â äàííîé âåðñèè ïðîãðàììû íå äîïóñêàåòñÿ ðåêóðñèâíûé âûçîâ êîìàíä Python"
# :!~ Restorer
#, c-format
@@ -8767,14 +8710,12 @@ msgstr "E686: Â ôóíêöèè %s òèï àðãóìåíòà äîëæåí áûòü List"
# :!~ Restorer
msgid "E687: Less targets than List items"
msgstr ""
-"E687: Êîëè÷åñòâî ïåðåìåííûõ ìåíüøå êîëè÷åñòâà ïðèñâàèâàåìûõ çíà÷åíèé "
-"âûðàæåíèÿ"
+"E687: Êîëè÷åñòâî ïåðåìåííûõ ìåíüøå êîëè÷åñòâà ïðèñâàèâàåìûõ çíà÷åíèé âûðàæåíèÿ"
# :!~ Restorer
msgid "E688: More targets than List items"
msgstr ""
-"E688: Êîëè÷åñòâî ïåðåìåííûõ áîëüøå êîëè÷åñòâà ïðèñâàèâàåìûõ çíà÷åíèé "
-"âûðàæåíèÿ"
+"E688: Êîëè÷åñòâî ïåðåìåííûõ áîëüøå êîëè÷åñòâà ïðèñâàèâàåìûõ çíà÷åíèé âûðàæåíèÿ"
# :!~ Restorer
#, c-format
@@ -8811,8 +8752,7 @@ msgstr "E695: Íå äîïóñêàåòñÿ óêàçàíèå èíäåêñà äëÿ ïåðåìåííûõ ñ òèïîì Funcref"
#, c-format
msgid "E696: Missing comma in List: %s"
msgstr ""
-"E696: Â äàííûõ òèï List íå óêàçàí ñèìâîë çàïÿòîé, êàê ðàçäåëèòåëü ýëåìåíòîâ "
-"%s"
+"E696: Â äàííûõ òèï List íå óêàçàí ñèìâîë çàïÿòîé, êàê ðàçäåëèòåëü ýëåìåíòîâ %s"
# :!~ Restorer
#, c-format
@@ -8848,8 +8788,7 @@ msgstr "E703: Îæèäàëñÿ òèï äàííûõ Number, à ïîëó÷åí Funcref"
#, c-format
msgid "E704: Funcref variable name must start with a capital: %s"
msgstr ""
-"E704: Íàèìåíîâàíèå ïåðåìåííîé ñ òèïîì Funcref äîëæíî áûòü ñ ïðîïèñíîé áóêâû "
-"%s"
+"E704: Íàèìåíîâàíèå ïåðåìåííîé ñ òèïîì Funcref äîëæíî áûòü ñ ïðîïèñíîé áóêâû %s"
# :!~ Restorer
#, c-format
@@ -9253,8 +9192,7 @@ msgstr "E787: Ñîäåðæèìîå áóôåðà áûëî íåïðåäâèäåííî èçìåíåíî"
# :!~ Restorer
msgid "E788: Not allowed to edit another buffer now"
msgstr ""
-"E788: Çàïðåùåíà ïðàâêà áóôåðîâ, åñëè åñòü èçìåíåíèÿ â áóôåðå òîëüêî äëÿ "
-"÷òåíèÿ"
+"E788: Çàïðåùåíà ïðàâêà áóôåðîâ, åñëè åñòü èçìåíåíèÿ â áóôåðå òîëüêî äëÿ ÷òåíèÿ"
# :!~ Restorer
#, c-format
@@ -9388,8 +9326,7 @@ msgstr ""
# :!~ Restorer
msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr ""
-"E814: Íå óäàëîñü çàêðûòü òåêóùåå îêíî. Èñïîëíÿþòñÿ àêòèâíûå àâòîêîìàíäû"
+msgstr "E814: Íå óäàëîñü çàêðûòü òåêóùåå îêíî. Èñïîëíÿþòñÿ àêòèâíûå àâòîêîìàíäû"
# :!~ Restorer
msgid ""
@@ -9440,8 +9377,7 @@ msgstr "E823: Ôàéë ïîâðåæä¸í èëè íå ÿâëÿåòñÿ ôàéëîì èçìåíåíèé %s"
# :!~ Restorer
#, c-format
msgid "E824: Incompatible undo file: %s"
-msgstr ""
-"E824: Íå ïîääåðæèâàåìàÿ äàííîé ïðîãðàììîé Vim âåðñèÿ ôàéëà èçìåíåíèé %s"
+msgstr "E824: Íå ïîääåðæèâàåìàÿ äàííîé ïðîãðàììîé Vim âåðñèÿ ôàéëà èçìåíåíèé %s"
# :!~ Restorer
#, c-format
@@ -9476,8 +9412,7 @@ msgstr "E830: Íå íàéäåíî èçìåíåíèå íîìåð %ld"
# :!~ Restorer
#, c-format
msgid "E832: Non-encrypted file has encrypted undo file: %s"
-msgstr ""
-"E832: Ðåäàêòèðóåìûé ôàéë íå øèôðîâàí, íî øèôðîâàí åãî ôàéë èçìåíåíèé %s"
+msgstr "E832: Ðåäàêòèðóåìûé ôàéë íå øèôðîâàí, íî øèôðîâàí åãî ôàéë èçìåíåíèé %s"
# :!~ Restorer
#, c-format
@@ -9497,13 +9432,11 @@ msgstr "E835: Êîíôëèêò çíà÷åíèé ïàðàìåòðîâ 'ambiwidth' è 'fillchars'"
# :!~ Restorer
msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr ""
-"E836:  äàííîé âåðñèè çàïðåù¸í âûçîâ êîìàíäû :python ïîñëå êîìàíäû :py3"
+msgstr "E836:  äàííîé âåðñèè çàïðåù¸í âûçîâ êîìàíäû :python ïîñëå êîìàíäû :py3"
# :!~ Restorer
msgid "E837: This Vim cannot execute :py3 after using :python"
-msgstr ""
-"E837:  äàííîé âåðñèè çàïðåù¸í âûçîâ êîìàíäû :py3 ïîñëå êîìàíäû :python"
+msgstr "E837:  äàííîé âåðñèè çàïðåù¸í âûçîâ êîìàíäû :py3 ïîñëå êîìàíäû :python"
# :!~ Restorer
msgid "E838: NetBeans is not supported with this GUI"
@@ -9514,8 +9447,7 @@ msgstr ""
# :!~ Restorer
msgid "E840: Completion function deleted text"
msgstr ""
-"E840: Ôóíêöèÿ, çàäàííàÿ ïîëüçîâàòåëåì äëÿ ïîäñòàíîâêè, âûçâàëà óäàëåíèå "
-"òåêñòà"
+"E840: Ôóíêöèÿ, çàäàííàÿ ïîëüçîâàòåëåì äëÿ ïîäñòàíîâêè, âûçâàëà óäàëåíèå òåêñòà"
# :!~ Restorer
msgid "E841: Reserved name, cannot be used for user defined command"
@@ -9613,8 +9545,8 @@ msgstr ""
# :!~ Restorer
msgid "E860: Need 'id' and 'type' or 'types' with 'both'"
msgstr ""
-"E860: Åñëè çàäàí êëþ÷ \"both\", óêàæèòå çíà÷åíèå êëþ÷åé \"id\" è \"type\" "
-"èëè \"types\""
+"E860: Åñëè çàäàí êëþ÷ \"both\", óêàæèòå çíà÷åíèå êëþ÷åé \"id\" è \"type\" èëè "
+"\"types\""
# :!~ Restorer
msgid "E861: Cannot open a second popup with a terminal"
@@ -9726,11 +9658,9 @@ msgstr "E882: Îøèáêà ïðè âûïîëíåíèè ñðàâíåíèÿ â ôóíêöèè ïîèñêà äóáëèêàòîâ"
# :!~ Restorer
msgid ""
-"E883: Search pattern and expression register may not contain two or more "
-"lines"
+"E883: Search pattern and expression register may not contain two or more lines"
msgstr ""
-"E883: Ðåãèñòð ïîèñêà è ðåãèñòð âûðàæåíèÿ íå ìîãóò ñîäåðæàòü áîëåå îäíîé "
-"ñòðîêè"
+"E883: Ðåãèñòð ïîèñêà è ðåãèñòð âûðàæåíèÿ íå ìîãóò ñîäåðæàòü áîëåå îäíîé ñòðîêè"
# :!~ Restorer
#, c-format
@@ -9790,8 +9720,7 @@ msgid ""
"E895: Sorry, this command is disabled, the MzScheme's racket/base module "
"could not be loaded."
msgstr ""
-"E895: Íå ïîäêëþ÷åí ìîäóëü racket/base äëÿ ÿçûêà MzScheme. Êîìàíäà íå "
-"âûïîëíåíà"
+"E895: Íå ïîäêëþ÷åí ìîäóëü racket/base äëÿ ÿçûêà MzScheme. Êîìàíäà íå âûïîëíåíà"
# :!~ Restorer
#, c-format
@@ -9842,8 +9771,7 @@ msgstr "E903: Àðãóìåíòû ïîëó÷åííîé êîìàíäû íå çàêëþ÷åíû â äâîéíûå êàâû÷êè"
# :!~ Restorer
msgid "E904: Last argument for expr/call must be a number"
msgstr ""
-"E904: Òèï äàííûõ ïîñëåäíåãî ïàðàìåòðà êîìàíäû expr èëè call äîëæåí áûòü "
-"Number"
+"E904: Òèï äàííûõ ïîñëåäíåãî ïàðàìåòðà êîìàíäû expr èëè call äîëæåí áûòü Number"
# #Restorer: âûâîäèòñÿ ïðè 'verbose'>3
# :!~ Restorer
@@ -9897,8 +9825,8 @@ msgstr "E914: Îæèäàëñÿ òèï äàííûõ Float, à ïîëó÷åí Channel"
# :!~ Restorer
msgid "E915: in_io buffer requires in_buf or in_name to be set"
msgstr ""
-"E915: Ïðè óñòàíîâêå êëþ÷ó in_io çíà÷åíèÿ buffer, òðåáóåòñÿ çàäàòü êëþ÷ "
-"in_buf èëè in_name"
+"E915: Ïðè óñòàíîâêå êëþ÷ó in_io çíà÷åíèÿ buffer, òðåáóåòñÿ çàäàòü êëþ÷ in_buf "
+"èëè in_name"
# :!~ Restorer
msgid "E916: Not a valid job"
@@ -9922,8 +9850,7 @@ msgstr "E919: Â êàòàëîãàõ, óêàçàííûõ â ïàðàìåòðå '%s', íå íàéäåíî \"%s\""
# :!~ Restorer
msgid "E920: _io file requires _name to be set"
msgstr ""
-"E920: Ïðè óñòàíîâêå êëþ÷àì *_io çíà÷åíèÿ file, òðåáóåòñÿ çàäàòü è êëþ÷è "
-"*_name"
+"E920: Ïðè óñòàíîâêå êëþ÷àì *_io çíà÷åíèÿ file, òðåáóåòñÿ çàäàòü è êëþ÷è *_name"
# :!~ Restorer
msgid "E921: Invalid callback argument"
@@ -10293,8 +10220,7 @@ msgstr "E997: Íå óäàëîñü íàéòè âêëàäêó ïîä íîìåðîì %d"
# :!~ Restorer
#, c-format
msgid "E998: Reduce of an empty %s with no initial value"
-msgstr ""
-"E998: Ôóíêöèÿ reduce() âûçâàíà äëÿ ïóñòîãî %s è áåç íà÷àëüíîãî çíà÷åíèÿ"
+msgstr "E998: Ôóíêöèÿ reduce() âûçâàíà äëÿ ïóñòîãî %s è áåç íà÷àëüíîãî çíà÷åíèÿ"
# :!~ Restorer
#, c-format
@@ -10480,8 +10406,7 @@ msgstr "E1034: Îáíàðóæåíî èñïîëüçîâàíèå çàðåçåðâèðîâàííîãî ñëîâà â %s"
# :!~ Restorer
#, no-c-format
msgid "E1035: % requires number arguments"
-msgstr ""
-"E1035: Äëÿ îïåðàöèè äåëåíèå ñ îñòàòêîì òèï îïåðàíäîâ äîëæåí áûòü Number"
+msgstr "E1035: Äëÿ îïåðàöèè äåëåíèå ñ îñòàòêîì òèï îïåðàíäîâ äîëæåí áûòü Number"
# :!~ Restorer
#, c-format
@@ -10592,8 +10517,7 @@ msgstr "E1059: Çàïðåù¸í ïðîáåëüíûé ñèìâîë ïåðåä ñèìâîëîì äâîåòî÷èå â %s"
# :!~ Restorer
#, c-format
msgid "E1060: Expected dot after name: %s"
-msgstr ""
-"E1060:  êîìàíäå :import îòñóòñòâóåò ñèìâîë òî÷êè ïîñëå íàèìåíîâàíèÿ %s"
+msgstr "E1060:  êîìàíäå :import îòñóòñòâóåò ñèìâîë òî÷êè ïîñëå íàèìåíîâàíèÿ %s"
# :!~ Restorer
#, c-format
@@ -10654,8 +10578,7 @@ msgstr "E1073: Íàèìåíîâàíèå ôóíêöèè óæå îïðåäåëåíî %s"
# :!~ Restorer
msgid "E1074: No white space allowed after dot"
-msgstr ""
-"E1074: Çàïðåù¸í ïðîáåëüíûé ñèìâîë ïîñëå ñèìâîëà òî÷êè â êîìàíäå :import"
+msgstr "E1074: Çàïðåù¸í ïðîáåëüíûé ñèìâîë ïîñëå ñèìâîëà òî÷êè â êîìàíäå :import"
# :!~ Restorer
#, c-format
@@ -10841,13 +10764,11 @@ msgstr ""
# :!~ Restorer
msgid "E1116: \"assert_fails()\" fifth argument must be a string"
msgstr ""
-"E1116:  ôóíêöèè assert_fails() çíà÷åíèåì àðãóìåíòà íîìåð 5 äîëæíà áûòü "
-"ñòðîêà"
+"E1116:  ôóíêöèè assert_fails() çíà÷åíèåì àðãóìåíòà íîìåð 5 äîëæíà áûòü ñòðîêà"
# :!~ Restorer
msgid "E1117: Cannot use ! with nested :def"
-msgstr ""
-"E1117: Íå äîïóñêàåòñÿ óêàçàíèå ìîäèôèêàòîðà ! äëÿ âëîæåííûõ êîìàíä :def"
+msgstr "E1117: Íå äîïóñêàåòñÿ óêàçàíèå ìîäèôèêàòîðà ! äëÿ âëîæåííûõ êîìàíä :def"
# :!~ Restorer
msgid "E1118: Cannot change locked list"
@@ -10856,8 +10777,7 @@ msgstr "E1118: Èçìåíåíèå ñïèñêà íå âûïîëíåíî. Óñòàíîâëåíà áëîêèðîâêà ñïèñêà"
# :!~ Restorer
msgid "E1119: Cannot change locked list item"
msgstr ""
-"E1119: Èçìåíåíèå ýëåìåíòà ñïèñêà íå âûïîëíåíî. Óñòàíîâëåíà áëîêèðîâêà "
-"ýëåìåíòà"
+"E1119: Èçìåíåíèå ýëåìåíòà ñïèñêà íå âûïîëíåíî. Óñòàíîâëåíà áëîêèðîâêà ýëåìåíòà"
# :!~ Restorer
msgid "E1120: Cannot change dict"
@@ -10936,8 +10856,7 @@ msgstr "E1135: Îæèäàëîñü ëîãè÷åñêîå çíà÷åíèå, à ïîëó÷åí String \"%s\""
# :!~ Restorer
msgid "E1136: <Cmd> mapping must end with <CR> before second <Cmd>"
msgstr ""
-"E1136: Íàçíà÷àåìàÿ êîìàíäà <Cmd> äîëæíà çàâåðøàåòñÿ <CR> ïåðåä ñëåäóþùåé "
-"<Cmd>"
+"E1136: Íàçíà÷àåìàÿ êîìàíäà <Cmd> äîëæíà çàâåðøàåòñÿ <CR> ïåðåä ñëåäóþùåé <Cmd>"
# :!~ Restorer
msgid "E1138: Using a Bool as a Number"
@@ -11041,8 +10960,7 @@ msgstr "E1159: Íå äîïóñêàåòñÿ ðàçáèåíèå îêíà îäíîâðåìåííî ñ çàêðûòèåì áóôåðà"
# :!~ Restorer
msgid "E1160: Cannot use a default for variable arguments"
msgstr ""
-"E1160: Íå äîïóñêàåòñÿ óêàçàíèå çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ îñòàòî÷íûõ "
-"ïàðàìåòðîâ"
+"E1160: Íå äîïóñêàåòñÿ óêàçàíèå çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ îñòàòî÷íûõ ïàðàìåòðîâ"
# :!~ Restorer
#, c-format
@@ -11187,8 +11105,7 @@ msgstr "E1187: Ïðîèçîøëà îøèáêà ïðè îáðàáîòêå ôàéëà defaults.vim"
# :!~ Restorer
msgid "E1188: Cannot open a terminal from the command line window"
-msgstr ""
-"E1188: Íå äîïóñêàåòñÿ ïåðåõîä â îêíî òåðìèíàëà èç îêíà êîìàíäíîé ñòðîêè"
+msgstr "E1188: Íå äîïóñêàåòñÿ ïåðåõîä â îêíî òåðìèíàëà èç îêíà êîìàíäíîé ñòðîêè"
# :!~ Restorer
#, c-format
@@ -11318,8 +11235,7 @@ msgid "E1215: Digraph must be one character: %s"
msgstr "E1215: Ñàì äèãðàô äîëæåí áûòü çàäàí êàê îäèí ñèìâîë, à íå %s"
# :!~ Restorer
-msgid ""
-"E1216: digraph_setlist() argument must be a list of lists with two items"
+msgid "E1216: digraph_setlist() argument must be a list of lists with two items"
msgstr ""
"E1216: Â ôóíêöèè digraph_setlist() òèï àðãóìåíòà äîëæåí áûòü List, ãäå "
"âëîæåííûå òèïû List ñîäåðæàò äâà ýëåìåíòà"
@@ -11390,14 +11306,12 @@ msgstr ""
# :!~ Restorer
#, c-format
msgid "E1229: Expected dictionary for using key \"%s\", but got %s"
-msgstr ""
-"E1229: Îæèäàëñÿ òèï Dictionary äëÿ îáðàáîòêè êëþ÷à \"%s\", à ïîëó÷åí %s"
+msgstr "E1229: Îæèäàëñÿ òèï Dictionary äëÿ îáðàáîòêè êëþ÷à \"%s\", à ïîëó÷åí %s"
# :!~ Restorer
msgid "E1230: Encryption: sodium_mlock() failed"
msgstr ""
-"E1230: Îøèáêà øèôðîâàíèÿ. Ïðîèçîø¸ë ñáîé â áèáëèîòå÷íîé ôóíêöèè "
-"sodium_mlock()"
+"E1230: Îøèáêà øèôðîâàíèÿ. Ïðîèçîø¸ë ñáîé â áèáëèîòå÷íîé ôóíêöèè sodium_mlock()"
# :!~ Restorer
#, c-format
@@ -11744,8 +11658,7 @@ msgstr ""
#, c-format
msgid "E1301: String, Number, List or Blob required for argument %d"
msgstr ""
-"E1301: Òèï äàííûõ àðãóìåíòà íîìåð %d äîëæåí áûòü String, Number, List èëè "
-"BLOB"
+"E1301: Òèï äàííûõ àðãóìåíòà íîìåð %d äîëæåí áûòü String, Number, List èëè BLOB"
# :!~ Restorer
msgid "E1302: Script variable was deleted"
@@ -11764,8 +11677,7 @@ msgid "E1304: Cannot use type with this variable: %s"
msgstr "E1304: Íå äîïóñêàåòñÿ óêàçûâàòü òèïà äàííûõ äëÿ ïåðåìåííîé %s"
# :!~ Restorer
-msgid ""
-"E1305: Cannot use \"length\", \"end_col\" and \"end_lnum\" with \"text\""
+msgid "E1305: Cannot use \"length\", \"end_col\" and \"end_lnum\" with \"text\""
msgstr ""
"E1305: Íåäîïóñòèìî óêàçûâàòü êëþ÷è \"length\", \"end_col\" è \"end_lnum\" c "
"êëþ÷îì \"text\""
@@ -11917,8 +11829,8 @@ msgstr "E1337: Ó êëàññà \"%2$s\" îòñóòñòâóåò ïåðåìåííàÿ êëàññà \"%1$s\""
# :!~ Restorer
msgid ""
-"E1339: Cannot add a textprop with text after using a textprop with a "
-"negative id"
+"E1339: Cannot add a textprop with text after using a textprop with a negative "
+"id"
msgstr ""
"E1339: Çàïðåùåíà âñòàâêà âèðòóàëüíîãî òåêñòà ïîñëå ïðèìåíåíèÿ îòðèöàòåëüíîãî "
"çíà÷åíèÿ ÈÄ"
@@ -12056,11 +11968,10 @@ msgstr ""
# :!~ Restorer
msgid ""
-"E1368: Static must be followed by \"var\" or \"def\" or \"final\" or "
-"\"const\""
+"E1368: Static must be followed by \"var\" or \"def\" or \"final\" or \"const\""
msgstr ""
-"E1368: Ïîñëå êëþ÷åâîãî ñëîâà \"static\" òðåáóåòñÿ êîìàíäà :var èëè :def, "
-"ëèáî êëþ÷åâîå ñëîâî \"final\" èëè \"const\""
+"E1368: Ïîñëå êëþ÷åâîãî ñëîâà \"static\" òðåáóåòñÿ êîìàíäà :var èëè :def, ëèáî "
+"êëþ÷åâîå ñëîâî \"final\" èëè \"const\""
# :!~ Restorer
#, c-format
@@ -12079,8 +11990,7 @@ msgstr "E1371: Ïîñëå êëþ÷åâîãî ñëîâà \"abstract\" òðåáóåòñÿ êîìàíäà :def"
#, c-format
msgid "E1372: Abstract method \"%s\" cannot be defined in a concrete class"
msgstr ""
-"E1372: Íå äîïóñêàåòñÿ îïðåäåëåíèå â ðåàëüíîì êëàññå àáñòðàêòíîãî ìåòîäà "
-"\"%s\""
+"E1372: Íå äîïóñêàåòñÿ îïðåäåëåíèå â ðåàëüíîì êëàññå àáñòðàêòíîãî ìåòîäà \"%s\""
# :!~ Restorer
#, c-format
@@ -12129,8 +12039,8 @@ msgstr "E1381: Ê èíòåðôåéñó íåïðèìåíèìî êëþ÷åâîå ñëîâî \"implements\""
#, c-format
msgid "E1382: Variable \"%s\": type mismatch, expected %s but got %s"
msgstr ""
-"E1382: Íåñîîòâåòñòâóþùèé òèï äàííûõ ïåðåìåííîé \"%s\". Îæèäàëñÿ %s, à "
-"ïîëó÷åí %s"
+"E1382: Íåñîîòâåòñòâóþùèé òèï äàííûõ ïåðåìåííîé \"%s\". Îæèäàëñÿ %s, à ïîëó÷åí "
+"%s"
# :!~ Restorer
#, c-format
@@ -12268,8 +12178,8 @@ msgstr "E1408: Èíòåðôåéñû íå ïîääåðæèâàþò ôèíàëèçèðîâàííûå ïåðåìåííûå"
#, c-format
msgid "E1409: Cannot change read-only variable \"%s\" in class \"%s\""
msgstr ""
-"E1409: Íå äîïóñêàåòñÿ èçìåíåíèå äîñòóïíîé òîëüêî äëÿ ÷òåíèÿ ïåðåìåííîé "
-"\"%s\" êëàññà \"%s\""
+"E1409: Íå äîïóñêàåòñÿ èçìåíåíèå äîñòóïíîé òîëüêî äëÿ ÷òåíèÿ ïåðåìåííîé \"%s\" "
+"êëàññà \"%s\""
# :!~ Restorer
msgid "E1410: Const variable not supported in an interface"
@@ -12385,8 +12295,7 @@ msgstr ""
#, c-format
msgid "E1503: Positional argument %d out of bounds: %s"
msgstr ""
-"E1503: Ñïåöèôèêàòîð ïîçèöèè íîìåð %d íå ñîîòâåòñòâóåò êîëè÷åñòâó àðãóìåíòîâ "
-"%s"
+"E1503: Ñïåöèôèêàòîð ïîçèöèè íîìåð %d íå ñîîòâåòñòâóåò êîëè÷åñòâó àðãóìåíòîâ %s"
# :!~ Restorer
#, c-format
@@ -12413,8 +12322,7 @@ msgstr ""
# :!~ Restorer
msgid "E1509: Error occurred when reading or writing extended attribute"
-msgstr ""
-"E1509: Ïðîèçîøëà îøèáêà ïðè ñ÷èòûâàíèè èëè çàïèñè ðàñøèðåííîãî àòðèáóòà"
+msgstr "E1509: Ïðîèçîøëà îøèáêà ïðè ñ÷èòûâàíèè èëè çàïèñè ðàñøèðåííîãî àòðèáóòà"
# :!~ Restorer
#, c-format
@@ -12635,8 +12543,8 @@ msgstr "èíäåêñ ñïèñêà âûõîäèò çà ãðàíèöû äèàïàçîíà"
#, c-format
msgid "internal error: failed to get Vim list item %d"
msgstr ""
-"âíóòðåííÿÿ îøèáêà. Íå óäàëîñü ïîëó÷èòü èç îáúåêòà Vim.List ýëåìåíò ñ "
-"èíäåêñîì %d"
+"âíóòðåííÿÿ îøèáêà. Íå óäàëîñü ïîëó÷èòü èç îáúåêòà Vim.List ýëåìåíò ñ èíäåêñîì "
+"%d"
# :!~ Restorer
msgid "slice step cannot be zero"
@@ -12923,8 +12831,7 @@ msgid "(global or local to buffer)"
msgstr "(îáëàñòü äåéñòâèÿ: îáùèé èëè òîëüêî äëÿ áóôåðà)"
# :!~ Restorer
-msgid ""
-"\" Each \"set\" line shows the current value of an option (on the left)."
+msgid "\" Each \"set\" line shows the current value of an option (on the left)."
msgstr ""
"\"  ñòðîêàõ, íà÷èíàþùèõñÿ ñî ñëîâà «set», ïîêàçàíî òåêóùåå çíà÷åíèå "
"ïàðàìåòðîâ"
@@ -12938,16 +12845,13 @@ msgstr ""
# :!~ Restorer
msgid "\" A boolean option will be toggled."
msgstr ""
-"\" äëÿ ïàðàìåòðîâ-ïåðåêëþ÷àòåëåé áóäåò èçìåíåíî çíà÷åíèå íà "
-"ïðîòèâîïîëîæíîå;"
+"\" äëÿ ïàðàìåòðîâ-ïåðåêëþ÷àòåëåé áóäåò èçìåíåíî çíà÷åíèå íà ïðîòèâîïîëîæíîå;"
# :!~ Restorer
msgid ""
-"\" For other options you can edit the value before hitting "
-"<Enter>."
+"\" For other options you can edit the value before hitting <Enter>."
msgstr ""
-"\" äëÿ äðóãèõ ïàðàìåòðîâ íåîáõîäèìî ïåðåä ýòèì îòðåäàêòèðîâàòü èõ "
-"çíà÷åíèÿ"
+"\" äëÿ äðóãèõ ïàðàìåòðîâ íåîáõîäèìî ïåðåä ýòèì îòðåäàêòèðîâàòü èõ çíà÷åíèÿ"
# :!~ Restorer
msgid "\" Hit <Enter> on a help line to open a help window on this option."
@@ -13739,8 +13643,7 @@ msgstr ""
# :!~ Restorer
msgid ""
-"\"last\", \"buffer\" or \"current\": which directory used for the file "
-"browser"
+"\"last\", \"buffer\" or \"current\": which directory used for the file browser"
msgstr ""
"êàòàëîã, èñïîëüçóåìûé äëÿ îêîí îòêðûòèÿ è ñîõðàíåíèÿ ôàéëîâ\n"
"Âîçìîæíûå çíà÷åíèÿ: \"last\", \"buffer\" èëè \"current\""
diff --git a/src/po/ru.po b/src/po/ru.po
index 13589d0..a679b4f 100644
--- a/src/po/ru.po
+++ b/src/po/ru.po
@@ -2039,7 +2039,7 @@ msgid " Omni completion (^O^N^P)"
msgstr " ПодÑтановка по контекÑту CTRL+O и CTRL+N или CTRL+P"
# :!~ Restorer
-msgid " Spelling suggestion (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
msgstr " ПодÑтановка вариантов напиÑÐ°Ð½Ð¸Ñ CTRL+S и CTRL+N или CTRL+P"
# :!~ Restorer
diff --git a/src/po/sk.cp1250.po b/src/po/sk.cp1250.po
index 36fd347..8521351 100644
--- a/src/po/sk.cp1250.po
+++ b/src/po/sk.cp1250.po
@@ -15,7 +15,7 @@ msgstr ""
"Last-Translator: Lubomir Host <rajo@platon.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=cp1250\n"
+"Content-Type: text/plain; charset=CP1250\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Vim 7.x\n"
diff --git a/src/po/sr.po b/src/po/sr.po
index 6372f92..3b76e3c 100644
--- a/src/po/sr.po
+++ b/src/po/sr.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Vim(Serbian)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-04-25 12:55+0400\n"
-"PO-Revision-Date: 2024-04-25 13:09+0400\n"
+"POT-Creation-Date: 2024-07-19 10:23+0400\n"
+"PO-Revision-Date: 2024-07-19 10:39+0400\n"
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
"Language-Team: Serbian\n"
"Language: sr\n"
@@ -447,10 +447,6 @@ msgstr "катакана"
msgid "Bopomofo"
msgstr "бопомофо"
-msgid "Not enough memory to set references, garbage collection aborted!"
-msgstr ""
-"Ðема довољно меморије за поÑтављање референци, прекинуто је Ñкупљање отпада"
-
msgid ""
"\n"
"\tLast set from "
@@ -879,6 +875,10 @@ msgstr[0] "+-%s%3ld линија: "
msgstr[1] "+-%s%3ld линије: "
msgstr[2] "+-%s%3ld линија: "
+msgid "Not enough memory to set references, garbage collection aborted!"
+msgstr ""
+"Ðема довољно меморије за поÑтављање референци, прекинуто је Ñкупљање отпада"
+
msgid "No match at cursor, finding next"
msgstr "Ðема подударања на меÑту курÑора, тражи Ñе даље"
@@ -1262,15 +1262,6 @@ msgstr "linenr је ван опÑега"
msgid "not allowed in the Vim sandbox"
msgstr "није дозвољено унутар Vim sandbox"
-#, c-format
-msgid "E370: Could not load library %s"
-msgstr "E370: Библиотека %s није могла да Ñе учита"
-
-msgid "Sorry, this command is disabled: the Perl library could not be loaded."
-msgstr ""
-"Жао нам је, ова команда је онемогућена: Perl библиотека није могла да Ñе "
-"учита."
-
msgid "invalid buffer number"
msgstr "неиÑправан број бафера"
@@ -1372,8 +1363,8 @@ msgstr " КориÑнички дефиниÑано довршавање (^U^N^P)
msgid " Omni completion (^O^N^P)"
msgstr " Omni довршавање (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ПравопиÑни предлог (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " ПравопиÑни предлог (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Довршавање локалне кључне речи (^N^P)"
@@ -3886,6 +3877,15 @@ msgstr "УпиÑивање viminfo фајла „%sâ€"
msgid "Already only one window"
msgstr "Већ поÑтоји Ñамо један прозор"
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: Библиотека %s није могла да Ñе учита"
+
+msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+msgstr ""
+"Жао нам је, ова команда је онемогућена: Perl библиотека није могла да Ñе "
+"учита."
+
msgid "Edit with Vim using &tabpages"
msgstr "Уређуј програмом Vim у новој &картици"
@@ -5939,9 +5939,6 @@ msgstr "E612: ДефиниÑано је превише знакова"
msgid "E613: Unknown printer font: %s"
msgstr "E613: Ðепознат фонт штампача: %s"
-msgid "E614: Class required"
-msgstr "E614: Потребна је клаÑа"
-
#, c-format
msgid "E616: Object required for argument %d"
msgstr "E616: За аргумент %d је потребан објекат"
@@ -8421,21 +8418,12 @@ msgstr "E1317: ÐеиÑправна декларација променљиве
msgid "E1318: Not a valid command in a class: %s"
msgstr "E1318: Команда не важи у клаÑи: %s"
-msgid "E1319: Using a Class as a Number"
-msgstr "E1319: КлаÑа Ñе кориÑти као Број"
-
msgid "E1320: Using an Object as a Number"
msgstr "E1320: Објекат Ñе кориÑти као Број"
-msgid "E1321: Using a Class as a Float"
-msgstr "E1321: КлаÑа Ñе кориÑти као Покретни"
-
msgid "E1322: Using an Object as a Float"
msgstr "E1322: Објекат Ñе кориÑти као Покретни"
-msgid "E1323: Using a Class as a String"
-msgstr "E1323: КлаÑа Ñе кориÑти као Стринг"
-
msgid "E1324: Using an Object as a String"
msgstr "E1324: Објекат Ñе кориÑти као Стринг"
@@ -8703,10 +8691,6 @@ msgid "E1394: Type name must start with an uppercase letter: %s"
msgstr "E1394: Име типа мора да почне великим Ñловом: %s"
#, c-format
-msgid "E1395: Type alias \"%s\" cannot be modified"
-msgstr "E1395: ÐÐ»Ð¸Ñ˜Ð°Ñ Ñ‚Ð¸Ð¿Ð° „%s†не може да Ñе измени"
-
-#, c-format
msgid "E1396: Type alias \"%s\" already exists"
msgstr "E1396: ÐÐ»Ð¸Ñ˜Ð°Ñ Ñ‚Ð¸Ð¿Ð° „%s†већ поÑтоји"
@@ -8720,18 +8704,6 @@ msgid "E1399: Type can only be used in a script"
msgstr "E1399: Тип може да Ñе употреби Ñамо у Ñкрипти"
#, c-format
-msgid "E1400: Using type alias \"%s\" as a Number"
-msgstr "E1400: ÐÐ»Ð¸Ñ˜Ð°Ñ Ñ‚Ð¸Ð¿Ð° „%s†Ñе кориÑти као Број"
-
-#, c-format
-msgid "E1401: Using type alias \"%s\" as a Float"
-msgstr "E1401: ÐÐ»Ð¸Ñ˜Ð°Ñ Ñ‚Ð¸Ð¿Ð° „%s†Ñе кориÑти као Покретни"
-
-#, c-format
-msgid "E1402: Using type alias \"%s\" as a String"
-msgstr "E1402: ÐÐ»Ð¸Ñ˜Ð°Ñ Ñ‚Ð¸Ð¿Ð° „%s†Ñе кориÑти као Стринг"
-
-#, c-format
msgid "E1403: Type alias \"%s\" cannot be used as a value"
msgstr "E1403: ÐÐ»Ð¸Ñ˜Ð°Ñ Ñ‚Ð¸Ð¿Ð° „%s†не може да Ñе кориÑти као вредноÑÑ‚"
@@ -8742,9 +8714,6 @@ msgstr "E1404: Abstract не може да Ñе кориÑти у интерфе
msgid "E1405: Class \"%s\" cannot be used as a value"
msgstr "E1405: КлаÑа „%s†не може да Ñе кориÑти као вредноÑÑ‚"
-msgid "E1406: Cannot use a Class as a variable or value"
-msgstr "E1406: КлаÑа не може да Ñе кориÑти као променљива или вредноÑÑ‚"
-
msgid "E1407: Cannot use a Typealias as a variable or value"
msgstr "E1407: ÐÐ»Ð¸Ñ˜Ð°Ñ Ñ‚Ð¸Ð¿Ð° не може да Ñе кориÑти као променљива или вредноÑÑ‚"
@@ -9701,6 +9670,9 @@ msgstr "вишеÑтруке картице"
msgid "0, 1 or 2; when to use a tab pages line"
msgstr "0, 1 или 2; када Ñе кориÑти линија Ñа картицама"
+msgid "behaviour when closing tab pages: left, uselast or empty"
+msgstr "понашање приликом затварања картице: left, uselast или празно"
+
msgid "maximum number of tab pages to open for -p and \"tab all\""
msgstr "макÑимални број картица које Ñе отварају за -p и „tab allâ€"
diff --git a/src/po/sv.po b/src/po/sv.po
index 629a22c..d5296db 100644
--- a/src/po/sv.po
+++ b/src/po/sv.po
@@ -261,8 +261,8 @@ msgstr " Användardefinierad komplettering (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omnikomplettering (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Stavningsförslag (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Stavningsförslag (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Lokal nyckelordskomplettering (^N^P)"
diff --git a/src/po/tojavascript.vim b/src/po/tojavascript.vim
index 8b0dd73..4671a47 100644
--- a/src/po/tojavascript.vim
+++ b/src/po/tojavascript.vim
@@ -5,15 +5,20 @@
set shortmess+=A
-for name in argv()[1:]
- exe 'edit ' .. fnameescape(name)
+let s:namenum = 0
+let s:fls = []
+for s:name in argv()[1:]
+ exe 'edit ' .. fnameescape(s:name)
" Strip comments, also after :set commands.
g/^\s*"/s/.*//
g/^\s*set .*"/s/.*//
" Write as .js file, xgettext recognizes them
- exe 'w! ' .. fnamemodify(name, ":t:r") .. ".js"
+ let s:fl = fnamemodify(s:name, ":t:r") .. s:namenum .. ".js"
+ exe 'w! ' .. s:fl
+ call add(s:fls, s:fl)
+ let s:namenum += 1
endfor
-
+call writefile(s:fls, "vim_to_js")
quit
diff --git a/src/po/tr.po b/src/po/tr.po
index 4cff7b3..1150d60 100644
--- a/src/po/tr.po
+++ b/src/po/tr.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Vim Turkish Localization Project\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-12-17 12:57+0300\n"
-"PO-Revision-Date: 2023-12-17 17:00+0300\n"
+"POT-Creation-Date: 2024-06-18 13:41+0300\n"
+"PO-Revision-Date: 2024-06-18 17:00+0300\n"
"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
"Language-Team: Turkish <https://github.com/bitigchi/vim>\n"
"Language: tr\n"
@@ -173,6 +173,9 @@ msgstr " (dosya %d/%d)"
msgid " (file (%d) of %d)"
msgstr " (dosya (%d)/%d)"
+msgid "[Command Line]"
+msgstr "[Komut Satırı]"
+
msgid "[Prompt]"
msgstr "[Ä°stem]"
@@ -444,9 +447,6 @@ msgstr "Katakana"
msgid "Bopomofo"
msgstr "Bopomofo"
-msgid "Not enough memory to set references, garbage collection aborted!"
-msgstr "Referansları ayarlamak için yetersiz bellek, atık toplama durduruldu"
-
msgid ""
"\n"
"\tLast set from "
@@ -697,9 +697,6 @@ msgstr "Hata"
msgid "Interrupt"
msgstr "Yarıda Kesilme"
-msgid "[Command Line]"
-msgstr "[Komut Satırı]"
-
msgid "is a directory"
msgstr "bir dizin"
@@ -868,6 +865,9 @@ msgid_plural "+-%s%3ld lines: "
msgstr[0] "+-%s%3ld satır: "
msgstr[1] "+-%s%3ld satır: "
+msgid "Not enough memory to set references, garbage collection aborted!"
+msgstr "Referansları ayarlamak için yetersiz bellek, atık toplama durduruldu"
+
msgid "No match at cursor, finding next"
msgstr "İmleç konumunda eşleşme bulunamadı, sonraki bulunuyor"
@@ -1348,8 +1348,8 @@ msgstr " Kullanıcı tanımlı tamamlamalar (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Omni tamamlaması (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Yazım önerisi (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Yazım önerisi (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Dahili anahtar sözcük tamamlaması (^N^P)"
@@ -1427,6 +1427,9 @@ msgstr "mapnew() argümanı"
msgid "filter() argument"
msgstr "filter() argümanı"
+msgid "foreach() argument"
+msgstr "foreach() argümanı"
+
msgid "extendnew() argument"
msgstr "extendnew() argümanı"
@@ -2473,6 +2476,9 @@ msgstr "%s, %s üzerinde"
msgid "Printing '%s'"
msgstr "'%s' yazdırılıyor"
+#~ msgid "DefaultFontNameForWindows"
+#~ msgstr ""
+
#, c-format
msgid "Opening the X display took %ld msec"
msgstr "X ekranını açma %ld milisaniye sürdü"
@@ -3414,8 +3420,8 @@ msgid "%s returning %s"
msgstr "%s, %s döndürüyor"
#, c-format
-msgid "Function %s does not need compiling"
-msgstr "%s iÅŸlevini derlemeye gerek yok "
+msgid "Function %s%s%s does not need compiling"
+msgstr "%s%s%s iÅŸlevini derlemeye gerek yok "
#, c-format
msgid "%s (%s, compiled %s)"
@@ -3574,6 +3580,10 @@ msgstr " kullanıcı 2. vimrc dosyası: \""
msgid " 3rd user vimrc file: \""
msgstr " kullanıcı 3. vimrc dosyası: \""
+msgid " 4th user vimrc file: \""
+msgstr " kullanıcı 4. vimrc dosyası: \""
+
+
msgid " user exrc file: \""
msgstr " kullanıcı exrc dosyası: \""
@@ -4181,6 +4191,10 @@ msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: :loadkeymap kaynak alınmayan bir dosyada kullanılıyor"
#, c-format
+msgid "E106: Unsupported diff output format: %s"
+msgstr "E106: Desteklenmeyen diff çıktısı biçimi: %s"
+
+#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: Ayraç eksik: %s"
@@ -4509,8 +4523,8 @@ msgstr "E196: Bu sürümde ikili harfler bulunmamaktadır"
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: \"%s\" diline ayarlanamıyor"
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: Etkin pencere veya arabellek silinmiÅŸ"
+msgid "E199: Active window or buffer changed or deleted"
+msgstr "E199: Etkin pencere veya arabellek deÄŸiÅŸtirilmiÅŸ veya silinmiÅŸ"
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: *ReadPre otokomutları dosyayı okunamaz hale getirdi"
@@ -6771,6 +6785,10 @@ msgstr ""
msgid "E876: (NFA regexp) Not enough space to store the whole NFA"
msgstr "E876: (BSO düzenli ifadesi) Tüm BSO'yu depolamak için yeterli alan yok"
+#, c-format
+msgid "E877: (NFA regexp) Invalid character class: %d"
+msgstr "E877: (BSO düzenli ifadesi) Geçersiz karakter sınıfı: %d"
+
msgid "E878: (NFA regexp) Could not allocate memory for branch traversal!"
msgstr "E878: (BSO düzenli ifadesi) Dal gezinmesi için bellek ayrılamadı!"
@@ -8383,13 +8401,14 @@ msgid "E1330: Invalid type for object variable: %s"
msgstr "E1330: Nesne değişkeni için geçersiz tür: %s"
msgid ""
-"E1331: Public must be followed by \"var\" or \"static\" or \"final\" or "
+"E1331: public must be followed by \"var\" or \"static\" or \"final\" or "
"\"const\""
-msgstr "E1331: Public sonrası \"var\", \"static\", \"final\" veya \"const\" "
+msgstr ""
+"E1331: public sonrası \"var\", \"static\", \"final\" veya \"const\" "
"gelmelidir"
#, c-format
-msgid "E1332: Public variable name cannot start with underscore: %s"
+msgid "E1332: public variable name cannot start with underscore: %s"
msgstr "E1332: Genel değişken adı bir alt çizgiyle başlayamaz: %s"
#, c-format
@@ -8512,8 +8531,8 @@ msgstr "E1367: \"%2$s\" arayüzünün \"%1$s\" değişkeninin erişim düzeyi fa
msgid ""
"E1368: Static must be followed by \"var\" or \"def\" or \"final\" or "
"\"const\""
-msgstr "E1368: Static sonrası \"var\", \"def\", \"final\" veya \"const\" "
-"gelmelidir"
+msgstr ""
+"E1368: Static sonrası \"var\", \"def\", \"final\" veya \"const\" gelmelidir"
#, c-format
msgid "E1369: Duplicate variable: %s"
@@ -8535,18 +8554,21 @@ msgstr "E1373: Soyut yöntem \"%s\" gerçeklenmemiş"
#, c-format
msgid "E1374: Class variable \"%s\" accessible only inside class \"%s\""
-msgstr "E1374: Sınıf değişkeni \"%s\", yalnızca \"%s\" sınıfının içinde "
+msgstr ""
+"E1374: Sınıf değişkeni \"%s\", yalnızca \"%s\" sınıfının içinde "
"eriÅŸilebilirdir"
#, c-format
msgid "E1375: Class variable \"%s\" accessible only using class \"%s\""
-msgstr "E1375: Sınıf değişkeni \"%s\", yalnızca \"%s\" sınıfı kullanılarak "
+msgstr ""
+"E1375: Sınıf değişkeni \"%s\", yalnızca \"%s\" sınıfı kullanılarak "
"eriÅŸilebilirdir"
#, c-format
msgid "E1376: Object variable \"%s\" accessible only using class \"%s\" object"
-msgstr "E1376: Nesne değişkeni \"%s\", yalnızca sınıf \"%s\" nesnesi "
-"kullanılarak erişilebilirdir"
+msgstr ""
+"E1376: Nesne değişkeni \"%s\", yalnızca sınıf \"%s\" nesnesi kullanılarak "
+"eriÅŸilebilirdir"
#, c-format
msgid "E1377: Access level of method \"%s\" is different in class \"%s\""
@@ -8576,23 +8598,25 @@ msgstr ""
#, c-format
msgid "E1384: Class method \"%s\" accessible only inside class \"%s\""
-msgstr "E1384: Sınıf yöntemi \"%s\", yalnızca \"%s\" sınıfının içinde "
-"eriÅŸilebilirdir"
+msgstr ""
+"E1384: Sınıf yöntemi \"%s\", yalnızca \"%s\" sınıfının içinde erişilebilirdir"
#, c-format
msgid "E1385: Class method \"%s\" accessible only using class \"%s\""
-msgstr "E1385: Sınıf yöntemi \"%s\", yalnızca \"%s\" sınıfı kullanılarak "
+msgstr ""
+"E1385: Sınıf yöntemi \"%s\", yalnızca \"%s\" sınıfı kullanılarak "
"eriÅŸilebilirdir"
#, c-format
msgid "E1386: Object method \"%s\" accessible only using class \"%s\" object"
-msgstr "E1386: Nesne yöntemi \"%s\", yalnızca sınıf \"%s\" nesnesi "
-"kullanılarak erişilebilirdir"
+msgstr ""
+"E1386: Nesne yöntemi \"%s\", yalnızca sınıf \"%s\" nesnesi kullanılarak "
+"eriÅŸilebilirdir"
-msgid "E1387: Public variable not supported in an interface"
+msgid "E1387: public variable not supported in an interface"
msgstr "E1387: Bir arayüzde genel değişken desteklenmiyor"
-msgid "E1388: Public keyword not supported for a method"
+msgid "E1388: public keyword not supported for a method"
msgstr "E1388: Bir yöntem için genel anahtar sözcük desteklenmiyor"
msgid "E1389: Missing name after implements"
@@ -8607,12 +8631,14 @@ msgstr ""
#, c-format
msgid "E1391: Cannot (un)lock variable \"%s\" in class \"%s\""
-msgstr "E1391: \"%2$s\" sınıfındaki \"%1$s\" değişkeni kilitlenemiyor/açılamıyor"
+msgstr ""
+"E1391: \"%2$s\" sınıfındaki \"%1$s\" değişkeni kilitlenemiyor/açılamıyor"
#, c-format
msgid "E1392: Cannot (un)lock class variable \"%s\" in class \"%s\""
-msgstr "E1392: \"%2$s\" sınıfındaki \"%1$s\" sınıf değişkeni "
-"kilitlenemiyor/açılamıyor"
+msgstr ""
+"E1392: \"%2$s\" sınıfındaki \"%1$s\" sınıf değişkeni kilitlenemiyor/"
+"açılamıyor"
msgid "E1393: Type can only be defined in Vim9 script"
msgstr "E1393: Tür, yalnızca Vim9 betiğinde tanımlanabilir"
@@ -8672,13 +8698,83 @@ msgstr "E1408: Final değişkeni bir arayüzde desteklenmiyor"
#, c-format
msgid "E1409: Cannot change read-only variable \"%s\" in class \"%s\""
-msgstr "E1409: \"%2$s\" sınıfındaki \"%1$s\" saltokunur değişken "
-"deÄŸiÅŸtirilemiyor"
+msgstr ""
+"E1409: \"%2$s\" sınıfındaki \"%1$s\" saltokunur değişken değiştirilemiyor"
msgid "E1410: Const variable not supported in an interface"
msgstr "E1410: Bir arayüzde bir bir Const değişken desteklenmiyor"
#, c-format
+msgid "E1411: Missing dot after object \"%s\""
+msgstr "E1411: \"%s\" nesnesi sonrası nokta eksik"
+
+#, c-format
+msgid "E1412: Builtin object method \"%s\" not supported"
+msgstr "E1412: Yerleşik nesne yöntemi \"%s\" desteklenmiyor"
+
+msgid "E1413: Builtin class method not supported"
+msgstr "E1413: Yerleşik sınıf yöntemi desteklenmiyor"
+
+msgid "E1414: Enum can only be defined in Vim9 script"
+msgstr "E1414: Enümerasyon, yalnızca Vim9 betiğinde kullanılabilir"
+
+#, c-format
+msgid "E1415: Enum name must start with an uppercase letter: %s"
+msgstr "E1415: Enümerasyon adı bir BÜYÜK harfle başlamalıdır: %s"
+
+msgid "E1416: Enum cannot extend a class or enum"
+msgstr "E1416: Enümerasyon, bir sınıfı veya enümerasyonu genişletemez"
+
+msgid "E1417: Abstract cannot be used in an Enum"
+msgstr "E1417: Abstract yalnızca bir enümerasyonda kullanılabilir"
+
+#, c-format
+msgid "E1418: Invalid enum value declaration: %s"
+msgstr "E1418: Geçersiz enümerasyon değeri beyanı: %s"
+
+#, c-format
+msgid "E1419: Not a valid command in an Enum: %s"
+msgstr "E1419: Bir enümerasyonda geçerli olmayan bir komut: %s"
+
+msgid "E1420: Missing :endenum"
+msgstr "E1420: :endenum eksik"
+
+#, c-format
+msgid "E1421: Enum \"%s\" cannot be used as a value"
+msgstr "E1421: \"%s\" enümerasyonu yalnızca bir değer olarak kullanılabilir"
+
+#, c-format
+msgid "E1422: Enum value \"%s\" not found in enum \"%s\""
+msgstr "E1422: \"%2$s\" enümerasyonunda \"%1$s\" değeri bulunamadı"
+
+#, c-format
+msgid "E1423: Enum value \"%s.%s\" cannot be modified"
+msgstr "E1423: Enümerasyon değeri \"%s.%s\" değiştirilemiyor"
+
+#, c-format
+msgid "E1424: Using an Enum \"%s\" as a Number"
+msgstr "E1424: Enümerasyon \"%s\", sayı olarak kullanılıyor"
+
+#, c-format
+msgid "E1425: Using an Enum \"%s\" as a String"
+msgstr "E1425: Enümerasyon \"%s\", dizi olarak kullanılıyor"
+
+#, c-format
+msgid "E1426: Enum \"%s\" ordinal value cannot be modified"
+msgstr "E1426: Enümerasyon sıralı değeri \"%s\" değiştirilemiyor"
+
+#, c-format
+msgid "E1427: Enum \"%s\" name cannot be modified"
+msgstr "E1427: Enümerasyon adı \"%s\" değiştirilemiyor"
+
+#, c-format
+msgid "E1428: Duplicate enum value: %s"
+msgstr "E1428: Yinelenen enümerasyon değeri: %s"
+
+msgid "E1429: Class can only be used in a script"
+msgstr "E1429: Sınıf yalnızca bir betikte kullanılabilir"
+
+#, c-format
msgid "E1500: Cannot mix positional and non-positional arguments: %s"
msgstr "E1500: Konumsal ve konumsal olmayan argümanlar karıştırılamıyor: %s"
@@ -8724,6 +8820,17 @@ msgstr "E1509: Genişletilmiş öznitelik okunurken veya yazılırken hata oluş
msgid "E1510: Value too large: %s"
msgstr "E1510: Değer pek büyük: %s"
+#, c-format
+msgid "E1511: Wrong number of characters for field \"%s\""
+msgstr "E1511: \"%s\" alanı için yanlış karakter sayısı"
+
+#, c-format
+msgid "E1512: Wrong character width for field \"%s\""
+msgstr "E1512: \"%s\" alanı için yanlış karakter genişliği"
+
+msgid "E1513: Cannot switch buffer. 'winfixbuf' is enabled"
+msgstr "E1513: Arabellek deÄŸiÅŸtirilemiyor. 'winfixbuf' etkinleÅŸtirilmiÅŸ"
+
msgid "--No lines in buffer--"
msgstr "--Arabellek içinde satır yok--"
@@ -9442,6 +9549,9 @@ msgstr "geçerli pencere için kullanılan en az satır sayısı"
msgid "minimal number of lines used for any window"
msgstr "herhangi bir pencere için kullanılan en az satır sayısı"
+msgid "keep window focused on a single buffer"
+msgstr "pencereyi tek bir arabelleğe odaklı tut"
+
msgid "keep the height of the window"
msgstr "pencerenin yüksekliğini tut"
diff --git a/src/po/uk.cp1251.po b/src/po/uk.cp1251.po
index 40d87f5..1a14b2a 100644
--- a/src/po/uk.cp1251.po
+++ b/src/po/uk.cp1251.po
@@ -1386,8 +1386,8 @@ msgstr " Êîðèñòóâàöüêå äîïîâíåííÿ (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Êì³òëèâå äîïîâíåííÿ (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Îðôîãðàô³÷íà ï³äêàçêà (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Îðôîãðàô³÷íà ï³äêàçêà (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Äîïîâíåííÿ ì³ñöåâèõ êëþ÷îâèõ ñë³â (^N^P)"
diff --git a/src/po/uk.po b/src/po/uk.po
index 273f833..d756d45 100644
--- a/src/po/uk.po
+++ b/src/po/uk.po
@@ -1386,8 +1386,8 @@ msgstr " КориÑтувацьке Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " Кмітливе Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Орфографічна підказка (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Орфографічна підказка (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¼Ñ–Ñцевих ключових Ñлів (^N^P)"
diff --git a/src/po/zh_CN.UTF-8.po b/src/po/zh_CN.UTF-8.po
index e604188..f368f6f 100644
--- a/src/po/zh_CN.UTF-8.po
+++ b/src/po/zh_CN.UTF-8.po
@@ -1291,8 +1291,8 @@ msgstr " 用户自定义补全 (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " 全能补全 (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " 拼写建议 (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " 拼写建议 (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " 关键字局部补全 (^N^P)"
diff --git a/src/po/zh_CN.cp936.po b/src/po/zh_CN.cp936.po
index ef3dfa8..89b4bfc 100644
--- a/src/po/zh_CN.cp936.po
+++ b/src/po/zh_CN.cp936.po
@@ -23,7 +23,7 @@ msgstr ""
"Language-Team: Simplified Chinese\n"
"Language: \n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=gbk\n"
+"Content-Type: text/plain; charset=GBK\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -1291,8 +1291,8 @@ msgstr " Óû§×Ô¶¨Ò岹ȫ (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " È«Äܲ¹È« (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ƴд½¨Òé (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " ƴд½¨Òé (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " ¹Ø¼ü×Ö¾Ö²¿²¹È« (^N^P)"
diff --git a/src/po/zh_CN.po b/src/po/zh_CN.po
index 4e34616..8e4571d 100644
--- a/src/po/zh_CN.po
+++ b/src/po/zh_CN.po
@@ -23,7 +23,7 @@ msgstr ""
"Language-Team: Simplified Chinese\n"
"Language: \n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=gb2312\n"
+"Content-Type: text/plain; charset=GB2312\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -1291,8 +1291,8 @@ msgstr " Óû§×Ô¶¨Ò岹ȫ (^U^N^P)"
msgid " Omni completion (^O^N^P)"
msgstr " È«Äܲ¹È« (^O^N^P)"
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ƴд½¨Òé (s^N^P)"
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " ƴд½¨Òé (^S^N^P)"
msgid " Keyword Local completion (^N^P)"
msgstr " ¹Ø¼ü×Ö¾Ö²¿²¹È« (^N^P)"
diff --git a/src/po/zh_TW.po b/src/po/zh_TW.po
index 2cedfd4..e37f90d 100644
--- a/src/po/zh_TW.po
+++ b/src/po/zh_TW.po
@@ -51,7 +51,7 @@ msgstr ""
"Language-Team: Hung-Te Lin <piaip@csie.ntu.edu.tw>, Cecil Sheng "
"<b7506022@csie.ntu.edu.tw>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=big5\n"
+"Content-Type: text/plain; charset=BIG5\n"
"Content-Transfer-Encoding: 8-bit\n"
msgid "E82: Cannot allocate any buffer, exiting..."
diff --git a/src/popupmenu.c b/src/popupmenu.c
index 6e9d826..da8241b 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -425,7 +425,7 @@ pum_under_menu(int row, int col, int only_redrawing)
* Returns attributes for every cell, or NULL if all attributes are the same.
*/
static int *
-pum_compute_text_attrs(char_u *text, hlf_T hlf)
+pum_compute_text_attrs(char_u *text, hlf_T hlf, int user_hlattr)
{
int i;
size_t leader_len;
@@ -483,6 +483,9 @@ pum_compute_text_attrs(char_u *text, hlf_T hlf)
else if (matched_start && ptr < text + leader_len)
new_attr = highlight_attr[hlf == HLF_PSI ? HLF_PMSI : HLF_PMNI];
+ if (user_hlattr > 0)
+ new_attr = hl_combine_attr(new_attr, user_hlattr);
+
char_cells = mb_ptr2cells(ptr);
for (i = 0; i < char_cells; i++)
attrs[cell_idx + i] = new_attr;
@@ -527,7 +530,7 @@ pum_screen_puts_with_attrs(
else
#endif
attr = attrs[col - col_start];
- screen_puts_len(ptr, char_len, row, col, attr);
+ screen_puts_len(ptr, char_len, row, col, attr);
col += mb_ptr2cells(ptr);
ptr += char_len;
}
@@ -628,6 +631,10 @@ pum_redraw(void)
{
hlf = hlfs[round];
attr = highlight_attr[hlf];
+ if (pum_array[idx].pum_user_hlattr > 0)
+ attr = hl_combine_attr(attr, pum_array[idx].pum_user_hlattr);
+ if (round == 1 && pum_array[idx].pum_user_kind_hlattr > 0)
+ attr = hl_combine_attr(attr, pum_array[idx].pum_user_kind_hlattr);
width = 0;
s = NULL;
switch (round)
@@ -656,7 +663,8 @@ pum_redraw(void)
if (saved != NUL)
*p = saved;
- attrs = pum_compute_text_attrs(st, hlf);
+ int user_hlattr = pum_array[idx].pum_user_hlattr;
+ attrs = pum_compute_text_attrs(st, hlf, user_hlattr);
#ifdef FEAT_RIGHTLEFT
if (pum_rl)
@@ -1332,9 +1340,10 @@ pum_set_event_info(dict_T *dict)
static void
pum_position_at_mouse(int min_width)
{
- if (Rows - mouse_row > pum_size)
+ if (Rows - mouse_row > pum_size || Rows - mouse_row > mouse_row)
{
- // Enough space below the mouse row.
+ // Enough space below the mouse row,
+ // or there is more space below the mouse row than above.
pum_row = mouse_row + 1;
if (pum_height > Rows - pum_row)
pum_height = Rows - pum_row;
@@ -1633,7 +1642,7 @@ pum_select_mouse_pos(void)
{
int idx = mouse_row - pum_row;
- if (idx < 0 || idx >= pum_size)
+ if (idx < 0 || idx >= pum_height)
pum_selected = -1;
else if (*pum_array[idx].pum_text != NUL)
pum_selected = idx;
diff --git a/src/popupwin.c b/src/popupwin.c
index 38c1c9e..0ff57fb 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -699,8 +699,8 @@ popup_highlight_curline(win_T *wp)
if (syn_name2id((char_u *)linehl) == 0)
linehl = "PmenuSel";
- sign_define_by_name(sign_name, NULL, (char_u *)linehl,
- NULL, NULL, NULL, NULL);
+ sign_define_by_name(sign_name, NULL, (char_u *)linehl, NULL, NULL, NULL,
+ NULL, SIGN_DEF_PRIO);
}
sign_place(&sign_id, (char_u *)"PopUpMenu", sign_name,
@@ -2651,6 +2651,8 @@ f_popup_filter_yesno(typval_T *argvars, typval_T *rettv)
return;
c = *key;
+ if (c == CAR && need_wait_return)
+ return;
if (c == K_SPECIAL && key[1] != NUL)
c = TO_SPECIAL(key[1], key[2]);
@@ -2844,6 +2846,54 @@ f_popup_settext(typval_T *argvars, typval_T *rettv UNUSED)
popup_adjust_position(wp);
}
+/*
+ * popup_setbuf({id}, {bufnr})
+ */
+ void
+f_popup_setbuf(typval_T *argvars, typval_T *rettv UNUSED)
+{
+ int id;
+ win_T *wp;
+ buf_T *buf;
+
+ rettv->v_type = VAR_BOOL;
+ rettv->vval.v_number = VVAL_FALSE;
+
+ if (check_for_number_arg(argvars, 0) == FAIL
+ || check_for_buffer_arg(argvars, 1) == FAIL)
+ return;
+
+ id = (int)tv_get_number(&argvars[0]);
+ wp = find_popup_win(id);
+ if (wp == NULL)
+ return;
+
+ buf = tv_get_buf_from_arg(&argvars[1]);
+
+ if (buf == NULL)
+ return;
+#ifdef FEAT_TERMINAL
+ if (buf->b_term != NULL && popup_terminal_exists())
+ {
+ emsg(_(e_cannot_open_second_popup_with_terminal));
+ return;
+ }
+#endif
+
+ if (wp->w_buffer != buf)
+ {
+ wp->w_buffer->b_nwindows--;
+ win_init_popup_win(wp, buf);
+ set_local_options_default(wp, FALSE);
+ swap_exists_action = SEA_READONLY;
+ buffer_ensure_loaded(buf);
+ swap_exists_action = SEA_NONE;
+ redraw_win_later(wp, UPD_NOT_VALID);
+ popup_adjust_position(wp);
+ }
+ rettv->vval.v_number = VVAL_TRUE;
+}
+
static void
popup_free(win_T *wp)
{
diff --git a/src/proto/autocmd.pro b/src/proto/autocmd.pro
index 4a502da..920987a 100644
--- a/src/proto/autocmd.pro
+++ b/src/proto/autocmd.pro
@@ -26,6 +26,7 @@ int has_textchanged(void);
int has_textchangedI(void);
int has_textchangedP(void);
int has_insertcharpre(void);
+int has_keyinputpre(void);
int has_cmdundefined(void);
int has_textyankpost(void);
int has_completechanged(void);
diff --git a/src/proto/dict.pro b/src/proto/dict.pro
index 346e1d5..b1ceecc 100644
--- a/src/proto/dict.pro
+++ b/src/proto/dict.pro
@@ -40,7 +40,7 @@ int eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal);
int eval_lit_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg);
void dict_extend(dict_T *d1, dict_T *d2, char_u *action, char *func_name);
dictitem_T *dict_lookup(hashitem_T *hi);
-int dict_equal(dict_T *d1, dict_T *d2, int ic, int recursive);
+int dict_equal(dict_T *d1, dict_T *d2, int ic);
long dict_count(dict_T *d, typval_T *needle, int ic);
void dict_extend_func(typval_T *argvars, type_T *type, char *func_name, char_u *arg_errmsg, int is_new, typval_T *rettv);
void dict_filter_map(dict_T *d, filtermap_T filtermap, type_T *argtype, char *func_name, char_u *arg_errmsg, typval_T *expr, typval_T *rettv);
diff --git a/src/proto/findfile.pro b/src/proto/findfile.pro
index 9560101..1c28221 100644
--- a/src/proto/findfile.pro
+++ b/src/proto/findfile.pro
@@ -12,7 +12,7 @@ char_u *file_name_at_cursor(int options, long count, linenr_T *file_lnum);
char_u *file_name_in_line(char_u *line, int col, int options, long count, char_u *rel_fname, linenr_T *file_lnum);
char_u *find_file_name_in_path(char_u *ptr, int len, int options, long count, char_u *rel_fname);
int vim_ispathlistsep(int c);
-void uniquefy_paths(garray_T *gap, char_u *pattern);
+void uniquefy_paths(garray_T *gap, char_u *pattern, char_u *path_option);
int expand_in_path(garray_T *gap, char_u *pattern, int flags);
void simplify_filename(char_u *filename);
void f_simplify(typval_T *argvars, typval_T *rettv);
diff --git a/src/proto/list.pro b/src/proto/list.pro
index 1659b8f..27bea5e 100644
--- a/src/proto/list.pro
+++ b/src/proto/list.pro
@@ -16,7 +16,7 @@ listitem_T *listitem_alloc(void);
void listitem_free(list_T *l, listitem_T *item);
void listitem_remove(list_T *l, listitem_T *item);
long list_len(list_T *l);
-int list_equal(list_T *l1, list_T *l2, int ic, int recursive);
+int list_equal(list_T *l1, list_T *l2, int ic);
listitem_T *list_find(list_T *l, long n);
long list_find_nr(list_T *l, long idx, int *errorp);
char_u *list_find_str(list_T *l, long idx);
diff --git a/src/proto/mark.pro b/src/proto/mark.pro
index cc45f0d..d398c36 100644
--- a/src/proto/mark.pro
+++ b/src/proto/mark.pro
@@ -28,4 +28,5 @@ void set_last_cursor(win_T *win);
void free_all_marks(void);
xfmark_T *get_namedfm(void);
void f_getmarklist(typval_T *argvars, typval_T *rettv);
+void mark_forget_file(win_T *wp, int fnum);
/* vim: set ft=c : */
diff --git a/src/proto/mbyte.pro b/src/proto/mbyte.pro
index c57c94c..bb976e3 100644
--- a/src/proto/mbyte.pro
+++ b/src/proto/mbyte.pro
@@ -48,6 +48,7 @@ int utf_islower(int a);
int utf_tolower(int a);
int utf_isupper(int a);
int mb_strnicmp(char_u *s1, char_u *s2, size_t nn);
+int mb_strnicmp2(char_u *s1, char_u *s2, size_t n1, size_t n2);
void show_utf8(void);
int latin_head_off(char_u *base, char_u *p);
int dbcs_screen_head_off(char_u *base, char_u *p);
diff --git a/src/proto/memline.pro b/src/proto/memline.pro
index c5d9b5d..238bcea 100644
--- a/src/proto/memline.pro
+++ b/src/proto/memline.pro
@@ -11,7 +11,7 @@ void ml_close_notmod(void);
void ml_timestamp(buf_T *buf);
void ml_recover(int checkext);
int recover_names(char_u *fname, int do_list, list_T *ret_list, int nr, char_u **fname_out);
-char_u *make_percent_swname(char_u *dir, char_u *name);
+char_u *make_percent_swname(char_u *dir, char_u *dir_end, char_u *name);
void get_b0_dict(char_u *fname, dict_T *d);
void ml_sync_all(int check_file, int check_char);
void ml_preserve(buf_T *buf, int message);
diff --git a/src/proto/option.pro b/src/proto/option.pro
index 69463d4..1659131 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -69,6 +69,7 @@ char *did_set_showtabline(optset_T *args);
char *did_set_smoothscroll(optset_T *args);
char *did_set_spell(optset_T *args);
char *did_set_swapfile(optset_T *args);
+char *did_set_tabclose(optset_T *args);
char *did_set_termguicolors(optset_T *args);
char *did_set_terse(optset_T *args);
char *did_set_textauto(optset_T *args);
diff --git a/src/proto/optionstr.pro b/src/proto/optionstr.pro
index 340ffc4..39c40f3 100644
--- a/src/proto/optionstr.pro
+++ b/src/proto/optionstr.pro
@@ -156,6 +156,7 @@ char *did_set_swapsync(optset_T *args);
int expand_set_swapsync(optexpand_T *args, int *numMatches, char_u ***matches);
char *did_set_switchbuf(optset_T *args);
int expand_set_switchbuf(optexpand_T *args, int *numMatches, char_u ***matches);
+int expand_set_tabclose(optexpand_T *args, int *numMatches, char_u ***matches);
char *did_set_tabline(optset_T *args);
char *did_set_tagcase(optset_T *args);
int expand_set_tagcase(optexpand_T *args, int *numMatches, char_u ***matches);
diff --git a/src/proto/os_mswin.pro b/src/proto/os_mswin.pro
index 4731010..cde9cea 100644
--- a/src/proto/os_mswin.pro
+++ b/src/proto/os_mswin.pro
@@ -11,6 +11,7 @@ int mch_isFullName(char_u *fname);
void slash_adjust(char_u *p);
char_u *resolve_appexeclink(char_u *fname);
int vim_stat(const char *name, stat_T *stp);
+int vim_lstat(const char *name, stat_T *stp);
void mch_settmode(tmode_T tmode);
int mch_get_shellsize(void);
void mch_set_shellsize(void);
@@ -22,6 +23,7 @@ int mch_has_wildcard(char_u *p);
int mch_chdir(char *path);
int mch_icon_load(HANDLE *iconp);
int mch_libcall(char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result);
+int mch_get_random(char_u *buf, int len);
void DumpPutS(const char *psz);
int mch_get_winpos(int *x, int *y);
void mch_set_winpos(int x, int y);
diff --git a/src/proto/os_unix.pro b/src/proto/os_unix.pro
index 6e13de6..d9dc8d9 100644
--- a/src/proto/os_unix.pro
+++ b/src/proto/os_unix.pro
@@ -76,6 +76,7 @@ int mch_rename(const char *src, const char *dest);
int gpm_available(void);
int gpm_enabled(void);
int mch_libcall(char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result);
+int mch_get_random(char_u *buf, int len);
void setup_term_clip(void);
void start_xterm_trace(int button);
void stop_xterm_trace(void);
diff --git a/src/proto/popupwin.pro b/src/proto/popupwin.pro
index 1ff9950..11679c6 100644
--- a/src/proto/popupwin.pro
+++ b/src/proto/popupwin.pro
@@ -34,6 +34,7 @@ void f_popup_hide(typval_T *argvars, typval_T *rettv);
void popup_show(win_T *wp);
void f_popup_show(typval_T *argvars, typval_T *rettv);
void f_popup_settext(typval_T *argvars, typval_T *rettv);
+void f_popup_setbuf(typval_T *argvars, typval_T *rettv);
int error_if_popup_window(int also_with_term);
int popup_close(int id, int force);
int popup_close_tabpage(tabpage_T *tp, int id, int force);
diff --git a/src/proto/search.pro b/src/proto/search.pro
index 08526c8..8665994 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -41,6 +41,7 @@ void f_matchfuzzy(typval_T *argvars, typval_T *rettv);
void f_matchfuzzypos(typval_T *argvars, typval_T *rettv);
int fuzzy_match_str(char_u *str, char_u *pat);
garray_T *fuzzy_match_str_with_pos(char_u *str, char_u *pat);
+int search_for_fuzzy_match(buf_T *buf, pos_T *pos, char_u *pattern, int dir, pos_T *start_pos, int *len, char_u **ptr, int whole_line);
void fuzmatch_str_free(fuzmatch_str_T *fuzmatch, int count);
int fuzzymatches_to_strmatches(fuzmatch_str_T *fuzmatch, char_u ***matches, int count, int funcsort);
/* vim: set ft=c : */
diff --git a/src/proto/sign.pro b/src/proto/sign.pro
index a042bad..1cca0a6 100644
--- a/src/proto/sign.pro
+++ b/src/proto/sign.pro
@@ -8,7 +8,7 @@ int buf_findsigntype_id(buf_T *buf, linenr_T lnum, int typenr);
int buf_signcount(buf_T *buf, linenr_T lnum);
void buf_delete_signs(buf_T *buf, char_u *group);
void sign_mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after);
-int sign_define_by_name(char_u *name, char_u *icon, char_u *linehl, char_u *text, char_u *texthl, char_u *culhl, char_u *numhl);
+int sign_define_by_name(char_u *name, char_u *icon, char_u *linehl, char_u *text, char_u *texthl, char_u *culhl, char_u *numhl, int prio);
int sign_exists_by_name(char_u *name);
int sign_undefine_by_name(char_u *name, int give_error);
int sign_place(int *sign_id, char_u *sign_group, char_u *sign_name, buf_T *buf, linenr_T lnum, int prio);
diff --git a/src/proto/tag.pro b/src/proto/tag.pro
index 6de463e..eec7c24 100644
--- a/src/proto/tag.pro
+++ b/src/proto/tag.pro
@@ -14,4 +14,5 @@ int expand_tags(int tagnames, char_u *pat, int *num_file, char_u ***file);
int get_tags(list_T *list, char_u *pat, char_u *buf_fname);
void get_tagstack(win_T *wp, dict_T *retdict);
int set_tagstack(win_T *wp, dict_T *d, int action);
+void tagstack_clear_entry(taggy_T *item);
/* vim: set ft=c : */
diff --git a/src/proto/typval.pro b/src/proto/typval.pro
index b6ea131..1edfeb4 100644
--- a/src/proto/typval.pro
+++ b/src/proto/typval.pro
@@ -68,14 +68,13 @@ int typval_compare(typval_T *tv1, typval_T *tv2, exprtype_T type, int ic);
int typval_compare_list(typval_T *tv1, typval_T *tv2, exprtype_T type, int ic, int *res);
int typval_compare_null(typval_T *tv1, typval_T *tv2);
int typval_compare_blob(typval_T *tv1, typval_T *tv2, exprtype_T type, int *res);
-int typval_compare_class(typval_T *tv1, typval_T *tv2, exprtype_T type, int ic, int *res);
int typval_compare_object(typval_T *tv1, typval_T *tv2, exprtype_T type, int ic, int *res);
int typval_compare_dict(typval_T *tv1, typval_T *tv2, exprtype_T type, int ic, int *res);
int typval_compare_func(typval_T *tv1, typval_T *tv2, exprtype_T type, int ic, int *res);
int typval_compare_string(typval_T *tv1, typval_T *tv2, exprtype_T type, int ic, int *res);
char_u *typval_tostring(typval_T *arg, int quotes);
int tv_islocked(typval_T *tv);
-int tv_equal(typval_T *tv1, typval_T *tv2, int ic, int recursive);
+int tv_equal(typval_T *tv1, typval_T *tv2, int ic);
int eval_option(char_u **arg, typval_T *rettv, int evaluate);
int eval_number(char_u **arg, typval_T *rettv, int evaluate, int want_string);
int eval_string(char_u **arg, typval_T *rettv, int evaluate, int interpolate);
diff --git a/src/proto/userfunc.pro b/src/proto/userfunc.pro
index 9bb4616..32dac66 100644
--- a/src/proto/userfunc.pro
+++ b/src/proto/userfunc.pro
@@ -39,7 +39,7 @@ int call_callback(callback_T *callback, int len, typval_T *rettv, int argcount,
varnumber_T call_callback_retnr(callback_T *callback, int argcount, typval_T *argvars);
void user_func_error(funcerror_T error, char_u *name, int found_var);
int call_func(char_u *funcname, int len, typval_T *rettv, int argcount_in, typval_T *argvars_in, funcexe_T *funcexe);
-int call_simple_func(char_u *funcname, int len, typval_T *rettv);
+int call_simple_func(char_u *funcname, size_t len, typval_T *rettv);
char_u *printable_func_name(ufunc_T *fp);
char_u *trans_function_name(char_u **pp, int *is_global, int skip, int flags);
char_u *trans_function_name_ext(char_u **pp, int *is_global, int skip, int flags, funcdict_T *fdp, partial_T **partial, type_T **type, ufunc_T **ufunc);
@@ -95,4 +95,5 @@ int set_ref_in_call_stack(int copyID);
int set_ref_in_functions(int copyID);
int set_ref_in_func_args(int copyID);
int set_ref_in_func(char_u *name, ufunc_T *fp_in, int copyID);
+int get_func_arity(char_u *name, int *required, int *optional, int *varargs);
/* vim: set ft=c : */
diff --git a/src/proto/vim9class.pro b/src/proto/vim9class.pro
index 1b5800c..c87fffb 100644
--- a/src/proto/vim9class.pro
+++ b/src/proto/vim9class.pro
@@ -40,6 +40,7 @@ int is_class_name(char_u *name, typval_T *rettv);
void protected_method_access_errmsg(char_u *method_name);
int object_empty(object_T *obj);
int object_len(object_T *obj);
+int object_equal(object_T *o1, object_T *o2, int ic);
char_u *object2string(object_T *obj, char_u *numbuf, int copyID, int echo_style, int restore_copyID, int composite_val);
int class_instance_of(class_T *cl, class_T *other_cl);
void f_instanceof(typval_T *argvars, typval_T *rettv);
diff --git a/src/proto/vim9instr.pro b/src/proto/vim9instr.pro
index 1b2f79c..8ee33b8 100644
--- a/src/proto/vim9instr.pro
+++ b/src/proto/vim9instr.pro
@@ -58,7 +58,7 @@ int check_internal_func_args(cctx_T *cctx, int func_idx, int argcount, int metho
int generate_BCALL(cctx_T *cctx, int func_idx, int argcount, int method_call);
int generate_LISTAPPEND(cctx_T *cctx);
int generate_BLOBAPPEND(cctx_T *cctx);
-int generate_CALL(cctx_T *cctx, ufunc_T *ufunc, class_T *cl, int mi, int pushed_argcount);
+int generate_CALL(cctx_T *cctx, ufunc_T *ufunc, class_T *cl, int mi, int pushed_argcount, int is_super);
int generate_UCALL(cctx_T *cctx, char_u *name, int argcount);
int check_func_args_from_type(cctx_T *cctx, type_T *type, int argcount, int at_top, char_u *name);
int generate_PCALL(cctx_T *cctx, int argcount, char_u *name, type_T *type, int at_top);
diff --git a/src/proto/window.pro b/src/proto/window.pro
index 26c7040..441070e 100644
--- a/src/proto/window.pro
+++ b/src/proto/window.pro
@@ -100,4 +100,5 @@ int get_win_number(win_T *wp, win_T *first_win);
int get_tab_number(tabpage_T *tp);
char *check_colorcolumn(win_T *wp);
int get_last_winid(void);
+int win_locked(win_T *wp);
/* vim: set ft=c : */
diff --git a/src/regexp.c b/src/regexp.c
index ff201d9..b020a43 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -1729,7 +1729,9 @@ mb_decompose(int c, int *c1, int *c2, int *c3)
/*
* Compare two strings, ignore case if rex.reg_ic set.
* Return 0 if strings match, non-zero otherwise.
- * Correct the length "*n" when composing characters are ignored.
+ * Correct the length "*n" when composing characters are ignored
+ * or for utf8 when both utf codepoints are considered equal because of
+ * case-folding but have different length (e.g. 's' and 'Å¿')
*/
static int
cstrncmp(char_u *s1, char_u *s2, int *n)
@@ -1738,6 +1740,29 @@ cstrncmp(char_u *s1, char_u *s2, int *n)
if (!rex.reg_ic)
result = STRNCMP(s1, s2, *n);
+ else if (enc_utf8)
+ {
+ char_u *p = s1;
+ int n2 = 0;
+ int n1 = *n;
+ // count the number of characters for byte-length of s1
+ while (n1 > 0 && *p != NUL)
+ {
+ n1 -= mb_ptr2len(s1);
+ MB_PTR_ADV(p);
+ n2++;
+ }
+ // count the number of bytes to advance the same number of chars for s2
+ p = s2;
+ while (n2-- > 0 && *p != NUL)
+ MB_PTR_ADV(p);
+
+ n2 = p - s2;
+
+ result = MB_STRNICMP2(s1, s2, *n, n2);
+ if (result == 0 && n2 < *n)
+ *n = n2;
+ }
else
result = MB_STRNICMP(s1, s2, *n);
@@ -1787,7 +1812,7 @@ cstrncmp(char_u *s1, char_u *s2, int *n)
cstrchr(char_u *s, int c)
{
char_u *p;
- int cc;
+ int cc, lc;
if (!rex.reg_ic || (!enc_utf8 && mb_char2len(c) > 1))
return vim_strchr(s, c);
@@ -1796,26 +1821,35 @@ cstrchr(char_u *s, int c)
// faster (esp. when using MS Visual C++!).
// For UTF-8 need to use folded case.
if (enc_utf8 && c > 0x80)
+ {
cc = utf_fold(c);
+ lc = cc;
+ }
else
- if (MB_ISUPPER(c))
- cc = MB_TOLOWER(c);
- else if (MB_ISLOWER(c))
- cc = MB_TOUPPER(c);
- else
- return vim_strchr(s, c);
+ if (MB_ISUPPER(c))
+ {
+ cc = MB_TOLOWER(c);
+ lc = cc;
+ }
+ else if (MB_ISLOWER(c))
+ {
+ cc = MB_TOUPPER(c);
+ lc = c;
+ }
+ else
+ return vim_strchr(s, c);
if (has_mbyte)
{
for (p = s; *p != NUL; p += (*mb_ptr2len)(p))
{
- if (enc_utf8 && c > 0x80)
+ int uc = utf_ptr2char(p);
+ if (enc_utf8 && (c > 0x80 || uc > 0x80))
{
- int uc = utf_ptr2char(p);
-
// Do not match an illegal byte. E.g. 0xff matches 0xc3 0xbf,
// not 0xff.
- if ((uc < 0x80 || uc != *p) && utf_fold(uc) == cc)
+ // compare with lower case of the character
+ if ((uc < 0x80 || uc != *p) && utf_fold(uc) == lc)
return p;
}
else if (*p == c || *p == cc)
diff --git a/src/regexp_bt.c b/src/regexp_bt.c
index 5452dda..16dac73 100644
--- a/src/regexp_bt.c
+++ b/src/regexp_bt.c
@@ -3823,6 +3823,14 @@ regmatch(
}
}
}
+ else if (enc_utf8)
+ {
+ if (cstrncmp(opnd, rex.input, &len) != 0)
+ {
+ status = RA_NOMATCH;
+ break;
+ }
+ }
else
for (i = 0; i < len; ++i)
if (opnd[i] != rex.input[i])
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 4f07a21..6db4134 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -5666,7 +5666,12 @@ find_match_text(colnr_T *startcol, int regstart, char_u *match_text)
for (;;)
{
match = TRUE;
- len2 = MB_CHAR2LEN(regstart); // skip regstart
+ // skip regstart
+ len2 = MB_CHAR2LEN(regstart);
+ if (enc_utf8 && len2 > 1 && MB_CHAR2LEN(PTR2CHAR(rex.line + col)) != len2)
+ // because of case-folding of the previously matched text, we may need
+ // to skip fewer bytes than mb_char2len(regstart)
+ len2 = mb_char2len(utf_fold(regstart));
for (len1 = 0; match_text[len1] != NUL; len1 += MB_CHAR2LEN(c1))
{
c1 = PTR2CHAR(match_text + len1);
@@ -7502,7 +7507,7 @@ nfa_regexec_both(
// If match_text is set it contains the full text that must match.
// Nothing else to try. Doesn't handle combining chars well.
- if (prog->match_text != NULL && !rex.reg_icombine)
+ if (prog->match_text != NULL && *prog->match_text != NUL && !rex.reg_icombine)
{
retval = find_match_text(&col, prog->regstart, prog->match_text);
if (REG_MULTI)
diff --git a/src/search.c b/src/search.c
index 0b39d90..e5936d8 100644
--- a/src/search.c
+++ b/src/search.c
@@ -53,6 +53,7 @@ static int fuzzy_match_str_compare(const void *s1, const void *s2);
static void fuzzy_match_str_sort(fuzmatch_str_T *fm, int sz);
static int fuzzy_match_func_compare(const void *s1, const void *s2);
static void fuzzy_match_func_sort(fuzmatch_str_T *fm, int sz);
+static int fuzzy_match_str_in_line(char_u **ptr, char_u *pat, int *len, pos_T *current_pos);
#define SEARCH_STAT_DEF_TIMEOUT 40L
#define SEARCH_STAT_DEF_MAX_COUNT 99
@@ -1547,6 +1548,7 @@ do_search(
{
vim_free(msgbuf);
msgbuf = r;
+ msgbuflen = STRLEN(msgbuf);
// move reversed text to beginning of buffer
while (*r != NUL && *r == ' ')
r++;
@@ -5106,11 +5108,11 @@ fuzzy_match_str_with_pos(char_u *str UNUSED, char_u *pat UNUSED)
int j = 0;
if (str == NULL || pat == NULL)
- return NULL;
+ return NULL;
match_positions = ALLOC_ONE(garray_T);
if (match_positions == NULL)
- return NULL;
+ return NULL;
ga_init2(match_positions, sizeof(int_u), 10);
if (!fuzzy_match(str, pat, FALSE, &score, matches, MAX_FUZZY_MATCHES)
@@ -5140,6 +5142,172 @@ fuzzy_match_str_with_pos(char_u *str UNUSED, char_u *pat UNUSED)
}
/*
+ * This function searches for a fuzzy match of the pattern `pat` within the
+ * line pointed to by `*ptr`. It splits the line into words, performs fuzzy
+ * matching on each word, and returns the length and position of the first
+ * matched word.
+ */
+ static int
+fuzzy_match_str_in_line(char_u **ptr, char_u *pat, int *len, pos_T *current_pos)
+{
+ char_u *str = *ptr;
+ char_u *strBegin = str;
+ char_u *end = NULL;
+ char_u *start = NULL;
+ int found = FALSE;
+ int result;
+ char save_end;
+
+ if (str == NULL || pat == NULL)
+ return found;
+
+ while (*str != NUL)
+ {
+ // Skip non-word characters
+ start = find_word_start(str);
+ if (*start == NUL)
+ break;
+ end = find_word_end(start);
+
+ // Extract the word from start to end
+ save_end = *end;
+ *end = NUL;
+
+ // Perform fuzzy match
+ result = fuzzy_match_str(start, pat);
+ *end = save_end;
+
+ if (result > 0)
+ {
+ *len = (int)(end - start);
+ current_pos->col += (int)(end - strBegin);
+ found = TRUE;
+ *ptr = start;
+ break;
+ }
+
+ // Move to the end of the current word for the next iteration
+ str = end;
+ // Ensure we continue searching after the current word
+ while (*str != NUL && !vim_iswordp(str))
+ MB_PTR_ADV(str);
+ }
+
+ return found;
+}
+
+/*
+ * Search for the next fuzzy match in the specified buffer.
+ * This function attempts to find the next occurrence of the given pattern
+ * in the buffer, starting from the current position. It handles line wrapping
+ * and direction of search.
+ *
+ * Return TRUE if a match is found, otherwise FALSE.
+ */
+ int
+search_for_fuzzy_match(
+ buf_T *buf,
+ pos_T *pos,
+ char_u *pattern,
+ int dir,
+ pos_T *start_pos,
+ int *len,
+ char_u **ptr,
+ int whole_line)
+{
+ pos_T current_pos = *pos;
+ pos_T circly_end;
+ int found_new_match = FAIL;
+ int looped_around = FALSE;
+
+ if (whole_line)
+ current_pos.lnum += dir;
+
+ if (buf == curbuf)
+ circly_end = *start_pos;
+ else
+ {
+ circly_end.lnum = buf->b_ml.ml_line_count;
+ circly_end.col = 0;
+ circly_end.coladd = 0;
+ }
+
+ do {
+
+ // Check if looped around and back to start position
+ if (looped_around && EQUAL_POS(current_pos, circly_end))
+ break;
+
+ // Ensure current_pos is valid
+ if (current_pos.lnum >= 1 && current_pos.lnum <= buf->b_ml.ml_line_count)
+ {
+ // Get the current line buffer
+ *ptr = ml_get_buf(buf, current_pos.lnum, FALSE);
+ // If ptr is end of line is reached, move to next line
+ // or previous line based on direction
+ if (**ptr != NUL)
+ {
+ if (!whole_line)
+ {
+ *ptr += current_pos.col;
+ // Try to find a fuzzy match in the current line starting from current position
+ found_new_match = fuzzy_match_str_in_line(ptr, pattern, len, &current_pos);
+ if (found_new_match)
+ {
+ *pos = current_pos;
+ break;
+ }
+ else if (looped_around && current_pos.lnum == circly_end.lnum)
+ break;
+ }
+ else
+ {
+ if (fuzzy_match_str(*ptr, pattern) > 0)
+ {
+ found_new_match = TRUE;
+ *pos = current_pos;
+ *len = (int)STRLEN(*ptr);
+ break;
+ }
+ }
+ }
+ }
+
+ // Move to the next line or previous line based on direction
+ if (dir == FORWARD)
+ {
+ if (++current_pos.lnum > buf->b_ml.ml_line_count)
+ {
+ if (p_ws)
+ {
+ current_pos.lnum = 1;
+ looped_around = TRUE;
+ }
+ else
+ break;
+ }
+ }
+ else
+ {
+ if (--current_pos.lnum < 1)
+ {
+ if (p_ws)
+ {
+ current_pos.lnum = buf->b_ml.ml_line_count;
+ looped_around = TRUE;
+ }
+ else
+ break;
+
+ }
+ }
+ current_pos.col = 0;
+ } while (TRUE);
+
+ return found_new_match;
+}
+
+/*
* Free an array of fuzzy string matches "fuzmatch[count]".
*/
void
diff --git a/src/sign.c b/src/sign.c
index 8aa043b..b1f496c 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -34,6 +34,7 @@ struct sign
int sn_text_hl; // highlight ID for text
int sn_cul_hl; // highlight ID for text on current line when 'cursorline' is set
int sn_num_hl; // highlight ID for line number
+ int sn_priority; // default priority of this sign, -1 means SIGN_DEF_PRIO
};
static sign_T *first_sign = NULL;
@@ -1047,7 +1048,8 @@ sign_define_by_name(
char_u *text,
char_u *texthl,
char_u *culhl,
- char_u *numhl)
+ char_u *numhl,
+ int prio)
{
sign_T *sp_prev;
sign_T *sp;
@@ -1083,6 +1085,8 @@ sign_define_by_name(
if (text != NULL && (sign_define_init_text(sp, text) == FAIL))
return FAIL;
+ sp->sn_priority = prio;
+
if (linehl != NULL)
{
if (*linehl == NUL)
@@ -1206,6 +1210,10 @@ sign_place(
if (*sign_id == 0)
*sign_id = sign_group_get_next_signid(buf, sign_group);
+ // Use the default priority value for this sign.
+ if (prio == -1)
+ prio = (sp->sn_priority != -1) ? sp->sn_priority : SIGN_DEF_PRIO;
+
if (lnum > 0)
// ":sign place {id} line={lnum} name={name} file={fname}":
// place a sign
@@ -1338,6 +1346,7 @@ sign_define_cmd(char_u *sign_name, char_u *cmdline)
char_u *texthl = NULL;
char_u *culhl = NULL;
char_u *numhl = NULL;
+ int prio = -1;
int failed = FALSE;
// set values for a defined sign.
@@ -1377,6 +1386,11 @@ sign_define_cmd(char_u *sign_name, char_u *cmdline)
arg += 6;
numhl = vim_strnsave(arg, p - arg);
}
+ else if (STRNCMP(arg, "priority=", 9) == 0)
+ {
+ arg += 9;
+ prio = atoi((char *)arg);
+ }
else
{
semsg(_(e_invalid_argument_str), arg);
@@ -1386,7 +1400,7 @@ sign_define_cmd(char_u *sign_name, char_u *cmdline)
}
if (!failed)
- sign_define_by_name(sign_name, icon, linehl, text, texthl, culhl, numhl);
+ sign_define_by_name(sign_name, icon, linehl, text, texthl, culhl, numhl, prio);
vim_free(icon);
vim_free(text);
@@ -1721,7 +1735,7 @@ ex_sign(exarg_T *eap)
linenr_T lnum = -1;
char_u *sign_name = NULL;
char_u *group = NULL;
- int prio = SIGN_DEF_PRIO;
+ int prio = -1;
// Parse command line arguments
if (parse_sign_cmd_args(idx, arg, &sign_name, &id, &group, &prio,
@@ -1750,6 +1764,8 @@ sign_getinfo(sign_T *sp, dict_T *retdict)
dict_add_string(retdict, "icon", sp->sn_icon);
if (sp->sn_text != NULL)
dict_add_string(retdict, "text", sp->sn_text);
+ if (sp->sn_priority > 0)
+ dict_add_number(retdict, "priority", sp->sn_priority);
if (sp->sn_line_hl > 0)
{
p = get_highlight_name_ext(NULL, sp->sn_line_hl - 1, FALSE);
@@ -1913,6 +1929,7 @@ sign_gui_started(void)
sign_list_defined(sign_T *sp)
{
char_u *p;
+ char lbuf[MSG_BUF_LEN];
smsg("sign %s", sp->sn_name);
if (sp->sn_icon != NULL)
@@ -1931,6 +1948,11 @@ sign_list_defined(sign_T *sp)
msg_puts(" text=");
msg_outtrans(sp->sn_text);
}
+ if (sp->sn_priority > 0)
+ {
+ vim_snprintf(lbuf, MSG_BUF_LEN, " priority=%d", sp->sn_priority);
+ msg_puts(lbuf);
+ }
if (sp->sn_line_hl > 0)
{
msg_puts(" linehl=");
@@ -2088,7 +2110,8 @@ get_sign_name(expand_T *xp UNUSED, int idx)
{
char *define_arg[] =
{
- "culhl=", "icon=", "linehl=", "numhl=", "text=", "texthl=", NULL
+ "culhl=", "icon=", "linehl=", "numhl=", "text=", "texthl=", "priority=",
+ NULL
};
return (char_u *)define_arg[idx];
}
@@ -2261,6 +2284,7 @@ sign_define_from_dict(char_u *name_arg, dict_T *dict)
char_u *texthl = NULL;
char_u *culhl = NULL;
char_u *numhl = NULL;
+ int prio = -1;
int retval = -1;
if (name_arg == NULL)
@@ -2281,9 +2305,10 @@ sign_define_from_dict(char_u *name_arg, dict_T *dict)
texthl = dict_get_string(dict, "texthl", TRUE);
culhl = dict_get_string(dict, "culhl", TRUE);
numhl = dict_get_string(dict, "numhl", TRUE);
+ prio = dict_get_number_def(dict, "priority", -1);
}
- if (sign_define_by_name(name, icon, linehl, text, texthl, culhl, numhl) == OK)
+ if (sign_define_by_name(name, icon, linehl, text, texthl, culhl, numhl, prio) == OK)
retval = 0;
cleanup:
@@ -2511,7 +2536,7 @@ sign_place_from_dict(
buf_T *buf = NULL;
dictitem_T *di;
linenr_T lnum = 0;
- int prio = SIGN_DEF_PRIO;
+ int prio = -1;
int notanum = FALSE;
int ret_sign_id = -1;
diff --git a/src/spellfile.c b/src/spellfile.c
index 51261ab..0b9536d 100644
--- a/src/spellfile.c
+++ b/src/spellfile.c
@@ -6434,7 +6434,13 @@ init_spellfile(void)
l = (int)STRLEN(buf);
vim_snprintf((char *)buf + l, MAXPATHL - l, "/spell");
if (filewritable(buf) != 2)
- vim_mkdir(buf, 0755);
+ {
+ if (vim_mkdir(buf, 0755) != 0)
+ {
+ vim_free(buf);
+ return;
+ }
+ }
l = (int)STRLEN(buf);
vim_snprintf((char *)buf + l, MAXPATHL - l,
diff --git a/src/strings.c b/src/strings.c
index 6b2ff0a..b8ea00b 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1037,7 +1037,7 @@ string_reduce(
* Implementation of "byteidx()" and "byteidxcomp()" functions
*/
static void
-byteidx_common(typval_T *argvars, typval_T *rettv, int comp UNUSED)
+byteidx_common(typval_T *argvars, typval_T *rettv, int comp)
{
rettv->vval.v_number = -1;
@@ -2497,7 +2497,8 @@ format_overflow_error(const char *pstart)
get_unsigned_int(
const char *pstart,
const char **p,
- unsigned int *uj)
+ unsigned int *uj,
+ int overflow_err)
{
*uj = **p - '0';
++*p;
@@ -2510,8 +2511,13 @@ get_unsigned_int(
if (*uj > MAX_ALLOWED_STRING_WIDTH)
{
- format_overflow_error(pstart);
- return FAIL;
+ if (overflow_err)
+ {
+ format_overflow_error(pstart);
+ return FAIL;
+ }
+ else
+ *uj = MAX_ALLOWED_STRING_WIDTH;
}
return OK;
@@ -2584,7 +2590,7 @@ parse_fmt_types(
// Positional argument
unsigned int uj;
- if (get_unsigned_int(pstart, &p, &uj) == FAIL)
+ if (get_unsigned_int(pstart, &p, &uj, tvs != NULL) == FAIL)
goto error;
pos_arg = uj;
@@ -2625,7 +2631,7 @@ parse_fmt_types(
// Positional argument field width
unsigned int uj;
- if (get_unsigned_int(arg + 1, &p, &uj) == FAIL)
+ if (get_unsigned_int(arg + 1, &p, &uj, tvs != NULL) == FAIL)
goto error;
if (*p != '$')
@@ -2656,7 +2662,7 @@ parse_fmt_types(
const char *digstart = p;
unsigned int uj;
- if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+ if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
goto error;
if (*p == '$')
@@ -2680,7 +2686,7 @@ parse_fmt_types(
// Parse precision
unsigned int uj;
- if (get_unsigned_int(arg + 1, &p, &uj) == FAIL)
+ if (get_unsigned_int(arg + 1, &p, &uj, tvs != NULL) == FAIL)
goto error;
if (*p == '$')
@@ -2712,7 +2718,7 @@ parse_fmt_types(
const char *digstart = p;
unsigned int uj;
- if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+ if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
goto error;
if (*p == '$')
@@ -3025,7 +3031,7 @@ vim_vsnprintf_typval(
const char *digstart = p;
unsigned int uj;
- if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+ if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
goto error;
pos_arg = uj;
@@ -3067,7 +3073,7 @@ vim_vsnprintf_typval(
// Positional argument field width
unsigned int uj;
- if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+ if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
goto error;
arg_idx = uj;
@@ -3085,8 +3091,13 @@ vim_vsnprintf_typval(
if (j > MAX_ALLOWED_STRING_WIDTH)
{
- format_overflow_error(digstart);
- goto error;
+ if (tvs != NULL)
+ {
+ format_overflow_error(digstart);
+ goto error;
+ }
+ else
+ j = MAX_ALLOWED_STRING_WIDTH;
}
if (j >= 0)
@@ -3104,14 +3115,8 @@ vim_vsnprintf_typval(
const char *digstart = p;
unsigned int uj;
- if (get_unsigned_int(digstart, &p, &uj) == FAIL)
- goto error;
-
- if (uj > MAX_ALLOWED_STRING_WIDTH)
- {
- format_overflow_error(digstart);
+ if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
goto error;
- }
min_field_width = uj;
}
@@ -3129,15 +3134,9 @@ vim_vsnprintf_typval(
const char *digstart = p;
unsigned int uj;
- if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+ if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
goto error;
- if (uj > MAX_ALLOWED_STRING_WIDTH)
- {
- format_overflow_error(digstart);
- goto error;
- }
-
precision = uj;
}
else if (*p == '*')
@@ -3152,7 +3151,7 @@ vim_vsnprintf_typval(
// positional argument
unsigned int uj;
- if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+ if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
goto error;
arg_idx = uj;
@@ -3170,8 +3169,13 @@ vim_vsnprintf_typval(
if (j > MAX_ALLOWED_STRING_WIDTH)
{
- format_overflow_error(digstart);
- goto error;
+ if (tvs != NULL)
+ {
+ format_overflow_error(digstart);
+ goto error;
+ }
+ else
+ j = MAX_ALLOWED_STRING_WIDTH;
}
if (j >= 0)
diff --git a/src/structs.h b/src/structs.h
index 7e21f0f..79f415d 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1309,6 +1309,9 @@ typedef struct mapblock mapblock_T;
struct mapblock
{
mapblock_T *m_next; // next mapblock in list
+ mapblock_T *m_alt; // pointer to mapblock of the same mapping
+ // with an alternative form of m_keys, or NULL
+ // if there is no such mapblock
char_u *m_keys; // mapped from, lhs
char_u *m_str; // mapped to, rhs
char_u *m_orig_str; // rhs as entered by the user
@@ -3782,8 +3785,7 @@ struct window_S
synblock_T *w_s; // for :ownsyntax
#endif
- int w_closing; // window is being closed, don't let
- // autocommands close it too.
+ int w_locked; // don't let autocommands close the window
frame_T *w_frame; // frame containing this window
@@ -4466,12 +4468,14 @@ typedef struct
*/
typedef struct
{
- char_u *pum_text; // main menu text
- char_u *pum_kind; // extra kind text (may be truncated)
- char_u *pum_extra; // extra menu text (may be truncated)
- char_u *pum_info; // extra info
- int pum_score; // fuzzy match score
- int pum_idx; // index of item before sorting by score
+ char_u *pum_text; // main menu text
+ char_u *pum_kind; // extra kind text (may be truncated)
+ char_u *pum_extra; // extra menu text (may be truncated)
+ char_u *pum_info; // extra info
+ int pum_score; // fuzzy match score
+ int pum_idx; // index of item before sorting by score
+ int pum_user_hlattr; // highlight attribute to combine with
+ int pum_user_kind_hlattr; // highlight attribute for kind
} pumitem_T;
/*
@@ -4902,7 +4906,8 @@ typedef enum {
WT_MEMBER,
WT_METHOD, // object method
WT_METHOD_ARG, // object method argument type
- WT_METHOD_RETURN // object method return type
+ WT_METHOD_RETURN, // object method return type
+ WT_CAST, // type cast
} wherekind_T;
// Struct used to pass the location of a type check. Used in error messages to
diff --git a/src/syntax.c b/src/syntax.c
index 48e7152..eec5799 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -15,8 +15,6 @@
#if defined(FEAT_SYN_HL) || defined(PROTO)
-#define SYN_NAMELEN 50 // maximum length of a syntax name
-
// different types of offsets that are possible
#define SPO_MS_OFF 0 // match start offset
#define SPO_ME_OFF 1 // match end offset
@@ -323,6 +321,7 @@ static void limit_pos_zero(lpos_T *pos, lpos_T *limit);
static void syn_add_end_off(lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra);
static void syn_add_start_off(lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra);
static char_u *syn_getcurline(void);
+static colnr_T syn_getcurline_len(void);
static int syn_regexec(regmmatch_T *rmp, linenr_T lnum, colnr_T col, syn_time_T *st);
static int check_keyword_id(char_u *line, int startcol, int *endcol, long *flags, short **next_list, stateitem_T *cur_si, int *ccharp);
static void syn_remove_pattern(synblock_T *block, int idx);
@@ -2692,7 +2691,7 @@ update_si_end(
// a "oneline" never continues in the next line
sip->si_ends = TRUE;
sip->si_m_endpos.lnum = current_lnum;
- sip->si_m_endpos.col = (colnr_T)STRLEN(syn_getcurline());
+ sip->si_m_endpos.col = syn_getcurline_len();
}
else
{
@@ -3130,6 +3129,15 @@ syn_getcurline(void)
}
/*
+ * Get length of current line in syntax buffer.
+ */
+ static colnr_T
+syn_getcurline_len(void)
+{
+ return ml_get_buf_len(syn_buf, current_lnum);
+}
+
+/*
* Call vim_regexec() to find a match with "rmp" in "syn_buf".
* Returns TRUE when there is a match.
*/
@@ -3935,13 +3943,7 @@ syn_match_msg(void)
static int last_matchgroup;
-struct name_list
-{
- int flag;
- char *name;
-};
-
-static void syn_list_flags(struct name_list *nl, int flags, int attr);
+static void syn_list_flags(keyvalue_T *nlist, int nr_entries, int flags, int attr);
/*
* List one syntax item, for ":syntax" or "syntax list syntax_name".
@@ -3956,28 +3958,27 @@ syn_list_one(
int idx;
int did_header = FALSE;
synpat_T *spp;
- static struct name_list namelist1[] =
+ static keyvalue_T namelist1[] =
{
- {HL_DISPLAY, "display"},
- {HL_CONTAINED, "contained"},
- {HL_ONELINE, "oneline"},
- {HL_KEEPEND, "keepend"},
- {HL_EXTEND, "extend"},
- {HL_EXCLUDENL, "excludenl"},
- {HL_TRANSP, "transparent"},
- {HL_FOLD, "fold"},
+ KEYVALUE_ENTRY(HL_DISPLAY, "display"),
+ KEYVALUE_ENTRY(HL_CONTAINED, "contained"),
+ KEYVALUE_ENTRY(HL_ONELINE, "oneline"),
+ KEYVALUE_ENTRY(HL_KEEPEND, "keepend"),
+ KEYVALUE_ENTRY(HL_EXTEND, "extend"),
+ KEYVALUE_ENTRY(HL_EXCLUDENL, "excludenl"),
+ KEYVALUE_ENTRY(HL_TRANSP, "transparent"),
+ KEYVALUE_ENTRY(HL_FOLD, "fold")
#ifdef FEAT_CONCEAL
- {HL_CONCEAL, "conceal"},
- {HL_CONCEALENDS, "concealends"},
+ ,
+ KEYVALUE_ENTRY(HL_CONCEAL, "conceal"),
+ KEYVALUE_ENTRY(HL_CONCEALENDS, "concealends")
#endif
- {0, NULL}
};
- static struct name_list namelist2[] =
+ static keyvalue_T namelist2[] =
{
- {HL_SKIPWHITE, "skipwhite"},
- {HL_SKIPNL, "skipnl"},
- {HL_SKIPEMPTY, "skipempty"},
- {0, NULL}
+ KEYVALUE_ENTRY(HL_SKIPWHITE, "skipwhite"),
+ KEYVALUE_ENTRY(HL_SKIPNL, "skipnl"),
+ KEYVALUE_ENTRY(HL_SKIPEMPTY, "skipempty")
};
attr = HL_ATTR(HLF_D); // highlight like directories
@@ -4017,7 +4018,7 @@ syn_list_one(
--idx;
msg_putchar(' ');
}
- syn_list_flags(namelist1, spp->sp_flags, attr);
+ syn_list_flags(namelist1, (int)ARRAY_LENGTH(namelist1), spp->sp_flags, attr);
if (spp->sp_cont_list != NULL)
put_id_list((char_u *)"contains", spp->sp_cont_list, attr);
@@ -4029,7 +4030,7 @@ syn_list_one(
if (spp->sp_next_list != NULL)
{
put_id_list((char_u *)"nextgroup", spp->sp_next_list, attr);
- syn_list_flags(namelist2, spp->sp_flags, attr);
+ syn_list_flags(namelist2, (int)ARRAY_LENGTH(namelist2), spp->sp_flags, attr);
}
if (spp->sp_flags & (HL_SYNC_HERE|HL_SYNC_THERE))
{
@@ -4058,14 +4059,14 @@ syn_list_one(
}
static void
-syn_list_flags(struct name_list *nlist, int flags, int attr)
+syn_list_flags(keyvalue_T *nlist, int nr_entries, int flags, int attr)
{
int i;
- for (i = 0; nlist[i].flag != 0; ++i)
- if (flags & nlist[i].flag)
+ for (i = 0; i < nr_entries; ++i)
+ if (flags & nlist[i].key)
{
- msg_puts_attr(nlist[i].name, attr);
+ msg_puts_attr(nlist[i].value, attr);
msg_putchar(' ');
}
}
@@ -4084,8 +4085,8 @@ syn_list_cluster(int id)
if (msg_col >= endcol) // output at least one space
endcol = msg_col + 1;
- if (Columns <= endcol) // avoid hang for tiny window
- endcol = Columns - 1;
+ if (Columns <= (long)endcol) // avoid hang for tiny window
+ endcol = (int)(Columns - 1);
msg_advance(endcol);
if (SYN_CLSTR(curwin->w_s)[id].scl_list != NULL)
@@ -4393,6 +4394,7 @@ clear_keywtab(hashtab_T *ht)
static void
add_keyword(
char_u *name, // name of keyword
+ size_t namelen, // length of keyword (excluding the NUL)
int id, // group ID for this keyword
int flags, // flags for this keyword
short *cont_in_list, // containedin for this keyword
@@ -4403,15 +4405,22 @@ add_keyword(
hashtab_T *ht;
hashitem_T *hi;
char_u *name_ic;
+ size_t name_iclen;
long_u hash;
char_u name_folded[MAXKEYWLEN + 1];
if (curwin->w_s->b_syn_ic)
- name_ic = str_foldcase(name, (int)STRLEN(name),
+ {
+ name_ic = str_foldcase(name, (int)namelen,
name_folded, MAXKEYWLEN + 1);
+ name_iclen = STRLEN(name_ic);
+ }
else
+ {
name_ic = name;
- kp = alloc(offsetof(keyentry_T, keyword) + STRLEN(name_ic) + 1);
+ name_iclen = namelen;
+ }
+ kp = alloc(offsetof(keyentry_T, keyword) + name_iclen + 1);
if (kp == NULL)
return;
STRCPY(kp->keyword, name_ic);
@@ -4828,19 +4837,26 @@ syn_cmd_keyword(exarg_T *eap, int syncing UNUSED)
if (!eap->skip)
{
+ size_t kwlen = 0;
+
// Adjust flags for use of ":syn include".
syn_incl_toplevel(syn_id, &syn_opt_arg.flags);
/*
* 2: Add an entry for each keyword.
*/
- for (kw = keyword_copy; --cnt >= 0; kw += STRLEN(kw) + 1)
+ for (kw = keyword_copy; --cnt >= 0; kw += kwlen + 1)
{
for (p = vim_strchr(kw, '['); ; )
{
- if (p != NULL)
+ if (p == NULL)
+ kwlen = STRLEN(kw);
+ else
+ {
*p = NUL;
- add_keyword(kw, syn_id, syn_opt_arg.flags,
+ kwlen = (size_t)(p - kw);
+ }
+ add_keyword(kw, kwlen, syn_id, syn_opt_arg.flags,
syn_opt_arg.cont_in_list,
syn_opt_arg.next_list, conceal_char);
if (p == NULL)
@@ -4859,6 +4875,7 @@ syn_cmd_keyword(exarg_T *eap, int syncing UNUSED)
goto error;
}
kw = p + 1; // skip over the "]"
+ kwlen = 1;
break;
}
if (has_mbyte)
@@ -6229,8 +6246,7 @@ static struct subcommand subcommands[] =
{"reset", syn_cmd_reset},
{"spell", syn_cmd_spell},
{"sync", syn_cmd_sync},
- {"", syn_cmd_list},
- {NULL, NULL}
+ {"", syn_cmd_list}
};
/*
@@ -6257,13 +6273,8 @@ ex_syntax(exarg_T *eap)
if (eap->skip) // skip error messages for all subcommands
++emsg_skip;
- for (i = 0; ; ++i)
+ for (i = 0; i < (int)ARRAY_LENGTH(subcommands); ++i)
{
- if (subcommands[i].name == NULL)
- {
- semsg(_(e_invalid_syntax_subcommand_str), subcmd_name);
- break;
- }
if (STRCMP(subcmd_name, (char_u *)subcommands[i].name) == 0)
{
eap->arg = skipwhite(subcmd_end);
@@ -6271,6 +6282,10 @@ ex_syntax(exarg_T *eap)
break;
}
}
+
+ if (i == (int)ARRAY_LENGTH(subcommands))
+ semsg(_(e_invalid_syntax_subcommand_str), subcmd_name);
+
vim_free(subcmd_name);
if (eap->skip)
--emsg_skip;
@@ -6424,6 +6439,8 @@ get_syntax_name(expand_T *xp, int idx)
switch (expand_what)
{
case EXP_SUBCMD:
+ if (idx < 0 || idx >= (int)ARRAY_LENGTH(subcommands))
+ return NULL;
return (char_u *)subcommands[idx].name;
case EXP_CASE:
{
@@ -6697,6 +6714,7 @@ syntime_report(void)
proftime_T tm;
# endif
int len;
+ int patlen;
proftime_T total_total;
int total_count = 0;
garray_T ga;
@@ -6768,8 +6786,9 @@ syntime_report(void)
len = 20; // will wrap anyway
else
len = Columns - 70;
- if (len > (int)STRLEN(p->pattern))
- len = (int)STRLEN(p->pattern);
+ patlen = (int)STRLEN(p->pattern);
+ if (len > patlen)
+ len = patlen;
msg_outtrans_len(p->pattern, len);
msg_puts("\n");
}
diff --git a/src/tag.c b/src/tag.c
index d406fde..f94d3eb 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -144,7 +144,6 @@ static void print_tag_list(int new_tag, int use_tagstack, int num_matches, char_
#if defined(FEAT_QUICKFIX) && defined(FEAT_EVAL)
static int add_llist_tags(char_u *tag, int num_matches, char_u **matches);
#endif
-static void tagstack_clear_entry(taggy_T *item);
static char_u *tagmatchname = NULL; // name of last used tag
@@ -311,7 +310,7 @@ do_tag(
#endif
if (postponed_split == 0 && !check_can_set_curbuf_forceit(forceit))
- return FALSE;
+ return FALSE;
if (type == DT_HELP)
{
@@ -3413,6 +3412,11 @@ get_tagfname(
// move the filename one char forward and truncate the
// filepath with a NUL
filename = gettail(buf);
+ if (r_ptr != NULL)
+ {
+ STRMOVE(r_ptr + 1, r_ptr);
+ ++r_ptr;
+ }
STRMOVE(filename + 1, filename);
*filename++ = NUL;
@@ -3709,7 +3713,7 @@ jumpto_tag(
char_u *lbuf;
if (postponed_split == 0 && !check_can_set_curbuf_forceit(forceit))
- return FAIL;
+ return FAIL;
// Make a copy of the line, it can become invalid when an autocommand calls
// back here recursively.
@@ -4233,7 +4237,7 @@ find_extra(char_u **pp)
/*
* Free a single entry in a tag stack
*/
- static void
+ void
tagstack_clear_entry(taggy_T *item)
{
VIM_CLEAR(item->tagname);
diff --git a/src/terminal.c b/src/terminal.c
index 648fc78..073f8dd 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -3451,6 +3451,10 @@ limit_scrollback(term_T *term, garray_T *gap, int update_buffer)
sizeof(sb_line_T) * gap->ga_len);
if (update_buffer)
term->tl_scrollback_scrolled -= todo;
+
+ // make sure cursor is on a valid line
+ if (curbuf == term->tl_buffer)
+ check_cursor();
}
/*
@@ -3643,7 +3647,7 @@ term_after_channel_closed(term_T *term)
if (term->tl_finish == TL_FINISH_CLOSE)
{
aco_save_T aco;
- int do_set_w_closing = term->tl_buffer->b_nwindows == 0;
+ int do_set_w_locked = term->tl_buffer->b_nwindows == 0;
#ifdef FEAT_PROP_POPUP
win_T *pwin = NULL;
@@ -3674,12 +3678,12 @@ term_after_channel_closed(term_T *term)
{
// Avoid closing the window if we temporarily use it.
if (is_aucmd_win(curwin))
- do_set_w_closing = TRUE;
- if (do_set_w_closing)
- curwin->w_closing = TRUE;
+ do_set_w_locked = TRUE;
+ if (do_set_w_locked)
+ curwin->w_locked = TRUE;
do_bufdel(DOBUF_WIPE, (char_u *)"", 1, fnum, fnum, FALSE);
- if (do_set_w_closing)
- curwin->w_closing = FALSE;
+ if (do_set_w_locked)
+ curwin->w_locked = FALSE;
aucmd_restbuf(&aco);
}
#ifdef FEAT_PROP_POPUP
@@ -6299,7 +6303,7 @@ f_term_getsize(typval_T *argvars, typval_T *rettv)
* "term_setsize(buf, rows, cols)" function
*/
void
-f_term_setsize(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
+f_term_setsize(typval_T *argvars, typval_T *rettv UNUSED)
{
buf_T *buf;
term_T *term;
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index e31d2b5..67ef641 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -20,7 +20,8 @@ SCRIPTS_TINY = \
test24 \
test25 \
test26 \
- test27
+ test27 \
+ test28
SCRIPTS_TINY_OUT = \
test10.out \
@@ -31,7 +32,8 @@ SCRIPTS_TINY_OUT = \
test24.out \
test25.out \
test26.out \
- test27.out
+ test27.out \
+ test28.out
# Tests for Vim9 script.
TEST_VIM9 = \
@@ -161,6 +163,10 @@ NEW_TESTS = \
test_function_lists \
test_ga \
test_getcwd \
+ test_gettext \
+ test_gettext_cp1251 \
+ test_gettext_utf8 \
+ test_gettext_make \
test_getvar \
test_gf \
test_glob2regpat \
@@ -309,6 +315,7 @@ NEW_TESTS = \
test_textobjects \
test_textprop \
test_timers \
+ test_tohtml \
test_true_false \
test_trycatch \
test_undo \
@@ -335,6 +342,7 @@ NEW_TESTS = \
test_writefile \
test_xdg \
test_xxd \
+ test_zip_plugin \
test_alot_latin \
test_alot_utf8 \
test_alot
@@ -420,6 +428,10 @@ NEW_TESTS_RES = \
test_functions.res \
test_function_lists.res \
test_getcwd.res \
+ test_gettext.res \
+ test_gettext_cp1251.res \
+ test_gettext_utf8.res \
+ test_gettext_make.res \
test_getvar.res \
test_gf.res \
test_gn.res \
@@ -550,6 +562,7 @@ NEW_TESTS_RES = \
test_textobjects.res \
test_textprop.res \
test_timers.res \
+ test_tohtml.res \
test_true_false.res \
test_trycatch.res \
test_undo.res \
@@ -571,6 +584,7 @@ NEW_TESTS_RES = \
test_writefile.res \
test_xdg.res \
test_xxd.res \
+ test_zip_plugin.res \
test_alot_latin.res \
test_alot_utf8.res \
test_alot.res
diff --git a/src/testdir/Make_mvc.mak b/src/testdir/Make_mvc.mak
index 318cd4a..1bf9eae 100644
--- a/src/testdir/Make_mvc.mak
+++ b/src/testdir/Make_mvc.mak
@@ -5,9 +5,9 @@
# Testing may be done with a debug build
!IF EXIST(..\\vimd.exe) && !EXIST(..\\vim.exe)
-VIMPROG = ..\\vimd
+VIMPROG = ..\\vimd.exe
!ELSE
-VIMPROG = ..\\vim
+VIMPROG = ..\\vim.exe
!ENDIF
@@ -42,7 +42,7 @@ report:
else ( echo No failures reported > test_result.log )
$(VIMPROG) -u NONE $(COMMON_ARGS) -S summarize.vim messages
-if exist starttime del starttime
- @echo.
+ @echo:
@echo Test results:
@cmd /c type test_result.log
@if exist test.log ( echo TEST FAILURE & exit /b 1 ) \
@@ -56,7 +56,7 @@ $(NEW_TESTS):
-if exist test.log del test.log
-if exist messages del messages
-if exist starttime del starttime
- @$(MAKE) -nologo -f Make_mvc.mak $@.res VIMPROG=$(VIMPROG)
+ @$(MAKE) -nologo -f Make_mvc.mak VIMPROG=$(VIMPROG) $@.res
@type messages
@if exist test.log exit 1
diff --git a/src/testdir/Makefile b/src/testdir/Makefile
index 4e476f9..7a4c4c4 100644
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -84,7 +84,7 @@ test_vim9:
RM_ON_RUN = test.out X* viminfo
RM_ON_START = test.ok benchmark.out
-RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE) $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim $(NO_INITS) -s dotest.in
+RUN_VIMPROG = VIMRUNTIME=$(SCRIPTSOURCE) $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim $(NO_INITS) -s dotest.in
# Delete files that may interfere with running tests. This includes some files
# that may result from working on the tests, not only from running them.
@@ -114,7 +114,7 @@ tinytests: $(SCRIPTS_TINY_OUT)
@# 200 msec is sufficient, but only modern sleep supports a fraction of
@# a second, fall back to a second if it fails.
@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
- $(RUN_VIM) $*.in $(REDIR_TEST_TO_NULL)
+ $(RUN_VIMPROG) $*.in $(REDIR_TEST_TO_NULL)
@# Check if the test.out file matches test.ok.
@/bin/sh -c "if test -f test.out; then \
diff --git a/src/testdir/README.txt b/src/testdir/README.txt
index f72bdbf..203c324 100644
--- a/src/testdir/README.txt
+++ b/src/testdir/README.txt
@@ -97,8 +97,7 @@ tests are successful, then this file will be an empty file.
- To execute only specific test functions, add a second argument:
- $ ../vim -u NONE -S runtest.vim test_channel.vim open_delay
-
+ $ ../vim -u NONE -S runtest.vim test_channel.vim open_delay
- To run all the tests:
@@ -119,3 +118,83 @@ tests are successful, then this file will be an empty file.
- To cleanup the temporary files after running the tests:
$ make clean
+
+
+VIEWING GENERATED SCREENDUMPS (local):
+
+You may also wish to look at the whole batch of failed screendumps after
+running "make". Source the "viewdumps.vim" script for this task:
+
+ $ ../vim -u NONE -S viewdumps.vim \
+ [dumps/Test_xxd_*.dump ...]
+
+By default, all screendumps found in the "failed" directory will be added to
+the argument list and then the first one will be loaded. Loaded screendumps
+that bear filenames of screendumps found in the "dumps" directory will be
+rendering the contents of any such pair of files and the difference between
+them (:help term_dumpdiff()); otherwise, they will be rendering own contents
+(:help term_dumpload()). Remember to execute :edit when occasionally you see
+raw file contents instead of rendered.
+
+At any time, you can add, list, and abandon other screendumps:
+
+ :$argedit dumps/Test_spell_*.dump
+ :args
+ :qall
+
+The listing of argument commands can be found under :help buffer-list.
+
+
+VIEWING GENERATED SCREENDUMPS (from a CI-uploaded artifact):
+
+After you have downloaded an artifact archive containing failed screendumps
+and extracted its files in a temporary directory, you need to set up a "dumps"
+directory by creating a symlink:
+
+ $ cd /path/to/fork
+ $ ln -s $(pwd)/src/testdir/dumps /tmp/src/testdir/dumps
+
+You can now examine the extracted screendumps:
+
+ $ ./src/vim -u NONE -S src/testdir/viewdumps.vim \
+ /tmp/src/testdir/failed/*.dump
+
+
+VIEWING GENERATED SCREENDUMPS (submitted for a pull request):
+
+First, you need to check out the topic branch with the proposed changes and
+write down a difference list between the HEAD commit (index) and its parent
+commit with respect to the changed "dumps" filenames:
+
+ $ cd /path/to/fork
+ $ git switch prs/1234
+ $ git diff-index --relative=src/testdir/dumps/ \
+ --name-only prs/1234~1 > /tmp/filelist
+
+Then, you need to check out the master branch, change the current working
+directory to reconcile relative filepaths written in the filenames list,
+possibly create an empty "failed" directory, copy in this directory the old
+"dumps" files, whose names are on the same list, and follow it by checking out
+the topic branch:
+
+ $ git switch master
+ $ cd src/testdir/dumps
+ $ test -d ../failed || mkdir ../failed
+ $ cp -t ../failed $(cat /tmp/filelist)
+ $ git switch prs/1234
+
+Make note of any missing new screendumps. Please remember about the
+introduced INVERTED relation between "dumps" and "failed", i.e. the files to
+be committed are in "dumps" already and their old versions are in "failed".
+Therefore, you need to copy the missing new screendumps from "dumps" to
+"failed":
+
+ $ cp -t ../failed foo_10.dump foo_11.dump foo_12.dump
+
+After you have changed the current working directory to its parent directory,
+you can now examine the screendumps from the "failed" directory (note that new
+screendumps will be shown with no difference between their versions):
+
+ $ cd ..
+ $ ../vim -u NONE -S viewdumps.vim
+
diff --git a/src/testdir/commondumps.vim b/src/testdir/commondumps.vim
new file mode 100644
index 0000000..ed70280
--- /dev/null
+++ b/src/testdir/commondumps.vim
@@ -0,0 +1,76 @@
+vim9script
+
+# (Script-local.)
+#
+# Render a loaded screendump file or the difference of a loaded screendump
+# file and its namesake file from the "dumps" directory.
+def Render()
+ const failed_fname: string = bufname()
+ try
+ setlocal suffixesadd=.dump
+ const dumps_fname: string = findfile(
+ fnamemodify(failed_fname, ':p:t'),
+ fnamemodify(failed_fname, ':p:h:h') .. '/dumps')
+ if filereadable(dumps_fname)
+ term_dumpdiff(failed_fname, dumps_fname)
+ else
+ term_dumpload(failed_fname)
+ endif
+ finally
+ exec 'bwipeout ' .. failed_fname
+ endtry
+enddef
+
+# Search for the "failed" directory in the passed _subtreedirname_ directories
+# (usually "\<src\>" or "\<syntax\>") and, if found, select its passed _count_
+# occurence, add all its "*.dump" files to the argument list and list them;
+# also define a BufRead autocommand that would invoke "Render()" for every
+# "*.dump" file.
+def g:Init(subtreedirname: string, count: number)
+ # Support sourcing this script from any directory in the direct path that
+ # leads to the project's root directory.
+ const failed_path: string = finddir('failed', getcwd() .. '/**', -1)
+ ->filter(((cwdpath: string, parentdirname: string) =>
+ (_: number, dirpath: string) =>
+ cwdpath =~ parentdirname || dirpath =~ parentdirname)(
+ getcwd(),
+ subtreedirname))
+ ->get(count, '') .. '/'
+ var error: string = null_string
+
+ if failed_path == '/'
+ error = 'No such directory: "failed"'
+ else
+ const failed_fnames: string = failed_path .. readdir(failed_path,
+ (fname: string) => fname =~ '^.\+\.dump$')
+ ->join(' ' .. failed_path)
+
+ if failed_fnames =~ 'failed/$'
+ error = 'No such file: "*.dump"'
+ else
+ exec ':0argedit ' .. failed_fnames
+ buffers
+ endif
+ endif
+
+ autocmd_add([{
+ replace: true,
+ group: 'viewdumps',
+ event: 'BufRead',
+ pattern: '*.dump',
+ cmd: 'Render()',
+ }])
+
+ # Unconditionally help, in case a list of filenames is passed to the
+ # command, the first terminal window with its BufRead event.
+ silent doautocmd viewdumps BufRead
+
+ if error != null_string
+ # Instead of sleeping, fill half a window with blanks and prompt
+ # hit-enter.
+ echom error .. repeat("\x20",
+ (winwidth(0) * (winheight(0) / 2) - strlen(error)))
+ endif
+enddef
+
+# vim:fdm=syntax:sw=2:ts=8:noet:nolist:nosta:
diff --git a/src/testdir/crash/dialog_changed_uaf b/src/testdir/crash/dialog_changed_uaf
new file mode 100644
index 0000000..e37d18d
--- /dev/null
+++ b/src/testdir/crash/dialog_changed_uaf
Binary files differ
diff --git a/src/testdir/crash/double_free b/src/testdir/crash/double_free
new file mode 100644
index 0000000..895c4a0
--- /dev/null
+++ b/src/testdir/crash/double_free
Binary files differ
diff --git a/src/testdir/crash/heap_overflow3 b/src/testdir/crash/heap_overflow3
new file mode 100644
index 0000000..c40adbe
--- /dev/null
+++ b/src/testdir/crash/heap_overflow3
Binary files differ
diff --git a/src/testdir/crash/nullpointer b/src/testdir/crash/nullpointer
new file mode 100644
index 0000000..c8ff3a4
--- /dev/null
+++ b/src/testdir/crash/nullpointer
Binary files differ
diff --git a/src/testdir/crash/reverse_text_overflow b/src/testdir/crash/reverse_text_overflow
new file mode 100644
index 0000000..dfbfe2c
--- /dev/null
+++ b/src/testdir/crash/reverse_text_overflow
Binary files differ
diff --git a/src/testdir/dumps/Test_breakindent_with_double_width_wrap_1.dump b/src/testdir/dumps/Test_breakindent_with_double_width_wrap_1.dump
new file mode 100644
index 0000000..7b761bc
--- /dev/null
+++ b/src/testdir/dumps/Test_breakindent_with_double_width_wrap_1.dump
@@ -0,0 +1,6 @@
+| +0&#ffffff0@7|a@40|>+0#4040ff13&
+| +0#0000000&@7>å£*&@2| +&@35
+|~+0#4040ff13&| @48
+|~| @48
+|~| @48
+| +0#0000000&@31|1|,|4|3|-|5|9| @6|A|l@1|
diff --git a/src/testdir/dumps/Test_cmdwin_no_terminal.dump b/src/testdir/dumps/Test_cmdwin_no_terminal.dump
index 97d8147..6de9879 100644
--- a/src/testdir/dumps/Test_cmdwin_no_terminal.dump
+++ b/src/testdir/dumps/Test_cmdwin_no_terminal.dump
@@ -1,6 +1,6 @@
| +0&#ffffff0@74
|[+1&&|N|o| |N|a|m|e|]| @47|0|,|0|-|1| @9|A|l@1
-|:+0#4040ff13&|s+0#af5f00255&|e|t| +0#0000000&|c+0#e000e06&|m|d|h|e|i|g|h|t|=+0#0000000&|2| @58
+|:+0#4040ff13&|s+0#af5f00255&|e|t| +0#0000000&|c+0#e000e06&|m|d|h|e|i|g|h|t|=+0#af5f00255&|2+0#0000000&| @58
|:+0#4040ff13&> +0#0000000&@73
|~+0#4040ff13&| @73
|~| @73
diff --git a/src/testdir/dumps/Test_matchparen_mbyte_1.dump b/src/testdir/dumps/Test_matchparen_mbyte_1.dump
new file mode 100644
index 0000000..f5df150
--- /dev/null
+++ b/src/testdir/dumps/Test_matchparen_mbyte_1.dump
@@ -0,0 +1,10 @@
+>a+0&#ffffff0@7|(*&| +&@64
+|b@3|)*&|c+&@1| @66
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|1| @10|A|l@1|
diff --git a/src/testdir/dumps/Test_matchparen_mbyte_2.dump b/src/testdir/dumps/Test_matchparen_mbyte_2.dump
new file mode 100644
index 0000000..0e4e6e8
--- /dev/null
+++ b/src/testdir/dumps/Test_matchparen_mbyte_2.dump
@@ -0,0 +1,10 @@
+|a+0&#ffffff0@7>(*0&#40ffff15| +0&#ffffff0@64
+|b@3|)*0&#40ffff15|c+0&#ffffff0@1| @66
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|9| @10|A|l@1|
diff --git a/src/testdir/dumps/Test_matchparen_mbyte_3.dump b/src/testdir/dumps/Test_matchparen_mbyte_3.dump
new file mode 100644
index 0000000..85c462a
--- /dev/null
+++ b/src/testdir/dumps/Test_matchparen_mbyte_3.dump
@@ -0,0 +1,10 @@
+|a+0&#ffffff0@7|(*&| +&@64
+|b@3|)*&|c+&>c| @66
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|,|9|-|8| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_matchparen_mbyte_4.dump b/src/testdir/dumps/Test_matchparen_mbyte_4.dump
new file mode 100644
index 0000000..45f5d08
--- /dev/null
+++ b/src/testdir/dumps/Test_matchparen_mbyte_4.dump
@@ -0,0 +1,10 @@
+|a+0&#ffffff0@7|(*0&#40ffff15| +0&#ffffff0@64
+|b@3>)*0&#40ffff15|c+0&#ffffff0@1| @66
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|,|5| @10|A|l@1|
diff --git a/src/testdir/dumps/Test_matchparen_mbyte_5.dump b/src/testdir/dumps/Test_matchparen_mbyte_5.dump
new file mode 100644
index 0000000..45c3bfa
--- /dev/null
+++ b/src/testdir/dumps/Test_matchparen_mbyte_5.dump
@@ -0,0 +1,10 @@
+|a+0&#ffffff0@7|(*&| +&@64
+>b@3|)*&|c+&@1| @66
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|,|1| @10|A|l@1|
diff --git a/src/testdir/dumps/Test_matchparen_mbyte_6.dump b/src/testdir/dumps/Test_matchparen_mbyte_6.dump
new file mode 100644
index 0000000..8064a98
--- /dev/null
+++ b/src/testdir/dumps/Test_matchparen_mbyte_6.dump
@@ -0,0 +1,10 @@
+|a+0&#ffffff0@7|(*0&#40ffff15> +0&#ffffff0@64
+|b@3|)*0&#40ffff15|c+0&#ffffff0@1| @66
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|1|2|-|1@1| @6|A|l@1|
diff --git a/src/testdir/dumps/Test_matchparen_mbyte_7.dump b/src/testdir/dumps/Test_matchparen_mbyte_7.dump
new file mode 100644
index 0000000..4d8c647
--- /dev/null
+++ b/src/testdir/dumps/Test_matchparen_mbyte_7.dump
@@ -0,0 +1,10 @@
+|a+0&#ffffff0@7|(*&| +&@64
+|b@3|)*&|c+&@1> @66
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|2|,|1|0|-|9| @7|A|l@1|
diff --git a/src/testdir/dumps/Test_matchparen_mbyte_8.dump b/src/testdir/dumps/Test_matchparen_mbyte_8.dump
new file mode 100644
index 0000000..c3699fd
--- /dev/null
+++ b/src/testdir/dumps/Test_matchparen_mbyte_8.dump
@@ -0,0 +1,10 @@
+|a+0&#ffffff0@7|(*0&#40ffff15| +0&#ffffff0@64
+|b@3|)*0&#40ffff15> +0&#ffffff0@68
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|2|,|8|-|7| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_popup_setbuf_01.dump b/src/testdir/dumps/Test_popup_setbuf_01.dump
new file mode 100644
index 0000000..14359ba
--- /dev/null
+++ b/src/testdir/dumps/Test_popup_setbuf_01.dump
@@ -0,0 +1,10 @@
+> +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @33|t+0#0000001#ffd7ff255|e|s|t| +0#4040ff13#ffffff0@35
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_popup_setbuf_02.dump b/src/testdir/dumps/Test_popup_setbuf_02.dump
new file mode 100644
index 0000000..5feb982
--- /dev/null
+++ b/src/testdir/dumps/Test_popup_setbuf_02.dump
@@ -0,0 +1,10 @@
+> +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @33|t+0#0000001#ffd7ff255|e|s|t| +0#4040ff13#ffffff0@35
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|:+0#0000000&|c|a|l@1| |p|o|p|u|p|_|s|e|t|b|u|f|(|p|,| |'|f|o@1|b|a|r|.|t|x|t|'|)| @21|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_popup_setbuf_03.dump b/src/testdir/dumps/Test_popup_setbuf_03.dump
new file mode 100644
index 0000000..2c49576
--- /dev/null
+++ b/src/testdir/dumps/Test_popup_setbuf_03.dump
@@ -0,0 +1,10 @@
+|~+0#4040ff13#ffffff0| @73
+|~| @73
+|~| @73
+|~| @33|t+0#0000001#ffd7ff255|e|s|t| +0#4040ff13#ffffff0@35
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|E+0#ffffff16#e000002|1|2@1|0|:| |S|t|r|i|n|g| |o|r| |N|u|m|b|e|r| |r|e|q|u|i|r|e|d| |f|o|r| |a|r|g|u|m|e|n|t| |2| +0#0000000#ffffff0@27
+|P+0#00e0003&|r|e|s@1| |E|N|T|E|R| |o|r| |t|y|p|e| |c|o|m@1|a|n|d| |t|o| |c|o|n|t|i|n|u|e> +0#0000000&@35
diff --git a/src/testdir/dumps/Test_popup_setbuf_04.dump b/src/testdir/dumps/Test_popup_setbuf_04.dump
new file mode 100644
index 0000000..937fa7c
--- /dev/null
+++ b/src/testdir/dumps/Test_popup_setbuf_04.dump
@@ -0,0 +1,10 @@
+>*+0#ffffff16#ffd7ff255|h+0#e000002&|e|l|p|.|t|x|t|*+0#ffffff16&| +0#0000001&@5|F|o|r| |V+0#00e0e07&|i|m| |v|e|r|s|i|o|n| |9|.|1|.| +0#0000001&@1|L|a|s|t| |c|h|a|n|g|e|:| |2|0|2|4| |M|a|y| |2|7| @11| +0#0000000#0000001
+| +0#0000001#ffd7ff255@73| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@23|V|I|M| |-| |m|a|i|n| |h|e|l|p| |f|i|l|e| @29| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@72|k| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@5|M|o|v|e| |a|r|o|u|n|d|:| @1|U|s|e| |t|h|e| |c|u|r|s|o|r| |k|e|y|s|,| |o|r| |"|h|"| |t|o| |g|o| |l|e|f|t|,| @11|h| @1| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255|l| @71| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@19|"|j|"| |t|o| |g|o| |d|o|w|n|,| |"|k|"| |t|o| |g|o| |u|p|,| |"|l|"| |t|o| |g|o| |r|i|g|h|t|.| @6|j| +0#0000000#a8a8a8255
+|C+0#0000001#ffd7ff255|l|o|s|e| |t|h|i|s| |w|i|n|d|o|w|:| @1|U|s|e| |"|:|q|<+0#e000e06&|E|n|t|e|r|>|"+0#0000001&|.| @37| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@2|G|e|t| |o|u|t| |o|f| |V|i|m|:| @1|U|s|e| |"|:|q|a|!|<+0#e000e06&|E|n|t|e|r|>|"+0#0000001&| |(|c|a|r|e|f|u|l|,| |a|l@1| |c|h|a|n|g|e|s| |a|r|e| |l|o|s|t|!|)|.| @2| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@73| +0#0000000#a8a8a8255
diff --git a/src/testdir/dumps/Test_popup_setbuf_05.dump b/src/testdir/dumps/Test_popup_setbuf_05.dump
new file mode 100644
index 0000000..a13dfe3
--- /dev/null
+++ b/src/testdir/dumps/Test_popup_setbuf_05.dump
@@ -0,0 +1,10 @@
+>h+0#e000002#ffffff0|e|l|p|.|t|x|t| +0#0000000&@7|F|o|r| |V+0#00e0e07&|i|m| |v|e|r|s|i|o|n| |9|.|1|.| +0#0000000&@1|L|a|s|t| |c|h|a|n|g|e|:| |2|0|2|4| |M|a|y| |2|7| @12
+@75
+@24|V|I|M| |-| |m|a|i|n| |h|e|l|p| |f|i|l|e| @30
+@73|k|
+@6|M|o|v|e| |a|r|o|u|n|d|:| @1|U|s|e| |t|h|e| |c|u|r|s|o|r| |k|e| +0#0000001#ffd7ff255|s+0#0000000#ffffff0|,| |o|r| |"|h|"| |t|o| |g|o| |l|e|f|t|,| @11|h| @2
+|l| @73
+|h+3&&|e|l|p|.|t|x|t| |[|H|e|l|p|]|[|R|O|]| @37|1|,|1| @11|T|o|p
+| +0&&@74
+|[+1&&|N|o| |N|a|m|e|]| @47|0|,|0|-|1| @9|A|l@1
+| +0&&@74
diff --git a/src/testdir/dumps/Test_popup_setbuf_06.dump b/src/testdir/dumps/Test_popup_setbuf_06.dump
new file mode 100644
index 0000000..937fa7c
--- /dev/null
+++ b/src/testdir/dumps/Test_popup_setbuf_06.dump
@@ -0,0 +1,10 @@
+>*+0#ffffff16#ffd7ff255|h+0#e000002&|e|l|p|.|t|x|t|*+0#ffffff16&| +0#0000001&@5|F|o|r| |V+0#00e0e07&|i|m| |v|e|r|s|i|o|n| |9|.|1|.| +0#0000001&@1|L|a|s|t| |c|h|a|n|g|e|:| |2|0|2|4| |M|a|y| |2|7| @11| +0#0000000#0000001
+| +0#0000001#ffd7ff255@73| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@23|V|I|M| |-| |m|a|i|n| |h|e|l|p| |f|i|l|e| @29| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@72|k| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@5|M|o|v|e| |a|r|o|u|n|d|:| @1|U|s|e| |t|h|e| |c|u|r|s|o|r| |k|e|y|s|,| |o|r| |"|h|"| |t|o| |g|o| |l|e|f|t|,| @11|h| @1| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255|l| @71| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@19|"|j|"| |t|o| |g|o| |d|o|w|n|,| |"|k|"| |t|o| |g|o| |u|p|,| |"|l|"| |t|o| |g|o| |r|i|g|h|t|.| @6|j| +0#0000000#a8a8a8255
+|C+0#0000001#ffd7ff255|l|o|s|e| |t|h|i|s| |w|i|n|d|o|w|:| @1|U|s|e| |"|:|q|<+0#e000e06&|E|n|t|e|r|>|"+0#0000001&|.| @37| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@2|G|e|t| |o|u|t| |o|f| |V|i|m|:| @1|U|s|e| |"|:|q|a|!|<+0#e000e06&|E|n|t|e|r|>|"+0#0000001&| |(|c|a|r|e|f|u|l|,| |a|l@1| |c|h|a|n|g|e|s| |a|r|e| |l|o|s|t|!|)|.| @2| +0#0000000#a8a8a8255
+| +0#0000001#ffd7ff255@73| +0#0000000#a8a8a8255
diff --git a/src/testdir/dumps/Test_prop_inserts_text_before_double_width_wrap_2.dump b/src/testdir/dumps/Test_prop_inserts_text_before_double_width_wrap_2.dump
new file mode 100644
index 0000000..6022a16
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_inserts_text_before_double_width_wrap_2.dump
@@ -0,0 +1,3 @@
+|a+0&#ffffff0@39|b+0#e000e06&@8|>+0#4040ff13&
+>å£*0#0000000&|1+&|2|3|4|5| @42
+@32|1|,|4|1|-|5|1| @6|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_inserts_text_before_double_width_wrap_3.dump b/src/testdir/dumps/Test_prop_inserts_text_before_double_width_wrap_3.dump
new file mode 100644
index 0000000..c033399
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_inserts_text_before_double_width_wrap_3.dump
@@ -0,0 +1,3 @@
+|a+0&#ffffff0@39|b+0#e000e06&@8|>+0#4040ff13&
+|+@2>å£*0#0000000&|1+&|2|3|4|5| @39
+|:|s|e|t| |s|h|o|w|b|r|e|a|k|=|+@2| @13|1|,|4|1|-|5|4| @6|A|l@1|
diff --git a/src/testdir/dumps/Test_pum_highlights_10.dump b/src/testdir/dumps/Test_pum_highlights_10.dump
new file mode 100644
index 0000000..790b028
--- /dev/null
+++ b/src/testdir/dumps/Test_pum_highlights_10.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0|h|e|l@1|o| |h|e|l|i|o| |h|e|r|o| |h|e|l@1|o> @51
+|~+0#4040ff13&| @15| +0#0000001#ffd7ff255|h+0#0000e05&|e+0#0000001&|r|o| @10| +0#4040ff13#ffffff0@41
+|~| @15| +0#0000001#ffd7ff255|h+0#0000e05&|e+0#0000001&|l|i|o| @9| +0#4040ff13#ffffff0@41
+|~| @15| +0#0000001#e0e0e08|h+0#00e0e07&|e+0#0000001&|l@1|o| @9| +0#4040ff13#ffffff0@41
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |K|e|y|w|o|r|d| |L|o|c|a|l| |c|o|m|p|l|e|t|i|o|n| |(|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |3| +0#0000000&@27
diff --git a/src/testdir/dumps/Test_pum_highlights_11.dump b/src/testdir/dumps/Test_pum_highlights_11.dump
new file mode 100644
index 0000000..ef75a89
--- /dev/null
+++ b/src/testdir/dumps/Test_pum_highlights_11.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0|h|e|l@1|o| |h|e|l|i|o| |h|e|r|o| |h|e|l|i|o> @51
+|~+0#4040ff13&| @15| +0#0000001#ffd7ff255|h+0#0000e05&|e+0#0000001&|r|o| @10| +0#4040ff13#ffffff0@41
+|~| @15| +0#0000001#e0e0e08|h+0#00e0e07&|e+0#0000001&|l|i|o| @9| +0#4040ff13#ffffff0@41
+|~| @15| +0#0000001#ffd7ff255|h+0#0000e05&|e+0#0000001&|l@1|o| @9| +0#4040ff13#ffffff0@41
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |K|e|y|w|o|r|d| |L|o|c|a|l| |c|o|m|p|l|e|t|i|o|n| |(|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |2| |o|f| |3| +0#0000000&@27
diff --git a/src/testdir/dumps/Test_pum_highlights_12.dump b/src/testdir/dumps/Test_pum_highlights_12.dump
new file mode 100644
index 0000000..a0d2b49
--- /dev/null
+++ b/src/testdir/dumps/Test_pum_highlights_12.dump
@@ -0,0 +1,20 @@
+|a+0&#ffffff0|w|o|r|d|1> @68
+|a+0#ff404010#e0e0e08|w|o|r|d|1| |W| |e|x|t|r|a| |t|e|x|t| |1| | +0#4040ff13#ffffff0@52
+|a+0#0000001#ffd7ff255|w|o|r|d|2| |W| |e|x|t|r|a| |t|e|x|t| |2| | +0#4040ff13#ffffff0@52
+|你*0#ff404010#ffd7ff255|好| +&@2|W| |e|x|t|r|a| |t|e|x|t| |3| | +0#4040ff13#ffffff0@52
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |U|s|e|r| |d|e|f|i|n|e|d| |c|o|m|p|l|e|t|i|o|n| |(|^|U|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |3| +0#0000000&@26
diff --git a/src/testdir/dumps/Test_pum_highlights_13.dump b/src/testdir/dumps/Test_pum_highlights_13.dump
new file mode 100644
index 0000000..34fde12
--- /dev/null
+++ b/src/testdir/dumps/Test_pum_highlights_13.dump
@@ -0,0 +1,20 @@
+|a+0&#ffffff0|w|o|r|d|1> @68
+|a+8#ff404010#e0e0e08|w|o+0&&|r|d|1| |W| |e|x|t|r|a| |t|e|x|t| |1| | +0#4040ff13#ffffff0@52
+|a+8#0000e05#ffd7ff255|w|o+0#0000001&|r|d|2| |W| |e|x|t|r|a| |t|e|x|t| |2| | +0#4040ff13#ffffff0@52
+|你*0#ff404010#ffd7ff255|好| +&@2|W| |e|x|t|r|a| |t|e|x|t| |3| | +0#4040ff13#ffffff0@52
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |U|s|e|r| |d|e|f|i|n|e|d| |c|o|m|p|l|e|t|i|o|n| |(|^|U|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |3| +0#0000000&@26
diff --git a/src/testdir/dumps/Test_pum_highlights_14.dump b/src/testdir/dumps/Test_pum_highlights_14.dump
new file mode 100644
index 0000000..f35b4cb
--- /dev/null
+++ b/src/testdir/dumps/Test_pum_highlights_14.dump
@@ -0,0 +1,20 @@
+|a+0&#ffffff0|w|o|r|d|2> @68
+|a+8#ff404010#ffd7ff255|w|o+0&&|r|d|1| |W| |e|x|t|r|a| |t|e|x|t| |1| | +0#4040ff13#ffffff0@52
+|a+8#00e0e07#e0e0e08|w|o+0#0000001&|r|d|2| |W| |e|x|t|r|a| |t|e|x|t| |2| | +0#4040ff13#ffffff0@52
+|你*0#ff404010#ffd7ff255|好| +&@2|W| |e|x|t|r|a| |t|e|x|t| |3| | +0#4040ff13#ffffff0@52
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |U|s|e|r| |d|e|f|i|n|e|d| |c|o|m|p|l|e|t|i|o|n| |(|^|U|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |2| |o|f| |3| +0#0000000&@26
diff --git a/src/testdir/dumps/Test_pum_highlights_15.dump b/src/testdir/dumps/Test_pum_highlights_15.dump
new file mode 100644
index 0000000..e923b43
--- /dev/null
+++ b/src/testdir/dumps/Test_pum_highlights_15.dump
@@ -0,0 +1,20 @@
+|/+0&#ffffff0|n|o|n|_|e|x|i|t|_|f|o|l|d|e|r> @58
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |F|i|l|e| |n|a|m|e| |c|o|m|p|l|e|t|i|o|n| |(|^|F|^|N|^|P|)| |P+0#ffffff16#e000002|a|t@1|e|r|n| |n|o|t| |f|o|u|n|d| +0#0000000#ffffff0@24
diff --git a/src/testdir/dumps/Test_pum_highlights_16.dump b/src/testdir/dumps/Test_pum_highlights_16.dump
new file mode 100644
index 0000000..fe2b68d
--- /dev/null
+++ b/src/testdir/dumps/Test_pum_highlights_16.dump
@@ -0,0 +1,20 @@
+|a+0&#ffffff0|w|o|r|d|1> @68
+|a+0#ff404010#e0e0e08|w|o|r|d|1| |v+0#ffff4012&|a|r|i|a|b|l|e| |e+0#ff404010&|x|t|r|a| |t|e|x|t| |1| | +0#4040ff13#ffffff0@45
+|a+0#0000001#ffd7ff255|w|o|r|d|2| |f+0#4040ff13&|u|n|c|t|i|o|n| |e+0#0000001&|x|t|r|a| |t|e|x|t| |2| | +0#4040ff13#ffffff0@45
+|你*0#0000001#ffd7ff255|好| +&@2|c+0#40ff4011&|l|a|s@1| @3|e+0#0000001&|x|t|r|a| |t|e|x|t| |3| | +0#4040ff13#ffffff0@45
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |U|s|e|r| |d|e|f|i|n|e|d| |c|o|m|p|l|e|t|i|o|n| |(|^|U|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |3| +0#0000000&@26
diff --git a/src/testdir/dumps/Test_wildmenu_pum_11.dump b/src/testdir/dumps/Test_wildmenu_pum_11.dump
index 4697c8a..a0ffc74 100644
--- a/src/testdir/dumps/Test_wildmenu_pum_11.dump
+++ b/src/testdir/dumps/Test_wildmenu_pum_11.dump
@@ -1,10 +1,10 @@
| +0&#ffffff0@74
|~+0#4040ff13&| @73
-|~| @73
|~| @10| +0#0000001#e0e0e08|c|u|l|h|l|=| @8| +0#4040ff13#ffffff0@46
|~| @10| +0#0000001#ffd7ff255|i|c|o|n|=| @9| +0#4040ff13#ffffff0@46
|~| @10| +0#0000001#ffd7ff255|l|i|n|e|h|l|=| @7| +0#4040ff13#ffffff0@46
|~| @10| +0#0000001#ffd7ff255|n|u|m|h|l|=| @8| +0#4040ff13#ffffff0@46
+|~| @10| +0#0000001#ffd7ff255|p|r|i|o|r|i|t|y|=| @5| +0#4040ff13#ffffff0@46
|~| @10| +0#0000001#ffd7ff255|t|e|x|t|=| @9| +0#4040ff13#ffffff0@46
|~| @10| +0#0000001#ffd7ff255|t|e|x|t|h|l|=| @7| +0#4040ff13#ffffff0@46
|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e| |c|u|l|h|l|=> @55
diff --git a/src/testdir/dumps/Test_wildmenu_pum_12.dump b/src/testdir/dumps/Test_wildmenu_pum_12.dump
index d93631d..12842c4 100644
--- a/src/testdir/dumps/Test_wildmenu_pum_12.dump
+++ b/src/testdir/dumps/Test_wildmenu_pum_12.dump
@@ -1,10 +1,10 @@
| +0&#ffffff0@74
|~+0#4040ff13&| @73
-|~| @73
|~| @17| +0#0000001#e0e0e08|c|u|l|h|l|=| @8| +0#4040ff13#ffffff0@39
|~| @17| +0#0000001#ffd7ff255|i|c|o|n|=| @9| +0#4040ff13#ffffff0@39
|~| @17| +0#0000001#ffd7ff255|l|i|n|e|h|l|=| @7| +0#4040ff13#ffffff0@39
|~| @17| +0#0000001#ffd7ff255|n|u|m|h|l|=| @8| +0#4040ff13#ffffff0@39
+|~| @17| +0#0000001#ffd7ff255|p|r|i|o|r|i|t|y|=| @5| +0#4040ff13#ffffff0@39
|~| @17| +0#0000001#ffd7ff255|t|e|x|t|=| @9| +0#4040ff13#ffffff0@39
|~| @17| +0#0000001#ffd7ff255|t|e|x|t|h|l|=| @7| +0#4040ff13#ffffff0@39
|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e| |c|u|l|h|l|=| |c|u|l|h|l|=> @48
diff --git a/src/testdir/dumps/Test_wildmenu_pum_13.dump b/src/testdir/dumps/Test_wildmenu_pum_13.dump
index b2b1424..94a8ccc 100644
--- a/src/testdir/dumps/Test_wildmenu_pum_13.dump
+++ b/src/testdir/dumps/Test_wildmenu_pum_13.dump
@@ -1,10 +1,10 @@
| +0&#ffffff0@74
|~+0#4040ff13&| @73
-|~| @73
|~| @24| +0#0000001#e0e0e08|c|u|l|h|l|=| @8| +0#4040ff13#ffffff0@32
|~| @24| +0#0000001#ffd7ff255|i|c|o|n|=| @9| +0#4040ff13#ffffff0@32
|~| @24| +0#0000001#ffd7ff255|l|i|n|e|h|l|=| @7| +0#4040ff13#ffffff0@32
|~| @24| +0#0000001#ffd7ff255|n|u|m|h|l|=| @8| +0#4040ff13#ffffff0@32
+|~| @24| +0#0000001#ffd7ff255|p|r|i|o|r|i|t|y|=| @5| +0#4040ff13#ffffff0@32
|~| @24| +0#0000001#ffd7ff255|t|e|x|t|=| @9| +0#4040ff13#ffffff0@32
|~| @24| +0#0000001#ffd7ff255|t|e|x|t|h|l|=| @7| +0#4040ff13#ffffff0@32
|:+0#0000000&|s|i|g|n| |d|e|f|i|n|e| |c|u|l|h|l|=| |c|u|l|h|l|=| |c|u|l|h|l|=> @41
diff --git a/src/testdir/dumps/Test_wildmenu_pum_22.dump b/src/testdir/dumps/Test_wildmenu_pum_22.dump
index 3fd00ad..e774d5d 100644
--- a/src/testdir/dumps/Test_wildmenu_pum_22.dump
+++ b/src/testdir/dumps/Test_wildmenu_pum_22.dump
@@ -1,7 +1,7 @@
| +0&#ffffff0@74
|[+1&&|N|o| |N|a|m|e|]| @65
-|:+0#4040ff13&|s+0#af5f00255&|e|t| +0#0000000&|w+0#e000e06&|i|l|d|m|o|d|e|=+0#0000000&|l|o|n|g|e|s|t|,+0#af5f00255&|f+0#0000000&|u|l@1| @48
-|:+0#4040ff13&|s+0#af5f00255&|e|t| +0#0000000&|w+0#e000e06&|i|l|d|m|o|d|e|=+0#0000000&|f|u|l@1| @56
+|:+0#4040ff13&|s+0#af5f00255&|e|t| +0#0000000&|w+0#e000e06&|i|l|d|m|o|d|e|=+0#af5f00255&|l+0#0000000&|o|n|g|e|s|t|,+0#e000e06&|f+0#0000000&|u|l@1| @48
+|:+0#4040ff13&|s+0#af5f00255&|e|t| +0#0000000&|w+0#e000e06&|i|l|d|m|o|d|e|=+0#af5f00255&|f+0#0000000&|u|l@1| @56
|:+0#4040ff13&|s+0#af5f00255&|i|g|n| +0#0000000&|d|e|f|i|n|e| @62
|:+0#4040ff13&|s+0#af5f00255&|i|g|n| +0#0000000&|d|e|f|i|n|e> @62
|~+0#4040ff13&| @73
diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim
index 8cca2b9..7674714 100644
--- a/src/testdir/gen_opt_test.vim
+++ b/src/testdir/gen_opt_test.vim
@@ -144,6 +144,7 @@ let test_values = {
\ 'splitkeep': [['cursor', 'screen', 'topline'], ['xxx']],
\ 'swapsync': [['', 'sync', 'fsync'], ['xxx']],
\ 'switchbuf': [['', 'useopen', 'split,newtab'], ['xxx']],
+ \ 'tabclose': [['', 'left', 'left,uselast'], ['xxx']],
\ 'tagcase': [['smart', 'match'], ['', 'xxx', 'smart,match']],
\ 'term': [[], []],
\ 'termguicolors': [[], []],
diff --git a/src/testdir/ru_RU/LC_MESSAGES/__PACKAGE__.mo b/src/testdir/ru_RU/LC_MESSAGES/__PACKAGE__.mo
new file mode 100644
index 0000000..300eba2
--- /dev/null
+++ b/src/testdir/ru_RU/LC_MESSAGES/__PACKAGE__.mo
Binary files differ
diff --git a/src/testdir/samples/Test_tohtml_basic.c.html b/src/testdir/samples/Test_tohtml_basic.c.html
new file mode 100644
index 0000000..d9467b5
--- /dev/null
+++ b/src/testdir/samples/Test_tohtml_basic.c.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>/home/jiangyinzuo/vim/src/testdir/Test_tohtml_basic.c.html</title>
+<meta name="Generator" content="Vim/9.1">
+<meta name="plugin-version" content="vim9.0_v2">
+<meta name="syntax" content="none">
+<meta name="settings" content="use_css,no_foldcolumn,pre_wrap,prevent_copy=,use_input_for_pc=none">
+<meta name="colorscheme" content="none">
+<style>
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffff; }
+body { font-family: monospace; color: #000000; background-color: #ffffff; }
+* { font-size: 1em; }
+-->
+</style>
+</head>
+<body>
+<pre id='vimCodeElement'>
+#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+
+int isprime(int n)
+{
+ if (n &lt;= 1)
+ return 0;
+
+ for (int i = 2; i &lt;= n / 2; i++)
+ if (n % i == 0)
+ return 0;
+
+ return 1;
+}
+
+int main(int argc, char *argv[])
+{
+ int n = 7;
+
+ printf(&quot;%d is %s prime\n&quot;, n, isprime(n) ? &quot;a&quot; : &quot;not a&quot;);
+
+ return 0;
+}
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/src/testdir/samples/Test_tohtml_basic_no_css.c.html b/src/testdir/samples/Test_tohtml_basic_no_css.c.html
new file mode 100644
index 0000000..fcbcf5c
--- /dev/null
+++ b/src/testdir/samples/Test_tohtml_basic_no_css.c.html
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<title>/home/jiangyinzuo/vim/src/testdir/Test_tohtml_basic_no_css.c.html</title>
+<meta name="Generator" content="Vim/9.1">
+<meta name="plugin-version" content="vim9.0_v2">
+<meta name="syntax" content="none">
+<meta name="settings" content="no_pre,no_foldcolumn,expand_tabs,prevent_copy=,use_input_for_pc=none">
+<meta name="colorscheme" content="none">
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<font face="monospace">
+#include &lt;stdio.h&gt;<br>
+#include &lt;stdlib.h&gt;<br>
+<br>
+int isprime(int n)<br>
+{<br>
+&nbsp;&nbsp;if (n &lt;= 1)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br>
+<br>
+&nbsp;&nbsp;for (int i = 2; i &lt;= n / 2; i++)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;if (n % i == 0)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br>
+<br>
+&nbsp;&nbsp;return 1;<br>
+}<br>
+<br>
+int main(int argc, char *argv[])<br>
+{<br>
+&nbsp;&nbsp;int n = 7;<br>
+<br>
+&nbsp;&nbsp;printf(&quot;%d is %s prime\n&quot;, n, isprime(n) ? &quot;a&quot; : &quot;not a&quot;);<br>
+<br>
+&nbsp;&nbsp;return 0;<br>
+}<br>
+</font>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/src/testdir/samples/test.zip b/src/testdir/samples/test.zip
new file mode 100644
index 0000000..6d34ac6
--- /dev/null
+++ b/src/testdir/samples/test.zip
Binary files differ
diff --git a/src/testdir/samples/testa.zip b/src/testdir/samples/testa.zip
new file mode 100644
index 0000000..10b0346
--- /dev/null
+++ b/src/testdir/samples/testa.zip
Binary files differ
diff --git a/src/testdir/test28.in b/src/testdir/test28.in
new file mode 100644
index 0000000..3d5289d
--- /dev/null
+++ b/src/testdir/test28.in
@@ -0,0 +1,13 @@
+Test for using CTRL-A/CTRL-X in tiny mode
+
+STARTTEST
+/12352
+/12354
+:/^STARTHERE/+,$w! test.out
+:qa!
+ENDTEST
+
+STARTHERE
+12352
+
+12354
diff --git a/src/testdir/test28.ok b/src/testdir/test28.ok
new file mode 100644
index 0000000..085c133
--- /dev/null
+++ b/src/testdir/test28.ok
@@ -0,0 +1,3 @@
+12353
+
+12353
diff --git a/src/testdir/test_arglist.vim b/src/testdir/test_arglist.vim
index edc8b77..8d81a82 100644
--- a/src/testdir/test_arglist.vim
+++ b/src/testdir/test_arglist.vim
@@ -359,6 +359,7 @@ func Test_argv()
call assert_equal('', argv(1, 100))
call assert_equal([], argv(-1, 100))
call assert_equal('', argv(10, -1))
+ %argdelete
endfunc
" Test for the :argedit command
@@ -744,4 +745,26 @@ func Test_all_command()
%bw!
endfunc
+" Test for deleting buffer when creating an arglist. This was accessing freed
+" memory
+func Test_crash_arglist_uaf()
+ "%argdelete
+ new one
+ au BufAdd XUAFlocal :bw
+ "call assert_fails(':arglocal XUAFlocal', 'E163:')
+ arglocal XUAFlocal
+ au! BufAdd
+ bw! XUAFlocal
+
+ au BufAdd XUAFlocal2 :bw
+ new two
+ new three
+ arglocal
+ argadd XUAFlocal2 Xfoobar
+ bw! XUAFlocal2
+ bw! two
+
+ au! BufAdd
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_assert.vim b/src/testdir/test_assert.vim
index d143f19..15b18a4 100644
--- a/src/testdir/test_assert.vim
+++ b/src/testdir/test_assert.vim
@@ -48,10 +48,19 @@ func Test_assert_equal()
call assert_match("Expected 'bar' but got 'foo'", v:errors[0])
call remove(v:errors, 0)
+ let s = 'αβγ'
+ call assert_equal(1, assert_equal('δεζ', s))
+ call assert_match("Expected 'δεζ' but got 'αβγ'", v:errors[0])
+ call remove(v:errors, 0)
+
call assert_equal('XxxxxxxxxxxxxxxxxxxxxxX', 'XyyyyyyyyyyyyyyyyyyyyyyyyyX')
call assert_match("Expected 'X\\\\\\[x occurs 21 times]X' but got 'X\\\\\\[y occurs 25 times]X'", v:errors[0])
call remove(v:errors, 0)
+ call assert_equal('ΩωωωωωωωωωωωωωωωωωωωωωΩ', 'ΩψψψψψψψψψψψψψψψψψψψψψψψψψΩ')
+ call assert_match("Expected 'Ω\\\\\\[ω occurs 21 times]Ω' but got 'Ω\\\\\\[ψ occurs 25 times]Ω'", v:errors[0])
+ call remove(v:errors, 0)
+
" special characters are escaped
call assert_equal("\b\e\f\n\t\r\\\x01\x7f", 'x')
call assert_match('Expected ''\\b\\e\\f\\n\\t\\r\\\\\\x01\\x7f'' but got ''x''', v:errors[0])
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index c9f257a..5a91351 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -14,6 +14,13 @@ func s:cleanup_buffers() abort
endfor
endfunc
+func CleanUpTestAuGroup()
+ augroup testing
+ au!
+ augroup END
+ augroup! testing
+endfunc
+
func Test_vim_did_enter()
call assert_false(v:vim_did_enter)
@@ -269,6 +276,7 @@ endfunc
func Test_win_tab_autocmd()
let g:record = []
+ defer CleanUpTestAuGroup()
augroup testing
au WinNewPre * call add(g:record, 'WinNewPre')
au WinNew * call add(g:record, 'WinNew')
@@ -288,7 +296,7 @@ func Test_win_tab_autocmd()
call assert_equal([
\ 'WinNewPre', 'WinLeave', 'WinNew', 'WinEnter',
- \ 'WinLeave', 'TabLeave', 'WinNewPre', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
+ \ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
\ 'WinLeave', 'TabLeave', 'WinClosed', 'TabClosed', 'WinEnter', 'TabEnter',
\ 'WinLeave', 'WinClosed', 'WinEnter'
\ ], g:record)
@@ -299,7 +307,7 @@ func Test_win_tab_autocmd()
bwipe somefile
call assert_equal([
- \ 'WinLeave', 'TabLeave', 'WinNewPre', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
+ \ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
\ 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter',
\ 'WinClosed', 'TabClosed'
\ ], g:record)
@@ -316,9 +324,6 @@ func Test_win_tab_autocmd()
\ 'WinNewPre', 'WinLeave', 'WinNew', 'WinEnter'
\ ], g:record)
- augroup testing
- au!
- augroup END
unlet g:record
endfunc
@@ -330,17 +335,15 @@ func Test_WinNewPre()
au WinNewPre * call add(g:layouts_pre, winlayout())
au WinNew * call add(g:layouts_post, winlayout())
augroup END
+ defer CleanUpTestAuGroup()
split
call assert_notequal(g:layouts_pre[0], g:layouts_post[0])
split
call assert_equal(g:layouts_pre[1], g:layouts_post[0])
call assert_notequal(g:layouts_pre[1], g:layouts_post[1])
+ " not triggered for tabnew
tabnew
- call assert_notequal(g:layouts_pre[2], g:layouts_post[1])
- call assert_notequal(g:layouts_pre[2], g:layouts_post[2])
- augroup testing
- au!
- augroup END
+ call assert_equal(2, len(g:layouts_pre))
unlet g:layouts_pre
unlet g:layouts_post
@@ -383,9 +386,6 @@ func Test_WinNewPre()
let g:caught += 1
endtry
call assert_equal(4, g:caught)
- augroup testing
- au!
- augroup END
unlet g:caught
endfunc
@@ -2096,6 +2096,38 @@ func Test_Cmdline()
au! CmdlineEnter
au! CmdlineLeave
let &shellslash = save_shellslash
+
+ au! CursorMovedC : let g:pos += [getcmdpos()]
+ let g:pos = []
+ call feedkeys(":foo bar baz\<C-W>\<C-W>\<C-W>\<Esc>", 'xt')
+ call assert_equal([2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 9, 5, 1], g:pos)
+ let g:pos = []
+ call feedkeys(":hello\<C-B>\<Esc>", 'xt')
+ call assert_equal([2, 3, 4, 5, 6, 1], g:pos)
+ let g:pos = []
+ call feedkeys(":hello\<C-U>\<Esc>", 'xt')
+ call assert_equal([2, 3, 4, 5, 6, 1], g:pos)
+ let g:pos = []
+ call feedkeys(":hello\<Left>\<C-R>=''\<CR>\<Left>\<Right>\<Esc>", 'xt')
+ call assert_equal([2, 3, 4, 5, 6, 5, 4, 5], g:pos)
+ let g:pos = []
+ call feedkeys(":12345678\<C-R>=setcmdpos(3)??''\<CR>\<Esc>", 'xt')
+ call assert_equal([2, 3, 4, 5, 6, 7, 8, 9, 3], g:pos)
+ let g:pos = []
+ call feedkeys(":12345678\<C-R>=setcmdpos(3)??''\<CR>\<Left>\<Esc>", 'xt')
+ call assert_equal([2, 3, 4, 5, 6, 7, 8, 9, 3, 2], g:pos)
+ au! CursorMovedC
+
+ " setcmdpos() is no-op inside an autocommand
+ au! CursorMovedC : let g:pos += [getcmdpos()] | call setcmdpos(1)
+ let g:pos = []
+ call feedkeys(":hello\<Left>\<Left>\<Esc>", 'xt')
+ call assert_equal([2, 3, 4, 5, 6, 5, 4], g:pos)
+ au! CursorMovedC
+
+ unlet g:entered
+ unlet g:left
+ unlet g:pos
endfunc
" Test for BufWritePre autocommand that deletes or unloads the buffer.
@@ -2775,7 +2807,8 @@ endfunc
func Test_autocmd_nested()
let g:did_nested = 0
- augroup Testing
+ defer CleanUpTestAuGroup()
+ augroup testing
au WinNew * edit somefile
au BufNew * let g:did_nested = 1
augroup END
@@ -2785,7 +2818,7 @@ func Test_autocmd_nested()
bwipe! somefile
" old nested argument still works
- augroup Testing
+ augroup testing
au!
au WinNew * nested edit somefile
au BufNew * let g:did_nested = 1
@@ -4720,4 +4753,115 @@ func Test_BufEnter_botline()
set hidden&vim
endfunc
+func Test_KeyInputPre()
+ " Consume previous keys
+ call feedkeys('', 'ntx')
+
+ " KeyInputPre can record input keys.
+ let s:keys = []
+ au KeyInputPre n call add(s:keys, v:char)
+
+ call feedkeys('jkjkjjj', 'ntx')
+ call assert_equal(
+ \ ['j', 'k', 'j', 'k', 'j', 'j', 'j'],
+ \ s:keys)
+
+ unlet s:keys
+ au! KeyInputPre
+
+ " KeyInputPre can handle multibyte.
+ let s:keys = []
+ au KeyInputPre * call add(s:keys, v:char)
+ edit Xxx1
+
+ call feedkeys("iã‚\<ESC>", 'ntx')
+ call assert_equal(['i', "ã‚", "\<ESC>"], s:keys)
+
+ bwipe! Xxx1
+ unlet s:keys
+ au! KeyInputPre
+
+ " KeyInputPre can change input keys.
+ au KeyInputPre i if v:char ==# 'a' | let v:char = 'b' | endif
+ edit Xxx1
+
+ call feedkeys("iaabb\<ESC>", 'ntx')
+ call assert_equal(getline('.'), 'bbbb')
+
+ bwipe! Xxx1
+ au! KeyInputPre
+
+ " KeyInputPre returns multiple characters.
+ au KeyInputPre i if v:char ==# 'a' | let v:char = 'cccc' | endif
+ edit Xxx1
+
+ call feedkeys("iaabb\<ESC>", 'ntx')
+ call assert_equal(getline('.'), 'ccbb')
+
+ bwipe! Xxx1
+ au! KeyInputPre
+
+ " KeyInputPre can use special keys.
+ au KeyInputPre i if v:char ==# 'a' | let v:char = "\<Ignore>" | endif
+ edit Xxx1
+
+ call feedkeys("iaabb\<ESC>", 'ntx')
+ call assert_equal(getline('.'), 'bb')
+
+ bwipe! Xxx1
+ au! KeyInputPre
+
+ " Test for v:event.typed
+ au KeyInputPre n call assert_true(v:event.typed)
+ call feedkeys('j', 'ntx')
+
+ au! KeyInputPre
+
+ au KeyInputPre n call assert_false(v:event.typed)
+ call feedkeys('j', 'nx')
+
+ au! KeyInputPre
+
+ " Test for v:event.typedchar
+ nnoremap j k
+ au KeyInputPre n
+ \ call assert_equal(v:event.typedchar, 'j')
+ \ | call assert_equal(v:char, 'k')
+ call feedkeys('j', 'tx')
+
+ au! KeyInputPre
+endfunc
+
+" those commands caused null pointer access, see #15464
+func Test_WinNewPre_crash()
+ defer CleanUpTestAuGroup()
+ let _cmdheight=&cmdheight
+ augroup testing
+ au!
+ autocmd WinNewPre * redraw
+ augroup END
+ tabnew
+ tabclose
+ augroup testing
+ au!
+ autocmd WinNewPre * wincmd t
+ augroup END
+ tabnew
+ tabclose
+ augroup testing
+ au!
+ autocmd WinNewPre * wincmd b
+ augroup END
+ tabnew
+ tabclose
+ augroup testing
+ au!
+ autocmd WinNewPre * set cmdheight+=1
+ augroup END
+ tabnew
+ tabclose
+ let &cmdheight=_cmdheight
+endfunc
+
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_breakindent.vim b/src/testdir/test_breakindent.vim
index 96d91c9..b306c02 100644
--- a/src/testdir/test_breakindent.vim
+++ b/src/testdir/test_breakindent.vim
@@ -1165,4 +1165,15 @@ func Test_breakindent_min_with_signcol()
call s:close_windows()
endfunc
+func Test_breakindent_with_double_width_wrap()
+ 50vnew
+ setlocal tabstop=8 breakindent nolist
+ call setline(1, "\t" .. repeat('a', winwidth(0) - 9) .. 'å£å£å£')
+ normal! $g0
+ call assert_equal(2, winline())
+ call assert_equal(9, wincol())
+
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_buffer.vim b/src/testdir/test_buffer.vim
index de088bd..757ba05 100644
--- a/src/testdir/test_buffer.vim
+++ b/src/testdir/test_buffer.vim
@@ -126,6 +126,52 @@ func Test_buflist_browse()
%bwipe!
endfunc
+" Test for :bnext and :bprev when called from help and non-help buffers.
+func Test_bnext_bprev_help()
+ %bwipe!
+
+ e XHelp1 | set bt=help
+ let b1 = bufnr()
+ e Xbuf1
+ let b2 = bufnr()
+
+ " There's only one buffer of each type.
+ b XHelp1
+ bnext | call assert_equal(b1, bufnr())
+ bprev | call assert_equal(b1, bufnr())
+ b Xbuf1
+ bnext | call assert_equal(b2, bufnr())
+ bprev | call assert_equal(b2, bufnr())
+
+ " Add one more buffer of each type.
+ e XHelp2 | set bt=help
+ let b3 = bufnr()
+ e Xbuf2
+ let b4 = bufnr()
+
+ " Help buffer jumps to help buffer.
+ b XHelp1
+ bnext | call assert_equal(b3, bufnr())
+ bnext | call assert_equal(b1, bufnr())
+ bprev | call assert_equal(b3, bufnr())
+ bprev | call assert_equal(b1, bufnr())
+
+ " Regular buffer jumps to regular buffer.
+ b Xbuf1
+ bnext | call assert_equal(b4, bufnr())
+ bnext | call assert_equal(b2, bufnr())
+ bprev | call assert_equal(b4, bufnr())
+ bprev | call assert_equal(b2, bufnr())
+
+ " :brewind and :blast are not affected by the buffer type.
+ b Xbuf2
+ brewind | call assert_equal(b1, bufnr())
+ b XHelp1
+ blast | call assert_equal(b4, bufnr())
+
+ %bwipe!
+endfunc
+
" Test for :bdelete
func Test_bdelete_cmd()
%bwipe!
diff --git a/src/testdir/test_cd.vim b/src/testdir/test_cd.vim
index 9fb5958..13a3eba 100644
--- a/src/testdir/test_cd.vim
+++ b/src/testdir/test_cd.vim
@@ -200,12 +200,20 @@ endfunc
func Test_cd_completion()
call mkdir('XComplDir1', 'D')
call mkdir('XComplDir2', 'D')
+ call mkdir('sub/XComplDir3', 'pD')
call writefile([], 'XComplFile', 'D')
for cmd in ['cd', 'chdir', 'lcd', 'lchdir', 'tcd', 'tchdir']
call feedkeys(':' .. cmd .. " XCompl\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"' .. cmd .. ' XComplDir1/ XComplDir2/', @:)
endfor
+
+ set cdpath+=sub
+ for cmd in ['cd', 'chdir', 'lcd', 'lchdir', 'tcd', 'tchdir']
+ call feedkeys(':' .. cmd .. " XCompl\<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"' .. cmd .. ' XComplDir1/ XComplDir2/ XComplDir3/', @:)
+ endfor
+ set cdpath&
endfunc
func Test_cd_unknown_dir()
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 8b7489e..3f6918a 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -658,7 +658,8 @@ func Test_getcompletion()
unlet g:cmdline_compl_params
" For others test if the name is recognized.
- let names = ['buffer', 'environment', 'file_in_path', 'mapping', 'tag', 'tag_listfiles', 'user']
+ let names = ['buffer', 'environment', 'file_in_path', 'dir_in_path', 'mapping', 'tag',
+ \ 'tag_listfiles', 'user']
if has('cmdline_hist')
call add(names, 'history')
endif
@@ -3612,7 +3613,7 @@ func Test_cmdline_complete_bang_cmd_argument()
endfunc
func Call_cmd_funcs()
- return string([getcmdpos(), getcmdscreenpos(), getcmdcompltype()])
+ return [getcmdpos(), getcmdscreenpos(), getcmdcompltype()]
endfunc
func Test_screenpos_and_completion()
@@ -3620,13 +3621,24 @@ func Test_screenpos_and_completion()
call assert_equal(0, getcmdscreenpos())
call assert_equal('', getcmdcompltype())
- cnoremap <expr> <F2> string([getcmdpos(), getcmdscreenpos(), getcmdcompltype()])
+ cnoremap <expr> <F2> string(Call_cmd_funcs())
call feedkeys(":let a\<F2>\<C-B>\"\<CR>", "xt")
call assert_equal("\"let a[6, 7, 'var']", @:)
call feedkeys(":quit \<F2>\<C-B>\"\<CR>", "xt")
call assert_equal("\"quit [6, 7, '']", @:)
call feedkeys(":nosuchcommand \<F2>\<C-B>\"\<CR>", "xt")
call assert_equal("\"nosuchcommand [15, 16, '']", @:)
+
+ " Check that getcmdcompltype() doesn't interfere with cmdline completion.
+ let g:results = []
+ cnoremap <F2> <Cmd>let g:results += [[getcmdline()] + Call_cmd_funcs()]<CR>
+ call feedkeys(":sign un\<Tab>\<F2>\<Tab>\<F2>\<Tab>\<F2>\<C-C>", "xt")
+ call assert_equal([
+ \ ['sign undefine', 14, 15, 'sign'],
+ \ ['sign unplace', 13, 14, 'sign'],
+ \ ['sign un', 8, 9, 'sign']], g:results)
+
+ unlet g:results
cunmap <F2>
endfunc
@@ -3858,4 +3870,25 @@ func Test_term_option()
let &cpo = _cpo
endfunc
+func Test_ex_command_completion()
+ " required for :*
+ set cpo+=*
+ let list = filter(getcompletion('', 'command'), 'exists(":" . v:val) == 0')
+ " :++ and :-- are only valid in Vim9 Script context, so they can be ignored
+ call assert_equal(['++', '--'], sort(list))
+ call assert_equal(1, exists(':k'))
+ call assert_equal(0, exists(':ke'))
+ call assert_equal(1, exists(':kee'))
+ call assert_equal(1, exists(':keep'))
+ call assert_equal(1, exists(':keepm'))
+ call assert_equal(1, exists(':keepma'))
+ call assert_equal(1, exists(':keepmar'))
+ call assert_equal(1, exists(':keepmark'))
+ call assert_equal(2, exists(':keepmarks'))
+ call assert_equal(2, exists(':keepalt'))
+ call assert_equal(2, exists(':keepjumps'))
+ call assert_equal(2, exists(':keeppatterns'))
+ set cpo-=*
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_codestyle.vim b/src/testdir/test_codestyle.vim
index a455264..83f52ef 100644
--- a/src/testdir/test_codestyle.vim
+++ b/src/testdir/test_codestyle.vim
@@ -28,6 +28,13 @@ def Test_source_files()
g:ignoreSwapExists = 'e'
exe 'edit ' .. fname
+ # Some files are generated files and may contain space errors.
+ if fname =~ 'dlldata.c'
+ || fname =~ 'if_ole.h'
+ || fname =~ 'iid_ole.c'
+ continue
+ endif
+
PerformCheck(fname, ' \t', 'space before Tab', '')
PerformCheck(fname, '\s$', 'trailing white space', '')
@@ -68,7 +75,8 @@ def Test_test_files()
&& fname !~ 'test_listchars.vim'
&& fname !~ 'test_visual.vim'
cursor(1, 1)
- var lnum = search(fname =~ "test_regexp_latin" ? '[^á] \t' : ' \t')
+ var skip = 'getline(".") =~ "codestyle: ignore"'
+ var lnum = search(fname =~ "test_regexp_latin" ? '[^á] \t' : ' \t', 'W', 0, 0, skip)
ReportError('testdir/' .. fname, lnum, 'space before Tab')
endif
@@ -155,4 +163,4 @@ def Test_help_files()
enddef
-" vim: shiftwidth=2 sts=2 expandtab
+" vim: shiftwidth=2 sts=2 expandtab nofoldenable
diff --git a/src/testdir/test_cpoptions.vim b/src/testdir/test_cpoptions.vim
index 6ff8301..7bfbcd1 100644
--- a/src/testdir/test_cpoptions.vim
+++ b/src/testdir/test_cpoptions.vim
@@ -19,7 +19,7 @@ func Test_cpo_a()
set cpo+=a
read XfileCpoA
call assert_equal('XfileCpoA', @#)
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -39,7 +39,7 @@ func Test_cpo_A()
set cpo+=A
write XcpoAfile2
call assert_equal('XcpoAfile2', @#)
- close!
+ bw!
call delete('XcpoAfile2')
let &cpo = save_cpo
endfunc
@@ -81,7 +81,7 @@ func Test_cpo_B()
call assert_equal('abd ', getline(1))
call feedkeys(":imap <buffer> x\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"imap <buffer> x\k', @:)
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -96,7 +96,7 @@ func Test_cpo_c()
set cpo-=c
exe "normal gg/abab\<CR>"
call assert_equal(5, searchcount().total)
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -143,7 +143,7 @@ func Test_cpo_D()
exe "norm! 1gg0f\<c-k>!!"
call assert_equal(1, col('.'))
set cpo-=D
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -183,7 +183,7 @@ func Test_cpo_E()
call assert_beeps('exe "normal v\<C-A>"')
call assert_beeps('exe "normal v\<C-X>"')
set cpo-=E
- close!
+ bw!
endfunc
" Test for the 'f' flag in 'cpo' (read in an empty buffer sets the file name)
@@ -213,7 +213,7 @@ func Test_cpo_F()
set cpo+=F
write XfileCpoF
call assert_equal('XfileCpoF', @%)
- close!
+ bw!
call delete('XfileCpoF')
let &cpo = save_cpo
endfunc
@@ -229,7 +229,7 @@ func Test_cpo_g()
set cpo+=g
edit
call assert_equal(1, line('.'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -245,7 +245,7 @@ func Test_cpo_H()
call setline(1, ' ')
normal! Ia
call assert_equal(' a ', getline(1))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -264,7 +264,7 @@ func Test_cpo_I()
%d
exe "normal i one\<CR>\<Up>"
call assert_equal('', getline(2))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -295,7 +295,7 @@ func Test_cpo_J()
normal (
call assert_equal(colnr, col('.'))
endfor
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -317,7 +317,7 @@ func Test_cpo_l()
set cpo+=l
exe 'normal gg/[\t]' .. "\<CR>"
call assert_equal([4, 10], [col('.'), virtcol('.')])
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -338,7 +338,7 @@ func Test_cpo_L()
call setline(1, 'abcdefghijklmnopqr')
exe "normal 0gR\<Tab>"
call assert_equal("\<Tab>ijklmnopqr", getline(1))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -376,7 +376,7 @@ func Test_cpo_M()
call cursor(2, 1)
call assert_beeps('normal %')
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -392,7 +392,7 @@ func Test_cpo_n()
set cpo+=n
redraw!
call assert_equal('aaaa', Screenline(2))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -409,7 +409,7 @@ func Test_cpo_o()
exe "normal /one/+2\<CR>"
normal n
call assert_equal(5, line('.'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -424,7 +424,7 @@ func Test_cpo_O()
set cpo+=O
write
call assert_equal(['one'], readfile('XfileCpoO'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -462,7 +462,7 @@ func Test_cpo_q()
set cpo+=q
normal gg4J
call assert_equal(4, col('.'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -483,7 +483,7 @@ func Test_cpo_r()
let @/ = 'three'
normal 2G.
call assert_equal('abc three four', getline(2))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -503,7 +503,7 @@ func Test_cpo_R()
3mark r
%!sort
call assert_equal(0, line("'r"))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -530,8 +530,8 @@ func Test_cpo_S()
wincmd p
call assert_equal(0, &autoindent)
wincmd t
- close!
- close!
+ bw!
+ bw!
let &cpo = save_cpo
endfunc
@@ -550,7 +550,7 @@ func Test_cpo_u()
exe "normal iabc\<C-G>udef\<C-G>ughi"
normal uu
call assert_equal('abcdefghi', getline(1))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -574,7 +574,7 @@ func Test_cpo_w()
call assert_equal('hereZZZare some words', getline('.'))
norm! 1gg2elcWYYY
call assert_equal('hereZZZare someYYYwords', getline('.'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -611,7 +611,7 @@ func Test_cpo_X()
normal ggRy
normal 4.
call assert_equal('yyyyxxxaaaaa', getline(1))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -630,7 +630,7 @@ func Test_cpo_y()
normal ggyy
normal 2G.
call assert_equal("two\n", @")
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -647,7 +647,7 @@ func Test_cpo_Z()
setlocal readonly
write!
call assert_equal(1, &readonly)
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -700,7 +700,7 @@ func Test_cpo_percent()
call assert_equal(15, col('.'))
normal 22|%
call assert_equal(27, col('.'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -716,7 +716,7 @@ func Test_cpo_minus()
call assert_beeps('normal 10k')
call assert_equal(3, line('.'))
call assert_fails(10, 'E16:')
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -732,7 +732,7 @@ func Test_cpo_plus()
set cpo+=+
write X2
call assert_equal(0, &modified)
- close!
+ bw!
call delete('X1')
call delete('X2')
let &cpo = save_cpo
@@ -749,7 +749,7 @@ func Test_cpo_star()
set cpo+=*
*a
call assert_equal(1, x)
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -770,7 +770,7 @@ func Test_cpo_gt()
normal gg"Rye
normal "Rye
call assert_equal("\none\none", @r)
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -803,7 +803,7 @@ func Test_cpo_semicolon()
call assert_equal('bbb y', getline(4))
call assert_equal('ccc', getline(5))
call assert_equal('ddd yee y', getline(6))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -828,7 +828,7 @@ func Test_cpo_hash()
call assert_equal(['', 'one', 'two', 'three'], getline(1, '$'))
normal gg2Ozero
call assert_equal(['zero', '', 'one', 'two', 'three'], getline(1, '$'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -858,7 +858,7 @@ func Test_cpo_backslash()
set cpo+=\
exe 'normal gg/[ \-]' .. "\<CR>n"
call assert_equal(2, col('.'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -880,7 +880,7 @@ func Test_cpo_brace()
call assert_equal(2, line('.'))
normal G{
call assert_equal(2, line('.'))
- close!
+ bw!
let &cpo = save_cpo
endfunc
@@ -908,8 +908,53 @@ func Test_cpo_dot()
call delete('Xfoo')
set cpo&
- close!
+ bw!
let &cpo = save_cpo
endfunc
+" Test for the 'z' flag in 'cpo' (make cw and dw work similar and avoid
+" inconsistencies, see :h cpo-z)
+func Test_cpo_z()
+ let save_cpo = &cpo
+ new
+ " Test 1: dw behaves differently from cw
+ call setline(1, ['foo bar baz', 'one two three'])
+ call cursor(1, 1)
+ " dw does not delete the whitespace after the word
+ norm! wcwanother
+ set cpo-=z
+ " dw deletes the whitespace after the word
+ call cursor(2, 1)
+ norm! wcwfour
+ call assert_equal(['foo another baz', 'one fourthree'], getline(1, '$'))
+ " Test 2: d{motion} becomes linewise :h d-special
+ %d
+ call setline(1, ['one ', ' bar', ' e ', 'zwei'])
+ call cursor(2, 1)
+ set cpo+=z
+ " delete operation becomes linewise
+ call feedkeys("fbd/e\\zs\<cr>", 'tnx')
+ call assert_equal(['one ', 'zwei'], getline(1, '$'))
+ %d
+ call setline(1, ['one ', ' bar', ' e ', 'zwei'])
+ call cursor(2, 1)
+ call feedkeys("fbd2w", 'tnx')
+ call assert_equal(['one ', 'zwei'], getline(1, '$'))
+
+ " delete operation does not become line wise
+ set cpo-=z
+ call setline(1, ['one ', ' bar', ' e ', 'zwei'])
+ call cursor(2, 1)
+ call feedkeys("fbd/e\\zs\<cr>", 'tnx')
+ call assert_equal(['one ', ' ', 'zwei'], getline(1, '$')) " codestyle: ignore
+ %d
+ call setline(1, ['one ', ' bar', ' e ', 'zwei'])
+ call cursor(2, 1)
+ call feedkeys("fbd2w", 'tnx')
+ call assert_equal(['one ', ' ', 'zwei'], getline(1, '$'))
+
+ " clean up
+ bw!
+ let &cpo = save_cpo
+endfunc
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_crash.vim b/src/testdir/test_crash.vim
index fd786e5..b334876 100644
--- a/src/testdir/test_crash.vim
+++ b/src/testdir/test_crash.vim
@@ -150,6 +150,13 @@ func Test_crash1_2()
\ ' ; echo "crash 4: [OK]" >> '.. result .. "\<cr>")
call TermWait(buf, 150)
+ let file = 'crash/reverse_text_overflow'
+ let cmn_args = "%s -u NONE -i NONE -n -X -m -n -e -s -S %s -c ':qa!'"
+ let args = printf(cmn_args, vim, file)
+ call term_sendkeys(buf, args ..
+ \ ' ; echo "crash 5: [OK]" >> '.. result .. "\<cr>")
+ call TermWait(buf, 150)
+
" clean up
exe buf .. "bw!"
exe "sp " .. result
@@ -158,6 +165,7 @@ func Test_crash1_2()
\ 'crash 2: [OK]',
\ 'crash 3: [OK]',
\ 'crash 4: [OK]',
+ \ 'crash 5: [OK]',
\ ]
call assert_equal(expected, getline(1, '$'))
@@ -190,6 +198,31 @@ func Test_crash1_3()
call term_sendkeys(buf, args)
call TermWait(buf, 150)
+ let file = 'crash/double_free'
+ let cmn_args = "%s -u NONE -i NONE -n -e -s -S %s -c ':qa!'\<cr>"
+ let args = printf(cmn_args, vim, file)
+ call term_sendkeys(buf, args)
+ call TermWait(buf, 50)
+
+ let file = 'crash/dialog_changed_uaf'
+ let cmn_args = "%s -u NONE -i NONE -n -e -s -S %s -c ':qa!'\<cr>"
+ let args = printf(cmn_args, vim, file)
+ call term_sendkeys(buf, args)
+ call TermWait(buf, 150)
+
+ let file = 'crash/nullpointer'
+ let cmn_args = "%s -u NONE -i NONE -n -e -s -S %s -c ':qa!'\<cr>"
+ let args = printf(cmn_args, vim, file)
+ call term_sendkeys(buf, args)
+ call TermWait(buf, 50)
+
+ let file = 'crash/heap_overflow3'
+ let cmn_args = "%s -u NONE -i NONE -n -X -m -n -e -s -S %s -c ':qa!'"
+ let args = printf(cmn_args, vim, file)
+ call term_sendkeys(buf, args)
+ call TermWait(buf, 150)
+
+
" clean up
exe buf .. "bw!"
bw!
@@ -204,4 +237,11 @@ func Test_crash2()
exe buf .. "bw!"
endfunc
+func TearDown()
+ " That file is created at Test_crash1_3() by dialog_changed_uaf
+ " but cleaning up in that test doesn't remove it. Let's try again at
+ " the end of this test script
+ call delete('Untitled')
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_eval_stuff.vim b/src/testdir/test_eval_stuff.vim
index a346399..1b17108 100644
--- a/src/testdir/test_eval_stuff.vim
+++ b/src/testdir/test_eval_stuff.vim
@@ -2,6 +2,7 @@
source view_util.vim
source shared.vim
+import './vim9.vim' as v9
function s:foo() abort
try
@@ -126,7 +127,31 @@ func Test_for_invalid()
call assert_fails("for x in 99", 'E1098:')
call assert_fails("for x in function('winnr')", 'E1098:')
call assert_fails("for x in {'a': 9}", 'E1098:')
- call assert_fails("for v:maxcol in range(1)", 'E46:')
+
+ let lines =<< trim END
+ for v:maxcol in range(5)
+ endfor
+ END
+
+ let save_v_maxcol = v:maxcol
+ call v9.CheckLegacyAndVim9Failure(lines, 'E46:')
+ call assert_equal(save_v_maxcol, v:maxcol)
+
+ let lines =<< trim END
+ for g:constvar in range(5)
+ endfor
+ END
+
+ const g:constvar = 10
+ call v9.CheckLegacyAndVim9Failure(lines, 'E741:')
+ call assert_equal(10, g:constvar)
+ unlet g:constvar
+
+ let g:constvar = 10
+ lockvar 0 g:constvar
+ call v9.CheckLegacyAndVim9Failure(lines, 'E1122:')
+ call assert_equal(10, g:constvar)
+ unlet g:constvar
if 0
/1/5/2/s/\n
diff --git a/src/testdir/test_ex_mode.vim b/src/testdir/test_ex_mode.vim
index 59c28f3..aa94935 100644
--- a/src/testdir/test_ex_mode.vim
+++ b/src/testdir/test_ex_mode.vim
@@ -68,7 +68,7 @@ func Test_Ex_substitute()
CheckRunVimInTerminal
let buf = RunVimInTerminal('', {'rows': 6})
- call term_sendkeys(buf, ":call setline(1, ['foo foo', 'foo foo', 'foo foo'])\<CR>")
+ call term_sendkeys(buf, ":call setline(1, repeat(['foo foo'], 4))\<CR>")
call term_sendkeys(buf, ":set number\<CR>")
call term_sendkeys(buf, "gQ")
call WaitForAssert({-> assert_match(':', term_getline(buf, 6))}, 1000)
@@ -90,8 +90,14 @@ func Test_Ex_substitute()
" Pressing enter in ex mode should print the current line
call term_sendkeys(buf, "\<CR>")
- call WaitForAssert({-> assert_match(' 3 foo foo',
- \ term_getline(buf, 5))}, 1000)
+ call WaitForAssert({-> assert_match(' 3 foo foo', term_getline(buf, 5))}, 1000)
+ call WaitForAssert({-> assert_match(':', term_getline(buf, 6))}, 1000)
+
+ " The printed line should overwrite the colon
+ call term_sendkeys(buf, "\<CR>")
+ call WaitForAssert({-> assert_match(' 3 foo foo', term_getline(buf, 4))}, 1000)
+ call WaitForAssert({-> assert_match(' 4 foo foo', term_getline(buf, 5))}, 1000)
+ call WaitForAssert({-> assert_match(':', term_getline(buf, 6))}, 1000)
call term_sendkeys(buf, ":vi\<CR>")
call WaitForAssert({-> assert_match('foo bar', term_getline(buf, 1))}, 1000)
@@ -165,6 +171,37 @@ func Test_Ex_global()
call assert_equal('bax', getline(3))
call assert_equal('bay', getline(5))
bwipe!
+
+ new
+ call setline(1, ['foo', 'bar'])
+ call feedkeys("Qg/./i\\\na\\\n.\\\na\\\nb\\\n.", "xt")
+ call assert_equal(['a', 'b', 'foo', 'a', 'b', 'bar'], getline(1, '$'))
+ bwipe!
+endfunc
+
+func Test_Ex_shell()
+ CheckUnix
+
+ new
+ call feedkeys("Qr !echo foo\\\necho bar\n", 'xt')
+ call assert_equal(['', 'foo', 'bar'], getline(1, '$'))
+ bwipe!
+
+ new
+ call feedkeys("Qr !echo foo\\\\\nbar\n", 'xt')
+ call assert_equal(['', 'foobar'], getline(1, '$'))
+ bwipe!
+
+ new
+ call feedkeys("Qr !echo foo\\ \\\necho bar\n", 'xt')
+ call assert_equal(['', 'foo ', 'bar'], getline(1, '$'))
+ bwipe!
+
+ new
+ call setline(1, ['bar', 'baz'])
+ call feedkeys("Qg/./!echo \\\ns/b/c/", "xt")
+ call assert_equal(['car', 'caz'], getline(1, '$'))
+ bwipe!
endfunc
" Test for pressing Ctrl-C in :append inside a loop in Ex mode
@@ -204,18 +241,11 @@ func Test_Ex_append()
call feedkeys("Qappend!\npqr\nxyz\n.\nvisual\n", 'xt')
call assert_equal(["\t abc", "\t pqr", "\t xyz"], getline(1, '$'))
close!
-endfunc
-" In Ex-mode, backslashes at the end of a command should be halved.
-func Test_Ex_echo_backslash()
- " This test works only when the language is English
- CheckEnglish
- let bsl = '\\\\'
- let bsl2 = '\\\'
- call assert_fails('call feedkeys("Qecho " .. bsl .. "\nvisual\n", "xt")',
- \ 'E15: Invalid expression: "\\"')
- call assert_fails('call feedkeys("Qecho " .. bsl2 .. "\nm\nvisual\n", "xt")',
- \ "E15: Invalid expression: \"\\\nm\"")
+ new
+ call feedkeys("Qappend\na\\\n.", 'xt')
+ call assert_equal(['a\'], getline(1, '$'))
+ close!
endfunc
func Test_ex_mode_errors()
@@ -314,5 +344,47 @@ func Test_empty_command_visual_mode()
call delete('guidialogfile')
endfunc
+" Test using backslash in ex-mode
+func Test_backslash_multiline()
+ new
+ call setline(1, 'enum')
+ call feedkeys('Qg/enum/i\ \ .', "xt")
+ call assert_equal(["", "enum"], getline(1, 2))
+endfunc
+
+" Test using backslash in ex-mode after patch 9.1.0535
+func Test_backslash_multiline2()
+ new
+ call feedkeys('Qa X \\ Y .', "xt")
+ call assert_equal(['X \\', "Y"], getline(1, 2))
+endfunc
+
+" Testing implicit print command
+func Test_implicit_print()
+ new
+ call setline(1, ['one', 'two', 'three'])
+ call feedkeys('Q:let a=execute(":1,2")', 'xt')
+ call feedkeys('Q:let b=execute(":3")', 'xt')
+ call assert_equal('one two', a->split('\n')->join(' '))
+ call assert_equal('three', b->split('\n')->join(' '))
+ bw!
+endfunc
+
+" Test inserting text after the trailing bar
+func Test_insert_after_trailing_bar()
+ new
+ call feedkeys("Qi|\nfoo\n.\na|bar\nbar\n.\nc|baz\n.", "xt")
+ call assert_equal(['', 'foo', 'bar', 'baz'], getline(1, '$'))
+ bwipe!
+endfunc
+
+" Test global insert of a newline without terminating period
+func Test_global_insert_newline()
+ new
+ call setline(1, ['foo'])
+ call feedkeys("Qg/foo/i\\\n", "xt")
+ call assert_equal(['', 'foo'], getline(1, '$'))
+ bwipe!
+endfunc
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_excmd.vim b/src/testdir/test_excmd.vim
index 221ceb0..3b7e489 100644
--- a/src/testdir/test_excmd.vim
+++ b/src/testdir/test_excmd.vim
@@ -703,6 +703,8 @@ func Test_address_line_overflow()
call setline(1, range(100))
call assert_fails('|.44444444444444444444444', 'E1247:')
call assert_fails('|.9223372036854775806', 'E1247:')
+ call assert_fails('.44444444444444444444444d', 'E1247:')
+ call assert_equal(range(100)->map('string(v:val)'), getline(1, '$'))
$
yank 77777777777777777777
diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim
index d0a078f..1e6c39e 100644
--- a/src/testdir/test_filetype.vim
+++ b/src/testdir/test_filetype.vim
@@ -95,6 +95,7 @@ def s:GetFilenameChecks(): dict<list<string>>
aml: ['file.aml'],
ampl: ['file.run'],
ant: ['build.xml'],
+ antlr4: ['parser.g4'],
apache: ['.htaccess', '/etc/httpd/file.conf', '/etc/apache2/sites-2/file.com', '/etc/apache2/some.config', '/etc/apache2/conf.file/conf', '/etc/apache2/mods-some/file', '/etc/apache2/sites-some/file', '/etc/httpd/conf.d/file.config', '/etc/apache2/conf.file/file', '/etc/apache2/file.conf', '/etc/apache2/file.conf-file', '/etc/apache2/mods-file/file', '/etc/apache2/sites-file/file', '/etc/apache2/sites-file/file.com', '/etc/httpd/conf.d/file.conf', '/etc/httpd/conf.d/file.conf-file', 'access.conf', 'access.conf-file', 'any/etc/apache2/conf.file/file', 'any/etc/apache2/file.conf', 'any/etc/apache2/file.conf-file', 'any/etc/apache2/mods-file/file', 'any/etc/apache2/sites-file/file', 'any/etc/apache2/sites-file/file.com', 'any/etc/httpd/conf.d/file.conf', 'any/etc/httpd/conf.d/file.conf-file', 'any/etc/httpd/file.conf', 'apache.conf', 'apache.conf-file', 'apache2.conf', 'apache2.conf-file', 'httpd.conf', 'httpd.conf-file', 'srm.conf', 'srm.conf-file', '/etc/httpd/mods-some/file', '/etc/httpd/sites-some/file', '/etc/httpd/conf.file/conf'],
apachestyle: ['/etc/proftpd/file.config,/etc/proftpd/conf.file/file', '/etc/proftpd/conf.file/file', '/etc/proftpd/file.conf', '/etc/proftpd/file.conf-file', 'any/etc/proftpd/conf.file/file', 'any/etc/proftpd/file.conf', 'any/etc/proftpd/file.conf-file', 'proftpd.conf', 'proftpd.conf-file'],
applescript: ['file.scpt'],
@@ -106,6 +107,7 @@ def s:GetFilenameChecks(): dict<list<string>>
asn: ['file.asn', 'file.asn1'],
asterisk: ['asterisk/file.conf', 'asterisk/file.conf-file', 'some-asterisk/file.conf', 'some-asterisk/file.conf-file'],
astro: ['file.astro'],
+ asy: ['file.asy'],
atlas: ['file.atl', 'file.as'],
authzed: ['schema.zed'],
autohotkey: ['file.ahk'],
@@ -121,7 +123,7 @@ def s:GetFilenameChecks(): dict<list<string>>
beancount: ['file.beancount'],
bib: ['file.bib'],
bicep: ['file.bicep', 'file.bicepparam'],
- bindzone: ['named.root', '/bind/db.file', '/named/db.file', 'any/bind/db.file', 'any/named/db.file'],
+ bindzone: ['named.root', '/bind/db.file', '/named/db.file', 'any/bind/db.file', 'any/named/db.file', 'foobar.zone'],
bitbake: ['file.bb', 'file.bbappend', 'file.bbclass', 'build/conf/local.conf', 'meta/conf/layer.conf', 'build/conf/bbappend.conf', 'meta-layer/conf/distro/foo.conf'],
blade: ['file.blade.php'],
blank: ['file.bl'],
@@ -142,6 +144,7 @@ def s:GetFilenameChecks(): dict<list<string>>
cdl: ['file.cdl'],
cdrdaoconf: ['/etc/cdrdao.conf', '/etc/defaults/cdrdao', '/etc/default/cdrdao', '.cdrdao', 'any/etc/cdrdao.conf', 'any/etc/default/cdrdao', 'any/etc/defaults/cdrdao'],
cdrtoc: ['file.toc'],
+ cedar: ['file.cedar'],
cf: ['file.cfm', 'file.cfi', 'file.cfc'],
cfengine: ['cfengine.conf'],
cfg: ['file.hgrc', 'filehgrc', 'hgrc', 'some-hgrc'],
@@ -160,7 +163,7 @@ def s:GetFilenameChecks(): dict<list<string>>
cmakecache: ['CMakeCache.txt'],
cmod: ['file.cmod'],
cmusrc: ['any/.cmus/autosave', 'any/.cmus/rc', 'any/.cmus/command-history', 'any/.cmus/file.theme', 'any/cmus/rc', 'any/cmus/file.theme', '/.cmus/autosave', '/.cmus/command-history', '/.cmus/file.theme', '/.cmus/rc', '/cmus/file.theme', '/cmus/rc'],
- cobol: ['file.cbl', 'file.cob', 'file.lib'],
+ cobol: ['file.cbl', 'file.cob'],
coco: ['file.atg'],
conaryrecipe: ['file.recipe'],
conf: ['auto.master', 'file.conf', 'texdoc.cnf', '.x11vncrc', '.chktexrc', '.ripgreprc', 'ripgreprc', 'file.ctags', '.mbsyncrc'],
@@ -222,11 +225,11 @@ def s:GetFilenameChecks(): dict<list<string>>
'psprint.conf', 'sofficerc', 'any/.config/lxqt/globalkeyshortcuts.conf', 'any/.config/screengrab/screengrab.conf',
'any/.local/share/flatpak/repo/config', '.notmuch-config'],
dot: ['file.dot', 'file.gv'],
- dracula: ['file.drac', 'file.drc', 'filelvs', 'filelpe', 'drac.file', 'lpe', 'lvs', 'some-lpe', 'some-lvs'],
+ dracula: ['file.drac', 'file.drc', 'file.lvs', 'file.lpe', 'drac.file'],
dtd: ['file.dtd'],
dtrace: ['/usr/lib/dtrace/io.d'],
dts: ['file.dts', 'file.dtsi', 'file.dtso', 'file.its', 'file.keymap'],
- dune: ['jbuild', 'dune', 'dune-project', 'dune-workspace'],
+ dune: ['jbuild', 'dune', 'dune-project', 'dune-workspace', 'dune-file'],
dylan: ['file.dylan'],
dylanintr: ['file.intr'],
dylanlid: ['file.lid'],
@@ -256,6 +259,7 @@ def s:GetFilenameChecks(): dict<list<string>>
factor: ['file.factor'],
falcon: ['file.fal'],
fan: ['file.fan', 'file.fwt'],
+ faust: ['file.dsp', 'file.lib'],
fennel: ['file.fnl'],
fetchmail: ['.fetchmailrc'],
fgl: ['file.4gl', 'file.4gh', 'file.m4gl'],
@@ -285,17 +289,18 @@ def s:GetFilenameChecks(): dict<list<string>>
gitattributes: ['file.git/info/attributes', '.gitattributes', '/.config/git/attributes', '/etc/gitattributes', '/usr/local/etc/gitattributes', 'some.git/info/attributes'] + WhenConfigHome('$XDG_CONFIG_HOME/git/attributes'),
gitcommit: ['COMMIT_EDITMSG', 'MERGE_MSG', 'TAG_EDITMSG', 'NOTES_EDITMSG', 'EDIT_DESCRIPTION'],
gitconfig: ['file.git/config', 'file.git/config.worktree', 'file.git/worktrees/x/config.worktree', '.gitconfig', '.gitmodules', 'file.git/modules//config', '/.config/git/config', '/etc/gitconfig', '/usr/local/etc/gitconfig', '/etc/gitconfig.d/file', 'any/etc/gitconfig.d/file', '/.gitconfig.d/file', 'any/.config/git/config', 'any/.gitconfig.d/file', 'some.git/config', 'some.git/modules/any/config'] + WhenConfigHome('$XDG_CONFIG_HOME/git/config'),
- gitignore: ['file.git/info/exclude', '.gitignore', '/.config/git/ignore', 'some.git/info/exclude'] + WhenConfigHome('$XDG_CONFIG_HOME/git/ignore'),
+ gitignore: ['file.git/info/exclude', '.gitignore', '/.config/git/ignore', 'some.git/info/exclude'] + WhenConfigHome('$XDG_CONFIG_HOME/git/ignore') + ['.prettierignore'],
gitolite: ['gitolite.conf', '/gitolite-admin/conf/file', 'any/gitolite-admin/conf/file'],
gitrebase: ['git-rebase-todo'],
gitsendemail: ['.gitsendemail.msg.xxxxxx'],
gkrellmrc: ['gkrellmrc', 'gkrellmrc_x'],
gleam: ['file.gleam'],
- glsl: ['file.glsl'],
+ glsl: ['file.glsl', 'file.vert', 'file.tesc', 'file.tese', 'file.geom', 'file.frag', 'file.comp', 'file.rgen', 'file.rmiss', 'file.rchit', 'file.rahit', 'file.rint', 'file.rcall'],
gn: ['file.gn', 'file.gni'],
gnash: ['gnashrc', '.gnashrc', 'gnashpluginrc', '.gnashpluginrc'],
gnuplot: ['file.gpi', '.gnuplot', 'file.gnuplot', '.gnuplot_history'],
go: ['file.go'],
+ goaccess: ['goaccess.conf'],
gomod: ['go.mod'],
gosum: ['go.sum', 'go.work.sum'],
gowork: ['go.work'],
@@ -332,6 +337,7 @@ def s:GetFilenameChecks(): dict<list<string>>
hoon: ['file.hoon'],
hostconf: ['/etc/host.conf', 'any/etc/host.conf'],
hostsaccess: ['/etc/hosts.allow', '/etc/hosts.deny', 'any/etc/hosts.allow', 'any/etc/hosts.deny'],
+ # file.component.html should be HTML, not Angular, see #13594
html: ['file.html', 'file.htm', 'file.cshtml', 'file.component.html'],
htmlm4: ['file.html.m4'],
httest: ['file.htt', 'file.htb'],
@@ -364,7 +370,9 @@ def s:GetFilenameChecks(): dict<list<string>>
jq: ['file.jq'],
jovial: ['file.jov', 'file.j73', 'file.jovial'],
jproperties: ['file.properties', 'file.properties_xx', 'file.properties_xx_xx', 'some.properties_xx_xx_file', 'org.eclipse.xyz.prefs'],
- json: ['file.json', 'file.jsonp', 'file.json-patch', 'file.geojson', 'file.webmanifest', 'Pipfile.lock', 'file.ipynb', 'file.jupyterlab-settings', '.prettierrc', '.firebaserc', '.stylelintrc', '.lintstagedrc', 'file.slnf', 'file.sublime-project', 'file.sublime-settings', 'file.sublime-workspace', 'file.bd', 'file.bda', 'file.xci', 'flake.lock'],
+ json: ['file.json', 'file.jsonp', 'file.json-patch', 'file.geojson', 'file.webmanifest', 'Pipfile.lock', 'file.ipynb', 'file.jupyterlab-settings',
+ '.prettierrc', '.firebaserc', '.stylelintrc', '.lintstagedrc', 'file.slnf', 'file.sublime-project', 'file.sublime-settings', 'file.sublime-workspace',
+ 'file.bd', 'file.bda', 'file.xci', 'flake.lock', 'pack.mcmeta', 'deno.lock'],
json5: ['file.json5'],
jsonc: ['file.jsonc', '.babelrc', '.eslintrc', '.jsfmtrc', '.jshintrc', '.jscsrc', '.vsconfig', '.hintrc', '.swrc', 'jsconfig.json', 'tsconfig.json', 'tsconfig.test.json', 'tsconfig-test.json', '.luaurc'],
jsonl: ['file.jsonl'],
@@ -383,6 +391,7 @@ def s:GetFilenameChecks(): dict<list<string>>
lace: ['file.ace', 'file.ACE'],
latte: ['file.latte', 'file.lte'],
ld: ['file.ld', 'any/usr/lib/aarch64-xilinx-linux/ldscripts/aarch64elf32b.x'],
+ ldapconf: ['ldap.conf', '.ldaprc', 'ldaprc'],
ldif: ['file.ldif'],
lean: ['file.lean'],
ledger: ['file.ldg', 'file.ledger', 'file.journal'],
@@ -420,18 +429,19 @@ def s:GetFilenameChecks(): dict<list<string>>
mail: ['snd.123', '.letter', '.letter.123', '.followup', '.article', '.article.123', 'pico.123', 'mutt-xx-xxx', 'muttng-xx-xxx', 'ae123.txt', 'file.eml', 'reportbug-file'],
mailaliases: ['/etc/mail/aliases', '/etc/aliases', 'any/etc/aliases', 'any/etc/mail/aliases'],
mailcap: ['.mailcap', 'mailcap'],
- make: ['file.mk', 'file.mak', 'file.dsp', 'makefile', 'Makefile', 'makefile-file', 'Makefile-file', 'some-makefile', 'some-Makefile', 'Kbuild'],
+ make: ['file.mk', 'file.mak', 'makefile', 'Makefile', 'makefile-file', 'Makefile-file', 'some-makefile', 'some-Makefile', 'Kbuild'],
mallard: ['file.page'],
man: ['file.man'],
manconf: ['/etc/man.conf', 'man.config', 'any/etc/man.conf'],
map: ['file.map'],
maple: ['file.mv', 'file.mpl', 'file.mws'],
markdown: ['file.markdown', 'file.mdown', 'file.mkd', 'file.mkdn', 'file.mdwn', 'file.md'],
- mason: ['file.mason', 'file.mhtml', 'file.comp'],
+ mason: ['file.mason', 'file.mhtml'],
master: ['file.mas', 'file.master'],
matlab: ['file.m'],
maxima: ['file.demo', 'file.dmt', 'file.dm1', 'file.dm2', 'file.dm3',
'file.wxm', 'maxima-init.mac'],
+ mediawiki: ['file.mw', 'file.wiki'],
mel: ['file.mel'],
mermaid: ['file.mmd', 'file.mmdc', 'file.mermaid'],
meson: ['meson.build', 'meson.options', 'meson_options.txt'],
@@ -466,7 +476,7 @@ def s:GetFilenameChecks(): dict<list<string>>
mgp: ['file.mgp'],
mib: ['file.mib', 'file.my'],
mix: ['file.mix', 'file.mixal'],
- mma: ['file.nb'],
+ mma: ['file.nb', 'file.wl'],
mmp: ['file.mmp'],
modconf: ['/etc/modules.conf', '/etc/modules', '/etc/conf.modules', '/etc/modprobe.file', 'any/etc/conf.modules', 'any/etc/modprobe.file', 'any/etc/modules', 'any/etc/modules.conf'],
modula3: ['file.m3', 'file.mg', 'file.i3', 'file.ig', 'file.lm3'],
@@ -522,7 +532,7 @@ def s:GetFilenameChecks(): dict<list<string>>
odin: ['file.odin'],
omnimark: ['file.xom', 'file.xin'],
ondir: ['.ondirrc'],
- opam: ['opam', 'file.opam', 'file.opam.template'],
+ opam: ['opam', 'file.opam', 'file.opam.template', 'opam.locked', 'file.opam.locked'],
openroad: ['file.or'],
openscad: ['file.scad'],
openvpn: ['file.ovpn', '/etc/openvpn/client/client.conf', '/usr/share/openvpn/examples/server.conf'],
@@ -645,7 +655,8 @@ def s:GetFilenameChecks(): dict<list<string>>
sh: ['.bashrc', '.bash_profile', '.bash-profile', '.bash_logout', '.bash-logout', '.bash_aliases', '.bash-aliases', '.bash_history', '.bash-history',
'/tmp/bash-fc-3Ozjlw', '/tmp/bash-fc.3Ozjlw', 'PKGBUILD', 'APKBUILD', 'file.bash', '/usr/share/doc/bash-completion/filter.sh',
'/etc/udev/cdsymlinks.conf', 'any/etc/udev/cdsymlinks.conf', 'file.bats', '.ash_history', 'any/etc/neofetch/config.conf', '.xprofile',
- 'user-dirs.defaults', 'user-dirs.dirs', 'makepkg.conf', '.makepkg.conf', 'file.mdd', 'file.cygport'],
+ 'user-dirs.defaults', 'user-dirs.dirs', 'makepkg.conf', '.makepkg.conf', 'file.mdd', 'file.cygport', '.env', '.envrc', 'devscripts.conf',
+ '.devscripts'],
sieve: ['file.siv', 'file.sieve'],
sil: ['file.sil'],
simula: ['file.sim'],
@@ -759,7 +770,7 @@ def s:GetFilenameChecks(): dict<list<string>>
teraterm: ['file.ttl'],
terminfo: ['file.ti'],
'terraform-vars': ['file.tfvars'],
- tex: ['file.latex', 'file.sty', 'file.dtx', 'file.ltx', 'file.bbl', 'any/.texlive/texmf-config/tex/latex/file/file.cfg', 'file.pgf', 'file.nlo', 'file.nls', 'file.thm', 'file.eps_tex', 'file.pygtex', 'file.pygstyle', 'file.clo', 'file.aux', 'file.brf', 'file.ind', 'file.lof', 'file.loe', 'file.nav', 'file.vrb', 'file.ins', 'file.tikz', 'file.bbx', 'file.cbx', 'file.beamer'],
+ tex: ['file.latex', 'file.sty', 'file.dtx', 'file.ltx', 'file.bbl', 'any/.texlive/texmf-config/tex/latex/file/file.cfg', 'file.pgf', 'file.nlo', 'file.nls', 'file.thm', 'file.eps_tex', 'file.pygtex', 'file.pygstyle', 'file.clo', 'file.aux', 'file.brf', 'file.ind', 'file.lof', 'file.loe', 'file.nav', 'file.vrb', 'file.ins', 'file.tikz', 'file.bbx', 'file.cbx', 'file.beamer', 'file.pdf_tex'],
texinfo: ['file.texinfo', 'file.texi', 'file.txi'],
texmf: ['texmf.cnf'],
text: ['file.text', 'file.txt', 'README', 'LICENSE', 'COPYING', 'AUTHORS', '/usr/share/doc/bash-completion/AUTHORS', '/etc/apt/apt.conf.d/README', '/etc/Muttrc.d/README'],
@@ -854,6 +865,8 @@ def s:GetFilenameChecks(): dict<list<string>>
z8a: ['file.z8a'],
zathurarc: ['zathurarc'],
zig: ['file.zig', 'build.zig.zon'],
+ ziggy: ['file.ziggy'],
+ ziggy_schema: ['file.ziggy-schema'],
zimbu: ['file.zu'],
zimbutempl: ['file.zut'],
zserio: ['file.zs'],
@@ -1043,7 +1056,8 @@ func Test_emptybuf_ftdetect()
call assert_equal('', &filetype)
filetype detect
call assert_equal('sh', &filetype)
- close!
+ " close the swapfile
+ bw!
endfunc
" Test for ':filetype indent on' and ':filetype indent off' commands
@@ -1567,6 +1581,73 @@ func Test_hook_file()
filetype off
endfunc
+func Test_html_file()
+ filetype on
+
+ " HTML Angular
+ let content = ['@for (item of items; track item.name) {', ' <li> {{ item.name }}</li>', '} @empty {', ' <li> There are no items.</li>', '}']
+ call writefile(content, 'Xfile.html', 'D')
+ split Xfile.html
+ call assert_equal('htmlangular', &filetype)
+ bwipe!
+
+ " Django Template
+ let content = ['{% if foobar %}',
+ \ ' <ul>',
+ \ ' {% for question in list %}',
+ \ ' <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>',
+ \ ' {% endfor %}',
+ \ ' </ul>',
+ \ '{% else %}',
+ \ ' <p>No polls are available.</p>',
+ \ '{% endif %}']
+ call writefile(content, 'Xfile.html', 'D')
+ split Xfile.html
+ call assert_equal('htmldjango', &filetype)
+ bwipe!
+
+ " Super html layout
+ let content = ['<extend template="base.shtml">',
+ \ '<title id="title" var="$page.title"></title>',
+ \ '<head id="head"></head>',
+ \ '<div id="content">',
+ \ '</div>']
+ call writefile(content, 'Xfile.shtml', 'D')
+ split Xfile.shtml
+ call assert_equal('superhtml', &filetype)
+ bwipe!
+
+ " Super html template
+ let content = ['<!DOCTYPE html>',
+ \ '<html>',
+ \ ' <head id="head">',
+ \ ' <title id="title">',
+ \ ' <super>',
+ \ ' suffix',
+ \ ' </title>',
+ \ ' <super>',
+ \ ' </head>',
+ \ ' <body>',
+ \ ' <div id="content">',
+ \ ' <super>',
+ \ ' </div>',
+ \ ' </body>',
+ \ '</html>']
+ call writefile(content, 'Xfile.shtml', 'D')
+ split Xfile.shtml
+ call assert_equal('superhtml', &filetype)
+ bwipe!
+
+ " regular HTML
+ let content = ['<!DOCTYPE html>', '<html>', ' <head>Foobar</head>', ' <body>Content', ' </body>', '</html>']
+ call writefile(content, 'Xfile.html', 'D')
+ split Xfile.html
+ call assert_equal('html', &filetype)
+ bwipe!
+
+ filetype off
+endfunc
+
func Test_m_file()
filetype on
@@ -2401,6 +2482,32 @@ func Test_typ_file()
filetype off
endfunc
+func Test_dsp_file()
+ filetype on
+
+ " Microsoft Developer Studio Project file
+
+ call writefile(['# Microsoft Developer Studio Project File'], 'Xfile.dsp', 'D')
+ split Xfile.dsp
+ call assert_equal('make', &filetype)
+ bwipe!
+
+ let g:filetype_dsp = 'make'
+ split test.dsp
+ call assert_equal('make', &filetype)
+ bwipe!
+ unlet g:filetype_dsp
+
+ " Faust
+
+ call writefile(['this is a fallback'], 'Xfile.dsp')
+ split Xfile.dsp
+ call assert_equal('faust', &filetype)
+ bwipe!
+
+ filetype off
+endfunc
+
func Test_vba_file()
filetype on
@@ -2509,4 +2616,86 @@ func Test_uci_file()
filetype off
endfunc
+func Test_pro_file()
+ filetype on
+
+ "Prolog
+ call writefile([':-module(test/1,'], 'Xfile.pro', 'D')
+ split Xfile.pro
+ call assert_equal('prolog', &filetype)
+ bwipe!
+
+ call writefile(['% comment'], 'Xfile.pro', 'D')
+ split Xfile.pro
+ call assert_equal('prolog', &filetype)
+ bwipe!
+
+ call writefile(['/* multiline comment'], 'Xfile.pro', 'D')
+ split Xfile.pro
+ call assert_equal('prolog', &filetype)
+ bwipe!
+
+ call writefile(['rule(test, 1.7).'], 'Xfile.pro', 'D')
+ split Xfile.pro
+ call assert_equal('prolog', &filetype)
+ bwipe!
+
+ " IDL
+ call writefile(['x = findgen(100)/10'], 'Xfile.pro', 'D')
+ split Xfile.pro
+ call assert_equal('idlang', &filetype)
+
+ filetype off
+endfunc
+
+
+func Test_pl_file()
+ filetype on
+
+ "Prolog
+ call writefile([':-module(test/1,'], 'Xfile.pl', 'D')
+ split Xfile.pl
+ call assert_equal('prolog', &filetype)
+ bwipe!
+
+ call writefile(['% comment'], 'Xfile.pl', 'D')
+ split Xfile.pl
+ call assert_equal('prolog', &filetype)
+ bwipe!
+
+ call writefile(['/* multiline comment'], 'Xfile.pl', 'D')
+ split Xfile.pl
+ call assert_equal('prolog', &filetype)
+ bwipe!
+
+ call writefile(['rule(test, 1.7).'], 'Xfile.pl', 'D')
+ split Xfile.pl
+ call assert_equal('prolog', &filetype)
+ bwipe!
+
+ " Perl
+ call writefile(['%data = (1, 2, 3);'], 'Xfile.pl', 'D')
+ split Xfile.pl
+ call assert_equal('perl', &filetype)
+
+ filetype off
+endfunc
+
+func Test_make_file()
+ filetype on
+
+ " Microsoft Makefile
+ call writefile(['# Makefile for Windows', '!if "$(VIMDLL)" == "yes"'], 'XMakefile.mak', 'D')
+ split XMakefile.mak
+ call assert_equal(1, get(b:, 'make_microsoft', 0))
+ bwipe!
+
+ call writefile(['# get the list of tests', 'include testdir/Make_all.mak'], 'XMakefile.mak', 'D')
+ split XMakefile.mak
+ call assert_equal(0, get(b:, 'make_microsoft', 0))
+ bwipe!
+
+ filetype off
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_findfile.vim b/src/testdir/test_findfile.vim
index 20d5096..a5e18b9 100644
--- a/src/testdir/test_findfile.vim
+++ b/src/testdir/test_findfile.vim
@@ -98,14 +98,48 @@ func Test_findfile()
" Test upwards search with stop-directory.
cd Xdir2
+ let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3/', -1)
+ call assert_equal(1, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3', -1)
+ call assert_equal(1, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ let l = findfile('bar', ';../', -1)
+ call assert_equal(1, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ let l = findfile('bar', ';..', -1)
+ call assert_equal(1, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/', -1)
call assert_equal(1, len(l))
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2', -1)
+ call assert_equal(1, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ let l = findfile('bar', ';../../', -1)
+ call assert_equal(1, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ let l = findfile('bar', ';../..', -1)
+ call assert_equal(1, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
let l = findfile('bar', ';' . save_dir . '/Xfinddir1/', -1)
call assert_equal(2, len(l))
call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
call assert_match('.*/Xfinddir1/bar', l[1])
+ let l = findfile('bar', ';' . save_dir . '/Xfinddir1', -1)
+ call assert_equal(2, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ call assert_match('.*/Xfinddir1/bar', l[1])
+ let l = findfile('bar', ';../../../', -1)
+ call assert_equal(2, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ call assert_match('.*/Xfinddir1/bar', l[1])
+ let l = findfile('bar', ';../../..', -1)
+ call assert_equal(2, len(l))
+ call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
+ call assert_match('.*/Xfinddir1/bar', l[1])
" Test combined downwards and upwards search from Xdir2/.
cd ../..
@@ -133,6 +167,7 @@ func Test_finddir()
let save_shellslash = &shellslash
let save_dir = getcwd()
set path=,,
+ set shellslash
call CreateFiles()
cd Xfinddir1
diff --git a/src/testdir/test_fnamemodify.vim b/src/testdir/test_fnamemodify.vim
index c19f464..4e61343 100644
--- a/src/testdir/test_fnamemodify.vim
+++ b/src/testdir/test_fnamemodify.vim
@@ -14,6 +14,8 @@ func Test_fnamemodify()
call assert_equal($HOME .. "/foo" , fnamemodify('~/foo', ':p'))
call assert_equal(fnamemodify('.', ':p:h:h:h') .. '/', fnamemodify($HOME .. '/../', ':p'))
call assert_equal(fnamemodify('.', ':p:h:h:h') .. '/', fnamemodify($HOME .. '/..', ':p'))
+ call assert_equal(fnamemodify('.', ':p:h:h') .. '/', fnamemodify('../', ':p'))
+ call assert_equal(fnamemodify('.', ':p:h:h') .. '/', fnamemodify('..', ':p'))
call assert_equal('test.out', fnamemodify('test.out', ':.'))
call assert_equal('a', fnamemodify('../testdir/a', ':.'))
call assert_equal('~/testdir/test.out', fnamemodify('test.out', ':~'))
diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim
index dedc4a2..17487a5 100644
--- a/src/testdir/test_fold.vim
+++ b/src/testdir/test_fold.vim
@@ -1914,4 +1914,39 @@ func Test_foldexpr_end_fold()
bwipe!
endfunc
+" Test moving cursor down to or beyond start of folded end of buffer.
+func Test_cursor_down_fold_eob()
+ call setline(1, range(1, 4))
+ norm Gzf2kj
+ call assert_equal(2, line('.'))
+ norm zojzc
+ call assert_equal(3, line('.'))
+ norm j
+ call assert_equal(3, line('.'))
+ norm k2j
+ call assert_equal(4, line('.'))
+ bwipe!
+endfunc
+
+" issue: #15455
+func Test_cursor_fold_marker_undo()
+ new
+ call setline(1, ['{{{', '', 'This is a Line', '', 'This is a Line', '', '}}}'])
+ let &ul=&ul
+ setl foldmethod=marker
+ call cursor(2, 1)
+ norm! zo1vjdu
+ call assert_equal(1, foldlevel('.'))
+ bwipe!
+ new
+ call setline(1, ['', '{{{', '', 'This is a Line', '', 'This is a Line', '', '}}}'])
+ let &ul=&ul
+ setl foldmethod=marker
+ call cursor(3, 1)
+ norm! zo
+ norm! vjdu
+ call assert_equal(1, foldlevel('.'))
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index acdb954..1021d05 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -923,6 +923,10 @@ func Test_mode()
call feedkeys("gQ\<Insert>\<F2>vi\<CR>", 'xt')
call assert_equal("c-cvr", g:current_modes)
+ " Commandline mode in Visual mode should return "c-c", never "v-v".
+ call feedkeys("v\<Cmd>call input('')\<CR>\<F2>\<CR>\<Esc>", 'xt')
+ call assert_equal("c-c", g:current_modes)
+
" Executing commands in Vim Ex mode should return "cv", never "cvr",
" as Cmdline editing has already ended.
call feedkeys("gQcall Save_mode()\<CR>vi\<CR>", 'xt')
@@ -3822,6 +3826,29 @@ func Test_glob2()
endif
endfunc
+func Test_glob_symlinks()
+ call writefile([], 'Xglob1')
+
+ if has("win32")
+ silent !mklink XglobBad DoesNotExist
+ if v:shell_error
+ throw 'Skipped: cannot create symlinks'
+ endif
+ silent !mklink XglobOk Xglob1
+ else
+ silent !ln -s DoesNotExist XglobBad
+ silent !ln -s Xglob1 XglobOk
+ endif
+
+ " The broken symlink is excluded when alllinks is false.
+ call assert_equal(['Xglob1', 'XglobBad', 'XglobOk'], sort(glob('Xglob*', 0, 1, 1)))
+ call assert_equal(['Xglob1', 'XglobOk'], sort(glob('Xglob*', 0, 1, 0)))
+
+ call delete('Xglob1')
+ call delete('XglobBad')
+ call delete('XglobOk')
+endfunc
+
" Test for browse()
func Test_browse()
CheckFeature browse
@@ -3842,11 +3869,6 @@ func Test_default_arg_value()
call assert_equal('msg', HasDefault())
endfunc
-" Test for gettext()
-func Test_gettext()
- call assert_fails('call gettext(1)', 'E1174:')
-endfunc
-
func Test_builtin_check()
call assert_fails('let g:["trim"] = {x -> " " .. x}', 'E704:')
call assert_fails('let g:.trim = {x -> " " .. x}', 'E704:')
diff --git a/src/testdir/test_gettext.vim b/src/testdir/test_gettext.vim
new file mode 100644
index 0000000..a990121
--- /dev/null
+++ b/src/testdir/test_gettext.vim
@@ -0,0 +1,18 @@
+source check.vim
+
+CheckFeature gettext
+
+" Test for gettext()
+func Test_gettext()
+ call assert_fails('call bindtextdomain("test")', 'E119:')
+ call assert_fails('call bindtextdomain("vim", "test")', 'E475:')
+
+ call assert_fails('call gettext(1)', 'E1174:')
+ call assert_equal('xxxTESTxxx', gettext("xxxTESTxxx"))
+
+ call assert_equal('xxxTESTxxx', gettext("xxxTESTxxx", "vim"))
+ call assert_equal('xxxTESTxxx', gettext("xxxTESTxxx", "__PACKAGE__"))
+ call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__"))
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_gettext_cp1251.vim b/src/testdir/test_gettext_cp1251.vim
new file mode 100644
index 0000000..69d2bbf
--- /dev/null
+++ b/src/testdir/test_gettext_cp1251.vim
@@ -0,0 +1,35 @@
+source check.vim
+" This fail on CI MacOS 14 because bindtextdomain() is not available there
+" (missing library?)
+CheckNotMac
+CheckFeature gettext
+
+" Test for gettext()
+func Test_gettext()
+ set encoding=cp1251
+ call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__"))
+
+ try
+ call assert_true(bindtextdomain("__PACKAGE__", getcwd()))
+
+ try
+ language messages ru_RU
+ call assert_equal('ÎØÈÁÊÀ: ', gettext("ERROR: ", "__PACKAGE__"))
+ catch /^Vim\%((\a\+)\)\=:E197:/
+ throw "Skipped: not possible to set locale to ru (missing?)"
+ endtry
+
+ try
+ language messages en_GB.UTF-8
+ call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__"))
+ catch /^Vim\%((\a\+)\)\=:E197:/
+ throw "Skipped: not possible to set locale to en (missing?)"
+ endtry
+
+ catch /^Vim\%((\a\+)\)\=:E342:/
+ throw "Skipped: out of memory executing bindtextdomain()"
+ endtry
+ set encoding&
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_gettext_make.vim b/src/testdir/test_gettext_make.vim
new file mode 100644
index 0000000..1242fa4
--- /dev/null
+++ b/src/testdir/test_gettext_make.vim
@@ -0,0 +1,72 @@
+source check.vim
+CheckNotMac
+CheckFeature gettext
+
+" Test for package translation Makefile
+func Test_gettext_makefile()
+ cd ../po
+ if has('win32')
+ if getenv('GETTEXT_PATH') == v:null
+ throw 'Skipped: %GETTEXT_PATH% is not set.'
+ endif
+ call system('nmake.exe -f Make_mvc.mak "VIMPROG=' .. getenv('VIMPROG') ..
+ \ '" "GETTEXT_PATH=' .. getenv('GETTEXT_PATH') ..
+ \ '" PLUGPACKAGE=test_gettext
+ \ "PO_PLUG_INPUTLIST=..\testdir\test_gettext_makefile_in1.vim
+ \ ..\testdir\test_gettext_makefile_in2.vim
+ \ ..\testdir\test_gettext_makefile_in3.vim
+ \ ..\testdir\test_gettext_makefile_in4.vim" test_gettext.pot')
+ else
+" Will it work on macOS?
+ call system("make -f Makefile PLUGPACKAGE=test_gettext
+ \ PO_PLUG_INPUTLIST=\"../testdir/test_gettext_makefile_in1.vim
+ \ ../testdir/test_gettext_makefile_in2.vim
+ \ ../testdir/test_gettext_makefile_in3.vim
+ \ ../testdir/test_gettext_makefile_in4.vim\" test_gettext.pot")
+ endif
+ if v:shell_error != 0
+ throw 'Fail to create test_gettext.pot. Error code: ' .. v:shell_error
+ endif
+ let expected =<< trim END
+ # SOME DESCRIPTIVE TITLE.
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+ # This file is distributed under the same license as the test_gettext package.
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+ #
+ #, fuzzy
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: test_gettext\n"
+ "Report-Msgid-Bugs-To: \n"
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+ "Language-Team: LANGUAGE <LL@li.org>\n"
+ "Language: \n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=CHARSET\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+ #: ../testdir/test_gettext_makefile_in1.vim:4 ../testdir/test_gettext_makefile_in1.vim:6
+ #: ../testdir/test_gettext_makefile_in2.vim:5 ../testdir/test_gettext_makefile_in4.vim:4
+ msgid "This is a test"
+ msgstr ""
+
+ #: ../testdir/test_gettext_makefile_in1.vim:5
+ msgid "This is another test"
+ msgstr ""
+
+ #: ../testdir/test_gettext_makefile_in2.vim:4
+ msgid "This is a test from the second file"
+ msgstr ""
+
+ #: ../testdir/test_gettext_makefile_in4.vim:5
+ msgid "This is a fourth test"
+ msgstr ""
+ END
+ let potfile = filter(readfile("test_gettext.pot"), 'v:val !~ "POT-Creation-Date"')
+ call assert_equal(expected, potfile)
+ call delete('test_gettext.pot')
+ cd -
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_gettext_makefile_in1.vim b/src/testdir/test_gettext_makefile_in1.vim
new file mode 100644
index 0000000..cbe1159
--- /dev/null
+++ b/src/testdir/test_gettext_makefile_in1.vim
@@ -0,0 +1,7 @@
+" Test file for gettext() package makefile
+" Last Change: 2024 Jun 01
+
+echo gettext("This is a test", "test_gettext")
+echo gettext("This is another test", "test_gettext")
+echo gettext("This is a test", "test_gettext")
+" vim: ts=8
diff --git a/src/testdir/test_gettext_makefile_in2.vim b/src/testdir/test_gettext_makefile_in2.vim
new file mode 100644
index 0000000..86d3dd9
--- /dev/null
+++ b/src/testdir/test_gettext_makefile_in2.vim
@@ -0,0 +1,6 @@
+" Test file for gettext() package makefile
+" Last Change: 2024 Jun 01
+
+echo gettext("This is a test from the second file", "test_gettext")
+echo gettext("This is a test", "test_gettext")
+" vim: ts=8
diff --git a/src/testdir/test_gettext_makefile_in3.vim b/src/testdir/test_gettext_makefile_in3.vim
new file mode 100644
index 0000000..f4cf93d
--- /dev/null
+++ b/src/testdir/test_gettext_makefile_in3.vim
@@ -0,0 +1,4 @@
+" Test file for gettext() package makefile
+" Last Change: 2024 Jun 01
+
+" vim: ts=8
diff --git a/src/testdir/test_gettext_makefile_in4.vim b/src/testdir/test_gettext_makefile_in4.vim
new file mode 100644
index 0000000..7f9f3f7
--- /dev/null
+++ b/src/testdir/test_gettext_makefile_in4.vim
@@ -0,0 +1,6 @@
+" Test file for gettext() package makefile
+" Last Change: 2024 Jun 01
+
+echo gettext("This is a test", "test_gettext")
+echo gettext("This is a fourth test", "test_gettext")
+" vim: ts=8
diff --git a/src/testdir/test_gettext_utf8.vim b/src/testdir/test_gettext_utf8.vim
new file mode 100644
index 0000000..b96f8ea
--- /dev/null
+++ b/src/testdir/test_gettext_utf8.vim
@@ -0,0 +1,35 @@
+source check.vim
+" This fail on CI MacOS 14 because bindtextdomain() is not available there
+" (missing library?)
+CheckNotMac
+CheckFeature gettext
+
+" Test for gettext()
+func Test_gettext()
+ set encoding=utf-8
+ call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__"))
+
+ try
+ call assert_true(bindtextdomain("__PACKAGE__", getcwd()))
+
+ try
+ language messages ru_RU
+ call assert_equal('ОШИБКÐ: ', gettext("ERROR: ", "__PACKAGE__"))
+ catch /^Vim\%((\a\+)\)\=:E197:/
+ throw "Skipped: not possible to set locale to ru (missing?)"
+ endtry
+
+ try
+ language messages en_GB.UTF-8
+ call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__"))
+ catch /^Vim\%((\a\+)\)\=:E197:/
+ throw "Skipped: not possible to set locale to en (missing?)"
+ endtry
+
+ catch /^Vim\%((\a\+)\)\=:E342:/
+ throw "Skipped: out of memory executing bindtextdomain()"
+ endtry
+ set encoding&
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_getvar.vim b/src/testdir/test_getvar.vim
index 2065186..6efb192 100644
--- a/src/testdir/test_getvar.vim
+++ b/src/testdir/test_getvar.vim
@@ -142,20 +142,28 @@ func Test_get_func()
let l:F = function('tr')
call assert_equal('tr', get(l:F, 'name'))
call assert_equal(l:F, get(l:F, 'func'))
+ call assert_equal({'required': 3, 'optional': 0, 'varargs': v:false},
+ \ get(l:F, 'arity'))
let Fb_func = function('s:FooBar')
call assert_match('<SNR>\d\+_FooBar', get(Fb_func, 'name'))
+ call assert_equal({'required': 0, 'optional': 0, 'varargs': v:false},
+ \ get(Fb_func, 'arity'))
let Fb_ref = funcref('s:FooBar')
call assert_match('<SNR>\d\+_FooBar', get(Fb_ref, 'name'))
+ call assert_equal({'required': 0, 'optional': 0, 'varargs': v:false},
+ \ get(Fb_ref, 'arity'))
call assert_equal({'func has': 'no dict'}, get(l:F, 'dict', {'func has': 'no dict'}))
call assert_equal(0, get(l:F, 'dict'))
call assert_equal([], get(l:F, 'args'))
+
let NF = test_null_function()
call assert_equal('', get(NF, 'name'))
call assert_equal(NF, get(NF, 'func'))
call assert_equal(0, get(NF, 'dict'))
call assert_equal([], get(NF, 'args'))
+ call assert_equal({'required': 0, 'optional': 0, 'varargs': v:false}, get(NF, 'arity'))
endfunc
" get({partial}, {what} [, {default}]) - in test_partial.vim
diff --git a/src/testdir/test_goto.vim b/src/testdir/test_goto.vim
index 357a8d2..b6a6695 100644
--- a/src/testdir/test_goto.vim
+++ b/src/testdir/test_goto.vim
@@ -296,6 +296,7 @@ func Test_gd_string()
return x;
}
[CODE]
+
call XTest_goto_decl('gd', lines, 4, 7)
endfunc
@@ -320,14 +321,16 @@ func Test_set_options_keep_col()
let pos = getcurpos()
normal j
set invhlsearch spell spelllang=en,cjk spelloptions=camel textwidth=80
- set cursorline cursorcolumn cursorlineopt=line colorcolumn=+1
+ set cursorline cursorcolumn cursorlineopt=line colorcolumn=+1 winfixbuf
+ set comments=:# commentstring=#%s define=function
set background=dark
set background=light
normal k
call assert_equal(pos, getcurpos())
bwipe!
set hlsearch& spell& spelllang& spelloptions& textwidth&
- set cursorline& cursorcolumn& cursorlineopt& colorcolumn&
+ set cursorline& cursorcolumn& cursorlineopt& colorcolumn& winfixbuf&
+ set comments& commentstring& define&
set background&
endfunc
diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim
index d53750f..ae65310 100644
--- a/src/testdir/test_gui.vim
+++ b/src/testdir/test_gui.vim
@@ -1708,7 +1708,8 @@ func Test_gui_lowlevel_keyevent()
new
" Test for <Ctrl-A> to <Ctrl-Z> keys
- for kc in range(65, 90)
+ " FIXME: <Ctrl-C> is excluded for now. It makes the test flaky.
+ for kc in range(65, 66) + range(68, 90)
call SendKeys([0x11, kc])
try
let ch = getcharstr()
diff --git a/src/testdir/test_increment.vim b/src/testdir/test_increment.vim
index fdd7c0c..3a5f5ee 100644
--- a/src/testdir/test_increment.vim
+++ b/src/testdir/test_increment.vim
@@ -840,6 +840,44 @@ func Test_increment_unsigned()
set nrformats-=unsigned
endfunc
+" Try incrementing/decrementing a number when nrformats contains blank
+func Test_increment_blank()
+ set nrformats+=blank
+
+ " Signed
+ call setline(1, '0')
+ exec "norm! gg0\<C-X>"
+ call assert_equal('-1', getline(1))
+
+ call setline(1, '3')
+ exec "norm! gg010\<C-X>"
+ call assert_equal('-7', getline(1))
+
+ call setline(1, '-0')
+ exec "norm! gg0\<C-X>"
+ call assert_equal("-1", getline(1))
+
+ " Unsigned
+ " NOTE: 18446744073709551615 == 2^64 - 1
+ call setline(1, 'a-18446744073709551615')
+ exec "norm! gg0\<C-A>"
+ call assert_equal('a-18446744073709551615', getline(1))
+
+ call setline(1, 'a-18446744073709551615')
+ exec "norm! gg0\<C-A>"
+ call assert_equal('a-18446744073709551615', getline(1))
+
+ call setline(1, 'a-18446744073709551614')
+ exec "norm! gg08\<C-A>"
+ call assert_equal('a-18446744073709551615', getline(1))
+
+ call setline(1, 'a-1')
+ exec "norm! gg0\<C-A>"
+ call assert_equal('a-2', getline(1))
+
+ set nrformats-=blank
+endfunc
+
func Test_in_decrement_large_number()
" NOTE: 18446744073709551616 == 2^64
call setline(1, '18446744073709551616')
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index 48589ce..aee3393 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -2586,9 +2586,85 @@ func Test_complete_fuzzy_match()
call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
call assert_equal('hello help hero h', getline('.'))
+ set completeopt-=noinsert
+ call setline(1, ['xyz yxz x'])
+ call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('xyz yxz xyz', getline('.'))
+ " can fuzzy get yxz when use Ctrl-N twice
+ call setline(1, ['xyz yxz x'])
+ call feedkeys("A\<C-X>\<C-N>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('xyz yxz yxz', getline('.'))
+
+ call setline(1, ['你好 你'])
+ call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('你好 你好', getline('.'))
+ call setline(1, ['你的 我的 的'])
+ call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('你的 我的 你的', getline('.'))
+ " can fuzzy get multiple-byte word when use Ctrl-N twice
+ call setline(1, ['你的 我的 的'])
+ call feedkeys("A\<C-X>\<C-N>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('你的 我的 我的', getline('.'))
+
+ " respect wrapscan
+ set nowrapscan
+ call setline(1, ["xyz", "yxz", ""])
+ call cursor(3, 1)
+ call feedkeys("Sy\<C-X>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('y', getline('.'))
+ set wrapscan
+ call feedkeys("Sy\<C-X>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('xyz', getline('.'))
+
+ " fuzzy on file
+ call writefile([''], 'fobar', 'D')
+ call writefile([''], 'foobar', 'D')
+ call setline(1, ['fob'])
+ call cursor(1, 1)
+ call feedkeys("A\<C-X>\<C-f>\<Esc>0", 'tx!')
+ call assert_equal('fobar', getline('.'))
+ call feedkeys("Sfob\<C-X>\<C-f>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('foobar', getline('.'))
+ call feedkeys("S../\<C-X>\<C-f>\<Esc>0", 'tx!')
+ call assert_match('../*', getline('.'))
+ call feedkeys("S../td\<C-X>\<C-f>\<Esc>0", 'tx!')
+ call assert_match('../testdir', getline('.'))
+
+ " can get completion from other buffer
+ set completeopt=fuzzy,menu,menuone
+ vnew
+ call setline(1, ["completeness,", "compatibility", "Composite", "Omnipotent"])
+ wincmd p
+ call feedkeys("Somp\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('completeness', getline('.'))
+ call feedkeys("Somp\<C-N>\<C-N>\<Esc>0", 'tx!')
+ call assert_equal('compatibility', getline('.'))
+ call feedkeys("Somp\<C-P>\<Esc>0", 'tx!')
+ call assert_equal('Omnipotent', getline('.'))
+ call feedkeys("Somp\<C-P>\<C-P>\<Esc>0", 'tx!')
+ call assert_equal('Composite', getline('.'))
+ call feedkeys("S omp\<C-N>\<Esc>0", 'tx!')
+ call assert_equal(' completeness', getline('.'))
+
+ " fuzzy on whole line completion
+ call setline(1, ["world is on fire", "no one can save me but you", 'user can execute', ''])
+ call cursor(4, 1)
+ call feedkeys("Swio\<C-X>\<C-L>\<Esc>0", 'tx!')
+ call assert_equal('world is on fire', getline('.'))
+ call feedkeys("Su\<C-X>\<C-L>\<C-P>\<Esc>0", 'tx!')
+ call assert_equal('no one can save me but you', getline('.'))
+
+ " issue #15526
+ set completeopt=fuzzy,menuone,menu,noselect
+ call setline(1, ['Text', 'ToText', ''])
+ call cursor(2, 1)
+ call feedkeys("STe\<C-X>\<C-N>x\<CR>\<Esc>0", 'tx!')
+ call assert_equal('Tex', getline('.'))
+
" clean up
set omnifunc=
bw!
+ bw!
set complete& completeopt&
autocmd! AAAAA_Group
augroup! AAAAA_Group
@@ -2599,6 +2675,38 @@ func Test_complete_fuzzy_match()
unlet g:word
endfunc
+func Test_complete_fuzzy_with_completeslash()
+ CheckMSWindows
+
+ call writefile([''], 'fobar', 'D')
+ let orig_shellslash = &shellslash
+ set cpt&
+ new
+ set completeopt+=fuzzy
+ set noshellslash
+
+ " Test with completeslash unset
+ set completeslash=
+ call setline(1, ['.\fob'])
+ call feedkeys("A\<C-X>\<C-F>\<Esc>0", 'tx!')
+ call assert_equal('.\fobar', getline('.'))
+
+ " Test with completeslash=backslash
+ set completeslash=backslash
+ call feedkeys("S.\\fob\<C-X>\<C-F>\<Esc>0", 'tx!')
+ call assert_equal('.\fobar', getline('.'))
+
+ " Test with completeslash=slash
+ set completeslash=slash
+ call feedkeys("S.\\fob\<C-X>\<C-F>\<Esc>0", 'tx!')
+ call assert_equal('./fobar', getline('.'))
+
+ " Reset and clean up
+ let &shellslash = orig_shellslash
+ set completeslash=
+ %bw!
+endfunc
+
" Check that tie breaking is stable for completeopt+=fuzzy (which should
" behave the same on different platforms).
func Test_complete_fuzzy_match_tie()
@@ -2619,4 +2727,14 @@ func Test_complete_fuzzy_match_tie()
set completeopt&
endfunc
+func Test_complete_backwards_default()
+ new
+ call append(1, ['foobar', 'foobaz'])
+ new
+ call feedkeys("i\<c-p>", 'tx')
+ call assert_equal('foobaz', getline('.'))
+ bw!
+ bw!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab nofoldenable
diff --git a/src/testdir/test_jumplist.vim b/src/testdir/test_jumplist.vim
index 8fbf39f..4b9fcee 100644
--- a/src/testdir/test_jumplist.vim
+++ b/src/testdir/test_jumplist.vim
@@ -59,29 +59,63 @@ func Test_getjumplist()
call assert_equal(4, l[1])
endfunc
-func Test_jumplist_invalid()
+func Test_jumplist_wipe_buf()
new
clearjumps
- " put some randome text
- put ='a'
- let prev = bufnr('%')
+ " Put some random text and fill the jump list.
+ call setline(1, ['foo', 'bar', 'baz'])
+ normal G
+ normal gg
setl nomodified bufhidden=wipe
e XXJumpListBuffer
- let bnr = bufnr('%')
- " 1) empty jumplist
- let expected = [[
- \ {'lnum': 2, 'bufnr': prev, 'col': 0, 'coladd': 0}], 1]
- call assert_equal(expected, getjumplist())
+ " The jump list is empty as the buffer was wiped out.
+ call assert_equal([[], 0], getjumplist())
let jumps = execute(':jumps')
call assert_equal('>', jumps[-1:])
- " now jump back
- exe ":norm! \<c-o>"
- let expected = [[
- \ {'lnum': 2, 'bufnr': prev, 'col': 0, 'coladd': 0},
- \ {'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 0]
- call assert_equal(expected, getjumplist())
- let jumps = execute(':jumps')
- call assert_match('> 0 2 0 -invalid-', jumps)
+
+ " Put some random text and fill the jump list.
+ call setline(1, ['foo', 'bar', 'baz'])
+ setl bufhidden=hide
+
+ " References to wiped buffer are deleted with multiple tabpages.
+ let [w1, t1] = [win_getid(), tabpagenr()]
+ clearjumps
+ normal G
+ normal gg
+ enew
+
+ split XXJumpListBuffer
+ let [w2, t2] = [win_getid(), tabpagenr()]
+ clearjumps
+ normal G
+ normal gg
+ enew
+
+ tabnew XXJumpListBuffer
+ let [w3, t3] = [win_getid(), tabpagenr()]
+ clearjumps
+ normal G
+ normal gg
+ enew
+
+ split XXJumpListBuffer
+ let [w4, t4] = [win_getid(), tabpagenr()]
+ clearjumps
+ normal G
+ normal gg
+ enew
+
+ for [w, t] in [[w1, t1], [w2, t2], [w3, t3], [w4, t4]]
+ call assert_equal(2, len(getjumplist(w, t)[0]))
+ endfor
+
+ bwipe! XXJumpListBuffer
+
+ for [w, t] in [[w1, t1], [w2, t2], [w3, t3], [w4, t4]]
+ call assert_equal(0, len(getjumplist(w, t)[0]))
+ endfor
+
+ %bwipe!
endfunc
" Test for '' mark in an empty buffer
diff --git a/src/testdir/test_listdict.vim b/src/testdir/test_listdict.vim
index 12a6dd4..48217cf 100644
--- a/src/testdir/test_listdict.vim
+++ b/src/testdir/test_listdict.vim
@@ -1147,6 +1147,19 @@ func Test_listdict_compare()
call assert_fails('echo {} =~ {}', 'E736:')
endfunc
+func Test_recursive_listdict_compare()
+ let l1 = [0, 1]
+ let l1[0] = l1
+ let l2 = [0, 1]
+ let l2[0] = l2
+ call assert_true(l1 == l2)
+ let d1 = {0: 0, 1: 1}
+ let d1[0] = d1
+ let d2 = {0: 0, 1: 1}
+ let d2[0] = d2
+ call assert_true(d1 == d2)
+endfunc
+
" compare complex recursively linked list and dict
func Test_listdict_compare_complex()
let lines =<< trim END
@@ -1557,4 +1570,83 @@ func Test_extendnew_leak()
for i in range(100) | silent! call extendnew({}, {}, {}) | endfor
endfunc
+" Test for comparing deeply nested List/Dict values
+func Test_deep_nested_listdict_compare()
+ let lines =<< trim END
+ def GetNestedList(sz: number): list<any>
+ var l: list<any> = []
+ var x: list<any> = l
+ for i in range(sz)
+ var y: list<any> = [1]
+ add(x, y)
+ x = y
+ endfor
+ return l
+ enddef
+
+ VAR l1 = GetNestedList(1000)
+ VAR l2 = GetNestedList(999)
+ call assert_false(l1 == l2)
+
+ #" after 1000 nested items, the lists are considered to be equal
+ VAR l3 = GetNestedList(1001)
+ VAR l4 = GetNestedList(1002)
+ call assert_true(l3 == l4)
+ END
+ call v9.CheckLegacyAndVim9Success(lines)
+
+ let lines =<< trim END
+ def GetNestedDict(sz: number): dict<any>
+ var d: dict<any> = {}
+ var x: dict<any> = d
+ for i in range(sz)
+ var y: dict<any> = {}
+ x['a'] = y
+ x = y
+ endfor
+ return d
+ enddef
+
+ VAR d1 = GetNestedDict(1000)
+ VAR d2 = GetNestedDict(999)
+ call assert_false(d1 == d2)
+
+ #" after 1000 nested items, the Dicts are considered to be equal
+ VAR d3 = GetNestedDict(1001)
+ VAR d4 = GetNestedDict(1002)
+ call assert_true(d3 == d4)
+ END
+ call v9.CheckLegacyAndVim9Success(lines)
+endfunc
+
+" Test for using id()
+def Test_id_with_dict()
+ # demonstate a way that "id(item)" differs from "string(item)"
+ var d1 = {one: 1}
+ var d2 = {one: 1}
+ var d3 = {one: 1}
+ var idDict: dict<any>
+ idDict[id(d1)] = d1
+ idDict[id(d2)] = d2
+ idDict[id(d3)] = d3
+ assert_equal(3, idDict->len())
+
+ var stringDict: dict<any>
+ stringDict[string(d1)] = d1
+ stringDict[string(d2)] = d2
+ stringDict[string(d3)] = d3
+ assert_equal(1, stringDict->len())
+
+ assert_equal('', id(3))
+
+ assert_equal('', id(null))
+ assert_equal('', id(null_blob))
+ assert_equal('', id(null_dict))
+ assert_equal('', id(null_function))
+ assert_equal('', id(null_list))
+ assert_equal('', id(null_partial))
+ assert_equal('', id(null_string))
+ assert_equal('', id(null_channel))
+ assert_equal('', id(null_job))
+enddef
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_listlbr_utf8.vim b/src/testdir/test_listlbr_utf8.vim
index 313ff30..693f201 100644
--- a/src/testdir/test_listlbr_utf8.vim
+++ b/src/testdir/test_listlbr_utf8.vim
@@ -280,6 +280,9 @@ func Test_chinese_char_on_wrap_column()
call s:compare_lines(expect, lines)
call assert_equal(len(expect), winline())
call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+ norm! g0
+ call assert_equal(len(expect), winline())
+ call assert_equal(1, wincol())
call s:close_windows()
endfunc
@@ -315,6 +318,9 @@ func Test_chinese_char_on_wrap_column_sbr()
call s:compare_lines(expect, lines)
call assert_equal(len(expect), winline())
call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+ norm! g0
+ call assert_equal(len(expect), winline())
+ call assert_equal(4, wincol())
call s:close_windows()
endfunc
diff --git a/src/testdir/test_mapping.vim b/src/testdir/test_mapping.vim
index 1175310..064f8ac 100644
--- a/src/testdir/test_mapping.vim
+++ b/src/testdir/test_mapping.vim
@@ -1767,6 +1767,49 @@ func Test_unmap_simplifiable()
unmap <C-I>
endfunc
+" Test that the first byte of rhs is not remapped if rhs starts with lhs.
+func Test_map_rhs_starts_with_lhs()
+ new
+ func MapExpr()
+ return "\<C-R>\<C-P>"
+ endfunc
+
+ for expr in [v:false, v:true]
+ if expr
+ imap <buffer><expr> <C-R> MapExpr()
+ else
+ imap <buffer> <C-R> <C-R><C-P>
+ endif
+
+ for restore in [v:false, v:true]
+ if restore
+ let saved = maparg('<C-R>', 'i', v:false, v:true)
+ iunmap <buffer> <C-R>
+ call mapset(saved)
+ endif
+
+ let @a = 'foo'
+ call assert_nobeep('call feedkeys("S\<C-R>a", "tx")')
+ call assert_equal('foo', getline('.'))
+
+ let @a = 'bar'
+ call assert_nobeep('call feedkeys("S\<*C-R>a", "tx")')
+ call assert_equal('bar', getline('.'))
+ endfor
+ endfor
+
+ " When two mappings are used for <C-I> and <Tab>, remapping should work.
+ imap <buffer> <C-I> <Tab>bar
+ imap <buffer> <Tab> foo
+ call feedkeys("S\<Tab>", 'xt')
+ call assert_equal('foo', getline('.'))
+ call feedkeys("S\<*C-I>", 'xt')
+ call assert_equal('foobar', getline('.'))
+
+ delfunc MapExpr
+ bwipe!
+endfunc
+
func Test_expr_map_escape_special()
nnoremap … <Cmd>let g:got_ellipsis += 1<CR>
func Func()
diff --git a/src/testdir/test_matchparen.vim b/src/testdir/test_matchparen.vim
index 70aa38f..49d3510 100644
--- a/src/testdir/test_matchparen.vim
+++ b/src/testdir/test_matchparen.vim
@@ -108,5 +108,35 @@ func Test_matchparen_pum_clear()
call StopVimInTerminal(buf)
endfunc
+" Test that matchparen works with multibyte chars in 'matchpairs'
+func Test_matchparen_mbyte()
+ CheckScreendump
+
+ let lines =<< trim END
+ source $VIMRUNTIME/plugin/matchparen.vim
+ call setline(1, ['aaaaaaaa(', 'bbbb)cc'])
+ set matchpairs+=(:)
+ END
+
+ call writefile(lines, 'XmatchparenMbyte', 'D')
+ let buf = RunVimInTerminal('-S XmatchparenMbyte', #{rows: 10})
+ call VerifyScreenDump(buf, 'Test_matchparen_mbyte_1', {})
+ call term_sendkeys(buf, "$")
+ call VerifyScreenDump(buf, 'Test_matchparen_mbyte_2', {})
+ call term_sendkeys(buf, "j")
+ call VerifyScreenDump(buf, 'Test_matchparen_mbyte_3', {})
+ call term_sendkeys(buf, "2h")
+ call VerifyScreenDump(buf, 'Test_matchparen_mbyte_4', {})
+ call term_sendkeys(buf, "0")
+ call VerifyScreenDump(buf, 'Test_matchparen_mbyte_5', {})
+ call term_sendkeys(buf, "kA")
+ call VerifyScreenDump(buf, 'Test_matchparen_mbyte_6', {})
+ call term_sendkeys(buf, "\<Down>")
+ call VerifyScreenDump(buf, 'Test_matchparen_mbyte_7', {})
+ call term_sendkeys(buf, "\<C-W>")
+ call VerifyScreenDump(buf, 'Test_matchparen_mbyte_8', {})
+
+ call StopVimInTerminal(buf)
+endfunc
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_menu.vim b/src/testdir/test_menu.vim
index 2229228..40fec40 100644
--- a/src/testdir/test_menu.vim
+++ b/src/testdir/test_menu.vim
@@ -481,13 +481,48 @@ func Test_popup_menu()
unmenu PopUp
endfunc
+func Test_popup_menu_truncated()
+ CheckNotGui
+
+ set mouse=a mousemodel=popup
+ aunmenu PopUp
+ for i in range(2 * &lines)
+ exe $'menu PopUp.{i} <Cmd>let g:res = {i}<CR>'
+ endfor
+
+ func LeftClickExpr(row, col)
+ call test_setmouse(a:row, a:col)
+ return "\<LeftMouse>"
+ endfunc
+
+ " Clicking at the bottom should place popup menu above click position.
+ " <RightRelease> should not select an item immediately.
+ let g:res = -1
+ call test_setmouse(&lines, 1)
+ nnoremap <expr><F2> LeftClickExpr(4, 1)
+ call feedkeys("\<RightMouse>\<RightRelease>\<F2>", 'tx')
+ call assert_equal(3, g:res)
+
+ " Clicking at the top should place popup menu below click position.
+ let g:res = -1
+ call test_setmouse(1, 1)
+ nnoremap <expr><F2> LeftClickExpr(5, 1)
+ call feedkeys("\<RightMouse>\<RightRelease>\<F2>", 'tx')
+ call assert_equal(3, g:res)
+
+ nunmap <F2>
+ delfunc LeftClickExpr
+ unlet g:res
+ aunmenu PopUp
+ set mouse& mousemodel&
+endfunc
+
" Test for MenuPopup autocommand
func Test_autocmd_MenuPopup()
CheckNotGui
- set mouse=a
- set mousemodel=popup
- aunmenu *
+ set mouse=a mousemodel=popup
+ aunmenu PopUp
autocmd MenuPopup * exe printf(
\ 'anoremenu PopUp.Foo <Cmd>let g:res = ["%s", "%s"]<CR>',
\ expand('<afile>'), expand('<amatch>'))
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index 83594d2..398bf29 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -4257,6 +4257,9 @@ func Test_page_cursor_topbot()
call assert_equal(18, line('.'))
exe "norm! \<C-B>\<C-F>"
call assert_equal(9, line('.'))
+ " Not when already at the start of the buffer.
+ exe "norm! ggj\<C-B>"
+ call assert_equal(2, line('.'))
bwipe!
endfunc
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index fbfbaae..94c98fe 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -548,6 +548,9 @@ func Test_set_completion_string_values()
call assert_equal('sync', getcompletion('set swapsync=', 'cmdline')[1])
call assert_equal('usetab', getcompletion('set switchbuf=', 'cmdline')[1])
call assert_equal('ignore', getcompletion('set tagcase=', 'cmdline')[1])
+ if exists('+tabclose')
+ call assert_equal('left uselast', join(sort(getcompletion('set tabclose=', 'cmdline'))), ' ')
+ endif
if exists('+termwintype')
call assert_equal('conpty', getcompletion('set termwintype=', 'cmdline')[1])
endif
@@ -1407,7 +1410,8 @@ func Test_write()
set nowrite
call assert_fails('write Xwrfile', 'E142:')
set write
- close!
+ " close swapfile
+ bw!
endfunc
" Test for 'buftype' option
@@ -1724,7 +1728,7 @@ func Test_VIM_POSIX()
qall
[CODE]
if RunVim([], after, '')
- call assert_equal(['aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\.;',
+ call assert_equal(['aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZz$!%*-+<>#{|&/\.;',
\ 'AS'], readfile('X_VIM_POSIX'))
endif
@@ -1734,7 +1738,7 @@ func Test_VIM_POSIX()
qall
[CODE]
if RunVim([], after, '')
- call assert_equal(['aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;',
+ call assert_equal(['aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZz$!%*-+<>;',
\ 'S'], readfile('X_VIM_POSIX'))
endif
diff --git a/src/testdir/test_partial.vim b/src/testdir/test_partial.vim
index b5a58f6..acc8b73 100644
--- a/src/testdir/test_partial.vim
+++ b/src/testdir/test_partial.vim
@@ -311,6 +311,11 @@ func Test_auto_partial_rebind()
endfunc
func Test_get_partial_items()
+ func s:Qux(x, y, z=3, w=1, ...)
+ endfunc
+ func s:Qux1(x, y)
+ endfunc
+
let dict = {'name': 'hello'}
let args = ["foo", "bar"]
let Func = function('MyDictFunc')
@@ -331,6 +336,23 @@ func Test_get_partial_items()
let dict = {'partial has': 'no dict'}
call assert_equal(dict, get(P, 'dict', dict))
call assert_equal(0, get(l:P, 'dict'))
+
+ call assert_equal({'required': 2, 'optional': 2, 'varargs': v:true},
+ \ get(funcref('s:Qux', []), 'arity'))
+ call assert_equal({'required': 1, 'optional': 2, 'varargs': v:true},
+ \ get(funcref('s:Qux', [1]), 'arity'))
+ call assert_equal({'required': 0, 'optional': 2, 'varargs': v:true},
+ \ get(funcref('s:Qux', [1, 2]), 'arity'))
+ call assert_equal({'required': 0, 'optional': 1, 'varargs': v:true},
+ \ get(funcref('s:Qux', [1, 2, 3]), 'arity'))
+ call assert_equal({'required': 0, 'optional': 0, 'varargs': v:true},
+ \ get(funcref('s:Qux', [1, 2, 3, 4]), 'arity'))
+ " More args than expected is not an error
+ call assert_equal({'required': 0, 'optional': 0, 'varargs': v:false},
+ \ get(funcref('s:Qux1', [1, 2, 3, 4]), 'arity'))
+
+ delfunc s:Qux
+ delfunc s:Qux1
endfunc
func Test_compare_partials()
diff --git a/src/testdir/test_paste.vim b/src/testdir/test_paste.vim
index d079f48..b35fc81 100644
--- a/src/testdir/test_paste.vim
+++ b/src/testdir/test_paste.vim
@@ -93,7 +93,7 @@ func Test_paste_ex_mode()
call assert_equal("foo\rbar", foo)
" pasting more than 40 bytes
- exe "norm Q\<PasteStart>0000000000000000000000000000000000000000000000000000000000000000000000\<C-C>"
+ exe "norm Q\<PasteStart>s/.*/0000000000000000000000000000000000000000000000000000000000000000/\<C-C>"
endfunc
func Test_paste_onechar()
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index dd01a57..fe958da 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -1482,8 +1482,101 @@ func Test_pum_highlights_match()
call term_sendkeys(buf, "o\<BS>\<C-R>=Comp()\<CR>")
call VerifyScreenDump(buf, 'Test_pum_highlights_09', {})
+ " issue #15095 wrong select
+ call term_sendkeys(buf, "\<ESC>:set completeopt=fuzzy,menu\<CR>")
+ call TermWait(buf)
+ call term_sendkeys(buf, "S hello helio hero h\<C-X>\<C-P>")
+ call TermWait(buf, 50)
+ call VerifyScreenDump(buf, 'Test_pum_highlights_10', {})
+
+ call term_sendkeys(buf, "\<ESC>S hello helio hero h\<C-X>\<C-P>\<C-P>")
+ call TermWait(buf, 50)
+ call VerifyScreenDump(buf, 'Test_pum_highlights_11', {})
+
+ " issue #15357
+ call term_sendkeys(buf, "\<ESC>S/non_exit_folder\<C-X>\<C-F>")
+ call TermWait(buf, 50)
+ call VerifyScreenDump(buf, 'Test_pum_highlights_15', {})
+
+ call term_sendkeys(buf, "\<C-E>\<Esc>")
+ call TermWait(buf)
+
+ call StopVimInTerminal(buf)
+endfunc
+
+func Test_pum_user_hl_group()
+ CheckScreendump
+ let lines =<< trim END
+ func CompleteFunc( findstart, base )
+ if a:findstart
+ return 0
+ endif
+ return {
+ \ 'words': [
+ \ { 'word': 'aword1', 'menu': 'extra text 1', 'kind': 'W', 'hl_group': 'StrikeFake' },
+ \ { 'word': 'aword2', 'menu': 'extra text 2', 'kind': 'W', },
+ \ { 'word': '你好', 'menu': 'extra text 3', 'kind': 'W', 'hl_group': 'StrikeFake' },
+ \]}
+ endfunc
+ set completeopt=menu
+ set completefunc=CompleteFunc
+
+ hi StrikeFake ctermfg=9
+ func HlMatch()
+ hi PmenuMatchSel ctermfg=6 ctermbg=7 cterm=underline
+ hi PmenuMatch ctermfg=4 ctermbg=225 cterm=underline
+ endfunc
+ END
+ call writefile(lines, 'Xscript', 'D')
+ let buf = RunVimInTerminal('-S Xscript', {})
+
+ call TermWait(buf)
+ call term_sendkeys(buf, "Saw\<C-X>\<C-U>")
+ call VerifyScreenDump(buf, 'Test_pum_highlights_12', {})
+ call term_sendkeys(buf, "\<C-E>\<Esc>")
+
+ call TermWait(buf)
+ call term_sendkeys(buf, ":call HlMatch()\<CR>")
+
+ call TermWait(buf)
+ call term_sendkeys(buf, "Saw\<C-X>\<C-U>")
+ call VerifyScreenDump(buf, 'Test_pum_highlights_13', {})
+ call term_sendkeys(buf, "\<C-N>")
+ call VerifyScreenDump(buf, 'Test_pum_highlights_14', {})
call term_sendkeys(buf, "\<C-E>\<Esc>")
+
+ call StopVimInTerminal(buf)
+endfunc
+
+func Test_pum_user_kind_hlgroup()
+ CheckScreendump
+ let lines =<< trim END
+ func CompleteFunc( findstart, base )
+ if a:findstart
+ return 0
+ endif
+ return {
+ \ 'words': [
+ \ { 'word': 'aword1', 'menu': 'extra text 1', 'kind': 'variable', 'kind_hlgroup': 'KindVar', 'hl_group': 'StrikeFake' },
+ \ { 'word': 'aword2', 'menu': 'extra text 2', 'kind': 'function', 'kind_hlgroup': 'KindFunc' },
+ \ { 'word': '你好', 'menu': 'extra text 3', 'kind': 'class', 'kind_hlgroup': 'KindClass' },
+ \]}
+ endfunc
+ set completeopt=menu
+ set completefunc=CompleteFunc
+
+ hi StrikeFake ctermfg=9
+ hi KindVar ctermfg=yellow
+ hi KindFunc ctermfg=blue
+ hi KindClass ctermfg=green
+ END
+ call writefile(lines, 'Xscript', 'D')
+ let buf = RunVimInTerminal('-S Xscript', {})
+
call TermWait(buf)
+ call term_sendkeys(buf, "S\<C-X>\<C-U>")
+ call VerifyScreenDump(buf, 'Test_pum_highlights_16', {})
+ call term_sendkeys(buf, "\<C-E>\<Esc>")
call StopVimInTerminal(buf)
endfunc
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index a397f70..64aa654 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -2499,6 +2499,88 @@ func Test_popup_settext_null()
call popup_close(id)
endfunc
+func Test_popup_setbuf()
+ CheckScreendump
+
+ let lines =<< trim END
+ let opts = #{wrap: 0}
+ let p = popup_create('test', opts)
+ let buf = bufnr('%')
+ END
+
+ call writefile(lines, 'XtestPopupSetBuf', 'D')
+ let buf = RunVimInTerminal('-S XtestPopupSetBuf', #{rows: 10})
+ call VerifyScreenDump(buf, 'Test_popup_setbuf_01', {})
+
+ " Setting to an non-existing buffer doesn't do anything
+ call term_sendkeys(buf, ":call popup_setbuf(p, 'foobar.txt')\<CR>")
+ call VerifyScreenDump(buf, 'Test_popup_setbuf_02', {})
+
+ " Error
+ call term_sendkeys(buf, ":call popup_setbuf(p, ['a','b','c'])\<CR>")
+ call VerifyScreenDump(buf, 'Test_popup_setbuf_03', {})
+
+ " Set to help window
+ call term_sendkeys(buf, ":help\<CR>")
+ call term_sendkeys(buf, ":call popup_setbuf(p, 'help.txt')\<CR>")
+ call VerifyScreenDump(buf, 'Test_popup_setbuf_04', {})
+
+ " Setting back to original buffer
+ call term_sendkeys(buf, ":call popup_setbuf(p, buf)\<CR>")
+ call VerifyScreenDump(buf, 'Test_popup_setbuf_05', {})
+
+ " use method
+ call term_sendkeys(buf, ":echo p->popup_setbuf('help.txt')\<CR>")
+ call VerifyScreenDump(buf, 'Test_popup_setbuf_06', {})
+
+ call term_sendkeys(buf, ":echo p->popup_setbuf(buf)\<CR>")
+ call VerifyScreenDump(buf, 'Test_popup_setbuf_05', {})
+
+ " clean up
+ call StopVimInTerminal(buf)
+endfunc
+
+func Test_popup_setbuf_terminal()
+ CheckFeature terminal
+
+ " Check Terminal Feature
+ let termbuf = term_start(&shell, #{hidden: 1})
+ " Wait for shell to start
+ call WaitForAssert({-> assert_equal("run", job_status(term_getjob(termbuf)))})
+
+ let popup = popup_create('test', {})
+ call assert_true(popup->popup_setbuf(termbuf))
+ call popup_close(popup)
+
+ let popup1 = popup_create(termbuf, #{minwidth: 40, minheight: 10, border: []})
+
+ let popup = popup_create('test', {})
+ try
+ call assert_fails(call popup_setbuf(popup, termbuf))
+ catch
+ endtry
+ call popup_close(popup)
+ call popup_close(popup1)
+ call assert_equal([], popup_list())
+ " Close the terminal
+ call term_sendkeys(termbuf, "exit\<CR>")
+ " Wait for shell to exit
+ call WaitForAssert({-> assert_equal("dead", job_status(term_getjob(termbuf)))})
+endfunc
+
+func Test_popup_setbuf_null()
+ let id = popup_create('', {})
+ call assert_false(popup_setbuf(id, -1))
+ call popup_close(id)
+
+ let id = popup_create('', {})
+ call assert_true(popup_setbuf(id, test_null_string()))
+ call assert_true(popup_setbuf(id, ''))
+ call popup_close(id)
+
+ call assert_false(popup_setbuf(id, 0))
+endfunc
+
func Test_popup_hidden()
new
diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim
index 69c2943..94e4f47 100644
--- a/src/testdir/test_put.vim
+++ b/src/testdir/test_put.vim
@@ -168,10 +168,6 @@ func Test_very_large_count()
endfunc
func Test_very_large_count_64bit()
- if v:sizeoflong < 8
- throw 'Skipped: only works with 64 bit long ints'
- endif
-
new
let @" = repeat('x', 100)
call assert_fails('norm 999999999p', 'E1240:')
@@ -188,10 +184,6 @@ func Test_very_large_count_block()
endfunc
func Test_very_large_count_block_64bit()
- if v:sizeoflong < 8
- throw 'Skipped: only works with 64 bit long ints'
- endif
-
new
call setline(1, repeat('x', 100))
exe "norm \<C-V>$y"
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index 0b61815..47b9b47 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -893,7 +893,7 @@ func Test_helpgrep()
endfunc
def Test_helpgrep_vim9_restore_cpo()
- assert_equal('aABceFs', &cpo)
+ assert_equal('aABceFsz', &cpo)
var rtp_save = &rtp
var dir = 'Xruntime/after'
@@ -905,7 +905,7 @@ def Test_helpgrep_vim9_restore_cpo()
cwindow
silent helpgrep grail
- assert_equal('aABceFs', &cpo)
+ assert_equal('aABceFsz', &cpo)
&rtp = rtp_save
cclose
helpclose
diff --git a/src/testdir/test_regexp_utf8.vim b/src/testdir/test_regexp_utf8.vim
index bc70544..51c0984 100644
--- a/src/testdir/test_regexp_utf8.vim
+++ b/src/testdir/test_regexp_utf8.vim
@@ -587,4 +587,36 @@ func Test_combining_chars_in_collection()
bw!
endfunc
+func Test_search_multibyte_match_ascii()
+ new
+ " Match single 'Å¿' and 's'
+ call setline(1, 'das abc heraus abc Å¿ich abc Å¿ind')
+ for i in range(0, 2)
+ exe "set re="..i
+ let ic_match = matchbufline('%', '\c\%u17f', 1, '$')->mapnew({idx, val -> val.text})
+ let noic_match = matchbufline('%', '\C\%u17f', 1, '$')->mapnew({idx, val -> val.text})
+ call assert_equal(['s', 's', 'Å¿','Å¿'], ic_match, "Ignorecase Regex-engine: " .. &re)
+ call assert_equal(['Å¿','Å¿'], noic_match, "No-Ignorecase Regex-engine: " .. &re)
+ endfor
+ " Match several 'Å¿Å¿' and 'ss'
+ call setline(1, 'das abc herauss abc Å¿Å¿ich abc Å¿ind')
+ for i in range(0, 2)
+ exe "set re="..i
+ let ic_match = matchbufline('%', '\c\%u17f\%u17f', 1, '$')->mapnew({idx, val -> val.text})
+ let noic_match = matchbufline('%', '\C\%u17f\%u17f', 1, '$')->mapnew({idx, val -> val.text})
+ let ic_match2 = matchbufline('%', '\c\%u17f\+', 1, '$')->mapnew({idx, val -> val.text})
+ let noic_match2 = matchbufline('%', '\C\%u17f\+', 1, '$')->mapnew({idx, val -> val.text})
+ let ic_match3 = matchbufline('%', '\c[\u17f]\+', 1, '$')->mapnew({idx, val -> val.text})
+ let noic_match3 = matchbufline('%', '\C[\u17f]\+', 1, '$')->mapnew({idx, val -> val.text})
+
+ call assert_equal(['ss', 'Å¿Å¿'], ic_match, "Ignorecase Regex-engine: " .. &re)
+ call assert_equal(['Å¿Å¿'], noic_match, "No-Ignorecase Regex-engine: " .. &re)
+ call assert_equal(['s', 'ss', 'Å¿Å¿', 'Å¿'], ic_match2, "Ignorecase Regex-engine: " .. &re)
+ call assert_equal(['Å¿Å¿','Å¿'], noic_match2, "No-Ignorecase Regex-engine: " .. &re)
+ call assert_equal(['s', 'ss', 'Å¿Å¿', 'Å¿'], ic_match3, "Ignorecase Collection Regex-engine: " .. &re)
+ call assert_equal(['Å¿Å¿','Å¿'], noic_match3, "No-Ignorecase Collection Regex-engine: " .. &re)
+ endfor
+ bw!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim
index 1a9f49b..708aca2 100644
--- a/src/testdir/test_search.vim
+++ b/src/testdir/test_search.vim
@@ -1747,6 +1747,37 @@ func Test_search_with_no_last_pat()
call delete('Xresult')
endfunc
+" Test for using the last substitute pattern without last search pattern.
+func Test_search_with_last_substitute_pat()
+ let lines =<< trim [SCRIPT]
+ new
+ set shortmess+=S
+ call setline(1, repeat(['foofoo'], 3))
+ %s/foo/bar/
+ call assert_equal(repeat(['barfoo'], 3), getline(1, '$'))
+
+ call cursor(1, 1)
+ call assert_equal("/foo", execute('call feedkeys("/\r", "tx")', '')->trim())
+ call assert_equal([0, 1, 4, 0], getpos('.'))
+
+ if has('rightleft')
+ set rightleft rightleftcmd=search
+ call cursor(1, 1)
+ call assert_equal("oof/", execute('call feedkeys("/\r", "tx")', '')->trim())
+ call assert_equal([0, 1, 4, 0], getpos('.'))
+ endif
+
+ call writefile(v:errors, 'Xresult')
+ qall!
+ [SCRIPT]
+ call writefile(lines, 'Xscript', 'D')
+
+ if RunVim([], [], '--clean -S Xscript')
+ call assert_equal([], readfile('Xresult'))
+ endif
+ call delete('Xresult')
+endfunc
+
" Test for using tilde (~) atom in search. This should use the last used
" substitute pattern
func Test_search_tilde_pat()
diff --git a/src/testdir/test_selectmode.vim b/src/testdir/test_selectmode.vim
index bf1b52b..63aa0b9 100644
--- a/src/testdir/test_selectmode.vim
+++ b/src/testdir/test_selectmode.vim
@@ -321,4 +321,20 @@ func Test_ins_ctrl_o_in_insert_mode_resets_selectmode()
bwipe!
endfunc
+" Test that an :lmap mapping for a printable keypad key is applied when typing
+" it in Select mode.
+func Test_selectmode_keypad_lmap()
+ new
+ lnoremap <buffer> <kPoint> ???
+ lnoremap <buffer> <kEnter> !!!
+ setlocal iminsert=1
+ call setline(1, 'abcdef')
+ call feedkeys("gH\<kPoint>\<Esc>", 'tx')
+ call assert_equal(['???'], getline(1, '$'))
+ call feedkeys("gH\<kEnter>\<Esc>", 'tx')
+ call assert_equal(['!!!'], getline(1, '$'))
+
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim
index 0d76d7a..7f53d62 100644
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -245,7 +245,7 @@ func Test_sign_completion()
call assert_equal('"sign define jump list place undefine unplace', @:)
call feedkeys(":sign define Sign \<C-A>\<C-B>\"\<CR>", 'tx')
- call assert_equal('"sign define Sign culhl= icon= linehl= numhl= text= texthl=', @:)
+ call assert_equal('"sign define Sign culhl= icon= linehl= numhl= priority= text= texthl=', @:)
for hl in ['culhl', 'linehl', 'numhl', 'texthl']
call feedkeys(":sign define Sign "..hl.."=Spell\<C-A>\<C-B>\"\<CR>", 'tx')
@@ -1231,6 +1231,25 @@ func Test_sign_priority()
call sign_define("sign1", attr)
call sign_define("sign2", attr)
call sign_define("sign3", attr)
+ let attr = {'text' : '=>', 'linehl' : 'Search', 'texthl' : 'Search', 'priority': 60}
+ call sign_define("sign4", attr)
+
+ " Test for :sign list
+ let a = execute('sign list')
+ call assert_equal("\nsign sign1 text==> linehl=Search texthl=Search\n" .
+ \ "sign sign2 text==> linehl=Search texthl=Search\n" .
+ \ "sign sign3 text==> linehl=Search texthl=Search\n" .
+ \ "sign sign4 text==> priority=60 linehl=Search texthl=Search", a)
+
+ " Test for sign_getdefined()
+ let s = sign_getdefined()
+ call assert_equal([
+ \ {'name': 'sign1', 'texthl': 'Search', 'linehl': 'Search', 'text': '=>'},
+ \ {'name': 'sign2', 'texthl': 'Search', 'linehl': 'Search', 'text': '=>'},
+ \ {'name': 'sign3', 'texthl': 'Search', 'linehl': 'Search', 'text': '=>'},
+ \ {'name': 'sign4', 'priority': 60, 'texthl': 'Search', 'linehl': 'Search',
+ \ 'text': '=>'}],
+ \ s)
" Place three signs with different priority in the same line
call writefile(repeat(["Sun is shining"], 30), "Xsign", 'D')
@@ -1586,6 +1605,25 @@ func Test_sign_priority()
\ " line=10 id=5 group=g1 name=sign1 priority=20\n", a)
call sign_unplace('*')
+
+ " Test for sign with default priority.
+ call sign_place(1, 'g1', 'sign4', 'Xsign', {'lnum' : 3})
+ sign place 2 line=5 name=sign4 group=g1 file=Xsign
+
+ let s = sign_getplaced('Xsign', {'group' : '*'})
+ call assert_equal([
+ \ {'id' : 1, 'name' : 'sign4', 'lnum' : 3, 'group' : 'g1',
+ \ 'priority' : 60},
+ \ {'id' : 2, 'name' : 'sign4', 'lnum' : 5, 'group' : 'g1',
+ \ 'priority' : 60}],
+ \ s[0].signs)
+
+ let a = execute('sign place group=g1')
+ call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" .
+ \ " line=3 id=1 group=g1 name=sign4 priority=60\n" .
+ \ " line=5 id=2 group=g1 name=sign4 priority=60\n", a)
+
+ call sign_unplace('*')
call sign_undefine()
enew | only
endfunc
diff --git a/src/testdir/test_spell.vim b/src/testdir/test_spell.vim
index 1ddcd83..692e191 100644
--- a/src/testdir/test_spell.vim
+++ b/src/testdir/test_spell.vim
@@ -5,6 +5,7 @@ source check.vim
CheckFeature spell
source screendump.vim
+source view_util.vim
func TearDown()
set nospell
@@ -300,6 +301,20 @@ func Test_compl_with_CTRL_X_CTRL_K_using_spell()
set spell& spelllang& dictionary& ignorecase&
endfunc
+func Test_compl_with_CTRL_X_s()
+ new
+ set spell spelllang=en_us showmode
+ inoremap <buffer><F2> <Cmd>let g:msg = Screenline(&lines)<CR>
+
+ call feedkeys("STheatre\<C-X>s\<F2>\<C-Y>\<Esc>", 'tx')
+ call assert_equal(['Theater'], getline(1, '$'))
+ call assert_match('(^S^N^P)', g:msg)
+
+ bwipe!
+ set spell& spelllang& showmode&
+ unlet g:msg
+endfunc
+
func Test_spellrepall()
new
set spell
diff --git a/src/testdir/test_spellfile.vim b/src/testdir/test_spellfile.vim
index d8d954b..8abb680 100644
--- a/src/testdir/test_spellfile.vim
+++ b/src/testdir/test_spellfile.vim
@@ -845,6 +845,22 @@ func Test_spell_add_word()
%bw!
endfunc
+func Test_spell_add_long_word()
+ set spell spellfile=./Xspellfile.add spelllang=en
+
+ let word = repeat('a', 9000)
+ let v:errmsg = ''
+ " Spell checking doesn't really work for such a long word,
+ " but this should not cause an E1510 error.
+ exe 'spellgood ' .. word
+ call assert_equal('', v:errmsg)
+ call assert_equal([word], readfile('./Xspellfile.add'))
+
+ set spell& spellfile= spelllang& encoding=utf-8
+ call delete('./Xspellfile.add')
+ call delete('./Xspellfile.add.spl')
+endfunc
+
func Test_spellfile_verbose()
call writefile(['1', 'one'], 'XtestVerbose.dic', 'D')
call writefile([], 'XtestVerbose.aff', 'D')
diff --git a/src/testdir/test_substitute.vim b/src/testdir/test_substitute.vim
index afdc104..b25cd60 100644
--- a/src/testdir/test_substitute.vim
+++ b/src/testdir/test_substitute.vim
@@ -806,7 +806,7 @@ func Test_replace_keeppatterns()
a
foobar
-substitute foo asdf
+substitute foo asdf foo
one two
.
@@ -815,21 +815,26 @@ one two
/^substitute
s/foo/bar/
call assert_equal('foo', @/)
- call assert_equal('substitute bar asdf', getline('.'))
+ call assert_equal('substitute bar asdf foo', getline('.'))
/^substitute
keeppatterns s/asdf/xyz/
call assert_equal('^substitute', @/)
- call assert_equal('substitute bar xyz', getline('.'))
+ call assert_equal('substitute bar xyz foo', getline('.'))
+
+ /^substitute
+ &
+ call assert_equal('^substitute', @/)
+ call assert_equal('substitute bar xyz bar', getline('.'))
exe "normal /bar /e\<CR>"
call assert_equal(15, col('.'))
normal -
keeppatterns /xyz
call assert_equal('bar ', @/)
- call assert_equal('substitute bar xyz', getline('.'))
+ call assert_equal('substitute bar xyz bar', getline('.'))
exe "normal 0dn"
- call assert_equal('xyz', getline('.'))
+ call assert_equal('xyz bar', getline('.'))
close!
endfunc
diff --git a/src/testdir/test_tabpage.vim b/src/testdir/test_tabpage.vim
index 3624790..1a40567 100644
--- a/src/testdir/test_tabpage.vim
+++ b/src/testdir/test_tabpage.vim
@@ -965,6 +965,64 @@ func Test_tabpage_alloc_failure()
call assert_equal(1, tabpagenr('$'))
endfunc
+func Test_tabpage_tabclose()
+ " Default behaviour, move to the right.
+ call s:reconstruct_tabpage_for_test(6)
+ norm! 4gt
+ setl tcl=
+ tabclose
+ call assert_equal("n3", bufname())
+
+ " Move to the left.
+ call s:reconstruct_tabpage_for_test(6)
+ norm! 4gt
+ setl tcl=left
+ tabclose
+ call assert_equal("n1", bufname())
+
+ " Move to the last used tab page.
+ call s:reconstruct_tabpage_for_test(6)
+ norm! 5gt
+ norm! 2gt
+ setl tcl=uselast
+ tabclose
+ call assert_equal("n3", bufname())
+
+ " Same, but the last used tab page is invalid. Move to the right.
+ call s:reconstruct_tabpage_for_test(6)
+ norm! 5gt
+ norm! 3gt
+ setl tcl=uselast
+ tabclose 5
+ tabclose!
+ call assert_equal("n2", bufname())
+
+ " Same, but the last used tab page is invalid. Move to the left.
+ call s:reconstruct_tabpage_for_test(6)
+ norm! 5gt
+ norm! 3gt
+ setl tcl=uselast,left
+ tabclose 5
+ tabclose!
+ call assert_equal("n0", bufname())
+
+ " Move left when moving right is not possible.
+ call s:reconstruct_tabpage_for_test(6)
+ setl tcl=
+ norm! 6gt
+ tabclose
+ call assert_equal("n3", bufname())
+
+ " Move right when moving left is not possible.
+ call s:reconstruct_tabpage_for_test(6)
+ setl tcl=left
+ norm! 1gt
+ tabclose
+ call assert_equal("n0", bufname())
+
+ setl tcl&
+endfunc
+
" this was giving ml_get errors
func Test_tabpage_last_line()
enew
diff --git a/src/testdir/test_tagjump.vim b/src/testdir/test_tagjump.vim
index 432906e..c241937 100644
--- a/src/testdir/test_tagjump.vim
+++ b/src/testdir/test_tagjump.vim
@@ -958,8 +958,63 @@ func Test_tag_stack()
call settagstack(1, {'items' : []})
call assert_fails('pop', 'E73:')
+ " References to wiped buffer are deleted.
+ for i in range(10, 20)
+ edit Xtest
+ exe "tag var" .. i
+ endfor
+ edit Xtest
+
+ let t = gettagstack()
+ call assert_equal(11, t.length)
+ call assert_equal(12, t.curidx)
+
+ bwipe!
+
+ let t = gettagstack()
+ call assert_equal(0, t.length)
+ call assert_equal(1, t.curidx)
+
+ " References to wiped buffer are deleted with multiple tabpages.
+ let w1 = win_getid()
+ call settagstack(1, {'items' : []})
+ for i in range(10, 20) | edit Xtest | exe "tag var" .. i | endfor
+ enew
+
+ new
+ let w2 = win_getid()
+ call settagstack(1, {'items' : []})
+ for i in range(10, 20) | edit Xtest | exe "tag var" .. i | endfor
+ enew
+
+ tabnew
+ let w3 = win_getid()
+ call settagstack(1, {'items' : []})
+ for i in range(10, 20) | edit Xtest | exe "tag var" .. i | endfor
+ enew
+
+ new
+ let w4 = win_getid()
+ call settagstack(1, {'items' : []})
+ for i in range(10, 20) | edit Xtest | exe "tag var" .. i | endfor
+ enew
+
+ for w in [w1, w2, w3, w4]
+ let t = gettagstack(w)
+ call assert_equal(11, t.length)
+ call assert_equal(12, t.curidx)
+ endfor
+
+ bwipe! Xtest
+
+ for w in [w1, w2, w3, w4]
+ let t = gettagstack(w)
+ call assert_equal(0, t.length)
+ call assert_equal(1, t.curidx)
+ endfor
+
+ %bwipe!
set tags&
- %bwipe
endfunc
" Test for browsing multiple matching tags
diff --git a/src/testdir/test_taglist.vim b/src/testdir/test_taglist.vim
index 2dd2366..c5c7df2 100644
--- a/src/testdir/test_taglist.vim
+++ b/src/testdir/test_taglist.vim
@@ -100,9 +100,9 @@ func Test_tagfiles()
help
let tf = tagfiles()
- " if 'helplang includes another language, then we may find
- " 2 tagfiles (e.g.: for EN and RU)
- " we may need to adjust this, if further translated help files are included
+ " If 'helplang' includes another language, then we may find 2 tagfiles
+ " (e.g.: for EN and RU).
+ " We may need to adjust this, if further translated help files are included.
call assert_inrange(1, 2, len(tf))
call assert_equal(fnamemodify(expand('$VIMRUNTIME/doc/tags'), ':p:gs?\\?/?'),
\ fnamemodify(tf[0], ':p:gs?\\?/?'))
@@ -127,6 +127,47 @@ func Test_tagsfile_without_trailing_newline()
set tags&
endfunc
+" Check that specifying a stop directory in 'tags' works properly.
+func Test_tagfiles_stopdir()
+ let save_cwd = getcwd()
+
+ call mkdir('Xtagsdir1/Xtagsdir2/Xtagsdir3', 'pR')
+ call writefile([], 'Xtagsdir1/Xtags', 'D')
+
+ cd Xtagsdir1/
+ let &tags = './Xtags;' .. fnamemodify('..', ':p')
+ call assert_equal(1, len(tagfiles()))
+
+ cd Xtagsdir2/
+ let &tags = './Xtags;' .. fnamemodify('..', ':p')
+ call assert_equal(1, len(tagfiles()))
+
+ cd Xtagsdir3/
+ let &tags = './Xtags;' .. fnamemodify('..', ':p')
+ call assert_equal(0, len(tagfiles()))
+
+ let &tags = './Xtags;../'
+ call assert_equal(0, len(tagfiles()))
+
+ cd ..
+ call assert_equal(1, len(tagfiles()))
+
+ cd ..
+ call assert_equal(1, len(tagfiles()))
+
+ let &tags = './Xtags;..'
+ call assert_equal(1, len(tagfiles()))
+
+ cd Xtagsdir2/
+ call assert_equal(1, len(tagfiles()))
+
+ cd Xtagsdir3/
+ call assert_equal(0, len(tagfiles()))
+
+ set tags&
+ call chdir(save_cwd)
+endfunc
+
" Test for ignoring comments in a tags file
func Test_tagfile_ignore_comments()
call writefile([
diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim
index 7e450d9..507753c 100644
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -2256,6 +2256,17 @@ func Test_modifyOtherKeys_mapped()
iunmap '
iunmap <C-W><C-A>
+
+ " clean buffer
+ %d _
+ imap B b
+ imap BBB blimp
+ let input = repeat(GetEscCodeCSI27('B', 2), 3)
+ call feedkeys("a" .. input .. "\<Esc>", 'Lx!')
+ call assert_equal('blimp', getline(1))
+ " cleanup
+ iunmap BBB
+ iunmap B
set timeoutlen&
endfunc
diff --git a/src/testdir/test_termdebug.vim b/src/testdir/test_termdebug.vim
index a9762df..b5c12ae 100644
--- a/src/testdir/test_termdebug.vim
+++ b/src/testdir/test_termdebug.vim
@@ -63,6 +63,7 @@ func Test_termdebug_basic()
edit XTD_basic.c
Termdebug ./XTD_basic
+ call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
call WaitForAssert({-> assert_equal(3, winnr('$'))})
let gdb_buf = winbufnr(1)
wincmd b
@@ -123,13 +124,13 @@ func Test_termdebug_basic()
" 60 is approx spaceBuffer * 3
if winwidth(0) <= 78 + 60
Var
- call assert_equal(winnr(), winnr('$'))
- call assert_equal(winlayout(), ['col', [['leaf', 1002], ['leaf', 1001], ['leaf', 1000], ['leaf', 1003 + cn]]])
+ call assert_equal(winnr('$'), winnr())
+ call assert_equal(['col', [['leaf', 1002], ['leaf', 1001], ['leaf', 1000], ['leaf', 1003 + cn]]], winlayout())
let cn += 1
bw!
Asm
- call assert_equal(winnr(), winnr('$'))
- call assert_equal(winlayout(), ['col', [['leaf', 1002], ['leaf', 1001], ['leaf', 1000], ['leaf', 1003 + cn]]])
+ call assert_equal(winnr('$'), winnr())
+ call assert_equal(['col', [['leaf', 1002], ['leaf', 1001], ['leaf', 1000], ['leaf', 1003 + cn]]], winlayout())
let cn += 1
bw!
endif
@@ -138,16 +139,16 @@ func Test_termdebug_basic()
let winw = winwidth(0)
Var
if winwidth(0) < winw
- call assert_equal(winnr(), winnr('$') - 1)
- call assert_equal(winlayout(), ['col', [['leaf', 1002], ['leaf', 1001], ['row', [['leaf', 1003 + cn], ['leaf', 1000]]]]])
+ call assert_equal(winnr('$') - 1, winnr())
+ call assert_equal(['col', [['leaf', 1002], ['leaf', 1001], ['row', [['leaf', 1003 + cn], ['leaf', 1000]]]]], winlayout())
let cn += 1
bw!
endif
let winw = winwidth(0)
Asm
if winwidth(0) < winw
- call assert_equal(winnr(), winnr('$') - 1)
- call assert_equal(winlayout(), ['col', [['leaf', 1002], ['leaf', 1001], ['row', [['leaf', 1003 + cn], ['leaf', 1000]]]]])
+ call assert_equal(winnr('$') - 1, winnr())
+ call assert_equal(['col', [['leaf', 1002], ['leaf', 1001], ['row', [['leaf', 1003 + cn], ['leaf', 1000]]]]], winlayout())
let cn += 1
bw!
endif
@@ -160,6 +161,19 @@ func Test_termdebug_basic()
call WaitForAssert({-> assert_equal(1, winnr('$'))})
call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs)
+ for use_prompt in [v:true, v:false]
+ let g:termdebug_config = {}
+ let g:termdebug_config['use_prompt'] = use_prompt
+ TermdebugCommand ./XTD_basic arg args
+ call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
+ call WaitForAssert({-> assert_equal(3, winnr('$'))})
+ wincmd t
+ quit!
+ redraw!
+ call WaitForAssert({-> assert_equal(1, winnr('$'))})
+ unlet g:termdebug_config
+ endfor
+
call s:cleanup_files(bin_name)
%bw!
endfunc
@@ -174,6 +188,7 @@ func Test_termdebug_tbreak()
execute 'edit ' .. src_name
execute 'Termdebug ./' .. bin_name
+ call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
call WaitForAssert({-> assert_equal(3, winnr('$'))})
let gdb_buf = winbufnr(1)
wincmd b
@@ -234,6 +249,7 @@ func Test_termdebug_mapping()
call assert_true(maparg('-', 'n', 0, 1)->empty())
call assert_true(maparg('+', 'n', 0, 1)->empty())
Termdebug
+ call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
call WaitForAssert({-> assert_equal(3, winnr('$'))})
wincmd b
call assert_false(maparg('K', 'n', 0, 1)->empty())
@@ -256,6 +272,7 @@ func Test_termdebug_mapping()
nnoremap - :echom "-"<cr>
nnoremap + :echom "+"<cr>
Termdebug
+ call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
call WaitForAssert({-> assert_equal(3, winnr('$'))})
wincmd b
call assert_false(maparg('K', 'n', 0, 1)->empty())
@@ -278,76 +295,184 @@ func Test_termdebug_mapping()
call assert_equal(':echom "K"<cr>', maparg('K', 'n', 0, 1).rhs)
%bw!
+
+ " -- Test that local-buffer mappings are restored in the correct buffers --
+ " local mappings for foo
+ file foo
nnoremap <buffer> K :echom "bK"<cr>
nnoremap <buffer> - :echom "b-"<cr>
nnoremap <buffer> + :echom "b+"<cr>
+
+ " no mappings for 'bar'
+ enew
+ file bar
+
+ " Start termdebug from foo
+ buffer foo
Termdebug
+ call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
call WaitForAssert({-> assert_equal(3, winnr('$'))})
wincmd b
call assert_true(maparg('K', 'n', 0, 1).buffer)
call assert_true(maparg('-', 'n', 0, 1).buffer)
call assert_true(maparg('+', 'n', 0, 1).buffer)
call assert_equal(maparg('K', 'n', 0, 1).rhs, ':echom "bK"<cr>')
+
+ Source
+ buffer bar
+ call assert_false(maparg('K', 'n', 0, 1)->empty())
+ call assert_false(maparg('-', 'n', 0, 1)->empty())
+ call assert_false(maparg('+', 'n', 0, 1)->empty())
+ call assert_true(maparg('K', 'n', 0, 1).buffer->empty())
+ call assert_true(maparg('-', 'n', 0, 1).buffer->empty())
+ call assert_true(maparg('+', 'n', 0, 1).buffer->empty())
wincmd t
quit!
redraw!
call WaitForAssert({-> assert_equal(1, winnr('$'))})
+
+ " Termdebug session ended. Buffer 'bar' shall have no mappings
+ call assert_true(bufname() ==# 'bar')
+ call assert_false(maparg('K', 'n', 0, 1)->empty())
+ call assert_false(maparg('-', 'n', 0, 1)->empty())
+ call assert_false(maparg('+', 'n', 0, 1)->empty())
+ call assert_true(maparg('K', 'n', 0, 1).buffer->empty())
+ call assert_true(maparg('-', 'n', 0, 1).buffer->empty())
+ call assert_true(maparg('+', 'n', 0, 1).buffer->empty())
+
+ " Buffer 'foo' shall have the same mapping as before running the termdebug
+ " session
+ buffer foo
+ call assert_true(bufname() ==# 'foo')
call assert_true(maparg('K', 'n', 0, 1).buffer)
call assert_true(maparg('-', 'n', 0, 1).buffer)
call assert_true(maparg('+', 'n', 0, 1).buffer)
call assert_equal(':echom "bK"<cr>', maparg('K', 'n', 0, 1).rhs)
+ nunmap K
+ nunmap +
+ nunmap -
%bw!
endfunc
-func Test_termdebug_bufnames()
- " Test if user has filename/folders named gdb, Termdebug-gdb-console,
- " etc. in the current directory
+function Test_termdebug_save_restore_variables()
+ " saved mousemodel
+ let &mousemodel=''
+
+ " saved keys
+ nnoremap K :echo "hello world!"<cr>
+ let expected_map_K = maparg('K', 'n', 0 , 1)
+ nnoremap + :echo "hello plus!"<cr>
+ let expected_map_plus = maparg('+', 'n', 0 , 1)
+ let expected_map_minus = {}
+
+ " saved &columns
+ let expected_columns = &columns
+
+ " We want termdebug to overwrite 'K' map but not '+' map.
let g:termdebug_config = {}
- let g:termdebug_config['use_prompt'] = 1
- let filename = 'gdb'
- let replacement_filename = 'Termdebug-gdb-console'
+ let g:termdebug_config['map_K'] = v:true
- call writefile(['This', 'is', 'a', 'test'], filename, 'D')
- " Throw away the file once the test has done.
Termdebug
- " Once termdebug has completed the startup you should have 3 windows on screen
+ call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
call WaitForAssert({-> assert_equal(3, winnr('$'))})
- " A file named filename already exists in the working directory,
- " hence you must call the newly created buffer differently
- call WaitForAssert({-> assert_false(bufexists(filename))})
- call WaitForAssert({-> assert_true(bufexists(replacement_filename))})
+ call WaitForAssert({-> assert_match(&mousemodel, 'popup_setpos')})
+ wincmd t
quit!
call WaitForAssert({-> assert_equal(1, winnr('$'))})
- " Check if error message is in :message
- let g:termdebug_config['disasm_window'] = 1
- let filename = 'Termdebug-asm-listing'
- call writefile(['This', 'is', 'a', 'test'], filename, 'D')
- " Check only the head of the error message
- let error_message = "You have a file/folder named '" .. filename .. "'"
- Termdebug
- " Once termdebug has completed the startup you should have 4 windows on screen
- call WaitForAssert({-> assert_equal(4, winnr('$'))})
- call WaitForAssert({-> assert_notequal(-1, stridx(execute('messages'), error_message))})
- quit!
- wincmd b
- wincmd q
- call WaitForAssert({-> assert_equal(1, winnr('$'))})
+ call assert_true(empty(&mousemodel))
+ call assert_true(empty(expected_map_minus))
+ call assert_equal(expected_map_K.rhs, maparg('K', 'n', 0, 1).rhs)
+ call assert_equal(expected_map_plus.rhs, maparg('+', 'n', 0, 1).rhs)
+
+ call assert_equal(expected_columns, &columns)
+
+ nunmap K
+ nunmap +
unlet g:termdebug_config
-endfunc
+endfunction
-function Test_termdebug_save_restore_variables()
- let &mousemodel=''
+function Test_termdebug_sanity_check()
+ " Test if user has filename/folders with wrong names
+ let g:termdebug_config = {}
+ let s:dict = {'disasm_window': 'Termdebug-asm-listing', 'use_prompt': 'gdb', 'variables_window': 'Termdebug-variables-listing'}
+
+ for key in keys(s:dict)
+ let s:filename = s:dict[key]
+ let g:termdebug_config[key] = v:true
+ let s:error_message = "You have a file/folder named '" .. s:filename .. "'"
+
+ " Write dummy file with bad name
+ call writefile(['This', 'is', 'a', 'test'], s:filename, 'D')
+ Termdebug
+ call WaitForAssert({-> assert_true(execute('messages') =~ s:error_message)})
+ call WaitForAssert({-> assert_equal(1, winnr('$'))})
+
+ call delete(s:filename)
+ call remove(g:termdebug_config, key)
+ endfor
+
+ unlet g:termdebug_config
+endfunction
+
+function Test_termdebug_double_termdebug_instances()
+ let s:error_message = 'Terminal debugger already running, cannot run two'
Termdebug
+ call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
call WaitForAssert({-> assert_equal(3, winnr('$'))})
- call WaitForAssert({-> assert_match(&mousemodel, 'popup_setpos')})
+ Termdebug
+ call WaitForAssert({-> assert_true(execute('messages') =~ s:error_message)})
wincmd t
quit!
call WaitForAssert({-> assert_equal(1, winnr('$'))})
- call WaitForAssert({-> assert_true(empty(&mousemodel))})
+ :%bw!
endfunction
+function Test_termdebug_config_types()
+ " TODO Remove the deprecated features after 1 Jan 2025.
+ let g:termdebug_config = {}
+ let s:error_message = 'Deprecation Warning:'
+ call assert_true(maparg('K', 'n', 0, 1)->empty())
+
+ for key in ['disasm_window', 'variables_window', 'map_K']
+ for val in [0, 1, v:true, v:false]
+ let g:termdebug_config[key] = val
+ Termdebug
+
+ " Type check: warning is displayed
+ if typename(val) == 'number'
+ call WaitForAssert({-> assert_true(execute('messages') =~ s:error_message)})
+ endif
+
+ " Test on g:termdebug_config keys
+ if val && key != 'map_K'
+ call WaitForAssert({-> assert_equal(4, winnr('$'))})
+ call remove(g:termdebug_config, key)
+ else
+ call WaitForAssert({-> assert_equal(3, winnr('$'))})
+ endif
+
+ " Test on mapping
+ if key == 'map_K'
+ if val
+ call assert_equal(':Evaluate<CR>', maparg('K', 'n', 0, 1).rhs)
+ else
+ call assert_true(maparg('K', 'n', 0, 1)->empty())
+ endif
+ endif
+
+ " Shutoff termdebug
+ wincmd t
+ quit!
+ call WaitForAssert({-> assert_equal(1, winnr('$'))})
+ :%bw!
+
+ endfor
+ endfor
+
+ unlet g:termdebug_config
+endfunction
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_textobjects.vim b/src/testdir/test_textobjects.vim
index d5e772d..2622b06 100644
--- a/src/testdir/test_textobjects.vim
+++ b/src/testdir/test_textobjects.vim
@@ -201,6 +201,18 @@ func Test_string_html_objects()
normal! 2k0vaty
call assert_equal("<div><div\nattr=\"attr\"\n></div></div>", @", e)
+ " tag, that includes a > in some attribute
+ let t = "<div attr=\"attr >> foo >> bar \">Hello</div>"
+ $put =t
+ normal! fHyit
+ call assert_equal("Hello", @", e)
+
+ " tag, that includes a > in some attribute
+ let t = "<div attr='attr >> foo >> bar '>Hello 123</div>"
+ $put =t
+ normal! fHyit
+ call assert_equal("Hello 123", @", e)
+
set quoteescape&
" this was going beyond the end of the line
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 2bf2834..57277f7 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -2901,6 +2901,10 @@ func Test_prop_inserts_text_before_double_width_wrap()
call writefile(lines, 'XscriptPropsBeforeDoubleWidthWrap', 'D')
let buf = RunVimInTerminal('-S XscriptPropsBeforeDoubleWidthWrap', #{rows: 3, cols: 50})
call VerifyScreenDump(buf, 'Test_prop_inserts_text_before_double_width_wrap_1', {})
+ call term_sendkeys(buf, 'g0')
+ call VerifyScreenDump(buf, 'Test_prop_inserts_text_before_double_width_wrap_2', {})
+ call term_sendkeys(buf, ":set showbreak=+++\<CR>")
+ call VerifyScreenDump(buf, 'Test_prop_inserts_text_before_double_width_wrap_3', {})
call StopVimInTerminal(buf)
endfunc
diff --git a/src/testdir/test_tohtml.vim b/src/testdir/test_tohtml.vim
new file mode 100644
index 0000000..a1c8572
--- /dev/null
+++ b/src/testdir/test_tohtml.vim
@@ -0,0 +1,72 @@
+" Tests for Vim :TOhtml
+
+source check.vim
+
+func s:setup_basic(src_name)
+ let lines =<< trim END
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ int isprime(int n)
+ {
+ if (n <= 1)
+ return 0;
+
+ for (int i = 2; i <= n / 2; i++)
+ if (n % i == 0)
+ return 0;
+
+ return 1;
+ }
+
+ int main(int argc, char *argv[])
+ {
+ int n = 7;
+
+ printf("%d is %s prime\n", n, isprime(n) ? "a" : "not a");
+
+ return 0;
+ }
+ END
+ call writefile(lines, a:src_name)
+ exe 'edit ' . a:src_name
+ TOhtml
+ write
+endfunc
+
+func s:cleanup_basic(src_name)
+ call delete(a:src_name)
+ call delete(a:src_name . ".html")
+endfunc
+
+source $VIMRUNTIME/plugin/tohtml.vim
+
+func Test_tohtml_basic()
+ let src_name = "Test_tohtml_basic.c"
+ call s:setup_basic(src_name)
+ let expected = readfile("samples/" . src_name . ".html")
+ let actual = readfile(src_name . ".html")
+ call assert_equal(expected[0:3], actual[0:3])
+ " Ignore the title
+ call assert_equal(expected[5:11], actual[5:11])
+ " Ignore pre and body css
+ call assert_equal(expected[14:], actual[14:])
+ call s:cleanup_basic(src_name)
+endfunc
+
+func Test_tohtml_basic_no_css()
+ let g:html_use_css = 0
+ let src_name = "Test_tohtml_basic_no_css.c"
+ call s:setup_basic(src_name)
+ let expected = readfile("samples/" . src_name . ".html")
+ let actual = readfile(src_name . ".html")
+ call assert_equal(expected[0:3], actual[0:3])
+ " Ignore the title
+ call assert_equal(expected[5:10], actual[5:10])
+ " Ignore body's inline css
+ call assert_equal(expected[12:], actual[12:])
+ call s:cleanup_basic(src_name)
+ unlet g:html_use_css
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_usercommands.vim b/src/testdir/test_usercommands.vim
index e161ee6..fe08b95 100644
--- a/src/testdir/test_usercommands.vim
+++ b/src/testdir/test_usercommands.vim
@@ -133,6 +133,10 @@ function Test_cmdmods()
\ 'silent verbose aboveleft belowright botright tab topleft vertical',
\ g:mods)
+ kee keep keepm keepma keepmar keepmarks keepa keepalt keepj keepjumps
+ \ keepp keeppatterns MyCmd
+ call assert_equal('keepalt keepjumps keepmarks keeppatterns', g:mods)
+
let g:mods = ''
command! -nargs=* MyQCmd let g:mods .= '<q-mods> '
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 6b1a50d..7ed9123 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -497,6 +497,56 @@ def Test_call_call()
v9.CheckSourceDefAndScriptFailure(['call("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
enddef
+def Test_call_imports()
+ # Use call with an imported function
+ var lines =<< trim END
+ vim9script
+
+ export const foo = 'foo'
+
+ export def Imported()
+ enddef
+
+ var count: number
+ export def ImportedListArg(l: list<number>)
+ count += 1
+ l[0] += count
+ enddef
+ END
+ writefile(lines, 'Test_call_imports_importme', 'D')
+ lines =<< trim END
+ vim9script
+ import './Test_call_imports_importme' as i_imp
+
+ var l = [12]
+ call('i_imp.ImportedListArg', [l])
+ assert_equal(13, l[0])
+ const ImportedListArg = i_imp.ImportedListArg
+ call('ImportedListArg', [l])
+ assert_equal(15, l[0])
+ const Imported = i_imp.Imported
+ call("Imported", [])
+
+ assert_equal('foo', i_imp.foo)
+ const foo = i_imp.foo
+ assert_equal('foo', foo)
+ END
+ v9.CheckSourceScriptSuccess(lines)
+
+ # A few error cases
+ lines =<< trim END
+ vim9script
+ import './Test_call_imports_importme' as i_imp
+ const Imported = i_imp.Imported
+ const foo = i_imp.foo
+
+ assert_fails('call("i_imp.foo", [])', 'E117:') # foo is not a function
+ assert_fails('call("foo", [])', 'E117:') # foo is not a function
+ assert_fails('call("i_xxx.foo", [])', 'E117:') # i_xxx not imported file
+ END
+ v9.CheckSourceScriptSuccess(lines)
+enddef
+
def Test_ch_canread()
if !has('channel')
CheckFeature channel
@@ -1969,6 +2019,17 @@ def Test_getreginfo()
getreginfo('').regcontents->assert_equal(['D1E2F3'])
enddef
+def Test_getregionpos()
+ var lines =<< trim END
+ cursor(1, 1)
+ var pos = getregionpos(getpos('.'), getpos('$'))
+ for p in pos
+ assert_equal(bufnr('%'), p[0][0])
+ endfor
+ END
+ v9.CheckSourceDefSuccess(lines)
+enddef
+
def Test_getregtype()
var lines = ['aaa', 'bbb', 'ccc']
setreg('a', lines)
@@ -3152,6 +3213,11 @@ def Test_popup_settext()
v9.CheckSourceDefAndScriptFailure(['popup_settext(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2'])
enddef
+def Test_popup_setbuf()
+ v9.CheckSourceDefAndScriptFailure(['popup_setbuf([], "abc")'], ['E1013: Argument 1: type mismatch, expected number but got list<any>', 'E1210: Number required for argument 1'])
+ v9.CheckSourceDefAndScriptFailure(['popup_setbuf(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 2'])
+enddef
+
def Test_popup_show()
v9.CheckSourceDefAndScriptFailure(['popup_show("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
v9.CheckSourceDefAndScriptFailure(['popup_show(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1'])
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index e92fcc5..8791a52 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -661,6 +661,44 @@ def Test_object_not_set()
Func()
END
v9.CheckSourceFailure(lines, 'E1363: Incomplete type', 1)
+
+ # Reference a object variable through a null class object which is stored in a
+ # variable of type "any".
+ lines =<< trim END
+ vim9script
+
+ def Z()
+ var o: any = null_object
+ o.v = 4
+ enddef
+ Z()
+ END
+ v9.CheckSourceFailure(lines, 'E1360: Using a null object', 2)
+
+ # Do "echom" of a null object variable.
+ lines =<< trim END
+ vim9script
+
+ def X()
+ var x = null_object
+ echom x
+ enddef
+ X()
+ END
+ v9.CheckSourceFailure(lines, 'E1324: Using an Object as a String', 2)
+
+ # Use a null object variable that vim wants to force to number.
+ lines =<< trim END
+ vim9script
+
+ def X()
+ var o = null_object
+ var l = [ 1, o]
+ sort(l, 'N')
+ enddef
+ X()
+ END
+ v9.CheckSourceFailure(lines, 'E1324: Using an Object as a String', 3)
enddef
" Null object assignment and comparison
@@ -2246,6 +2284,47 @@ def Test_class_object_to_string()
assert_equal("object of TextPosition {lnum: 1, col: 22}", string(pos))
END
v9.CheckSourceSuccess(lines)
+
+ # check string() with object nesting
+ lines =<< trim END
+ vim9script
+ class C
+ var nest1: C
+ var nest2: C
+ def Init(n1: C, n2: C)
+ this.nest1 = n1
+ this.nest2 = n2
+ enddef
+ endclass
+
+ var o1 = C.new()
+ var o2 = C.new()
+ o1.Init(o1, o2)
+ o2.Init(o2, o1)
+
+ # The following previously put's vim into an infinite loop.
+
+ var expect = "object of C {nest1: object of C {...}, nest2: object of C {nest1: object of C {...}, nest2: object of C {...}}}"
+ assert_equal(expect, string(o1))
+ END
+ v9.CheckSourceSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+
+ class B
+ endclass
+
+ class C
+ var b: B
+ var c: C
+ endclass
+
+ var o1 = C.new(B.new(), C.new(B.new()))
+ var expect = "object of C {b: object of B {}, c: object of C {b: object of B {}, c: object of [unknown]}}"
+ assert_equal(expect, string(o1))
+ END
+ v9.CheckSourceSuccess(lines)
enddef
def Test_interface_basics()
@@ -3173,6 +3252,141 @@ def Test_using_base_class()
v9.CheckSourceSuccess(lines)
enddef
+def Test_super_dispatch()
+ # See #15448 and #15463
+ var lines =<< trim END
+ vim9script
+
+ class A
+ def String(): string
+ return 'A'
+ enddef
+ endclass
+
+ class B extends A
+ def String(): string
+ return super.String()
+ enddef
+ endclass
+
+ class C extends B
+ endclass
+
+ assert_equal('A', C.new().String())
+ END
+ v9.CheckSourceSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+
+ class A
+ def F(): string
+ return 'AA'
+ enddef
+ endclass
+
+ class B extends A
+ def F(): string
+ return 'BB'
+ enddef
+ def S(): string
+ return super.F()
+ enddef
+ def S0(): string
+ return this.S()
+ enddef
+ endclass
+
+ class C extends B
+ def F(): string
+ return 'CC'
+ enddef
+ def ToB(): string
+ return super.F()
+ enddef
+ endclass
+
+ assert_equal('AA', B.new().S())
+ assert_equal('AA', C.new().S())
+ assert_equal('AA', B.new().S0())
+ assert_equal('AA', C.new().S0())
+
+ assert_equal('BB', C.new().ToB())
+
+ assert_equal('CC', C.new().F())
+ assert_equal('BB', B.new().F())
+ assert_equal('AA', A.new().F())
+ END
+ v9.CheckSourceSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+
+ var call_chain: list<string>
+
+ abstract class A
+ abstract def _G(): string
+
+ def F(): string
+ call_chain->add('A.F()')
+ return this._G()
+ enddef
+ def _H(): string
+ call_chain->add('A._H()')
+ return this.F()
+ enddef
+ endclass
+
+ class B extends A
+ def _G(): string
+ call_chain->add('B.G()')
+ return 'BBB'
+ enddef
+ def SF(): string
+ call_chain->add('B.SF()')
+ return super._H()
+ enddef
+ endclass
+
+ class C extends B
+ endclass
+
+ class D extends C
+ def SF(): string
+ call_chain->add('D.SF()')
+ return super.SF()
+ enddef
+ endclass
+
+ class E extends D
+ def SF(): string
+ call_chain->add('E.SF()')
+ return super.SF()
+ enddef
+ endclass
+
+ class F extends E
+ def _G(): string
+ call_chain->add('F._G()')
+ return 'FFF'
+ enddef
+ endclass
+
+ # E.new() -> A.F() -> B._G()
+ call_chain = []
+ var o1 = E.new()
+ assert_equal('BBB', o1.F())
+ assert_equal(['A.F()', 'B.G()'], call_chain)
+
+ # F.new() -> E.SF() -> D.SF() -> B.SF() -> A._H() -> A.F() -> F._G()
+ call_chain = []
+ var o2 = F.new()
+ assert_equal('FFF', o2.SF())
+ assert_equal(['E.SF()', 'D.SF()', 'B.SF()', 'A._H()', 'A.F()', 'F._G()'], call_chain)
+ END
+ v9.CheckSourceSuccess(lines)
+enddef
+
def Test_class_import()
var lines =<< trim END
vim9script
@@ -7162,6 +7376,47 @@ def Test_null_object_method_call()
T()
END
v9.CheckSourceFailure(lines, 'E1360: Using a null object', 2)
+
+ # Calling an object method defined in a class that is extended. This differs
+ # from the previous by invoking ISN_METHODCALL instead of ISN_DCALL.
+ lines =<< trim END
+ vim9script
+
+ class C0
+ def F()
+ enddef
+ endclass
+
+ class C extends C0
+ endclass
+
+ def X()
+ var o: C0 = null_object
+ o.F()
+ enddef
+ X()
+ END
+ v9.CheckSourceFailure(lines, 'E1360: Using a null object', 2)
+
+ # Getting a function ref an object method.
+ lines =<< trim END
+ vim9script
+
+ class C0
+ def F()
+ enddef
+ endclass
+
+ class C extends C0
+ endclass
+
+ def X()
+ var o: C0 = null_object
+ var XXX = o.F
+ enddef
+ X()
+ END
+ v9.CheckSourceFailure(lines, 'E1360: Using a null object', 2)
enddef
" Test for using a dict as an object member
@@ -10425,6 +10680,20 @@ func Test_object_string()
call v9.CheckSourceSuccess(lines)
endfunc
+" Test for using the string() builtin method with an object's method
+def Test_method_string()
+ var lines =<< trim END
+ vim9script
+ class A
+ def F()
+ enddef
+ endclass
+ assert_match('function(''<SNR>\d\+_A\.F'')', string(A.new().F))
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
+
" Test for using a class in the class definition
def Test_Ref_Class_Within_Same_Class()
var lines =<< trim END
@@ -10486,6 +10755,156 @@ def Test_Ref_Class_Within_Same_Class()
v9.CheckScriptFailure(lines, 'E1347: Not a valid interface: A', 3)
enddef
+" Test for comparing a class referencing itself
+def Test_Object_Compare_With_Recursive_Class_Ref()
+ var lines =<< trim END
+ vim9script
+
+ class C
+ public var nest: C
+ endclass
+
+ var o1 = C.new()
+ o1.nest = o1
+
+ var result = o1 == o1
+ assert_equal(true, result)
+ END
+ v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+
+ class C
+ public var nest: C
+ endclass
+ var o1 = C.new()
+ var o2 = C.new(C.new())
+
+ var result = o1 == o2
+ assert_equal(false, result)
+ END
+ v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+ class C
+ var nest1: C
+ var nest2: C
+ def Init(n1: C, n2: C)
+ this.nest1 = n1
+ this.nest2 = n2
+ enddef
+ endclass
+
+ var o1 = C.new()
+ var o2 = C.new()
+ o1.Init(o1, o2)
+ o2.Init(o2, o1)
+
+ var result = o1 == o2
+ assert_equal(true, result)
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
+" Test for comparing a class with nesting objects
+def Test_Object_Compare_With_Nesting_Objects()
+ # On a compare, after vim equal recurses 1000 times, not finding an unequal,
+ # return the compare is equal.
+ # Test that limit
+
+ var lines =<< trim END
+ vim9script
+ class C
+ public var n: number
+ public var nest: C
+
+ # Create a "C" that chains/nests to indicated depth.
+ # return {head: firstC, tail: lastC}
+ static def CreateNested(depth: number): dict<C>
+ var first = C.new(1, null_object)
+ var last = first
+ for i in range(2, depth)
+ last.nest = C.new(i, null_object)
+ last = last.nest
+ endfor
+ return {head: first, tail: last}
+ enddef
+
+ # Return pointer to nth item in chain.
+ def GetLink(depth: number): C
+ var count = 1
+ var p: C = this
+ while count < depth
+ p = p.nest
+ if p == null
+ throw "too deep"
+ endif
+ count += 1
+ endwhile
+ return p
+ enddef
+
+ # Return the length of the chain
+ def len(): number
+ var count = 1
+ var p: C = this
+ while p.nest != null
+ p = p.nest
+ count += 1
+ endwhile
+ return count
+ enddef
+ endclass
+
+ var chain = C.CreateNested(3)
+ var s = "object of C {n: 1, nest: object of C {n: 2, nest: object of C {n: 3, nest: object of [unknown]}}}"
+ assert_equal(s, string(chain.head))
+ assert_equal(3, chain.head->len())
+
+ var chain1 = C.CreateNested(100)
+ var chain2 = C.CreateNested(100)
+ assert_true(chain1.head == chain2.head)
+
+ # modify the tail of chain2, compare not equal
+ chain2.tail.n = 123456
+ assert_true(chain1.head != chain2.head)
+
+ # a tail of a different length compares not equal
+ chain2 = C.CreateNested(101)
+ assert_true(chain1.head != chain2.head)
+
+ chain1 = C.CreateNested(1000)
+ chain2 = C.CreateNested(1000)
+ assert_true(chain1.head == chain2.head)
+
+ # modify the tail of chain2, compare not equal
+ chain2.tail.n = 123456
+ assert_true(chain1.head != chain2.head)
+
+ # try a chain longer that the limit
+ chain1 = C.CreateNested(1001)
+ chain2 = C.CreateNested(1001)
+ assert_true(chain1.head == chain2.head)
+
+ # modify the tail, but still equal
+ chain2.tail.n = 123456
+ assert_true(chain1.head == chain2.head)
+
+ # remove 2 items from front, shorten the chain by two.
+ chain1.head = chain1.head.GetLink(3)
+ chain2.head = chain2.head.GetLink(3)
+ assert_equal(3, chain1.head.n)
+ assert_equal(3, chain2.head.n)
+ assert_equal(999, chain1.head->len())
+ assert_equal(999, chain2.head->len())
+ # Now less than the limit, compare not equal
+ assert_true(chain1.head != chain2.head)
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
" Test for using a compound operator from a lambda function in an object method
def Test_compound_op_in_objmethod_lambda()
# Test using the "+=" operator
@@ -10744,4 +11163,54 @@ def Test_class_object_index()
v9.CheckScriptFailure(lines, 'E689: Index not allowed after a object: a[10] = 1', 5)
enddef
+def Test_class_member_init_typecheck()
+ # Ensure the class member is assigned its declared type.
+ var lines =<< trim END
+ vim9script
+ class S
+ static var l: list<string> = []
+ endclass
+ S.l->add(123)
+ END
+ v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 5)
+
+ # Ensure the initializer value and the declared type match.
+ lines =<< trim END
+ vim9script
+ class S
+ var l: list<string> = [1, 2, 3]
+ endclass
+ var o = S.new()
+ END
+ v9.CheckScriptFailure(lines, 'E1382: Variable "l": type mismatch, expected list<string> but got list<number>')
+
+ # Ensure the class member is assigned its declared type.
+ lines =<< trim END
+ vim9script
+ class S
+ var l: list<string> = []
+ endclass
+ var o = S.new()
+ o.l->add(123)
+ END
+ v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 6)
+enddef
+
+def Test_class_cast()
+ var lines =<< trim END
+ vim9script
+ class A
+ endclass
+ class B extends A
+ var mylen: number
+ endclass
+ def F(o: A): number
+ return (<B>o).mylen
+ enddef
+
+ defcompile F
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index a9e10e7..51ae7e6 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -2036,6 +2036,14 @@ def Test_no_space_after_command()
v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1)
enddef
+def Test_lambda_crash()
+ # This used to crash Vim
+ var lines =<< trim END
+ vim9 () => super => {
+ END
+ v9.CheckScriptFailureList(lines, ["E1356:", "E1405:"])
+enddef
+
" Test for the 'previewpopup' option
def Test_previewpopup()
set previewpopup=height:10,width:60
@@ -2044,6 +2052,7 @@ def Test_previewpopup()
assert_notequal(id, 0)
assert_match('Xppfile', popup_getoptions(id).title)
popup_clear()
+ bw Xppfile
set previewpopup&
enddef
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index c74cce4..7746b23 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -1761,6 +1761,74 @@ def Test_disassemble_typecast()
instr)
enddef
+def Test_disassemble_object_cast()
+ # Downcasting.
+ var lines =<< trim END
+ vim9script
+ class A
+ endclass
+ class B extends A
+ var mylen: number
+ endclass
+ def F(o: A): number
+ return (<B>o).mylen
+ enddef
+
+ g:instr = execute('disassemble F')
+ END
+ v9.CheckScriptSuccess(lines)
+ assert_match('\<SNR>\d*_F\_s*' ..
+ 'return (<B>o).mylen\_s*' ..
+ '0 LOAD arg\[-1\]\_s*' ..
+ '1 CHECKTYPE object<B> stack\[-1\]\_s*' ..
+ '2 OBJ_MEMBER 0\_s*' ..
+ '3 RETURN\_s*',
+ g:instr)
+
+ # Upcasting.
+ lines =<< trim END
+ vim9script
+ class A
+ var mylen: number
+ endclass
+ class B extends A
+ endclass
+ def F(o: B): number
+ return (<A>o).mylen
+ enddef
+
+ g:instr = execute('disassemble F')
+ END
+ v9.CheckScriptSuccess(lines)
+ assert_match('\<SNR>\d*_F\_s*' ..
+ 'return (<A>o).mylen\_s*' ..
+ '0 LOAD arg\[-1\]\_s*' ..
+ '1 OBJ_MEMBER 0\_s*' ..
+ '2 RETURN\_s*',
+ g:instr)
+
+ # Casting, type is not statically known.
+ lines =<< trim END
+ vim9script
+ class A
+ endclass
+ class B extends A
+ endclass
+ def F(o: any): any
+ return <A>o
+ enddef
+
+ g:instr = execute('disassemble F')
+ END
+ v9.CheckScriptSuccess(lines)
+ assert_match('\<SNR>\d*_F\_s*' ..
+ 'return <A>o\_s*' ..
+ '0 LOAD arg\[-1\]\_s*' ..
+ '1 CHECKTYPE object<A> stack\[-1\]\_s*' ..
+ '2 RETURN\_s*',
+ g:instr)
+enddef
+
def s:Computing()
var nr = 3
var nrres = nr + 7
@@ -3496,4 +3564,26 @@ def Test_disassemble_compound_op_in_closure()
unlet g:instr
enddef
+def Test_disassemble_member_initializer()
+ var lines =<< trim END
+ vim9script
+ class A
+ var l: list<string> = []
+ var d: dict<string> = {}
+ endclass
+ g:instr = execute('disassemble A.new')
+ END
+ v9.CheckScriptSuccess(lines)
+ # Ensure SETTYPE is emitted and that matches the declared type.
+ assert_match('new\_s*' ..
+ '0 NEW A size \d\+\_s*' ..
+ '1 NEWLIST size 0\_s*' ..
+ '2 SETTYPE list<string>\_s*' ..
+ '3 STORE_THIS 0\_s*' ..
+ '4 NEWDICT size 0\_s*' ..
+ '5 SETTYPE dict<string>\_s*' ..
+ '6 STORE_THIS 1', g:instr)
+ unlet g:instr
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index d07bbfb..030ff83 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -164,6 +164,16 @@ def Test_wrong_function_name()
END
v9.CheckScriptFailure(lines, 'E1182:')
delfunc g:Define
+
+ lines =<< trim END
+ vim9script
+ var F1_ref: func
+ def Start()
+ F1_ref()
+ enddef
+ Start()
+ END
+ v9.CheckScriptFailure(lines, 'E117:')
enddef
" Check that in a legacy script a :def accesses the correct script variables.
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 0b17150..bcb590d 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -4007,7 +4007,7 @@ def Test_restoring_cpo()
edit XanotherScript
so %
assert_equal('aABceFsMny>', &cpo)
- assert_equal('aABceFs', g:cpoval)
+ assert_equal('aABceFsz', g:cpoval)
:1del
setline(1, 'let g:cpoval = &cpo')
w
@@ -4048,10 +4048,10 @@ def Test_restoring_cpo()
exe "silent !" .. cmd
assert_equal([
- 'before: aABceFs',
- 'after: aABceFsM',
- 'later: aABceFsM',
- 'vim9: aABceFs'], readfile('Xrporesult'))
+ 'before: aABceFsz',
+ 'after: aABceFszM',
+ 'later: aABceFszM',
+ 'vim9: aABceFsz'], readfile('Xrporesult'))
$HOME = save_HOME
delete('Xrporesult')
@@ -5085,15 +5085,19 @@ def Test_null_values()
var nullValues = [
[null, 1, 'null', 7, 'special'],
[null_blob, 1, '0z', 10, 'blob'],
- [null_channel, 1, 'channel fail', 9, 'channel'],
[null_dict, 1, '{}', 4, 'dict<any>'],
[null_function, 1, "function('')", 2, 'func(...): unknown'],
- [null_job, 1, 'no process', 8, 'job'],
[null_list, 1, '[]', 3, 'list<any>'],
[null_object, 1, 'object of [unknown]', 13, 'object<Unknown>'],
[null_partial, 1, "function('')", 2, 'func(...): unknown'],
[null_string, 1, "''", 1, 'string']
]
+ if has('channel')
+ nullValues->add([null_channel, 1, 'channel fail', 9, 'channel'])
+ endif
+ if has('job')
+ nullValues->add([null_job, 1, 'no process', 8, 'job'])
+ endif
for [Val, emptyExp, stringExp, typeExp, typenameExp] in nullValues
assert_equal(emptyExp, empty(Val))
diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim
index 8976779..21f894e 100644
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -7536,6 +7536,31 @@ func Test_deeply_nested_source()
call system(cmd)
endfunc
+func Test_exception_silent()
+ XpathINIT
+ let lines =<< trim END
+ func Throw()
+ Xpath 'a'
+ throw "Uncaught"
+ " This line is not executed.
+ Xpath 'b'
+ endfunc
+ " The exception is suppressed due to the presence of silent!.
+ silent! call Throw()
+ try
+ call DoesNotExist()
+ catch /E117:/
+ Xpath 'c'
+ endtry
+ Xpath 'd'
+ END
+ let verify =<< trim END
+ call assert_equal('acd', g:Xpath)
+ END
+
+ call RunInNewVim(lines, verify)
+endfunc
+
"-------------------------------------------------------------------------------
" Modelines {{{1
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/testdir/test_winfixbuf.vim b/src/testdir/test_winfixbuf.vim
index f800338..3cec4ed 100644
--- a/src/testdir/test_winfixbuf.vim
+++ b/src/testdir/test_winfixbuf.vim
@@ -2934,6 +2934,7 @@ func Test_tfirst()
\ "Xtags", 'D')
call writefile(["one", "two", "three"], "Xfile", 'D')
call writefile(["one"], "Xother", 'D')
+ tag one
edit Xother
set winfixbuf
diff --git a/src/testdir/test_xxd.vim b/src/testdir/test_xxd.vim
index a91a1fc..99e4998 100644
--- a/src/testdir/test_xxd.vim
+++ b/src/testdir/test_xxd.vim
@@ -73,21 +73,21 @@ func Test_xxd()
exe '0r! ' . s:xxd_cmd . ' -l 120 -ps -c20 ' . man_copy
$d
let expected = [
- \ '2e54482058584420312022417567757374203139',
- \ '39362220224d616e75616c207061676520666f72',
- \ '20787864220a2e5c220a2e5c222032317374204d',
- \ '617920313939360a2e5c22204d616e2070616765',
- \ '20617574686f723a0a2e5c2220202020546f6e79',
- \ '204e7567656e74203c746f6e79407363746e7567']
+ \ '2e544820585844203120224d6179203230323422',
+ \ '20224d616e75616c207061676520666f72207878',
+ \ '64220a2e5c220a2e5c222032317374204d617920',
+ \ '313939360a2e5c22204d616e2070616765206175',
+ \ '74686f723a0a2e5c2220202020546f6e79204e75',
+ \ '67656e74203c746f6e79407363746e7567656e2e']
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
" Test 6: Print the date from xxd.1
let s:test += 1
for arg in ['-l 13', '-l13', '-len 13']
%d
- exe '0r! ' . s:xxd_cmd . ' -s 0x36 ' . arg . ' -cols 13 ' . man_copy
+ exe '0r! ' . s:xxd_cmd . ' -s 0x33 ' . arg . ' -cols 13 ' . man_copy
$d
- call assert_equal('00000036: 3231 7374 204d 6179 2031 3939 36 21st May 1996', getline(1), s:Mess(s:test))
+ call assert_equal('00000033: 3231 7374 204d 6179 2031 3939 36 21st May 1996', getline(1), s:Mess(s:test))
endfor
" Cleanup after tests 5 and 6
diff --git a/src/testdir/test_zip_plugin.vim b/src/testdir/test_zip_plugin.vim
new file mode 100644
index 0000000..e831f26
--- /dev/null
+++ b/src/testdir/test_zip_plugin.vim
@@ -0,0 +1,237 @@
+so check.vim
+
+CheckExecutable unzip
+
+if 0 " Find uncovered line
+ profile start zip_profile
+ profile! file */zip*.vim
+endif
+
+runtime plugin/zipPlugin.vim
+
+def Test_zip_basic()
+
+ ### get our zip file
+ if !filecopy("samples/test.zip", "X.zip")
+ assert_report("Can't copy samples/test.zip")
+ return
+ endif
+ defer delete("X.zip")
+
+ e X.zip
+
+ ### Check header
+ assert_match('^" zip\.vim version v\d\+', getline(1))
+ assert_match('^" Browsing zipfile .*/X.zip', getline(2))
+ assert_match('^" Select a file with cursor and press ENTER', getline(3))
+ assert_match('^$', getline(4))
+
+ ### Check files listing
+ assert_equal(["Xzip/", "Xzip/dir/", "Xzip/file.txt"], getline(5, 7))
+
+ ### Check ENTER on header
+ :1
+ exe ":normal \<cr>"
+ assert_equal("X.zip", @%)
+
+ ### Check ENTER on directory
+ :1|:/^$//dir/
+ assert_match('Please specify a file, not a directory',
+ execute("normal \<CR>"))
+
+ ### Check ENTER on file
+ :1
+ search('file.txt')
+ exe ":normal \<cr>"
+ assert_match('zipfile://.*/X.zip::Xzip/file.txt', @%)
+ assert_equal('one', getline(1))
+
+ ### Check editing file
+ if executable("zip")
+ s/one/two/
+ assert_equal("two", getline(1))
+ w
+ bw|bw
+ e X.zip
+
+ :1|:/^$//file/
+ exe "normal \<cr>"
+ assert_equal("two", getline(1))
+ endif
+
+ only
+ e X.zip
+
+ ### Check extracting file
+ :1|:/^$//file/
+ normal x
+ assert_true(filereadable("Xzip/file.txt"))
+
+ ## Check not overwriting existing file
+ assert_match('<Xzip/file.txt> .* not overwriting!', execute("normal x"))
+
+ delete("Xzip", "rf")
+
+ ### Check extracting directory
+ :1|:/^$//dir/
+ assert_match('Please specify a file, not a directory', execute("normal x"))
+ assert_equal("X.zip", @%)
+
+ ### Check "x" on header
+ :1
+ normal x
+ assert_equal("X.zip", @%)
+ bw
+
+ ### Check opening zip when "unzip" program is missing
+ var save_zip_unzipcmd = g:zip_unzipcmd
+ g:zip_unzipcmd = "/"
+ assert_match('unzip not available on your system', execute("e X.zip"))
+
+ ### Check when "unzip" don't work
+ if executable("false")
+ g:zip_unzipcmd = "false"
+ assert_match('X\.zip is not a zip file', execute("e X.zip"))
+ endif
+ bw
+
+ g:zip_unzipcmd = save_zip_unzipcmd
+ e X.zip
+
+ ### Check opening file when "unzip" is missing
+ g:zip_unzipcmd = "/"
+ assert_match('sorry, your system doesn''t appear to have the / program',
+ execute("normal \<CR>"))
+
+ bw|bw
+ g:zip_unzipcmd = save_zip_unzipcmd
+ e X.zip
+
+ ### Check :write when "zip" program is missing
+ :1|:/^$//file/
+ exe "normal \<cr>Goanother\<esc>"
+ var save_zip_zipcmd = g:zip_zipcmd
+ g:zip_zipcmd = "/"
+ assert_match('sorry, your system doesn''t appear to have the / program',
+ execute("write"))
+
+ ### Check when "zip" report failure
+ if executable("false")
+ g:zip_zipcmd = "false"
+ assert_match('sorry, unable to update .*/X.zip with Xzip/file.txt',
+ execute("write"))
+ endif
+ bw!|bw
+
+ g:zip_zipcmd = save_zip_zipcmd
+
+ ### Check opening an no zipfile
+ writefile(["qsdf"], "Xcorupt.zip", "D")
+ e! Xcorupt.zip
+ assert_equal("qsdf", getline(1))
+
+ bw
+
+ ### Check no existing zipfile
+ assert_match('File not readable', execute("e Xnot_exists.zip"))
+
+ bw
+enddef
+
+def Test_zip_glob_fname()
+ CheckNotMSWindows
+ # does not work on Windows, why?
+
+ ### copy sample zip file
+ if !filecopy("samples/testa.zip", "X.zip")
+ assert_report("Can't copy samples/testa.zip")
+ return
+ endif
+ defer delete("X.zip")
+ defer delete('zipglob', 'rf')
+
+ e X.zip
+
+ ### 1) Check extracting strange files
+ :1
+ var fname = 'a[a].txt'
+ search('\V' .. fname)
+ normal x
+ assert_true(filereadable('zipglob/' .. fname))
+ delete('zipglob', 'rf')
+
+ :1
+ fname = 'a*.txt'
+ search('\V' .. fname)
+ normal x
+ assert_true(filereadable('zipglob/' .. fname))
+ delete('zipglob', 'rf')
+
+ :1
+ fname = 'a?.txt'
+ search('\V' .. fname)
+ normal x
+ assert_true(filereadable('zipglob/' .. fname))
+ delete('zipglob', 'rf')
+
+ :1
+ fname = 'a\.txt'
+ search('\V' .. escape(fname, '\\'))
+ normal x
+ assert_true(filereadable('zipglob/' .. fname))
+ delete('zipglob', 'rf')
+
+ :1
+ fname = 'a\\.txt'
+ search('\V' .. escape(fname, '\\'))
+ normal x
+ assert_true(filereadable('zipglob/' .. fname))
+ delete('zipglob', 'rf')
+
+ ### 2) Check entering strange file names
+ :1
+ fname = 'a[a].txt'
+ search('\V' .. fname)
+ exe ":normal \<cr>"
+ assert_match('zipfile://.*/X.zip::zipglob/a\[a\].txt', @%)
+ assert_equal('a test file with []', getline(1))
+ bw
+
+ e X.zip
+ :1
+ fname = 'a*.txt'
+ search('\V' .. fname)
+ exe ":normal \<cr>"
+ assert_match('zipfile://.*/X.zip::zipglob/a\*.txt', @%)
+ assert_equal('a test file with a*', getline(1))
+ bw
+
+ e X.zip
+ :1
+ fname = 'a?.txt'
+ search('\V' .. fname)
+ exe ":normal \<cr>"
+ assert_match('zipfile://.*/X.zip::zipglob/a?.txt', @%)
+ assert_equal('a test file with a?', getline(1))
+ bw
+
+ e X.zip
+ :1
+ fname = 'a\.txt'
+ search('\V' .. escape(fname, '\\'))
+ exe ":normal \<cr>"
+ assert_match('zipfile://.*/X.zip::zipglob/a\\.txt', @%)
+ assert_equal('a test file with a\', getline(1))
+ bw
+
+ e X.zip
+ :1
+ fname = 'a\\.txt'
+ search('\V' .. escape(fname, '\\'))
+ exe ":normal \<cr>"
+ assert_match('zipfile://.*/X.zip::zipglob/a\\\\.txt', @%)
+ assert_equal('a test file with a double \', getline(1))
+ bw
+
+ bw
+enddef
diff --git a/src/testdir/view_util.vim b/src/testdir/view_util.vim
index 71cb071..161c8b2 100644
--- a/src/testdir/view_util.vim
+++ b/src/testdir/view_util.vim
@@ -71,7 +71,7 @@ endfunc
" than the raw code.
" Return the modifyOtherKeys level 2 encoding for "key" with "modifier"
-" (number value, e.g. CTRL is 5).
+" (number value, e.g. CTRL is 5, Shift is 2, Alt is 3).
func GetEscCodeCSI27(key, modifier)
let key = printf("%d", char2nr(a:key))
let mod = printf("%d", a:modifier)
diff --git a/src/testdir/viewdumps.vim b/src/testdir/viewdumps.vim
new file mode 100644
index 0000000..62f7bbe
--- /dev/null
+++ b/src/testdir/viewdumps.vim
@@ -0,0 +1,11 @@
+vim9script
+
+exec 'source ' .. (((cwdpath: string) => cwdpath
+ ->strpart(0, cwdpath->strridx('/vim')))(getcwd()))
+ .. '/vim/src/testdir/commondumps.vim'
+g:Init('\<src\>', 0)
+
+# Match ":language" of runtest.vim.
+language messages C
+
+# vim:fdm=syntax:sw=2:ts=8:noet:nolist:nosta:
diff --git a/src/testing.c b/src/testing.c
index 3e9e077..7ab109c 100644
--- a/src/testing.c
+++ b/src/testing.c
@@ -99,7 +99,7 @@ ga_concat_shorten_esc(garray_T *gap, char_u *str)
return;
}
- for (p = str; *p != NUL; ++p)
+ for (p = str; *p != NUL; )
{
same_len = 1;
s = p;
@@ -118,10 +118,13 @@ ga_concat_shorten_esc(garray_T *gap, char_u *str)
vim_snprintf((char *)buf, NUMBUFLEN, "%d", same_len);
ga_concat(gap, buf);
ga_concat(gap, (char_u *)" times]");
- p = s - 1;
+ p = s;
}
else
+ {
ga_concat_esc(gap, p, clen);
+ p += clen;
+ }
}
}
@@ -187,7 +190,7 @@ fill_assert_error(
{
item2 = dict_find(got_d, hi->hi_key, -1);
if (item2 == NULL || !tv_equal(&HI2DI(hi)->di_tv,
- &item2->di_tv, FALSE, FALSE))
+ &item2->di_tv, FALSE))
{
// item of exp_d not present in got_d or values differ.
dict_add_tv(exp_tv->vval.v_dict,
@@ -262,7 +265,7 @@ assert_equal_common(typval_T *argvars, assert_type_T atype)
{
garray_T ga;
- if (tv_equal(&argvars[0], &argvars[1], FALSE, FALSE)
+ if (tv_equal(&argvars[0], &argvars[1], FALSE)
!= (atype == ASSERT_EQUAL))
{
prepare_assert_error(&ga);
diff --git a/src/textobject.c b/src/textobject.c
index 1890d7c..aa2db07 100644
--- a/src/textobject.c
+++ b/src/textobject.c
@@ -1426,15 +1426,22 @@ again:
if (!do_include)
{
- // Exclude the start tag.
+ // Exclude the start tag,
+ // but skip over '>' if it appears in quotes
+ int in_quotes = FALSE;
curwin->w_cursor = start_pos;
while (inc_cursor() >= 0)
- if (*ml_get_cursor() == '>')
+ {
+ p = ml_get_cursor();
+ if (*p == '>' && !in_quotes)
{
inc_cursor();
start_pos = curwin->w_cursor;
break;
}
+ else if (*p == '"' || *p == '\'')
+ in_quotes = !in_quotes;
+ }
curwin->w_cursor = end_pos;
// If we are in Visual mode and now have the same text as before set
diff --git a/src/textprop.c b/src/textprop.c
index 83c42a3..fe0c8d2 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -2060,7 +2060,7 @@ list_types(hashtab_T *ht, list_T *l)
* prop_type_list([{bufnr}])
*/
void
-f_prop_type_list(typval_T *argvars, typval_T *rettv UNUSED)
+f_prop_type_list(typval_T *argvars, typval_T *rettv)
{
buf_T *buf = NULL;
diff --git a/src/typval.c b/src/typval.c
index 6a73719..01ffef5 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -267,11 +267,16 @@ tv_get_bool_or_number_chk(
break;
case VAR_OBJECT:
{
- class_T *cl = varp->vval.v_object->obj_class;
- if (cl != NULL && IS_ENUM(cl))
- semsg(_(e_using_enum_str_as_number), cl->class_name);
+ if (varp->vval.v_object == NULL)
+ emsg(_(e_using_object_as_string));
else
- emsg(_(e_using_object_as_number));
+ {
+ class_T *cl = varp->vval.v_object->obj_class;
+ if (cl != NULL && IS_ENUM(cl))
+ semsg(_(e_using_enum_str_as_number), cl->class_name);
+ else
+ emsg(_(e_using_object_as_number));
+ }
}
break;
case VAR_VOID:
@@ -1146,11 +1151,16 @@ tv_get_string_buf_chk_strict(typval_T *varp, char_u *buf, int strict)
break;
case VAR_OBJECT:
{
- class_T *cl = varp->vval.v_object->obj_class;
- if (cl != NULL && IS_ENUM(cl))
- semsg(_(e_using_enum_str_as_string), cl->class_name);
- else
+ if (varp->vval.v_object == NULL)
emsg(_(e_using_object_as_string));
+ else
+ {
+ class_T *cl = varp->vval.v_object->obj_class;
+ if (cl != NULL && IS_ENUM(cl))
+ semsg(_(e_using_enum_str_as_string), cl->class_name);
+ else
+ emsg(_(e_using_object_as_string));
+ }
}
break;
case VAR_JOB:
@@ -1605,8 +1615,7 @@ typval_compare_list(
}
else
{
- val = list_equal(tv1->vval.v_list, tv2->vval.v_list,
- ic, FALSE);
+ val = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
if (type == EXPR_NEQUAL)
val = !val;
}
@@ -1699,24 +1708,6 @@ typval_compare_blob(
}
/*
- * Compare "tv1" to "tv2" as classes according to "type".
- * Put the result, false or true, in "res".
- * Return FAIL and give an error message when the comparison can't be done.
- */
- int
-typval_compare_class(
- typval_T *tv1,
- typval_T *tv2,
- exprtype_T type UNUSED,
- int ic UNUSED,
- int *res)
-{
- // TODO: use "type"
- *res = tv1->vval.v_class == tv2->vval.v_class;
- return OK;
-}
-
-/*
* Compare "tv1" to "tv2" as objects according to "type".
* Put the result, false or true, in "res".
* Return FAIL and give an error message when the comparison can't be done.
@@ -1742,14 +1733,6 @@ typval_compare_object(
return OK;
}
- class_T *cl1 = tv1->vval.v_object->obj_class;
- class_T *cl2 = tv2->vval.v_object->obj_class;
- if (cl1 != cl2 || cl1 == NULL || cl2 == NULL)
- {
- *res = !res_match;
- return OK;
- }
-
object_T *obj1 = tv1->vval.v_object;
object_T *obj2 = tv2->vval.v_object;
if (type == EXPR_IS || type == EXPR_ISNOT)
@@ -1758,14 +1741,7 @@ typval_compare_object(
return OK;
}
- for (int i = 0; i < cl1->class_obj_member_count; ++i)
- if (!tv_equal((typval_T *)(obj1 + 1) + i,
- (typval_T *)(obj2 + 1) + i, ic, TRUE))
- {
- *res = !res_match;
- return OK;
- }
- *res = res_match;
+ *res = object_equal(obj1, obj2, ic) ? res_match : !res_match;
return OK;
}
@@ -1802,7 +1778,7 @@ typval_compare_dict(
}
else
{
- val = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, FALSE);
+ val = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
if (type == EXPR_NEQUAL)
val = !val;
}
@@ -1841,14 +1817,14 @@ typval_compare_func(
if (tv1->v_type == VAR_FUNC && tv2->v_type == VAR_FUNC)
// strings are considered the same if their value is
// the same
- val = tv_equal(tv1, tv2, ic, FALSE);
+ val = tv_equal(tv1, tv2, ic);
else if (tv1->v_type == VAR_PARTIAL && tv2->v_type == VAR_PARTIAL)
val = (tv1->vval.v_partial == tv2->vval.v_partial);
else
val = FALSE;
}
else
- val = tv_equal(tv1, tv2, ic, FALSE);
+ val = tv_equal(tv1, tv2, ic);
if (type == EXPR_NEQUAL || type == EXPR_ISNOT)
val = !val;
*res = val;
@@ -2003,7 +1979,7 @@ func_equal(
if (d1 != d2)
return FALSE;
}
- else if (!dict_equal(d1, d2, ic, TRUE))
+ else if (!dict_equal(d1, d2, ic))
return FALSE;
// empty list and no list considered the same
@@ -2013,7 +1989,7 @@ func_equal(
return FALSE;
for (i = 0; i < a1; ++i)
if (!tv_equal(tv1->vval.v_partial->pt_argv + i,
- tv2->vval.v_partial->pt_argv + i, ic, TRUE))
+ tv2->vval.v_partial->pt_argv + i, ic))
return FALSE;
return TRUE;
@@ -2028,8 +2004,7 @@ func_equal(
tv_equal(
typval_T *tv1,
typval_T *tv2,
- int ic, // ignore case
- int recursive) // TRUE when used recursively
+ int ic) // ignore case
{
char_u buf1[NUMBUFLEN], buf2[NUMBUFLEN];
char_u *s1, *s2;
@@ -2043,7 +2018,7 @@ tv_equal(
// Reduce the limit every time running into it. That should work fine for
// deeply linked structures that are not recursively linked and catch
// recursiveness quickly.
- if (!recursive)
+ if (recursive_cnt == 0)
tv_equal_recurse_limit = 1000;
if (recursive_cnt >= tv_equal_recurse_limit)
{
@@ -2073,13 +2048,13 @@ tv_equal(
{
case VAR_LIST:
++recursive_cnt;
- r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic, TRUE);
+ r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
--recursive_cnt;
return r;
case VAR_DICT:
++recursive_cnt;
- r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, TRUE);
+ r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
--recursive_cnt;
return r;
@@ -2114,7 +2089,9 @@ tv_equal(
return tv1->vval.v_class == tv2->vval.v_class;
case VAR_OBJECT:
- (void)typval_compare_object(tv1, tv2, EXPR_EQUAL, ic, &r);
+ ++recursive_cnt;
+ r = object_equal(tv1->vval.v_object, tv2->vval.v_object, ic);
+ --recursive_cnt;
return r;
case VAR_PARTIAL:
@@ -2237,7 +2214,7 @@ eval_number(
char_u **arg,
typval_T *rettv,
int evaluate,
- int want_string UNUSED)
+ int want_string)
{
int len;
int skip_quotes = !in_old_script(4);
diff --git a/src/undo.c b/src/undo.c
index 1cd8912..8c2783a 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -3683,7 +3683,7 @@ u_eval_tree(buf_T *buf, u_header_T *first_uhp, list_T *list)
* "undofile(name)" function
*/
void
-f_undofile(typval_T *argvars UNUSED, typval_T *rettv)
+f_undofile(typval_T *argvars, typval_T *rettv)
{
if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
return;
@@ -3738,7 +3738,7 @@ u_undofile_reset_and_delete(buf_T *buf)
* "undotree(expr)" function
*/
void
-f_undotree(typval_T *argvars UNUSED, typval_T *rettv)
+f_undotree(typval_T *argvars, typval_T *rettv)
{
if (in_vim9script() && check_for_opt_buffer_arg(argvars, 0) == FAIL)
return;
diff --git a/src/usercmd.c b/src/usercmd.c
index e2c0114..585ced3 100644
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -16,6 +16,7 @@
typedef struct ucmd
{
char_u *uc_name; // The command name
+ size_t uc_namelen; // The length of the command name (excluding the NUL)
long_u uc_argt; // The argument type
char_u *uc_rep; // The command's replacement string
long uc_def; // The default value for a range/count
@@ -39,93 +40,100 @@ static int ucmd_locked = 0;
/*
* List of names for completion for ":command" with the EXPAND_ flag.
- * Must be alphabetical for completion.
+ * Must be alphabetical on the 'value' field for completion and because
+ * it is used by bsearch()!
*/
-static struct
+static keyvalue_T command_complete_tab[] =
{
- int expand;
- char *name;
-} command_complete[] =
-{
- {EXPAND_ARGLIST, "arglist"},
- {EXPAND_AUGROUP, "augroup"},
- {EXPAND_BEHAVE, "behave"},
- {EXPAND_BUFFERS, "buffer"},
- {EXPAND_COLORS, "color"},
- {EXPAND_COMMANDS, "command"},
- {EXPAND_COMPILER, "compiler"},
+ KEYVALUE_ENTRY(EXPAND_ARGLIST, "arglist"),
+ KEYVALUE_ENTRY(EXPAND_AUGROUP, "augroup"),
+ KEYVALUE_ENTRY(EXPAND_BEHAVE, "behave"),
+#if defined(FEAT_EVAL)
+ KEYVALUE_ENTRY(EXPAND_BREAKPOINT, "breakpoint"),
+#endif
+ KEYVALUE_ENTRY(EXPAND_BUFFERS, "buffer"),
+ KEYVALUE_ENTRY(EXPAND_COLORS, "color"),
+ KEYVALUE_ENTRY(EXPAND_COMMANDS, "command"),
+ KEYVALUE_ENTRY(EXPAND_COMPILER, "compiler"),
#if defined(FEAT_CSCOPE)
- {EXPAND_CSCOPE, "cscope"},
+ KEYVALUE_ENTRY(EXPAND_CSCOPE, "cscope"),
#endif
#if defined(FEAT_EVAL)
- {EXPAND_USER_DEFINED, "custom"},
- {EXPAND_USER_LIST, "customlist"},
+ KEYVALUE_ENTRY(EXPAND_USER_DEFINED, "custom"),
+ KEYVALUE_ENTRY(EXPAND_USER_LIST, "customlist"),
#endif
- {EXPAND_DIFF_BUFFERS, "diff_buffer"},
- {EXPAND_DIRECTORIES, "dir"},
- {EXPAND_ENV_VARS, "environment"},
- {EXPAND_EVENTS, "event"},
- {EXPAND_EXPRESSION, "expression"},
- {EXPAND_FILES, "file"},
- {EXPAND_FILES_IN_PATH, "file_in_path"},
- {EXPAND_FILETYPE, "filetype"},
- {EXPAND_FUNCTIONS, "function"},
- {EXPAND_HELP, "help"},
- {EXPAND_HIGHLIGHT, "highlight"},
- {EXPAND_HISTORY, "history"},
+ KEYVALUE_ENTRY(EXPAND_DIFF_BUFFERS, "diff_buffer"),
+ KEYVALUE_ENTRY(EXPAND_DIRECTORIES, "dir"),
+ KEYVALUE_ENTRY(EXPAND_DIRS_IN_CDPATH, "dir_in_path"),
+ KEYVALUE_ENTRY(EXPAND_ENV_VARS, "environment"),
+ KEYVALUE_ENTRY(EXPAND_EVENTS, "event"),
+ KEYVALUE_ENTRY(EXPAND_EXPRESSION, "expression"),
+ KEYVALUE_ENTRY(EXPAND_FILES, "file"),
+ KEYVALUE_ENTRY(EXPAND_FILES_IN_PATH, "file_in_path"),
+ KEYVALUE_ENTRY(EXPAND_FILETYPE, "filetype"),
+ KEYVALUE_ENTRY(EXPAND_FUNCTIONS, "function"),
+ KEYVALUE_ENTRY(EXPAND_HELP, "help"),
+ KEYVALUE_ENTRY(EXPAND_HIGHLIGHT, "highlight"),
+ KEYVALUE_ENTRY(EXPAND_HISTORY, "history"),
#if defined(FEAT_KEYMAP)
- {EXPAND_KEYMAP, "keymap"},
+ KEYVALUE_ENTRY(EXPAND_KEYMAP, "keymap"),
#endif
#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
- {EXPAND_LOCALES, "locale"},
+ KEYVALUE_ENTRY(EXPAND_LOCALES, "locale"),
#endif
- {EXPAND_MAPCLEAR, "mapclear"},
- {EXPAND_MAPPINGS, "mapping"},
- {EXPAND_MENUS, "menu"},
- {EXPAND_MESSAGES, "messages"},
- {EXPAND_OWNSYNTAX, "syntax"},
-#if defined(FEAT_PROFILE)
- {EXPAND_SYNTIME, "syntime"},
+ KEYVALUE_ENTRY(EXPAND_MAPCLEAR, "mapclear"),
+ KEYVALUE_ENTRY(EXPAND_MAPPINGS, "mapping"),
+ KEYVALUE_ENTRY(EXPAND_MENUS, "menu"),
+ KEYVALUE_ENTRY(EXPAND_MESSAGES, "messages"),
+ KEYVALUE_ENTRY(EXPAND_SETTINGS, "option"),
+ KEYVALUE_ENTRY(EXPAND_PACKADD, "packadd"),
+ KEYVALUE_ENTRY(EXPAND_RUNTIME, "runtime"),
+#if defined(FEAT_EVAL)
+ KEYVALUE_ENTRY(EXPAND_SCRIPTNAMES, "scriptnames"),
#endif
- {EXPAND_SETTINGS, "option"},
- {EXPAND_PACKADD, "packadd"},
- {EXPAND_RUNTIME, "runtime"},
- {EXPAND_SHELLCMD, "shellcmd"},
+ KEYVALUE_ENTRY(EXPAND_SHELLCMD, "shellcmd"),
#if defined(FEAT_SIGNS)
- {EXPAND_SIGN, "sign"},
+ KEYVALUE_ENTRY(EXPAND_SIGN, "sign"),
#endif
- {EXPAND_TAGS, "tag"},
- {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
- {EXPAND_USER, "user"},
- {EXPAND_USER_VARS, "var"},
-#if defined(FEAT_EVAL)
- {EXPAND_BREAKPOINT, "breakpoint"},
- {EXPAND_SCRIPTNAMES, "scriptnames"},
+ KEYVALUE_ENTRY(EXPAND_OWNSYNTAX, "syntax"),
+#if defined(FEAT_PROFILE)
+ KEYVALUE_ENTRY(EXPAND_SYNTIME, "syntime"),
#endif
- {0, NULL}
+ KEYVALUE_ENTRY(EXPAND_TAGS, "tag"),
+ KEYVALUE_ENTRY(EXPAND_TAGS_LISTFILES, "tag_listfiles"),
+ KEYVALUE_ENTRY(EXPAND_USER, "user"),
+ KEYVALUE_ENTRY(EXPAND_USER_VARS, "var")
};
+typedef struct
+{
+ cmd_addr_T key;
+ char *fullname;
+ size_t fullnamelen;
+ char *shortname;
+ size_t shortnamelen;
+} addrtype_T;
+
/*
* List of names of address types. Must be alphabetical for completion.
+ * Must be sorted by the 'fullname' field because it is used by bsearch()!
*/
-static struct
+#define ADDRTYPE_ENTRY(k, fn, sn) \
+ {(k), (fn), STRLEN_LITERAL(fn), (sn), STRLEN_LITERAL(sn)}
+static addrtype_T addr_type_complete_tab[] =
{
- cmd_addr_T expand;
- char *name;
- char *shortname;
-} addr_type_complete[] =
-{
- {ADDR_ARGUMENTS, "arguments", "arg"},
- {ADDR_LINES, "lines", "line"},
- {ADDR_LOADED_BUFFERS, "loaded_buffers", "load"},
- {ADDR_TABS, "tabs", "tab"},
- {ADDR_BUFFERS, "buffers", "buf"},
- {ADDR_WINDOWS, "windows", "win"},
- {ADDR_QUICKFIX, "quickfix", "qf"},
- {ADDR_OTHER, "other", "?"},
- {ADDR_NONE, NULL, NULL}
+ ADDRTYPE_ENTRY(ADDR_ARGUMENTS, "arguments", "arg"),
+ ADDRTYPE_ENTRY(ADDR_BUFFERS, "buffers", "buf"),
+ ADDRTYPE_ENTRY(ADDR_LINES, "lines", "line"),
+ ADDRTYPE_ENTRY(ADDR_LOADED_BUFFERS, "loaded_buffers", "load"),
+ ADDRTYPE_ENTRY(ADDR_OTHER, "other", "?"),
+ ADDRTYPE_ENTRY(ADDR_QUICKFIX, "quickfix", "qf"),
+ ADDRTYPE_ENTRY(ADDR_TABS, "tabs", "tab"),
+ ADDRTYPE_ENTRY(ADDR_WINDOWS, "windows", "win")
};
+static int cmp_addr_type(const void *a, const void *b);
+
/*
* Search for a user command that matches "eap->cmd".
* Return cmdidx in "eap->cmdidx", flags in "eap->argt", idx in "eap->useridx".
@@ -271,19 +279,16 @@ set_context_in_user_cmd(expand_T *xp, char_u *arg_in)
{
xp->xp_context = EXPAND_USER_COMPLETE;
xp->xp_pattern = p + 1;
- return NULL;
}
else if (STRNICMP(arg, "nargs", p - arg) == 0)
{
xp->xp_context = EXPAND_USER_NARGS;
xp->xp_pattern = p + 1;
- return NULL;
}
else if (STRNICMP(arg, "addr", p - arg) == 0)
{
xp->xp_context = EXPAND_USER_ADDR_TYPE;
xp->xp_pattern = p + 1;
- return NULL;
}
return NULL;
}
@@ -416,7 +421,9 @@ get_user_command_name(int idx, int cmdidx)
char_u *
get_user_cmd_addr_type(expand_T *xp UNUSED, int idx)
{
- return (char_u *)addr_type_complete[idx].name;
+ if (idx < 0 || idx >= (int)ARRAY_LENGTH(addr_type_complete_tab))
+ return NULL;
+ return (char_u *)addr_type_complete_tab[idx].fullname;
}
/*
@@ -431,7 +438,7 @@ get_user_cmd_flags(expand_T *xp UNUSED, int idx)
"count", "nargs", "range", "register", "keepscript"
};
- if (idx >= (int)ARRAY_LENGTH(user_cmd_flags))
+ if (idx < 0 || idx >= (int)ARRAY_LENGTH(user_cmd_flags))
return NULL;
return (char_u *)user_cmd_flags[idx];
}
@@ -444,7 +451,7 @@ get_user_cmd_nargs(expand_T *xp UNUSED, int idx)
{
static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"};
- if (idx >= (int)ARRAY_LENGTH(user_cmd_nargs))
+ if (idx < 0 || idx >= (int)ARRAY_LENGTH(user_cmd_nargs))
return NULL;
return (char_u *)user_cmd_nargs[idx];
}
@@ -456,7 +463,24 @@ get_user_cmd_nargs(expand_T *xp UNUSED, int idx)
char_u *
get_user_cmd_complete(expand_T *xp UNUSED, int idx)
{
- return (char_u *)command_complete[idx].name;
+ if (idx < 0 || idx >= (int)ARRAY_LENGTH(command_complete_tab))
+ return NULL;
+ return (char_u *)command_complete_tab[idx].value;
+}
+
+/*
+ * Return the row in the command_complete_tab table that contains the given key.
+ */
+ static keyvalue_T *
+get_commandtype(int expand)
+{
+ int i;
+
+ for (i = 0; i < (int)ARRAY_LENGTH(command_complete_tab); ++i)
+ if (command_complete_tab[i].key == expand)
+ return &command_complete_tab[i];
+
+ return NULL;
}
#ifdef FEAT_EVAL
@@ -466,13 +490,11 @@ get_user_cmd_complete(expand_T *xp UNUSED, int idx)
char_u *
cmdcomplete_type_to_str(int expand)
{
- int i;
+ keyvalue_T *kv;
- for (i = 0; command_complete[i].expand != 0; i++)
- if (command_complete[i].expand == expand)
- return (char_u *)command_complete[i].name;
+ kv = get_commandtype(expand);
- return NULL;
+ return (kv == NULL) ? NULL : (char_u *)kv->value;
}
/*
@@ -482,18 +504,35 @@ cmdcomplete_type_to_str(int expand)
int
cmdcomplete_str_to_type(char_u *complete_str)
{
- int i;
+ keyvalue_T target;
+ keyvalue_T *entry;
+ static keyvalue_T *last_entry = NULL; // cached result
if (STRNCMP(complete_str, "custom,", 7) == 0)
return EXPAND_USER_DEFINED;
if (STRNCMP(complete_str, "customlist,", 11) == 0)
return EXPAND_USER_LIST;
- for (i = 0; command_complete[i].expand != 0; ++i)
- if (STRCMP(complete_str, command_complete[i].name) == 0)
- return command_complete[i].expand;
+ target.key = 0;
+ target.value = (char *)complete_str;
+ target.length = 0; // not used, see cmp_keyvalue_value()
+
+ if (last_entry != NULL && cmp_keyvalue_value(&target, last_entry) == 0)
+ entry = last_entry;
+ else
+ {
+ entry = (keyvalue_T *)bsearch(&target,
+ &command_complete_tab,
+ ARRAY_LENGTH(command_complete_tab),
+ sizeof(command_complete_tab[0]),
+ cmp_keyvalue_value);
+ if (entry == NULL)
+ return EXPAND_NOTHING;
+
+ last_entry = entry;
+ }
- return EXPAND_NOTHING;
+ return entry->key;
}
#endif
@@ -510,6 +549,7 @@ uc_list(char_u *name, size_t name_len)
int over;
long a;
garray_T *gap;
+ keyvalue_T *entry;
// don't allow for adding or removing user commands here
++ucmd_locked;
@@ -563,7 +603,7 @@ uc_list(char_u *name, size_t name_len)
msg_putchar(' ');
msg_outtrans_attr(cmd->uc_name, HL_ATTR(HLF_D));
- len = (int)STRLEN(cmd->uc_name) + 4;
+ len = (int)cmd->uc_namelen + 4;
do {
msg_putchar(' ');
@@ -595,16 +635,14 @@ uc_list(char_u *name, size_t name_len)
if (a & EX_COUNT)
{
// -count=N
- sprintf((char *)IObuff + len, "%ldc", cmd->uc_def);
- len += (int)STRLEN(IObuff + len);
+ len += vim_snprintf((char *)IObuff + len, IOSIZE - len, "%ldc", cmd->uc_def);
}
else if (a & EX_DFLALL)
IObuff[len++] = '%';
else if (cmd->uc_def >= 0)
{
// -range=N
- sprintf((char *)IObuff + len, "%ld", cmd->uc_def);
- len += (int)STRLEN(IObuff + len);
+ len += vim_snprintf((char *)IObuff + len, IOSIZE - len, "%ld", cmd->uc_def);
}
else
IObuff[len++] = '.';
@@ -615,12 +653,12 @@ uc_list(char_u *name, size_t name_len)
} while (len < 8 - over);
// Address Type
- for (j = 0; addr_type_complete[j].expand != ADDR_NONE; ++j)
- if (addr_type_complete[j].expand != ADDR_LINES
- && addr_type_complete[j].expand == cmd->uc_addr_type)
+ for (j = 0; j < (int)ARRAY_LENGTH(addr_type_complete_tab); ++j)
+ if (addr_type_complete_tab[j].key != ADDR_LINES
+ && addr_type_complete_tab[j].key == cmd->uc_addr_type)
{
- STRCPY(IObuff + len, addr_type_complete[j].shortname);
- len += (int)STRLEN(IObuff + len);
+ STRCPY(IObuff + len, addr_type_complete_tab[j].shortname);
+ len += (int)addr_type_complete_tab[j].shortnamelen;
break;
}
@@ -629,28 +667,31 @@ uc_list(char_u *name, size_t name_len)
} while (len < 13 - over);
// Completion
- for (j = 0; command_complete[j].expand != 0; ++j)
- if (command_complete[j].expand == cmd->uc_compl)
- {
- STRCPY(IObuff + len, command_complete[j].name);
- len += (int)STRLEN(IObuff + len);
+ entry = get_commandtype(cmd->uc_compl);
+ if (entry != NULL)
+ {
+ STRCPY(IObuff + len, entry->value);
+ len += entry->length;
#ifdef FEAT_EVAL
- if (p_verbose > 0 && cmd->uc_compl_arg != NULL
- && STRLEN(cmd->uc_compl_arg) < 200)
+ if (p_verbose > 0 && cmd->uc_compl_arg != NULL)
+ {
+ size_t uc_compl_arglen = STRLEN(cmd->uc_compl_arg);
+
+ if (uc_compl_arglen < 200)
{
- IObuff[len] = ',';
- STRCPY(IObuff + len + 1, cmd->uc_compl_arg);
- len += (int)STRLEN(IObuff + len);
+ IObuff[len++] = ',';
+ STRCPY(IObuff + len, cmd->uc_compl_arg);
+ len += uc_compl_arglen;
}
-#endif
- break;
}
+#endif
+ }
do {
IObuff[len++] = ' ';
} while (len < 25 - over);
- IObuff[len] = '\0';
+ IObuff[len] = NUL;
msg_outtrans(IObuff);
msg_outtrans_special(cmd->uc_rep, FALSE,
@@ -686,7 +727,7 @@ uc_fun_cmd(void)
for (i = 0; fcmd[i]; ++i)
IObuff[i] = fcmd[i] - 0x40;
- IObuff[i] = 0;
+ IObuff[i] = NUL;
return (char *)IObuff;
}
@@ -699,33 +740,52 @@ parse_addr_type_arg(
int vallen,
cmd_addr_T *addr_type_arg)
{
- int i, a, b;
+ addrtype_T target;
+ addrtype_T *entry;
+ static addrtype_T *last_entry; // cached result
+
+ target.key = 0;
+ target.fullname = (char *)value;
+ target.fullnamelen = vallen;
- for (i = 0; addr_type_complete[i].expand != ADDR_NONE; ++i)
+ if (last_entry != NULL && cmp_addr_type(&target, last_entry) == 0)
+ entry = last_entry;
+ else
{
- a = (int)STRLEN(addr_type_complete[i].name) == vallen;
- b = STRNCMP(value, addr_type_complete[i].name, vallen) == 0;
- if (a && b)
+ entry = (addrtype_T *)bsearch(&target,
+ &addr_type_complete_tab,
+ ARRAY_LENGTH(addr_type_complete_tab),
+ sizeof(addr_type_complete_tab[0]),
+ cmp_addr_type);
+ if (entry == NULL)
{
- *addr_type_arg = addr_type_complete[i].expand;
- break;
- }
- }
+ int i;
+ char_u *err = value;
- if (addr_type_complete[i].expand == ADDR_NONE)
- {
- char_u *err = value;
+ for (i = 0; err[i] != NUL && !VIM_ISWHITE(err[i]); i++)
+ ;
+ err[i] = NUL;
+ semsg(_(e_invalid_address_type_value_str), err);
+ return FAIL;
+ }
- for (i = 0; err[i] != NUL && !VIM_ISWHITE(err[i]); i++)
- ;
- err[i] = NUL;
- semsg(_(e_invalid_address_type_value_str), err);
- return FAIL;
+ last_entry = entry;
}
+ *addr_type_arg = entry->key;
+
return OK;
}
+ static int
+cmp_addr_type(const void *a, const void *b)
+{
+ addrtype_T *at1 = (addrtype_T *)a;
+ addrtype_T *at2 = (addrtype_T *)b;
+
+ return STRNCMP(at1->fullname, at2->fullname, MAX(at1->fullnamelen, at2->fullnamelen));
+}
+
/*
* Parse a completion argument "value[vallen]".
* The detected completion goes in "*complp", argument type in "*argt".
@@ -747,6 +807,9 @@ parse_compl_arg(
# endif
int i;
int valend = vallen;
+ keyvalue_T target;
+ keyvalue_T *entry;
+ static keyvalue_T *last_entry = NULL; // cached result
// Look for any argument part - which is the part after any ','
for (i = 0; i < vallen; ++i)
@@ -762,33 +825,40 @@ parse_compl_arg(
}
}
- for (i = 0; command_complete[i].expand != 0; ++i)
+ target.key = 0;
+ target.value = (char *)value;
+ target.length = valend;
+
+ if (last_entry != NULL && cmp_keyvalue_value_n(&target, last_entry) == 0)
+ entry = last_entry;
+ else
{
- if ((int)STRLEN(command_complete[i].name) == valend
- && STRNCMP(value, command_complete[i].name, valend) == 0)
+ entry = (keyvalue_T *)bsearch(&target,
+ &command_complete_tab,
+ ARRAY_LENGTH(command_complete_tab),
+ sizeof(command_complete_tab[0]),
+ cmp_keyvalue_value_n);
+ if (entry == NULL)
{
- *complp = command_complete[i].expand;
- if (command_complete[i].expand == EXPAND_BUFFERS)
- *argt |= EX_BUFNAME;
- else if (command_complete[i].expand == EXPAND_DIRECTORIES
- || command_complete[i].expand == EXPAND_FILES)
- *argt |= EX_XFILE;
- break;
+ semsg(_(e_invalid_complete_value_str), value);
+ return FAIL;
}
- }
- if (command_complete[i].expand == 0)
- {
- semsg(_(e_invalid_complete_value_str), value);
- return FAIL;
+ last_entry = entry;
}
+ *complp = entry->key;
+ if (*complp == EXPAND_BUFFERS)
+ *argt |= EX_BUFNAME;
+ else if (*complp == EXPAND_DIRECTORIES || *complp == EXPAND_FILES)
+ *argt |= EX_XFILE;
+
+ if (
# if defined(FEAT_EVAL)
- if (*complp != EXPAND_USER_DEFINED && *complp != EXPAND_USER_LIST
- && arg != NULL)
-# else
- if (arg != NULL)
+ *complp != EXPAND_USER_DEFINED && *complp != EXPAND_USER_LIST
+ &&
# endif
+ arg != NULL)
{
emsg(_(e_completion_argument_only_allowed_for_custom_completion));
return FAIL;
@@ -805,6 +875,7 @@ parse_compl_arg(
if (arg != NULL)
*compl_arg = vim_strnsave(arg, arglen);
# endif
+
return OK;
}
@@ -1022,16 +1093,13 @@ uc_add_command(
// Search for the command in the already defined commands.
for (i = 0; i < gap->ga_len; ++i)
{
- size_t len;
-
cmd = USER_CMD_GA(gap, i);
- len = STRLEN(cmd->uc_name);
cmp = STRNCMP(name, cmd->uc_name, name_len);
if (cmp == 0)
{
- if (name_len < len)
+ if (name_len < cmd->uc_namelen)
cmp = -1;
- else if (name_len > len)
+ else if (name_len > cmd->uc_namelen)
cmp = 1;
}
@@ -1077,6 +1145,7 @@ uc_add_command(
++gap->ga_len;
cmd->uc_name = p;
+ cmd->uc_namelen = name_len;
}
cmd->uc_rep = rep_buf;
@@ -1198,7 +1267,7 @@ ex_command(exarg_T *eap)
p = skipwhite(end);
if (!has_attr && ends_excmd2(eap->arg, p))
{
- uc_list(name, end - name);
+ uc_list(name, name_len);
}
else if (!ASCII_ISUPPER(*name))
{
@@ -1281,6 +1350,7 @@ uc_clear(garray_T *gap)
{
cmd = USER_CMD_GA(gap, i);
vim_free(cmd->uc_name);
+ cmd->uc_namelen = 0;
vim_free(cmd->uc_rep);
# if defined(FEAT_EVAL)
vim_free(cmd->uc_compl_arg);
@@ -1438,30 +1508,31 @@ uc_split_args(char_u *arg, size_t *lenp)
}
}
*q++ = '"';
- *q = 0;
+ *q = NUL;
*lenp = len;
return buf;
}
static size_t
-add_cmd_modifier(char_u *buf, char *mod_str, int *multi_mods)
+add_cmd_modifier(char_u *buf, size_t buflen, char *mod_str, size_t mod_strlen, int *multi_mods)
{
- size_t result;
-
- result = STRLEN(mod_str);
- if (*multi_mods)
- result += 1;
if (buf != NULL)
{
if (*multi_mods)
- STRCAT(buf, " ");
- STRCAT(buf, mod_str);
+ {
+ STRCPY(buf + buflen, " "); // the separating space
+ ++buflen;
+ }
+ STRCPY(buf + buflen, mod_str);
}
- *multi_mods = 1;
+ if (*multi_mods)
+ ++mod_strlen; // +1 for the separating space
+ else
+ *multi_mods = 1;
- return result;
+ return mod_strlen;
}
/*
@@ -1471,17 +1542,17 @@ add_cmd_modifier(char_u *buf, char *mod_str, int *multi_mods)
size_t
add_win_cmd_modifiers(char_u *buf, cmdmod_T *cmod, int *multi_mods)
{
- size_t result = 0;
+ size_t buflen = 0;
// :aboveleft and :leftabove
if (cmod->cmod_split & WSP_ABOVE)
- result += add_cmd_modifier(buf, "aboveleft", multi_mods);
+ buflen += add_cmd_modifier(buf, buflen, "aboveleft", STRLEN_LITERAL("aboveleft"), multi_mods);
// :belowright and :rightbelow
if (cmod->cmod_split & WSP_BELOW)
- result += add_cmd_modifier(buf, "belowright", multi_mods);
+ buflen += add_cmd_modifier(buf, buflen, "belowright", STRLEN_LITERAL("belowright"), multi_mods);
// :botright
if (cmod->cmod_split & WSP_BOT)
- result += add_cmd_modifier(buf, "botright", multi_mods);
+ buflen += add_cmd_modifier(buf, buflen, "botright", STRLEN_LITERAL("botright"), multi_mods);
// :tab
if (cmod->cmod_tab > 0)
@@ -1492,27 +1563,29 @@ add_win_cmd_modifiers(char_u *buf, cmdmod_T *cmod, int *multi_mods)
{
// For compatibility, don't add a tabpage number if it is the same
// as the default number for :tab.
- result += add_cmd_modifier(buf, "tab", multi_mods);
+ buflen += add_cmd_modifier(buf, buflen, "tab", STRLEN_LITERAL("tab"), multi_mods);
}
else
{
char tab_buf[NUMBUFLEN + 3];
+ size_t tab_buflen;
- sprintf(tab_buf, "%dtab", tabnr);
- result += add_cmd_modifier(buf, tab_buf, multi_mods);
+ tab_buflen = vim_snprintf(tab_buf, sizeof(tab_buf), "%dtab", tabnr);
+ buflen += add_cmd_modifier(buf, buflen, tab_buf, tab_buflen, multi_mods);
}
}
// :topleft
if (cmod->cmod_split & WSP_TOP)
- result += add_cmd_modifier(buf, "topleft", multi_mods);
+ buflen += add_cmd_modifier(buf, buflen, "topleft", STRLEN_LITERAL("topleft"), multi_mods);
// :vertical
if (cmod->cmod_split & WSP_VERT)
- result += add_cmd_modifier(buf, "vertical", multi_mods);
+ buflen += add_cmd_modifier(buf, buflen, "vertical", STRLEN_LITERAL("vertical"), multi_mods);
// :horizontal
if (cmod->cmod_split & WSP_HOR)
- result += add_cmd_modifier(buf, "horizontal", multi_mods);
- return result;
+ buflen += add_cmd_modifier(buf, buflen, "horizontal", STRLEN_LITERAL("horizontal"), multi_mods);
+
+ return buflen;
}
/*
@@ -1522,78 +1595,92 @@ add_win_cmd_modifiers(char_u *buf, cmdmod_T *cmod, int *multi_mods)
size_t
produce_cmdmods(char_u *buf, cmdmod_T *cmod, int quote)
{
- size_t result = 0;
+ size_t buflen = 0;
int multi_mods = 0;
int i;
- typedef struct {
- int flag;
- char *name;
- } mod_entry_T;
- static mod_entry_T mod_entries[] = {
+ static keyvalue_T mod_entry_tab[] =
+ {
#ifdef FEAT_BROWSE_CMD
- {CMOD_BROWSE, "browse"},
+ KEYVALUE_ENTRY(CMOD_BROWSE, "browse"),
#endif
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
- {CMOD_CONFIRM, "confirm"},
+ KEYVALUE_ENTRY(CMOD_CONFIRM, "confirm"),
#endif
- {CMOD_HIDE, "hide"},
- {CMOD_KEEPALT, "keepalt"},
- {CMOD_KEEPJUMPS, "keepjumps"},
- {CMOD_KEEPMARKS, "keepmarks"},
- {CMOD_KEEPPATTERNS, "keeppatterns"},
- {CMOD_LOCKMARKS, "lockmarks"},
- {CMOD_NOSWAPFILE, "noswapfile"},
- {CMOD_UNSILENT, "unsilent"},
- {CMOD_NOAUTOCMD, "noautocmd"},
+ KEYVALUE_ENTRY(CMOD_HIDE, "hide"),
+ KEYVALUE_ENTRY(CMOD_KEEPALT, "keepalt"),
+ KEYVALUE_ENTRY(CMOD_KEEPJUMPS, "keepjumps"),
+ KEYVALUE_ENTRY(CMOD_KEEPMARKS, "keepmarks"),
+ KEYVALUE_ENTRY(CMOD_KEEPPATTERNS, "keeppatterns"),
+ KEYVALUE_ENTRY(CMOD_LOCKMARKS, "lockmarks"),
+ KEYVALUE_ENTRY(CMOD_NOSWAPFILE, "noswapfile"),
+ KEYVALUE_ENTRY(CMOD_UNSILENT, "unsilent"),
+ KEYVALUE_ENTRY(CMOD_NOAUTOCMD, "noautocmd"),
#ifdef HAVE_SANDBOX
- {CMOD_SANDBOX, "sandbox"},
+ KEYVALUE_ENTRY(CMOD_SANDBOX, "sandbox"),
#endif
- {CMOD_LEGACY, "legacy"},
- {0, NULL}
+ KEYVALUE_ENTRY(CMOD_LEGACY, "legacy")
};
- result = quote ? 2 : 0;
- if (buf != NULL)
+ if (quote)
{
- if (quote)
- *buf++ = '"';
- *buf = '\0';
+ ++buflen;
+ if (buf != NULL)
+ {
+ *buf = '"';
+ *(buf + buflen) = NUL;
+ }
}
+ else
+ if (buf != NULL)
+ *buf = NUL;
// the modifiers that are simple flags
- for (i = 0; mod_entries[i].name != NULL; ++i)
- if (cmod->cmod_flags & mod_entries[i].flag)
- result += add_cmd_modifier(buf, mod_entries[i].name, &multi_mods);
+ for (i = 0; i < (int)ARRAY_LENGTH(mod_entry_tab); ++i)
+ if (cmod->cmod_flags & mod_entry_tab[i].key)
+ buflen += add_cmd_modifier(buf, buflen, mod_entry_tab[i].value, mod_entry_tab[i].length, &multi_mods);
// :silent
if (cmod->cmod_flags & CMOD_SILENT)
- result += add_cmd_modifier(buf,
- (cmod->cmod_flags & CMOD_ERRSILENT) ? "silent!"
- : "silent", &multi_mods);
+ {
+ if (cmod->cmod_flags & CMOD_ERRSILENT)
+ buflen += add_cmd_modifier(buf, buflen, "silent!", STRLEN_LITERAL("silent!"), &multi_mods);
+ else
+ buflen += add_cmd_modifier(buf, buflen, "silent", STRLEN_LITERAL("silent"), &multi_mods);
+ }
+
// :verbose
if (cmod->cmod_verbose > 0)
{
int verbose_value = cmod->cmod_verbose - 1;
if (verbose_value == 1)
- result += add_cmd_modifier(buf, "verbose", &multi_mods);
+ buflen += add_cmd_modifier(buf, buflen, "verbose", STRLEN_LITERAL("verbose"), &multi_mods);
else
{
char verbose_buf[NUMBUFLEN];
+ size_t verbose_buflen;
- sprintf(verbose_buf, "%dverbose", verbose_value);
- result += add_cmd_modifier(buf, verbose_buf, &multi_mods);
+ verbose_buflen = vim_snprintf(verbose_buf, sizeof(verbose_buf), "%dverbose", verbose_value);
+ buflen += add_cmd_modifier(buf, buflen, verbose_buf, verbose_buflen, &multi_mods);
}
}
+
// flags from cmod->cmod_split
- result += add_win_cmd_modifiers(buf, cmod, &multi_mods);
+ buflen += add_win_cmd_modifiers((buf == NULL) ? NULL : buf + buflen, cmod, &multi_mods);
- if (quote && buf != NULL)
+ if (quote)
{
- buf += result - 2;
- *buf = '"';
+ if (buf == NULL)
+ ++buflen;
+ else
+ {
+ *(buf + buflen) = '"';
+ ++buflen;
+ *(buf + buflen) = NUL;
+ }
}
- return result;
+
+ return buflen;
}
/*
@@ -1754,15 +1841,14 @@ uc_check_code(
case ct_RANGE:
case ct_COUNT:
{
- char num_buf[20];
+ char num_buf[NUMBUFLEN];
long num = (type == ct_LINE1) ? eap->line1 :
(type == ct_LINE2) ? eap->line2 :
(type == ct_RANGE) ? eap->addr_count :
(eap->addr_count > 0) ? eap->line2 : cmd->uc_def;
size_t num_len;
- sprintf(num_buf, "%ld", num);
- num_len = STRLEN(num_buf);
+ num_len = vim_snprintf(num_buf, sizeof(num_buf), "%ld", num);
result = num_len;
if (quote)
diff --git a/src/userfunc.c b/src/userfunc.c
index 7536234..5d16710 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2212,6 +2212,49 @@ find_func_with_prefix(char_u *name, int sid)
}
/*
+ * Find a function by name, return pointer to it.
+ * The name may be a local script variable, VAR_FUNC. or it may be a fully
+ * qualified import name such as 'i_imp.FuncName'.
+ *
+ * When VAR_FUNC, the import might either direct or autoload.
+ * When 'i_imp.FuncName' it is direct, autoload is rewritten as i_imp#FuncName
+ * in f_call and subsequently found.
+ */
+ static ufunc_T *
+find_func_imported(char_u *name, int flags)
+{
+ ufunc_T *func = NULL;
+ char_u *dot = name; // Find a dot, '.', in the name
+
+ // Either run into '.' or the end of the string
+ while (eval_isnamec(*dot))
+ ++dot;
+
+ if (*dot == '.')
+ {
+ imported_T *import = find_imported(name, dot - name, FALSE);
+ if (import != NULL)
+ func = find_func_with_sid(dot + 1, import->imp_sid);
+ }
+ else if (*dot == NUL) // looking at the entire string
+ {
+ hashtab_T *ht = get_script_local_ht();
+ if (ht != NULL)
+ {
+ hashitem_T *hi = hash_find(ht, name);
+ if (!HASHITEM_EMPTY(hi))
+ {
+ dictitem_T *di = HI2DI(hi);
+ if (di->di_tv.v_type == VAR_FUNC
+ && di->di_tv.vval.v_string != NULL)
+ func = find_func_even_dead(di->di_tv.vval.v_string, flags);
+ }
+ }
+ }
+ return func;
+}
+
+/*
* Find a function by name, return pointer to it in ufuncs.
* When "flags" has FFED_IS_GLOBAL don't find script-local or imported
* functions.
@@ -2260,8 +2303,15 @@ find_func_even_dead(char_u *name, int flags)
}
// Find autoload function if this is an autoload script.
- return find_func_with_prefix(name[0] == 's' && name[1] == ':'
+ func = find_func_with_prefix(name[0] == 's' && name[1] == ':'
? name + 2 : name, current_sctx.sc_sid);
+ if (func != NULL)
+ return func;
+
+ // Find a script-local "VAR_FUNC" or i_"imp.Func", so vim9script).
+ if (in_vim9script())
+ func = find_func_imported(name, flags);
+ return func;
}
/*
@@ -4009,7 +4059,7 @@ theend:
int
call_simple_func(
char_u *funcname, // name of the function
- int len, // length of "name" or -1 to use strlen()
+ size_t len, // length of "name"
typval_T *rettv) // return value goes here
{
int ret = FAIL;
@@ -5503,6 +5553,47 @@ ex_function(exarg_T *eap)
ga_clear_strings(&lines_to_free);
}
+ int
+get_func_arity(char_u *name, int *required, int *optional, int *varargs)
+{
+ ufunc_T *ufunc = NULL;
+ int argcount = 0;
+ int min_argcount = 0;
+ int idx;
+
+ idx = find_internal_func(name);
+ if (idx >= 0)
+ {
+ internal_func_get_argcount(idx, &argcount, &min_argcount);
+ *varargs = FALSE;
+ }
+ else
+ {
+ char_u fname_buf[FLEN_FIXED + 1];
+ char_u *tofree = NULL;
+ funcerror_T error = FCERR_NONE;
+ char_u *fname;
+
+ // May need to translate <SNR>123_ to K_SNR.
+ fname = fname_trans_sid(name, fname_buf, &tofree, &error);
+ if (error == FCERR_NONE)
+ ufunc = find_func(fname, FALSE);
+ vim_free(tofree);
+
+ if (ufunc == NULL)
+ return FAIL;
+
+ argcount = ufunc->uf_args.ga_len;
+ min_argcount = ufunc->uf_args.ga_len - ufunc->uf_def_args.ga_len;
+ *varargs = has_varargs(ufunc);
+ }
+
+ *required = min_argcount;
+ *optional = argcount - min_argcount;
+
+ return OK;
+}
+
/*
* Find a function by name, including "<lambda>123".
* Check for "profile" and "debug" arguments and set"compile_type".
diff --git a/src/version.c b/src/version.c
index 14a5922..314a320 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,410 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 698,
+/**/
+ 697,
+/**/
+ 696,
+/**/
+ 695,
+/**/
+ 694,
+/**/
+ 693,
+/**/
+ 692,
+/**/
+ 691,
+/**/
+ 690,
+/**/
+ 689,
+/**/
+ 688,
+/**/
+ 687,
+/**/
+ 686,
+/**/
+ 685,
+/**/
+ 684,
+/**/
+ 683,
+/**/
+ 682,
+/**/
+ 681,
+/**/
+ 680,
+/**/
+ 679,
+/**/
+ 678,
+/**/
+ 677,
+/**/
+ 676,
+/**/
+ 675,
+/**/
+ 674,
+/**/
+ 673,
+/**/
+ 672,
+/**/
+ 671,
+/**/
+ 670,
+/**/
+ 669,
+/**/
+ 668,
+/**/
+ 667,
+/**/
+ 666,
+/**/
+ 665,
+/**/
+ 664,
+/**/
+ 663,
+/**/
+ 662,
+/**/
+ 661,
+/**/
+ 660,
+/**/
+ 659,
+/**/
+ 658,
+/**/
+ 657,
+/**/
+ 656,
+/**/
+ 655,
+/**/
+ 654,
+/**/
+ 653,
+/**/
+ 652,
+/**/
+ 651,
+/**/
+ 650,
+/**/
+ 649,
+/**/
+ 648,
+/**/
+ 647,
+/**/
+ 646,
+/**/
+ 645,
+/**/
+ 644,
+/**/
+ 643,
+/**/
+ 642,
+/**/
+ 641,
+/**/
+ 640,
+/**/
+ 639,
+/**/
+ 638,
+/**/
+ 637,
+/**/
+ 636,
+/**/
+ 635,
+/**/
+ 634,
+/**/
+ 633,
+/**/
+ 632,
+/**/
+ 631,
+/**/
+ 630,
+/**/
+ 629,
+/**/
+ 628,
+/**/
+ 627,
+/**/
+ 626,
+/**/
+ 625,
+/**/
+ 624,
+/**/
+ 623,
+/**/
+ 622,
+/**/
+ 621,
+/**/
+ 620,
+/**/
+ 619,
+/**/
+ 618,
+/**/
+ 617,
+/**/
+ 616,
+/**/
+ 615,
+/**/
+ 614,
+/**/
+ 613,
+/**/
+ 612,
+/**/
+ 611,
+/**/
+ 610,
+/**/
+ 609,
+/**/
+ 608,
+/**/
+ 607,
+/**/
+ 606,
+/**/
+ 605,
+/**/
+ 604,
+/**/
+ 603,
+/**/
+ 602,
+/**/
+ 601,
+/**/
+ 600,
+/**/
+ 599,
+/**/
+ 598,
+/**/
+ 597,
+/**/
+ 596,
+/**/
+ 595,
+/**/
+ 594,
+/**/
+ 593,
+/**/
+ 592,
+/**/
+ 591,
+/**/
+ 590,
+/**/
+ 589,
+/**/
+ 588,
+/**/
+ 587,
+/**/
+ 586,
+/**/
+ 585,
+/**/
+ 584,
+/**/
+ 583,
+/**/
+ 582,
+/**/
+ 581,
+/**/
+ 580,
+/**/
+ 579,
+/**/
+ 578,
+/**/
+ 577,
+/**/
+ 576,
+/**/
+ 575,
+/**/
+ 574,
+/**/
+ 573,
+/**/
+ 572,
+/**/
+ 571,
+/**/
+ 570,
+/**/
+ 569,
+/**/
+ 568,
+/**/
+ 567,
+/**/
+ 566,
+/**/
+ 565,
+/**/
+ 564,
+/**/
+ 563,
+/**/
+ 562,
+/**/
+ 561,
+/**/
+ 560,
+/**/
+ 559,
+/**/
+ 558,
+/**/
+ 557,
+/**/
+ 556,
+/**/
+ 555,
+/**/
+ 554,
+/**/
+ 553,
+/**/
+ 552,
+/**/
+ 551,
+/**/
+ 550,
+/**/
+ 549,
+/**/
+ 548,
+/**/
+ 547,
+/**/
+ 546,
+/**/
+ 545,
+/**/
+ 544,
+/**/
+ 543,
+/**/
+ 542,
+/**/
+ 541,
+/**/
+ 540,
+/**/
+ 539,
+/**/
+ 538,
+/**/
+ 537,
+/**/
+ 536,
+/**/
+ 535,
+/**/
+ 534,
+/**/
+ 533,
+/**/
+ 532,
+/**/
+ 531,
+/**/
+ 530,
+/**/
+ 529,
+/**/
+ 528,
+/**/
+ 527,
+/**/
+ 526,
+/**/
+ 525,
+/**/
+ 524,
+/**/
+ 523,
+/**/
+ 522,
+/**/
+ 521,
+/**/
+ 520,
+/**/
+ 519,
+/**/
+ 518,
+/**/
+ 517,
+/**/
+ 516,
+/**/
+ 515,
+/**/
+ 514,
+/**/
+ 513,
+/**/
+ 512,
+/**/
+ 511,
+/**/
+ 510,
+/**/
+ 509,
+/**/
+ 508,
+/**/
+ 507,
+/**/
+ 506,
+/**/
+ 505,
+/**/
+ 504,
+/**/
+ 503,
+/**/
+ 502,
+/**/
+ 501,
+/**/
+ 500,
+/**/
+ 499,
+/**/
+ 498,
+/**/
+ 497,
+/**/
496,
/**/
495,
diff --git a/src/vim.h b/src/vim.h
index e703239..9c1434c 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -598,7 +598,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
# ifdef bindtextdomain
# undef bindtextdomain
# endif
-# define bindtextdomain(x, y) // empty
+# define bindtextdomain(x, y) ""
# ifdef bind_textdomain_codeset
# undef bind_textdomain_codeset
# endif
@@ -843,6 +843,8 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
#define EXPAND_ARGOPT 56
#define EXPAND_TERMINALOPT 57
#define EXPAND_KEYMAP 58
+#define EXPAND_DIRS_IN_CDPATH 59
+
// Values for exmode_active (0 is no exmode)
#define EXMODE_NORMAL 1
@@ -898,6 +900,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
#define EW_DODOT 0x4000 // also files starting with a dot
#define EW_EMPTYOK 0x8000 // no matches is not an error
#define EW_NOTENV 0x10000 // do not expand environment variables
+#define EW_CDPATH 0x20000 // search in 'cdpath' too
// Flags for find_file_*() functions.
#define FINDFILE_FILE 0 // only files
@@ -1074,6 +1077,8 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
// Values for flags argument of do_buffer()
#define DOBUF_FORCEIT 1 // :cmd!
#define DOBUF_NOPOPUP 2 // skip popup window buffers
+#define DOBUF_SKIPHELP 4 // skip or keep help buffers depending on b_help of the
+ // starting buffer
// Values for sub_cmd and which_pat argument for search_regcomp()
// Also used for which_pat argument for searchit()
@@ -1361,6 +1366,7 @@ enum auto_event
EVENT_CURSORHOLD, // cursor in same position for a while
EVENT_CURSORHOLDI, // idem, in Insert mode
EVENT_CURSORMOVED, // cursor was moved
+ EVENT_CURSORMOVEDC, // cursor was moved in Command line mode
EVENT_CURSORMOVEDI, // cursor was moved in Insert mode
EVENT_DIFFUPDATED, // after diffs were updated
EVENT_DIRCHANGED, // after user changed directory
@@ -1394,6 +1400,7 @@ enum auto_event
EVENT_INSERTENTER, // when entering Insert mode
EVENT_INSERTLEAVEPRE, // just before leaving Insert mode
EVENT_INSERTLEAVE, // just after leaving Insert mode
+ EVENT_KEYINPUTPRE, // before key input
EVENT_MENUPOPUP, // just before popup menu is displayed
EVENT_MODECHANGED, // after changing the mode
EVENT_OPTIONSET, // option was set
@@ -1762,6 +1769,7 @@ void *vim_memset(void *, int, size_t);
# define MB_STRICMP(d, s) mb_strnicmp((char_u *)(d), (char_u *)(s), (int)MAXCOL)
# define MB_STRNICMP(d, s, n) mb_strnicmp((char_u *)(d), (char_u *)(s), (int)(n))
+# define MB_STRNICMP2(d, s, n1, n2) mb_strnicmp2((char_u *)(d), (char_u *)(s), (n1), (n2))
#define STRCAT(d, s) strcat((char *)(d), (char *)(s))
#define STRNCAT(d, s, n) strncat((char *)(d), (char *)(s), (size_t)(n))
diff --git a/src/vim9.h b/src/vim9.h
index 54938fe..c502ac4 100644
--- a/src/vim9.h
+++ b/src/vim9.h
@@ -238,8 +238,9 @@ typedef struct {
// arguments to ISN_METHODCALL
typedef struct {
class_T *cmf_itf; // interface used
- int cmf_idx; // index in "def_functions" for ISN_DCALL
+ int cmf_idx; // index in "def_functions" for ISN_METHODCALL
int cmf_argcount; // number of arguments on top of stack
+ int cmf_is_super; // doing "super.Func", use cmf_itf, not cmf_idx
} cmfunc_T;
// arguments to ISN_PCALL
diff --git a/src/vim9class.c b/src/vim9class.c
index f66aa68..d8813c6 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -1280,6 +1280,7 @@ add_class_members(class_T *cl, exarg_T *eap, garray_T *type_list_gap)
tv->v_type = m->ocm_type->tt_type;
tv->vval.v_string = NULL;
}
+ set_tv_type(tv, m->ocm_type);
if (m->ocm_flags & OCMFLAG_CONST)
item_lock(tv, DICT_MAXNEST, TRUE, TRUE);
}
@@ -2664,7 +2665,7 @@ typealias_unref(typealias_T *ta)
* Handle ":type". Create an alias for a type specification.
*/
void
-ex_type(exarg_T *eap UNUSED)
+ex_type(exarg_T *eap)
{
char_u *arg = eap->arg;
@@ -3100,7 +3101,7 @@ class_member_lookup(class_T *cl, char_u *name, size_t namelen, int *idx)
{
ret_m = m;
ret_idx = i;
- break;
+ break;
}
}
if (idx != NULL)
@@ -3183,11 +3184,11 @@ object_member_lookup(class_T *cl, char_u *name, size_t namelen, int *idx)
}
}
else if (STRCMP(name, m->ocm_name) == 0)
- {
+ {
ret_m = m;
ret_idx = i;
- break;
- }
+ break;
+ }
}
if (idx != NULL)
*idx = ret_idx;
@@ -3683,7 +3684,7 @@ method_not_found_msg(class_T *cl, vartype_T v_type, char_u *name, size_t len)
}
else
semsg(_(e_method_not_found_on_class_str_str), method_name,
- cl->class_name);
+ cl->class_name);
vim_free(method_name);
}
@@ -3842,7 +3843,38 @@ object_len(object_T *obj)
}
/*
- * Return a textual representation of object "obj"
+ * Return TRUE when two objects have exactly the same values.
+ */
+ int
+object_equal(
+ object_T *o1,
+ object_T *o2,
+ int ic) // ignore case for strings
+{
+ class_T *cl1, *cl2;
+
+ if (o1 == o2)
+ return TRUE;
+ if (o1 == NULL || o2 == NULL)
+ return FALSE;
+
+ cl1 = o1->obj_class;
+ cl2 = o2->obj_class;
+
+ if (cl1 != cl2 || cl1 == NULL || cl2 == NULL)
+ return FALSE;
+
+ for (int i = 0; i < cl1->class_obj_member_count; ++i)
+ if (!tv_equal((typval_T *)(o1 + 1) + i, (typval_T *)(o2 + 1) + i, ic))
+ return FALSE;
+
+ return TRUE;
+}
+
+/*
+ * Return a textual representation of object "obj".
+ * "obj" must not be NULL.
+ * May return NULL.
*/
char_u *
object2string(
@@ -3859,47 +3891,58 @@ object2string(
== OK
&& rettv.vval.v_string != NULL)
return rettv.vval.v_string;
+
+ int ok = OK;
+ class_T *cl = obj->obj_class;
+ garray_T ga;
+ ga_init2(&ga, 1, 50);
+
+ if (cl != NULL && IS_ENUM(cl))
+ {
+ ga_concat(&ga, (char_u *)"enum ");
+ ga_concat(&ga, cl->class_name);
+ char_u *enum_name = ((typval_T *)(obj + 1))->vval.v_string;
+ ga_concat(&ga, (char_u *)".");
+ ga_concat(&ga, enum_name);
+ }
else
{
- garray_T ga;
- ga_init2(&ga, 1, 50);
-
- class_T *cl = obj == NULL ? NULL : obj->obj_class;
- if (cl != NULL && IS_ENUM(cl))
- {
- ga_concat(&ga, (char_u *)"enum ");
- ga_concat(&ga, cl->class_name);
- char_u *enum_name = ((typval_T *)(obj + 1))->vval.v_string;
- ga_concat(&ga, (char_u *)".");
- ga_concat(&ga, enum_name);
- }
- else
- {
- ga_concat(&ga, (char_u *)"object of ");
- ga_concat(&ga, cl == NULL ? (char_u *)"[unknown]"
- : cl->class_name);
- }
- if (cl != NULL)
- {
- ga_concat(&ga, (char_u *)" {");
- for (int i = 0; i < cl->class_obj_member_count; ++i)
+ ga_concat(&ga, (char_u *)"object of ");
+ ga_concat(&ga, cl == NULL ? (char_u *)"[unknown]"
+ : cl->class_name);
+ }
+ if (cl != NULL)
+ {
+ ga_concat(&ga, (char_u *)" {");
+ for (int i = 0; i < cl->class_obj_member_count; ++i)
+ {
+ if (i > 0)
+ ga_concat(&ga, (char_u *)", ");
+ ocmember_T *m = &cl->class_obj_members[i];
+ ga_concat(&ga, m->ocm_name);
+ ga_concat(&ga, (char_u *)": ");
+ char_u *tf = NULL;
+ char_u *s = echo_string_core((typval_T *)(obj + 1) + i,
+ &tf, numbuf, copyID, echo_style,
+ restore_copyID, composite_val);
+ if (s != NULL)
+ ga_concat(&ga, s);
+ vim_free(tf);
+ if (s == NULL || did_echo_string_emsg)
{
- if (i > 0)
- ga_concat(&ga, (char_u *)", ");
- ocmember_T *m = &cl->class_obj_members[i];
- ga_concat(&ga, m->ocm_name);
- ga_concat(&ga, (char_u *)": ");
- char_u *tf = NULL;
- ga_concat(&ga, echo_string_core(
- (typval_T *)(obj + 1) + i,
- &tf, numbuf, copyID, echo_style,
- restore_copyID, composite_val));
- vim_free(tf);
+ ok = FAIL;
+ break;
}
- ga_concat(&ga, (char_u *)"}");
+ line_breakcheck();
}
- return ga.ga_data;
+ ga_concat(&ga, (char_u *)"}");
+ }
+ if (ok == FAIL)
+ {
+ vim_free(ga.ga_data);
+ return NULL;
}
+ return (char_u *)ga.ga_data;
}
/*
diff --git a/src/vim9cmds.c b/src/vim9cmds.c
index 694bb33..c7fa60a 100644
--- a/src/vim9cmds.c
+++ b/src/vim9cmds.c
@@ -1639,7 +1639,7 @@ compile_try(char_u *arg, cctx_T *cctx)
* Compile "catch {expr}".
*/
char_u *
-compile_catch(char_u *arg, cctx_T *cctx UNUSED)
+compile_catch(char_u *arg, cctx_T *cctx)
{
scope_T *scope = cctx->ctx_scope;
garray_T *instr = &cctx->ctx_instr;
@@ -1923,7 +1923,7 @@ compile_endtry(char_u *arg, cctx_T *cctx)
* compile "throw {expr}"
*/
char_u *
-compile_throw(char_u *arg, cctx_T *cctx UNUSED)
+compile_throw(char_u *arg, cctx_T *cctx)
{
char_u *p = skipwhite(arg);
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 8e6f6e2..ea305b7 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -522,6 +522,8 @@ use_typecheck(type_T *actual, type_T *expected)
(actual->tt_member == &t_void)
== (expected->tt_member == &t_void))))
return TRUE;
+ if (actual->tt_type == VAR_OBJECT && expected->tt_type == VAR_OBJECT)
+ return TRUE;
if ((actual->tt_type == VAR_LIST || actual->tt_type == VAR_DICT)
&& actual->tt_type == expected->tt_type)
// This takes care of a nested list or dict.
@@ -3315,7 +3317,7 @@ obj_constructor_prologue(ufunc_T *ufunc, cctx_T *cctx)
// the initialization expression type.
m->ocm_type = type;
}
- else if (m->ocm_type->tt_type != type->tt_type)
+ else
{
// The type of the member initialization expression is
// determined at run time. Add a runtime type check.
@@ -3330,6 +3332,15 @@ obj_constructor_prologue(ufunc_T *ufunc, cctx_T *cctx)
else
push_default_value(cctx, m->ocm_type->tt_type, FALSE, NULL);
+ if ((m->ocm_type->tt_type == VAR_DICT
+ || m->ocm_type->tt_type == VAR_LIST)
+ && m->ocm_type->tt_member != NULL
+ && m->ocm_type->tt_member != &t_any
+ && m->ocm_type->tt_member != &t_unknown)
+ // Set the type in the list or dict, so that it can be checked,
+ // also in legacy script.
+ generate_SETTYPE(cctx, m->ocm_type);
+
generate_STORE_THIS(cctx, i);
}
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 3a3960a..f523e27 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2254,26 +2254,35 @@ execute_storeindex(isn_T *iptr, ectx_T *ectx)
{
// Need to get the member index now that the class is known.
object_T *obj = tv_dest->vval.v_object;
- class_T *cl = obj->obj_class;
- char_u *member = tv_idx->vval.v_string;
-
- int m_idx;
- ocmember_T *m = object_member_lookup(cl, member, 0, &m_idx);
- if (m != NULL)
+ if (obj == NULL)
{
- if (*member == '_')
- {
- emsg_var_cl_define(e_cannot_access_protected_variable_str,
- m->ocm_name, 0, cl);
- status = FAIL;
- }
-
- lidx = m_idx;
+ emsg(_(e_using_null_object));
+ status = FAIL;
}
else
{
- member_not_found_msg(cl, VAR_OBJECT, member, 0);
- status = FAIL;
+ class_T *cl = obj->obj_class;
+ char_u *member = tv_idx->vval.v_string;
+
+ int m_idx;
+ ocmember_T *m = object_member_lookup(cl, member, 0, &m_idx);
+ if (m != NULL)
+ {
+ if (*member == '_')
+ {
+ emsg_var_cl_define(
+ e_cannot_access_protected_variable_str,
+ m->ocm_name, 0, cl);
+ status = FAIL;
+ }
+
+ lidx = m_idx;
+ }
+ else
+ {
+ member_not_found_msg(cl, VAR_OBJECT, member, 0);
+ status = FAIL;
+ }
}
}
else if ((dest_type == VAR_LIST || dest_type == VAR_OBJECT)
@@ -3567,7 +3576,10 @@ exec_instructions(ectx_T *ectx)
p = tv_get_string_buf(tv, buf);
}
else
+ {
+ SOURCING_LNUM = iptr->isn_lnum;
p = tv_stringify(tv, buf);
+ }
len = (int)STRLEN(p);
if (GA_GROW_FAILS(&ga, len + 2))
@@ -4380,15 +4392,31 @@ exec_instructions(ectx_T *ectx)
object_required_error(tv);
goto on_error;
}
+
object_T *obj = tv->vval.v_object;
- class_T *cl = obj->obj_class;
+ if (obj == NULL)
+ {
+ emsg(_(e_using_null_object));
+ goto on_error;
+ }
- // convert the interface index to the object index
- int idx = object_index_from_itf_index(mfunc->cmf_itf,
- TRUE, mfunc->cmf_idx, cl);
+ ufunc_T *ufunc;
+ if (mfunc->cmf_is_super)
+ // Doing "super.Func", use the specific ufunc.
+ ufunc = mfunc->cmf_itf->class_obj_methods[
+ mfunc->cmf_idx];
+ else
+ {
+ class_T *cl = obj->obj_class;
- if (call_ufunc(cl->class_obj_methods[idx], NULL,
- mfunc->cmf_argcount, ectx, NULL, NULL) == FAIL)
+ // convert the interface index to the object index
+ int idx = object_index_from_itf_index(mfunc->cmf_itf,
+ TRUE, mfunc->cmf_idx, cl);
+ ufunc = cl->class_obj_methods[idx];
+ }
+
+ if (call_ufunc(ufunc, NULL, mfunc->cmf_argcount, ectx,
+ NULL, NULL) == FAIL)
goto on_error;
}
break;
@@ -4536,12 +4564,21 @@ exec_instructions(ectx_T *ectx)
tv = STACK_TV_BOT(-1);
if (tv->v_type != VAR_OBJECT)
{
+ SOURCING_LNUM = iptr->isn_lnum;
object_required_error(tv);
vim_free(pt);
goto on_error;
}
object_T *obj = tv->vval.v_object;
+ if (obj == NULL)
+ {
+ SOURCING_LNUM = iptr->isn_lnum;
+ emsg(_(e_using_null_object));
+ vim_free(pt);
+ goto on_error;
+ }
+
cl = obj->obj_class;
// drop the value from the stack
clear_tv(tv);
diff --git a/src/vim9expr.c b/src/vim9expr.c
index 8c412b8..cfdea7b 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -349,6 +349,11 @@ compile_class_object_index(cctx_T *cctx, char_u **arg, type_T *type)
else
{
// type->tt_type == VAR_OBJECT: method call
+ // When compiling Func and doing "super.SomeFunc()", must be in the
+ // class context that defines Func.
+ if (is_super)
+ cl = cctx->ctx_ufunc->uf_defclass;
+
function_count = cl->class_obj_method_count;
child_count = cl->class_obj_method_count_child;
functions = cl->class_obj_methods;
@@ -419,13 +424,13 @@ compile_class_object_index(cctx_T *cctx, char_u **arg, type_T *type)
return generate_PCALL(cctx, argcount, name, ocm->ocm_type, TRUE);
if (type->tt_type == VAR_OBJECT
&& (cl->class_flags & (CLASS_INTERFACE | CLASS_EXTENDED)))
- return generate_CALL(cctx, ufunc, cl, fi, argcount);
- return generate_CALL(cctx, ufunc, NULL, 0, argcount);
+ return generate_CALL(cctx, ufunc, cl, fi, argcount, is_super);
+ return generate_CALL(cctx, ufunc, NULL, 0, argcount, FALSE);
}
if (type->tt_type == VAR_OBJECT)
{
- ocmember_T *m = object_member_lookup(cl, name, len, &m_idx);
+ ocmember_T *m = object_member_lookup(cl, name, len, &m_idx);
if (m_idx >= 0)
{
if (*name == '_' && !inside_class(cctx, cl))
@@ -1035,7 +1040,7 @@ compile_builtin_method_call(cctx_T *cctx, class_builtin_T builtin_method)
ufunc_T *uf = class_get_builtin_method(type->tt_class, builtin_method,
&method_idx);
if (uf != NULL)
- res = generate_CALL(cctx, uf, type->tt_class, method_idx, 0);
+ res = generate_CALL(cctx, uf, type->tt_class, method_idx, 0, FALSE);
}
return res;
@@ -1238,7 +1243,7 @@ compile_call(
{
if (!func_is_global(ufunc))
{
- res = generate_CALL(cctx, ufunc, NULL, 0, argcount);
+ res = generate_CALL(cctx, ufunc, NULL, 0, argcount, FALSE);
goto theend;
}
if (!has_g_namespace
@@ -1257,7 +1262,7 @@ compile_call(
if (cctx->ctx_ufunc->uf_defclass == cl)
{
res = generate_CALL(cctx, cl->class_class_functions[mi], NULL,
- 0, argcount);
+ 0, argcount, FALSE);
}
else
{
@@ -1285,7 +1290,7 @@ compile_call(
// If we can find a global function by name generate the right call.
if (ufunc != NULL)
{
- res = generate_CALL(cctx, ufunc, NULL, 0, argcount);
+ res = generate_CALL(cctx, ufunc, NULL, 0, argcount, FALSE);
goto theend;
}
@@ -2836,12 +2841,13 @@ compile_expr8(char_u **arg, cctx_T *cctx, ppconst_T *ppconst)
type_T *actual;
where_T where = WHERE_INIT;
+ where.wt_kind = WT_CAST;
generate_ppconst(cctx, ppconst);
actual = get_type_on_stack(cctx, 0);
if (check_type_maybe(want_type, actual, FALSE, where) != OK)
{
- if (need_type(actual, want_type, FALSE,
- -1, 0, cctx, FALSE, FALSE) == FAIL)
+ if (need_type_where(actual, want_type, FALSE, -1, where, cctx, FALSE, FALSE)
+ == FAIL)
return FAIL;
}
}
diff --git a/src/vim9instr.c b/src/vim9instr.c
index ad8beb1..4368e3c 100644
--- a/src/vim9instr.c
+++ b/src/vim9instr.c
@@ -1805,6 +1805,8 @@ generate_BLOBAPPEND(cctx_T *cctx)
* Generate an ISN_DCALL, ISN_UCALL or ISN_METHODCALL instruction.
* When calling a method on an object, of which we know the interface only,
* then "cl" is the interface and "mi" the method index on the interface.
+ * save is_super in the "isn->isn_arg"; it flags execution to use mfunc
+ * directly to determine ufunc.
* Return FAIL if the number of arguments is wrong.
*/
int
@@ -1813,7 +1815,8 @@ generate_CALL(
ufunc_T *ufunc,
class_T *cl,
int mi,
- int pushed_argcount)
+ int pushed_argcount,
+ int is_super)
{
isn_T *isn;
int regular_args = ufunc->uf_args.ga_len;
@@ -1898,6 +1901,7 @@ generate_CALL(
++cl->class_refcount;
isn->isn_arg.mfunc->cmf_idx = mi;
isn->isn_arg.mfunc->cmf_argcount = argcount;
+ isn->isn_arg.mfunc->cmf_is_super = is_super;
}
else if (isn->isn_type == ISN_DCALL)
{
diff --git a/src/vim9type.c b/src/vim9type.c
index ffdf7fa..1f044d3 100644
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -934,6 +934,7 @@ type_mismatch_where(type_T *expected, type_T *actual, where_T where)
semsg(_(e_argument_nr_type_mismatch_expected_str_but_got_str_in_str),
where.wt_index, typename1, typename2, where.wt_func_name);
break;
+ case WT_CAST:
case WT_UNKNOWN:
if (where.wt_func_name == NULL)
semsg(_(e_type_mismatch_expected_str_but_got_str),
@@ -1090,7 +1091,15 @@ check_type_maybe(
ret = FAIL;
}
else if (!class_instance_of(actual->tt_class, expected->tt_class))
- ret = FAIL;
+ {
+ // Check if this is an up-cast, if so we'll have to check the type at
+ // runtime.
+ if (where.wt_kind == WT_CAST &&
+ class_instance_of(expected->tt_class, actual->tt_class))
+ ret = MAYBE;
+ else
+ ret = FAIL;
+ }
}
if (ret == FAIL && give_msg)
@@ -2129,12 +2138,13 @@ check_type_is_value(type_T *type)
switch (type->tt_type)
{
case VAR_CLASS:
- if (IS_ENUM(type->tt_class))
+ if (type->tt_class != NULL && IS_ENUM(type->tt_class))
semsg(_(e_using_enum_as_value_str),
type->tt_class->class_name);
else
semsg(_(e_using_class_as_value_str),
- type->tt_class->class_name);
+ type->tt_class == NULL ? (char_u *)""
+ : type->tt_class->class_name);
return FAIL;
case VAR_TYPEALIAS:
diff --git a/src/viminfo.c b/src/viminfo.c
index 540422c..11a2946 100644
--- a/src/viminfo.c
+++ b/src/viminfo.c
@@ -251,7 +251,7 @@ barline_writestring(FILE *fd, char_u *s, int remaining_start)
viminfo_readstring(
vir_T *virp,
int off, // offset for virp->vir_line
- int convert UNUSED) // convert the string
+ int convert) // convert the string
{
char_u *retval = NULL;
char_u *s, *d;
diff --git a/src/window.c b/src/window.c
index 7322905..b2c90c7 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1708,7 +1708,7 @@ win_count(void)
int
make_windows(
int count,
- int vertical UNUSED) // split windows vertically if TRUE
+ int vertical) // split windows vertically if TRUE
{
int maxcount;
int todo;
@@ -2511,7 +2511,7 @@ close_windows(
for (wp = firstwin; wp != NULL && !ONE_WINDOW; )
{
if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
- && !(wp->w_closing || wp->w_buffer->b_locked > 0))
+ && !(win_locked(wp) || wp->w_buffer->b_locked > 0))
{
if (win_close(wp, FALSE) == FAIL)
// If closing the window fails give up, to avoid looping
@@ -2532,7 +2532,7 @@ close_windows(
if (tp != curtab)
FOR_ALL_WINDOWS_IN_TAB(tp, wp)
if (wp->w_buffer == buf
- && !(wp->w_closing || wp->w_buffer->b_locked > 0))
+ && !(win_locked(wp) || wp->w_buffer->b_locked > 0))
{
win_close_othertab(wp, FALSE, tp);
@@ -2654,10 +2654,10 @@ win_close_buffer(win_T *win, int action, int abort_if_last)
bufref_T bufref;
set_bufref(&bufref, curbuf);
- win->w_closing = TRUE;
+ win->w_locked = TRUE;
close_buffer(win, win->w_buffer, action, abort_if_last, TRUE);
if (win_valid_any_tab(win))
- win->w_closing = FALSE;
+ win->w_locked = FALSE;
// Make sure curbuf is valid. It can become invalid if 'bufhidden' is
// "wipe".
if (!bufref_valid(&bufref))
@@ -2705,7 +2705,7 @@ win_close(win_T *win, int free_buf)
if (window_layout_locked(CMD_close))
return FAIL;
- if (win->w_closing || (win->w_buffer != NULL
+ if (win_locked(win) || (win->w_buffer != NULL
&& win->w_buffer->b_locked > 0))
return FAIL; // window is already being closed
if (win_unlisted(win))
@@ -2754,19 +2754,19 @@ win_close(win_T *win, int free_buf)
other_buffer = TRUE;
if (!win_valid(win))
return FAIL;
- win->w_closing = TRUE;
+ win->w_locked = TRUE;
apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
if (!win_valid(win))
return FAIL;
- win->w_closing = FALSE;
+ win->w_locked = FALSE;
if (last_window())
return FAIL;
}
- win->w_closing = TRUE;
+ win->w_locked = TRUE;
apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
if (!win_valid(win))
return FAIL;
- win->w_closing = FALSE;
+ win->w_locked = FALSE;
if (last_window())
return FAIL;
#ifdef FEAT_EVAL
@@ -3346,7 +3346,7 @@ win_close_othertab(win_T *win, int free_buf, tabpage_T *tp)
// Get here with win->w_buffer == NULL when win_close() detects the tab
// page changed.
- if (win->w_closing || (win->w_buffer != NULL
+ if (win_locked(win) || (win->w_buffer != NULL
&& win->w_buffer->b_locked > 0))
return; // window is already being closed
@@ -3486,7 +3486,7 @@ win_free_all(void)
win_T *
winframe_remove(
win_T *win,
- int *dirp UNUSED, // set to 'v' or 'h' for direction if 'ea'
+ int *dirp, // set to 'v' or 'h' for direction if 'ea'
tabpage_T *tp, // tab page "win" is in, NULL for current
frame_T **unflat_altfr) // if not NULL, set to pointer of frame that got
// the space, and it is not flattened
@@ -3782,15 +3782,24 @@ win_altframe(
static tabpage_T *
alt_tabpage(void)
{
- tabpage_T *tp;
+ tabpage_T *tp = NULL;
+ int forward;
- // Use the next tab page if possible.
- if (curtab->tp_next != NULL)
- return curtab->tp_next;
+ // Use the last accessed tab page, if possible.
+ if ((tcl_flags & TCL_USELAST) && valid_tabpage(lastused_tabpage))
+ return lastused_tabpage;
+
+ // Use the next tab page, if possible.
+ forward = curtab->tp_next != NULL &&
+ ((tcl_flags & TCL_LEFT) == 0 || curtab == first_tabpage);
+
+ if (forward)
+ tp = curtab->tp_next;
+ else
+ // Use the previous tab page.
+ for (tp = first_tabpage; tp->tp_next != curtab; tp = tp->tp_next)
+ ;
- // Find the last but one tab page.
- for (tp = first_tabpage; tp->tp_next != curtab; tp = tp->tp_next)
- ;
return tp;
}
@@ -4598,6 +4607,11 @@ free_tabpage(tabpage_T *tp)
* It will edit the current buffer, like after ":split".
* When "after" is 0 put it just after the current Tab page.
* Otherwise put it just before tab page "after".
+ *
+ * Does not trigger WinNewPre, since the window structures
+ * are not completly setup yet and could cause dereferencing
+ * NULL pointers
+ *
* Return FAIL or OK.
*/
int
@@ -4631,8 +4645,6 @@ win_new_tabpage(int after)
newtp->tp_localdir = (tp->tp_localdir == NULL)
? NULL : vim_strsave(tp->tp_localdir);
- trigger_winnewpre();
-
// Create a new empty window.
if (win_alloc_firstwin(tp->tp_curwin) == OK)
{
@@ -4846,8 +4858,8 @@ tabpage_index(tabpage_T *ftp)
*/
static int
leave_tabpage(
- buf_T *new_curbuf UNUSED, // what is going to be the new curbuf,
- // NULL if unknown
+ buf_T *new_curbuf, // what is going to be the new curbuf,
+ // NULL if unknown
int trigger_leave_autocmds)
{
tabpage_T *tp = curtab;
@@ -4899,7 +4911,7 @@ leave_tabpage(
static void
enter_tabpage(
tabpage_T *tp,
- buf_T *old_curbuf UNUSED,
+ buf_T *old_curbuf,
int trigger_enter_autocmds,
int trigger_leave_autocmds)
{
@@ -5828,10 +5840,7 @@ win_free(
win_free_lsize(wp);
for (i = 0; i < wp->w_tagstacklen; ++i)
- {
- vim_free(wp->w_tagstack[i].tagname);
- vim_free(wp->w_tagstack[i].user_data);
- }
+ tagstack_clear_entry(&wp->w_tagstack[i]);
vim_free(wp->w_localdir);
vim_free(wp->w_prevdir);
@@ -7846,7 +7855,7 @@ get_win_number(win_T *wp, win_T *first_win)
}
int
-get_tab_number(tabpage_T *tp UNUSED)
+get_tab_number(tabpage_T *tp)
{
int i = 1;
tabpage_T *t;
@@ -7991,3 +8000,12 @@ get_last_winid(void)
{
return last_win_id;
}
+
+/*
+ * Don't let autocommands close the given window
+ */
+ int
+win_locked(win_T *wp)
+{
+ return wp->w_locked;
+}
diff --git a/src/xxd/Make_ming.mak b/src/xxd/Make_ming.mak
index 2d32261..e621e67 100644
--- a/src/xxd/Make_ming.mak
+++ b/src/xxd/Make_ming.mak
@@ -16,7 +16,7 @@ CC = gcc
CFLAGS = -O2 -Wall -DWIN32 $(DEFINES)
ifneq (sh.exe, $(SHELL))
-DEL = rm
+DEL = rm -f
else
DEL = del
endif
diff --git a/src/xxd/Make_mvc.mak b/src/xxd/Make_mvc.mak
index 0133d73..2361ab3 100644
--- a/src/xxd/Make_mvc.mak
+++ b/src/xxd/Make_mvc.mak
@@ -9,7 +9,7 @@ SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
xxd: xxd.exe
xxd.exe: xxd.c
- cl /nologo -DWIN32 xxd.c -link -subsystem:$(SUBSYSTEM)
+ cl /nologo /source-charset:utf-8 -DWIN32 xxd.c -link -subsystem:$(SUBSYSTEM)
# This was for an older compiler
# cl /nologo -DWIN32 xxd.c /link setargv.obj