From 5a307c361cbe9f7ac438a917b905378d87f8f2de Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 28 Mar 2025 19:01:32 +0100 Subject: [PATCH 001/633] patch 9.1.1252: typos in code and docs related to 'diffopt' "inline:" Problem: Typos in code and docs related to 'diffopt' "inline:". (after v9.1.1243) Solution: Fix typos and slightly improve the docs. (zeertzjq) closes: #16997 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- runtime/doc/diff.txt | 11 +++++------ runtime/doc/options.txt | 6 +++--- src/structs.h | 2 +- src/testdir/test_diffmode.vim | 6 +++--- src/version.c | 2 ++ 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt index 0dbc7f872e..069a853bdd 100644 --- a/runtime/doc/diff.txt +++ b/runtime/doc/diff.txt @@ -1,4 +1,4 @@ -*diff.txt* For Vim version 9.1. Last change: 2024 Mar 26 +*diff.txt* For Vim version 9.1. Last change: 2024 Mar 28 VIM REFERENCE MANUAL by Bram Moolenaar @@ -243,12 +243,11 @@ The diffs are highlighted with these groups: highlight the exact difference between the two. Will respect any 'diffopt' flag that affects internal diff. - Not used when `inline:` set to "none". -|hl-DiffTextAdd| DiffTextAdd Added text inside a Changed line. Similar to + Not used when `inline:` is set to "none". +|hl-DiffTextAdd| DiffTextAdd Added text inside a Changed line. Similar to DiffText, but used when there is no - corresponding text in other buffers. Will not - be used when `inline:` is set to "simple" or - "none". + corresponding text in other buffers. Not used + when `inline:` is set to "simple" or "none". |hl-DiffDelete| DiffDelete Deleted lines. Also called filler lines, because they don't really exist in this buffer. diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 0b7ba9126e..84deecae6f 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Mar 27 +*options.txt* For Vim version 9.1. Last change: 2025 Mar 28 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2982,8 +2982,8 @@ A jump table for the options with a short description can be found at |Q_op|. none Do not perform inline highlighting. simple Highlight from first different character to the last one in each - line. This is the default if nothing - is set. + line. This is the default if no + `inline:` value is set. char Use internal diff to perform a character-wise diff and highlight the difference. diff --git a/src/structs.h b/src/structs.h index 33c26dc6bf..0baf54383e 100644 --- a/src/structs.h +++ b/src/structs.h @@ -3606,7 +3606,7 @@ typedef struct diffline_change_S diffline_change_T; struct diffline_change_S { colnr_T dc_start[DB_COUNT]; // byte offset of start of range in the line - colnr_T dc_end[DB_COUNT]; // 1 paste byte offset of end of range in line + colnr_T dc_end[DB_COUNT]; // 1 past byte offset of end of range in line int dc_start_lnum_off[DB_COUNT]; // starting line offset int dc_end_lnum_off[DB_COUNT]; // end line offset }; diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim index 6c87da97c6..1b5e5c0819 100644 --- a/src/testdir/test_diffmode.vim +++ b/src/testdir/test_diffmode.vim @@ -2463,8 +2463,8 @@ func Test_diff_inline() \ "abcdefghijklmno", "anchor2", \ "abcdefghijklmno", "anchor3", \ "test", "multiline"], - \ ["a?c?e?g?i?k???o", "anchor1", - \ "a??de?????klmno", "anchor2", + \ ["a?c?e?g?i?k???o", "anchor1", + \ "a??de?????klmno", "anchor2", \ "a??de??????lmno", "anchor3", \ "t?s?", "??????i?e"]) call VerifyInternal(buf, "Test_diff_inline_char_02", " diffopt+=inline:char") @@ -2505,7 +2505,7 @@ func Test_diff_inline_multibuffer() \ ["This is buffer3. Last.", "anchor", "Some more", "text here.", "anchor", "only in buffer2/3", "not in buffer1"]) call VerifyInternal(buf, "Test_diff_inline_multibuffer_01", " diffopt+=inline:char") - " Close one of the buffer and make sure it updates correctly + " Close one of the buffers and make sure it updates correctly call term_sendkeys(buf, ":diffoff\") call VerifyInternal(buf, "Test_diff_inline_multibuffer_02", " diffopt+=inline:char") diff --git a/src/version.c b/src/version.c index a40a1870d7..cceb83cd3b 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1252, /**/ 1251, /**/ From c5aad6cca534fe3c4e0f3105f172d43d0852ea27 Mon Sep 17 00:00:00 2001 From: Yee Cheng Chin Date: Fri, 28 Mar 2025 19:09:13 +0100 Subject: [PATCH 002/633] runtime(doc): non-portable sed regex in Makefile for pi_netrw.txt rule Previously it was using '\0' in sed which is non-portable and does not work in macOS. Fix this by using the '$' (end-of-line) regex atom (which needs to be doubled in the Makefile) to append at the end instead. An alternative would have been to use '&' which is the more portable version of '\0'. closes: #16996 Signed-off-by: Yee Cheng Chin Signed-off-by: Christian Brabandt --- runtime/doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile index 0f142a3722..01b2c3e83f 100644 --- a/runtime/doc/Makefile +++ b/runtime/doc/Makefile @@ -143,7 +143,7 @@ os_win32.txt: pi_netrw.txt: ../pack/dist/opt/netrw/doc/netrw.txt cp ../pack/dist/opt/netrw/doc/netrw.txt $@.tmp - sed -e '1s/\(.*\)/\0 *pi_netrw.txt*/' $@.tmp > $@ && \ + sed -e '1s/$$/ *pi_netrw.txt*/' $@.tmp > $@ && \ rm -f $@.tmp vietnamese.txt: From ce80c59bfd3c0087a354ee549639ca60fa192fba Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Fri, 28 Mar 2025 19:13:32 +0100 Subject: [PATCH 003/633] patch 9.1.1253: abort when closing window with attached quickfix data Problem: If win_close() is called with a window that has quickfix stack attached to it, the corresponding quickfix buffer will be closed and freed after the buffer was already closed. At that time curwin->w_buffer points to NULL, which the CHECK_CURBUF will catch and abort if ABORT_ON_ERROR is defined Solution: in wipe_qf_buffer() temporarily point curwin->w_buffer back to curbuf, the window will be closed anyhow, so it shouldn't matter that curbuf->b_nwindows isn't incremented. closes: #16993 closes: #16985 Co-authored-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- src/quickfix.c | 14 ++++++++++++++ src/testdir/test_quickfix.vim | 8 ++++++++ src/version.c | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/quickfix.c b/src/quickfix.c index 30353c5424..11bfa82241 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -2035,10 +2035,24 @@ wipe_qf_buffer(qf_info_T *qi) qfbuf = buflist_findnr(qi->qf_bufnr); if (qfbuf != NULL && qfbuf->b_nwindows == 0) { + int buf_was_null = FALSE; + // can happen when curwin is going to be closed e.g. curwin->w_buffer + // was already closed in win_close(), and we are now closing the + // window related location list buffer from win_free_mem() + // but close_buffer() calls CHECK_CURBUF() macro and requires + // curwin->w_buffer == curbuf + if (curwin->w_buffer == NULL) + { + curwin->w_buffer = curbuf; + buf_was_null = TRUE; + } + // If the quickfix buffer is not loaded in any window, then // wipe the buffer. close_buffer(NULL, qfbuf, DOBUF_WIPE, FALSE, FALSE); qi->qf_bufnr = INVALID_QFBUFNR; + if (buf_was_null) + curwin->w_buffer = NULL; } } diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index c382e68379..03fbbee711 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -6718,4 +6718,12 @@ func Test_hardlink_fname() call Xtest_hardlink_fname('l') endfunc +func Test_quickfix_close_buffer_crash() + new + lexpr 'test' | lopen + wincmd k + lclose + wincmd q +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index cceb83cd3b..d11c4acacf 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1253, /**/ 1252, /**/ From aa68f8a09554ad0a3cae8d8c4e0d38b6b14b4a11 Mon Sep 17 00:00:00 2001 From: Maxim Kim Date: Fri, 28 Mar 2025 19:17:53 +0100 Subject: [PATCH 004/633] patch 9.1.1254: need more tests for the comment plugin Problem: need more tests for the comment plugin Solution: add a tests for the [gb]:comment_first_col setting (Maxim Kim) closes: #16995 Signed-off-by: Maxim Kim Signed-off-by: Christian Brabandt --- src/testdir/test_plugin_comment.vim | 53 ++++++++++++++++++++++++++++- src/version.c | 2 ++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/testdir/test_plugin_comment.vim b/src/testdir/test_plugin_comment.vim index b1d356be98..1068c84f91 100644 --- a/src/testdir/test_plugin_comment.vim +++ b/src/testdir/test_plugin_comment.vim @@ -1,3 +1,5 @@ +" Test for the comment package + source check.vim source term_util.vim @@ -105,7 +107,6 @@ func Test_bothends_uncomment() call assert_equal(["int main() {", " return 0;", "}"], result) endfunc - func Test_mixed_comment() CheckScreendump let lines =<< trim END @@ -177,6 +178,56 @@ func Test_mixed_indent_comment() call assert_equal(["/* int main() { */", "\t/* if 1 { */", "\t /* return 0; */", "\t/* } */", " /* return 1; */", "/* } */"], result) endfunc +func Test_buffer_first_col_comment() + CheckScreendump + let lines =<< trim END + def Hello(): + print("Hello") + pass + END + + let input_file = "test_first_col_comment_input.py" + call writefile(lines, input_file, "D") + + let buf = RunVimInTerminal('-c "packadd comment" -c "let b:comment_first_col=1" ' .. input_file, {}) + + call term_sendkeys(buf, "jgcc") + let output_file = "comment_first_col_test.py" + call term_sendkeys(buf, $":w {output_file}\") + defer delete(output_file) + + call StopVimInTerminal(buf) + + let result = readfile(output_file) + + call assert_equal(["def Hello():", '# print("Hello")', " pass"], result) +endfunc + +func Test_global_first_col_comment() + CheckScreendump + let lines =<< trim END + def Hello(): + print("Hello") + pass + END + + let input_file = "test_first_col_comment_input.py" + call writefile(lines, input_file, "D") + + let buf = RunVimInTerminal('-c "packadd comment" -c "let g:comment_first_col=1" ' .. input_file, {}) + + call term_sendkeys(buf, "jgcj") + let output_file = "comment_first_col_test.py" + call term_sendkeys(buf, $":w {output_file}\") + defer delete(output_file) + + call StopVimInTerminal(buf) + + let result = readfile(output_file) + + call assert_equal(["def Hello():", '# print("Hello")', "# pass"], result) +endfunc + func Test_textobj_icomment() CheckScreendump let lines =<< trim END diff --git a/src/version.c b/src/version.c index d11c4acacf..e30225531b 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1254, /**/ 1253, /**/ From 532c5aec6fa8f0a3d743c7d1573d25d75dd36d5f Mon Sep 17 00:00:00 2001 From: glepnir Date: Fri, 28 Mar 2025 19:21:59 +0100 Subject: [PATCH 005/633] patch 9.1.1255: missing test condition for 'pummaxwidth' setting Problem: missing test condition for 'pummaxwidth' setting, pummaxwidth not effective when width is 32 and height is 10 (after v9.1.1250) Solution: add missing comparison condition in pum_width() (glepnir) closes: #16999 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- runtime/optwin.vim | 4 ++-- src/popupmenu.c | 4 ++++ src/testdir/dumps/Test_pum_maxwidth_09.dump | 10 ++++++++++ src/testdir/test_popup.vim | 5 +++++ src/version.c | 2 ++ 5 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/testdir/dumps/Test_pum_maxwidth_09.dump diff --git a/runtime/optwin.vim b/runtime/optwin.vim index 9b59211712..2bcea9df01 100644 --- a/runtime/optwin.vim +++ b/runtime/optwin.vim @@ -1,7 +1,7 @@ " These commands create the option window. " " Maintainer: The Vim Project -" Last Change: 2025 Mar 27 +" Last Change: 2025 Mar 28 " Former Maintainer: Bram Moolenaar " If there already is an option window, jump to that one. @@ -863,7 +863,7 @@ if has("insert_expand") call OptionG("ph", &ph) call AddOption("pumwidth", gettext("minimum width of the popup menu")) call OptionG("pw", &pw) - call AddOption("pumaxmwidth", gettext("maximum width of the popup menu")) + call AddOption("pummaxwidth", gettext("maximum width of the popup menu")) call OptionG("pmw", &pmw) call AddOption("completefunc", gettext("user defined function for Insert mode completion")) call append("$", "\t" .. s:local_to_buffer) diff --git a/src/popupmenu.c b/src/popupmenu.c index d69c7bd849..5a2f070313 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -342,6 +342,10 @@ pum_display( if (p_pmw > 0 && pum_width > p_pmw) pum_width = p_pmw; } + else if (p_pmw > 0 && pum_width > p_pmw) + { + pum_width = p_pmw; + } } } diff --git a/src/testdir/dumps/Test_pum_maxwidth_09.dump b/src/testdir/dumps/Test_pum_maxwidth_09.dump new file mode 100644 index 0000000000..f46d0aab34 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_09.dump @@ -0,0 +1,10 @@ +|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| +|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| +@12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_ +|1|2|3|4|5|6|7|8|9|_|a> @20 +|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|.@2| +0#4040ff13#ffffff0@11 +|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|.@2| +0#4040ff13#ffffff0@11 +|~| @30 +|~| @30 +|~| @30 +|-+2#0000000&@1| |m+0#00e0003&|a|t|c|h| |1| |o|f| |2| +0#0000000&@16 diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index 94839b5b77..e95465c2d4 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -2017,6 +2017,11 @@ func Test_pum_maxwidth() call VerifyScreenDump(buf, 'Test_pum_maxwidth_04', {'rows': 8}) call term_sendkeys(buf, "\3Gdd\"zp") + call term_sendkeys(buf, ":set lines=10 columns=32\") + call term_sendkeys(buf, "GA\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_09', {'rows': 10, 'cols': 32}) + call term_sendkeys(buf, "\3Gdd\"zp") + call StopVimInTerminal(buf) endfunc diff --git a/src/version.c b/src/version.c index e30225531b..d8e55f9c46 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1255, /**/ 1254, /**/ From 722fbd15549f07fc67b057995e77e2271d639fea Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Fri, 28 Mar 2025 19:36:37 +0100 Subject: [PATCH 006/633] runtime(vim): Update base-syntax, match tuples Tuples were introduced in commit 9cb865e. See PR #16776. fixes: #16965 closes: #16935 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/generator/vim.vim.base | 50 +++++++++---------- .../syntax/testdir/dumps/vim9_lambda_00.dump | 18 +++---- .../syntax/testdir/dumps/vim9_lambda_01.dump | 28 +++++------ .../syntax/testdir/dumps/vim9_lambda_02.dump | 30 +++++------ .../syntax/testdir/dumps/vim9_lambda_03.dump | 28 +++++------ .../syntax/testdir/dumps/vim9_lambda_04.dump | 30 +++++------ .../syntax/testdir/dumps/vim9_lambda_05.dump | 32 ++++++------ .../syntax/testdir/dumps/vim9_lambda_06.dump | 34 ++++++------- .../syntax/testdir/dumps/vim9_lambda_07.dump | 20 ++++++++ .../syntax/testdir/dumps/vim9_lambda_08.dump | 20 ++++++++ .../syntax/testdir/dumps/vim9_lambda_09.dump | 20 ++++++++ .../syntax/testdir/dumps/vim9_tuple_00.dump | 20 ++++++++ .../syntax/testdir/dumps/vim9_tuple_01.dump | 20 ++++++++ .../testdir/dumps/vim9_variables_01.dump | 2 +- .../testdir/dumps/vim9_variables_02.dump | 4 +- .../testdir/dumps/vim9_variables_03.dump | 34 ++++++------- .../testdir/dumps/vim9_variables_04.dump | 32 ++++++------ .../testdir/dumps/vim9_variables_05.dump | 34 ++++++------- .../testdir/dumps/vim9_variables_06.dump | 40 +++++++-------- .../testdir/dumps/vim9_variables_07.dump | 40 +++++++-------- .../testdir/dumps/vim9_variables_08.dump | 34 ++++++------- .../testdir/dumps/vim9_variables_09.dump | 34 ++++++------- .../testdir/dumps/vim9_variables_10.dump | 38 +++++++------- .../testdir/dumps/vim9_variables_11.dump | 34 ++++++------- .../testdir/dumps/vim9_variables_12.dump | 32 ++++++------ .../testdir/dumps/vim9_variables_13.dump | 20 ++++++++ .../dumps/vim_ex_def_nested_fold_01.dump | 20 -------- .../dumps/vim_ex_function_nested_fold_01.dump | 20 -------- .../dumps/vim_ex_function_nested_fold_02.dump | 20 -------- runtime/syntax/testdir/dumps/vim_expr_02.dump | 2 +- runtime/syntax/testdir/dumps/vim_expr_04.dump | 2 +- runtime/syntax/testdir/dumps/vim_expr_05.dump | 2 +- runtime/syntax/testdir/dumps/vim_expr_06.dump | 2 +- runtime/syntax/testdir/dumps/vim_expr_07.dump | 2 +- runtime/syntax/testdir/dumps/vim_expr_08.dump | 2 +- runtime/syntax/testdir/dumps/vim_expr_09.dump | 2 +- runtime/syntax/testdir/dumps/vim_expr_10.dump | 24 ++++----- runtime/syntax/testdir/dumps/vim_expr_11.dump | 34 ++++++------- runtime/syntax/testdir/dumps/vim_expr_12.dump | 34 ++++++------- runtime/syntax/testdir/dumps/vim_expr_13.dump | 34 ++++++------- runtime/syntax/testdir/dumps/vim_expr_14.dump | 34 ++++++------- runtime/syntax/testdir/dumps/vim_expr_15.dump | 34 ++++++------- runtime/syntax/testdir/dumps/vim_expr_16.dump | 30 +++++------ runtime/syntax/testdir/dumps/vim_expr_17.dump | 32 ++++++------ runtime/syntax/testdir/dumps/vim_expr_18.dump | 34 ++++++------- runtime/syntax/testdir/dumps/vim_expr_19.dump | 20 ++++++++ .../syntax/testdir/dumps/vim_lambda_00.dump | 20 ++++---- .../syntax/testdir/dumps/vim_lambda_01.dump | 28 +++++------ .../syntax/testdir/dumps/vim_lambda_02.dump | 28 +++++------ .../syntax/testdir/dumps/vim_lambda_03.dump | 26 +++++----- .../syntax/testdir/dumps/vim_lambda_04.dump | 30 +++++------ .../syntax/testdir/dumps/vim_lambda_05.dump | 30 +++++------ .../syntax/testdir/dumps/vim_lambda_06.dump | 26 +++++----- .../syntax/testdir/dumps/vim_lambda_07.dump | 20 ++++++++ runtime/syntax/testdir/input/vim9_lambda.vim | 48 +++++++++++++++++- runtime/syntax/testdir/input/vim9_tuple.vim | 26 ++++++++++ .../syntax/testdir/input/vim9_variables.vim | 18 +++++++ runtime/syntax/testdir/input/vim_expr.vim | 15 ++++++ runtime/syntax/testdir/input/vim_lambda.vim | 9 ++++ runtime/syntax/vim.vim | 50 +++++++++---------- 60 files changed, 846 insertions(+), 640 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/vim9_lambda_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_lambda_08.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_lambda_09.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_tuple_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_tuple_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_variables_13.dump delete mode 100644 runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_01.dump delete mode 100644 runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_01.dump delete mode 100644 runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_expr_19.dump create mode 100644 runtime/syntax/testdir/dumps/vim_lambda_07.dump create mode 100644 runtime/syntax/testdir/input/vim9_tuple.vim diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 4752c3fbda..78abaf5a97 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Mar 17 +" Last Change: 2025 Mar 29 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -361,28 +361,22 @@ syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment " Lambda Expressions: {{{2 " ================== syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList -syn region vimLambda contained matchgroup=Delimiter start="{\ze[[:space:][:alnum:]_.,]*->" end="}" end="$" skip=+\s*\n\s*\\\|\s*\n\s*"\\ + contains=@vimContinue,@vimExprList,vimLambdaParams -syn match vimLambdaParams contained "{\@1<=.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=vimFuncParam - -syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment -syn match vim9LambdaParamsParen contained "[()]" -syn region vim9LambdaParams contained - \ matchgroup=vim9LambdaParamsParen - \ start="(\ze\s*\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)" - \ start="(\ze\s*\n - "\ line continuations - \\%(\s*\%(#\\ .*\|\\\s*\)\n\)*\s*\\\s* - "\ parameter names - \\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)" - \ end=")\ze\%(:\s\|\s\+=>\)" - \ matchgroup=vimContinue - \ end="^\s*\\\ze\s\+=>" - \ skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator - \ contains=@vim9Continue,vimDefParam,vim9LambdaParamsParen -syn match vim9LambdaParams contained "(\s*)\|(\s*\(\.\.\.\)\=\h\w*\s*)\ze\%(:\s\|\s\+=>\)" skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator contains=vimDefParam,vim9LambdaParamsParen - -syn region vim9LambdaReturnType contained start=":\s" end="$" end="\ze#" end="\ze=>" skipwhite skipempty nextgroup=vim9LambdaOperator,vim9LamdaOperatorComment contains=vimTypeSep transparent -syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList +syn region vimLambda contained + \ matchgroup=vimLambdaBrace + \ start=+{\ze[[:space:][:alnum:]_.,]*\%(\n\s*\%(\\[[:space:][:alnum:]_.,]*\|"\\ .*\)\)*->+ + \ skip=+\n\s*\%(\\\|"\\ \)+ + \ end="}" end="$" + \ contains=@vimContinue,@vimExprList,vimLambdaParams +syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFuncParam + +syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment +syn match vim9LambdaParen contained "[()]" +syn match vim9LambdaParams contained + \ "(\%(\" + \ skipwhite nextgroup=vim9LambdaOperator + \ contains=@vim9Continue,vimDefParam,vim9LambdaParen,vim9LambdaReturnType +syn region vim9LambdaReturnType contained start=")\@<=:\s" end="\ze\s*#" end="\ze\s*=>" contains=@vim9Continue,@vimType transparent +syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment @@ -457,9 +451,10 @@ syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType conta syn match vimTypeSep contained ":\%(\s\|\n\)\@=" skipwhite nextgroup=@vimType syn keyword vimType contained any blob bool channel float job number string void -syn match vimType contained "\" -syn region vimCompoundType contained matchgroup=vimType start="\" +syn region vimCompoundType contained matchgroup=vimType start="\" syn cluster vimType contains=vimType,vimCompoundType,vimUserType @@ -1569,6 +1564,7 @@ if !exists("skip_vim_syntax_inits") hi def link vim9KeymapLineComment vimKeymapLineComment hi def link vimKeymapLineComment vimComment hi def link vimKeymapTailComment vimComment + hi def link vimLambdaBrace Delimiter hi def link vimLambdaOperator vimOper hi def link vimLet vimCommand hi def link vimLetHereDoc vimString @@ -1725,7 +1721,7 @@ if !exists("skip_vim_syntax_inits") hi def link vim9Interface vimCommand hi def link vim9LambdaOperator vimOper hi def link vim9LambdaOperatorComment vim9Comment - hi def link vim9LambdaParamsParen vimParenSep + hi def link vim9LambdaParen vimParenSep hi def link vim9LhsRegister vimLetRegister hi def link vim9LhsVariable vimVar hi def link vim9LineComment vimComment diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_00.dump b/runtime/syntax/testdir/dumps/vim9_lambda_00.dump index 6ae5c346f5..6f552c2e7d 100644 --- a/runtime/syntax/testdir/dumps/vim9_lambda_00.dump +++ b/runtime/syntax/testdir/dumps/vim9_lambda_00.dump @@ -1,4 +1,7 @@ >v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64 +|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|L|a|m|b|d|a|O|p|e|r|a|t|o|r| |T|o|d|o| +0#0000000&@26 +|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|L|a|m|b|d|a|P|a|r|e|n| |T|o|d|o| +0#0000000&@29 +@75 @75 |#+0#0000e05&| |V|i|m| |9| |l|a|m|b|d|a| |e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@48 @75 @@ -6,15 +9,12 @@ |v+0#af5f00255&|a|r| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@62 @75 |#+0#0000e05&| |w|i|t|h|o|u|t| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@53 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 -@75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@58 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@57 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@57 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@54 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@51 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@51 @57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_01.dump b/runtime/syntax/testdir/dumps/vim9_lambda_01.dump index 00b1a33f33..2006c63734 100644 --- a/runtime/syntax/testdir/dumps/vim9_lambda_01.dump +++ b/runtime/syntax/testdir/dumps/vim9_lambda_01.dump @@ -1,20 +1,20 @@ -|F+0#00e0e07#ffffff0|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51 +|F+0#00e0e07#ffffff0|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@57 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@57 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@54 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@51 +>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@51 @75 ->F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@54 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@40 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@29 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@29 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@49 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@49 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@38 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@40 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@29 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@29 @75 -|#+0#0000e05&| |w|i|t|h| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@56 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@38 @75 -@57|1|9|,|1| @9|1|3|%| +|#+0#0000e05&| |w|i|t|h| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@56 +@57|1|9|,|1| @10|9|%| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_02.dump b/runtime/syntax/testdir/dumps/vim9_lambda_02.dump index 5848c5c170..3c231f2ac9 100644 --- a/runtime/syntax/testdir/dumps/vim9_lambda_02.dump +++ b/runtime/syntax/testdir/dumps/vim9_lambda_02.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@74 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43 +|#+0#0000e05#ffffff0| |w|i|t|h| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@56 @75 ->F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@50 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@49 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@49 +> @74 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@46 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@43 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@43 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@41 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@41 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@46 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@32 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@21 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@21 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@41 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@41 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@30 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@32 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@21 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@21 @75 -@75 -|#+0#0000e05&| |p|o|s|t| |o|p|e|r|a|t|o|r| |c|o|m@1|e|n|t|s| +0#0000000&@50 -@75 -@57|3|7|,|1| @9|3|1|%| +@57|3|7|,|0|-|1| @7|2|1|%| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_03.dump b/runtime/syntax/testdir/dumps/vim9_lambda_03.dump index 9191fe5145..63681bca4b 100644 --- a/runtime/syntax/testdir/dumps/vim9_lambda_03.dump +++ b/runtime/syntax/testdir/dumps/vim9_lambda_03.dump @@ -1,20 +1,20 @@ | +0&#ffffff0@74 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 -@2|e+0#00e0e07&|x|p|r| +0#0000000&@68 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@63 -@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 -@2>e+0#00e0e07&|x|p|r| +0#0000000&@68 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@63 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@30 @75 -@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +|#+0#0000e05&| |w|i|t|h| |c|o|m|p|o|u|n|d| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@47 @75 -@2|e+0#00e0e07&|x|p|r| +0#0000000&@68 +>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@44 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@43 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@43 @75 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@40 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@37 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@37 @75 -|#+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@40 @75 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57 -@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56 -@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@42 -|#+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67 -@57|5@1|,|3| @9|5|0|%| +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@35 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@35 +@75 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@26 +@57|5@1|,|1| @9|3|4|%| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_04.dump b/runtime/syntax/testdir/dumps/vim9_lambda_04.dump index d0bf4137b8..d0d3af8cce 100644 --- a/runtime/syntax/testdir/dumps/vim9_lambda_04.dump +++ b/runtime/syntax/testdir/dumps/vim9_lambda_04.dump @@ -1,20 +1,20 @@ -|#+0#0000e05#ffffff0| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67 -|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57 -@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56 -@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@50 -@6|\| |=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 -> @74 +|F+0#00e0e07#ffffff0|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@26 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@15 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@15 @75 -|#+0#0000e05&| |f|u|n|c|r|e|f| |c|a|l@1| +0#0000000&@60 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@24 +> @74 @75 -|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&@1|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|4+0#e000002&|2|)+0#e000e06&|(|)| +0#0000000&@57 -|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&@1|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|4+0#e000002&|2|)+0#e000e06&|(|"+0#e000002&|f|o@1|"|)+0#e000e06&| +0#0000000&@35 +|#+0#0000e05&| |p|o|s|t| |o|p|e|r|a|t|o|r| |c|o|m@1|e|n|t|s| +0#0000000&@50 @75 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +@2|e+0#00e0e07&|x|p|r| +0#0000000&@68 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0@63 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|e+0#00e0e07&|x|p|r| +0#0000000&@68 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0@63 @75 -|#+0#0000e05&| |:|h|e|l|p| |v|i|m|9|-|l|a|m|b|d|a| +0#0000000&@55 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 @75 -|v+0#af5f00255&|a|r| +0#0000000&|l+0#00e0e07&|i|s|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&| +0#0000000&@54 -|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| |v+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@47 -@16|v+0#00e0e07&| +0#0000000&|>+0#af5f00255&| +0#0000000&|0+0#e000002&|)+0#e000e06&| +0#0000000&@52 -|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| @53 -@57|7|3|,|0|-|1| @7|6|9|%| +@2|e+0#00e0e07&|x|p|r| +0#0000000&@68 +@57|7|3|,|0|-|1| @7|4|6|%| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_05.dump b/runtime/syntax/testdir/dumps/vim9_lambda_05.dump index bfdea5e6aa..946ab590af 100644 --- a/runtime/syntax/testdir/dumps/vim9_lambda_05.dump +++ b/runtime/syntax/testdir/dumps/vim9_lambda_05.dump @@ -1,20 +1,20 @@ -|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| @53 -@6|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|)+0#e000e06&| +0#0000000&@64 -| +0#e000e06&@5|\| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|v+0#00e0e07&| +0#0000000&|>+0#af5f00255&| +0#0000000&|0+0#e000002&|)+0#e000e06&| +0#0000000&@57 +| +0&#ffffff0@1|e+0#00e0e07&|x|p|r| +0#0000000&@68 @75 -|v+0#af5f00255&|a|r| +0#0000000&|C+0#00e0e07&|a|l@1|b|a|c|k| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|'+0#e000002&|a|n|y|t|h|i|n|g|'| +0#0000000&@39 ->e+0#af5f00255&|c|h|o| +0#0000000&|C|a|l@1|b|a|c|k|(+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|)+0#e000e06&| +0#0000000&@1|#| |d+0#00e0e07&|i|s|p|l|a|y|s| +0#0000000&|"+0#e000002&|a|n|y|t|h|i|n|g|"| +0#0000000&@29 @75 -|v+0#af5f00255&|a|r| +0#0000000&|L+0#00e0e07&|a|m|b|d|a| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|a+0#00e0e07&|r|g|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@51 -@8|g+0#00e0e07&|:|w|a|s|_|c|a|l@1|e|d| +0#0000000&|=+0#af5f00255&| +0#0000000&|'+0#e000002&|y|e|s|'| +0#0000000&@46 -@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 -@4|}+0#e000e06&| +0#0000000&@69 +|#+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54 @75 -|v+0#af5f00255&|a|r| +0#0000000&|c+0#00e0e07&|o|u|n|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@61 -|v+0#af5f00255&|a|r| +0#0000000&|t+0#00e0e07&|i|m|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|5+0#e000002&|0@1|,+0#0000000&| |(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@37 -@8| +0#00e0e07&|c|o|u|n|t| +0#0000000&|++0#af5f00255&|=| +0#0000000&|1+0#e000002&| +0#0000000&@55 -@9|e+0#af5f00255&|c|h|o|m| +0#0000000&|'+0#e000002&|H|a|n|d|l|e|r| |c|a|l@1|e|d| |'| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|c+0#00e0e07&|o|u|n|t| +0#0000000&@33 -@5|}+0#e000e06&|,+0#0000000&| |{+0#e000e06&|r+0#00e0e07&|e|p|e|a|t|:+0#0000000&| |3+0#e000002&|}+0#e000e06&|)| +0#0000000&@54 +>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57 +@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56 +@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@50 @75 -|v+0#af5f00255&|a|r| +0#0000000&|d+0#00e0e07&|i|c|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|}| +0#0000000&@61 -@57|9|1|,|1| @9|8|7|%| +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57 +@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56 +@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#0000001#ffff4012| +0#0000000#ffffff0@58 +@6|\+0#e000e06&| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@59 +@75 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57 +@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56 +@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@42 +@75 +|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57 +@57|9|1|,|1| @9|5|9|%| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_06.dump b/runtime/syntax/testdir/dumps/vim9_lambda_06.dump index da23ee2fe8..91109d6943 100644 --- a/runtime/syntax/testdir/dumps/vim9_lambda_06.dump +++ b/runtime/syntax/testdir/dumps/vim9_lambda_06.dump @@ -1,20 +1,20 @@ -|v+0#af5f00255#ffffff0|a|r| +0#0000000&|d+0#00e0e07&|i|c|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|}| +0#0000000&@61 -|v+0#af5f00255&|a|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|m+0#00e0e07&|a|p|n|e|w|(+0#e000e06&|d+0#00e0e07&|i|c|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| |v+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@34 -@5|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|'+0#e000002&|v|a|l|u|e|'| +0#0000000&@55 -@3|}+0#e000e06&|)| +0#0000000&@69 +|F+0#00e0e07#ffffff0|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57 +@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56 +@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@50 +@6|\+0#e000e06&| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@59 @75 -> @74 -|#+0#0000e05&| |I|s@1|u|e| |#|1|5|9|7|0| |(|v|i|m|9|:| |R|e|s|t|o|r|e| |a|n|d| |e|x|t|e|n|d| |t|h|e| |r|e|c|o|g|n|i|t|i|o|n| |o|f| |E|n|u|m| |b|o|d|y| |i|t|e|m|s -|)| +0#0000000&@73 +>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57 +@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56 +@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#0000001#ffff4012|:+0#0000000#ffffff0| @57 +@6|\+0#e000e06&| +0#0000000&|n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@52 @75 -|d+0#af5f00255&|e|f| +0#0000000&|O|p|(+0#e000e06&|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|f|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |D|i|g|i|t|)+0#00e0003&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@1 -@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&|F+0#00e0e07&|:+0#0000000&| |f+0#00e0003&|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@27 -@8|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |D|i|g|i|t|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|F|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|.+0#af5f00255&|v+0#00e0e07&|a|l|u|e|)+0#e000e06&| +0#0000000&@20 -|e+0#af5f00255&|n|d@1|e|f| +0#0000000&|#+0#0000e05&@22| |^| |v|i|m|C|o|m@1|a|n|d|?| +0#0000000&@30 @75 -|~+0#4040ff13&| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -| +0#0000000&@56|1|0|9|,|0|-|1| @6|B|o|t| +|#+0#0000e05&| |f|u|n|c|r|e|f| |c|a|l@1| +0#0000000&@60 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|4+0#e000002&|2|)+0#e000e06&|(|)| +0#0000000&@57 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|4+0#e000002&|2|)+0#e000e06&|(|"+0#e000002&|f|o@1|"|)+0#e000e06&| +0#0000000&@35 +@75 +@75 +|#+0#0000e05&| |:|h|e|l|p| |v|i|m|9|-|l|a|m|b|d|a| +0#0000000&@55 +@75 +@57|1|0|9|,|1| @8|7|2|%| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_07.dump b/runtime/syntax/testdir/dumps/vim9_lambda_07.dump new file mode 100644 index 0000000000..066cfdefb7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_lambda_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|v+0#af5f00255&|a|r| +0#0000000&|l+0#00e0e07&|i|s|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&| +0#0000000&@54 +|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#0000001#ffff4012|k+0#00e0e07#ffffff0|,+0#0000000&| |v+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0@47 +@16|v+0#00e0e07&| +0#0000000&|>+0#af5f00255&| +0#0000000&|0+0#e000002&|)+0#e000e06&| +0#0000000&@52 +|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#0000001#ffff4012|k+0#00e0e07#ffffff0|,+0#0000000&| @53 +@6>\+0#e000e06&| +0#0000000&|v+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0@64 +@6|\+0#e000e06&| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|v+0#00e0e07&| +0#0000000&|>+0#af5f00255&| +0#0000000&|0+0#e000002&|)+0#e000e06&| +0#0000000&@57 +@75 +|v+0#af5f00255&|a|r| +0#0000000&|C+0#00e0e07&|a|l@1|b|a|c|k| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|_+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|'+0#e000002&|a|n|y|t|h|i|n|g|'| +0#0000000&@39 +|e+0#af5f00255&|c|h|o| +0#0000000&|C|a|l@1|b|a|c|k|(+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|)+0#e000e06&| +0#0000000&@1|#| |d+0#00e0e07&|i|s|p|l|a|y|s| +0#0000000&|"+0#e000002&|a|n|y|t|h|i|n|g|"| +0#0000000&@29 +@75 +|v+0#af5f00255&|a|r| +0#0000000&|L+0#00e0e07&|a|m|b|d|a| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|a+0#00e0e07#ffffff0|r|g|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@51 +@8|g+0#00e0e07&|:|w|a|s|_|c|a|l@1|e|d| +0#0000000&|=+0#af5f00255&| +0#0000000&|'+0#e000002&|y|e|s|'| +0#0000000&@46 +@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 +@4|}+0#e000e06&| +0#0000000&@69 +@75 +|v+0#af5f00255&|a|r| +0#0000000&|c+0#00e0e07&|o|u|n|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@61 +|v+0#af5f00255&|a|r| +0#0000000&|t+0#00e0e07&|i|m|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|5+0#e000002&|0@1|,+0#0000000&| |(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@37 +@8| +0#00e0e07&|c|o|u|n|t| +0#0000000&|++0#af5f00255&|=| +0#0000000&|1+0#e000002&| +0#0000000&@55 +@57|1|2|7|,|7| @8|8|4|%| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_08.dump b/runtime/syntax/testdir/dumps/vim9_lambda_08.dump new file mode 100644 index 0000000000..88f739a8be --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_lambda_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@7| +0#00e0e07&|c|o|u|n|t| +0#0000000&|++0#af5f00255&|=| +0#0000000&|1+0#e000002&| +0#0000000&@55 +@9|e+0#af5f00255&|c|h|o|m| +0#0000000&|'+0#e000002&|H|a|n|d|l|e|r| |c|a|l@1|e|d| |'| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|c+0#00e0e07&|o|u|n|t| +0#0000000&@33 +@5|}+0#e000e06&|,+0#0000000&| |{+0#e000e06&|r+0#00e0e07&|e|p|e|a|t|:+0#0000000&| |3+0#e000002&|}+0#e000e06&|)| +0#0000000&@54 +@75 +|v+0#af5f00255&|a|r| +0#0000000&|d+0#00e0e07&|i|c|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|}| +0#0000000&@61 +>v+0#af5f00255&|a|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|m+0#00e0e07&|a|p|n|e|w|(+0#e000e06&|d+0#00e0e07&|i|c|t|,+0#0000000&| |(+0#0000001#ffff4012|k+0#00e0e07#ffffff0|,+0#0000000&| |v+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@34 +@5|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|'+0#e000002&|v|a|l|u|e|'| +0#0000000&@55 +@3|}+0#e000e06&|)| +0#0000000&@69 +@75 +@75 +|#+0#0000e05&| |I|s@1|u|e| |#|1|5|9|7|0| |(|v|i|m|9|:| |R|e|s|t|o|r|e| |a|n|d| |e|x|t|e|n|d| |t|h|e| |r|e|c|o|g|n|i|t|i|o|n| |o|f| |E|n|u|m| |b|o|d|y| |i|t|e|m|s +|)| +0#0000000&@73 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|O|p|(+0#e000e06&|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|f|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |D|i|g|i|t|)+0#00e0003&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@1 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#0000001#ffff4012|F+0#00e0e07#ffffff0|:+0#0000000&| |f+0#00e0003&|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0@27 +@8|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |D|i|g|i|t|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|F|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|.+0#af5f00255&|v+0#00e0e07&|a|l|u|e|)+0#e000e06&| +0#0000000&@20 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&|#+0#0000e05&@22| |^| |v|i|m|C|o|m@1|a|n|d|?| +0#0000000&@30 +@75 +@75 +@57|1|4|5|,|1| @8|9|6|%| diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_09.dump b/runtime/syntax/testdir/dumps/vim9_lambda_09.dump new file mode 100644 index 0000000000..f8b7988910 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_lambda_09.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&| |I|s@1|u|e| |#|1|6|9|6|5| |(|v|i|m| |s|y|n|t|a|x|:| |w|r|o|n|g| |h|i|g|h|l|i|g|h|t| |w|i|t|h| |l|a|m|b|d|a|,| |a|u|t|o|l|o|a|d|,| |a|n|d| |f|a|l|s +|e| |k|e|y|w|o|r|d|)| +0#0000000&@64 +@75 +|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*| |t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|0+0#e000002&|,+0#0000000&| |(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|f+0#00e0e07&|#|a|(+0#e000e06&|f+0#e000002&|a|l|s|e|,+0#0000000&| |f+0#e000002&|a|l|s|e|)+0#e000e06&@1| +0#0000000&@16 +>a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@67 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|6|1|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim9_tuple_00.dump b/runtime/syntax/testdir/dumps/vim9_tuple_00.dump new file mode 100644 index 0000000000..7f44593136 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_tuple_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| |t|u|p|l|e|s| +0#0000000&@61 +@75 +@75 +|#+0#0000e05&| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|p|u|l@1|/|1|6|9|3|5|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|7|3|8|3|1|0|2|7|3| +0#0000000&@11 +@75 +|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|L|e|g|a|c|y|M|a|k|e|E|n|t|r|y|(+0#e000e06&|k+0#0000000&|e|y|,| |v|a|l|u|e|)+0#e000e06&| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@32 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&|a+0#00e0e07&|:|k+0#0000000&|e|y|,| |a+0#00e0e07&|:|v+0#0000000&|a|l|u|e|)+0#e000e06&| +0#0000000&@47 +|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|M|a|k|e|E|n|t|r|y|(+0#e000e06&|k+0#0000000&|e|y|:| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| |v|a|l|u|e|:| |a+0#00e0003&|n|y|)+0#e000e06&|:+0#0000000&| |t+0#00e0003&|u|p|l|e|<|s|t|r|i|n|g|,+0#0000000&| |a+0#00e0003&|n|y|>| +0#0000000&@16 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&|k+0#0000000&|e|y|,| |v|a|l|u|e|)+0#e000e06&| +0#0000000&@51 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|L|e|g|a|c|y|M|a|k|e|L|a|z|y|L|i|s|t|(+0#e000e06&|e+0#0000000&|1|,| |e|2|)+0#e000e06&| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@33 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&|{|e+0#0000000&|1|_|,| |e|2|_| |-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|[+0#e000e06&|e+0#0000000&|1|_|,| |e|2|_|]+0#e000e06&|}@1|(|a+0#00e0e07&|:|e+0#0000000&|1|,| |a+0#00e0e07&|:|e+0#0000000&|2|)+0#e000e06&@1| +0#0000000&@20 +|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 +@75 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim9_tuple_01.dump b/runtime/syntax/testdir/dumps/vim9_tuple_01.dump new file mode 100644 index 0000000000..0ce9c3a8cf --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_tuple_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&@68 +@75 +|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|L|e|g|a|c|y|M|a|k|e|L|a|z|y|L|i|s|t|(+0#e000e06&|e+0#0000000&|1|,| |e|2|)+0#e000e06&| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@33 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&|{|e+0#0000000&|1|_|,| |e|2|_| |-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|[+0#e000e06&|e+0#0000000&|1|_|,| |e|2|_|]+0#e000e06&|}@1|(|a+0#00e0e07&|:|e+0#0000000&|1|,| |a+0#00e0e07&|:|e+0#0000000&|2|)+0#e000e06&@1| +0#0000000&@20 +|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 +> @74 +|d+0#af5f00255&|e|f| +0#0000000&|M|a|k|e|L|a|z|y|L|i|s|t|(+0#e000e06&|e+0#0000000&|1|:| |a+0#00e0003&|n|y|,+0#0000000&| |e|2|:| |a+0#00e0003&|n|y|)+0#e000e06&|:+0#0000000&| |f+0#00e0003&|u|n|c|(|)|:+0#0000000&| |l+0#00e0003&|i|s|t|<|a|n|y|>| +0#0000000&@21 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&@2|e+0#0000000&|1|_|:| |a+0#00e0003&|n|y|,+0#0000000&| |e|2|_|:| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|[+0#e000e06&|e+0#0000000&|1|_|,| |e|2|_|]+0#e000e06&|)|(|e+0#0000000&|1|,| |e|2|)+0#e000e06&@1| +0#0000000&@11 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|M|a|k|e|E|n|t|r|y|(+0#e000e06&|'+0#e000002&|k|e|y|'|,+0#0000000&| |'+0#e000002&|v|a|l|u|e|'|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|l+0#00e0e07&|i|s|t|2|t|u|p|l|e|(+0#e000e06&|M+0#0000000&|a|k|e|L|a|z|y|L|i|s|t|(+0#e000e06&|'+0#e000002&|k|e|y|'|,+0#0000000&| |'+0#e000002&|v|a|l|u|e|'|)+0#e000e06&|(|) +@1| +0#0000000&@73 +|e+0#af5f00255&|c|h|o| +0#0000000&|L|e|g|a|c|y|M|a|k|e|E|n|t|r|y|(+0#e000e06&|'+0#e000002&|k|e|y|'|,+0#0000000&| |'+0#e000002&|v|a|l|u|e|'|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|l+0#00e0e07&|i|s|t|2|t|u|p|l|e|(+0#e000e06&|L+0#0000000&|e|g|a|c|y|M|a|k|e|L|a|z|y|L|i|s|t|(+0#e000e06&|'+0#e000002&|k|e|y|' +|,+0#0000000&| |'+0#e000002&|v|a|l|u|e|'|)+0#e000e06&|(|)@1| +0#0000000&@61 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|9|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_01.dump b/runtime/syntax/testdir/dumps/vim9_variables_01.dump index eb6a9530ac..baaaeabcca 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_01.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_01.dump @@ -17,4 +17,4 @@ |v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @64 @6|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|;+0#0000000&| @61 @6|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 -@57|1|9|,|1| @10|6|%| +@57|1|9|,|1| @10|5|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_02.dump b/runtime/syntax/testdir/dumps/vim9_variables_02.dump index efc11673f2..ee7035ed87 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_02.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_02.dump @@ -16,5 +16,5 @@ |.+0#e000002&@2| +0#0000000&@71 |E+0#e000e06&|N|D| +0#0000000&@71 @75 -|#+0#0000e05&| |A|s@1|i|g|n|m|e|n|t|s| +0#0000000&@61 -@57|3|7|,|1| @9|1|5|%| +|#+0#0000e05&| |T|y|p|e|d| |d|e|c|l|a|r|a|t|i|o|n|s| +0#0000000&@54 +@57|3|7|,|1| @9|1|4|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_03.dump b/runtime/syntax/testdir/dumps/vim9_variables_03.dump index d3530e2a0c..d390975f59 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_03.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_03.dump @@ -1,20 +1,20 @@ -|#+0#0000e05#ffffff0| |A|s@1|i|g|n|m|e|n|t|s| +0#0000000&@61 +|#+0#0000e05#ffffff0| |T|y|p|e|d| |d|e|c|l|a|r|a|t|i|o|n|s| +0#0000000&@54 @75 -|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@64 +|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |t+0#00e0003&|u|p|l|e|<|a|n|y|>| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@48 +|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |t+0#00e0003&|u|p|l|e|<|n|u|m|b|e|r|>| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@45 +|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |t+0#00e0003&|u|p|l|e|<|n|u|m|b|e|r|,+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| |b+0#00e0003&|o@1|l|>| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@31 +>v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |t+0#00e0003&|u|p|l|e|<|.+0#0000000&@2|l+0#00e0003&|i|s|t|<|a|n|y|>@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@39 +|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |t+0#00e0003&|u|p|l|e|<|.+0#0000000&@2|l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@36 +|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |t+0#00e0003&|u|p|l|e|<|n|u|m|b|e|r|,+0#0000000&| |.@2|l+0#00e0003&|i|s|t|<|s|t|r|i|n|g|>@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@28 @75 -|f+0#00e0e07&|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -> @74 -|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 -|f+0#00e0e07&|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 -|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 -|f+0#00e0e07&|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |t+0#00e0003&|u|p|l|e|<| +0#0000000&@59 +@6|#+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&|n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @60 +@6|#+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&|s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @60 +@6|#+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&|b+0#00e0003&|o@1|l| +0#0000000&@63 +@6|\+0#e000e06&|>+0#00e0003&| +0#0000000&@66 @75 -|f+0#00e0e07&|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 -|f+0#00e0e07&|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 -@75 -|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -|f+0#00e0e07&|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -|f+0#00e0e07&|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -|f+0#00e0e07&|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -@57|5@1|,|0|-|1| @7|2|4|%| +|#+0#0000e05&| |A|s@1|i|g|n|m|e|n|t|s| +0#0000000&@61 +@57|5@1|,|1| @9|2@1|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_04.dump b/runtime/syntax/testdir/dumps/vim9_variables_04.dump index 6f7c793b1f..a519e7eb55 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_04.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_04.dump @@ -1,20 +1,20 @@ -|f+0#00e0e07#ffffff0|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +|#+0#0000e05#ffffff0| |A|s@1|i|g|n|m|e|n|t|s| +0#0000000&@61 @75 -|b+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 ->t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -|w+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@64 @75 -|b+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|g+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|t+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|w+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|f+0#00e0e07&|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +> @74 +|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 +|f+0#00e0e07&|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 +|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 +|f+0#00e0e07&|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 @75 -|b+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|g+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|t+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|w+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|f+0#00e0e07&|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 +|f+0#00e0e07&|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 @75 -|b+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -@57|7|3|,|1| @9|3@1|%| +|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +|f+0#00e0e07&|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +|f+0#00e0e07&|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +|f+0#00e0e07&|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +@57|7|3|,|0|-|1| @7|3|0|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_05.dump b/runtime/syntax/testdir/dumps/vim9_variables_05.dump index e7f903b824..ce50a1a912 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_05.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_05.dump @@ -1,20 +1,20 @@ -|b+0#00e0e07#ffffff0|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|g+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|t+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|w+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|f+0#00e0e07#ffffff0|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 @75 ->b+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|g+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|t+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|w+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|b+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +>t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +|w+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 @75 -|b+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|g+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|t+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -|w+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|b+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|g+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|t+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|w+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 @75 -|b+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 -|g+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 -|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 -|w+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 -@57|9|1|,|1| @9|4|1|%| +|b+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|g+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|t+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|w+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +@75 +|b+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +@57|9|1|,|1| @9|3|8|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_06.dump b/runtime/syntax/testdir/dumps/vim9_variables_06.dump index 9fbcf7708e..760852e29a 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_06.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_06.dump @@ -1,20 +1,20 @@ -|w+0#00e0e07#ffffff0|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 -@75 -|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -@75 ->@+0#e000e06&|f| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@65 -|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -@75 -|&+0#00e0e07&|a|r|i| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 -@75 -|&+0#00e0e07&|t|_|k|1| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|E|s|c|>|[+0#e000002&|2|3|4|;|"| +0#0000000&@53 -@75 -|&+0#00e0e07&|a|r|i| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 -@75 -|&+0#00e0e07&|a|r|i| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -|&+0#00e0e07&|a|r|i| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@75 -|&+0#00e0e07&|l|:|a|l|e|p|h| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 -@75 -@57|1|0|9|,|1| @8|5|0|%| +|b+0#00e0e07#ffffff0|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|g+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|t+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|w+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +@75 +>b+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|g+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|t+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|w+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +@75 +|b+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|g+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|t+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +|w+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +@75 +|b+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 +|g+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 +|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 +|w+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 +@57|1|0|9|,|1| @8|4|6|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_07.dump b/runtime/syntax/testdir/dumps/vim9_variables_07.dump index a7a60acdab..9b324b42d0 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_07.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_07.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@74 -|&+0#00e0e07&|l|:|a|l|e|p|h| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 -|&+0#00e0e07&|l|:|a|l|e|p|h| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 -|&+0#00e0e07&|l|:|a|l|e|p|h| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 -@75 ->&+0#00e0e07&|g|:|a|l|e|p|h| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 -@75 -|&+0#00e0e07&|g|:|a|l|e|p|h| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 -|&+0#00e0e07&|g|:|a|l|e|p|h| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 -|&+0#00e0e07&|g|:|a|l|e|p|h| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 -@75 -|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 -|[|f+0#00e0e07&|o@1|,+0#0000000&| @69 -@6|\| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 -|[|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| |v+0#00e0e07&|:|f|a|l|s|e|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50 -|[|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| @66 -@6|\| |v+0#00e0e07&|:|f|a|l|s|e|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51 -|[|&+0#00e0e07&|a|r|i|,+0#0000000&| |&+0#00e0e07&|b|k|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 -|[|&+0#00e0e07&|a|r|i|,+0#0000000&| @68 -@57|1|2|7|,|1| @8|5|9|%| +|w+0#00e0e07#ffffff0|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60 +@75 +|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +@75 +>@+0#e000e06&|f| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@65 +|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +@75 +|&+0#00e0e07&|a|r|i| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63 +@75 +|&+0#00e0e07&|t|_|k|1| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|E|s|c|>|[+0#e000002&|2|3|4|;|"| +0#0000000&@53 +@75 +|&+0#00e0e07&|a|r|i| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61 +@75 +|&+0#00e0e07&|a|r|i| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +|&+0#00e0e07&|a|r|i| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +@75 +|&+0#00e0e07&|l|:|a|l|e|p|h| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 +@75 +@57|1|2|7|,|1| @8|5|4|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_08.dump b/runtime/syntax/testdir/dumps/vim9_variables_08.dump index 38b1f31b72..55d9050e44 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_08.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_08.dump @@ -1,20 +1,20 @@ -|[+0&#ffffff0|&+0#00e0e07&|a|r|i|,+0#0000000&| @68 -@6|\| |&+0#00e0e07&|b|k|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 -|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 -|[|$+0#e000e06&|f|o@1|,+0#0000000&| @68 -@6|\| @1|$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53 ->[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 -|[|@+0#e000e06&|a|,+0#0000000&| @70 -@6|\| @1|@+0#e000e06&|a|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 +| +0&#ffffff0@74 +|&+0#00e0e07&|l|:|a|l|e|p|h| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 +|&+0#00e0e07&|l|:|a|l|e|p|h| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 +|&+0#00e0e07&|l|:|a|l|e|p|h| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 @75 -|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 -|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 -|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 -|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 -|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 -|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 +>&+0#00e0e07&|g|:|a|l|e|p|h| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 @75 -|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52 +|&+0#00e0e07&|g|:|a|l|e|p|h| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 +|&+0#00e0e07&|g|:|a|l|e|p|h| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 +|&+0#00e0e07&|g|:|a|l|e|p|h| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58 +@75 +|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 |[|f+0#00e0e07&|o@1|,+0#0000000&| @69 -@6|\| |b+0#00e0e07&|a|r|;+0#0000000&| @62 -@57|1|4|5|,|1| @8|6|8|%| +@6|\| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 +|[|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| |v+0#00e0e07&|:|f|a|l|s|e|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50 +|[|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| @66 +@6|\| |v+0#00e0e07&|:|f|a|l|s|e|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51 +|[|&+0#00e0e07&|a|r|i|,+0#0000000&| |&+0#00e0e07&|b|k|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 +|[|&+0#00e0e07&|a|r|i|,+0#0000000&| @68 +@57|1|4|5|,|1| @8|6|2|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_09.dump b/runtime/syntax/testdir/dumps/vim9_variables_09.dump index 7db340624b..48273c051e 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_09.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_09.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@5|\| |b+0#00e0e07&|a|r|;+0#0000000&| @62 -@6|\| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 -|[|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| |v+0#00e0e07&|:|f|a|l|s|e|;+0#0000000&| |v+0#00e0e07&|:|n|o|n|e|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@42 -|[|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| @66 -@6|\| |v+0#00e0e07&|:|f|a|l|s|e|;+0#0000000&| @58 -@6>\| |v+0#00e0e07&|:|n|o|n|e|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52 -|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|;+0#0000000&| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 +|[+0&#ffffff0|&+0#00e0e07&|a|r|i|,+0#0000000&| @68 +@6|\| |&+0#00e0e07&|b|k|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 +|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 |[|$+0#e000e06&|f|o@1|,+0#0000000&| @68 -@6|\| |$+0#e000e06&|b|a|r|;+0#0000000&| @61 -@6|\| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 -|[|&+0#00e0e07&|a|r|i|,+0#0000000&| |&+0#00e0e07&|b|k|c|;+0#0000000&| |&+0#00e0e07&|c|m|p|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 -|[|&+0#00e0e07&|a|r|i|,+0#0000000&| @68 -@6|\| |&+0#00e0e07&|b|k|c|;+0#0000000&| @61 -@6|\| |&+0#00e0e07&|c|m|p|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 -|[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|;+0#0000000&| |@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 +@6|\| @1|$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53 +>[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 |[|@+0#e000e06&|a|,+0#0000000&| @70 -@6|\| |@+0#e000e06&|b|;+0#0000000&| @63 -@6|\| |@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 +@6|\| @1|@+0#e000e06&|a|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 @75 -@57|1|6|3|,|7| @8|7@1|%| +|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 +|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 +|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 +|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 +|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 +|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 +@75 +|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52 +|[|f+0#00e0e07&|o@1|,+0#0000000&| @69 +@6|\| |b+0#00e0e07&|a|r|;+0#0000000&| @62 +@57|1|6|3|,|1| @8|7|1|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_10.dump b/runtime/syntax/testdir/dumps/vim9_variables_10.dump index 534a0543e3..baf1f9e4ff 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_10.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_10.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@74 -|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@63 -|.+0#e000002&@2| +0#0000000&@71 -|E+0#e000e06&|N|D| +0#0000000&@71 -|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@58 ->.+0#e000002&@2| +0#0000000&@71 -|E+0#e000e06&|N|D| +0#0000000&@71 -|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@58 -|.+0#e000002&@2| +0#0000000&@71 -|E+0#e000e06&|N|D| +0#0000000&@71 -|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@53 -|.+0#e000002&@2| +0#0000000&@71 -|E+0#e000e06&|N|D| +0#0000000&@71 -|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@53 -|.+0#e000002&@2| +0#0000000&@71 -|E+0#e000e06&|N|D| +0#0000000&@71 +| +0&#ffffff0@5|\| |b+0#00e0e07&|a|r|;+0#0000000&| @62 +@6|\| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 +|[|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| |v+0#00e0e07&|:|f|a|l|s|e|;+0#0000000&| |v+0#00e0e07&|:|n|o|n|e|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@42 +|[|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| @66 +@6|\| |v+0#00e0e07&|:|f|a|l|s|e|;+0#0000000&| @58 +@6>\| |v+0#00e0e07&|:|n|o|n|e|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52 +|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|;+0#0000000&| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 +|[|$+0#e000e06&|f|o@1|,+0#0000000&| @68 +@6|\| |$+0#e000e06&|b|a|r|;+0#0000000&| @61 +@6|\| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 +|[|&+0#00e0e07&|a|r|i|,+0#0000000&| |&+0#00e0e07&|b|k|c|;+0#0000000&| |&+0#00e0e07&|c|m|p|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49 +|[|&+0#00e0e07&|a|r|i|,+0#0000000&| @68 +@6|\| |&+0#00e0e07&|b|k|c|;+0#0000000&| @61 +@6|\| |&+0#00e0e07&|c|m|p|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54 +|[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|;+0#0000000&| |@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55 +|[|@+0#e000e06&|a|,+0#0000000&| @70 +@6|\| |@+0#e000e06&|b|;+0#0000000&| @63 +@6|\| |@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56 @75 -|#+0#0000e05&| |:|f|o|r| +0#0000000&@68 -@75 -@57|1|8|1|,|1| @8|8|6|%| +@57|1|8|1|,|7| @8|7|9|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_11.dump b/runtime/syntax/testdir/dumps/vim9_variables_11.dump index 136245e332..234b3dd513 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_11.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_11.dump @@ -1,20 +1,20 @@ | +0&#ffffff0@74 -|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 -|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68 +|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@63 +|.+0#e000002&@2| +0#0000000&@71 +|E+0#e000e06&|N|D| +0#0000000&@71 +|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@58 +>.+0#e000002&@2| +0#0000000&@71 +|E+0#e000e06&|N|D| +0#0000000&@71 +|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@58 +|.+0#e000002&@2| +0#0000000&@71 +|E+0#e000e06&|N|D| +0#0000000&@71 +|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@53 +|.+0#e000002&@2| +0#0000000&@71 +|E+0#e000e06&|N|D| +0#0000000&@71 +|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@53 +|.+0#e000002&@2| +0#0000000&@71 +|E+0#e000e06&|N|D| +0#0000000&@71 @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+0#00e0e07&|x|p|r| +0#0000000&@52 ->e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68 +|#+0#0000e05&| |:|f|o|r| +0#0000000&@68 @75 -|#+0#0000e05&| |S|c|o|p|e| |d|i|c|t|i|o|n|a|r|i|e|s| +0#0000000&@54 -@75 -|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|b+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 -|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|w+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 -|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|t+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 -|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|g+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 -|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|v+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 -@75 -|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|b+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 -|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|w+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|w+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 -|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|t+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 -|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|g+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 -@57|1|9@1|,|1| @8|9|5|%| +@57|1|9@1|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_12.dump b/runtime/syntax/testdir/dumps/vim9_variables_12.dump index 96b7c7ccd6..7a6baece81 100644 --- a/runtime/syntax/testdir/dumps/vim9_variables_12.dump +++ b/runtime/syntax/testdir/dumps/vim9_variables_12.dump @@ -1,20 +1,20 @@ -|f+0#af5f00255#ffffff0|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|g+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 -|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|v+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|v+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 +| +0&#ffffff0@74 +|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59 +|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68 @75 -|#+0#0000e05&| |N|e|o|v|i|m|-|s|p|e|c|i|f|i|c| |v|a|r|i|a|b|l|e|s| |(|n|o|t| |h|i|g|h|l|i|g|h|t|e|d| |b|y| |d|e|f|a|u|l|t|)| +0#0000000&@18 +|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+0#00e0e07&|x|p|r| +0#0000000&@52 +>e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68 @75 ->e+0#af5f00255&|c|h|o| +0#0000000&|v+0#00e0e07&|:|l+0#0000000&|u|a| |v+0#00e0e07&|:|m+0#0000000&|s|g|p|a|c|k|_|t|y|p|e|s| |v+0#00e0e07&|:|r+0#0000000&|e|l|n|u|m| |v+0#00e0e07&|:|s+0#0000000&|t|d|e|r@1| |v+0#00e0e07&|:|t+0#0000000&|e|r|m|r|e|q|u|e|s|t| |v+0#00e0e07&|:|v+0#0000000&|i|r|t|n|u|m| @6 +|#+0#0000e05&| |S|c|o|p|e| |d|i|c|t|i|o|n|a|r|i|e|s| +0#0000000&@54 @75 -|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|c+0#0000000&|h|a|n@1|e|l| |&+0#00e0e07&|i+0#0000000&|n|c@1|o|m@1|a|n|d| |&+0#00e0e07&|m+0#0000000&|o|u|s|e|s|c|r|o|l@1| |&+0#00e0e07&|p+0#0000000&|u|m|b|l|e|n|d| |&+0#00e0e07&|r+0#0000000&|e|d|r|a|w|d|e|b|u|g| |&+0#00e0e07&|s+0#0000000&|c|r|o|l@1|b|a|c|k| @1 -|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|s+0#0000000&|h|a|d|a| |&+0#00e0e07&|s+0#0000000&|h|a|d|a|f|i|l|e| |&+0#00e0e07&|s+0#0000000&|t|a|t|u|s|c|o|l|u|m|n| |&+0#00e0e07&|t+0#0000000&|e|r|m|p|a|s|t|e|f|i|l|t|e|r| |&+0#00e0e07&|t+0#0000000&|e|r|m|s|y|n|c| |&+0#00e0e07&|w+0#0000000&|i|n|b|a|r| @3 -|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|w+0#0000000&|i|n|b|l|e|n|d| |&+0#00e0e07&|w+0#0000000&|i|n|h|i|g|h|l|i|g|h|t| @46 +|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|b+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 +|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|w+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 +|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|t+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 +|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|g+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 +|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|v+0#00e0e07&|:|,+0#0000000&| |'+0#e000002&|f|o@1|'|,+0#0000000&| |4+0#e000002&|2|)+0#e000e06&| +0#0000000&@51 @75 -|~+0#4040ff13&| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -| +0#0000000&@56|2|1|7|,|1| @8|B|o|t| +|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|b+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 +|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|w+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|w+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 +|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|t+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 +|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|g+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 +@57|2|1|7|,|1| @8|9|5|%| diff --git a/runtime/syntax/testdir/dumps/vim9_variables_13.dump b/runtime/syntax/testdir/dumps/vim9_variables_13.dump new file mode 100644 index 0000000000..851fa0792f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_variables_13.dump @@ -0,0 +1,20 @@ +|f+0#af5f00255#ffffff0|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|g+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 +|f+0#af5f00255&|o|r| +0#0000000&|k+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|k+0#00e0e07&|e|y|s|(+0#e000e06&|v+0#00e0e07&|:|)+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|v+0#00e0e07&|:|[+0#0000000&|k+0#00e0e07&|]+0#0000000&| ||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@35 +@75 +|#+0#0000e05&| |N|e|o|v|i|m|-|s|p|e|c|i|f|i|c| |v|a|r|i|a|b|l|e|s| |(|n|o|t| |h|i|g|h|l|i|g|h|t|e|d| |b|y| |d|e|f|a|u|l|t|)| +0#0000000&@18 +@75 +>e+0#af5f00255&|c|h|o| +0#0000000&|v+0#00e0e07&|:|l+0#0000000&|u|a| |v+0#00e0e07&|:|m+0#0000000&|s|g|p|a|c|k|_|t|y|p|e|s| |v+0#00e0e07&|:|r+0#0000000&|e|l|n|u|m| |v+0#00e0e07&|:|s+0#0000000&|t|d|e|r@1| |v+0#00e0e07&|:|t+0#0000000&|e|r|m|r|e|q|u|e|s|t| |v+0#00e0e07&|:|v+0#0000000&|i|r|t|n|u|m| @6 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|c+0#0000000&|h|a|n@1|e|l| |&+0#00e0e07&|i+0#0000000&|n|c@1|o|m@1|a|n|d| |&+0#00e0e07&|m+0#0000000&|o|u|s|e|s|c|r|o|l@1| |&+0#00e0e07&|p+0#0000000&|u|m|b|l|e|n|d| |&+0#00e0e07&|r+0#0000000&|e|d|r|a|w|d|e|b|u|g| |&+0#00e0e07&|s+0#0000000&|c|r|o|l@1|b|a|c|k| @1 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|s+0#0000000&|h|a|d|a| |&+0#00e0e07&|s+0#0000000&|h|a|d|a|f|i|l|e| |&+0#00e0e07&|s+0#0000000&|t|a|t|u|s|c|o|l|u|m|n| |&+0#00e0e07&|t+0#0000000&|e|r|m|p|a|s|t|e|f|i|l|t|e|r| |&+0#00e0e07&|t+0#0000000&|e|r|m|s|y|n|c| |&+0#00e0e07&|w+0#0000000&|i|n|b|a|r| @3 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|w+0#0000000&|i|n|b|l|e|n|d| |&+0#00e0e07&|w+0#0000000&|i|n|h|i|g|h|l|i|g|h|t| @46 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|2|3|5|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_01.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_01.dump deleted file mode 100644 index c1f9fa892b..0000000000 --- a/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_01.dump +++ /dev/null @@ -1,20 +0,0 @@ -| +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 -|~| @73 -|~| @73 -|~| @73 -| +0#0000000&@56|1|9|,|5|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_01.dump b/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_01.dump deleted file mode 100644 index 96c1d34af1..0000000000 --- a/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_01.dump +++ /dev/null @@ -1,20 +0,0 @@ -| +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 -|~| @73 -| +0#0000000&@56|1|9|,|1| @9|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_02.dump b/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_02.dump deleted file mode 100644 index 977aaa883d..0000000000 --- a/runtime/syntax/testdir/dumps/vim_ex_function_nested_fold_02.dump +++ /dev/null @@ -1,20 +0,0 @@ -| +0#0000e05#a8a8a8255@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 -|~| @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_expr_02.dump b/runtime/syntax/testdir/dumps/vim_expr_02.dump index 9f403fb944..44a9e0cef2 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_02.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_02.dump @@ -17,4 +17,4 @@ |e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|'+0#e000e06&@1|f+0#e000002&|o@1|'| +0#0000000&@61 |e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|f|o@1|'+0#e000e06&@1|'+0#e000002&| +0#0000000&@61 |e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|f|o@1|'+0#e000e06&@1|b+0#e000002&|a|r|'| +0#0000000&@58 -@57|3|2|,|0|-|1| @8|9|%| +@57|3|2|,|0|-|1| @8|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_04.dump b/runtime/syntax/testdir/dumps/vim_expr_04.dump index 76f0ca7e22..9aaf413ea9 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_04.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_04.dump @@ -17,4 +17,4 @@ |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 -@57|6|8|,|1| @9|2|0|%| +@57|6|8|,|1| @9|1|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_05.dump b/runtime/syntax/testdir/dumps/vim_expr_05.dump index 21c8594db0..8244eccda1 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_05.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_05.dump @@ -17,4 +17,4 @@ @6|\+0#e000e06&|]| +0#0000000&@66 |e+0#af5f00255&|c|h|o| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| |'+0#e000002&|t|w|o|'|,+0#0000000&| |1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|2+0#e000002&|,+0#0000000&| |"+0#e000002&|f|o|"| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|"+0#e000002&|u|r|"|]+0#e000e06&| +0#0000000&@38 @75 -@57|8|6|,|1| @9|2|6|%| +@57|8|6|,|1| @9|2|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_06.dump b/runtime/syntax/testdir/dumps/vim_expr_06.dump index fee408f38b..94dff0923c 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_06.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_06.dump @@ -17,4 +17,4 @@ |e+0#af5f00255&|c|h|o| +0#0000000&|{+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|"|:+0#0000000&| |#+0#e000e06&|{| +0#0000000&|-+0#af5f00255&|b+0#00e0e07&|a|r|-+0#af5f00255&|:+0#0000000&| |2+0#e000002&|1| +0#0000000&|*+0#af5f00255&| +0#0000000&|2+0#e000002&| +0#0000000&|}+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@40 |e+0#af5f00255&|c|h|o| +0#0000000&|{+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|"|:+0#0000000&| |#+0#e000e06&|{| +0#0000000&@3|4+0#e000002&|2|:+0#0000000&| |2+0#e000002&|1| +0#0000000&|*+0#af5f00255&| +0#0000000&|2+0#e000002&| +0#0000000&|}+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@40 @75 -@57|1|0|3|,|1| @8|3|2|%| +@57|1|0|3|,|1| @8|3|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_07.dump b/runtime/syntax/testdir/dumps/vim_expr_07.dump index 849e719771..bec79d8a95 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_07.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_07.dump @@ -17,4 +17,4 @@ @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&| |{+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|"|:+0#0000000&| |2+0#e000002&|1| +0#0000000&|*+0#af5f00255&| +0#0000000&|2+0#e000002&| +0#0000000&|}+0#e000e06&| +0#0000000&@42 @6|\+0#e000e06&|}| +0#0000000&@66 -@57|1|2|1|,|1| @8|3|8|%| +@57|1|2|1|,|1| @8|3|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_08.dump b/runtime/syntax/testdir/dumps/vim_expr_08.dump index 9bbf30cf34..958a539151 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_08.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_08.dump @@ -17,4 +17,4 @@ |e+0#af5f00255&|c|h|o| +0#0000000&|#+0#e000e06&|{| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| @1|{+0#e000e06&| +0#0000000&@3|4+0#e000002&|2|:+0#0000000&| |2+0#e000002&|1| +0#0000000&|*+0#af5f00255&| +0#0000000&|2+0#e000002&| +0#0000000&|}+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@41 @75 |e+0#af5f00255&|c|h|o| +0#0000000&|#+0#e000e06&|{| +0#0000000&|-+0#af5f00255&|f+0#00e0e07&|o@1|-+0#af5f00255&|:+0#0000000&| |#+0#e000e06&|{| +0#0000000&@2|b+0#00e0e07&|a|r|:+0#0000000&| |2+0#e000002&|1| +0#0000000&|*+0#af5f00255&| +0#0000000&|2+0#e000002&| +0#0000000&|}+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@39 -@57|1|3|9|,|0|-|1| @6|4@1|%| +@57|1|3|9|,|0|-|1| @6|4|2|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_09.dump b/runtime/syntax/testdir/dumps/vim_expr_09.dump index 5e71b29fc0..bddb521e77 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_09.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_09.dump @@ -17,4 +17,4 @@ @6|\+0#e000e06&| +0#0000000&@1|f+0#00e0e07&|o@1|:+0#0000000&| |#+0#e000e06&|{| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&@3|b+0#00e0e07&|a|r|:+0#0000000&| |2+0#e000002&|1| +0#0000000&|*+0#af5f00255&| +0#0000000&|2+0#e000002&| +0#0000000&@52 @6|\+0#e000e06&| +0#0000000&@1|}+0#e000e06&| +0#0000000&@64 -@57|1|5|7|,|1| @8|5|0|%| +@57|1|5|7|,|1| @8|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_10.dump b/runtime/syntax/testdir/dumps/vim_expr_10.dump index 74c5c03958..33eca31c93 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_10.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_10.dump @@ -4,17 +4,17 @@ |"+0#0000e05&| |m|a|t|c|h| |a|s| |k|e|y|s| |n|o|t| |s|c|o|p|e| |d|i|c|t|i|o|n|a|r|i|e|s| +0#0000000&@36 |e+0#af5f00255&|c|h|o| +0#0000000&|#+0#e000e06&|{| +0#0000000&|b+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |w+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |t+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |g+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |l+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |s+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |a+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |v+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2| +0#0000000&@1|}+0#e000e06&| +0#0000000&@9 > @74 -|"+0#0000e05&| |R|e|g|i|s|t|e|r| +0#0000000&@64 +|"+0#0000e05&| |T|u|p|l|e| +0#0000000&@67 @75 -|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|"| +0#0000000&@67 -|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|0| +0#0000000&|@+0#e000e06&|1| +0#0000000&|@+0#e000e06&|2| +0#0000000&|@+0#e000e06&|3| +0#0000000&|@+0#e000e06&|4| +0#0000000&|@+0#e000e06&|5| +0#0000000&|@+0#e000e06&|6| +0#0000000&|@+0#e000e06&|7| +0#0000000&|@+0#e000e06&|8| +0#0000000&|@+0#e000e06&|9| +0#0000000&@40 -|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|-| +0#0000000&@67 -|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|@+0#e000e06&|b| +0#0000000&|@+0#e000e06&|c| +0#0000000&|@+0#e000e06&|d| +0#0000000&|@+0#e000e06&|e| +0#0000000&|@+0#e000e06&|f| +0#0000000&|@+0#e000e06&|g| +0#0000000&|@+0#e000e06&|h| +0#0000000&|@+0#e000e06&|i| +0#0000000&|@+0#e000e06&|j| +0#0000000&|@+0#e000e06&|k| +0#0000000&|@+0#e000e06&|l| +0#0000000&|@+0#e000e06&|m| +0#0000000&|@+0#e000e06&|n| +0#0000000&|@+0#e000e06&|o| +0#0000000&|@+0#e000e06&|p| +0#0000000&|@+0#e000e06&|q| +0#0000000&|@+0#e000e06&|r| +0#0000000&|@+0#e000e06&|s| +0#0000000&|@+0#e000e06&|t| +0#0000000&|@+0#e000e06&|u| +0#0000000&|@+0#e000e06&|v| +0#0000000&|@+0#e000e06&|w| +0#0000000&|@+0#e000e06& -|x| +0#0000000&|@+0#e000e06&|y| +0#0000000&|@+0#e000e06&|z| +0#0000000&@67 -|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|A| +0#0000000&|@+0#e000e06&|B| +0#0000000&|@+0#e000e06&|C| +0#0000000&|@+0#e000e06&|D| +0#0000000&|@+0#e000e06&|E| +0#0000000&|@+0#e000e06&|F| +0#0000000&|@+0#e000e06&|G| +0#0000000&|@+0#e000e06&|H| +0#0000000&|@+0#e000e06&|I| +0#0000000&|@+0#e000e06&|J| +0#0000000&|@+0#e000e06&|K| +0#0000000&|@+0#e000e06&|L| +0#0000000&|@+0#e000e06&|M| +0#0000000&|@+0#e000e06&|N| +0#0000000&|@+0#e000e06&|O| +0#0000000&|@+0#e000e06&|P| +0#0000000&|@+0#e000e06&|Q| +0#0000000&|@+0#e000e06&|R| +0#0000000&|@+0#e000e06&|S| +0#0000000&|@+0#e000e06&|T| +0#0000000&|@+0#e000e06&|U| +0#0000000&|@+0#e000e06&|V| +0#0000000&|@+0#e000e06&|W| +0#0000000&|@+0#e000e06& -|X| +0#0000000&|@+0#e000e06&|Y| +0#0000000&|@+0#e000e06&|Z| +0#0000000&@67 -|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|:| +0#0000000&|@+0#e000e06&|.| +0#0000000&|@+0#e000e06&|%| +0#0000000&|@+0#e000e06&|#| +0#0000000&|@+0#e000e06&|=| +0#0000000&|@+0#e000e06&|*| +0#0000000&|@+0#e000e06&|+| +0#0000000&|@+0#e000e06&|~| +0#0000000&|@+0#e000e06&|_| +0#0000000&|@+0#e000e06&|/| +0#0000000&@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|)| +0#0000000&@67 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|,+0#0000000&|)+0#e000e06&| +0#0000000&@64 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&@1|1+0#e000002&@1|,+0#0000000&| |1+0#e000002&|2|)+0#e000e06&|,+0#0000000&| |(+0#e000e06&|2+0#e000002&|1|,+0#0000000&| |2+0#e000002&@1|)+0#e000e06&|,+0#0000000&| |(+0#e000e06&|3+0#e000002&|1|,+0#0000000&| |3+0#e000002&|2|)+0#e000e06&@1| +0#0000000&@39 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|,+0#0000000&| @66 +@6|\+0#e000e06&| +0#0000000&|2+0#e000002&|,+0#0000000&| @64 +@6|\+0#e000e06&| +0#0000000&|3+0#e000002&|,+0#0000000&| @64 +@6|\+0#e000e06&| +0#0000000&|4+0#e000002&| +0#0000000&@65 +@6|\+0#e000e06&|)| +0#0000000&@66 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|,+0#0000000&| |'+0#e000002&|t|w|o|'|,+0#0000000&| |1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|2+0#e000002&|,+0#0000000&| |"+0#e000002&|f|o|"| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|"+0#e000002&|u|r|"|)+0#e000e06&| +0#0000000&@38 @75 -|"+0#0000e05&| |O|p|e|r|a|t|o|r|s| +0#0000000&@63 -@75 -@57|1|7|5|,|0|-|1| @6|5|6|%| +|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|7|)+0#e000e06&| +0#0000000&@55 +@57|1|7|5|,|0|-|1| @6|5|3|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_11.dump b/runtime/syntax/testdir/dumps/vim_expr_11.dump index c7e0dad977..d8e8b4b12b 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_11.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_11.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@74 -|"+0#0000e05&| |T|e|r|n|a|r|y| +0#0000000&@65 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|:+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51 +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|7|)+0#e000e06&| +0#0000000&@55 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|7|)+0#e000e06&| +0#0000000&|++0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@55 +@75 +|"+0#0000e05&| |R|e|g|i|s|t|e|r| +0#0000000&@64 @75 -|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@45 ->e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@21 +>e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|"| +0#0000000&@67 +|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|0| +0#0000000&|@+0#e000e06&|1| +0#0000000&|@+0#e000e06&|2| +0#0000000&|@+0#e000e06&|3| +0#0000000&|@+0#e000e06&|4| +0#0000000&|@+0#e000e06&|5| +0#0000000&|@+0#e000e06&|6| +0#0000000&|@+0#e000e06&|7| +0#0000000&|@+0#e000e06&|8| +0#0000000&|@+0#e000e06&|9| +0#0000000&@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|-| +0#0000000&@67 +|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|@+0#e000e06&|b| +0#0000000&|@+0#e000e06&|c| +0#0000000&|@+0#e000e06&|d| +0#0000000&|@+0#e000e06&|e| +0#0000000&|@+0#e000e06&|f| +0#0000000&|@+0#e000e06&|g| +0#0000000&|@+0#e000e06&|h| +0#0000000&|@+0#e000e06&|i| +0#0000000&|@+0#e000e06&|j| +0#0000000&|@+0#e000e06&|k| +0#0000000&|@+0#e000e06&|l| +0#0000000&|@+0#e000e06&|m| +0#0000000&|@+0#e000e06&|n| +0#0000000&|@+0#e000e06&|o| +0#0000000&|@+0#e000e06&|p| +0#0000000&|@+0#e000e06&|q| +0#0000000&|@+0#e000e06&|r| +0#0000000&|@+0#e000e06&|s| +0#0000000&|@+0#e000e06&|t| +0#0000000&|@+0#e000e06&|u| +0#0000000&|@+0#e000e06&|v| +0#0000000&|@+0#e000e06&|w| +0#0000000&|@+0#e000e06& +|x| +0#0000000&|@+0#e000e06&|y| +0#0000000&|@+0#e000e06&|z| +0#0000000&@67 +|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|A| +0#0000000&|@+0#e000e06&|B| +0#0000000&|@+0#e000e06&|C| +0#0000000&|@+0#e000e06&|D| +0#0000000&|@+0#e000e06&|E| +0#0000000&|@+0#e000e06&|F| +0#0000000&|@+0#e000e06&|G| +0#0000000&|@+0#e000e06&|H| +0#0000000&|@+0#e000e06&|I| +0#0000000&|@+0#e000e06&|J| +0#0000000&|@+0#e000e06&|K| +0#0000000&|@+0#e000e06&|L| +0#0000000&|@+0#e000e06&|M| +0#0000000&|@+0#e000e06&|N| +0#0000000&|@+0#e000e06&|O| +0#0000000&|@+0#e000e06&|P| +0#0000000&|@+0#e000e06&|Q| +0#0000000&|@+0#e000e06&|R| +0#0000000&|@+0#e000e06&|S| +0#0000000&|@+0#e000e06&|T| +0#0000000&|@+0#e000e06&|U| +0#0000000&|@+0#e000e06&|V| +0#0000000&|@+0#e000e06&|W| +0#0000000&|@+0#e000e06& +|X| +0#0000000&|@+0#e000e06&|Y| +0#0000000&|@+0#e000e06&|Z| +0#0000000&@67 +|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|:| +0#0000000&|@+0#e000e06&|.| +0#0000000&|@+0#e000e06&|%| +0#0000000&|@+0#e000e06&|#| +0#0000000&|@+0#e000e06&|=| +0#0000000&|@+0#e000e06&|*| +0#0000000&|@+0#e000e06&|+| +0#0000000&|@+0#e000e06&|~| +0#0000000&|@+0#e000e06&|_| +0#0000000&|@+0#e000e06&|/| +0#0000000&@40 @75 -|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&@60 -@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&@59 -@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&@52 -@6|\+0#e000e06&| +0#0000000&@8|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&@50 -@6|\+0#e000e06&| +0#0000000&@8|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@52 -|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&@58 -@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@59 -@6|\+0#e000e06&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&@52 -@6|\+0#e000e06&| +0#0000000&@8|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@50 -@6|\+0#e000e06&| +0#0000000&@8|l+0#00e0e07&|n|u|m| +0#0000000&@54 +|"+0#0000e05&| |O|p|e|r|a|t|o|r|s| +0#0000000&@63 +@75 +|"+0#0000e05&| |T|e|r|n|a|r|y| +0#0000000&@65 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|:+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51 @75 -|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|:+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60 -@57|1|9|1|,|1| @8|6|2|%| +@57|1|9|3|,|1| @8|5|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_12.dump b/runtime/syntax/testdir/dumps/vim_expr_12.dump index 4e946f4abf..61ee72fcb0 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_12.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_12.dump @@ -1,20 +1,20 @@ -|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|:+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60 +| +0&#ffffff0@74 +|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@45 +|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@21 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&@60 +@6>\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&@52 +@6|\+0#e000e06&| +0#0000000&@8|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&@50 +@6|\+0#e000e06&| +0#0000000&@8|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@52 +|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&@52 +@6|\+0#e000e06&| +0#0000000&@8|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@50 +@6|\+0#e000e06&| +0#0000000&@8|l+0#00e0e07&|n|u|m| +0#0000000&@54 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|:+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60 |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|"| +0#0000000&@48 |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@54 |e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|g+0#00e0e07&|:|b|a|r| +0#0000000&@48 -|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|$+0#e000e06&|B|A|R| +0#0000000&@51 ->e+0#af5f00255&|c|h|o| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|:+0#af5f00255&| +0#0000000&|F|a|l|s|e|(+0#e000e06&|)| +0#0000000&@44 -|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|?+0#af5f00255&| +0#0000000&|@+0#e000e06&|a| +0#0000000&|:+0#af5f00255&| +0#0000000&|@+0#e000e06&|b| +0#0000000&@57 -|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&|)+0#e000e06&| +0#0000000&@54 -@75 -|"+0#0000e05&| |F|a|l|s|y| +0#0000000&@67 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 -@75 -|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@43 -|e+0#af5f00255&|c|h|o| +0#0000000&|G|e|t|N|a|m|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|u|n|k|n|o|w|n|'| +0#0000000&@47 -@75 -|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@48 -|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&|?+0#af5f00255&@1| +0#0000000&@59 -@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@51 -@57|2|0|9|,|1| @8|6|8|%| +@57|2|0|9|,|7| @8|6|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_13.dump b/runtime/syntax/testdir/dumps/vim_expr_13.dump index 27423a1289..675c89d54d 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_13.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_13.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@51 +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|g+0#00e0e07&|:|b|a|r| +0#0000000&@48 +|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|$+0#e000e06&|B|A|R| +0#0000000&@51 +|e+0#af5f00255&|c|h|o| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|:+0#af5f00255&| +0#0000000&|F|a|l|s|e|(+0#e000e06&|)| +0#0000000&@44 +|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|?+0#af5f00255&| +0#0000000&|@+0#e000e06&|a| +0#0000000&|:+0#af5f00255&| +0#0000000&|@+0#e000e06&|b| +0#0000000&@57 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&|)+0#e000e06&| +0#0000000&@54 +> @74 +|"+0#0000e05&| |F|a|l|s|y| +0#0000000&@67 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@43 +|e+0#af5f00255&|c|h|o| +0#0000000&|G|e|t|N|a|m|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|u|n|k|n|o|w|n|'| +0#0000000&@47 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&@62 +@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@48 +|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&|?+0#af5f00255&@1| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@51 @75 |e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&@63 |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&@55 -|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59 ->e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&@55 -|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@57 -|e+0#af5f00255&|c|h|o| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|@+0#e000e06&|a| +0#0000000&@61 -|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&@59 -@75 -|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |u|s|i|n|g| |'|i|g|n|o|r|c|a|s|e|'| +0#0000000&@42 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&| +0#0000000&@5|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&| +0#0000000&@5|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 -@57|2@1|7|,|1| @8|7|4|%| +@57|2@1|7|,|0|-|1| @6|7|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_14.dump b/runtime/syntax/testdir/dumps/vim_expr_14.dump index 0b82948930..507927d8c3 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_14.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_14.dump @@ -1,20 +1,20 @@ -|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&@55 +|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59 +|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&@55 +|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@57 +|e+0#af5f00255&|c|h|o| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&@53 +>e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|@+0#e000e06&|a| +0#0000000&@61 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&@59 +@75 +|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |u|s|i|n|g| |'|i|g|n|o|r|c|a|s|e|'| +0#0000000&@42 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&| +0#0000000&@5|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&| +0#0000000&@5|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 |e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 |e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 |e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t| +0#0000000&@1|e+0#00e0e07&|x|p|r| +0#0000000&@53 -@75 ->"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |m|a|t|c|h| |c|a|s|e| +0#0000000&@49 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t|#| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53 -@75 -|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |i|g|n|o|r|e| |c|a|s|e| +0#0000000&@48 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -@57|2|4|5|,|1| @8|8|0|%| +@57|2|4|5|,|1| @8|7|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_15.dump b/runtime/syntax/testdir/dumps/vim_expr_15.dump index 2534395084..d80112d6ce 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_15.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_15.dump @@ -1,20 +1,20 @@ -|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t| +0#0000000&@1|e+0#00e0e07&|x|p|r| +0#0000000&@53 +@75 +|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |m|a|t|c|h| |c|a|s|e| +0#0000000&@49 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +>e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t|#| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53 +@75 +|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |i|g|n|o|r|e| |c|a|s|e| +0#0000000&@48 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 |e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 |e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|?| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 |e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|?| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 ->e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 -|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t|?| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53 -@75 -|"+0#0000e05&| |U|n|r|e|p|o|r|t|e|d| |i|s@1|u|e| |(|"|i|s|"| |i|n|c|o|r@1|e|c|t|l|y| |m|a|t|c|h|e|s| |a|s| |"+0#e000002&|e|c|h|o| |v|i|m|N|u|m|b|e|r| |*|v|i|m|C|o|m@1|a|n|d -|*| |v|i|m|N|u|m|b|e|r|"|)+0#0000e05&| +0#0000000&@61 -|e+0#af5f00255&|c|h|o| +0#0000000&|4+0#e000002&|2| +0#0000000&|i+0#af5f00255&|s| +0#0000000&|4+0#e000002&|2| +0#0000000&@61 -@75 -|"+0#0000e05&| |L|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n| +0#0000000&@55 -|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&| +0#0000000&@59 -@6|\+0#e000e06&| +0#0000000&@67 -@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 -@57|2|6|3|,|1| @8|8|5|%| +@57|2|6|3|,|1| @8|8|2|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_16.dump b/runtime/syntax/testdir/dumps/vim_expr_16.dump index eac357e763..70d932b78b 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_16.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_16.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 -@6|\+0#e000e06&| +0#0000000&@67 -@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 -@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|++0#af5f00255&| +0#0000000&@61 -@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|z|"| +0#0000000&@61 -> @74 +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|?| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +>e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53 +|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t|?| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53 +@75 +|"+0#0000e05&| |U|n|r|e|p|o|r|t|e|d| |i|s@1|u|e| |(|"|i|s|"| |i|n|c|o|r@1|e|c|t|l|y| |m|a|t|c|h|e|s| |a|s| |"+0#e000002&|e|c|h|o| |v|i|m|N|u|m|b|e|r| |*|v|i|m|C|o|m@1|a|n|d +|*| |v|i|m|N|u|m|b|e|r|"|)+0#0000e05&| +0#0000000&@61 +|e+0#af5f00255&|c|h|o| +0#0000000&|4+0#e000002&|2| +0#0000000&|i+0#af5f00255&|s| +0#0000000&|4+0#e000002&|2| +0#0000000&@61 +@75 +|"+0#0000e05&| |L|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n| +0#0000000&@55 |l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&| +0#0000000&@59 -@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&@67 @6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&@67 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|++0#af5f00255&| +0#0000000&@61 -@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|z|"| +0#0000000&@61 -@75 -|"+0#0000e05&| |F|u|n|c|t|i|o|n| |c|a|l@1|s| +0#0000000&@58 -@75 -|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| |v+0#00e0e07&|:|f|a|l|s|e|,+0#0000000&| |v+0#00e0e07&|:|n|u|l@1|)+0#e000e06&| +0#0000000&@41 -@75 -@75 -@57|2|8|0|,|0|-|1| @6|9|1|%| +@57|2|8|1|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_17.dump b/runtime/syntax/testdir/dumps/vim_expr_17.dump index 860ac05606..d70e2a1cdb 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_17.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_17.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@74 -|"+0#0000e05&| |I|s@1|u|e| |#|1|6|2@1|1| |(|v|i|m|S|t|r|i|n|g| |b|e|c|o|m|e|s| |v|i|m|V|a|r| |w|h|e|n| |p|r|e|c|e|d|e|d| |b|y| |!|)| +0#0000000&@14 -|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|!+0#af5f00255&|'+0#e000002&|g|:|b|a|r|'|-+0#af5f00255&|>|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|)| +0#0000000&@46 +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|++0#af5f00255&| +0#0000000&@61 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|z|"| +0#0000000&@61 +@75 +|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&| +0#0000000&@59 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6>\+0#e000e06&| +0#0000000&@67 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&@67 +@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|++0#af5f00255&| +0#0000000&@61 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|z|"| +0#0000000&@61 @75 +|"+0#0000e05&| |F|u|n|c|t|i|o|n| |c|a|l@1|s| +0#0000000&@58 @75 ->"+0#0000e05&| |I|s@1|u|e| |#|1|4@1|2|3| |(|v|i|m|.|v|i|m|:| |O|p|t| |o|u|t| |o|f| |v|i|m|S|e|a|r|c|h|*|)| +0#0000000&@27 +|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|v+0#00e0e07&|:|t|r|u|e|,+0#0000000&| |v+0#00e0e07&|:|f|a|l|s|e|,+0#0000000&| |v+0#00e0e07&|:|n|u|l@1|)+0#e000e06&| +0#0000000&@41 @75 -|?+0#e000e06&|t+0#e000002&|r|u|t|h|y| +0#0000000&@67 -|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60 -|\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@66 -|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@69 -|\+0#e000e06&| +0#0000000&@2|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&| +0#0000000&@66 -|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@69 -|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@63 @75 -|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60 -| +0#e000002&@1|?+0#e000e06&|t+0#e000002&|r|u|t|h|y| +0#0000000&@65 -@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@58 -@2|\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@64 -@57|2|9|8|,|1| @8|9|7|%| +|"+0#0000e05&| |I|s@1|u|e| |#|1|6|2@1|1| |(|v|i|m|S|t|r|i|n|g| |b|e|c|o|m|e|s| |v|i|m|V|a|r| |w|h|e|n| |p|r|e|c|e|d|e|d| |b|y| |!|)| +0#0000000&@14 +|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|!+0#af5f00255&|'+0#e000002&|g|:|b|a|r|'|-+0#af5f00255&|>|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|)| +0#0000000&@46 +@75 +@57|2|9|8|,|7| @8|9|3|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_18.dump b/runtime/syntax/testdir/dumps/vim_expr_18.dump index b5d468b494..07abc6bb67 100644 --- a/runtime/syntax/testdir/dumps/vim_expr_18.dump +++ b/runtime/syntax/testdir/dumps/vim_expr_18.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@1|\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@64 +| +0&#ffffff0@74 +@75 +|"+0#0000e05&| |I|s@1|u|e| |#|1|4@1|2|3| |(|v|i|m|.|v|i|m|:| |O|p|t| |o|u|t| |o|f| |v|i|m|S|e|a|r|c|h|*|)| +0#0000000&@27 +@75 +|?+0#e000e06&|t+0#e000002&|r|u|t|h|y| +0#0000000&@67 +>l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60 +|\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@66 +|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@69 +|\+0#e000e06&| +0#0000000&@2|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&| +0#0000000&@66 +|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@69 +|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@63 +@75 +|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60 +| +0#e000002&@1|?+0#e000e06&|t+0#e000002&|r|u|t|h|y| +0#0000000&@65 +@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@58 +@2|\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@64 @2|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@67 @2|\+0#e000e06&| +0#0000000&@2|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&| +0#0000000&@64 @2|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@67 -@2|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@61 ->e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 -@75 -|~+0#4040ff13&| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -| +0#0000000&@56|3|1|6|,|1| @8|B|o|t| +@57|3|1|6|,|1| @8|9@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_expr_19.dump b/runtime/syntax/testdir/dumps/vim_expr_19.dump new file mode 100644 index 0000000000..bd6bc5bead --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_expr_19.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@67 +@2|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@61 +|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 +> @74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|3@1|2|,|0|-|1| @6|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_lambda_00.dump b/runtime/syntax/testdir/dumps/vim_lambda_00.dump index 671354a2b0..2925e38099 100644 --- a/runtime/syntax/testdir/dumps/vim_lambda_00.dump +++ b/runtime/syntax/testdir/dumps/vim_lambda_00.dump @@ -1,20 +1,20 @@ >"+0#0000e05#ffffff0| |V|i|m| |l|a|m|b|d|a| |e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@50 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|L|a|m|b|d|a|O|p|e|r|a|t|o|r| |T|o|d|o| +0#0000000&@27 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|L|a|m|b|d|a|B|r|a|c|e| @3|T|o|d|o| +0#0000000&@27 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|F|u|n|c|P|a|r|a|m| @5|I|d|e|n|t|i|f|i|e|r| +0#0000000&@21 @75 @75 |l+0#af5f00255&|e|t| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@61 @75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@55 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|_+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@53 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|.+0#00e0e07&@2| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@51 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@53 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |_+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@50 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.+0#00e0e07&@2| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@48 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@50 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@55 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|_+0#00e0e07#ffffff0| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@53 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|.+0#00e0e07#ffffff0@2| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@51 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@53 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |_+0#00e0e07&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@50 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.+0#00e0e07&@2| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@48 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@50 @75 @75 |"+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54 @75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&@61 -@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 -@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 @57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_lambda_01.dump b/runtime/syntax/testdir/dumps/vim_lambda_01.dump index 79a52d6db0..96d9489350 100644 --- a/runtime/syntax/testdir/dumps/vim_lambda_01.dump +++ b/runtime/syntax/testdir/dumps/vim_lambda_01.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@74 -|"+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54 +|l+0#af5f00255#ffffff0|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.+0#00e0e07&@2| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@48 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@50 @75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&@61 -@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 -@6>\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|_+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@59 +@75 +|"+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54 +> @74 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0@61 @6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|.+0#00e0e07&@2| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@57 +@6|\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|_+0#00e0e07#ffffff0| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@59 @6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@59 -@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +@6|\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|.+0#00e0e07#ffffff0@2| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@57 @6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -@57|1|9|,|7| @9|1|2|%| +@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +@6|\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@59 +@57|1|9|,|0|-|1| @7|1@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_lambda_02.dump b/runtime/syntax/testdir/dumps/vim_lambda_02.dump index 40899d701e..99cf668a67 100644 --- a/runtime/syntax/testdir/dumps/vim_lambda_02.dump +++ b/runtime/syntax/testdir/dumps/vim_lambda_02.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@56 -@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +|l+0#af5f00255#ffffff0|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@59 @6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -> @74 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&| +0#0000000&@63 -@6|\+0#e000e06&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@64 @6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@56 +@6>"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@64 +@6|\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +@75 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012| +0#0000000#ffffff0@63 +@6|\+0#e000e06&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@64 @6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&@59 -@6|\+0#e000e06&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@64 +@6|\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0| +0#0000000&@62 +@6|\+0#e000e06&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@64 @6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 -@57|3|7|,|0|-|1| @7|3|0|%| +@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +@6|\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +@57|3|7|,|7| @9|2|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_lambda_03.dump b/runtime/syntax/testdir/dumps/vim_lambda_03.dump index 892cfab6a6..194b85ace1 100644 --- a/runtime/syntax/testdir/dumps/vim_lambda_03.dump +++ b/runtime/syntax/testdir/dumps/vim_lambda_03.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@64 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 +@6>\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 @75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| @61 -@6>\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @64 -@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@56 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| @61 +@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @64 +@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r|}+0#0000001#ffff4012| +0#0000000#ffffff0@56 @75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&| +0#0000000&@63 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012| +0#0000000#ffffff0@63 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @64 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @64 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&@65 -@6|\+0#e000e06&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@64 @6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 -@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 -@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65 -@75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|[+0#e000e06&| +0#0000000&@59 -@6|\+0#e000e06&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63 -@57|5@1|,|7| @9|4|8|%| +@57|5@1|,|7| @9|4@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_lambda_04.dump b/runtime/syntax/testdir/dumps/vim_lambda_04.dump index 72e1236d29..2769f521df 100644 --- a/runtime/syntax/testdir/dumps/vim_lambda_04.dump +++ b/runtime/syntax/testdir/dumps/vim_lambda_04.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63 +| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0@64 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6>\+0#e000e06&| +0#0000000&|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 +@75 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|[+0#e000e06&| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63 @6|\+0#e000e06&| +0#0000000&|8+0#e000002&|3| +0#0000000&@64 -@6|\+0#e000e06&|]|}| +0#0000000&@65 +@6|\+0#e000e06&|]|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 @75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@59 -@6>\+0#e000e06&| +0#0000000&|'+0#e000002&|a|'|:+0#0000000&| |4+0#e000002&|2|,+0#0000000&| @58 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|a|'|:+0#0000000&| |4+0#e000002&|2|,+0#0000000&| @58 @6|\+0#e000e06&| +0#0000000&|'+0#e000002&|b|'|:+0#0000000&| |8+0#e000002&|3| +0#0000000&@59 -@6|\+0#e000e06&|}@1| +0#0000000&@65 +@6|\+0#e000e06&|}|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 @75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|#+0#e000e06&|{| +0#0000000&@58 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|#+0#e000e06&|{| +0#0000000&@58 @6|\+0#e000e06&| +0#0000000&|a+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @60 -@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|:| +0#0000000&|8+0#e000002&|3| +0#0000000&@61 -@6|\+0#e000e06&|}@1| +0#0000000&@65 -@75 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>|[+0#e000e06&| +0#0000000&@56 -@6|\+0#e000e06&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63 -@6|\+0#e000e06&| +0#0000000&|8+0#e000002&|3| +0#0000000&@64 -@6|\+0#e000e06&|]|}@1| +0#0000000&@64 -@75 -@57|7|3|,|7| @9|6@1|%| +@57|7|3|,|7| @9|6|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_lambda_05.dump b/runtime/syntax/testdir/dumps/vim_lambda_05.dump index e8d31d9986..74778ce75c 100644 --- a/runtime/syntax/testdir/dumps/vim_lambda_05.dump +++ b/runtime/syntax/testdir/dumps/vim_lambda_05.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@74 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@55 -@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|a|'|:+0#0000000&| |4+0#e000002&|2|,+0#0000000&| @58 -@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|b|'|:+0#0000000&| |8+0#e000002&|3| +0#0000000&@59 -@6|\+0#e000e06&|}@2| +0#0000000&@64 -> @74 -|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|#+0#e000e06&|{| +0#0000000&@54 -@6|\+0#e000e06&| +0#0000000&|a+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @60 +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|a+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @60 @6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|:| +0#0000000&|8+0#e000002&|3| +0#0000000&@61 -@6|\+0#e000e06&|}@2| +0#0000000&@64 +@6|\+0#e000e06&|}|}+0#0000001#ffff4012| +0#0000000#ffffff0@65 @75 -|"+0#0000e05&| |:|h|e|l|p| |l|a|m|b|d|a| +0#0000000&@60 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|{+0#0000001#ffff4012|-|>|[+0#e000e06#ffffff0| +0#0000000&@56 +@6>\+0#e000e06&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63 +@6|\+0#e000e06&| +0#0000000&|8+0#e000002&|3| +0#0000000&@64 +@6|\+0#e000e06&|]|}+0#0000001#ffff4012@1| +0#0000000#ffffff0@64 @75 -|:|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|a+0#00e0e07&|r|g|1|,+0#0000000&| |a+0#00e0e07&|r|g|2| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|a+0#00e0e07&|r|g|1| +0#0000000&|-+0#af5f00255&| +0#0000000&|a+0#00e0e07&|r|g|2|}+0#e000e06&| +0#0000000&@38 -|:|e+0#af5f00255&|c|h|o| +0#0000000&|F|(+0#e000e06&|5+0#e000002&|,+0#0000000&| |2+0#e000002&|)+0#e000e06&| +0#0000000&@61 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|a|'|:+0#0000000&| |4+0#e000002&|2|,+0#0000000&| @58 +@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|b|'|:+0#0000000&| |8+0#e000002&|3| +0#0000000&@59 +@6|\+0#e000e06&|}|}+0#0000001#ffff4012@1| +0#0000000#ffffff0@64 @75 -|:|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|'+0#e000002&|e|r@1|o|r| |f|u|n|c|t|i|o|n|'|}+0#e000e06&| +0#0000000&@44 -|:|e+0#af5f00255&|c|h|o| +0#0000000&|F|(+0#e000e06&|'+0#e000002&|i|g|n|o|r|e|d|'|)+0#e000e06&| +0#0000000&@56 +|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|#+0#e000e06&|{| +0#0000000&@54 +@6|\+0#e000e06&| +0#0000000&|a+0#00e0e07&|:| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @60 +@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|:| +0#0000000&|8+0#e000002&|3| +0#0000000&@61 +@6|\+0#e000e06&|}|}+0#0000001#ffff4012@1| +0#0000000#ffffff0@64 @75 -@57|9|1|,|0|-|1| @7|8|4|%| +@57|9|1|,|7| @9|7@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_lambda_06.dump b/runtime/syntax/testdir/dumps/vim_lambda_06.dump index 5338e68b4b..0cd993165d 100644 --- a/runtime/syntax/testdir/dumps/vim_lambda_06.dump +++ b/runtime/syntax/testdir/dumps/vim_lambda_06.dump @@ -1,20 +1,20 @@ | +0&#ffffff0@74 +@75 +|"+0#0000e05&| |:|h|e|l|p| |l|a|m|b|d|a| +0#0000000&@60 +@75 +|:|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|a+0#00e0e07#ffffff0|r|g|1|,+0#0000000&| |a+0#00e0e07&|r|g|2| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|a+0#00e0e07&|r|g|1| +0#0000000&|-+0#af5f00255&| +0#0000000&|a+0#00e0e07&|r|g|2|}+0#0000001#ffff4012| +0#0000000#ffffff0@38 +>:|e+0#af5f00255&|c|h|o| +0#0000000&|F|(+0#e000e06&|5+0#e000002&|,+0#0000000&| |2+0#e000002&|)+0#e000e06&| +0#0000000&@61 +@75 +|:|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|'+0#e000002&|e|r@1|o|r| |f|u|n|c|t|i|o|n|'|}+0#0000001#ffff4012| +0#0000000#ffffff0@44 +|:|e+0#af5f00255&|c|h|o| +0#0000000&|F|(+0#e000e06&|'+0#e000002&|i|g|n|o|r|e|d|'|)+0#e000e06&| +0#0000000&@56 +@75 |:|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|r|g|)+0#e000e06&| +0#0000000&@56 |:| @1|l+0#af5f00255&|e|t| +0#0000000&|i+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|3+0#e000002&| +0#0000000&@62 -|:| @1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|{+0#e000e06&|x+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|x+0#00e0e07&| +0#0000000&|++0#af5f00255&| +0#0000000&|i+0#00e0e07&| +0#0000000&|-+0#af5f00255&| +0#0000000&|a+0#00e0e07&|:|a|r|g|}+0#e000e06&| +0#0000000&@44 +|:| @1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|{+0#0000001#ffff4012|x+0#00e0e07#ffffff0| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|x+0#00e0e07&| +0#0000000&|++0#af5f00255&| +0#0000000&|i+0#00e0e07&| +0#0000000&|-+0#af5f00255&| +0#0000000&|a+0#00e0e07&|:|a|r|g|}+0#0000001#ffff4012| +0#0000000#ffffff0@44 |:|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@62 ->:|l+0#af5f00255&|e|t| +0#0000000&|B+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|F|o@1|(+0#e000e06&|4+0#e000002&|)+0#e000e06&| +0#0000000&@57 +|:|l+0#af5f00255&|e|t| +0#0000000&|B+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|F|o@1|(+0#e000e06&|4+0#e000002&|)+0#e000e06&| +0#0000000&@57 |:|e+0#af5f00255&|c|h|o| +0#0000000&|B|a|r|(+0#e000e06&|6+0#e000002&|)+0#e000e06&| +0#0000000&@62 @75 -|:|e+0#af5f00255&|c|h|o| +0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|[|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&|,+0#0000000&| |{+0#e000e06&|i+0#00e0e07&|d|x|,+0#0000000&| |v+0#00e0e07&|a|l| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|v+0#00e0e07&|a|l| +0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|)| +0#0000000&@31 +|:|e+0#af5f00255&|c|h|o| +0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|[|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&|,+0#0000000&| |{+0#0000001#ffff4012|i+0#00e0e07#ffffff0|d|x|,+0#0000000&| |v+0#00e0e07&|a|l| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|v+0#00e0e07&|a|l| +0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#0000001#ffff4012|)+0#e000e06#ffffff0| +0#0000000&@31 |"+0#0000e05&| |[|2|,| |3|,| |4|]| @1| +0#0000000&@61 -@75 -|:|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|[|3+0#e000002&|,+0#0000000&|7+0#e000002&|,+0#0000000&|2+0#e000002&|,+0#0000000&|1+0#e000002&|,+0#0000000&|4+0#e000002&|]+0#e000e06&|,+0#0000000&| |{+0#e000e06&|a+0#00e0e07&|,+0#0000000&| |b+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|a+0#00e0e07&| +0#0000000&|-+0#af5f00255&| +0#0000000&|b+0#00e0e07&|}+0#e000e06&|)| +0#0000000&@34 -|"+0#0000e05&| |[|1|,| |2|,| |3|,| |4|,| |7|]| +0#0000000&@57 -|:|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|i|m|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|5+0#e000002&|0@1|,+0#0000000&| @45 -@16|\+0#e000e06&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|"+0#e000002&|e|c|h|o| |'|H|a|n|d|l|e|r| |c|a|l@1|e|d|'|"|,+0#0000000&| |"+0#e000002&@1|)+0#e000e06&|}|,+0#0000000&| @14 -@16|\+0#e000e06&| +0#0000000&|{+0#e000e06&|'+0#e000002&|r|e|p|e|a|t|'|:+0#0000000&| |3+0#e000002&|}+0#e000e06&|)| +0#0000000&@42 -@75 -|~+0#4040ff13&| @73 -|~| @73 -| +0#0000000&@56|1|0|9|,|1| @8|B|o|t| +@57|1|0|9|,|1| @8|9|3|%| diff --git a/runtime/syntax/testdir/dumps/vim_lambda_07.dump b/runtime/syntax/testdir/dumps/vim_lambda_07.dump new file mode 100644 index 0000000000..c1e29d7521 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_lambda_07.dump @@ -0,0 +1,20 @@ +|"+0#0000e05#ffffff0| |[|2|,| |3|,| |4|]| @1| +0#0000000&@61 +@75 +|:|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|[|3+0#e000002&|,+0#0000000&|7+0#e000002&|,+0#0000000&|2+0#e000002&|,+0#0000000&|1+0#e000002&|,+0#0000000&|4+0#e000002&|]+0#e000e06&|,+0#0000000&| |{+0#0000001#ffff4012|a+0#00e0e07#ffffff0|,+0#0000000&| |b+0#00e0e07&| +0#0000000&|-+0#0000001#ffff4012|>| +0#0000000#ffffff0|a+0#00e0e07&| +0#0000000&|-+0#af5f00255&| +0#0000000&|b+0#00e0e07&|}+0#0000001#ffff4012|)+0#e000e06#ffffff0| +0#0000000&@34 +|"+0#0000e05&| |[|1|,| |2|,| |3|,| |4|,| |7|]| +0#0000000&@57 +|:|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|i|m|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|5+0#e000002&|0@1|,+0#0000000&| @45 +@16>\+0#e000e06&| +0#0000000&|{+0#0000001#ffff4012|-|>| +0#0000000#ffffff0|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|"+0#e000002&|e|c|h|o| |'|H|a|n|d|l|e|r| |c|a|l@1|e|d|'|"|,+0#0000000&| |"+0#e000002&@1|)+0#e000e06&|}+0#0000001#ffff4012|,+0#0000000#ffffff0| @14 +@16|\+0#e000e06&| +0#0000000&|{+0#e000e06&|'+0#e000002&|r|e|p|e|a|t|'|:+0#0000000&| |3+0#e000002&|}+0#e000e06&|)| +0#0000000&@42 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|2|7|,|3|-|1|7| @5|B|o|t| diff --git a/runtime/syntax/testdir/input/vim9_lambda.vim b/runtime/syntax/testdir/input/vim9_lambda.vim index 4340eb0990..81d9dc27b1 100644 --- a/runtime/syntax/testdir/input/vim9_lambda.vim +++ b/runtime/syntax/testdir/input/vim9_lambda.vim @@ -1,4 +1,7 @@ vim9script +# VIM_TEST_SETUP hi link vim9LambdaOperator Todo +# VIM_TEST_SETUP hi link vim9LambdaParen Todo + # Vim 9 lambda expressions @@ -6,6 +9,7 @@ var Foo: func var expr = 0 # without return type + Foo = () => expr Foo = (_) => expr Foo = (x) => expr @@ -26,6 +30,7 @@ Foo = (x: number, ...y: list) => expr Foo = (x: number, y: number) => expr # with return type + Foo = (): number => expr Foo = (_): number => expr Foo = (x): number => expr @@ -45,6 +50,27 @@ Foo = (x: number, ...y: list): number => expr Foo = (x: number, y: number): number => expr +# with compound return type + +Foo = (): list => expr +Foo = (_): list => expr +Foo = (x): list => expr + +Foo = (...y): list => expr +Foo = (_, ...y): list => expr +Foo = (x, ...y): list => expr + +Foo = (x, y): list => expr + +Foo = (_: number): list => expr +Foo = (x: number): list => expr + +Foo = (...y: list): list => expr +Foo = (_: number, ...y: list): list => expr +Foo = (x: number, ...y: list): list => expr + +Foo = (x: number, y: number): list => expr + # post operator comments @@ -62,15 +88,29 @@ Foo = () => # line continuations +Foo = (x: string, + \ y: number, + \ z: bool) => expr + +Foo = (x: string, + \ y: number, + \ z: bool) + \ => expr + Foo = (x: string, \ y: number, \ z: bool): number => expr -# FIXME + Foo = (x: string, \ y: number, \ z: bool): number \ => expr +Foo = (x: string, + \ y: number, + \ z: bool): + \ number => expr + # funcref call @@ -114,3 +154,9 @@ def Op(): func(func(number, number): number): func(number, Digit): number (x: number, y: Digit): number => F(x, y.value) enddef ####################### ^ vimCommand? + +# Issue #16965 (vim syntax: wrong highlight with lambda, autoload, and false keyword) + +autocmd BufRead * timer_start(0, (_) => f#a(false, false)) +autocmd + diff --git a/runtime/syntax/testdir/input/vim9_tuple.vim b/runtime/syntax/testdir/input/vim9_tuple.vim new file mode 100644 index 0000000000..99370a55d4 --- /dev/null +++ b/runtime/syntax/testdir/input/vim9_tuple.vim @@ -0,0 +1,26 @@ +vim9script + +# Vim9 tuples + + +# https://github.com/vim/vim/pull/16935#issuecomment-2738310273 + +function LegacyMakeEntry(key, value) abort + return (a:key, a:value) +endfunction + +def MakeEntry(key: string, value: any): tuple + return (key, value) +enddef + +function LegacyMakeLazyList(e1, e2) abort + return ({e1_, e2_ -> {-> [e1_, e2_]}}(a:e1, a:e2)) +endfunction + +def MakeLazyList(e1: any, e2: any): func(): list + return (((e1_: any, e2_: any) => () => [e1_, e2_])(e1, e2)) +enddef + +echo MakeEntry('key', 'value') == list2tuple(MakeLazyList('key', 'value')()) +echo LegacyMakeEntry('key', 'value') == list2tuple(LegacyMakeLazyList('key', 'value')()) + diff --git a/runtime/syntax/testdir/input/vim9_variables.vim b/runtime/syntax/testdir/input/vim9_variables.vim index 14b1d1dd3b..3521045290 100644 --- a/runtime/syntax/testdir/input/vim9_variables.vim +++ b/runtime/syntax/testdir/input/vim9_variables.vim @@ -47,6 +47,24 @@ var foo =<< eval trim END ... END +# Typed declarations + +var foo: tuple = expr +var foo: tuple = expr +var foo: tuple = expr +var foo: tuple<...list> = expr +var foo: tuple<...list> = expr +var foo: tuple> = expr + +var foo: tuple< + #\ comment + \number, + #\ comment + \string, + #\ comment + \bool + \> + # Assignments foo = expr diff --git a/runtime/syntax/testdir/input/vim_expr.vim b/runtime/syntax/testdir/input/vim_expr.vim index 9786ff8ca5..bb7366d44c 100644 --- a/runtime/syntax/testdir/input/vim_expr.vim +++ b/runtime/syntax/testdir/input/vim_expr.vim @@ -173,6 +173,21 @@ echo #{ " match as keys not scope dictionaries echo #{ b: 42, w: 42, t: 42, g: 42, l: 42, s: 42, a: 42, v: 42 } +" Tuple + +echo () +echo (42,) +echo ((11, 12), (21, 22), (31, 32)) +echo (1, + \ 2, + \ 3, + \ 4 + \) +echo (1, 'two', 1 + 2, "fo" .. "ur") + +echo foo + (42, 87) +echo (42, 87) + foo + " Register echo @" diff --git a/runtime/syntax/testdir/input/vim_lambda.vim b/runtime/syntax/testdir/input/vim_lambda.vim index 73a221b7df..d08509c90b 100644 --- a/runtime/syntax/testdir/input/vim_lambda.vim +++ b/runtime/syntax/testdir/input/vim_lambda.vim @@ -1,4 +1,7 @@ " Vim lambda expressions +" VIM_TEST_SETUP hi link vimLambdaOperator Todo +" VIM_TEST_SETUP hi link vimLambdaBrace Todo +" VIM_TEST_SETUP hi link vimFuncParam Identifier let expr = 42 @@ -56,12 +59,17 @@ let Foo = {x, \ z -> expr} let Foo = { + "\ comment \ x, + "\ comment \ y, + "\ comment \ z + "\ comment \ -> "\ comment \ expr + "\ comment \ } let Foo = {-> [ @@ -94,6 +102,7 @@ let Foo = {-> {-> #{ \ b: 83 \}}} + " :help lambda :let F = {arg1, arg2 -> arg1 - arg2} diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index fc8e0589ff..2a833e4d8d 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Mar 27 +" Last Change: 2025 Mar 29 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -411,28 +411,22 @@ syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment " Lambda Expressions: {{{2 " ================== syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList -syn region vimLambda contained matchgroup=Delimiter start="{\ze[[:space:][:alnum:]_.,]*->" end="}" end="$" skip=+\s*\n\s*\\\|\s*\n\s*"\\ + contains=@vimContinue,@vimExprList,vimLambdaParams -syn match vimLambdaParams contained "{\@1<=.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=vimFuncParam - -syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment -syn match vim9LambdaParamsParen contained "[()]" -syn region vim9LambdaParams contained - \ matchgroup=vim9LambdaParamsParen - \ start="(\ze\s*\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)" - \ start="(\ze\s*\n - "\ line continuations - \\%(\s*\%(#\\ .*\|\\\s*\)\n\)*\s*\\\s* - "\ parameter names - \\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)" - \ end=")\ze\%(:\s\|\s\+=>\)" - \ matchgroup=vimContinue - \ end="^\s*\\\ze\s\+=>" - \ skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator - \ contains=@vim9Continue,vimDefParam,vim9LambdaParamsParen -syn match vim9LambdaParams contained "(\s*)\|(\s*\(\.\.\.\)\=\h\w*\s*)\ze\%(:\s\|\s\+=>\)" skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator contains=vimDefParam,vim9LambdaParamsParen - -syn region vim9LambdaReturnType contained start=":\s" end="$" end="\ze#" end="\ze=>" skipwhite skipempty nextgroup=vim9LambdaOperator,vim9LamdaOperatorComment contains=vimTypeSep transparent -syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList +syn region vimLambda contained + \ matchgroup=vimLambdaBrace + \ start=+{\ze[[:space:][:alnum:]_.,]*\%(\n\s*\%(\\[[:space:][:alnum:]_.,]*\|"\\ .*\)\)*->+ + \ skip=+\n\s*\%(\\\|"\\ \)+ + \ end="}" end="$" + \ contains=@vimContinue,@vimExprList,vimLambdaParams +syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFuncParam + +syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment +syn match vim9LambdaParen contained "[()]" +syn match vim9LambdaParams contained + \ "(\%(\" + \ skipwhite nextgroup=vim9LambdaOperator + \ contains=@vim9Continue,vimDefParam,vim9LambdaParen,vim9LambdaReturnType +syn region vim9LambdaReturnType contained start=")\@<=:\s" end="\ze\s*#" end="\ze\s*=>" contains=@vim9Continue,@vimType transparent +syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment @@ -507,9 +501,10 @@ syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType conta syn match vimTypeSep contained ":\%(\s\|\n\)\@=" skipwhite nextgroup=@vimType syn keyword vimType contained any blob bool channel float job number string void -syn match vimType contained "\" -syn region vimCompoundType contained matchgroup=vimType start="\" +syn region vimCompoundType contained matchgroup=vimType start="\" syn cluster vimType contains=vimType,vimCompoundType,vimUserType @@ -1627,6 +1622,7 @@ if !exists("skip_vim_syntax_inits") hi def link vim9KeymapLineComment vimKeymapLineComment hi def link vimKeymapLineComment vimComment hi def link vimKeymapTailComment vimComment + hi def link vimLambdaBrace Delimiter hi def link vimLambdaOperator vimOper hi def link vimLet vimCommand hi def link vimLetHereDoc vimString @@ -1783,7 +1779,7 @@ if !exists("skip_vim_syntax_inits") hi def link vim9Interface vimCommand hi def link vim9LambdaOperator vimOper hi def link vim9LambdaOperatorComment vim9Comment - hi def link vim9LambdaParamsParen vimParenSep + hi def link vim9LambdaParen vimParenSep hi def link vim9LhsRegister vimLetRegister hi def link vim9LhsVariable vimVar hi def link vim9LineComment vimComment From 0980e41161eb5c4dc144f93f472e967f75916fe9 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sat, 29 Mar 2025 08:53:12 +0100 Subject: [PATCH 007/633] patch 9.1.1256: if_python: duplicate tuple data entries Problem: if_python: duplicate tuple data entries (after v9.1.1239) Solution: clean up duplicates (Yegappan Lakshmanan) closes: #17004 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/if_python.c | 6 ------ src/version.c | 2 ++ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/if_python.c b/src/if_python.c index 5a5e6ea303..aa496f23f7 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -210,9 +210,6 @@ struct PyMethodDef { Py_ssize_t a; }; # define PySequence_Size dll_PySequence_Size # define PySequence_GetItem dll_PySequence_GetItem # define PySequence_Fast dll_PySequence_Fast -# define PyTuple_Size dll_PyTuple_Size -# define PyTuple_GetItem dll_PyTuple_GetItem -# define PyTuple_Type (*dll_PyTuple_Type) # define PySlice_GetIndicesEx dll_PySlice_GetIndicesEx # define PyImport_ImportModule dll_PyImport_ImportModule # define PyDict_New dll_PyDict_New @@ -556,9 +553,6 @@ static struct {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check}, {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem}, {"PySequence_Fast", (PYTHON_PROC*)&dll_PySequence_Fast}, - {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem}, - {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size}, - {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type}, {"PySlice_GetIndicesEx", (PYTHON_PROC*)&dll_PySlice_GetIndicesEx}, {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule}, {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString}, diff --git a/src/version.c b/src/version.c index d8e55f9c46..2a83869a49 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1256, /**/ 1255, /**/ From 0dc9a0bc60d469f52db064fc88ed9d8938fb5cc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andis=20Spri=C5=86=C4=B7is?= Date: Sat, 29 Mar 2025 09:03:54 +0100 Subject: [PATCH 008/633] runtime(lf): add lf r34 keywords to syntax script closes: #17002 Signed-off-by: Christian Brabandt --- runtime/syntax/lf.vim | 194 ++++++++++++++++++++++-------------------- 1 file changed, 101 insertions(+), 93 deletions(-) diff --git a/runtime/syntax/lf.vim b/runtime/syntax/lf.vim index e4cf014865..3c1513fe68 100644 --- a/runtime/syntax/lf.vim +++ b/runtime/syntax/lf.vim @@ -2,15 +2,18 @@ " Language: lf file manager configuration file (lfrc) " Maintainer: Andis Sprinkis " Former Maintainer: Cameron Wright -" Former URL: https://github.com/andis-sprinkis/lf-vim -" Last Change: 13 October 2024 +" URL: https://github.com/andis-sprinkis/lf-vim +" Last Change: 28 March 2025 +" 29 Mar 2025 by Vim Project (save and restore 'cpo' setting) " " The shell syntax highlighting is configurable. See $VIMRUNTIME/doc/syntax.txt -" lf version: 32 +" lf version: 34 if exists("b:current_syntax") finish endif +let s:cpo = &cpo +set cpo&vim let b:current_syntax = "lf" @@ -33,122 +36,80 @@ syn keyword lfKeyword set setlocal cmd map cmap skipwhite "{{{ Options Keywords syn keyword lfOptions - \ quit - \ up - \ half-up - \ page-up - \ scroll-up - \ down - \ half-down - \ page-down - \ scroll-down - \ updir - \ open - \ jump-next - \ jump-prev - \ top + \ anchorfind + \ autoquit + \ borderfmt \ bottom - \ high - \ middle - \ low - \ toggle - \ invert - \ invert-below - \ unselect - \ glob-select - \ glob-unselect \ calcdirsize - \ clearmaps - \ copy - \ cut - \ paste - \ clear - \ sync - \ draw - \ redraw - \ load - \ reload - \ echo - \ echomsg - \ echoerr \ cd - \ select - \ delete - \ rename - \ source - \ push - \ read - \ shell - \ shell-pipe - \ shell-wait - \ shell-async - \ find - \ find-back - \ find-next - \ find-prev - \ search - \ search-back - \ search-next - \ search-prev - \ filter - \ setfilter - \ mark-save - \ mark-load - \ mark-remove - \ tag - \ tag-toggle - \ cmd-escape + \ cleaner + \ clear + \ clearmaps + \ cmd-capitalize-word \ cmd-complete - \ cmd-menu-complete - \ cmd-menu-complete-back - \ cmd-menu-accept + \ cmd-delete + \ cmd-delete-back + \ cmd-delete-end + \ cmd-delete-home + \ cmd-delete-unix-word + \ cmd-delete-word + \ cmd-delete-word-back + \ cmd-end \ cmd-enter - \ cmd-interrupt + \ cmd-escape \ cmd-history-next \ cmd-history-prev + \ cmd-home + \ cmd-interrupt \ cmd-left + \ cmd-lowercase-word + \ cmd-menu-accept + \ cmd-menu-complete + \ cmd-menu-complete-back \ cmd-right - \ cmd-home - \ cmd-end - \ cmd-delete - \ cmd-delete-back - \ cmd-delete-home - \ cmd-delete-end - \ cmd-delete-unix-word - \ cmd-yank \ cmd-transpose \ cmd-transpose-word + \ cmd-uppercase-word \ cmd-word \ cmd-word-back - \ cmd-delete-word - \ cmd-delete-word-back - \ cmd-capitalize-word - \ cmd-uppercase-word - \ cmd-lowercase-word - \ anchorfind - \ autoquit - \ borderfmt - \ cleaner + \ cmd-yank + \ copy \ copyfmt \ cursoractivefmt \ cursorparentfmt \ cursorpreviewfmt + \ cut \ cutfmt + \ delete \ dircache \ dircounts \ dirfirst \ dironly \ dirpreviews + \ down + \ draw \ drawbox \ dupfilefmt + \ echo + \ echoerr + \ echomsg \ errorfmt \ filesep + \ filter + \ find + \ find-back + \ find-next + \ find-prev \ findlen + \ glob-select + \ glob-unselect \ globfilter \ globsearch + \ half-down + \ half-up \ hidden \ hiddenfiles - \ hidecursorinactive + \ high \ history \ icons \ ifs @@ -159,45 +120,90 @@ syn keyword lfOptions \ info \ infotimefmtnew \ infotimefmtold + \ invert + \ invert-below + \ jump-next + \ jump-prev + \ load + \ locale + \ low + \ mark-load + \ mark-remove + \ mark-save + \ middle \ mouse \ number \ numberfmt + \ on-cd + \ on-focus-gained + \ on-focus-lost + \ on-init + \ on-quit + \ on-redraw + \ on-select + \ open + \ page-down + \ page-up + \ paste \ period + \ pre-cd \ preserve \ preview \ previewer \ promptfmt + \ push + \ quit \ ratios + \ read + \ redraw \ relativenumber + \ reload + \ rename \ reverse \ roundbox - \ ruler \ rulerfmt + \ scroll-down + \ scroll-up \ scrolloff + \ search + \ search-back + \ search-next + \ search-prev + \ select \ selectfmt \ selmode + \ setfilter \ shell + \ shell-async + \ shell-pipe + \ shell-wait \ shellflag \ shellopts + \ showbinds \ sixel \ smartcase \ smartdia \ sortby + \ source \ statfmt + \ sync \ tabstop + \ tag + \ tag-toggle \ tagfmt \ tempmarks \ timefmt + \ toggle + \ top \ truncatechar \ truncatepct + \ unselect + \ up + \ updir \ waitmsg + \ watch \ wrapscan \ wrapscroll - \ pre-cd - \ on-cd - \ on-select - \ on-redraw - \ on-quit "}}} "{{{ Special Matching @@ -234,3 +240,5 @@ hi def link lfExternalShell Normal hi def link lfExternalPatch Special hi def link lfIgnore Special "}}} +let &cpo = s:cpo +unlet s:cpo From 90e52490b39f0052fb5313d67728eff77191aaae Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sat, 29 Mar 2025 09:05:52 +0100 Subject: [PATCH 009/633] patch 9.1.1257: Mixing vim_strsize() with mb_ptr2cells() in pum_redraw() Problem: Mixing vim_strsize() with mb_ptr2cells() in pum_redraw(). Solution: Change vim_strsize() to mb_string2cells() (zeertzjq). Since vim_strsize() uses ptr2cells() for the cell width of each char, it is strange to mix it with mb_ptr2cells(), which is used both just below and in pum_screen_puts_with_attr(), and screen_puts_len() also uses something similar. Meanwhile mb_string2cells() uses mb_ptr2cells() for the cell width of each char. Note that the vim_strsize() and mb_string2cells() actually return the same value here, as the transstr() above makes sure the string only contains printable chars, and ptr2cells() and mb_ptr2cells() only return different values for unprintable chars. closes: #17003 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/popupmenu.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/popupmenu.c b/src/popupmenu.c index 5a2f070313..71bb499845 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -731,7 +731,7 @@ pum_redraw(void) char_u *old_rt = NULL; char_u *orig_rt = NULL; - cells = vim_strsize(rt); + cells = mb_string2cells(rt, -1); need_ellipsis = p_pmw > ellipsis_width && pum_width == p_pmw && cells > pum_width; diff --git a/src/version.c b/src/version.c index 2a83869a49..7d6c7e3f9b 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1257, /**/ 1256, /**/ From f2b16986a194ab839c5a23bd7fe904f9fae1526f Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sat, 29 Mar 2025 09:08:58 +0100 Subject: [PATCH 010/633] patch 9.1.1258: regexp: max \U and \%U value is limited by INT_MAX Problem: regexp: max \U and \%U value is limited by INT_MAX but gives a confusing error message (related: v8.1.0985). Solution: give a better error message when the value reaches INT_MAX When searching Vim allows to get up to 8 hex characters using the /\V and /\%V regex atoms. However, when using "/\UFFFFFFFF" the code point is already above what an integer variable can hold, which is 2,147,483,647. Since patch v8.1.0985, Vim already limited the max codepoint to INT_MAX (otherwise it caused a crash in the nfa regex engine), but instead of error'ing out it silently fell back to parse the number as a backslash value and not as a codepoint value and as such this "/[\UFFFFFFFF]" will happily find a "\" or an literal "F". And this "/[\d127-\UFFFFFFFF]" will error out as "reverse range in character class). Interestingly, the max Unicode codepoint value is U+10FFFF which still fits into an ordinary integer value, which means, that we don't even need to parse 8 hex characters, but 6 should have been enough. However, let's not limit Vim to search for only max 6 hex characters (which would be a backward incompatible change), but instead allow all 8 characters and only if the codepoint reaches INT_MAX, give a more precise error message (about what the max unicode codepoint value is). This allows to search for "[\U7FFFFFFE]" (will likely return "E486 Pattern not found") and "[/\U7FFFFFF]" now errors "E1517: Value too large, max Unicode codepoint is U+10FFFF". While this change is straight forward on architectures where long is 8 bytes, this is not so simple on Windows or 32bit architectures where long is 4 bytes (and therefore the test fails there). To account for that, let's make use of the vimlong_T number type and make a few corresponding changes in the regex engine code and cast the value to the expected data type. This however may not work correctly on systems that doesn't have the long long datatype (e.g. OpenVMS) and probably the test will fail there. fixes: #16949 closes: #16994 Signed-off-by: Christian Brabandt --- runtime/doc/pattern.txt | 8 +++++--- runtime/doc/tags | 1 + runtime/doc/vi_diff.txt | 7 +++++-- src/errors.h | 2 ++ src/regexp.c | 12 ++++++------ src/regexp_bt.c | 16 +++++++++++----- src/regexp_nfa.c | 10 +++++++--- src/testdir/test_search.vim | 33 +++++++++++++++++++++++++++++++-- src/version.c | 2 ++ 9 files changed, 70 insertions(+), 21 deletions(-) diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt index f11040c4ec..857a3e6484 100644 --- a/runtime/doc/pattern.txt +++ b/runtime/doc/pattern.txt @@ -1,4 +1,4 @@ -*pattern.txt* For Vim version 9.1. Last change: 2025 Mar 21 +*pattern.txt* For Vim version 9.1. Last change: 2025 Mar 28 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1222,7 +1222,8 @@ x A single character, with no special meaning, matches itself \o40 octal number of character up to 0o377 \x20 hexadecimal number of character up to 0xff \u20AC hex. number of multibyte character up to 0xffff - \U1234 hex. number of multibyte character up to 0xffffffff + \U1234 hex. number of multibyte character up to 8 characters + 0xffffffff |E1541| NOTE: The other backslash codes mentioned above do not work inside []! - Matching with a collection can be slow, because each character in @@ -1263,7 +1264,8 @@ x A single character, with no special meaning, matches itself \%u20AC Matches the character specified with up to four hexadecimal characters. \%U1234abcd Matches the character specified with up to eight hexadecimal - characters, up to 0x7fffffff + characters, up to 0x7fffffff (the maximum allowed value is INT_MAX + |E1541|, but the maximum valid Unicode codepoint is U+10FFFF). ============================================================================== 7. Ignoring case in a pattern */ignorecase* diff --git a/runtime/doc/tags b/runtime/doc/tags index 75b00aae14..7d54ee9b85 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -4621,6 +4621,7 @@ E1538 eval.txt /*E1538* E1539 vim9.txt /*E1539* E154 helphelp.txt /*E154* E1540 eval.txt /*E1540* +E1541 vi_diff.txt /*E1541* E155 sign.txt /*E155* E156 sign.txt /*E156* E157 sign.txt /*E157* diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt index b96f77907c..46db57a458 100644 --- a/runtime/doc/vi_diff.txt +++ b/runtime/doc/vi_diff.txt @@ -1,4 +1,4 @@ -*vi_diff.txt* For Vim version 9.1. Last change: 2024 Nov 10 +*vi_diff.txt* For Vim version 9.1. Last change: 2025 Mar 28 VIM REFERENCE MANUAL by Bram Moolenaar @@ -91,8 +91,11 @@ Maximum display width Unix and Win32: 1024 characters, otherwise 255 Maximum lhs of a mapping 50 characters. Number of different highlighting types: over 30000 Range of a Number variable: -2147483648 to 2147483647 (might be more on 64 - bit systems) + bit systems) See also: |v:numbermax|, + |v:numbermin| and |v:numbersize| Maximum length of a line in a tags file: 512 bytes. + *E1541* +Maximum value for |/\U| and |/\%U|: 2147483647 (for 32bit integer). Information for undo and text in registers is kept in memory, thus when making (big) changes the amount of (virtual) memory available limits the number of diff --git a/src/errors.h b/src/errors.h index 9331484ac5..6e2782df5b 100644 --- a/src/errors.h +++ b/src/errors.h @@ -3716,3 +3716,5 @@ EXTERN char e_variadic_tuple_must_end_with_list_type_str[] EXTERN char e_cannot_use_variadic_tuple_in_concatenation[] INIT(= N_("E1540: Cannot use a variadic tuple in concatenation")); #endif +EXTERN char e_unicode_val_too_large[] + INIT(= N_("E1541: Value too large, max Unicode codepoint is U+10FFFF")); diff --git a/src/regexp.c b/src/regexp.c index ea6079b008..32a721f9f3 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -427,9 +427,9 @@ static void skipchr_keepstart(void); static int peekchr(void); static void skipchr(void); static void ungetchr(void); -static long gethexchrs(int maxinputlen); +static vimlong_T gethexchrs(int maxinputlen); static long getoctchrs(void); -static long getdecchrs(void); +static vimlong_T getdecchrs(void); static int coll_get_char(void); static int prog_magic_wrong(void); static int cstrncmp(char_u *s1, char_u *s2, int *n); @@ -979,7 +979,7 @@ ungetchr(void) * The parameter controls the maximum number of input characters. This will be * 2 when reading a \%x20 sequence and 4 when reading a \%u20AC sequence. */ - static long + static vimlong_T gethexchrs(int maxinputlen) { long_u nr = 0; @@ -998,14 +998,14 @@ gethexchrs(int maxinputlen) if (i == 0) return -1; - return (long)nr; + return nr; } /* * Get and return the value of the decimal string immediately after the * current position. Return -1 for invalid. Consumes all digits. */ - static long + static vimlong_T getdecchrs(void) { long_u nr = 0; @@ -1025,7 +1025,7 @@ getdecchrs(void) if (i == 0) return -1; - return (long)nr; + return nr; } /* diff --git a/src/regexp_bt.c b/src/regexp_bt.c index 16dac730de..f4bd6c36d2 100644 --- a/src/regexp_bt.c +++ b/src/regexp_bt.c @@ -1589,7 +1589,7 @@ regatom(int *flagp) case 'u': // %uabcd hex 4 case 'U': // %U1234abcd hex 8 { - long i; + vimlong_T i; switch (c) { @@ -1612,7 +1612,7 @@ regatom(int *flagp) if (i == 0) regc(0x0a); else - regmbc(i); + regmbc((int)i); regc(NUL); *flagp |= HASWIDTH; break; @@ -1831,6 +1831,10 @@ regatom(int *flagp) || *regparse == 'U') { startc = coll_get_char(); + // max UTF-8 Codepoint is U+10FFFF, + // but allow values until INT_MAX + if (startc == INT_MAX) + EMSG_RET_NULL(_(e_unicode_val_too_large)); if (startc == 0) regc(0x0a); else @@ -2131,7 +2135,7 @@ regpiece(int *flagp) int lop = END; long nr; - nr = getdecchrs(); + nr = (long)getdecchrs(); switch (no_Magic(getchr())) { case '=': lop = MATCH; break; // \@= @@ -2610,7 +2614,7 @@ vim_regcomp_had_eol(void) static int coll_get_char(void) { - long nr = -1; + vimlong_T nr = -1; switch (*regparse++) { @@ -2620,13 +2624,15 @@ coll_get_char(void) case 'u': nr = gethexchrs(4); break; case 'U': nr = gethexchrs(8); break; } - if (nr < 0 || nr > INT_MAX) + if (nr < 0) { // If getting the number fails be backwards compatible: the character // is a backslash. --regparse; nr = '\\'; } + if (nr > INT_MAX) + nr = INT_MAX; return nr; } diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index 557d0e1aac..6ad682bcf8 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -1560,7 +1560,7 @@ nfa_regatom(void) case 'u': // %uabcd hex 4 case 'U': // %U1234abcd hex 8 { - long nr; + vimlong_T nr; switch (c) { @@ -1577,7 +1577,7 @@ nfa_regatom(void) reg_magic == MAGIC_ALL); // A NUL is stored in the text as NL // TODO: what if a composing character follows? - EMIT(nr == 0 ? 0x0a : nr); + EMIT(nr == 0 ? 0x0a : (long)nr); } break; @@ -1953,6 +1953,10 @@ nfa_regatom(void) { // TODO(RE) This needs more testing startc = coll_get_char(); + // max UTF-8 Codepoint is U+10FFFF, + // but allow values until INT_MAX + if (startc == INT_MAX) + EMSG_RET_FAIL(_(e_unicode_val_too_large)); got_coll_char = TRUE; MB_PTR_BACK(old_regparse, regparse); } @@ -2218,7 +2222,7 @@ nfa_regpiece(void) break; case Magic('@'): - c2 = getdecchrs(); + c2 = (long)getdecchrs(); op = no_Magic(getchr()); i = 0; switch(op) diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim index 708aca2a82..75291750f4 100644 --- a/src/testdir/test_search.vim +++ b/src/testdir/test_search.vim @@ -1541,17 +1541,46 @@ func Test_large_hex_chars2() try /[\Ufffffc1f] catch - call assert_match('E486:', v:exception) + call assert_match('E1541:', v:exception) endtry try set re=1 /[\Ufffffc1f] catch - call assert_match('E486:', v:exception) + call assert_match('E1541:', v:exception) endtry set re& endfunc +func Test_large_hex_chars3() + " Validate max number of Unicode char + try + /[\UFFFFFFFF] + catch + call assert_match('E1541:', v:exception) + endtry + try + /[\UFFFFFFF] + catch + call assert_match('E486:', v:exception) + endtry + try + /\%#=2[\d32-\UFFFFFFFF] + catch + call assert_match('E1541:', v:exception) + endtry + try + /\%#=1[\UFFFFFFFF] + catch + call assert_match('E1541:', v:exception) + endtry + try + /\%#=1[\d32-\UFFFFFFFF] + catch + call assert_match('E945:', v:exception) + endtry +endfunc + func Test_one_error_msg() " This was also giving an internal error call assert_fails('call search(" \\((\\v[[=P=]]){185}+ ")', 'E871:') diff --git a/src/version.c b/src/version.c index 7d6c7e3f9b..22357447fa 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1258, /**/ 1257, /**/ From 1054b18291ce611932bc949b22b87b78f1975ca9 Mon Sep 17 00:00:00 2001 From: Aliaksei Budavei <32549825+zzzyxwvut@users.noreply.github.com> Date: Sat, 29 Mar 2025 09:16:30 +0100 Subject: [PATCH 011/633] runtime(java): Make changes for JDK 24 in syntax script - "Demote" SecurityManager from the list of java.lang class types to javaLangDeprecated. - Reintroduce supported syntax-preview-feature numbers 455 and 476 as _new numbers_ 488 and 494, respectively. References: - https://openjdk.org/jeps/486 (Permanently Disable the Security Manager) - https://openjdk.org/jeps/488 (Primitive Types in Patterns etc.) - https://openjdk.org/jeps/494 (Module Import Declarations) closes: #16977 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt --- runtime/doc/syntax.txt | 8 +++---- runtime/syntax/java.vim | 24 ++++++++++++------- .../testdir/dumps/java_previews_455_00.dump | 2 +- .../testdir/input/java_previews_455.java | 2 +- .../testdir/input/setup/java_module_info.vim | 2 +- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index 1a7452f93c..521c6116d8 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2025 Mar 26 +*syntax.txt* For Vim version 9.1. Last change: 2025 Mar 27 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2202,12 +2202,12 @@ cycles for such a feature to become either integrated into the platform or withdrawn from this effort. To cater for early adopters, there is optional support in Vim for syntax related preview features that are implemented. You can request it by specifying a list of preview feature numbers as follows: > - :let g:java_syntax_previews = [455, 476] + :let g:java_syntax_previews = [488, 494] The supported JEP numbers are to be drawn from this table: `430`: String Templates [JDK 21] - `455`: Primitive types in Patterns, instanceof, and switch - `476`: Module Import Declarations + `488`: Primitive types in Patterns, instanceof, and switch + `494`: Module Import Declarations Note that as soon as the particular preview feature will have been integrated into the Java platform, its entry will be removed from the table and related diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim index 9b38ccd4dc..8dabc5e3df 100644 --- a/runtime/syntax/java.vim +++ b/runtime/syntax/java.vim @@ -3,7 +3,7 @@ " Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com> " Former Maintainer: Claudio Fleiner " Repository: https://github.com/zzzyxwvut/java-vim.git -" Last Change: 2025 Jan 02 +" Last Change: 2025 Mar 26 " Please check ":help java.vim" for comments on some of the options " available. @@ -46,8 +46,10 @@ function! s:ff.RightConstant(x, y) abort return a:y endfunction -function! s:ff.IsRequestedPreviewFeature(n) abort - return exists("g:java_syntax_previews") && index(g:java_syntax_previews, a:n) + 1 +function! s:ff.IsAnyRequestedPreviewFeatureOf(ns) abort + return exists("g:java_syntax_previews") && + \ !empty(filter(a:ns, printf('index(%s, v:val) + 1', + \ string(g:java_syntax_previews)))) endfunction if !exists("*s:ReportOnce") @@ -108,7 +110,7 @@ syn keyword javaTypedef this super syn keyword javaOperator new instanceof syn match javaOperator "\\%(\s*(\)\@!" -if s:ff.IsRequestedPreviewFeature(476) +if s:ff.IsAnyRequestedPreviewFeatureOf([476, 494]) " Module imports can be used in any source file. syn match javaExternal "\" contains=javaModuleImport syn keyword javaModuleImport contained module @@ -262,8 +264,12 @@ if exists("g:java_highlight_all") || exists("g:java_highlight_java") || exists(" 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 + " As of JDK 24, SecurityManager is rendered non-functional + " (JDK-8338625). + " (Note that SecurityException and RuntimePermission are still + " not deprecated.) + " As of JDK 21, Compiler is no more (JDK-8205129). + syn keyword javaLangDeprecated Compiler SecurityManager syn cluster javaClasses add=javaC_JavaLang hi def link javaC_JavaLang javaC_Java syn keyword javaE_JavaLang AbstractMethodError ClassCircularityError ClassFormatError Error IllegalAccessError IncompatibleClassChangeError InstantiationError InternalError LinkageError NoClassDefFoundError NoSuchFieldError NoSuchMethodError OutOfMemoryError StackOverflowError ThreadDeath UnknownError UnsatisfiedLinkError VerifyError VirtualMachineError ExceptionInInitializerError UnsupportedClassVersionError AssertionError BootstrapMethodError @@ -311,7 +317,7 @@ endif exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\\)\@' . s:ff.Peek('7', '') . '" matchgroup=NONE end=":\|->" contains=javaBoolean,javaNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaType,javaLabelDefault,javaLabelVarType,javaLabelWhenClause else syn region javaLabelRegion transparent matchgroup=javaLabel start="\" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause @@ -609,7 +615,7 @@ syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaS syn region javaString start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell syn match javaTextBlockError +"""\s*"""+ -if s:ff.IsRequestedPreviewFeature(430) +if s:ff.IsAnyRequestedPreviewFeatureOf([430]) 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' @@ -688,7 +694,7 @@ if exists("g:java_highlight_debug") 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 - if s:ff.IsRequestedPreviewFeature(430) + if s:ff.IsAnyRequestedPreviewFeatureOf([430]) " The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\, " share one colour by default. Do not conflate unrelated parens. syn region javaDebugStrTemplEmbExp contained matchgroup=javaDebugStrTempl start="\\{" end="}" contains=javaComment,javaLineComment,javaDebug\%(Paren\)\@!.* diff --git a/runtime/syntax/testdir/dumps/java_previews_455_00.dump b/runtime/syntax/testdir/dumps/java_previews_455_00.dump index af67913b6f..1a446bc693 100644 --- a/runtime/syntax/testdir/dumps/java_previews_455_00.dump +++ b/runtime/syntax/testdir/dumps/java_previews_455_00.dump @@ -1,4 +1,4 @@ ->/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|s|y|n|t|a|x|_|p|r|e|v|i|e|w|s| |=| |[|4|5@1|]| +0#0000000&@22 +>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|s|y|n|t|a|x|_|p|r|e|v|i|e|w|s| |=| |[|4|5@1|,| |4|8@1|]| +0#0000000&@17 @75 @75 @75 diff --git a/runtime/syntax/testdir/input/java_previews_455.java b/runtime/syntax/testdir/input/java_previews_455.java index b9c2070e1c..ed6430f573 100644 --- a/runtime/syntax/testdir/input/java_previews_455.java +++ b/runtime/syntax/testdir/input/java_previews_455.java @@ -1,4 +1,4 @@ -// VIM_TEST_SETUP let g:java_syntax_previews = [455] +// VIM_TEST_SETUP let g:java_syntax_previews = [455, 488] diff --git a/runtime/syntax/testdir/input/setup/java_module_info.vim b/runtime/syntax/testdir/input/setup/java_module_info.vim index b7b818f822..15dbdc80ab 100644 --- a/runtime/syntax/testdir/input/setup/java_module_info.vim +++ b/runtime/syntax/testdir/input/setup/java_module_info.vim @@ -29,4 +29,4 @@ autocmd_add([{ once: true, }]) -g:java_syntax_previews = [476] +g:java_syntax_previews = [476, 494] From bb8e5ddb970a6739a25746ea195a9c37e4fefd01 Mon Sep 17 00:00:00 2001 From: Yee Cheng Chin Date: Sun, 30 Mar 2025 14:48:29 +0200 Subject: [PATCH 012/633] ci: Check and confirm Vim feature flags exist before testing Vim tests for features such as python3 relies on checking the feature flag exists by doing `has('python3')`. However, if the feature itself is broken and the flag returns 0, the relevant tests will simply silently get ignored and CI will passed erroneously. As a preventive measure, as basic checks to make sure certain feature flags are correct as a basic smoke test. Currently only checking two types of feature flags: 1. Features that depend on system packages being installed properly (e.g. sodium) and could be erroneously dropped if the CI environment changed or a bug exists in the configure script. 2. Scripting languages. When in dynamic mode, these feature flags (e.g. "ruby", "python3") will return 0 when the lib cannot be found or the code has an initialization bug. This happened in #16964 where CI still passed despite Python 3 being broken. closes: #16998 Signed-off-by: Yee Cheng Chin Signed-off-by: Christian Brabandt --- .github/workflows/ci.yml | 17 +++++++++++++++++ Filelist | 1 + ci/if_feat_check.vim | 15 +++++++++++++++ ci/if_ver-1.vim | 4 ++-- ci/if_ver-2.vim | 6 ++++-- 5 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 ci/if_feat_check.vim diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 19eabc477d..2b4a8ccc9c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -266,6 +266,12 @@ jobs: "${SRCDIR}"/vim --version "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit + if ${{ matrix.features == 'huge' }}; then + # Also check that optional and dynamic features are configured and working + "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \ + -c "let g:required=['gettext', 'sodium', 'sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \ + -S ci/if_feat_check.vim -c quit + fi - name: Test if: matrix.architecture != 'arm64' @@ -392,6 +398,12 @@ jobs: "${SRCDIR}"/vim --version "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit + if ${{ matrix.features == 'huge' }}; then + # Also check that optional and dynamic features are configured and working + "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \ + -c "let g:required=['sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \ + -S ci/if_feat_check.vim -c quit + fi - name: Install packages for testing run: | @@ -663,6 +675,11 @@ jobs: src\vim --version || exit 1 src\vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit src\vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit + if "${{ matrix.features }}"=="HUGE" ( + src\vim -u NONE -i NONE --not-a-term -esNX -V1 ^ + -c "let g:required=['gettext', 'sodium', 'sound', 'python3', 'lua']" ^ + -S ci/if_feat_check.vim -c quit + ) ) #- name: Prepare Artifact diff --git a/Filelist b/Filelist index 7302788fea..4067df5081 100644 --- a/Filelist +++ b/Filelist @@ -23,6 +23,7 @@ SRC_ALL = \ ci/appveyor.bat \ ci/config.mk*.sed \ ci/if_ver*.vim \ + ci/if_feat_check.vim \ ci/setup-xvfb.sh \ ci/remove_snap.sh \ src/Make_all.mak \ diff --git a/ci/if_feat_check.vim b/ci/if_feat_check.vim new file mode 100644 index 0000000000..f846f7cbf8 --- /dev/null +++ b/ci/if_feat_check.vim @@ -0,0 +1,15 @@ +if 1 " This prevents it from being run in tiny versions + " Check for required features + if exists("g:required") + for feature in g:required + if !has(feature) + echo "Error: Feature '" .. feature .. "' not found" + echo '' + cquit + endif + endfor + echo "\nChecked features: " .. string(g:required) + echo '' + endif +endif +" vim: sts=2 sw=2 et diff --git a/ci/if_ver-1.vim b/ci/if_ver-1.vim index adc40a7cb0..397c05a456 100644 --- a/ci/if_ver-1.vim +++ b/ci/if_ver-1.vim @@ -1,6 +1,6 @@ -" Print all interface versions for Ubuntu. Part 1. +" Print all interface versions. Part 1. -if 1 +if 1 " This prevents it from being run in tiny versions execute 'source' expand(':h') .. '/if_ver-cmd.vim' echo "*** Interface versions ***\n" diff --git a/ci/if_ver-2.vim b/ci/if_ver-2.vim index 83e80e48ff..f717ec1e56 100644 --- a/ci/if_ver-2.vim +++ b/ci/if_ver-2.vim @@ -1,6 +1,8 @@ -" Print py3 interface versions for Ubuntu. Part 2. +" Print py3 interface versions. Part 2. +" This is done separately from part 1 because Vim cannot concurrently load +" Python 2 and 3 together. -if 1 +if 1 " This prevents it from being run in tiny versions execute 'source' expand(':h') .. '/if_ver-cmd.vim' echo 'Python 3:' From a580761a452a3c4aea8af6d7efb1edc373d303b4 Mon Sep 17 00:00:00 2001 From: Maxim Kim Date: Sun, 30 Mar 2025 14:55:26 +0200 Subject: [PATCH 013/633] patch 9.1.1259: some issues with comment package and tailing spaces Problem: some issues with comment package and tailing spaces Solution: correctly capture trailing spaces with the ac/ic text object (Maxim Kim) This commit fixes a few issues with the comment package: 1) both ac and ic incorrectly miss the last // ``` // hello trailing spaces // ``` 2) fix ac/ic with last empty comment line, vac should also select last line with # ```py # print("hello") # print("world") # # $endofbuffer$ ``` closes: #17013 Signed-off-by: Maxim Kim Signed-off-by: Christian Brabandt --- .../dist/opt/comment/autoload/comment.vim | 12 ++-- src/testdir/test_plugin_comment.vim | 66 +++++++++++++++++++ src/version.c | 2 + 3 files changed, 74 insertions(+), 6 deletions(-) diff --git a/runtime/pack/dist/opt/comment/autoload/comment.vim b/runtime/pack/dist/opt/comment/autoload/comment.vim index 570080604c..183351d19d 100644 --- a/runtime/pack/dist/opt/comment/autoload/comment.vim +++ b/runtime/pack/dist/opt/comment/autoload/comment.vim @@ -1,7 +1,7 @@ vim9script # Maintainer: Maxim Kim -# Last Update: 2025 Mar 21 +# Last Update: 2025-03-30 # # Toggle comments # Usage: @@ -107,8 +107,8 @@ export def ObjComment(inner: bool) # Search for the beginning of the comment block if IsComment() - if search('\v%(\S+)|$', 'bW', 0, 200, IsComment) > 0 - search('\v%(\S)|$', 'W', 0, 200, () => !IsComment()) + if search('\v%(\S+)|%(^\s*$)', 'bW', 0, 200, IsComment) > 0 + search('\v%(\S)|%(^\s*$)', 'W', 0, 200, () => !IsComment()) else cursor(1, 1) search('\v\S+', 'cW', 0, 200) @@ -130,11 +130,11 @@ export def ObjComment(inner: bool) if pos_init[1] > pos_start[1] cursor(pos_init[1], pos_init[2]) endif - if search('\v%(\S+)|$', 'W', 0, 200, IsComment) > 0 + if search('\v%(\S+)|%(^\s*$)', 'W', 0, 200, IsComment) > 0 search('\S', 'beW', 0, 200, () => !IsComment()) else if search('\%$', 'W', 0, 200) > 0 - search('\ze\S', 'beW', 0, 200, () => !IsComment()) + search('\ze\S', 'beW', line('.'), 200, () => !IsComment()) endif endif @@ -144,7 +144,7 @@ export def ObjComment(inner: bool) var spaces = matchstr(getline(pos_end[1]), '\%>.c\s*') pos_end[2] += spaces->len() if getline(pos_end[1])[pos_end[2] : ] =~ '^\s*$' - && (pos_start[2] == 1 || getline(pos_start[1])[ : pos_start[2]] =~ '^\s*$') + && (pos_start[2] <= 1 || getline(pos_start[1])[ : pos_start[2]] =~ '^\s*$') if search('\v\s*\_$(\s*\n)+', 'eW', 0, 200) > 0 pos_end = getcurpos() endif diff --git a/src/testdir/test_plugin_comment.vim b/src/testdir/test_plugin_comment.vim index 1068c84f91..992a4f1b51 100644 --- a/src/testdir/test_plugin_comment.vim +++ b/src/testdir/test_plugin_comment.vim @@ -485,6 +485,72 @@ func Test_textobj_noleading_space_comment2() call assert_equal(["int main() {", "}"], result) endfunc +func Test_textobj_trailing_spaces_comment() + CheckScreendump + let lines = ['# print("hello") ', '# print("world") ', "#", 'print("!")'] + + let input_file = "test_textobj_trailing_spaces_input.py" + call writefile(lines, input_file, "D") + + let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {}) + + call term_sendkeys(buf, "jdac") + let output_file = "comment_textobj_trailing_spaces_comment.py" + call term_sendkeys(buf, $":w {output_file}\") + defer delete(output_file) + + call StopVimInTerminal(buf) + + let result = readfile(output_file) + + call assert_equal(['print("!")'], result) +endfunc + +func Test_textobj_trailing_spaces_last_comment() + CheckScreendump + let lines = ['# print("hello") ', '# print("world") ', "#", '', ''] + + let input_file = "test_textobj_trailing_spaces_last_input.py" + call writefile(lines, input_file, "D") + + let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {}) + + call term_sendkeys(buf, "jdac") + let output_file = "comment_textobj_trailing_spaces_last_comment.py" + call term_sendkeys(buf, $":w {output_file}\") + defer delete(output_file) + + call StopVimInTerminal(buf) + + let result = readfile(output_file) + + call assert_equal([], result) +endfunc + +func Test_textobj_last_line_empty_comment() + CheckScreendump + let lines =<< trim END + # print("hello") + # + # + END + + let input_file = "test_textobj_last_line_empty_input.py" + call writefile(lines, input_file, "D") + + let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {}) + + call term_sendkeys(buf, "dac") + let output_file = "comment_textobj_last_line_empty_comment.py" + call term_sendkeys(buf, $":w {output_file}\") + defer delete(output_file) + + call StopVimInTerminal(buf) + + let result = readfile(output_file) + + call assert_equal([], result) +endfunc func Test_textobj_cursor_on_leading_space_comment() CheckScreendump let lines =<< trim END diff --git a/src/version.c b/src/version.c index 22357447fa..e28782b3a4 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1259, /**/ 1258, /**/ From e9a369f9c3893846cb720905d171b6774b1d658b Mon Sep 17 00:00:00 2001 From: Maxim Kim Date: Sun, 30 Mar 2025 15:00:00 +0200 Subject: [PATCH 014/633] runtime(odin): add new keywords to syntax script closes: #17012 Signed-off-by: Maxim Kim Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 1 + runtime/syntax/odin.vim | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index f0d11a38fe..1c0861b29e 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -562,6 +562,7 @@ runtime/syntax/ninja.vim @nico runtime/syntax/nix.vim @equill runtime/syntax/nroff.vim @jmarshall runtime/syntax/nsis.vim @k-takata +runtime/syntax/odin.vim @habamax runtime/syntax/omnimark.vim @kennypete runtime/syntax/ondir.vim @jparise runtime/syntax/opencl.vim @Freed-Wu diff --git a/runtime/syntax/odin.vim b/runtime/syntax/odin.vim index 6bf06f69e7..7f6b0ba654 100644 --- a/runtime/syntax/odin.vim +++ b/runtime/syntax/odin.vim @@ -1,24 +1,25 @@ vim9script -# Vim indent plugin file +# Vim syntax file # Language: Odin # Maintainer: Maxim Kim # Website: https://github.com/habamax/vim-odin -# Last Change: 2024-01-15 +# Last Change: 2025-03-28 if exists("b:current_syntax") finish endif -syntax keyword odinKeyword using transmute cast distinct opaque where dynamic +syntax keyword odinKeyword using transmute cast auto_cast distinct opaque where dynamic syntax keyword odinKeyword struct enum union const bit_field bit_set syntax keyword odinKeyword package proc map import export foreign syntax keyword odinKeyword size_of offset_of type_info_of typeid_of type_of align_of syntax keyword odinKeyword return defer -syntax keyword odinKeyword or_return or_else syntax keyword odinKeyword inline no_inline +syntax keyword odinKeyword asm context -syntax keyword odinConditional if when else do for switch case continue break +syntax keyword odinConditional if when else do for switch case fallthrough +syntax keyword odinConditional continue or_continue break or_break or_return or_else syntax keyword odinType string cstring bool b8 b16 b32 b64 rune any rawptr syntax keyword odinType f16 f32 f64 f16le f16be f32le f32be f64le f64be syntax keyword odinType u8 u16 u32 u64 u128 u16le u32le u64le u128le u16be From 53fed23cb7bd59d9400961b44c6c8dca0029c929 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sun, 30 Mar 2025 15:01:56 +0200 Subject: [PATCH 015/633] patch 9.1.1260: Hang when filtering buffer with NUL bytes Problem: Hang when filtering buffer with NUL bytes (after 9.1.1050). Solution: Don't subtract "written" from "lplen" repeatedly (zeertzjq). related: neovim/neovim#33173 closes: #17011 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/os_unix.c | 9 ++++----- src/testdir/test_shell.vim | 14 ++++++++++++++ src/version.c | 2 ++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/os_unix.c b/src/os_unix.c index 95b21d297d..dc08408de6 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -5260,14 +5260,13 @@ mch_call_shell_fork( else if (wpid == 0) // child { linenr_T lnum = curbuf->b_op_start.lnum; - int written = 0; + size_t written = 0; char_u *lp = ml_get(lnum); size_t lplen = (size_t)ml_get_len(lnum); close(fromshell_fd); for (;;) { - lplen -= written; if (lplen == 0) len = 0; else if (lp[written] == NL) @@ -5278,10 +5277,10 @@ mch_call_shell_fork( char_u *s = vim_strchr(lp + written, NL); len = write(toshell_fd, (char *)lp + written, - s == NULL ? lplen + s == NULL ? lplen - written : (size_t)(s - (lp + written))); } - if (len == (int)lplen) + if (len == (int)(lplen - written)) { // Finished a line, add a NL, unless this line // should not have one. @@ -5305,7 +5304,7 @@ mch_call_shell_fork( written = 0; } else if (len > 0) - written += len; + written += (size_t)len; } _exit(0); } diff --git a/src/testdir/test_shell.vim b/src/testdir/test_shell.vim index 2ac559676f..667b158ce8 100644 --- a/src/testdir/test_shell.vim +++ b/src/testdir/test_shell.vim @@ -299,4 +299,18 @@ func Test_shell_no_prevcmd() call delete('Xtestdone') endfunc +func Test_shell_filter_buffer_with_nul_bytes() + CheckUnix + new + set noshelltemp + " \n is a NUL byte + let lines = ["aaa\nbbb\nccc\nddd\neee", "fff\nggg\nhhh\niii\njjj"] + call setline(1, lines) + %!cat + call assert_equal(lines, getline(1, '$')) + + set shelltemp& + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index e28782b3a4..d0fdb65289 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1260, /**/ 1259, /**/ From 649a237bc886a2b702e95d5d45f661d8db6025f8 Mon Sep 17 00:00:00 2001 From: James McCoy Date: Sun, 30 Mar 2025 15:05:46 +0200 Subject: [PATCH 016/633] runtime(debversions): Add release name for Debian 15 - duke https://lists.debian.org/debian-devel-announce/2025/01/msg00004.html closes: #17010 Signed-off-by: James McCoy Signed-off-by: Christian Brabandt --- runtime/syntax/shared/debversions.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/syntax/shared/debversions.vim b/runtime/syntax/shared/debversions.vim index 404a0a49e3..644fb22924 100644 --- a/runtime/syntax/shared/debversions.vim +++ b/runtime/syntax/shared/debversions.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: Debian version information " Maintainer: Debian Vim Maintainers -" Last Change: 2024 Nov 04 +" Last Change: 2025 Mar 29 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/shared/debversions.vim let s:cpo = &cpo @@ -9,7 +9,7 @@ set cpo-=C let g:debSharedSupportedVersions = [ \ 'oldstable', 'stable', 'testing', 'unstable', 'experimental', 'sid', 'rc-buggy', - \ 'bullseye', 'bookworm', 'trixie', 'forky', + \ 'bullseye', 'bookworm', 'trixie', 'forky', 'duke', \ \ 'focal', 'jammy', 'noble', 'oracular', 'plucky', \ 'devel' From c6336acfe3e80904458d7ea735929b4c91346702 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sun, 30 Mar 2025 15:07:35 +0200 Subject: [PATCH 017/633] patch 9.1.1261: No test for 'pummaxwidth' non-truncated items Problem: No test for 'pummaxwidth' non-truncated items (after v9.1.1250) Solution: Add shorter items to Test_pum_maxwidth_multibyte() (zeertzjq). closes: #17007 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/testdir/dumps/Test_pum_maxwidth_05.dump | 4 ++-- src/testdir/dumps/Test_pum_maxwidth_06.dump | 4 ++-- src/testdir/dumps/Test_pum_maxwidth_07.dump | 4 ++-- src/testdir/dumps/Test_pum_maxwidth_08.dump | 4 ++-- src/testdir/test_popup.vim | 2 ++ src/version.c | 2 ++ 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/testdir/dumps/Test_pum_maxwidth_05.dump b/src/testdir/dumps/Test_pum_maxwidth_05.dump index 0dd6a39370..b5765bc035 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_05.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_05.dump @@ -1,8 +1,8 @@ |1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 |1+0#0000001#e0e0e08|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_| | +0#4040ff13#ffffff0@43 |一*0#0000001#ffd7ff255|二|三|四|五|六|七|八|九|十| +&@10| +0#4040ff13#ffffff0@43 -|~| @73 -|~| @73 +|a+0#0000001#ffd7ff255|b|c|d|e|f|g|h|i|j| @20| +0#4040ff13#ffffff0@43 +|上*0#0000001#ffd7ff255|下|左|右| +&@22| +0#4040ff13#ffffff0@43 |~| @73 |~| @73 |~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_06.dump b/src/testdir/dumps/Test_pum_maxwidth_06.dump index 7321870ebe..abc6bdf22b 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_06.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_06.dump @@ -1,8 +1,8 @@ |1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 |1+0#0000001#e0e0e08|2|3|4|5|6|7|.@2| +0#4040ff13#ffffff0@64 |一*0#0000001#ffd7ff255|二|三| +&|.@2| +0#4040ff13#ffffff0@64 -|~| @73 -|~| @73 +|a+0#0000001#ffd7ff255|b|c|d|e|f|g|h|i|j| +0#4040ff13#ffffff0@64 +|上*0#0000001#ffd7ff255|下|左|右| +&@1| +0#4040ff13#ffffff0@64 |~| @73 |~| @73 |~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_07.dump b/src/testdir/dumps/Test_pum_maxwidth_07.dump index 8e81d31b9e..acdaa39dbc 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_07.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_07.dump @@ -1,8 +1,8 @@ | +0&#ffffff0@43> |_|9|8|7|6|5|4|3|2|1|_|9|8|7|6|5|4|3|2|1|_|9|8|7|6|5|4|3|2|1 | +0#4040ff13&@64|.+0#0000001#e0e0e08@2|7|6|5|4|3|2|1 | +0#4040ff13#ffffff0@64|.+0#0000001#ffd7ff255@2| |三*&|二|一 +| +0#4040ff13#ffffff0@64|j+0#0000001#ffd7ff255|i|h|g|f|e|d|c|b|a +| +0#4040ff13#ffffff0@64| +0#0000001#ffd7ff255@1|右*&|左|下|上 | +0#4040ff13#ffffff0@73|~ | @73|~ | @73|~ -| @73|~ -| @73|~ diff --git a/src/testdir/dumps/Test_pum_maxwidth_08.dump b/src/testdir/dumps/Test_pum_maxwidth_08.dump index 8681e5f69f..3c6ae5124e 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_08.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_08.dump @@ -1,8 +1,8 @@ |1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 |1+0#0000001#e0e0e08|2| +0#4040ff13#ffffff0@72 |一*0#0000001#ffd7ff255| +0#4040ff13#ffffff0@72 -|~| @73 -|~| @73 +|a+0#0000001#ffd7ff255|b| +0#4040ff13#ffffff0@72 +|上*0#0000001#ffd7ff255| +0#4040ff13#ffffff0@72 |~| @73 |~| @73 |~| @73 diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index e95465c2d4..e216a6d586 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -2036,6 +2036,8 @@ func Test_pum_maxwidth_multibyte() return [ \ #{word: "123456789_123456789_123456789_"}, \ #{word: "一二三四五六七八九十"}, + \ #{word: "abcdefghij"}, + \ #{word: "上下左右"}, \ ] endfunc set omnifunc=Omni_test diff --git a/src/version.c b/src/version.c index d0fdb65289..4be2967b6f 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1261, /**/ 1260, /**/ From f13c8561544dad4f82b7f4f71041d35f55b5feaa Mon Sep 17 00:00:00 2001 From: Hirohito Higashi Date: Sun, 30 Mar 2025 15:19:05 +0200 Subject: [PATCH 018/633] patch 9.1.1262: heap-buffer-overflow with narrow 'pummaxwidth' value Problem: heap-buffer-overflow occurs with narrow 'pummaxwidth' value (after v9.1.1250) Solution: test that st_end points after st pointer (Hirohito Higashi) closes: #17005 Signed-off-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- src/popupmenu.c | 2 +- .../Test_pum_maxwidth_with_many_items_01.dump | 8 +++ .../Test_pum_maxwidth_with_many_items_02.dump | 8 +++ .../Test_pum_maxwidth_with_many_items_03.dump | 8 +++ .../Test_pum_maxwidth_with_many_items_04.dump | 8 +++ .../Test_pum_maxwidth_with_many_items_05.dump | 8 +++ .../Test_pum_maxwidth_with_many_items_06.dump | 8 +++ .../Test_pum_maxwidth_with_many_items_07.dump | 8 +++ .../Test_pum_maxwidth_with_many_items_08.dump | 8 +++ src/testdir/test_popup.vim | 63 +++++++++++++++++++ src/version.c | 2 + 11 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_01.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_02.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_03.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_04.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_05.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_06.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_07.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_08.dump diff --git a/src/popupmenu.c b/src/popupmenu.c index 71bb499845..a7c20c101b 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -845,7 +845,7 @@ pum_redraw(void) last_char = st_end; } - if (last_char != NULL) + if (last_char != NULL && st_end > st) { if (used_cells < ellipsis_width) { diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_01.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_01.dump new file mode 100644 index 0000000000..6453b70c2a --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_01.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|o@1|M|e|n|u| | +0#4040ff13#ffffff0@54 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|a|r|M|e|n|u| | +0#4040ff13#ffffff0@54 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|a|z|M|e|n|u| | +0#4040ff13#ffffff0@54 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_02.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_02.dump new file mode 100644 index 0000000000..e8d9d97844 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_02.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|o@1|M|e|n|u| +0#4040ff13#ffffff0@55 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|a|r|M|e|n|u| +0#4040ff13#ffffff0@55 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|a|z|M|e|n|u| +0#4040ff13#ffffff0@55 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_03.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_03.dump new file mode 100644 index 0000000000..f31cda1e53 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_03.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|o@1|.@2| +0#4040ff13#ffffff0@56 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|a|r|.@2| +0#4040ff13#ffffff0@56 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|a|z|.@2| +0#4040ff13#ffffff0@56 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_04.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_04.dump new file mode 100644 index 0000000000..f6f22b134e --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_04.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|.@2| +0#4040ff13#ffffff0@58 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|.@2| +0#4040ff13#ffffff0@58 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|.@2| +0#4040ff13#ffffff0@58 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_05.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_05.dump new file mode 100644 index 0000000000..1002ef385d --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_05.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|o@1| +0#4040ff13#ffffff0@59 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|a|r| +0#4040ff13#ffffff0@59 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|a|z| +0#4040ff13#ffffff0@59 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_06.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_06.dump new file mode 100644 index 0000000000..a9a63a6fe7 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_06.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| | +0#4040ff13#ffffff0@62 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| | +0#4040ff13#ffffff0@62 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| | +0#4040ff13#ffffff0@62 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_07.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_07.dump new file mode 100644 index 0000000000..12091b438e --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_07.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|.@2| +0#4040ff13#ffffff0@64 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|.@2| +0#4040ff13#ffffff0@64 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|.@2| +0#4040ff13#ffffff0@64 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_08.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_08.dump new file mode 100644 index 0000000000..01c3e7d25b --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_08.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08| +0#4040ff13#ffffff0@73 +|b+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@73 +|b+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index e216a6d586..445a2befc8 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -2070,4 +2070,67 @@ func Test_pum_maxwidth_multibyte() call StopVimInTerminal(buf) endfunc +func Test_pum_maxwidth_with_many_items() + CheckScreendump + + let lines =<< trim END + func Omni_test(findstart, base) + if a:findstart + return col(".") + endif + return [ + \ #{word: "foo", menu: "fooMenu", kind: "fooKind"}, + \ #{word: "bar", menu: "barMenu", kind: "barKind"}, + \ #{word: "baz", menu: "bazMenu", kind: "bazKind"}, + \ ] + endfunc + set omnifunc=Omni_test + END + call writefile(lines, 'Xtest', 'D') + let buf = RunVimInTerminal('-S Xtest', {}) + call TermWait(buf) + + call term_sendkeys(buf, ":set pummaxwidth=20\") + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_01', {'rows': 8}) + call term_sendkeys(buf, "\") + + call term_sendkeys(buf, ":set pummaxwidth=19\") + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_02', {'rows': 8}) + call term_sendkeys(buf, "\") + + call term_sendkeys(buf, ":set pummaxwidth=18\") " display Ellipsis + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_03', {'rows': 8}) + call term_sendkeys(buf, "\") + + call term_sendkeys(buf, ":set pummaxwidth=16\") " display Ellipsis + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_04', {'rows': 8}) + call term_sendkeys(buf, "\") + + call term_sendkeys(buf, ":set pummaxwidth=15\") + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_05', {'rows': 8}) + call term_sendkeys(buf, "\") + + call term_sendkeys(buf, ":set pummaxwidth=12\") + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_06', {'rows': 8}) + call term_sendkeys(buf, "\") + + call term_sendkeys(buf, ":set pummaxwidth=10\") " display Ellipsis + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_07', {'rows': 8}) + call term_sendkeys(buf, "\") + + call term_sendkeys(buf, ":set pummaxwidth=1\") + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_08', {'rows': 8}) + call term_sendkeys(buf, "\") + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 4be2967b6f..ec6acb6105 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1262, /**/ 1261, /**/ From 583f5aee96940c29ba17ffb87f1ddf56741b72ba Mon Sep 17 00:00:00 2001 From: Christ van Willegen Date: Sun, 30 Mar 2025 15:26:01 +0200 Subject: [PATCH 019/633] patch 9.1.1263: string length wrong in get_last_inserted_save() Problem: string length wrong in get_last_inserted_save() (after v9.1.1222) Solution: when removing trailing ESC, also decrease the string length (Christ van Willegen) closes: #16961 Signed-off-by: Christ van Willegen Signed-off-by: Christian Brabandt --- src/edit.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/edit.c b/src/edit.c index a2a004c124..3fa95cdb05 100644 --- a/src/edit.c +++ b/src/edit.c @@ -3022,7 +3022,7 @@ get_last_insert_save(void) return NULL; if (insert.length > 0 && s[insert.length - 1] == ESC) // remove trailing ESC - s[insert.length - 1] = NUL; + s[--insert.length] = NUL; return s; } diff --git a/src/version.c b/src/version.c index ec6acb6105..75cbd635dc 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1263, /**/ 1262, /**/ From 1c2f475850d94da26d77dc3cd8c85620edda3dce Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sun, 30 Mar 2025 15:37:24 +0200 Subject: [PATCH 020/633] runtime(doc): Update the tuple help text closes: #17009 Co-authored-by: Hirohito Higashi Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- runtime/doc/builtin.txt | 4 ++-- runtime/doc/eval.txt | 14 ++++++++++++-- runtime/doc/tags | 1 + runtime/doc/usr_41.txt | 4 ++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index b903b3887b..5a72e214f3 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -1,4 +1,4 @@ -*builtin.txt* For Vim version 9.1. Last change: 2025 Mar 26 +*builtin.txt* For Vim version 9.1. Last change: 2025 Mar 30 VIM REFERENCE MANUAL by Bram Moolenaar @@ -11923,7 +11923,7 @@ trunc({expr}) *trunc()* Return type: |Float| -tuple2list({list}) *tuple2list()* +tuple2list({tuple}) *tuple2list()* Create a List from a shallow copy of the tuple items. Examples: > tuple2list((1, 2, 3)) returns [1, 2, 3] diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index bcd64e30aa..7ea768aef5 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 9.1. Last change: 2025 Mar 23 +*eval.txt* For Vim version 9.1. Last change: 2025 Mar 30 VIM REFERENCE MANUAL by Bram Moolenaar @@ -541,7 +541,8 @@ example, to add up all the numbers in a list: > A Tuple is an ordered sequence of items. An item can be of any type. Items can be accessed by their index number. A Tuple is immutable. -A Tuple uses less memory compared to a List and provides O(1) lookup time. +A Tuple is similar to a List but uses less memory and provides O(1) lookup +time for an item. Tuple creation ~ *E1526* *E1527* @@ -579,6 +580,15 @@ is not available it returns zero or the default value you specify: > :echo get(mytuple, idx, "NONE") +Tuple modification ~ + *tuple-modification* +A tuple is immutable and items cannot be added or removed from a tuple. But +List and Dict items within a tuple can be modified: > + :let tuple = (1, [2, 3], {'a': 4}) + :let tuple[1][0] = 10 + :let tuple[2]['a'] = 20 + + Tuple concatenation ~ *tuple-concatenation* Two tuples can be concatenated with the "+" operator: > diff --git a/runtime/doc/tags b/runtime/doc/tags index 7d54ee9b85..fa4709224c 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -10937,6 +10937,7 @@ tuple-concatenation eval.txt /*tuple-concatenation* tuple-functions usr_41.txt /*tuple-functions* tuple-identity eval.txt /*tuple-identity* tuple-index eval.txt /*tuple-index* +tuple-modification eval.txt /*tuple-modification* tuple-type vim9.txt /*tuple-type* tuple2list() builtin.txt /*tuple2list()* tutor usr_01.txt /*tutor* diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt index 4c5e5ef4c6..8279e3e999 100644 --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -1,4 +1,4 @@ -*usr_41.txt* For Vim version 9.1. Last change: 2025 Mar 23 +*usr_41.txt* For Vim version 9.1. Last change: 2025 Mar 30 VIM USER MANUAL - by Bram Moolenaar @@ -862,7 +862,7 @@ Tuple manipulation: *tuple-functions* reverse() reverse the order of items in a Tuple slice() take a slice of a Tuple string() string representation of a Tuple - tuple2list() convert a Tuple of items into a list + tuple2list() convert a Tuple into a List Dictionary manipulation: *dict-functions* get() get an entry without an error for a wrong key From 20393bc02dcbb14fd3238cd4ad5ef455e817e0c5 Mon Sep 17 00:00:00 2001 From: Hirohito Higashi Date: Sun, 30 Mar 2025 15:39:41 +0200 Subject: [PATCH 021/633] runtime(doc): update last change date for diff.txt related: #16997 Signed-off-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- runtime/doc/diff.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt index 069a853bdd..81564664eb 100644 --- a/runtime/doc/diff.txt +++ b/runtime/doc/diff.txt @@ -1,4 +1,4 @@ -*diff.txt* For Vim version 9.1. Last change: 2024 Mar 28 +*diff.txt* For Vim version 9.1. Last change: 2025 Mar 28 VIM REFERENCE MANUAL by Bram Moolenaar From b1d6db0be5cc4cd47c5cdac01e5d782a13243f31 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Mon, 31 Mar 2025 20:35:44 +0200 Subject: [PATCH 022/633] patch 9.1.1264: Vim9: error when comparing objects Problem: Vim9: error when comparing objects (lifepillar) Solution: When comparing object types, compare their classes (Yegappan Lakshmanan) fixes: #17014 closes: #17018 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/testdir/test_vim9_class.vim | 40 +++++++++++++++++++++++++++++++++ src/version.c | 2 ++ src/vim9type.c | 6 +++-- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index 1e63f22df9..30a03cf310 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -12481,4 +12481,44 @@ def Test_super_keyword() v9.CheckSourceSuccess(lines) enddef +" Test for using a list of objects +def Test_method_call_from_list_of_objects() + var lines =<< trim END + vim9script + + class C + def F(): string + return 'C.F' + enddef + endclass + + class D + var x: string + def new(this.x) + enddef + def F(): string + return 'D.F' + enddef + endclass + + var obj1 = C.new() + var obj2 = D.new('a') + + def CheckObjectList() + var items = [obj1, obj2] + assert_equal('list', typename(items)) + assert_equal('C.F', items[0].F()) + assert_equal('D.F', items[1].F()) + enddef + + CheckObjectList() + + var items2 = [obj1, obj2] + assert_equal('list', typename(items2)) + assert_equal('C.F', items2[0].F()) + assert_equal('D.F', items2[1].F()) + END + v9.CheckSourceSuccess(lines) +enddef + " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/version.c b/src/version.c index 75cbd635dc..67affb2e18 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1264, /**/ 1263, /**/ diff --git a/src/vim9type.c b/src/vim9type.c index abf4daf0f3..03a391a17c 100644 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -1984,10 +1984,12 @@ equal_type(type_T *type1, type_T *type2, int flags) case VAR_JOB: case VAR_CHANNEL: case VAR_INSTR: - case VAR_CLASS: - case VAR_OBJECT: case VAR_TYPEALIAS: break; // not composite is always OK + case VAR_OBJECT: + case VAR_CLASS: + // Objects are considered equal if they are from the same class + return type1->tt_class == type2->tt_class; case VAR_LIST: case VAR_DICT: return equal_type(type1->tt_member, type2->tt_member, flags); From 4ac995bf9366c6624a0724d19b2226f4c95694b3 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Mon, 31 Mar 2025 20:45:26 +0200 Subject: [PATCH 023/633] runtime(rust): set formatprg to rustfmt closes: #16967 Signed-off-by: Konfekt Signed-off-by: Christian Brabandt --- runtime/autoload/rustfmt.vim | 7 ++++--- runtime/ftplugin/rust.vim | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/runtime/autoload/rustfmt.vim b/runtime/autoload/rustfmt.vim index 8fd3858178..f325df2fda 100644 --- a/runtime/autoload/rustfmt.vim +++ b/runtime/autoload/rustfmt.vim @@ -1,5 +1,6 @@ " Author: Stephen Sugden " Last Modified: 2023-09-11 +" Last Change: 2025 Mar 31 by Vim project (rename s:RustfmtConfigOptions()) " " Adapted from https://github.com/fatih/vim-go " For bugs, patches and license go to https://github.com/rust-lang/rust.vim @@ -61,7 +62,7 @@ function! s:RustfmtWriteMode() endif endfunction -function! s:RustfmtConfigOptions() +function! rustfmt#RustfmtConfigOptions() let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';') if l:rustfmt_toml !=# '' return '--config-path '.shellescape(fnamemodify(l:rustfmt_toml, ":p")) @@ -84,7 +85,7 @@ function! s:RustfmtCommandRange(filename, line1, line2) let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]} let l:write_mode = s:RustfmtWriteMode() - let l:rustfmt_config = s:RustfmtConfigOptions() + let l:rustfmt_config = rustfmt#RustfmtConfigOptions() " FIXME: When --file-lines gets to be stable, add version range checking " accordingly. @@ -99,7 +100,7 @@ endfunction function! s:RustfmtCommand() let write_mode = g:rustfmt_emit_files ? '--emit=stdout' : '--write-mode=display' - let config = s:RustfmtConfigOptions() + let config = rustfmt#RustfmtConfigOptions() return join([g:rustfmt_command, write_mode, config, g:rustfmt_options]) endfunction diff --git a/runtime/ftplugin/rust.vim b/runtime/ftplugin/rust.vim index 3e2741f919..53f7f83363 100644 --- a/runtime/ftplugin/rust.vim +++ b/runtime/ftplugin/rust.vim @@ -3,6 +3,7 @@ " Maintainer: Chris Morgan " Last Change: 2024 Mar 17 " 2024 May 23 by Riley Bruins + autocmd ShellFilterPost if v:shell_error | execute 'echom "shell filter returned error " . v:shell_error . ", undoing changes"' | undo | endif + augroup END + endif + + let &l:formatprg = get(g:, 'rustfmt_command', 'rustfmt') . ' ' . + \ get(g:, 'rustfmt_options', '') . ' ' . + \ rustfmt#RustfmtConfigOptions() +endif + if exists("g:ftplugin_rust_source_path") let &l:path=g:ftplugin_rust_source_path . ',' . &l:path endif @@ -149,7 +163,7 @@ endif let b:undo_ftplugin = " \ compiler make | - \ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd< + \ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd< formatprg< \|if exists('b:rust_set_style') \|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth< \|endif From 71f17fdd5f7bb05d78876b4db297824054377363 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Mon, 31 Mar 2025 20:57:13 +0200 Subject: [PATCH 024/633] patch 9.1.1265: tests: no tests for typing normal char during completion Problem: tests: no tests for typing normal char during completion Solution: add a test verifying the default behaviour (see :h popupmenu-completion) related: #17019 Co-authored-by: Girish Palya Signed-off-by: Christian Brabandt --- src/testdir/test_ins_complete.vim | 29 +++++++++++++++++++++++++++++ src/version.c | 2 ++ 2 files changed, 31 insertions(+) diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 7b180a64e4..50b1834691 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -3387,4 +3387,33 @@ func Test_complete_multiline_marks() delfunc Omni_test endfunc +func Test_complete_append_selected_match_default() + " when typing a normal character during completion, + " completion is ended, see + " :h popupmenu-completion ("There are three states:") + func PrintMenuWords() + let info = complete_info(["selected", "matches"]) + call map(info.matches, {_, v -> v.word}) + return info + endfunc + + new + call setline(1, ["fo", "foo", "foobar", "fobarbaz"]) + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo'', ''foo'', ''foobar'', ''fobarbaz''], ''selected'': 0}', getline(5)) + %d + call setline(1, ["fo", "foo", "foobar", "fobarbaz"]) + exe "normal! Gof\o\=PrintMenuWords()\" + call assert_equal('foo{''matches'': [], ''selected'': -1}', getline(5)) + %d + set completeopt=menu,noselect + call setline(1, ["fo", "foo", "foobar", "fobarbaz"]) + exe "normal! Gof\\o\=PrintMenuWords()\" + call assert_equal('foo{''matches'': [], ''selected'': -1}', getline(5)) + bw! + + set completeopt& + delfunc PrintMenuWords +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable diff --git a/src/version.c b/src/version.c index 67affb2e18..50632747be 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1265, /**/ 1264, /**/ From 2f4aa50c912ee68b198fcacff96836cce6e60365 Mon Sep 17 00:00:00 2001 From: RestorerZ Date: Tue, 1 Apr 2025 20:36:27 +0200 Subject: [PATCH 025/633] translation(ru): Updated messages translation closes: #17030 Signed-off-by: RestorerZ Signed-off-by: Christian Brabandt --- src/po/ru.cp1251.po | 266 ++++++++++++++++++++++++++++++++++---------- src/po/ru.po | 266 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 414 insertions(+), 118 deletions(-) diff --git a/src/po/ru.cp1251.po b/src/po/ru.cp1251.po index d2beb8308d..027d048351 100644 --- a/src/po/ru.cp1251.po +++ b/src/po/ru.cp1251.po @@ -22,10 +22,10 @@ # msgid "" msgstr "" -"Project-Id-Version: RuVim_0.9010898.301124\n" +"Project-Id-Version: RuVim_0.9011249.270325\n" "Report-Msgid-Bugs-To: The Vim Project, \n" -"POT-Creation-Date: 2024-11-30 20:11+0300\n" -"PO-Revision-Date: 2024-11-30 20:26+0300\n" +"POT-Creation-Date: 2025-03-27 22:13+0300\n" +"PO-Revision-Date: 2025-03-28 07:35+0300\n" "Last-Translator: Restorer, \n" "Language-Team: RuVim, https://github.com/RestorerZ/RuVim\n" "Language: ru_RU\n" @@ -211,8 +211,8 @@ msgstr " # #Restorer: ������������ �������� �������� #, c-format -msgid "%d%%" -msgstr "%d %%" +msgid "%s%d%%" +msgstr "%s%d %%" # #Restorer: ��������� � ��������� ����, ������ ���������, �������� ������ ��� # #Restorer: �������������� ���������� ������ @@ -1061,13 +1061,12 @@ msgid "[unix format]" msgstr "[� ������� unix]" # #Restorer: ����������� � ��������� � ��������� ������ ��� ��������� � ������ -# ~!: earlier #, c-format -msgid "%ld line, " -msgid_plural "%ld lines, " -msgstr[0] "%ld ������, " -msgstr[1] "%ld ������, " -msgstr[2] "%ld �����, " +msgid "%s%ld line, " +msgid_plural "%s%ld lines, " +msgstr[0] "%s%ld ������, " +msgstr[1] "%s%ld ������, " +msgstr[2] "%s%ld �����, " # #Restorer: ����������� � ��������� � ��������� ������ ��� ��������� � ������ #, c-format @@ -2835,10 +2834,10 @@ msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit " msgstr " SPACE/d/j - ����, b/u/k - ����� �� �����/��������/������; q - ����� " msgid "W23: Clipboard register not available, using register 0" -msgstr "W23: ������� ������ ������ �� ��������. ����� ����������� ������ 0" +msgstr "W23: ������� ������ ������ ����������. ����� ����������� ������� 0" msgid "W24: Clipboard register not available. See :h W24" -msgstr "W24: ������� ������ ������ �� ��������. ��������� ��. :h W24" +msgstr "W24: ������� ������ ������ ����������. ��������� ��. :h W24" # #Restorer: ��������� ���� msgid "Question" @@ -5316,8 +5315,7 @@ msgstr "E131: msgid "E132: Function call depth is higher than 'maxfuncdepth'" msgstr "" -"E132: ���������� ������� ������� ��������� �������� � ��������� " -"'maxfuncdepth'" +"E132: ���������� ������� ������� ��������� �������� ��������� 'maxfuncdepth'" msgid "E133: :return not inside a function" msgstr "E133: ������� :return �������� ��� ���� �������" @@ -6771,7 +6769,7 @@ msgid "E523: Not allowed here" msgstr "E523: � ����� ������������ ������ �������� ���������" msgid "E524: Missing colon" -msgstr "E524: �� ������ ������ ���������, ��� ����������� ����� � ��������" +msgstr "E524: �� ������ ������ ���������, ��� ����������� ����� � ��������" msgid "E525: Zero length string" msgstr "E525: �� ����������� ��������� ������� �������� ���" @@ -6781,7 +6779,7 @@ msgid "E526: Missing number after <%s>" msgstr "E526: �� ������� �������� �������� ����� ������� <%s>" msgid "E527: Missing comma" -msgstr "E527: �� ������ ������ �������, ��� ����������� ��������" +msgstr "E527: �� ������ ������ �������, ��� ����������� ��������" msgid "E528: Must specify a ' value" msgstr "E528: ��������� ������� �������� ��� ����� ' " @@ -6810,7 +6808,7 @@ msgid "E535: Illegal character after <%c>" msgstr "E535: ������������ ������ ����� ����� <%c> �" msgid "E536: Comma required" -msgstr "E536: �� ������ ������ �������, ��� ����������� �������� �" +msgstr "E536: �� ������ ������ �������, ��� ����������� �������� �" #, c-format msgid "E537: 'commentstring' must be empty or contain %s" @@ -6840,7 +6838,7 @@ msgid "E544: Keymap file not found" msgstr "E544: �� ������ ���� � ��������� ��������� ����������" msgid "E545: Missing colon" -msgstr "E545: �� ������ ������ ���������, ��� ����������� ������ � ���������" +msgstr "E545: �� ������ ������ ���������, ��� ����������� ������ � ���������" msgid "E546: Illegal mode" msgstr "" @@ -6856,7 +6854,7 @@ msgid "E549: Illegal percentage" msgstr "E549: ������������ �������� �������� ��������" msgid "E550: Missing colon" -msgstr "E550: �� ������ ������ ���������, ��� ����������� ����� � ��� ��������" +msgstr "E550: �� ������ ������ ���������, ��� ����������� ����� � ��� ��������" msgid "E551: Illegal component" msgstr "E551: ������������ ���������� ����������� ��� ���������" @@ -7094,7 +7092,8 @@ msgstr "E619: #, c-format msgid "E620: Unable to convert to print encoding \"%s\"" -msgstr "E620: ��� ������ �� ������ �� ������� ������������� � ��������� \"%s\"" +msgstr "" +"E620: ��� ������ �� ������ �� ������� ��������� ��������� ��������� \"%s\"" #, c-format msgid "E621: \"%s\" resource file has wrong version" @@ -7279,7 +7278,7 @@ msgstr "" "���������" msgid "E675: No default font specified for multi-byte printing." -msgstr "E675: �� ����� ����� �� ��������� ��� ������ � ������������� ���������" +msgstr "E675: �� ����� ����� ��� ������ � ������������� ���������" #, c-format msgid "E676: No matching autocommands for buftype=%s buffer" @@ -7361,7 +7360,7 @@ msgstr "E695: #, c-format msgid "E696: Missing comma in List: %s" msgstr "" -"E696: � ������ ��� List �� ������ ������ �������, ��� ����������� ��������� " +"E696: � ������ ��� List �� ������ ������ �������, ��� ����������� ��������� " "%s" #, c-format @@ -8478,8 +8477,7 @@ msgstr "" "E987: �������, �������� � ��������� 'tagfunc', ������� ������������ ������" msgid "E988: GUI cannot be used. Cannot execute gvim.exe." -msgstr "" -"E988: �� ������� ��������� ����������� ���������. ���� ������� ����� gvim.exe" +msgstr "E988: ���� ������� ����� gvim.exe. ����������� ��������� ����������" msgid "E989: Non-default argument follows default argument" msgstr "" @@ -8704,8 +8702,8 @@ msgstr "" msgid "E1040: Cannot use :scriptversion after :vim9script" msgstr "" -"E1040: �� ����������� �������� ������� :scriptversion ����� ������� :" -"vim9script" +"E1040: �� ����������� �������� ������� :scriptversion ����� " +"������� :vim9script" #, c-format msgid "E1041: Redefining script item: \"%s\"" @@ -8853,7 +8851,7 @@ msgstr "E1083: #, c-format msgid "E1084: Cannot delete Vim9 script function %s" -msgstr "E1084: �� ����������� �������� ������� Vim9 %s" +msgstr "E1084: �� ����������� �������� ������� Vim9 %s" #, c-format msgid "E1085: Not a callable type: %s" @@ -9053,16 +9051,17 @@ msgstr "E1138: msgid "E1139: Missing matching bracket after dict key" msgstr "E1139: �� ������� ����������� ������������� ������ ����� ����� �������" -msgid "E1140: :for argument must be a sequence of lists" -msgstr "E1140: �������� ������� :for ������ ���� � ���� ���������� ������" +msgid "E1140: :for argument must be a sequence of lists or tuples" +msgstr "" +"E1140: �������� ������� :for ������ ���� ��������� ������� ��� ��������" msgid "E1141: Indexable type required" msgstr "E1141: ��������� ��� ������ ����������� ����������" msgid "E1142: Calling test_garbagecollect_now() while v:testing is not set" msgstr "" -"E1142: ��� ������ ������� test_garbagecollect_now() �� ������ ���������� v:" -"testing" +"E1142: ��� ������ ������� test_garbagecollect_now() �� ������ ���������� " +"v:testing" #, c-format msgid "E1143: Empty expression: \"%s\"" @@ -9168,7 +9167,7 @@ msgstr "E1168: #, c-format msgid "E1169: Expression too recursive: %s" -msgstr "E1169: ������� ������������� ��������� %s" +msgstr "E1169: ������������ ����������� ��������� %s" msgid "E1170: Cannot use #{ to start a comment" msgstr "E1170: �� ����������� ������������� �������� #{ ��� ������ �����������" @@ -9386,9 +9385,10 @@ msgstr "" "E1224: ��� ������ ��������� ����� %d ������ ���� String, Number ��� List" #, c-format -msgid "E1225: String, List or Dictionary required for argument %d" +msgid "E1225: String, List, Tuple or Dictionary required for argument %d" msgstr "" -"E1225: ��� ������ ��������� ����� %d ������ ���� String, List ��� Dictionary" +"E1225: ��� ������ ��������� ����� %d ������ ���� String, List, Tuple ��� " +"Dictionary" #, c-format msgid "E1226: List or Blob required for argument %d" @@ -9430,6 +9430,10 @@ msgstr "" msgid "E1234: legacy must be followed by a command" msgstr "E1234: ����� ������� :legacy ������ ���� ������� ����������� �������" +#, c-format +msgid "E1235: Bool or Number required for argument %d" +msgstr "E1235: ��� ������ ��������� ����� %d ������ ���� Number ��� Bool" + #, c-format msgid "E1236: Cannot use %s itself, it is imported" msgstr "E1236: �� ����������� ��������� � %s. ��� ��������������� ���������" @@ -9486,15 +9490,20 @@ msgid "E1250: Argument of %s must be a List, String, Dictionary or Blob" msgstr "E1250: � ������� %s ��� ��������� ������ ���� List, String ��� BLOB" #, c-format -msgid "E1251: List, Dictionary, Blob or String required for argument %d" +msgid "E1251: List, Tuple, Dictionary, Blob or String required for argument %d" msgstr "" -"E1251: ��� ������ ��������� ����� %d ������ ���� List, Dictionary, BLOB ��� " -"String" +"E1251: ��� ������ ��������� ����� %d ������ ���� List, Tuple, Dictionary, " +"BLOB ��� String" #, c-format msgid "E1252: String, List or Blob required for argument %d" msgstr "E1252: ��� ������ ��������� ����� %d ������ ���� String, List ��� BLOB" +#, c-format +msgid "E1253: String, List, Tuple or Blob required for argument %d" +msgstr "E1253: ��� ������ ��������� ����� %d ������ ���� String, List, Tuple " +"��� BLOB" + msgid "E1254: Cannot use script variable in for loop" msgstr "" "E1254: �� ����������� �������� ��������� ���������� � ������� ����� :for" @@ -9526,11 +9535,11 @@ msgstr "E1260: msgid "E1261: Cannot import .vim without using \"as\"" msgstr "" -"E1261: �������������� ���������� ����� ��� �������� ��������� ����� \"as\"" +"E1261: ������ ���������� ����� ��� �������� ��������� ����� \"as\"" #, c-format msgid "E1262: Cannot import the same script twice: %s" -msgstr "E1262: �� ����������� ��������� �������������� ���������� ����� %s" +msgstr "E1262: �� ����������� ��������� ������ ���������� ����� %s" msgid "E1263: Cannot use name with # in Vim9 script, use export instead" msgstr "" @@ -9687,10 +9696,10 @@ msgstr "" "E1300: �� ����������� �������� ������� :defer ��� ��������� ��������� �������" #, c-format -msgid "E1301: String, Number, List or Blob required for argument %d" +msgid "E1301: String, Number, List, Tuple or Blob required for argument %d" msgstr "" -"E1301: ��� ������ ��������� ����� %d ������ ���� String, Number, List ��� " -"BLOB" +"E1301: ��� ������ ��������� ����� %d ������ ���� String, Number, List, Tuple" +" ��� BLOB" msgid "E1302: Script variable was deleted" msgstr "E1302: ���������� ���������� ����� ���� �������" @@ -10042,6 +10051,9 @@ msgstr "E1393: msgid "E1394: Type name must start with an uppercase letter: %s" msgstr "E1394: ������������ ���� ������ ���������� � ��������� ����� %s" +msgid "E1395: Using a null class" +msgstr "E1395: ��������� �������������������� ��� ������ Class" + #, c-format msgid "E1396: Type alias \"%s\" already exists" msgstr "E1396: ��������� ���� ��� ���������� \"%s\"" @@ -10159,6 +10171,17 @@ msgstr "" "E1429: ��� ������ Class ����� ���� �������� ������ �� ������ ���������� " "�����" +#, c-format +msgid "E1430: Uninitialized object variable '%s' referenced" +msgstr "E1430: ������ �� �������������������� ��������� ���������� '%s'" + +#, c-format +msgid "" +"E1431: Abstract method \"%s\" in class \"%s\" cannot be accessed directly" +msgstr "" +"E1431: �� ����������� ������ ��������� � ������������ ������ \"%s\" ������ " +"\"%s\"" + #, c-format msgid "E1500: Cannot mix positional and non-positional arguments: %s" msgstr "E1500: ������� ��� �����������, ��� � �� ����������� ������������� %s" @@ -10223,6 +10246,108 @@ msgid "E1514: 'findfunc' did not return a List type" msgstr "" "E1514: ���������� �� ��������� 'findfunc' ������ �� �������� ����� List" +#, c-format +msgid "E1515: Unable to convert from '%s' encoding" +msgstr "E1515: �� ������� ��������� �������������� ��� ��������� '%s'" + +#, c-format +msgid "E1516: Unable to convert to '%s' encoding" +msgstr "E1516: �� ������� ��������� �������������� �� ��������� '%s'" + +msgid "E1517: Can only compare Tuple with Tuple" +msgstr "" +"E1517: �������� ��������� ��� ���� Tuple ��������� ������ � ����� Tuple" + +msgid "E1518: Invalid operation for Tuple" +msgstr "E1518: ������������ �������� ��� Tuple" + +#, c-format +msgid "E1519: Tuple index out of range: %ld" +msgstr "E1519: ����� �� ������� ��������� ������ ��� Tuple ��� ������� %ld" + +msgid "E1520: Using a Tuple as a Number" +msgstr "E1520: �������� ��� ������ Tuple, � ������� Number" + +msgid "E1521: Using a Tuple as a Float" +msgstr "E1521: �������� ��� ������ Tuple, � ������� Float" + +msgid "E1522: Using a Tuple as a String" +msgstr "E1522: �������� ��� ������ Tuple, � ������� String" + +msgid "E1523: String, List, Tuple or Blob required" +msgstr "E1523: ��� ������ ������ ���� String, List, Tuple ��� BLOB" + +#, c-format +msgid "E1524: Cannot use a tuple with function %s" +msgstr "E1524: �� ����������� ������������ ������� � ������� %s" + +#, c-format +msgid "E1525: Argument of %s must be a List, Tuple, String, Dictionary or Blob" +msgstr "" +"E1525: � ������� %s ��� ��������� ������ ���� List, Tuple, String ��� BLOB" + +#, c-format +msgid "E1526: Missing end of Tuple ')': %s" +msgstr "E1526: �� ������� ����������� ������� ������ � ������ ��� Tuple %s" + +#, c-format +msgid "E1527: Missing comma in Tuple: %s" +msgstr "" +"E1527: � ������ ��� Tuple �� ������ ������ �������, ��� ����������� " +"��������� %s" + +#, c-format +msgid "E1528: List or Tuple or Blob required for argument %d" +msgstr "E1528: ��� ������ ��������� ����� %d ������ ���� List, Tuple ��� BLOB" + +#, c-format +msgid "E1529: List or Tuple required for argument %d" +msgstr "E1529: ��� ������ ��������� ����� %d ������ ���� List ��� Tuple" + +#, c-format +msgid "E1530: List or Tuple or Dictionary required for argument %d" +msgstr "" +"E1530: ��� ������ ��������� ����� %d ������ ���� List, Tuple ��� Dictionary" + +#, c-format +msgid "E1531: Argument of %s must be a List, Tuple, Dictionary or Blob" +msgstr "" +"E1531: � ������� %s ��� ��������� ������ ���� List, Tuple, Dictionary ��� " +"BLOB" + +msgid "E1532: Cannot modify a tuple" +msgstr "E1532: �� ����������� ��������� ��������" + +msgid "E1533: Cannot slice a tuple" +msgstr "E1533: �� ����������� �������� ��������� ��� ��������" + +#, c-format +msgid "E1534: Tuple required for argument %d" +msgstr "E1534: ��� ������ ��������� ����� %d ������ ���� Tuple" + +msgid "E1535: List or Tuple required" +msgstr "E1535: ��� ������ ������ ���� List ��� Tuple" + +msgid "E1536: Tuple required" +msgstr "E1536: ��� ������ ������ ���� Tuple" + +msgid "E1537: Less targets than Tuple items" +msgstr "" +"E1537: ���������� ���������� ������ ���������� ��������� �������" + +msgid "E1538: More targets than Tuple items" +msgstr "" +"E1538: ���������� ���������� ������ ���������� ��������� �������" + +#, c-format +msgid "E1539: Variadic tuple must end with a list type: %s" +msgstr "E1539: ������������ ������ ������ ������������� ����� ������ List %s" + + +msgid "E1540: Cannot use a variadic tuple in concatenation" +msgstr "E1540: �� ����������� ����������� ������������ ��������" + + # #Restorer: ���������, ��������, �� ������� `CTRL+g`, `g CTRL+g` � �. �. msgid "--No lines in buffer--" msgstr "-- ����� �� �������� ����� --" @@ -10337,19 +10462,18 @@ msgstr " #, c-format msgid "expected 3-tuple as imp.find_module() result, but got %s" msgstr "" -"��������� ������� imp.find_module() ������������ ������ �� ��� ���������, � " -"������� %s" +"��������� ������� imp.find_module() ������ �� ��� ���������, � ������� %s" #, c-format msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d" msgstr "" -"��������� ������� imp.find_module() ������������ ������ �� ��� ���������, � " -"�������� ��������� %d" +"��������� ������� imp.find_module() ������ �� ��� ���������, � �������� " +"��������� %d" msgid "internal error: imp.find_module returned tuple with NULL" msgstr "" -"���������� ������. ��������� ������� imp.find_module() ������������ ������ " -"��� ���������" +"���������� ������. ��������� ������� imp.find_module() ������ � ������� " +"����������� ���������" msgid "cannot delete vim.Dictionary attributes" msgstr "�������� ������� vim.Dictionary �� ����� ���� �������" @@ -10413,6 +10537,20 @@ msgstr " msgid "cannot modify fixed list" msgstr "��������� ���������� ������� �� ����� ���� ��������" +msgid "tuple constructor does not accept keyword arguments" +msgstr "" +"�� ����������� ������������ � ������������ ������� ����������������� " +"�����" + +msgid "tuple index out of range" +msgstr "������ ������� ������� �� ������� ���������" + +msgid "cannot delete vim.Tuple attributes" +msgstr "�������� ������� vim.Tuple �� ����� ���� �������" + +msgid "cannot modify fixed tuple" +msgstr "�� ����������� ��������� �������������� �������" + #, c-format msgid "unnamed function %s does not exist" msgstr "�� ���������� ���������� ������� %s" @@ -10967,7 +11105,7 @@ msgid "highlight spelling mistakes" msgstr "������������ ����� � �������� ���������" msgid "list of accepted languages" -msgstr "�����, ��� ������� ����� ����������� �������� ������������" +msgstr "����� ��� ������� ����� ����������� �������� ������������" msgid "file that \"zg\" adds good words to" msgstr "������� ������������, ������������ ��� ������� `zg`" @@ -11135,7 +11273,7 @@ msgstr " # ~!: Matvey Tarasov msgid "terminal that requires extra redrawing" -msgstr "��������, ��������� �������������� ��������� ������" +msgstr "��������, ��������� �������������� ���������� ������" msgid "what keyboard protocol to use for which terminal" msgstr "������������ ���������� �������� ������ ������ � �����������" @@ -11223,13 +11361,13 @@ msgid "GUI" msgstr "����������� ��������� ������������" msgid "list of font names to be used in the GUI" -msgstr "������, ������������ � ����������� ����������" +msgstr "������ ������������ � ����������� ����������" msgid "pair of fonts to be used, for multibyte editing" -msgstr "���� �������, ������������ ��� ������������� ���������" +msgstr "���� ������� ������������ ��� ������������� ���������" msgid "list of font names to be used for double-wide characters" -msgstr "������, ������������ ��� ����������� �������� ������� ������" +msgstr "������ ������������ ��� ����������� �������� ������� ������" msgid "use smooth, antialiased fonts" msgstr "������������ ������ �� �������������" @@ -11317,7 +11455,7 @@ msgid "the CJK character set to be used for CJK output from :hardcopy" msgstr "����� ��������, ������������ ��� ������ ��� ������" msgid "list of font names to be used for CJK output from :hardcopy" -msgstr "������, ������������ ��� ������ ��� ������" +msgstr "������ ������������ ��� ������ ��� ������" msgid "messages and info" msgstr "����������� ���������� � ��������� ���������" @@ -11328,14 +11466,14 @@ msgstr "" "(�� �������� � ���������� ������ ��������� ��� ������)" msgid "list of flags to make messages shorter" -msgstr "�����, ����������� ����������� ������������ ��������� ���������" +msgstr "�����, �������� ���������� ������������ ��������� ���������" -msgid "how many messages are remembered" -msgstr "���������� ������������ ���������" +msgid "options for outputting messages" +msgstr "���������, ������������ ��� ������ ���������" msgid "show (partial) command keys in location given by 'showcmdloc'" msgstr "" -"����������� ��������� ������ ���, ��� �������� � ���������\n" +"���������� ���������� ������� � ����� ������� �������� � ���������\n" "'showcmdloc'" msgid "location where to show the (partial) command keys for 'showcmd'" @@ -11458,6 +11596,11 @@ msgstr " msgid "specifies how Insert mode completion works for CTRL-N and CTRL-P" msgstr "������ ������ CTRL+N � CTRL+P ��� ����������� � ������ �������" +msgid "use fuzzy collection for specific completion modes" +msgstr "" +" \n" +"������������ �������� ��������� ��� ��������� ������� �����������" + msgid "whether to use a popup menu for Insert mode completion" msgstr "������������ ����������� ���� ��� ����������� � ������ �������" @@ -12106,6 +12249,11 @@ msgstr "" msgid "list of autocommand events which are to be ignored" msgstr "�������� �������, ��� ������� �� ����� ����������� �����������" +msgid "list of autocommand events which are to be ignored in a window" +msgstr "" +"�������� �������, ��� ������� �� ����� ����������� �����������\n" +"� ��������� ���� ������" + msgid "load plugin scripts when starting up" msgstr "��������� ������������ ������ ��� ������� ���������" diff --git a/src/po/ru.po b/src/po/ru.po index e2b5f04259..1b9ffaf7c7 100644 --- a/src/po/ru.po +++ b/src/po/ru.po @@ -22,10 +22,10 @@ # msgid "" msgstr "" -"Project-Id-Version: RuVim_0.9010898.301124\n" +"Project-Id-Version: RuVim_0.9011249.270325\n" "Report-Msgid-Bugs-To: The Vim Project, \n" -"POT-Creation-Date: 2024-11-30 20:11+0300\n" -"PO-Revision-Date: 2024-11-30 20:26+0300\n" +"POT-Creation-Date: 2025-03-27 22:13+0300\n" +"PO-Revision-Date: 2025-03-28 07:35+0300\n" "Last-Translator: Restorer, \n" "Language-Team: RuVim, https://github.com/RestorerZ/RuVim\n" "Language: ru_RU\n" @@ -211,8 +211,8 @@ msgstr "Начало" # #Restorer: локализуемое значение процента #, c-format -msgid "%d%%" -msgstr "%d %%" +msgid "%s%d%%" +msgstr "%s%d %%" # #Restorer: выводится в заголовке окна, строке состояния, комндной строке при # #Restorer: редактировании нескольких файлов @@ -1061,13 +1061,12 @@ msgid "[unix format]" msgstr "[в формате unix]" # #Restorer: добавляется к сообщению в командной строке при операциях с файлом -# ~!: earlier #, c-format -msgid "%ld line, " -msgid_plural "%ld lines, " -msgstr[0] "%ld строка, " -msgstr[1] "%ld строки, " -msgstr[2] "%ld строк, " +msgid "%s%ld line, " +msgid_plural "%s%ld lines, " +msgstr[0] "%s%ld строка, " +msgstr[1] "%s%ld строки, " +msgstr[2] "%s%ld строк, " # #Restorer: добавляется к сообщению в командной строке при операциях с файлом #, c-format @@ -2835,10 +2834,10 @@ msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit " msgstr " SPACE/d/j - вниз, b/u/k - вверх на экран/страницу/строку; q - отбой " msgid "W23: Clipboard register not available, using register 0" -msgstr "W23: Регистр буфера обмена не доступен. Будет использован регист 0" +msgstr "W23: Регистр буфера обмена недоступен. Будет использован регистр 0" msgid "W24: Clipboard register not available. See :h W24" -msgstr "W24: Регистр буфера обмена не доступен. Подробнее см. :h W24" +msgstr "W24: Регистр буфера обмена недоступен. Подробнее см. :h W24" # #Restorer: заголовок окна msgid "Question" @@ -5316,8 +5315,7 @@ msgstr "E131: Удаление не выполнено. Эта функция с msgid "E132: Function call depth is higher than 'maxfuncdepth'" msgstr "" -"E132: Количество вызовов функций превышает значение в параметре " -"'maxfuncdepth'" +"E132: Количество вызовов функций превышает значение параметра 'maxfuncdepth'" msgid "E133: :return not inside a function" msgstr "E133: Команда :return указанна вне тела функции" @@ -6771,7 +6769,7 @@ msgid "E523: Not allowed here" msgstr "E523: В целях безопасности данные действия запрещены" msgid "E524: Missing colon" -msgstr "E524: Не указан символ двоеточия, как разделитель флага и значения" +msgstr "E524: Не указан символ двоеточие, как разделитель флага и значения" msgid "E525: Zero length string" msgstr "E525: Не допускается установка пустого значения для" @@ -6781,7 +6779,7 @@ msgid "E526: Missing number after <%s>" msgstr "E526: Не указано числовое значение после символа <%s>" msgid "E527: Missing comma" -msgstr "E527: Не указан символ запятой, как разделитель значений" +msgstr "E527: Не указан символ запятая, как разделитель значений" msgid "E528: Must specify a ' value" msgstr "E528: Требуется указать значение для флага ' " @@ -6810,7 +6808,7 @@ msgid "E535: Illegal character after <%c>" msgstr "E535: Недопустимый символ после флага <%c> в" msgid "E536: Comma required" -msgstr "E536: Не указан символ запятой, как разделитель маркеров в" +msgstr "E536: Не указан символ запятая, как разделитель маркеров в" #, c-format msgid "E537: 'commentstring' must be empty or contain %s" @@ -6840,7 +6838,7 @@ msgid "E544: Keymap file not found" msgstr "E544: Не найден файл с описанием раскладки клавиатуры" msgid "E545: Missing colon" -msgstr "E545: Не указан символ двоеточия, как разделитель режима и параметра" +msgstr "E545: Не указан символ двоеточие, как разделитель режима и параметра" msgid "E546: Illegal mode" msgstr "" @@ -6856,7 +6854,7 @@ msgid "E549: Illegal percentage" msgstr "E549: Недопустимое значение величины процента" msgid "E550: Missing colon" -msgstr "E550: Не указан символ двоеточия, как разделитель флага и его значения" +msgstr "E550: Не указан символ двоеточие, как разделитель флага и его значения" msgid "E551: Illegal component" msgstr "E551: Недопустимое количество компонентов для параметра" @@ -7094,7 +7092,8 @@ msgstr "E619: Файл не является допустимым файлом #, c-format msgid "E620: Unable to convert to print encoding \"%s\"" -msgstr "E620: При выводе на печать не удалось преобразовать в кодировку \"%s\"" +msgstr "" +"E620: При выводе на печать не удалось выполнить изменение кодировки \"%s\"" #, c-format msgid "E621: \"%s\" resource file has wrong version" @@ -7279,7 +7278,7 @@ msgstr "" "кодировки" msgid "E675: No default font specified for multi-byte printing." -msgstr "E675: Не задан шрифт по умолчанию при печати в многобайтовой кодировке" +msgstr "E675: Не задан шрифт для печати в многобайтовой кодировке" #, c-format msgid "E676: No matching autocommands for buftype=%s buffer" @@ -7361,7 +7360,7 @@ msgstr "E695: Не допускается указание индекса для #, c-format msgid "E696: Missing comma in List: %s" msgstr "" -"E696: В данных тип List не указан символ запятой, как разделитель элементов " +"E696: В данных тип List не указан символ запятая, как разделитель элементов " "%s" #, c-format @@ -8478,8 +8477,7 @@ msgstr "" "E987: Функция, заданная в параметре 'tagfunc', вернула недопустимые данные" msgid "E988: GUI cannot be used. Cannot execute gvim.exe." -msgstr "" -"E988: Не удалось запустить графический интерфейс. Сбой запуска файла gvim.exe" +msgstr "E988: Сбой запуска файла gvim.exe. Графический интерфейс недоступен" msgid "E989: Non-default argument follows default argument" msgstr "" @@ -8704,8 +8702,8 @@ msgstr "" msgid "E1040: Cannot use :scriptversion after :vim9script" msgstr "" -"E1040: Не допускается указание команды :scriptversion после команды :" -"vim9script" +"E1040: Не допускается указание команды :scriptversion после " +"команды :vim9script" #, c-format msgid "E1041: Redefining script item: \"%s\"" @@ -8853,7 +8851,7 @@ msgstr "E1083: Не указан символ машинописного обр #, c-format msgid "E1084: Cannot delete Vim9 script function %s" -msgstr "E1084: Не допускается удаление функций Vim9 %s" +msgstr "E1084: Не допускается удаление функции Vim9 %s" #, c-format msgid "E1085: Not a callable type: %s" @@ -9053,16 +9051,17 @@ msgstr "E1138: Ожидался тип данных Number, а получено msgid "E1139: Missing matching bracket after dict key" msgstr "E1139: Не указана закрывающая прямоугольная скобка после ключа словаря" -msgid "E1140: :for argument must be a sequence of lists" -msgstr "E1140: Параметр команды :for должен быть в виде вложенного списка" +msgid "E1140: :for argument must be a sequence of lists or tuples" +msgstr "" +"E1140: Параметр команды :for должен быть вложенным списком или кортежем" msgid "E1141: Indexable type required" msgstr "E1141: Требуется тип данных допускающих индексацию" msgid "E1142: Calling test_garbagecollect_now() while v:testing is not set" msgstr "" -"E1142: При вызове функции test_garbagecollect_now() не задана переменная v:" -"testing" +"E1142: При вызове функции test_garbagecollect_now() не задана переменная " +"v:testing" #, c-format msgid "E1143: Empty expression: \"%s\"" @@ -9168,7 +9167,7 @@ msgstr "E1168: Этот аргумент уже объявлен в команд #, c-format msgid "E1169: Expression too recursive: %s" -msgstr "E1169: Большая рекурсивность выражения %s" +msgstr "E1169: Многократная вложенность выражения %s" msgid "E1170: Cannot use #{ to start a comment" msgstr "E1170: Не допускается использование символов #{ как начало комментария" @@ -9386,9 +9385,10 @@ msgstr "" "E1224: Тип данных аргумента номер %d должен быть String, Number или List" #, c-format -msgid "E1225: String, List or Dictionary required for argument %d" +msgid "E1225: String, List, Tuple or Dictionary required for argument %d" msgstr "" -"E1225: Тип данных аргумента номер %d должен быть String, List или Dictionary" +"E1225: Тип данных аргумента номер %d должен быть String, List, Tuple или " +"Dictionary" #, c-format msgid "E1226: List or Blob required for argument %d" @@ -9430,6 +9430,10 @@ msgstr "" msgid "E1234: legacy must be followed by a command" msgstr "E1234: После команды :legacy должна быть указана последующая команда" +#, c-format +msgid "E1235: Bool or Number required for argument %d" +msgstr "E1235: Тип данных аргумента номер %d должен быть Number или Bool" + #, c-format msgid "E1236: Cannot use %s itself, it is imported" msgstr "E1236: Не допускается обращение к %s. Это импортированный компонент" @@ -9486,15 +9490,20 @@ msgid "E1250: Argument of %s must be a List, String, Dictionary or Blob" msgstr "E1250: В функции %s тип аргумента должен быть List, String или BLOB" #, c-format -msgid "E1251: List, Dictionary, Blob or String required for argument %d" +msgid "E1251: List, Tuple, Dictionary, Blob or String required for argument %d" msgstr "" -"E1251: Тип данных аргумента номер %d должен быть List, Dictionary, BLOB или " -"String" +"E1251: Тип данных аргумента номер %d должен быть List, Tuple, Dictionary, " +"BLOB или String" #, c-format msgid "E1252: String, List or Blob required for argument %d" msgstr "E1252: Тип данных аргумента номер %d должен быть String, List или BLOB" +#, c-format +msgid "E1253: String, List, Tuple or Blob required for argument %d" +msgstr "E1253: Тип данных аргумента номер %d должен быть String, List, Tuple " +"или BLOB" + msgid "E1254: Cannot use script variable in for loop" msgstr "" "E1254: Не допускается указание локальных переменных в команде цикла :for" @@ -9526,11 +9535,11 @@ msgstr "E1260: Не допускается удаление компонента msgid "E1261: Cannot import .vim without using \"as\"" msgstr "" -"E1261: Импортирование командного файла без указания ключевого слова \"as\"" +"E1261: Импорт командного файла без указания ключевого слова \"as\"" #, c-format msgid "E1262: Cannot import the same script twice: %s" -msgstr "E1262: Не допускается повторное импортирование командного файла %s" +msgstr "E1262: Не допускается повторный импорт командного файла %s" msgid "E1263: Cannot use name with # in Vim9 script, use export instead" msgstr "" @@ -9687,10 +9696,10 @@ msgstr "" "E1300: Не допускается указание команды :defer для частичной словарной функции" #, c-format -msgid "E1301: String, Number, List or Blob required for argument %d" +msgid "E1301: String, Number, List, Tuple or Blob required for argument %d" msgstr "" -"E1301: Тип данных аргумента номер %d должен быть String, Number, List или " -"BLOB" +"E1301: Тип данных аргумента номер %d должен быть String, Number, List, Tuple" +" или BLOB" msgid "E1302: Script variable was deleted" msgstr "E1302: Переменная командного файла была удалена" @@ -10042,6 +10051,9 @@ msgstr "E1393: Тип может быть определён только в к msgid "E1394: Type name must start with an uppercase letter: %s" msgstr "E1394: Наименование типа должно начинаться с прописной буквы %s" +msgid "E1395: Using a null class" +msgstr "E1395: Обнаружен неинициализированный тип данных Class" + #, c-format msgid "E1396: Type alias \"%s\" already exists" msgstr "E1396: Псевдоним типа уже существует \"%s\"" @@ -10159,6 +10171,17 @@ msgstr "" "E1429: Тип данных Class может быть определён только на уровне командного " "файла" +#, c-format +msgid "E1430: Uninitialized object variable '%s' referenced" +msgstr "E1430: Ссылка на неинициализированную объектную переменную '%s'" + +#, c-format +msgid "" +"E1431: Abstract method \"%s\" in class \"%s\" cannot be accessed directly" +msgstr "" +"E1431: Не допускается прямое обращение к абстрактному методу \"%s\" класса " +"\"%s\"" + #, c-format msgid "E1500: Cannot mix positional and non-positional arguments: %s" msgstr "E1500: Указаны как позиционные, так и не позиционные спецификаторы %s" @@ -10223,6 +10246,108 @@ msgid "E1514: 'findfunc' did not return a List type" msgstr "" "E1514: Полученные от параметра 'findfunc' данные не являются типом List" +#, c-format +msgid "E1515: Unable to convert from '%s' encoding" +msgstr "E1515: Не удалось выполнить преобразование для кодировки '%s'" + +#, c-format +msgid "E1516: Unable to convert to '%s' encoding" +msgstr "E1516: Не удалось выполнить преобразование из кодировки '%s'" + +msgid "E1517: Can only compare Tuple with Tuple" +msgstr "" +"E1517: Операции сравнения для типа Tuple допустимы только с типом Tuple" + +msgid "E1518: Invalid operation for Tuple" +msgstr "E1518: Недопустимая операция для Tuple" + +#, c-format +msgid "E1519: Tuple index out of range: %ld" +msgstr "E1519: Выход за границы диапазона данных тип Tuple для индекса %ld" + +msgid "E1520: Using a Tuple as a Number" +msgstr "E1520: Ожидался тип данных Tuple, а получен Number" + +msgid "E1521: Using a Tuple as a Float" +msgstr "E1521: Ожидался тип данных Tuple, а получен Float" + +msgid "E1522: Using a Tuple as a String" +msgstr "E1522: Ожидался тип данных Tuple, а получен String" + +msgid "E1523: String, List, Tuple or Blob required" +msgstr "E1523: Тип данных должен быть String, List, Tuple или BLOB" + +#, c-format +msgid "E1524: Cannot use a tuple with function %s" +msgstr "E1524: Не допускается использовать кортежи в функции %s" + +#, c-format +msgid "E1525: Argument of %s must be a List, Tuple, String, Dictionary or Blob" +msgstr "" +"E1525: В функции %s тип аргумента должен быть List, Tuple, String или BLOB" + +#, c-format +msgid "E1526: Missing end of Tuple ')': %s" +msgstr "E1526: Не указана закрывающая круглая скобка в данных тип Tuple %s" + +#, c-format +msgid "E1527: Missing comma in Tuple: %s" +msgstr "" +"E1527: В данных тип Tuple не указан символ запятая, как разделитель " +"элементов %s" + +#, c-format +msgid "E1528: List or Tuple or Blob required for argument %d" +msgstr "E1528: Тип данных аргумента номер %d должен быть List, Tuple или BLOB" + +#, c-format +msgid "E1529: List or Tuple required for argument %d" +msgstr "E1529: Тип данных аргумента номер %d должен быть List или Tuple" + +#, c-format +msgid "E1530: List or Tuple or Dictionary required for argument %d" +msgstr "" +"E1530: Тип данных аргумента номер %d должен быть List, Tuple или Dictionary" + +#, c-format +msgid "E1531: Argument of %s must be a List, Tuple, Dictionary or Blob" +msgstr "" +"E1531: В функции %s тип аргумента должен быть List, Tuple, Dictionary или " +"BLOB" + +msgid "E1532: Cannot modify a tuple" +msgstr "E1532: Не допускается изменение кортежей" + +msgid "E1533: Cannot slice a tuple" +msgstr "E1533: Не допускается указание диапазона для кортежей" + +#, c-format +msgid "E1534: Tuple required for argument %d" +msgstr "E1534: Тип данных аргумента номер %d должен быть Tuple" + +msgid "E1535: List or Tuple required" +msgstr "E1535: Тип данных должен быть List или Tuple" + +msgid "E1536: Tuple required" +msgstr "E1536: Тип данных должен быть Tuple" + +msgid "E1537: Less targets than Tuple items" +msgstr "" +"E1537: Количество переменных меньше количества элементов кортежа" + +msgid "E1538: More targets than Tuple items" +msgstr "" +"E1538: Количество переменных больше количества элементов кортежа" + +#, c-format +msgid "E1539: Variadic tuple must end with a list type: %s" +msgstr "E1539: Вариационный кортеж должен заканчиваться типом данных List %s" + + +msgid "E1540: Cannot use a variadic tuple in concatenation" +msgstr "E1540: Не допускается объединение вариационных кортежей" + + # #Restorer: выводится, например, по команде `CTRL+g`, `g CTRL+g` и т. п. msgid "--No lines in buffer--" msgstr "-- Буфер не содержит текст --" @@ -10337,19 +10462,18 @@ msgstr "произошёл сбой при смене каталога" #, c-format msgid "expected 3-tuple as imp.find_module() result, but got %s" msgstr "" -"результат функции imp.find_module() неизменяемый список из трёх элементов, а " -"получен %s" +"результат функции imp.find_module() кортеж из трёх элементов, а получен %s" #, c-format msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d" msgstr "" -"результат функции imp.find_module() неизменяемый список из трёх элементов, а " -"получено элементов %d" +"результат функции imp.find_module() кортеж из трёх элементов, а получено " +"элементов %d" msgid "internal error: imp.find_module returned tuple with NULL" msgstr "" -"внутренняя ошибка. Результат функции imp.find_module() неизменяемый список " -"без элементов" +"внутренняя ошибка. Результат функции imp.find_module() кортеж с нулевым " +"количеством элементов" msgid "cannot delete vim.Dictionary attributes" msgstr "свойства объекта vim.Dictionary не могут быть удалены" @@ -10413,6 +10537,20 @@ msgstr "свойства объекта vim.List не могут быть уда msgid "cannot modify fixed list" msgstr "состояние блокировки объекта не может быть изменено" +msgid "tuple constructor does not accept keyword arguments" +msgstr "" +"не допускается использовать в конструкторе кортежа зарезервированные " +"слова" + +msgid "tuple index out of range" +msgstr "индекс кортежа выходит за границы диапазона" + +msgid "cannot delete vim.Tuple attributes" +msgstr "свойства объекта vim.Tuple не могут быть удалены" + +msgid "cannot modify fixed tuple" +msgstr "не допускается изменение фиксированного кортежа" + #, c-format msgid "unnamed function %s does not exist" msgstr "не существует безымянной функции %s" @@ -10967,7 +11105,7 @@ msgid "highlight spelling mistakes" msgstr "подсвечивать слова с ошибками написания" msgid "list of accepted languages" -msgstr "языки, для которых будет выполняться проверка правописания" +msgstr "языки для которых будет выполняться проверка правописания" msgid "file that \"zg\" adds good words to" msgstr "словарь пользователя, используемый для команды `zg`" @@ -11135,7 +11273,7 @@ msgstr "запрос кодов клавиш при обнаружении те # ~!: Matvey Tarasov msgid "terminal that requires extra redrawing" -msgstr "терминал, требующий дополнительную отрисовку текста" +msgstr "терминал, требующий дополнительную прорисовку текста" msgid "what keyboard protocol to use for which terminal" msgstr "используемый терминалом протокол обмена данных с клавиатурой" @@ -11223,13 +11361,13 @@ msgid "GUI" msgstr "Графический интерфейс пользователя" msgid "list of font names to be used in the GUI" -msgstr "шрифты, используемые в графическом интерфейсе" +msgstr "шрифты используемые в графическом интерфейсе" msgid "pair of fonts to be used, for multibyte editing" -msgstr "пары шрифтов, используемые при многобайтовой кодировке" +msgstr "пары шрифтов используемые при многобайтовой кодировке" msgid "list of font names to be used for double-wide characters" -msgstr "шрифты, используемые при отображении символов двойной ширины" +msgstr "шрифты используемые при отображении символов двойной ширины" msgid "use smooth, antialiased fonts" msgstr "использовать шрифты со «сглаживанием»" @@ -11317,7 +11455,7 @@ msgid "the CJK character set to be used for CJK output from :hardcopy" msgstr "набор символов, используемый при печати ККЯ языков" msgid "list of font names to be used for CJK output from :hardcopy" -msgstr "шрифты, используемые при печати ККЯ языков" +msgstr "шрифты используемые при печати ККЯ языков" msgid "messages and info" msgstr "Отображение информации и сообщений программы" @@ -11328,14 +11466,14 @@ msgstr "" "(не сообщать о достижении границ документа при поиске)" msgid "list of flags to make messages shorter" -msgstr "флаги, управляющие количеством отображаемых сообщений программы" +msgstr "флаги, задающие количество отображаемых сообщений программы" -msgid "how many messages are remembered" -msgstr "количество запоминаемых сообщений" +msgid "options for outputting messages" +msgstr "настройки, используемые для вывода сообщений" msgid "show (partial) command keys in location given by 'showcmdloc'" msgstr "" -"отображение набранных команд там, где указанно в параметре\n" +"отображать набираемые команды в месте которое указанно в параметре\n" "'showcmdloc'" msgid "location where to show the (partial) command keys for 'showcmd'" @@ -11458,6 +11596,11 @@ msgstr "функция, используемая для форматирован msgid "specifies how Insert mode completion works for CTRL-N and CTRL-P" msgstr "работа команд CTRL+N и CTRL+P при подстановке в режиме вставки" +msgid "use fuzzy collection for specific completion modes" +msgstr "" +" \n" +"использовать неполные коллекции для указанных режимов подстановки" + msgid "whether to use a popup menu for Insert mode completion" msgstr "использовать всплывающее меню при подстановке в режиме вставки" @@ -12106,6 +12249,11 @@ msgstr "" msgid "list of autocommand events which are to be ignored" msgstr "перечень событий, для которых не будут исполняться автокоманды" +msgid "list of autocommand events which are to be ignored in a window" +msgstr "" +"перечень событий, для которых не будут исполняться автокоманды\n" +"в указанном окне буфера" + msgid "load plugin scripts when starting up" msgstr "загружать подключаемые модули при запуске программы" From 7b6add0b4a694d421a1eb9c9017698ccbedde41c Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Tue, 1 Apr 2025 20:38:37 +0200 Subject: [PATCH 026/633] patch 9.1.1266: MS-Windows: type conversion warnings Problem: MS-Windows: type conversion warnings Solution: cast the variables (Yegappan Lakshmanan) closes: #17027 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/change.c | 4 ++-- src/edit.c | 4 ++-- src/findfile.c | 3 ++- src/insexpand.c | 4 ++-- src/popupmenu.c | 4 ++-- src/version.c | 2 ++ 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/change.c b/src/change.c index 5cddf9b340..c48d254915 100644 --- a/src/change.c +++ b/src/change.c @@ -1203,8 +1203,8 @@ ins_str(char_u *s, size_t slen) mch_memmove(newp + col, s, slen); mch_memmove(newp + col + slen, oldp + col, (size_t)(oldlen - col + 1)); ml_replace(lnum, newp, FALSE); - inserted_bytes(lnum, col, slen); - curwin->w_cursor.col += slen; + inserted_bytes(lnum, col, (int)slen); + curwin->w_cursor.col += (colnr_T)slen; } /* diff --git a/src/edit.c b/src/edit.c index 3fa95cdb05..53428e0fbb 100644 --- a/src/edit.c +++ b/src/edit.c @@ -2962,7 +2962,7 @@ stuff_inserted( do { - stuffReadbuffLen(insert.string, insert.length); + stuffReadbuffLen(insert.string, (long)insert.length); // a trailing "0" is inserted as "048", "^" as "^" switch (last) { @@ -5468,7 +5468,7 @@ do_insert_char_pre(int c) // Lock the text to avoid weird things from happening. ++textlock; - set_vim_var_string(VV_CHAR, buf, buflen); // set v:char + set_vim_var_string(VV_CHAR, buf, (int)buflen); // set v:char res = NULL; if (ins_apply_autocmds(EVENT_INSERTCHARPRE)) diff --git a/src/findfile.c b/src/findfile.c index 2bd1e7eb99..fd2d69f298 100644 --- a/src/findfile.c +++ b/src/findfile.c @@ -1166,7 +1166,8 @@ vim_findfile(void *search_ctx_arg) if (*suf == NUL) break; file_path.length = len + copy_option_part(&suf, - file_path.string + len, MAXPATHL - len, ","); + file_path.string + len, + (int)(MAXPATHL - len), ","); } } } diff --git a/src/insexpand.c b/src/insexpand.c index 41aa3f9990..3c81749c6a 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -1797,7 +1797,7 @@ ins_compl_files( if (in_fuzzy_collect) { leader = ins_compl_leader(); - leader_len = ins_compl_leader_len(); + leader_len = (int)ins_compl_leader_len(); } for (i = 0; i < count && !got_int && !compl_interrupted; i++) @@ -4642,7 +4642,7 @@ ins_compl_delete(void) int has_preinsert = ins_compl_preinsert_effect(); if (has_preinsert) { - col += ins_compl_leader_len(); + col += (int)ins_compl_leader_len(); curwin->w_cursor.col = compl_ins_end_col; } diff --git a/src/popupmenu.c b/src/popupmenu.c index a7c20c101b..294823bafe 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -478,7 +478,7 @@ pum_compute_text_attrs(char_u *text, hlf_T hlf, int user_hlattr) else { if (matched_len < 0 && MB_STRNICMP(ptr, leader, leader_len) == 0) - matched_len = leader_len; + matched_len = (int)leader_len; if (matched_len > 0) { new_attr = highlight_attr[is_select ? HLF_PMSI : HLF_PMNI]; @@ -765,7 +765,7 @@ pum_redraw(void) MB_PTR_ADV(orig_rt); last_char = orig_rt; } - kept_len = STRLEN(last_char); + kept_len = (int)STRLEN(last_char); new_str = alloc(ellipsis_width + over_cell + kept_len + 1); if (!new_str) return; diff --git a/src/version.c b/src/version.c index 50632747be..c90c7b56e9 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1266, /**/ 1265, /**/ From de8f8f732ac1bcf69899df6ffd27dca9a4e66f3c Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Tue, 1 Apr 2025 20:43:36 +0200 Subject: [PATCH 027/633] patch 9.1.1267: Vim9: no support for type list/dict> Problem: Vim9: no support for type list/dict> Solution: add proper support for t_object_any (Yegappan Lakshmanan) closes: #17025 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/evalfunc.c | 2 +- src/globals.h | 6 +- src/testdir/test_vim9_builtin.vim | 2 +- src/testdir/test_vim9_class.vim | 337 +++++++++++++++++++++++++++--- src/testdir/test_vim9_script.vim | 2 +- src/version.c | 2 + src/vim9compile.c | 5 +- src/vim9expr.c | 3 +- src/vim9instr.c | 9 +- src/vim9type.c | 16 +- 10 files changed, 343 insertions(+), 41 deletions(-) diff --git a/src/evalfunc.c b/src/evalfunc.c index 125ba55138..f2c69999ae 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -308,7 +308,7 @@ arg_object(type_T *type, type_T *decl_type UNUSED, argcontext_T *context) if (type->tt_type == VAR_OBJECT || type_any_or_unknown(type)) return OK; - arg_type_mismatch(&t_object, type, context->arg_idx + 1); + arg_type_mismatch(&t_object_any, type, context->arg_idx + 1); return FAIL; } diff --git a/src/globals.h b/src/globals.h index 7e65af30d8..b902e03186 100644 --- a/src/globals.h +++ b/src/globals.h @@ -540,8 +540,8 @@ EXTERN int garbage_collect_at_exit INIT(= FALSE); #define t_super (static_types[84]) #define t_const_super (static_types[85]) -#define t_object (static_types[86]) -#define t_const_object (static_types[87]) +#define t_object_any (static_types[86]) +#define t_const_object_any (static_types[87]) #define t_class (static_types[88]) #define t_const_class (static_types[89]) @@ -731,7 +731,7 @@ EXTERN type_T static_types[96] {VAR_CLASS, 0, 0, TTFLAG_STATIC, &t_bool, NULL, NULL}, {VAR_CLASS, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_bool, NULL, NULL}, - // 86: t_object + // 86: t_object_any {VAR_OBJECT, 0, 0, TTFLAG_STATIC, NULL, NULL, NULL}, {VAR_OBJECT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL, NULL}, diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index 22f8bab36b..7d65cb61eb 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -2430,7 +2430,7 @@ def Test_instanceof() enddef Bar() END - v9.CheckSourceScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected object but got string') + v9.CheckSourceScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected object but got string') lines =<< trim END vim9script diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index 30a03cf310..c6d93b2b70 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -564,7 +564,7 @@ def Test_using_null_class() lines =<< trim END vim9script assert_equal(12, type(null_class)) - assert_equal('class', typename(null_class)) + assert_equal('class', typename(null_class)) END v9.CheckSourceSuccess(lines) enddef @@ -643,7 +643,6 @@ def Test_object_not_set() END v9.CheckSourceFailure(lines, 'E1360: Using a null object', 1) - # TODO: this should not give an error but be handled at runtime lines =<< trim END vim9script @@ -660,7 +659,7 @@ def Test_object_not_set() enddef Func() END - v9.CheckSourceFailure(lines, 'E1363: Incomplete type', 1) + v9.CheckSourceFailure(lines, 'E1360: Using a null object', 1) # Reference a object variable through a null class object which is stored in a # variable of type "any". @@ -710,7 +709,7 @@ def Test_null_object_assign_compare() def F(): any return nullo enddef - assert_equal('object', typename(F())) + assert_equal('object', typename(F())) var o0 = F() assert_true(o0 == null_object) @@ -12486,37 +12485,325 @@ def Test_method_call_from_list_of_objects() var lines =<< trim END vim9script - class C + class A + var n: list = [100, 101] + def F(): string + return 'A.F' + enddef + endclass + + class B + var name: string + var n: list = [200, 201] + def new(this.name) + enddef def F(): string - return 'C.F' + return 'B.F' enddef endclass - class D - var x: string - def new(this.x) + var obj1 = A.new() + var obj2 = B.new('b1') + + def CheckObjectList() + var objlist = [obj1, obj2] + assert_equal('list>', typename(objlist)) + + # Use a member function + assert_equal('A.F', objlist[0].F()) + assert_equal('B.F', objlist[1].F()) + + # Use a member variable on the RHS + assert_equal([100, 101], objlist[0].n) + assert_equal([200, 201], objlist[1].n) + + # Use a member variable on the LHS + objlist[0].n[1] = 110 + objlist[1].n[1] = 210 + assert_equal([100, 110], objlist[0].n) + assert_equal([200, 210], objlist[1].n) + + # Iterate using a for loop + var s1 = [] + for o in objlist + add(s1, o.F()) + endfor + assert_equal(['A.F', 'B.F'], s1) + + # Iterate using foreach() + var s2 = [] + foreach(objlist, (k, v) => add(s2, v.F())) + assert_equal(['A.F', 'B.F'], s2) + + # Add a new list item + objlist->add(B.new('b2')) + assert_equal('b2', objlist[2].name) + enddef + + CheckObjectList() + + var objlist = [A.new(), B.new('b2')] + assert_equal('list>', typename(objlist)) + + # Use a member function + assert_equal('A.F', objlist[0].F()) + assert_equal('B.F', objlist[1].F()) + + # Use a member variable on the RHS + assert_equal([100, 101], objlist[0].n) + assert_equal([200, 201], objlist[1].n) + + # Use a member variable on the LHS + objlist[0].n[1] = 110 + objlist[1].n[1] = 210 + assert_equal([100, 110], objlist[0].n) + assert_equal([200, 210], objlist[1].n) + + # Iterate using a for loop + var s1 = [] + for o in objlist + add(s1, o.F()) + endfor + assert_equal(['A.F', 'B.F'], s1) + + # Iterate using foreach() + var s2 = [] + foreach(objlist, (k, v) => add(s2, v.F())) + assert_equal(['A.F', 'B.F'], s2) + + # Add a new list item + objlist->add(B.new('b2')) + assert_equal('b2', objlist[2].name) + END + v9.CheckSourceSuccess(lines) + + lines =<< trim END + vim9script + + class A + endclass + + class B + endclass + + var objlist = [A.new(), B.new()] + def Fn() + objlist->add(10) enddef - def F(): string - return 'D.F' + + try + Fn() + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected object but got number') + endtry + + try + objlist->add(10) + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected object but got number') + endtry + END + v9.CheckSourceSuccess(lines) + + # Adding an enum to a List of objects should fail + lines =<< trim END + vim9script + class A + endclass + class B + endclass + enum C + Red, + Green, + endenum + var items = [A.new(), B.new()] + def Fn() + items->add(C.Red) enddef - endclass - var obj1 = C.new() - var obj2 = D.new('a') + try + Fn() + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected object but got enum') + endtry - def CheckObjectList() - var items = [obj1, obj2] - assert_equal('list', typename(items)) - assert_equal('C.F', items[0].F()) - assert_equal('D.F', items[1].F()) - enddef + try + items->add(C.Green) + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected object but got enum') + endtry - CheckObjectList() + var items2 = [C.Red, C.Green] + def Fn2() + items2->add(A.new()) + enddef + try + Fn2() + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected enum but got object') + endtry - var items2 = [obj1, obj2] - assert_equal('list', typename(items2)) - assert_equal('C.F', items2[0].F()) - assert_equal('D.F', items2[1].F()) + try + items2->add(B.new()) + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected enum but got object') + endtry + END + v9.CheckSourceSuccess(lines) +enddef + +" Test for using a dict of objects +def Test_dict_of_objects() + var lines =<< trim END + vim9script + + class A + var n: list = [100, 101] + def F(): string + return 'A.F' + enddef + endclass + + class B + var name: string + var n: list = [200, 201] + def new(this.name) + enddef + def F(): string + return 'B.F' + enddef + endclass + + var obj1 = A.new() + var obj2 = B.new('b1') + + def CheckObjectDict() + var objdict = {o_a: obj1, o_b: obj2} + assert_equal('dict>', typename(objdict)) + + # Use a member function + assert_equal('A.F', objdict.o_a.F()) + assert_equal('B.F', objdict.o_b.F()) + + # Use a member variable on the RHS + assert_equal([100, 101], objdict.o_a.n) + assert_equal([200, 201], objdict.o_b.n) + + # Use a member variable on the LHS + objdict.o_a.n[1] = 110 + objdict.o_b.n[1] = 210 + assert_equal([100, 110], objdict.o_a.n) + assert_equal([200, 210], objdict.o_b.n) + + # Iterate using a for loop + var l = [] + for v in values(objdict) + add(l, v.F()) + endfor + assert_equal(['A.F', 'B.F'], l) + + # Iterate using foreach() + l = [] + foreach(objdict, (k, v) => add(l, v.F())) + assert_equal(['A.F', 'B.F'], l) + + # Add a new dict item + objdict['o_b2'] = B.new('b2') + assert_equal('b2', objdict.o_b2.name) + enddef + + CheckObjectDict() + + var objdict = {o_a: A.new(), o_b: B.new('b2')} + assert_equal('dict>', typename(objdict)) + assert_equal('A.F', objdict.o_a.F()) + assert_equal('B.F', objdict.o_b.F()) + assert_equal([100, 101], objdict.o_a.n) + assert_equal([200, 201], objdict.o_b.n) + + var l = [] + for v in values(objdict) + add(l, v.F()) + endfor + assert_equal(['A.F', 'B.F'], l) + + # Add a new dict item + objdict['o_b2'] = B.new('b2') + assert_equal('b2', objdict.o_b2.name) + END + v9.CheckSourceSuccess(lines) + + lines =<< trim END + vim9script + + class A + endclass + class B + endclass + class C + endclass + var objdict = {a: A.new(), b: B.new()} + def Fn() + objdict['c'] = C.new() + enddef + + try + Fn() + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected object but got number') + endtry + + try + objdict['c'] = C.new() + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected object but got number') + endtry + END + v9.CheckSourceSuccess(lines) + + # Adding an enum to a Dict of objects should fail + lines =<< trim END + vim9script + class A + endclass + class B + endclass + enum C + Red, + Green, + endenum + var items = {o_a: A.new(), o_b: B.new()} + def Fn() + items['o_c'] = C.Red + enddef + + try + Fn() + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected object but got enum') + endtry + + try + items['o_c'] = C.Green + catch + assert_exception('Vim(var):E1012: Type mismatch; expected object but got enum') + endtry + + var items2 = {red: C.Red, green: C.Green} + def Fn2() + items2['o_a'] = A.new() + enddef + try + Fn2() + catch + assert_exception('Vim(eval):E1012: Type mismatch; expected enum but got object') + endtry + + try + items2['o_a'] = B.new() + catch + assert_exception('Vim(var):E1012: Type mismatch; expected enum but got object') + endtry END v9.CheckSourceSuccess(lines) enddef diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index d9013ddf54..8456037c71 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -5180,7 +5180,7 @@ def Test_null_values() [null_dict, 1, '{}', 4, 'dict'], [null_function, 1, "function('')", 2, 'func(...): unknown'], [null_list, 1, '[]', 3, 'list'], - [null_object, 1, 'object of [unknown]', 13, 'object'], + [null_object, 1, 'object of [unknown]', 13, 'object'], [null_partial, 1, "function('')", 2, 'func(...): unknown'], [null_string, 1, "''", 1, 'string'] ] diff --git a/src/version.c b/src/version.c index c90c7b56e9..47104eff45 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1267, /**/ 1266, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index 34a78daef4..0a4c3facb6 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -2498,7 +2498,8 @@ compile_load_lhs( : get_type_on_stack(cctx, 0); if (lhs->lhs_type->tt_type == VAR_CLASS - || lhs->lhs_type->tt_type == VAR_OBJECT) + || (lhs->lhs_type->tt_type == VAR_OBJECT + && lhs->lhs_type != &t_object_any)) { // Check whether the class or object variable is modifiable if (!lhs_class_member_modifiable(lhs, var_start, cctx)) @@ -2522,7 +2523,7 @@ compile_load_lhs( return OK; } - return generate_loadvar(cctx, lhs); + return generate_loadvar(cctx, lhs); } /* diff --git a/src/vim9expr.c b/src/vim9expr.c index 68de736012..0ceff0b851 100644 --- a/src/vim9expr.c +++ b/src/vim9expr.c @@ -2684,7 +2684,8 @@ compile_subscript( type = get_type_on_stack(cctx, 0); if (type != &t_unknown && (type->tt_type == VAR_CLASS - || type->tt_type == VAR_OBJECT)) + || (type->tt_type == VAR_OBJECT + && type != &t_object_any))) { // class member: SomeClass.varname // class method: SomeClass.SomeMethod() diff --git a/src/vim9instr.c b/src/vim9instr.c index 1b322f64a1..d4593ea138 100644 --- a/src/vim9instr.c +++ b/src/vim9instr.c @@ -756,7 +756,7 @@ generate_SETTYPE( generate_PUSHOBJ(cctx_T *cctx) { RETURN_OK_IF_SKIP(cctx); - if (generate_instr_type(cctx, ISN_PUSHOBJ, &t_object) == NULL) + if (generate_instr_type(cctx, ISN_PUSHOBJ, &t_object_any) == NULL) return FAIL; return OK; } @@ -2142,7 +2142,8 @@ generate_PCALL( RETURN_OK_IF_SKIP(cctx); - if (type->tt_type == VAR_ANY || type->tt_type == VAR_UNKNOWN) + if (type->tt_type == VAR_ANY || type->tt_type == VAR_UNKNOWN + || type == &t_object_any) ret_type = &t_any; else if (type->tt_type == VAR_FUNC || type->tt_type == VAR_PARTIAL) { @@ -2213,7 +2214,9 @@ generate_STRINGMEMBER(cctx_T *cctx, char_u *name, size_t len) // check for dict type type = get_type_on_stack(cctx, 0); if (type->tt_type != VAR_DICT - && type->tt_type != VAR_ANY && type->tt_type != VAR_UNKNOWN) + && type->tt_type != VAR_OBJECT + && type->tt_type != VAR_ANY + && type->tt_type != VAR_UNKNOWN) { char *tofree; diff --git a/src/vim9type.c b/src/vim9type.c index 03a391a17c..2f85095879 100644 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -764,7 +764,7 @@ oc_typval2type(typval_T *tv) if (tv->vval.v_object != NULL) return &tv->vval.v_object->obj_class->class_object_type; - return &t_object; + return &t_object_any; } /* @@ -1307,8 +1307,11 @@ check_type_maybe( return MAYBE; // use runtime type check if (actual->tt_type != VAR_OBJECT) return FAIL; // don't use tt_class - if (actual->tt_class == NULL) - return OK; // A null object matches + if (actual->tt_class == NULL) // null object + return OK; + // t_object_any matches any object except for an enum item + if (expected == &t_object_any && !IS_ENUM(actual->tt_class)) + return OK; // For object method arguments, do a invariant type check in // an extended class. For all others, do a covariance type check. @@ -2122,6 +2125,11 @@ common_type(type_T *type1, type_T *type2, type_T **dest, garray_T *type_gap) common_type_var_func(type1, type2, dest, type_gap); return; } + else if (type1->tt_type == VAR_OBJECT) + { + *dest = &t_object_any; + return; + } } *dest = &t_any; @@ -2428,7 +2436,7 @@ type_name_class_or_obj(char *name, type_T *type, char **tofree) name = "enum"; } else - class_name = (char_u *)"Unknown"; + class_name = (char_u *)"any"; size_t len = STRLEN(name) + STRLEN(class_name) + 3; *tofree = alloc(len); From 9301b437bca880c10921a7d0369d671a716e85f2 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 2 Apr 2025 19:32:03 +0200 Subject: [PATCH 028/633] runtime(openPlugin): fix E480 when opening URLs with wildcards on Windows This might be a bug in Windows Vim, as when using the following command it throws E480: ``` :com! -complete=file -nargs=1 :Echo echo :Echo ? E480: No match ? ``` Work-around this by using `-nargs=*` to allow more arguments, even though this is not completely correct. fixes: #17029 Signed-off-by: Christian Brabandt --- runtime/doc/eval.txt | 13 ++++++++++--- runtime/doc/tags | 2 ++ runtime/plugin/openPlugin.vim | 12 ++++++++++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 7ea768aef5..170d2d0377 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 9.1. Last change: 2025 Mar 30 +*eval.txt* For Vim version 9.1. Last change: 2025 Apr 02 VIM REFERENCE MANUAL by Bram Moolenaar @@ -5149,7 +5149,7 @@ executable. It takes the following arguments: filetype string executable string - *dist#vim9#Open()* *:Open* + *dist#vim9#Open()* *:Open* *:URLOpen* *g:Openprg* *gx* dist#vim9#Open(file: string) ~ @@ -5157,6 +5157,8 @@ Opens `path` with the system default handler (macOS `open`, Windows `explorer.exe`, Linux `xdg-open`, …). If the variable |g:Openprg| exists the string specified in the variable is used instead. +The |:Open| user command uses file completion for its argument. + This function is by default called using the gx mapping. In visual mode tries to open the visually selected text. @@ -5175,13 +5177,18 @@ Usage: >vim :call dist#vim9#Open() :Open < + *package-open* +The |:Open| and |:Launch| command are provided by the included plugin +$VIMRUNTIME/plugin/openPlugin.vim - *dist#vim9#Launch()* *:Launch* + *dist#vim9#Launch()* *:Launch* dist#vim9#Launch(file: string) ~ Launches with the appropriate system programs. Intended for launching GUI programs within Vim. +The |:Launch| user command uses shell completion for its first argument. + NOTE: escaping of is left to the user Examples: >vim diff --git a/runtime/doc/tags b/runtime/doc/tags index fa4709224c..acb2251019 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -2188,6 +2188,7 @@ $quote eval.txt /*$quote* :TermdebugCommand terminal.txt /*:TermdebugCommand* :Texplore pi_netrw.txt /*:Texplore* :Tutor pi_tutor.txt /*:Tutor* +:URLOpen eval.txt /*:URLOpen* :Until terminal.txt /*:Until* :Up terminal.txt /*:Up* :UseVimball pi_vimball.txt /*:UseVimball* @@ -9448,6 +9449,7 @@ package-hlyank usr_05.txt /*package-hlyank* package-justify usr_25.txt /*package-justify* package-matchit usr_05.txt /*package-matchit* package-nohlsearch usr_05.txt /*package-nohlsearch* +package-open eval.txt /*package-open* package-termdebug terminal.txt /*package-termdebug* package-translate_example repeat.txt /*package-translate_example* package-translation repeat.txt /*package-translation* diff --git a/runtime/plugin/openPlugin.vim b/runtime/plugin/openPlugin.vim index 51592f09be..09f5ad2c43 100644 --- a/runtime/plugin/openPlugin.vim +++ b/runtime/plugin/openPlugin.vim @@ -3,12 +3,20 @@ vim9script # Vim runtime support library # # Maintainer: The Vim Project -# Last Change: 2025 Feb 01 +# Last Change: 2025 Apr 02 + +if exists("g:loaded_openPlugin") || &cp + finish +endif +g:loaded_openPlugin = 1 import autoload 'dist/vim9.vim' command -complete=shellcmd -nargs=1 Launch vim9.Launch(trim()) -command -complete=file -nargs=1 Open vim9.Open(trim()) + +# technically, -nargs=1 is correct, but this throws E480: No match +# when the argument contains a wildchar on Windows +command -complete=file -nargs=* Open vim9.Open(trim()) const no_gx = get(g:, "nogx", get(g:, "netrw_nogx", false)) if !no_gx From 7f518e044fbc60cffdf2c0f611cc8c4dc35c338c Mon Sep 17 00:00:00 2001 From: Anarion Dunedain Date: Wed, 2 Apr 2025 19:44:58 +0200 Subject: [PATCH 029/633] patch 9.1.1268: filetype: dax files are not recognized Problem: filetype: dax files are not recognized Solution: detect "*.dax" as dax filetype, include dax filetype and syntax plugin (Anarion Dunedain) Data Analysis Expressions (DAX) is a formula expression language used in Analysis Services, Power BI, and Power Pivot in Excel. DAX formulas include functions, operators, and values to perform advanced calculations and queries on data in related tables and columns in tabular data models. DAX language overview: - https://learn.microsoft.com/en-us/dax/dax-overview closes: #17035 Signed-off-by: Anarion Dunedain Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 2 + runtime/filetype.vim | 3 + runtime/ftplugin/dax.vim | 16 ++++ runtime/syntax/dax.vim | 151 ++++++++++++++++++++++++++++++++++ src/testdir/test_filetype.vim | 1 + src/version.c | 2 + 6 files changed, 175 insertions(+) create mode 100644 runtime/ftplugin/dax.vim create mode 100644 runtime/syntax/dax.vim diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index 1c0861b29e..f233b3936e 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -149,6 +149,7 @@ runtime/ftplugin/csv.vim @habamax runtime/ftplugin/cucumber.vim @tpope runtime/ftplugin/cuda.vim @ribru17 runtime/ftplugin/dart.vim @ribru17 +runtime/ftplugin/dax.vim @anarion80 runtime/ftplugin/deb822sources.vim @jamessan runtime/ftplugin/debchangelog.vim @jamessan runtime/ftplugin/debcontrol.vim @jamessan @@ -457,6 +458,7 @@ runtime/syntax/cucumber.vim @tpope runtime/syntax/d.vim @JesseKPhillips runtime/syntax/dart.vim @pr3d4t0r runtime/syntax/datascript.vim @dpelle +runtime/syntax/dax.vim @anarion80 runtime/syntax/deb822sources.vim @jamessan runtime/syntax/debchangelog.vim @jamessan runtime/syntax/debcontrol.vim @jamessan diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 4e386e9e39..e767305a3d 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -561,6 +561,9 @@ au BufNewFile,BufRead *.cu,*.cuh setf cuda " Cue au BufNewFile,BufRead *.cue setf cue +" DAX +au BufNewFile,BufRead *.dax setf dax + " Debian devscripts au BufNewFile,BufRead devscripts.conf,.devscripts setf sh diff --git a/runtime/ftplugin/dax.vim b/runtime/ftplugin/dax.vim new file mode 100644 index 0000000000..e5783f03a3 --- /dev/null +++ b/runtime/ftplugin/dax.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin +" Language: Data Analysis Expressions (DAX) +" Maintainer: Anarion Dunedain +" Last Change: 2025 Apr 2 + +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/syntax/dax.vim b/runtime/syntax/dax.vim new file mode 100644 index 0000000000..12e54ee1f5 --- /dev/null +++ b/runtime/syntax/dax.vim @@ -0,0 +1,151 @@ +" Vim syntax file +" Language: Data Analysis Expressions (DAX) +" Maintainer: Anarion Dunedain +" Last Change: +" 2025 Mar 28 First version + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo = &cpo +set cpo&vim + +" There are DAX functions with dot in the name (like VARX.S) +setlocal iskeyword+=. +" DAX is case insensitive +syn case ignore + +" DAX statements +syn keyword daxStatement DEFINE EVALUATE MEASURE RETURN VAR +syn match daxStatement "ORDER\ BY" +syn match daxStatement "START\ AT" + +" TODO +syn keyword daxTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained + +" DAX functions +syn keyword daxFunction + \ ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH + \ ADDCOLUMNS ADDMISSINGITEMS ALL ALLCROSSFILTERED ALLEXCEPT ALLNOBLANKROW ALLSELECTED + \ AMORDEGRC AMORLINC AND APPROXIMATEDISTINCTCOUNT ASIN ASINH ATAN + \ ATANH AVERAGE AVERAGEA AVERAGEX BETA.DIST BETA.INV BITAND + \ BITLSHIFT BITOR BITRSHIFT BITXOR BLANK CALCULATE CALCULATETABLE + \ CALENDAR CALENDARAUTO CEILING CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT + \ CLOSINGBALANCEMONTH CLOSINGBALANCEQUARTER CLOSINGBALANCEYEAR COALESCE COLUMNSTATISTICS COMBIN COMBINA + \ COMBINEVALUES CONCATENATE CONCATENATEX CONFIDENCE.NORM CONFIDENCE.T CONTAINSROW + \ CONTAINSSTRING CONTAINSSTRINGEXACT CONVERT COS COSH COT COTH + \ COUNT COUNTA COUNTAX COUNTBLANK COUNTROWS COUNTX COUPDAYBS + \ COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD CROSSFILTER CROSSJOIN + \ CUMIPMT CUMPRINC CURRENCY CURRENTGROUP CUSTOMDATA DATATABLE DATE + \ DATEADD DATEDIFF DATESBETWEEN DATESINPERIOD DATESMTD DATESQTD DATESYTD + \ DATEVALUE DAY DB DDB DEGREES DETAILROWS DISC + \ DISTINCT column DISTINCT table DISTINCTCOUNT DISTINCTCOUNTNOBLANK DIVIDE DOLLARDE DOLLARFR + \ DURATION EARLIER EARLIEST EDATE EFFECT ENDOFMONTH ENDOFQUARTER + \ ENDOFYEAR EOMONTH ERROR EVALUATEANDLOG EVEN EXACT EXCEPT + \ EXP EXPON.DIST FACT FALSE FILTER FILTERS FIND + \ FIRST FIRSTDATE FIXED FLOOR FORMAT FV GCD + \ GENERATE GENERATEALL GENERATESERIES GEOMEAN GEOMEANX GROUPBY HASONEFILTER + \ HASONEVALUE HOUR IF IF.EAGER IFERROR IGNORE INDEX + \ INFO.ALTERNATEOFDEFINITIONS INFO.ANNOTATIONS INFO.ATTRIBUTEHIERARCHIES INFO.ATTRIBUTEHIERARCHYSTORAGES INFO.CALCDEPENDENCY INFO.CALCULATIONGROUPS INFO.CALCULATIONITEMS + \ INFO.CATALOGS INFO.CHANGEDPROPERTIES INFO.COLUMNPARTITIONSTORAGES INFO.COLUMNPERMISSIONS INFO.COLUMNS INFO.COLUMNSTORAGES INFO.CSDLMETADATA + \ INFO.CULTURES INFO.DATACOVERAGEDEFINITIONS INFO.DATASOURCES INFO.DELTATABLEMETADATASTORAGES INFO.DEPENDENCIES INFO.DETAILROWSDEFINITIONS INFO.DICTIONARYSTORAGES + \ INFO.EXCLUDEDARTIFACTS INFO.EXPRESSIONS INFO.EXTENDEDPROPERTIES INFO.FORMATSTRINGDEFINITIONS INFO.FUNCTIONS INFO.GENERALSEGMENTMAPSEGMENTMETADATASTORAGES INFO.GROUPBYCOLUMNS + \ INFO.HIERARCHIES INFO.HIERARCHYSTORAGES INFO.KPIS INFO.LEVELS INFO.LINGUISTICMETADATA INFO.MEASURES INFO.MODEL + \ INFO.OBJECTTRANSLATIONS INFO.PARQUETFILESTORAGES INFO.PARTITIONS INFO.PARTITIONSTORAGES INFO.PERSPECTIVECOLUMNS INFO.PERSPECTIVEHIERARCHIES INFO.PERSPECTIVEMEASURES + \ INFO.PERSPECTIVES INFO.PERSPECTIVETABLES INFO.PROPERTIES INFO.QUERYGROUPS INFO.REFRESHPOLICIES INFO.RELATEDCOLUMNDETAILS INFO.RELATIONSHIPINDEXSTORAGES + \ INFO.RELATIONSHIPS INFO.RELATIONSHIPSTORAGES INFO.ROLEMEMBERSHIPS INFO.ROLES INFO.SEGMENTMAPSTORAGES INFO.SEGMENTSTORAGES INFO.STORAGEFILES + \ INFO.STORAGEFOLDERS INFO.STORAGETABLECOLUMNS INFO.STORAGETABLECOLUMNSEGMENTS INFO.STORAGETABLES INFO.TABLEPERMISSIONS INFO.TABLES INFO.TABLESTORAGES + \ INFO.VARIATIONS INFO.VIEW.COLUMNS INFO.VIEW.MEASURES INFO.VIEW.RELATIONSHIPS INFO.VIEW.TABLES INT INTERSECT + \ INTRATE IPMT ISAFTER ISBLANK ISCROSSFILTERED ISEMPTY ISERROR + \ ISEVEN ISFILTERED ISINSCOPE ISLOGICAL ISNONTEXT ISNUMBER ISO.CEILING + \ ISODD ISONORAFTER ISPMT ISSELECTEDMEASURE ISSUBTOTAL ISTEXT KEEPFILTERS + \ LAST LASTDATE LCM LEFT LEN LINEST LINESTX + \ LN LOG LOG10 LOOKUPVALUE LOWER MATCHBY MAX + \ MAXA MAXX MDURATION MEDIAN MEDIANX MID MIN + \ MINA MINUTE MINX MOD MONTH MOVINGAVERAGE MROUND + \ NATURALINNERJOIN NATURALLEFTOUTERJOIN NETWORKDAYS NEXT NEXTDAY NEXTMONTH NEXTQUARTER + \ NEXTYEAR NOMINAL NONVISUAL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV + \ NOT NOW NPER ODD ODDFPRICE ODDFYIELD ODDLPRICE + \ ODDLYIELD OFFSET OPENINGBALANCEMONTH OPENINGBALANCEQUARTER OPENINGBALANCEYEAR OR ORDERBY + \ PARALLELPERIOD PARTITIONBY PATH PATHCONTAINS PATHITEM PATHITEMREVERSE PATHLENGTH + \ PDURATION PERCENTILE.EXC PERCENTILE.INC PERCENTILEX.EXC PERCENTILEX.INC PERMUT PI + \ PMT POISSON.DIST POWER PPMT PREVIOUS PREVIOUSDAY PREVIOUSMONTH + \ PREVIOUSQUARTER PREVIOUSYEAR PRICE PRICEDISC PRICEMAT PRODUCT PRODUCTX + \ PV QUARTER QUOTIENT RADIANS RAND RANDBETWEEN RANGE + \ RANK RANK.EQ RANKX RATE RECEIVED RELATED RELATEDTABLE + \ REMOVEFILTERS REPLACE REPT RIGHT ROLLUP ROLLUPADDISSUBTOTAL ROLLUPGROUP + \ ROLLUPISSUBTOTAL ROUND ROUNDDOWN ROUNDUP ROW ROWNUMBER RRI + \ RUNNINGSUM SAMEPERIODLASTYEAR SAMPLE SEARCH SECOND SELECTCOLUMNS SELECTEDMEASURE + \ SELECTEDMEASUREFORMATSTRING SELECTEDMEASURENAME SELECTEDVALUE SIGN SIN SINH SLN + \ SQRT SQRTPI STARTOFMONTH STARTOFQUARTER STARTOFYEAR STDEV.P STDEV.S + \ STDEVX.P STDEVX.S SUBSTITUTE SUBSTITUTEWITHINDEX SUM SUMMARIZE SUMMARIZECOLUMNS + \ SUMX SWITCH SYD T.DIST T.DIST.2T T.DIST.RT T.INV + \ T.INV.2t TAN TANH TBILLEQ TBILLPRICE TBILLYIELD TIME + \ TIMEVALUE TOCSV TODAY TOJSON TOPN TOTALMTD TOTALQTD + \ TOTALYTD TREATAS TRIM TRUE TRUNC Table Constructor UNICHAR + \ UNICODE UNION UPPER USERCULTURE USERELATIONSHIP USERNAME USEROBJECTID + \ USERPRINCIPALNAME UTCNOW UTCTODAY VALUE VALUES VAR.P VAR.S + \ VARX.P VARX.S VDB WEEKDAY WEEKNUM WINDOW XIRR + \ XNPV YEAR YEARFRAC YIELD YIELDDISC YIELDMAT + +" CONTAINS is a vim syntax keyword and can't be a defined keyword +syn match daxFunction "CONTAINS" + +" Numbers +" integer number, or floating point number without a dot. +syn match daxNumber "\<\d\+\>" +" floating point number, with dot +syn match daxNumber "\<\d\+\.\d*\>" + +syn match daxFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+" +syn match daxFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\=" +syn match daxFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\=" + +" String and Character constants +syn region daxString start=+"+ end=+"+ + +" DAX Table and Column names +syn region daxTable start=+'+ms=s+1 end=+'+me=e-1 +syn region daxColumn matchgroup=daxParen start=/\[/ end=/\]/ + +" Operators +syn match daxOperator "+" +syn match daxOperator "-" +syn match daxOperator "*" +syn match daxOperator "/" +syn match daxOperator "\^" +syn match daxOperator "\ NOT(\s\|\\)" +syn match daxOperator "\ IN\ " +syn match daxOperator "&&" +syn match daxOperator "&" +syn match daxOperator "\\|\\|" +syn match daxOperator "[<>]=\=" +syn match daxOperator "<>" +syn match daxOperator "=" +syn match daxOperator ">" +syn match daxOperator "<" + +" Comments +syn region daxComment start="\(^\|\s\)\//" end="$" contains=daxTodo +syn region daxComment start="/\*" end="\*/" contains=daxTodo + +" Define highlighting +hi def link daxComment Comment +hi def link daxNumber Number +hi def link daxFloat Float +hi def link daxString String +hi def link daxStatement Keyword +hi def link daxOperator Operator +hi def link daxFunction Function +hi def link daxTable Number +hi def link daxColumn Statement +hi def link daxParen Delimiter +hi def link daxTodo Todo + +let b:current_syntax = "dax" + +let &cpo = s:keepcpo +unlet! s:keepcpo + +" vim: ts=8 diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 531c500af8..6a9b2b0f9a 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -213,6 +213,7 @@ def s:GetFilenameChecks(): dict> dafny: ['file.dfy'], dart: ['file.dart', 'file.drt'], datascript: ['file.ds'], + dax: ['file.dax'], dcd: ['file.dcd'], deb822sources: ['/etc/apt/sources.list.d/file.sources', 'any/etc/apt/sources.list.d/file.sources'], debchangelog: ['changelog.Debian', 'changelog.dch', 'NEWS.Debian', 'NEWS.dch', '/debian/changelog'], diff --git a/src/version.c b/src/version.c index 47104eff45..192fd0f156 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1268, /**/ 1267, /**/ From e4e4d1c381e9d0af55f6111e9bcaf98ad60461fc Mon Sep 17 00:00:00 2001 From: glepnir Date: Wed, 2 Apr 2025 20:18:25 +0200 Subject: [PATCH 030/633] patch 9.1.1269: completion: compl_shown_match is updated when starting keyword completion Problem: compl_shown_match is updated when starting keyword completion and does not include fuzzy matching. Solution: Do not update compl_shown_match when starting keyword completion, since it is the one already selected by the keyword completion direction. (glepnir) closes: #17033 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/insexpand.c | 9 +++++++-- src/testdir/test_ins_complete.vim | 6 ++++++ src/version.c | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 3c81749c6a..de3d519823 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -1352,10 +1352,10 @@ ins_compl_build_pum(void) int compl_no_select = (cur_cot_flags & COT_NOSELECT) != 0; int fuzzy_filter = (cur_cot_flags & COT_FUZZY) != 0; int fuzzy_sort = fuzzy_filter && !(cur_cot_flags & COT_NOSORT); - compl_T *match_head = NULL; compl_T *match_tail = NULL; compl_T *match_next = NULL; + int update_shown_match = fuzzy_filter; // Need to build the popup menu list. compl_match_arraysize = 0; @@ -1366,6 +1366,10 @@ ins_compl_build_pum(void) if (match_at_original_text(compl_shown_match)) shown_match_ok = TRUE; + if (fuzzy_filter && ctrl_x_mode_normal() && compl_leader.string == NULL + && compl_shown_match->cp_score > 0) + update_shown_match = FALSE; + if (compl_leader.string != NULL && STRCMP(compl_leader.string, compl_orig_text.string) == 0 && shown_match_ok == FALSE) @@ -1415,7 +1419,8 @@ ins_compl_build_pum(void) shown_compl = compl; // Update the maximum fuzzy score and the shown match // if the current item's score is higher - if (fuzzy_sort && compl->cp_score > max_fuzzy_score) + if (fuzzy_sort && compl->cp_score > max_fuzzy_score + && update_shown_match) { did_find_shown_match = TRUE; max_fuzzy_score = compl->cp_score; diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 50b1834691..f60aba8d7a 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -2829,6 +2829,12 @@ func Test_complete_opt_fuzzy() call feedkeys("i\=CompAnother()\\\", 'tx') call assert_equal("for", g:abbr) + set cot=menu,fuzzy + call feedkeys("Sblue\bar\b\\\\", 'tx') + call assert_equal('bar', getline('.')) + call feedkeys("Sb\\\\", 'tx') + call assert_equal('blue', getline('.')) + " clean up set omnifunc= bw! diff --git a/src/version.c b/src/version.c index 192fd0f156..7882f5eb76 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1269, /**/ 1268, /**/ From 8293574c8b116382ed6e0c3c709a04406f07cfd5 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 2 Apr 2025 20:26:38 +0200 Subject: [PATCH 031/633] runtime(doc): update pi_zip.txt with current list of zip file extensions closes: #17037 Signed-off-by: Christian Brabandt --- runtime/doc/pi_zip.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/runtime/doc/pi_zip.txt b/runtime/doc/pi_zip.txt index 2e98becf18..efe108bdc7 100644 --- a/runtime/doc/pi_zip.txt +++ b/runtime/doc/pi_zip.txt @@ -1,4 +1,4 @@ -*pi_zip.txt* For Vim version 9.1. Last change: 2023 Nov 05 +*pi_zip.txt* For Vim version 9.1. Last change: 2025 Apr 02 +====================+ | Zip File Interface | @@ -100,12 +100,14 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright* should be treated as zip files. Alternatively, one may change *g:zipPlugin_ext* in one's .vimrc. - Currently (11/30/15) it holds: > - - let g:zipPlugin_ext= '*.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip, - \ *.oxt,*.kmz,*.wsz,*.xap,*.docx,*.docm,*.dotx,*.dotm,*.potx,*.potm, - \ *.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsx,*.xlsm, - \ *.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx,*.epub' + Currently (as of April 2025) it holds: > + + let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx, + \ *.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz, + \ *.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf, + \ *.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam, + \ *.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.wsz,*.xap, + \ *.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip' ============================================================================== 4. History *zip-history* {{{1 From 7fb90815a0a29238c12e53b53e14fc55109f02b7 Mon Sep 17 00:00:00 2001 From: John Marriott Date: Wed, 2 Apr 2025 20:32:35 +0200 Subject: [PATCH 032/633] patch 9.1.1270: missing out-of-memory checks in buffer.c Problem: missing out-of-memory checks in buffer.c Solution: handle out-of-memory situations during allocation (John Marriott) closes: #17031 Signed-off-by: John Marriott Signed-off-by: Christian Brabandt --- src/buffer.c | 58 +++++++++++++++++++++++++++++++-------------------- src/version.c | 2 ++ 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 68388db088..8277b726c2 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -2926,6 +2926,8 @@ ExpandBufnames( p = home_replace_save(buf, p); else p = vim_strsave(p); + if (p == NULL) + return FAIL; if (!fuzzy) { @@ -4030,8 +4032,11 @@ maketitle(void) else { p = transstr(gettail(curbuf->b_fname)); - vim_strncpy(buf, p, SPACE_FOR_FNAME); - vim_free(p); + if (p != NULL) + { + vim_strncpy(buf, p, SPACE_FOR_FNAME); + vim_free(p); + } } #ifdef FEAT_TERMINAL @@ -4084,8 +4089,11 @@ maketitle(void) if (off < SPACE_FOR_DIR) { p = transstr(buf + off); - vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off)); - vim_free(p); + if (p != NULL) + { + vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off)); + vim_free(p); + } } else { @@ -4767,25 +4775,29 @@ build_stl_str_hl( size_t new_fmt_len = parsed_usefmt + str_length + fmt_length + 3; char_u *new_fmt = (char_u *)alloc(new_fmt_len * sizeof(char_u)); - char_u *new_fmt_p = new_fmt; - - new_fmt_p = (char_u *)memcpy(new_fmt_p, usefmt, parsed_usefmt) - + parsed_usefmt; - new_fmt_p = (char_u *)memcpy(new_fmt_p , str, str_length) - + str_length; - new_fmt_p = (char_u *)memcpy(new_fmt_p, "%}", 2) + 2; - new_fmt_p = (char_u *)memcpy(new_fmt_p , s, fmt_length) - + fmt_length; - *new_fmt_p = 0; - new_fmt_p = NULL; - - if (usefmt != fmt) - vim_free(usefmt); - VIM_CLEAR(str); - usefmt = new_fmt; - s = usefmt + parsed_usefmt; - evaldepth++; - continue; + + if (new_fmt != NULL) + { + char_u *new_fmt_p = new_fmt; + + new_fmt_p = (char_u *)memcpy(new_fmt_p, usefmt, parsed_usefmt) + + parsed_usefmt; + new_fmt_p = (char_u *)memcpy(new_fmt_p , str, str_length) + + str_length; + new_fmt_p = (char_u *)memcpy(new_fmt_p, "%}", 2) + 2; + new_fmt_p = (char_u *)memcpy(new_fmt_p , s, fmt_length) + + fmt_length; + *new_fmt_p = 0; + new_fmt_p = NULL; + + if (usefmt != fmt) + vim_free(usefmt); + VIM_CLEAR(str); + usefmt = new_fmt; + s = usefmt + parsed_usefmt; + evaldepth++; + continue; + } } #endif break; diff --git a/src/version.c b/src/version.c index 7882f5eb76..6f54a94f50 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1270, /**/ 1269, /**/ From a359c9c25e5c3c1e543fc720223aa7256e6f72cf Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 2 Apr 2025 20:42:58 +0200 Subject: [PATCH 033/633] runtime(zip): add *.whl to the list of zip extensions This commits adds the extension *.whl to the list of zip extensions. Wheel (WHL) files are binary distribution files for python packages. Reference: https://packaging.python.org/en/latest/specifications/binary-distribution-format/ fixes: #17038 Signed-off-by: Christian Brabandt --- runtime/doc/pi_zip.txt | 4 ++-- runtime/plugin/zipPlugin.vim | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/runtime/doc/pi_zip.txt b/runtime/doc/pi_zip.txt index efe108bdc7..afc2d0eebe 100644 --- a/runtime/doc/pi_zip.txt +++ b/runtime/doc/pi_zip.txt @@ -106,8 +106,8 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright* \ *.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz, \ *.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf, \ *.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam, - \ *.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.wsz,*.xap, - \ *.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip' + \ *.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.whl,*.wsz, + \ *.xap,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip' ============================================================================== 4. History *zip-history* {{{1 diff --git a/runtime/plugin/zipPlugin.vim b/runtime/plugin/zipPlugin.vim index 2af119bbcb..2d12e65ec1 100644 --- a/runtime/plugin/zipPlugin.vim +++ b/runtime/plugin/zipPlugin.vim @@ -3,6 +3,8 @@ " Date: Dec 07, 2021 " Maintainer: This runtime file is looking for a new maintainer. " Former Maintainer: Charles E Campbell +" Last Change: +" 2025 Apr 02 by Vim Project: add *.whl to list of zip extensions (#17038) " License: Vim License (see vim's :help license) " Copyright: Copyright (C) 2005-2016 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, @@ -28,7 +30,7 @@ set cpo&vim " --------------------------------------------------------------------- " Options: {{{1 if !exists("g:zipPlugin_ext") - let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx,*.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,*.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf,*.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam,*.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.wsz,*.xap,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip' + let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx,*.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,*.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf,*.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam,*.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.whl,*.wsz,*.xap,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip' endif " --------------------------------------------------------------------- From df68419ba0c911ff3b49c7f4835d9f29f0dd8f77 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Thu, 3 Apr 2025 12:33:02 +0200 Subject: [PATCH 034/633] runtime(doc): clarify the use of change marks when writing a buffer related: #17008 Signed-off-by: Christian Brabandt --- runtime/doc/autocmd.txt | 9 +++++---- runtime/doc/change.txt | 10 +++++----- runtime/doc/editing.txt | 7 ++++--- runtime/doc/motion.txt | 8 ++++---- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index 372d1acbc3..820c302608 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -1,4 +1,4 @@ -*autocmd.txt* For Vim version 9.1. Last change: 2025 Mar 12 +*autocmd.txt* For Vim version 9.1. Last change: 2025 Apr 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -593,7 +593,8 @@ BufWriteCmd Before writing the whole buffer to a file. The buffer contents should not be changed. When the command resets 'modified' the undo information is adjusted to mark older undo - states as 'modified', like |:write| does. + states as 'modified', like |:write| does. Use + the |'[| and |']| marks for the range of lines. |Cmd-event| *BufWritePost* BufWritePost After writing the whole buffer to a file @@ -886,14 +887,14 @@ FileType When the 'filetype' option has been set. The FileWriteCmd Before writing to a file, when not writing the whole buffer. Should do the writing to the file. Should not change the buffer. Use the - '[ and '] marks for the range of lines. + |'[| and |']| marks for the range of lines. |Cmd-event| *FileWritePost* FileWritePost After writing to a file, when not writing the whole buffer. *FileWritePre* FileWritePre Before writing to a file, when not writing the - whole buffer. Use the '[ and '] marks for the + whole buffer. Use the |'[| and |']| marks for the range of lines. *FilterReadPost* FilterReadPost After reading a file from a filter command. diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt index c656a117c3..24137c74db 100644 --- a/runtime/doc/change.txt +++ b/runtime/doc/change.txt @@ -1,4 +1,4 @@ -*change.txt* For Vim version 9.1. Last change: 2025 Mar 18 +*change.txt* For Vim version 9.1. Last change: 2025 Apr 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -156,8 +156,8 @@ only after a '.'). The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting spaces before and after a multibyte character |fo-table|. -The '[ mark is set at the end of the first line that was joined, '] at the end -of the resulting line. +The |'[| mark is set at the end of the first line that was joined, |']| at the +end of the resulting line. ============================================================================== @@ -1188,8 +1188,8 @@ the ":put" command, Vim always inserts the text in the next line. You can exchange two characters with the command sequence "xp". You can exchange two lines with the command sequence "ddp". You can exchange two words with the command sequence "deep" (start with the cursor in the blank space before the -first word). You can use the "']" or "`]" command after the put command to -move the cursor to the end of the inserted text, or use "'[" or "`[" to move +first word). You can use the |']| or |`]| command after the put command to +move the cursor to the end of the inserted text, or use |'[| or |`[| to move the cursor to the start. *put-Visual-mode* *v_p* *v_P* diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt index a70515d6ff..a88aad1a7f 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 Oct 14 +*editing.txt* For Vim version 9.1. Last change: 2025 Apr 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -974,8 +974,9 @@ Note: When the 'write' option is off, you are not able to write any file. executed like with ":!{cmd}", any '!' is replaced with the previous command |:!|. -The default [range] for the ":w" command is the whole buffer (1,$). If you -write the whole buffer, it is no longer considered changed. When you +The default [range] for the ":w" command is the whole buffer (1,$). The |'[| +and |']| marks will be set to the [range] being used for the write command. +If you write the whole buffer, it is no longer considered changed. When you write it to a different file with ":w somefile" it depends on the "+" flag in 'cpoptions'. When included, the write command will reset the 'modified' flag, even though the buffer itself may still be different from its file. diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt index 4e57797a54..726d15ddea 100644 --- a/runtime/doc/motion.txt +++ b/runtime/doc/motion.txt @@ -1,4 +1,4 @@ -*motion.txt* For Vim version 9.1. Last change: 2024 Dec 17 +*motion.txt* For Vim version 9.1. Last change: 2025 Apr 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -895,12 +895,12 @@ Numbered mark should be stored. See |viminfo-file-marks|. *'[* *`[* -'[ `[ To the first character of the previously changed - or yanked text. +'[ `[ To the first character of the previously changed, + or yanked text. Also set when writing the buffer. *']* *`]* '] `] To the last character of the previously changed or - yanked text. + yanked text. Also set when writing the buffer. After executing an operator the Cursor is put at the beginning of the text that was operated upon. After a put command ("p" or "P") the cursor is From c1e019247d35b61c7a514c853d067ac490aed79d Mon Sep 17 00:00:00 2001 From: RestorerZ Date: Thu, 3 Apr 2025 21:04:57 +0200 Subject: [PATCH 035/633] translation(ru): fix and updated messages translation closes: #17046 Signed-off-by: RestorerZ Signed-off-by: Christian Brabandt --- src/po/ru.cp1251.po | 81 ++++++++++++++++++++++++--------------------- src/po/ru.po | 81 ++++++++++++++++++++++++--------------------- 2 files changed, 86 insertions(+), 76 deletions(-) diff --git a/src/po/ru.cp1251.po b/src/po/ru.cp1251.po index 027d048351..c69326a510 100644 --- a/src/po/ru.cp1251.po +++ b/src/po/ru.cp1251.po @@ -22,10 +22,10 @@ # msgid "" msgstr "" -"Project-Id-Version: RuVim_0.9011249.270325\n" +"Project-Id-Version: RuVim_0.9011270.030425\n" "Report-Msgid-Bugs-To: The Vim Project, \n" -"POT-Creation-Date: 2025-03-27 22:13+0300\n" -"PO-Revision-Date: 2025-03-28 07:35+0300\n" +"POT-Creation-Date: 2025-04-03 17:45+0300\n" +"PO-Revision-Date: 2025-04-03 19:22+0300\n" "Last-Translator: Restorer, \n" "Language-Team: RuVim, https://github.com/RestorerZ/RuVim\n" "Language: ru_RU\n" @@ -2026,7 +2026,7 @@ msgstr "-g\t\t\t msgid "-f or --nofork\tForeground: Don't fork when starting GUI" msgstr "" -"-f ��� --nofork\t��� ������� ��� �� �������� ������ �� ����������� �� ��" +"-f ��� --nofork\t�� ����������� �� �������� ������ ��� ������� ���" msgid "-v\t\t\tVi mode (like \"vi\")" msgstr "-v\t\t\t������ ��������� � ������ Vi (��� \"vi\")" @@ -2134,13 +2134,13 @@ msgstr "--noplugin\t\t # \n\t\t.. ��� �������� � 80 �������� (�. �����) msgid "-p[N]\t\tOpen N tab pages (default: one for each file)" msgstr "" -"-p[N]\t\t������� ������� ��� N ������ (�� ��������� ��������\n" +"-p[N]\t\t������� N ������� ��� ������ (�� ��������� ��������\n" "\t\t\t �� ����� ������� �� ������ ����)" # \n\t\t.. ��� �������� � 80 �������� (�. �����) msgid "-o[N]\t\tOpen N windows (default: one for each file)" msgstr "" -"-o[N]\t\t�������� ���� ��� N ������ (�� ��������� ��������\n" +"-o[N]\t\t������� N ���� ��� ������ (�� ��������� ��������\n" "\t\t\t �� ������ ���� �� ������ ����)" msgid "-O[N]\t\tLike -o but split vertically" @@ -9487,7 +9487,9 @@ msgstr "E1249: #, c-format msgid "E1250: Argument of %s must be a List, String, Dictionary or Blob" -msgstr "E1250: � ������� %s ��� ��������� ������ ���� List, String ��� BLOB" +msgstr "" +"E1250: � ������� %s ��� ��������� ������ ���� List, String, Dictionary ��� " +"BLOB" #, c-format msgid "E1251: List, Tuple, Dictionary, Blob or String required for argument %d" @@ -9501,8 +9503,8 @@ msgstr "E1252: #, c-format msgid "E1253: String, List, Tuple or Blob required for argument %d" -msgstr "E1253: ��� ������ ��������� ����� %d ������ ���� String, List, Tuple " -"��� BLOB" +msgstr "" +"E1253: ��� ������ ��������� ����� %d ������ ���� String, List, Tuple ��� BLOB" msgid "E1254: Cannot use script variable in for loop" msgstr "" @@ -9534,8 +9536,7 @@ msgid "E1260: Cannot unlet an imported item: %s" msgstr "E1260: �� ����������� �������� ���������� � ��������������� ������ %s" msgid "E1261: Cannot import .vim without using \"as\"" -msgstr "" -"E1261: ������ ���������� ����� ��� �������� ��������� ����� \"as\"" +msgstr "E1261: ������ ���������� ����� ��� �������� ��������� ����� \"as\"" #, c-format msgid "E1262: Cannot import the same script twice: %s" @@ -9698,8 +9699,8 @@ msgstr "" #, c-format msgid "E1301: String, Number, List, Tuple or Blob required for argument %d" msgstr "" -"E1301: ��� ������ ��������� ����� %d ������ ���� String, Number, List, Tuple" -" ��� BLOB" +"E1301: ��� ������ ��������� ����� %d ������ ���� String, Number, List, Tuple " +"��� BLOB" msgid "E1302: Script variable was deleted" msgstr "E1302: ���������� ���������� ����� ���� �������" @@ -10284,7 +10285,8 @@ msgstr "E1524: #, c-format msgid "E1525: Argument of %s must be a List, Tuple, String, Dictionary or Blob" msgstr "" -"E1525: � ������� %s ��� ��������� ������ ���� List, Tuple, String ��� BLOB" +"E1525: � ������� %s ��� ��������� ������ ���� List, Tuple, String, Dictionary" +" ��� BLOB" #, c-format msgid "E1526: Missing end of Tuple ')': %s" @@ -10332,21 +10334,22 @@ msgid "E1536: Tuple required" msgstr "E1536: ��� ������ ������ ���� Tuple" msgid "E1537: Less targets than Tuple items" -msgstr "" -"E1537: ���������� ���������� ������ ���������� ��������� �������" +msgstr "E1537: ���������� ���������� ������ ���������� ��������� �������" msgid "E1538: More targets than Tuple items" -msgstr "" -"E1538: ���������� ���������� ������ ���������� ��������� �������" +msgstr "E1538: ���������� ���������� ������ ���������� ��������� �������" #, c-format msgid "E1539: Variadic tuple must end with a list type: %s" msgstr "E1539: ������������ ������ ������ ������������� ����� ������ List %s" - msgid "E1540: Cannot use a variadic tuple in concatenation" msgstr "E1540: �� ����������� ����������� ������������ ��������" +msgid "E1541: Value too large, max Unicode codepoint is U+10FFFF" +msgstr "" +"E1541: �������� ��������� ���������� �������� ������� ������� ������� " +"U+10FFFF" # #Restorer: ���������, ��������, �� ������� `CTRL+g`, `g CTRL+g` � �. �. msgid "--No lines in buffer--" @@ -10539,8 +10542,7 @@ msgstr " msgid "tuple constructor does not accept keyword arguments" msgstr "" -"�� ����������� ������������ � ������������ ������� ����������������� " -"�����" +"�� ����������� ������������ � ������������ ������� ����������������� �����" msgid "tuple index out of range" msgstr "������ ������� ������� �� ������� ���������" @@ -10840,7 +10842,7 @@ msgid "nroff macro names that separate sections" msgstr "����������� ���������� � �������� ���������� nroff" msgid "list of directory names used for file searching" -msgstr "��������, � ������� ����������� ����� ������" +msgstr "�������� � ������� ����������� ����� ������" msgid ":cd without argument goes to the home directory" msgstr "" @@ -10903,7 +10905,7 @@ msgid "tags" msgstr "��������������" msgid "use binary searching in tags files" -msgstr "������������ ��� ������ � ������ �������� �������� �����" +msgstr "������������ ��� ������ �������� �������� �����" msgid "number of significant characters in a tag name or zero" msgstr "" @@ -10980,13 +10982,13 @@ msgstr "" "��������� 'breakat'" msgid "preserve indentation in wrapped text" -msgstr "��� �������� ������� ����� ��������� �������" +msgstr "���������� �������� ��� �������� ������� �����" msgid "adjust breakindent behaviour" msgstr "���������, ������������ ��� ��������� 'breakindent'" msgid "which characters might cause a line break" -msgstr "�������, ����� ������� ����������� �������� ������� �����" +msgstr "�������, ����� ������� ����� ����������� �������� �����" msgid "string to put before wrapped screen lines" msgstr "" @@ -11090,10 +11092,10 @@ msgid "use GUI colors for the terminal" msgstr "������������ ������ ��������� ��� ��� ���������" msgid "highlight the screen column of the cursor" -msgstr "��������� ������� � ������� �������" +msgstr "��������� ������� ������ � ������� ��������� �������" msgid "highlight the screen line of the cursor" -msgstr "��������� ������ � ������� �������" +msgstr "��������� ������ ������ � ������� ��������� �������" msgid "specifies which area 'cursorline' highlights" msgstr "������� ���������, ������������ ��� ���������� 'cursorline'" @@ -11269,7 +11271,7 @@ msgid "terminal connection is fast" msgstr "���������� � ���������� �������� ����������������" msgid "request terminal key codes when an xterm is detected" -msgstr "������ ����� ������ ��� ����������� ��������� xterm" +msgstr "������ ����������� ���������� ��������� ��� ����������� xterm" # ~!: Matvey Tarasov msgid "terminal that requires extra redrawing" @@ -11334,7 +11336,7 @@ msgstr "" "��������� �����" msgid "hide the mouse pointer while typing" -msgstr "������ ��������� ����� ��� ������ ������" +msgstr "�������� ��������� ����� ��� ������ ������" msgid "report mouse movement events" msgstr "������������ ���������� �� ������� ����������� ��������� �����" @@ -11384,7 +11386,7 @@ msgid "size of toolbar icons" msgstr "������ ������� �� ������ ������������" msgid "room (in pixels) left above/below the window" -msgstr "������� ������, ���������� �� ������� ����� ��������� (� ��������)" +msgstr "������� ������ (� ��������), ���������� �� ������� ����� ���������" msgid "list of ASCII characters that can be combined into complex shapes" msgstr "�������� �������� ��������� ASCII, ������������ � ��������� ��������" @@ -11422,10 +11424,10 @@ msgid "delay in milliseconds before a balloon may pop up" msgstr "�������� � �� ����� ������������ ����������� �������" msgid "use balloon evaluation in the GUI" -msgstr "������������ ����������� ������� � ����������� ����������" +msgstr "��������� ����������� ������� � ����������� ����������" msgid "use balloon evaluation in the terminal" -msgstr "������������ ����������� ������� � ���� ���������" +msgstr "��������� ����������� ������� � ���� ���������" msgid "expression to show in balloon eval" msgstr "�������, ������������ ��� �������� ����������� �������" @@ -11616,6 +11618,9 @@ msgstr " msgid "minimum width of the popup menu" msgstr "����������� ������ ������������ ���� ��� �����������" +msgid "maximum width of the popup menu" +msgstr "������������ ������ ������������ ���� ��� �����������" + msgid "user defined function for Insert mode completion" msgstr "���������������� ������� ��� ����������� � ������ �������" @@ -11823,7 +11828,7 @@ msgid "options for using diff mode" msgstr "���������, ������������ ��� ������ ������ ��������" msgid "expression used to obtain a diff file" -msgstr "�������, ������������ ��� ��������� ����� ��������" +msgstr "�������, ������������ ��� �������� ����� ��������" msgid "expression used to patch a file" msgstr "�������, ������������ ��� �������� ����������� � ����" @@ -11901,13 +11906,13 @@ msgstr " msgid "patterns that specify for which files a backup is not made" msgstr "" -"�������, �����������, ��� ����� ������ �� ��������� ���������\n" -"�����" +"�� ��������� ��������� ����� ��� ������, ������� �������������\n" +"�������� ��������" msgid "whether to make the backup as a copy or rename the existing file" msgstr "" -"����� �������� ��������� ����� � ��� ������������, ��� ���������������\n" -"�����" +"����� �������� ��������� ����� � ��� ������������,\n" +"��� ��������������� �����" msgid "list of directories to put backup files in" msgstr "��������, � ������� ����� ����������� ��������� ����� �����" @@ -12125,7 +12130,7 @@ msgid "specifies printable characters" msgstr "����� ���������� �������" msgid "specifies escape characters in a string" -msgstr "����� ������������ �������, ������������ � ������" +msgstr "����� ������������ ������� ������������ � ������" msgid "display the buffer right-to-left" msgstr "���������� ���������� ������ ������ ������" diff --git a/src/po/ru.po b/src/po/ru.po index 1b9ffaf7c7..f2b81bf2d4 100644 --- a/src/po/ru.po +++ b/src/po/ru.po @@ -22,10 +22,10 @@ # msgid "" msgstr "" -"Project-Id-Version: RuVim_0.9011249.270325\n" +"Project-Id-Version: RuVim_0.9011270.030425\n" "Report-Msgid-Bugs-To: The Vim Project, \n" -"POT-Creation-Date: 2025-03-27 22:13+0300\n" -"PO-Revision-Date: 2025-03-28 07:35+0300\n" +"POT-Creation-Date: 2025-04-03 17:45+0300\n" +"PO-Revision-Date: 2025-04-03 19:22+0300\n" "Last-Translator: Restorer, \n" "Language-Team: RuVim, https://github.com/RestorerZ/RuVim\n" "Language: ru_RU\n" @@ -2026,7 +2026,7 @@ msgstr "-g\t\t\tЗапуск программы с графическим инт msgid "-f or --nofork\tForeground: Don't fork when starting GUI" msgstr "" -"-f или --nofork\tПри запуске ГИП из активной задачи не отключаться от неё" +"-f или --nofork\tНе отключаться от активной задачи при запуске ГИП" msgid "-v\t\t\tVi mode (like \"vi\")" msgstr "-v\t\t\tЗапуск программы в режиме Vi (как \"vi\")" @@ -2134,13 +2134,13 @@ msgstr "--noplugin\t\tЗапуск программы без внешних по # \n\t\t.. для умещения в 80 столбцов (С. Алёшин) msgid "-p[N]\t\tOpen N tab pages (default: one for each file)" msgstr "" -"-p[N]\t\tСоздать вкладки для N файлов (по умолчанию создаётся\n" +"-p[N]\t\tСоздать N вкладок для файлов (по умолчанию создаётся\n" "\t\t\t по одной вкладке на каждый файл)" # \n\t\t.. для умещения в 80 столбцов (С. Алёшин) msgid "-o[N]\t\tOpen N windows (default: one for each file)" msgstr "" -"-o[N]\t\tСоздание окон для N файлов (по умолчанию создаётся\n" +"-o[N]\t\tСоздать N окон для файлов (по умолчанию создаётся\n" "\t\t\t по одному окну на каждый файл)" msgid "-O[N]\t\tLike -o but split vertically" @@ -9487,7 +9487,9 @@ msgstr "E1249: Наименование группы подсветки прев #, c-format msgid "E1250: Argument of %s must be a List, String, Dictionary or Blob" -msgstr "E1250: В функции %s тип аргумента должен быть List, String или BLOB" +msgstr "" +"E1250: В функции %s тип аргумента должен быть List, String, Dictionary или " +"BLOB" #, c-format msgid "E1251: List, Tuple, Dictionary, Blob or String required for argument %d" @@ -9501,8 +9503,8 @@ msgstr "E1252: Тип данных аргумента номер %d должен #, c-format msgid "E1253: String, List, Tuple or Blob required for argument %d" -msgstr "E1253: Тип данных аргумента номер %d должен быть String, List, Tuple " -"или BLOB" +msgstr "" +"E1253: Тип данных аргумента номер %d должен быть String, List, Tuple или BLOB" msgid "E1254: Cannot use script variable in for loop" msgstr "" @@ -9534,8 +9536,7 @@ msgid "E1260: Cannot unlet an imported item: %s" msgstr "E1260: Не допускается удаление компонента в импортированных данных %s" msgid "E1261: Cannot import .vim without using \"as\"" -msgstr "" -"E1261: Импорт командного файла без указания ключевого слова \"as\"" +msgstr "E1261: Импорт командного файла без указания ключевого слова \"as\"" #, c-format msgid "E1262: Cannot import the same script twice: %s" @@ -9698,8 +9699,8 @@ msgstr "" #, c-format msgid "E1301: String, Number, List, Tuple or Blob required for argument %d" msgstr "" -"E1301: Тип данных аргумента номер %d должен быть String, Number, List, Tuple" -" или BLOB" +"E1301: Тип данных аргумента номер %d должен быть String, Number, List, Tuple " +"или BLOB" msgid "E1302: Script variable was deleted" msgstr "E1302: Переменная командного файла была удалена" @@ -10284,7 +10285,8 @@ msgstr "E1524: Не допускается использовать кортеж #, c-format msgid "E1525: Argument of %s must be a List, Tuple, String, Dictionary or Blob" msgstr "" -"E1525: В функции %s тип аргумента должен быть List, Tuple, String или BLOB" +"E1525: В функции %s тип аргумента должен быть List, Tuple, String, Dictionary" +" или BLOB" #, c-format msgid "E1526: Missing end of Tuple ')': %s" @@ -10332,21 +10334,22 @@ msgid "E1536: Tuple required" msgstr "E1536: Тип данных должен быть Tuple" msgid "E1537: Less targets than Tuple items" -msgstr "" -"E1537: Количество переменных меньше количества элементов кортежа" +msgstr "E1537: Количество переменных меньше количества элементов кортежа" msgid "E1538: More targets than Tuple items" -msgstr "" -"E1538: Количество переменных больше количества элементов кортежа" +msgstr "E1538: Количество переменных больше количества элементов кортежа" #, c-format msgid "E1539: Variadic tuple must end with a list type: %s" msgstr "E1539: Вариационный кортеж должен заканчиваться типом данных List %s" - msgid "E1540: Cannot use a variadic tuple in concatenation" msgstr "E1540: Не допускается объединение вариационных кортежей" +msgid "E1541: Value too large, max Unicode codepoint is U+10FFFF" +msgstr "" +"E1541: Значение превышает допустимую величину кодовой позиции Юникода " +"U+10FFFF" # #Restorer: выводится, например, по команде `CTRL+g`, `g CTRL+g` и т. п. msgid "--No lines in buffer--" @@ -10539,8 +10542,7 @@ msgstr "состояние блокировки объекта не может msgid "tuple constructor does not accept keyword arguments" msgstr "" -"не допускается использовать в конструкторе кортежа зарезервированные " -"слова" +"не допускается использовать в конструкторе кортежа зарезервированные слова" msgid "tuple index out of range" msgstr "индекс кортежа выходит за границы диапазона" @@ -10840,7 +10842,7 @@ msgid "nroff macro names that separate sections" msgstr "разделитель параграфов в терминах макроязыка nroff" msgid "list of directory names used for file searching" -msgstr "каталоги, в которых выполняется поиск файлов" +msgstr "каталоги в которых выполняется поиск файлов" msgid ":cd without argument goes to the home directory" msgstr "" @@ -10903,7 +10905,7 @@ msgid "tags" msgstr "Индексирование" msgid "use binary searching in tags files" -msgstr "использовать для поиска в файлах индексов бинарный поиск" +msgstr "использовать для файлов индексов бинарный поиск" msgid "number of significant characters in a tag name or zero" msgstr "" @@ -10980,13 +10982,13 @@ msgstr "" "параметре 'breakat'" msgid "preserve indentation in wrapped text" -msgstr "при разбивке длинных строк сохранить отступы" +msgstr "сохранение отступов при переносе длинных строк" msgid "adjust breakindent behaviour" msgstr "настройки, используемые для параметра 'breakindent'" msgid "which characters might cause a line break" -msgstr "символы, после которых выполняется разбивка длинных строк" +msgstr "символы, после которых может выполняться разбивка строк" msgid "string to put before wrapped screen lines" msgstr "" @@ -11090,10 +11092,10 @@ msgid "use GUI colors for the terminal" msgstr "использовать группы подсветки ГИП для терминала" msgid "highlight the screen column of the cursor" -msgstr "подсветка столбца в позиции каретки" +msgstr "подсветка столбца экрана в котором находится каретка" msgid "highlight the screen line of the cursor" -msgstr "подсветка строки в позиции каретки" +msgstr "подсветка строки экрана в которой находится каретка" msgid "specifies which area 'cursorline' highlights" msgstr "область подсветки, используемая при включённом 'cursorline'" @@ -11269,7 +11271,7 @@ msgid "terminal connection is fast" msgstr "соединение с терминалом является высокоскоростным" msgid "request terminal key codes when an xterm is detected" -msgstr "запрос кодов клавиш при обнаружении терминала xterm" +msgstr "запрос действующих параметров терминала при обнаружении xterm" # ~!: Matvey Tarasov msgid "terminal that requires extra redrawing" @@ -11334,7 +11336,7 @@ msgstr "" "указатель «мыши»" msgid "hide the mouse pointer while typing" -msgstr "скрыть указатель «мыши» при наборе текста" +msgstr "скрывать указатель «мыши» при наборе текста" msgid "report mouse movement events" msgstr "активировать оповещение по событию перемещения указателя «мыши»" @@ -11384,7 +11386,7 @@ msgid "size of toolbar icons" msgstr "размер значков на панели инструментов" msgid "room (in pixels) left above/below the window" -msgstr "область экрана, остающаяся не занятой окном программы (в пикселях)" +msgstr "область экрана (в пикселях), остающаяся не занятой окном программы" msgid "list of ASCII characters that can be combined into complex shapes" msgstr "перечень символов кодировки ASCII, используемых в составных символах" @@ -11422,10 +11424,10 @@ msgid "delay in milliseconds before a balloon may pop up" msgstr "задержка в мс перед отображением всплывающей выноски" msgid "use balloon evaluation in the GUI" -msgstr "использовать всплывающие выноски в графическом интерфейсе" +msgstr "включение всплывающих выносок в графическом интерфейсе" msgid "use balloon evaluation in the terminal" -msgstr "использовать всплывающие выноски в окне терминала" +msgstr "включение всплывающих выносок в окне терминала" msgid "expression to show in balloon eval" msgstr "функция, используемая для создания всплывающей выноски" @@ -11616,6 +11618,9 @@ msgstr "максимальная высота всплывающего меню msgid "minimum width of the popup menu" msgstr "минимальная ширина всплывающего меню при подстановке" +msgid "maximum width of the popup menu" +msgstr "максимальная ширина всплывающего меню при подстановке" + msgid "user defined function for Insert mode completion" msgstr "пользовательская функция при подстановке в режиме вставки" @@ -11823,7 +11828,7 @@ msgid "options for using diff mode" msgstr "настройки, используемые для режима сверки различий" msgid "expression used to obtain a diff file" -msgstr "функция, используемая для получения файла различий" +msgstr "функция, используемая для создания файла различий" msgid "expression used to patch a file" msgstr "функция, используемая для внесения исправлений в файл" @@ -11901,13 +11906,13 @@ msgstr "создавать резервную копию файла после msgid "patterns that specify for which files a backup is not made" msgstr "" -"шаблоны, указывающие, для каких файлов не создавать резервные\n" -"копии" +"не создавать резервные копии для файлов, которые соответствуют\n" +"заданным шаблонам" msgid "whether to make the backup as a copy or rename the existing file" msgstr "" -"метод создания резервной копии — или копированием, или переименованием\n" -"файла" +"метод создания резервной копии — или копированием,\n" +"или переименованием файла" msgid "list of directories to put backup files in" msgstr "каталоги, в которых могут размещаться резервные копии файла" @@ -12125,7 +12130,7 @@ msgid "specifies printable characters" msgstr "задаёт печатаемые символы" msgid "specifies escape characters in a string" -msgstr "задаёт экранирующие символы, используемые в строке" +msgstr "задаёт экранирующие символы используемые в строке" msgid "display the buffer right-to-left" msgstr "отображать содержимое буфера справа налево" From e74ec3f523a152f62a37cc3ab476f0e5a2e812c6 Mon Sep 17 00:00:00 2001 From: Anarion Dunedain Date: Thu, 3 Apr 2025 21:08:25 +0200 Subject: [PATCH 036/633] patch 9.1.1271: filetype: Power Query files are not recognized Problem: filetype: Power Query files are not recognized Solution: detect '*.pq' as pq filetype, include pq syntax and filetype plugin (Anarion Dunedain) Microsoft Power Query provides a powerful data import experience that encompasses many features. Power Query works with desktop Analysis Services, Excel, and Power BI workbooks, in addition to many online services, such as Fabric, Power BI service, Power Apps, Microsoft 365 Customer Insights, and more. A core capability of Power Query is to filter and combine, that is, to mash-up data from one or more of a rich collection of supported data sources. Any such data mashup is expressed using the Power Query M formula language. The M language is a functional, case sensitive language similar to F#. Reference: - Power Query M formula language overview: https://learn.microsoft.com/en-us/powerquery-m/ closes: #17045 Signed-off-by: Anarion Dunedain Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 2 + runtime/filetype.vim | 3 + runtime/ftplugin/pq.vim | 16 ++ runtime/syntax/pq.vim | 337 ++++++++++++++++++++++++++++++++++ src/testdir/test_filetype.vim | 1 + src/version.c | 2 + 6 files changed, 361 insertions(+) create mode 100644 runtime/ftplugin/pq.vim create mode 100644 runtime/syntax/pq.vim diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index f233b3936e..180b9e9911 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -255,6 +255,7 @@ runtime/ftplugin/plsql.vim @lee-lindley runtime/ftplugin/pod.vim @petdance @dkearns runtime/ftplugin/poefilter.vim @ObserverOfTime runtime/ftplugin/postscr.vim @mrdubya +runtime/ftplugin/pq.vim @anarion80 runtime/ftplugin/prisma.vim @ribru17 runtime/ftplugin/proto.vim @Limero runtime/ftplugin/ps1.vim @heaths @@ -580,6 +581,7 @@ runtime/syntax/plsql.vim @lee-lindley runtime/syntax/pod.vim @petdance runtime/syntax/poefilter.vim @ObserverOfTime runtime/syntax/postscr.vim @mrdubya +runtime/syntax/pq.vim @anarion80 runtime/syntax/privoxy.vim @dkearns runtime/syntax/progress.vim @rdnlsmith runtime/syntax/prolog.vim @XVilka diff --git a/runtime/filetype.vim b/runtime/filetype.vim index e767305a3d..59e6a810ba 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1967,6 +1967,9 @@ au BufNewFile,BufRead *.ps1,*.psd1,*.psm1,*.pssc setf ps1 au BufNewFile,BufRead *.ps1xml setf ps1xml au BufNewFile,BufRead *.cdxml,*.psc1 setf xml +" Power Query M +au BufNewFile,BufRead *.pq setf pq + " Printcap and Termcap au BufNewFile,BufRead *printcap \ let b:ptcap_type = "print" | setf ptcap diff --git a/runtime/ftplugin/pq.vim b/runtime/ftplugin/pq.vim new file mode 100644 index 0000000000..2ed2fa423a --- /dev/null +++ b/runtime/ftplugin/pq.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin +" Language: Power Query M +" Maintainer: Anarion Dunedain +" Last Change: 2025 Apr 3 + +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/syntax/pq.vim b/runtime/syntax/pq.vim new file mode 100644 index 0000000000..5778dbca4f --- /dev/null +++ b/runtime/syntax/pq.vim @@ -0,0 +1,337 @@ +" Vim syntax file +" Language: Power Query M +" Maintainer: Anarion Dunedain +" Last Change: +" 2025 Apr 03 First version + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:keepcpo = &cpo +set cpo&vim + +" There are Power Query functions with dot or hash in the name +setlocal iskeyword+=. +setlocal iskeyword+=# + +setlocal foldmethod=syntax +setlocal foldtext=getline(v:foldstart) + +" DAX is case sensitive +syn case match + +" Any Power Query identifier +syn match pqIdentifier "\<[a-zA-Z0-9$_#]*\>" + +" Fold on parenthesis +syn region pqParenthesisFold start="(" end=")" transparent fold + +" Power Query keywords +syn keyword pqKeyword section sections shared +syn region pqKeyword start="\\c" end="\\c\%(\_s*$\)"me=s-2 transparent fold keepend containedin=ALLBUT,pqString,pqComment + +" Power Query types +syn keyword pqType null logical number time date datetime datetimezone duration text binary type list record table function anynonnull none + +" Power Query conditionals +syn keyword pqConditional if then else each + +" Power Query constants +syn keyword pqConstant + \ Number.E Number.Epsilon Number.NaN + \ Number.NegativeInfinity Number.PI Number.PositiveInfinity + +" TODO +syn keyword pqTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained + +" Numbers +" integer number, or floating point number without a dot. +syn match pqNumber "\<\d\+\>" +" floating point number, with dot +syn match pqNumber "\<\d\+\.\d*\>" + +syn match pqFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+" +syn match pqFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\=" +syn match pqFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\=" + +" String and Character constants +syn region pqString start=+"+ end=+"+ + +" Power Query Record +syn region pqRecord matchgroup=pqParen start=/\[/ end=/\]/ contains=ALLBUT,pqIdentifier + +" Power Query List +syn region pqList matchgroup=pqParen start=/{/ end=/}/ contains=ALLBUT,pqIdentifier + +" Operators +syn match pqOperator "+" +syn match pqOperator "-" +syn match pqOperator "*" +syn match pqOperator "/" +syn match pqOperator "\<\(NOT\|AND\|OR\|AS\|IS\|META\)\>\c" +syn match pqOperator "??" +syn match pqOperator "&&" +syn match pqOperator "&" +syn match pqOperator "[<>]=\=" +syn match pqOperator "<>" +syn match pqOperator "=" +syn match pqOperator ">" +syn match pqOperator "<" + +" Comments +syn region pqComment start="\(^\|\s\)\//" end="$" contains=pqTodo +syn region pqComment start="/\*" end="\*/" contains=pqTodo + +" Power Query functions +syn keyword pqFunction + \ #binary #date #datetime #datetimezone #duration #table #time + \ Access.Database AccessControlEntry.ConditionToIdentities Action.WithErrorContext + \ ActiveDirectory.Domains AdoDotNet.DataSource AdoDotNet.Query AdobeAnalytics.Cubes + \ AnalysisServices.Database AnalysisServices.Databases AzureStorage.BlobContents + \ AzureStorage.Blobs AzureStorage.DataLake AzureStorage.DataLakeContents + \ AzureStorage.Tables Binary.ApproximateLength Binary.Buffer + \ Binary.Combine Binary.Compress Binary.Decompress + \ Binary.From Binary.FromList Binary.FromText + \ Binary.InferContentType Binary.Length Binary.Range + \ Binary.Split Binary.ToList Binary.ToText + \ Binary.View Binary.ViewError Binary.ViewFunction + \ BinaryFormat.7BitEncodedSignedInteger BinaryFormat.7BitEncodedUnsignedInteger BinaryFormat.Binary + \ BinaryFormat.Byte BinaryFormat.ByteOrder BinaryFormat.Choice + \ BinaryFormat.Decimal BinaryFormat.Double BinaryFormat.Group + \ BinaryFormat.Length BinaryFormat.List BinaryFormat.Null + \ BinaryFormat.Record BinaryFormat.SignedInteger16 BinaryFormat.SignedInteger32 + \ BinaryFormat.SignedInteger64 BinaryFormat.Single BinaryFormat.Text + \ BinaryFormat.Transform BinaryFormat.UnsignedInteger16 BinaryFormat.UnsignedInteger32 + \ BinaryFormat.UnsignedInteger64 Byte.From Byte.Type Cdm.Contents + \ Character.FromNumber Character.ToNumber Combiner.CombineTextByDelimiter + \ Combiner.CombineTextByEachDelimiter Combiner.CombineTextByLengths Combiner.CombineTextByPositions + \ Combiner.CombineTextByRanges Comparer.Equals Comparer.FromCulture + \ Comparer.Ordinal Comparer.OrdinalIgnoreCase Csv.Document + \ Cube.AddAndExpandDimensionColumn Cube.AddMeasureColumn Cube.ApplyParameter + \ Cube.AttributeMemberId Cube.AttributeMemberProperty Cube.CollapseAndRemoveColumns + \ Cube.Dimensions Cube.DisplayFolders Cube.MeasureProperties + \ Cube.MeasureProperty Cube.Measures Cube.Parameters + \ Cube.Properties Cube.PropertyKey Cube.ReplaceDimensions + \ Cube.Transform Currency.From Currency.Type DB2.Database + \ Date.AddDays Date.AddMonths Date.AddQuarters + \ Date.AddWeeks Date.AddYears Date.Day + \ Date.DayOfWeek Date.DayOfWeekName Date.DayOfYear + \ Date.DaysInMonth Date.EndOfDay Date.EndOfMonth + \ Date.EndOfQuarter Date.EndOfWeek Date.EndOfYear + \ Date.From Date.FromText Date.IsInCurrentDay + \ Date.IsInCurrentMonth Date.IsInCurrentQuarter Date.IsInCurrentWeek + \ Date.IsInCurrentYear Date.IsInNextDay Date.IsInNextMonth + \ Date.IsInNextNDays Date.IsInNextNMonths Date.IsInNextNQuarters + \ Date.IsInNextNWeeks Date.IsInNextNYears Date.IsInNextQuarter + \ Date.IsInNextWeek Date.IsInNextYear Date.IsInPreviousDay + \ Date.IsInPreviousMonth Date.IsInPreviousNDays Date.IsInPreviousNMonths + \ Date.IsInPreviousNQuarters Date.IsInPreviousNWeeks Date.IsInPreviousNYears + \ Date.IsInPreviousQuarter Date.IsInPreviousWeek Date.IsInPreviousYear + \ Date.IsInYearToDate Date.IsLeapYear Date.Month + \ Date.MonthName Date.QuarterOfYear Date.StartOfDay + \ Date.StartOfMonth Date.StartOfQuarter Date.StartOfWeek + \ Date.StartOfYear Date.ToRecord Date.ToText + \ Date.WeekOfMonth Date.WeekOfYear Date.Year + \ DateTime.AddZone DateTime.Date DateTime.FixedLocalNow + \ DateTime.From DateTime.FromFileTime DateTime.FromText + \ DateTime.IsInCurrentHour DateTime.IsInCurrentMinute DateTime.IsInCurrentSecond + \ DateTime.IsInNextHour DateTime.IsInNextMinute DateTime.IsInNextNHours + \ DateTime.IsInNextNMinutes DateTime.IsInNextNSeconds DateTime.IsInNextSecond + \ DateTime.IsInPreviousHour DateTime.IsInPreviousMinute DateTime.IsInPreviousNHours + \ DateTime.IsInPreviousNMinutes DateTime.IsInPreviousNSeconds DateTime.IsInPreviousSecond + \ DateTime.LocalNow DateTime.Time DateTime.ToRecord + \ DateTime.ToText DateTimeZone.FixedLocalNow DateTimeZone.FixedUtcNow + \ DateTimeZone.From DateTimeZone.FromFileTime DateTimeZone.FromText + \ DateTimeZone.LocalNow DateTimeZone.RemoveZone DateTimeZone.SwitchZone + \ DateTimeZone.ToLocal DateTimeZone.ToRecord DateTimeZone.ToText + \ DateTimeZone.ToUtc DateTimeZone.UtcNow DateTimeZone.ZoneHours + \ DateTimeZone.ZoneMinutes Decimal.From Decimal.Type DeltaLake.Metadata + \ DeltaLake.Table Diagnostics.ActivityId Diagnostics.CorrelationId + \ Diagnostics.Trace DirectQueryCapabilities.From Double.From Double.Type + \ Duration.Days Duration.From Duration.FromText + \ Duration.Hours Duration.Minutes Duration.Seconds + \ Duration.ToRecord Duration.ToText Duration.TotalDays + \ Duration.TotalHours Duration.TotalMinutes Duration.TotalSeconds + \ Embedded.Value Error.Record Essbase.Cubes + \ Excel.CurrentWorkbook Excel.ShapeTable Excel.Workbook + \ Exchange.Contents Expression.Constant Expression.Evaluate + \ Expression.Identifier File.Contents Folder.Contents + \ Folder.Files Function.From Function.Invoke + \ Function.InvokeAfter Function.InvokeWithErrorContext Function.IsDataSource + \ Function.ScalarVector Geography.FromWellKnownText Geography.ToWellKnownText + \ GeographyPoint.From Geometry.FromWellKnownText Geometry.ToWellKnownText + \ GeometryPoint.From GoogleAnalytics.Accounts Graph.Nodes + \ Guid.From Guid.Type HdInsight.Containers HdInsight.Contents + \ HdInsight.Files Hdfs.Contents Hdfs.Files + \ Html.Table Identity.From Identity.IsMemberOf + \ IdentityProvider.Default Informix.Database Int16.From Int16.Type + \ Int32.From Int32.Type Int64.From Int64.Type Int8.From Int8.Type + \ ItemExpression.From ItemExpression.Item Json.Document + \ Json.FromValue Json.FromValue Lines.FromBinary + \ Lines.FromText Lines.ToBinary Lines.ToText + \ List.Accumulate List.AllTrue List.Alternate + \ List.AnyTrue List.Average List.Buffer + \ List.Combine List.ConformToPageReader List.Contains + \ List.ContainsAll List.ContainsAny List.Count + \ List.Covariance List.DateTimeZones List.DateTimes + \ List.Dates List.Difference List.Distinct + \ List.Durations List.FindText List.First + \ List.FirstN List.Generate List.InsertRange + \ List.Intersect List.IsDistinct List.IsEmpty + \ List.Last List.LastN List.MatchesAll + \ List.MatchesAny List.Max List.MaxN + \ List.Median List.Min List.MinN + \ List.Mode List.Modes List.NonNullCount + \ List.Numbers List.Percentile List.PositionOf + \ List.PositionOfAny List.Positions List.Product + \ List.Random List.Range List.RemoveFirstN + \ List.RemoveItems List.RemoveLastN List.RemoveMatchingItems + \ List.RemoveNulls List.RemoveRange List.Repeat + \ List.ReplaceMatchingItems List.ReplaceRange List.ReplaceValue + \ List.Reverse List.Select List.Single + \ List.SingleOrDefault List.Skip List.Sort + \ List.Split List.StandardDeviation List.Sum + \ List.Times List.Transform List.TransformMany + \ List.Union List.Zip Logical.From + \ Logical.FromText Logical.ToText Module.Versions + \ MySQL.Database Number.Abs Number.Acos + \ Number.Asin Number.Atan Number.Atan2 + \ Number.BitwiseAnd Number.BitwiseNot Number.BitwiseOr + \ Number.BitwiseShiftLeft Number.BitwiseShiftRight Number.BitwiseXor + \ Number.Combinations Number.Cos Number.Cosh + \ Number.Exp Number.Factorial Number.From + \ Number.FromText Number.IntegerDivide Number.IsEven + \ Number.IsNaN Number.IsOdd Number.Ln + \ Number.Log Number.Log10 Number.Mod + \ Number.Permutations Number.Power Number.Random + \ Number.RandomBetween Number.Round Number.RoundAwayFromZero + \ Number.RoundDown Number.RoundTowardZero Number.RoundUp + \ Number.Sign Number.Sin Number.Sinh + \ Number.Sqrt Number.Tan Number.Tanh + \ Number.ToText Number.Type OData.Feed Odbc.DataSource + \ Odbc.InferOptions Odbc.Query OleDb.DataSource + \ OleDb.Query Oracle.Database Pdf.Tables + \ Percentage.From Percentage.Type PostgreSQL.Database Progress.DataSourceProgress + \ RData.FromBinary Record.AddField Record.Combine + \ Record.Field Record.FieldCount Record.FieldNames + \ Record.FieldOrDefault Record.FieldValues Record.FromList + \ Record.FromTable Record.HasFields Record.RemoveFields + \ Record.RenameFields Record.ReorderFields Record.SelectFields + \ Record.ToList Record.ToTable Record.TransformFields Record.Type + \ Replacer.ReplaceText Replacer.ReplaceValue RowExpression.Column + \ RowExpression.From RowExpression.Row Salesforce.Data + \ Salesforce.Reports SapBusinessWarehouse.Cubes SapHana.Database + \ SharePoint.Contents SharePoint.Files SharePoint.Tables + \ Single.From Single.Type Soda.Feed Splitter.SplitByNothing + \ Splitter.SplitTextByAnyDelimiter Splitter.SplitTextByCharacterTransition Splitter.SplitTextByDelimiter + \ Splitter.SplitTextByEachDelimiter Splitter.SplitTextByLengths Splitter.SplitTextByPositions + \ Splitter.SplitTextByRanges Splitter.SplitTextByRepeatedLengths Splitter.SplitTextByWhitespace + \ Sql.Database Sql.Databases SqlExpression.SchemaFrom + \ SqlExpression.ToExpression Sybase.Database Table.AddColumn + \ Table.AddFuzzyClusterColumn Table.AddIndexColumn Table.AddJoinColumn + \ Table.AddKey Table.AddRankColumn Table.AggregateTableColumn + \ Table.AlternateRows Table.ApproximateRowCount Table.Buffer + \ Table.Column Table.ColumnCount Table.ColumnNames + \ Table.ColumnsOfType Table.Combine Table.CombineColumns + \ Table.CombineColumnsToRecord Table.ConformToPageReader Table.Contains + \ Table.ContainsAll Table.ContainsAny Table.DemoteHeaders + \ Table.Distinct Table.DuplicateColumn Table.ExpandListColumn + \ Table.ExpandRecordColumn Table.ExpandTableColumn Table.FillDown + \ Table.FillUp Table.FilterWithDataTable Table.FindText + \ Table.First Table.FirstN Table.FirstValue + \ Table.FromColumns Table.FromList Table.FromPartitions + \ Table.FromRecords Table.FromRows Table.FromValue + \ Table.FuzzyGroup Table.FuzzyJoin Table.FuzzyNestedJoin + \ Table.Group Table.HasColumns Table.InsertRows + \ Table.IsDistinct Table.IsEmpty Table.Join + \ Table.Keys Table.Last Table.LastN + \ Table.MatchesAllRows Table.MatchesAnyRows Table.Max + \ Table.MaxN Table.Min Table.MinN + \ Table.NestedJoin Table.Partition Table.PartitionValues + \ Table.PartitionValues Table.Pivot Table.PositionOf + \ Table.PositionOfAny Table.PrefixColumns Table.Profile + \ Table.PromoteHeaders Table.Range Table.RemoveColumns + \ Table.RemoveFirstN Table.RemoveLastN Table.RemoveMatchingRows + \ Table.RemoveRows Table.RemoveRowsWithErrors Table.RenameColumns + \ Table.ReorderColumns Table.Repeat Table.ReplaceErrorValues + \ Table.ReplaceKeys Table.ReplaceMatchingRows Table.ReplaceRelationshipIdentity + \ Table.ReplaceRows Table.ReplaceValue Table.ReverseRows + \ Table.RowCount Table.Schema Table.SelectColumns + \ Table.SelectRows Table.SelectRowsWithErrors Table.SingleRow + \ Table.Skip Table.Sort Table.Split + \ Table.SplitAt Table.SplitColumn Table.StopFolding + \ Table.ToColumns Table.ToList Table.ToRecords + \ Table.ToRows Table.TransformColumnNames Table.TransformColumnTypes + \ Table.TransformColumns Table.TransformRows Table.Transpose + \ Table.Unpivot Table.UnpivotOtherColumns Table.View + \ Table.ViewError Table.ViewFunction Table.WithErrorContext + \ Tables.GetRelationships Teradata.Database Text.AfterDelimiter + \ Text.At Text.BeforeDelimiter Text.BetweenDelimiters + \ Text.Clean Text.Combine Text.Contains + \ Text.End Text.EndsWith Text.From + \ Text.FromBinary Text.InferNumberType Text.Insert + \ Text.Length Text.Lower Text.Middle + \ Text.NewGuid Text.PadEnd Text.PadStart + \ Text.PositionOf Text.PositionOfAny Text.Proper + \ Text.Range Text.Remove Text.RemoveRange + \ Text.Repeat Text.Replace Text.ReplaceRange + \ Text.Reverse Text.Select Text.Split + \ Text.SplitAny Text.Start Text.StartsWith + \ Text.ToBinary Text.ToList Text.Trim + \ Text.TrimEnd Text.TrimStart Text.Upper + \ Time.EndOfHour Time.From Time.FromText + \ Time.Hour Time.Minute Time.Second + \ Time.StartOfHour Time.ToRecord Time.ToText + \ Type.AddTableKey Type.ClosedRecord Type.Facets + \ Type.ForFunction Type.ForRecord Type.FunctionParameters + \ Type.FunctionRequiredParameters Type.FunctionReturn Type.Is + \ Type.IsNullable Type.IsOpenRecord Type.ListItem + \ Type.NonNullable Type.OpenRecord Type.RecordFields + \ Type.ReplaceFacets Type.ReplaceTableKeys Type.TableColumn + \ Type.TableKeys Type.TableRow Type.TableSchema + \ Type.Union Uri.BuildQueryString Uri.Combine + \ Uri.EscapeDataString Uri.Parts Value.Add + \ Value.Alternates Value.As Value.Compare + \ Value.Divide Value.Equals Value.Expression + \ Value.Firewall Value.FromText Value.Is + \ Value.Lineage Value.Metadata Value.Multiply + \ Value.NativeQuery Value.NullableEquals Value.Optimize + \ Value.RemoveMetadata Value.ReplaceMetadata Value.ReplaceType + \ Value.Subtract Value.Traits Value.Type + \ Value.VersionIdentity Value.Versions Value.ViewError + \ Value.ViewFunction Variable.Value Web.BrowserContents + \ Web.Contents Web.Headers Web.Page + \ WebAction.Request Xml.Document Xml.Tables + + +" Fold on let/in +" syn region pqLetFold start="\\c" end="\\c" transparent fold + +" Define highlighting +hi def link pqComment Comment +hi def link pqNumber Number +hi def link pqFloat Float +hi def link pqString String +hi def link pqKeyword Keyword +hi def link pqOperator Operator +hi def link pqFunction Delimiter +hi def link pqTable Number +hi def link pqRecord Statement +hi def link pqList Delimiter +hi def link pqParen Delimiter +hi def link pqTodo Todo +hi def link pqConditional Conditional +hi def link pqNull Const +hi def link pqType Type +hi def link pqIdentifier Number +hi def link pqConstant Constant +hi def link pqLetFold Constant + +let b:current_syntax = "pq" + +let &cpo = s:keepcpo +unlet! s:keepcpo + +" vim: ts=8 diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 6a9b2b0f9a..f6948e6699 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -608,6 +608,7 @@ def s:GetFilenameChecks(): dict> povini: ['.povrayrc'], ppd: ['file.ppd'], ppwiz: ['file.it', 'file.ih'], + pq: ['file.pq'], prisma: ['file.prisma'], privoxy: ['file.action'], proc: ['file.pc'], diff --git a/src/version.c b/src/version.c index 6f54a94f50..f77ff4794a 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1271, /**/ 1270, /**/ From 6099db9a60d1c047bf9c8feee3e1689c4e653250 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Thu, 3 Apr 2025 21:13:39 +0200 Subject: [PATCH 037/633] runtime(sh): Update syntax file, command substitution opening paren at EOL Allow the opening parenthesis of a command substitution to appear at EOL. This fixes the issue raised in https://github.com/vim/vim/issues/17026#issuecomment-2774112284. closes: #17044 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/sh.vim | 3 ++- runtime/syntax/testdir/dumps/sh_13_00.dump | 20 ++++++++++++++++++++ runtime/syntax/testdir/input/sh_13.sh | 8 ++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 runtime/syntax/testdir/dumps/sh_13_00.dump create mode 100644 runtime/syntax/testdir/input/sh_13.sh diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim index 37d1c0a83c..298198274e 100644 --- a/runtime/syntax/sh.vim +++ b/runtime/syntax/sh.vim @@ -8,6 +8,7 @@ " 2025 Jan 06 add $PS0 to bashSpecialVariables (#16394) " 2025 Jan 18 add bash coproc, remove duplicate syn keywords (#16467) " 2025 Mar 21 update shell capability detection (#16939) +" 2025 Apr 03 command substitution opening paren at EOL (#17026) " Version: 208 " Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH " For options and settings, please use: :help ft-sh-syntax @@ -389,7 +390,7 @@ syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' nextgroup=shComment " systems too, however, so the following syntax will flag $(..) as " an Error under /bin/sh. By consensus of vimdev'ers! if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix") - syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]" skip='\\\\\|\\.' end=")" contains=@shCommandSubList + syn region shCommandSub matchgroup=shCmdSubRegion start="\$((\@!" skip='\\\\\|\\.' end=")" contains=@shCommandSubList if exists("b:is_kornshell") syn region shSubshare matchgroup=shCmdSubRegion start="\${\ze[ \t\n<]" skip='\\\\\|\\.' end="\zs[ \t\n;]}" contains=@shCommandSubList syn region shValsub matchgroup=shCmdSubRegion start="\${|" skip='\\\\\|\\.' end="}" contains=@shCommandSubList diff --git a/runtime/syntax/testdir/dumps/sh_13_00.dump b/runtime/syntax/testdir/dumps/sh_13_00.dump new file mode 100644 index 0000000000..7fe0991d4b --- /dev/null +++ b/runtime/syntax/testdir/dumps/sh_13_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0| |I|s@1|u|e| |#|1|7|0|2|6| |(|b|a|s|h| |h|i|g|h|l|i|g|h|t|i|n|g| |r|e|q|u|i|r|e|s| |s|p|a|c|e| |a|f|t|e|r| |$|(|)@1| +0#0000000&@15 +|#+0#0000e05&| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|i|s@1|u|e|s|/|1|7|0|2|6|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|7@1|4|1@1|2@1|8|4| +0#0000000&@9 +@75 +|_|c|o|m|p|_|c|o|m|p|g|e|n|_|s|p|l|i|t| |-+0#e000e06&|l| +0#0000000&|-+0#e000e06&@1| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|(| +0#0000000&@45 +| +0#e000e06&@3|t|m|u|x| |l|i|s|t|-|c|o|m@1|a|n|d|s| |-|F| |"+0#af5f00255&|#+0#e000002&|{|c|o|m@1|a|n|d|_|l|i|s|t|_|n|a|m|e|}|"+0#af5f00255&| +0#0000000&@26 +| +0#e000e06&@3|t|m|u|x| |l|i|s|t|-|c|o|m@1|a|n|d|s| |-|F| |"+0#af5f00255&|#+0#e000002&|{|c|o|m@1|a|n|d|_|l|i|s|t|_|a|l|i|a|s|}|"+0#af5f00255&| +0#0000000&@25 +|)+0#e000e06&|"+0#af5f00255&| +0#0000000&@72 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|i+0#0000000&|s|_|b|a|s|h|:| |1|,| @45|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/input/sh_13.sh b/runtime/syntax/testdir/input/sh_13.sh new file mode 100644 index 0000000000..a81c0a4542 --- /dev/null +++ b/runtime/syntax/testdir/input/sh_13.sh @@ -0,0 +1,8 @@ +# Issue #17026 (bash highlighting requires space after $()) +# https://github.com/vim/vim/issues/17026#issuecomment-2774112284 + +_comp_compgen_split -l -- "$( + tmux list-commands -F "#{command_list_name}" + tmux list-commands -F "#{command_list_alias}" +)" + From 3e50a28a03d136c1e0c1f4fabe50d97faaf08c5c Mon Sep 17 00:00:00 2001 From: glepnir Date: Thu, 3 Apr 2025 21:17:06 +0200 Subject: [PATCH 038/633] patch 9.1.1272: completion: in keyword completion Ctrl_P cannot go back after Ctrl_N Problem: completion: in keyword completion Ctrl_P cannot go back after Ctrl_N Solution: in find_compl_when_fuzzy() always return first match of array, after Ctrl_P use compl_shown_match->cp_next instead of compl_first_match. (glepnir) closes: #17043 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/insexpand.c | 3 ++- src/testdir/test_ins_complete.vim | 2 ++ src/version.c | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/insexpand.c b/src/insexpand.c index de3d519823..9df0445392 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -4831,7 +4831,8 @@ find_comp_when_fuzzy(void) if ((is_forward && compl_selected_item == compl_match_arraysize - 1) || (is_backward && compl_selected_item == 0)) - return compl_first_match != compl_shown_match ? compl_first_match : + return compl_first_match != compl_shown_match ? + (is_forward ? compl_shown_match->cp_next : compl_first_match) : (compl_first_match->cp_prev ? compl_first_match->cp_prev : NULL); if (is_forward) diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index f60aba8d7a..bc971b5da8 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -2834,6 +2834,8 @@ func Test_complete_opt_fuzzy() call assert_equal('bar', getline('.')) call feedkeys("Sb\\\\", 'tx') call assert_equal('blue', getline('.')) + call feedkeys("Sb\\\\\", 'tx') + call assert_equal('b', getline('.')) " clean up set omnifunc= diff --git a/src/version.c b/src/version.c index f77ff4794a..28c0248665 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1272, /**/ 1271, /**/ From f16d8b2dda077d8252c3f7d19e6a5bc15d1d51c1 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 3 Apr 2025 21:21:15 +0200 Subject: [PATCH 039/633] patch 9.1.1273: Coverity warns about using uninitialized value Problem: Coverity warns about using uninitialized value (after 9.1.1270). Solution: Put an empty string in "buf" when allocation fails (zeertzjq). closes: #17040 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/buffer.c | 2 ++ src/version.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/buffer.c b/src/buffer.c index 8277b726c2..90ca596783 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -4037,6 +4037,8 @@ maketitle(void) vim_strncpy(buf, p, SPACE_FOR_FNAME); vim_free(p); } + else + STRCPY(buf, ""); } #ifdef FEAT_TERMINAL diff --git a/src/version.c b/src/version.c index 28c0248665..e00e0077c0 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1273, /**/ 1272, /**/ From 6fa62085ffbfb3c69636da857574a017783f0410 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Thu, 3 Apr 2025 21:26:34 +0200 Subject: [PATCH 040/633] patch 9.1.1274: Vim9: no support for object as variable type Problem: Vim9: no support for object as variable type Solution: add support for object (Yegappan Lakshmanan) closes: #17041 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- runtime/doc/version9.txt | 4 +- runtime/doc/vim9.txt | 3 +- src/testdir/test_vim9_class.vim | 174 ++++++++++++++++++++++++++++++++ src/version.c | 2 + src/vim9class.c | 5 + src/vim9type.c | 64 ++++++++++++ 6 files changed, 250 insertions(+), 2 deletions(-) diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 0e9a5080fa..b7b2bcc5fd 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Mar 27 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41553,6 +41553,8 @@ Enum support for Vim9 script |:enum| Support for protected _new() method +Add support for object<{type}> as variable data type |vim9-types| + Diff mode ~ --------- Include the "linematch" algorithm for the 'diffopt' setting. This aligns diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt index d06c250a3f..54fb8f333e 100644 --- a/runtime/doc/vim9.txt +++ b/runtime/doc/vim9.txt @@ -1,4 +1,4 @@ -*vim9.txt* For Vim version 9.1. Last change: 2025 Mar 23 +*vim9.txt* For Vim version 9.1. Last change: 2025 Apr 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1467,6 +1467,7 @@ The following builtin types are supported: blob list<{type}> dict<{type}> + object<{type}> job channel tuple<{type}> diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index c6d93b2b70..4b6cb81bb6 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -12808,4 +12808,178 @@ def Test_dict_of_objects() v9.CheckSourceSuccess(lines) enddef +" Test for using the type() and typename() functions with a variable of type +" object +def Test_type_typename_funcs_with_object_variable() + var lines =<< trim END + vim9script + + class A + endclass + + class B + endclass + + var o1: object + assert_equal([13, 'object'], [type(o1), typename(o1)]) + + var o2: object + assert_equal([13, 'object'], [type(o2), typename(o2)]) + + var o3: A + assert_equal([13, 'object'], [type(o3), typename(o3)]) + + var o4 = A.new() + assert_equal([13, 'object'], [type(o4), typename(o4)]) + + var l = [A.new(), B.new()] + assert_equal([13, 'object'], [type(l[1]), typename(l[1])]) + + var d = {o_a: A.new(), o_b: B.new()} + assert_equal([13, 'object'], [type(d.o_b), typename(d.o_b)]) + END + v9.CheckSourceSuccess(lines) +enddef + +" Test for object type +def Test_object_any_type() + # assigning different objects to variable of type object + var lines =<< trim END + vim9script + class A + endclass + class B + endclass + var x: object + x = A.new() + assert_true(instanceof(x, A)) + x = B.new() + assert_true(instanceof(x, B)) + x = null_object + assert_true(instanceof(x, null_class)) + END + v9.CheckSourceSuccess(lines) + + # Use a list of object variable + lines =<< trim END + vim9script + class A + endclass + class B + endclass + var l: list> + l->add(A.new()) + l->add(B.new()) + assert_true(instanceof(l[0], A)) + assert_true(instanceof(l[1], B)) + END + v9.CheckSourceSuccess(lines) + + # Using object as a function argument type and the return type + lines =<< trim END + vim9script + class A + endclass + class B + endclass + def Fn(x: object): object + return x + enddef + assert_true(instanceof(Fn(A.new()), A)) + assert_true(instanceof(Fn(B.new()), B)) + END + + # Try assigning a different type of value to a object variable + lines =<< trim END + var x: object = [] + END + v9.CheckSourceDefAndScriptFailure(lines, ['E1012: Type mismatch; expected object but got list', 'E1012: Type mismatch; expected object but got list']) + + # Try assigning a different type of value to a object variable + lines =<< trim END + var x: object + x = 0z10 + END + v9.CheckSourceDefAndScriptFailure(lines, ['E1012: Type mismatch; expected object but got blob', 'E1012: Type mismatch; expected object but got blob']) + + # Try adding a different type of value to a list> variable + lines =<< trim END + var x: list> + x->add({}) + END + v9.CheckSourceDefAndScriptFailure(lines, ['E1012: Type mismatch; expected object but got dict', 'E1012: Type mismatch; expected object but got dict']) + + # Try adding a different type of value to a dict> variable + lines =<< trim END + var x: dict> + x['a'] = {} + END + v9.CheckSourceDefAndScriptFailure(lines, ['E1012: Type mismatch; expected object but got dict', 'E1012: Type mismatch; expected object but got dict']) +enddef + +" Test for object<{class}> type +def Test_object_of_class_type() + var lines =<< trim END + vim9script + class A + endclass + var x: object + x = A.new() + assert_true(instanceof(x, A)) + var y: object = A.new() + assert_true(instanceof(y, A)) + END + v9.CheckSourceSuccess(lines) + + lines =<< trim END + vim9script + class A + endclass + class B + endclass + var x: object + x = B.new() + END + v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected object but got object') + + lines =<< trim END + vim9script + class A + endclass + class B + endclass + def Fn(x: object): object + return B.new() + enddef + assert_true(instanceof(Fn(A.new()), B)) + END + v9.CheckSourceSuccess(lines) + + lines =<< trim END + var x: object + END + v9.CheckSourceDefAndScriptFailure(lines, ['E1008: Missing after object', 'E1008: Missing after object']) + + lines =<< trim END + var x: object + END + v9.CheckSourceDefAndScriptFailure(lines, ['E1068: No white space allowed before ''<'': ', 'E1068: No white space allowed before ''<'': ']) + + lines =<< trim END + var x: object after type: after type: + END + v9.CheckSourceDefFailure(lines, 'E1009: Missing > after type: ') + + lines =<< trim END + vim9script + var x: object + END + v9.CheckSourceFailure(lines, 'E488: Trailing characters: ,any>') +enddef + " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/version.c b/src/version.c index e00e0077c0..42576d1e8a 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1274, /**/ 1273, /**/ diff --git a/src/vim9class.c b/src/vim9class.c index 5249f40de4..560c5ae283 100644 --- a/src/vim9class.c +++ b/src/vim9class.c @@ -4132,7 +4132,12 @@ f_instanceof(typval_T *argvars, typval_T *rettv) return; if (object_tv->vval.v_object == NULL) + { + if (classinfo_tv->vval.v_class == NULL) + // consider null_object as an instance of null_class + rettv->vval.v_number = VVAL_TRUE; return; + } for (; classinfo_tv->v_type != VAR_UNKNOWN; ++classinfo_tv) { diff --git a/src/vim9type.c b/src/vim9type.c index 2f85095879..a3881c9b1e 100644 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -1784,6 +1784,63 @@ parse_type_tuple(char_u **arg, garray_T *type_gap, int give_error) return ret_type; } +/* + * Parse a "object" type at "*arg" and advance over it. + * When "give_error" is TRUE give error messages, otherwise be quiet. + * Return NULL for failure. + */ + static type_T * +parse_type_object(char_u **arg, garray_T *type_gap, int give_error) +{ + char_u *arg_start = *arg; + type_T *object_type; + int prev_called_emsg = called_emsg; + + // object or object + if (**arg != '<') + { + if (give_error) + { + if (*skipwhite(*arg) == '<') + semsg(_(e_no_white_space_allowed_before_str_str), "<", *arg); + else + semsg(_(e_missing_type_after_str), "object"); + } + + // only "object" is specified + return NULL; + } + + // skip spaces following "object<" + *arg = skipwhite(*arg + 1); + + object_type = parse_type(arg, type_gap, give_error); + if (object_type == NULL) + return NULL; + + *arg = skipwhite(*arg); + if (**arg != '>' && called_emsg == prev_called_emsg) + { + if (give_error) + semsg(_(e_missing_gt_after_type_str), arg_start); + return NULL; + } + ++*arg; + + if (object_type->tt_type == VAR_ANY) + return &t_object_any; + + if (object_type->tt_type != VAR_OBJECT) + { + // specified type is not a class + if (give_error) + semsg(_(e_class_name_not_found_str), arg_start); + return NULL; + } + + return object_type; +} + /* * Parse a user defined type at "*arg" and advance over it. * It can be a class or an interface or a typealias name, possibly imported. @@ -1932,6 +1989,13 @@ parse_type(char_u **arg, garray_T *type_gap, int give_error) return &t_number; } break; + case 'o': + if (len == 6 && STRNCMP(*arg, "object", len) == 0) + { + *arg += len; + return parse_type_object(arg, type_gap, give_error); + } + break; case 's': if (len == 6 && STRNCMP(*arg, "string", len) == 0) { From d211558044c710d1d5f17f5fd4687f0c769deab2 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Thu, 3 Apr 2025 21:35:00 +0200 Subject: [PATCH 041/633] patch 9.1.1275: MS-Windows: Not possible to pass additional flags to Make_mvc Problem: MS-Windows: Not possible to pass additional flags to Make_mvc Solution: Introduce $CI_FLAGS and use it to pass additional flags for the Github CI in order to treat size conversion warnings (C4267) as errors (Yegappan Lakshmanan) closes: #17028 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- .github/workflows/ci.yml | 6 ++++-- ci/appveyor.bat | 6 +++--- src/Make_mvc.mak | 2 +- src/version.c | 2 ++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b4a8ccc9c..3c323a86f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -620,11 +620,13 @@ jobs: DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^ DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^ DYNAMIC_PYTHON3_STABLE_ABI=%PYTHON3_STABLE% ^ - DYNAMIC_SODIUM=yes SODIUM=%SODIUM_DIR% + DYNAMIC_SODIUM=yes SODIUM=%SODIUM_DIR% ^ + CI_FLAGS=/we4267 ) else ( nmake -nologo -f Make_mvc.mak ^ FEATURES=${{ matrix.features }} ^ - GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} + GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^ + CI_FLAGS=/we4267 ) - name: Build (MinGW) diff --git a/ci/appveyor.bat b/ci/appveyor.bat index c77cee19d2..17d95ff691 100644 --- a/ci/appveyor.bat +++ b/ci/appveyor.bat @@ -71,7 +71,7 @@ cd src echo "Building MSVC 64bit console Version" nmake -f Make_mvc.mak CPU=AMD64 ^ OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^ - FEATURES=%FEATURE% + FEATURES=%FEATURE% CI_CFLAGS=/we4267 if not exist vim.exe ( echo Build failure. exit 1 @@ -85,11 +85,11 @@ if "%FEATURE%" == "HUGE" ( OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no POSTSCRIPT=yes ^ PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 ^ PYTHON3_VER=%PYTHON3_VER% DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^ - FEATURES=%FEATURE% + FEATURES=%FEATURE% CI_CFLAGS=/we4267 ) ELSE ( nmake -f Make_mvc.mak CPU=AMD64 ^ OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^ - FEATURES=%FEATURE% + FEATURES=%FEATURE% CI_CFLAGS=/we4267 ) if not exist gvim.exe ( echo Build failure. diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index 282586536d..ab6bd6c07e 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -533,7 +533,7 @@ CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib CFLAGS = -c /W3 /GF /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DHAVE_STDINT_H \ $(CSCOPE_DEFS) $(TERM_DEFS) $(SOUND_DEFS) $(NETBEANS_DEFS) \ $(NBDEBUG_DEFS) $(XPM_DEFS) $(SOD_DEFS) $(SOD_INC) \ - $(CHANNEL_DEFS) $(DEFINES) \ + $(CHANNEL_DEFS) $(DEFINES) $(CI_CFLAGS) \ -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \ /source-charset:utf-8 diff --git a/src/version.c b/src/version.c index 42576d1e8a..d1ba7adf5a 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1275, /**/ 1274, /**/ From 2a6be835122d906c6ec10682c2a771b25c87c611 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Thu, 3 Apr 2025 21:39:24 +0200 Subject: [PATCH 042/633] runtime(vim): Update base-syntax, improve :set backslash handling Improve backslash handling in :set option values. There is no special handling for options supporting Windows path separators yet. See :help option-backslash. Remove the vimSetString syntax group. Option string values cannot be specified with a quoted string, this is a command terminating tail comment. fixes: #16913 closes: #17034 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/generator/vim.vim.base | 29 +++++-- .../syntax/testdir/dumps/vim_ex_set_01.dump | 2 +- .../syntax/testdir/dumps/vim_ex_set_02.dump | 2 +- .../syntax/testdir/dumps/vim_ex_set_03.dump | 2 +- .../syntax/testdir/dumps/vim_ex_set_04.dump | 2 +- .../syntax/testdir/dumps/vim_ex_set_05.dump | 4 +- .../syntax/testdir/dumps/vim_ex_set_06.dump | 18 ++--- .../syntax/testdir/dumps/vim_ex_set_07.dump | 20 +++++ .../dumps/vim_ex_set_backslash_00.dump | 20 +++++ .../dumps/vim_ex_set_backslash_01.dump | 20 +++++ .../dumps/vim_ex_set_backslash_02.dump | 20 +++++ .../dumps/vim_ex_set_backslash_03.dump | 20 +++++ .../dumps/vim_ex_set_backslash_04.dump | 20 +++++ runtime/syntax/testdir/input/vim_ex_set.vim | 13 ++- .../testdir/input/vim_ex_set_backslash.vim | 79 +++++++++++++++++++ runtime/syntax/vim.vim | 29 +++++-- 16 files changed, 274 insertions(+), 26 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_04.dump create mode 100644 runtime/syntax/testdir/input/vim_ex_set_backslash.vim diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 78abaf5a97..aa868e9f01 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Mar 29 +" Last Change: 2025 Apr 03 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -771,12 +771,31 @@ syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)' " Set command and associated set-options (vimOptions) with comment {{{2 syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetArgs -syn region vimSetArgs 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 region vimSetComment contained start=+"+ skip=+\n\s*\%(\\\||"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend +syn match vimSetCmdSep contained "|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc +syn match vimSetEscape contained "\\\%(\\[|"]\|.\)" +syn match vimSetBarEscape contained "\\|" +syn match vimSetQuoteEscape contained +\\"+ +syn region vimSetArgs contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*"\\ + + \ end=+\ze\\\@1| +0#0000000&@42 +@75 +|s+0#af5f00255&|e|t| +0#0000000&|l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Ф+0#0000000&|Ы|В|А|П|Р|О|Л|Д|Ж|Э|Ё|;|A|S|D|F|G|H|J|K|L|\@1|:+0#e000e06&|\+0#0000000&@1|"|\@1||| @30 +@6|\+0#e000e06&| +0#0000000&|l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Я+0#0000000&|Ч|С|М|И|Т|Ь|Б|Ю|;|Z|X|C|V|B|N|M|<+0#e000e06&|>| +0#0000000&@38 +@57|1|0|8|,|1| @8|9|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_07.dump b/runtime/syntax/testdir/dumps/vim_ex_set_07.dump new file mode 100644 index 0000000000..ef2b99c9cf --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Я+0#0000000&|Ч|С|М|И|Т|Ь|Б|Ю|;|Z|X|C|V|B|N|M|<+0#e000e06&|>| +0#0000000&@38 +@75 +|s+0#af5f00255&|e|t| +0#0000000&|l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Ф+0#0000000&|Ы|В|А|П|Р|О|Л|Д|Ж|Э|Ё|;|A|S|D|F|G|H|J|K|L|\@1|:+0#e000e06&|\+0#0000000&@1|"|\@1||| |l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Я+0#0000000&|Ч|С|М|И|Т|Ь|Б|Ю|;|Z|X|C|V|B|N|M|<+0#e000e06&|>| +0#0000000&@1 +> @74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|2|4|,|0|-|1| @6|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_00.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_00.dump new file mode 100644 index 0000000000..9b7370db86 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|s|e|t| |c|o|m@1|a|n|d| |(|e|s|c|a|p|e|d| |c|h|a|r|a|c|t|e|r|s|)| +0#0000000&@35 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|S|e|t|E|s|c|a|p|e| @5|D|i|f@1|A|d@1| +0#0000000&@24 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|S|e|t|B|a|r|E|s|c|a|p|e| @2|D|i|f@1|D|e|l|e|t|e| +0#0000000&@21 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|S|e|t|Q|u|o|t|e|E|s|c|a|p|e| |D|i|f@1|D|e|l|e|t|e| +0#0000000&@21 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|S|e|t|E|q|u|a|l| @6|D|i|f@1|C|h|a|n|g|e| +0#0000000&@21 +@75 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|-@1| |1| |-@1|"| +0#0000000&@60 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255|a|f+0&#ffd7ff255|o@1|\+0fd7ff255|a|b+0&#ffd7ff255|a|r|\+0fd7ff255|a| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255|a|f+0&#ffd7ff255|o@1|\+0fd7ff255|a|b+0&#ffd7ff255|a|r|\+0fd7ff255|a| +0&#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255| |f+0&#ffd7ff255|o@1|\+0fd7ff255| |b+0&#ffd7ff255|a|r|\+0fd7ff255| | +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255| |f+0&#ffd7ff255|o@1|\+0fd7ff255| |b+0&#ffd7ff255|a|r|\+0fd7ff255| | +0&#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255||| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255||| +0#0000000#ffffff0@46 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_01.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_01.dump new file mode 100644 index 0000000000..c99a3a6f4e --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255| |f+0&#ffd7ff255|o@1|\+0fd7ff255| |b+0&#ffd7ff255|a|r|\+0fd7ff255| | +0&#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255||| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +>s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255||| +0#0000000#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|"|f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|"|b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255|"| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|"|f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|"|b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255|"| +0#0000000#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|-@1| |2| |-@1|"| +0#0000000&@60 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|a+0&#ffd7ff255|f|o@1|\+0fd7ff255@1|a+0&#ffd7ff255|b|a|r|\+0fd7ff255@1|a+0&#ffd7ff255| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@33 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|a+0&#ffd7ff255|f|o@1|\+0fd7ff255@1|a+0&#ffd7ff255|b|a|r|\+0fd7ff255@1|a+0&#ffd7ff255| +0&#ffffff0@43 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1| +0&#ffffff0|f|o@1|\@1| |b|a|r|\@1| @1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@33 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@57|1|9|,|1| @9|2|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_02.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_02.dump new file mode 100644 index 0000000000..4250195d6c --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_02.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1| +0&#ffffff0|f|o@1|\@1| |b|a|r|\@1| @44 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|||f+0&#ffd7ff255|o@1|\+0fd7ff255@1|||b+0&#ffd7ff255|a|r|\+0fd7ff255@1||| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@33 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +>s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|||f+0&#ffd7ff255|o@1|\+0fd7ff255@1|||b+0&#ffd7ff255|a|r|\+0fd7ff255@1||| +0&#ffffff0@43 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|"|f+0&#ffd7ff255|o@1|\+0fd7ff255@1|"|b+0&#ffd7ff255|a|r|\+0fd7ff255@1|"| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@33 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|"|f+0&#ffd7ff255|o@1|\+0fd7ff255@1|"|b+0&#ffd7ff255|a|r|\+0fd7ff255@1|"| +0&#ffffff0@43 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|-@1| |3| |-@1|"| +0#0000000&@60 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@2|a|f+0&#ffd7ff255|o@1|\+0fd7ff255@2|a|b+0&#ffd7ff255|a|r|\+0fd7ff255@2|a| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@2|a|f+0&#ffd7ff255|o@1|\+0fd7ff255@2|a|b+0&#ffd7ff255|a|r|\+0fd7ff255@2|a| +0&#ffffff0@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@2| |f+0&#ffd7ff255|o@1|\+0fd7ff255@2| |b+0&#ffd7ff255|a|r|\+0fd7ff255@2| | +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@57|3|7|,|1| @9|5|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_03.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_03.dump new file mode 100644 index 0000000000..f0f1662db0 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_03.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@2| |f+0&#ffd7ff255|o@1|\+0fd7ff255@2| |b+0&#ffd7ff255|a|r|\+0fd7ff255@2| | +0&#ffffff0@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0fd7ff255@1|\+0#4040ff13#afffff255||| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +>s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0fd7ff255@1|\+0#4040ff13#afffff255||| +0#0000000#ffffff0@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|\+0#4040ff13#afffff255|"|f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@1|\+0#4040ff13#afffff255|"|b+0#0000000#ffd7ff255|a|r|\+0fd7ff255@1|\+0#4040ff13#afffff255|"| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|\+0#4040ff13#afffff255|"|f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@1|\+0#4040ff13#afffff255|"|b+0#0000000#ffd7ff255|a|r|\+0fd7ff255@1|\+0#4040ff13#afffff255|"| +0#0000000#ffffff0@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|-@1| |4| |-@1|"| +0#0000000&@60 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|a+0&#ffd7ff255|f|o@1|\+0fd7ff255@3|a+0&#ffd7ff255|b|a|r|\+0fd7ff255@3|a+0&#ffd7ff255| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@27 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|a+0&#ffd7ff255|f|o@1|\+0fd7ff255@3|a+0&#ffd7ff255|b|a|r|\+0fd7ff255@3|a+0&#ffd7ff255| +0&#ffffff0@37 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3| +0&#ffffff0|f|o@1|\@3| |b|a|r|\@3| @1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@27 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@57|5@1|,|1| @9|8|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_04.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_04.dump new file mode 100644 index 0000000000..04e6eadc5d --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_04.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3| +0&#ffffff0|f|o@1|\@3| |b|a|r|\@3| @38 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|||f+0&#ffd7ff255|o@1|\+0fd7ff255@3|||b+0&#ffd7ff255|a|r|\+0fd7ff255@3||| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@27 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +>s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|||f+0&#ffd7ff255|o@1|\+0fd7ff255@3|||b+0&#ffd7ff255|a|r|\+0fd7ff255@3||| +0&#ffffff0@37 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|"|f+0&#ffd7ff255|o@1|\+0fd7ff255@3|"|b+0&#ffd7ff255|a|r|\+0fd7ff255@3|"| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@27 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@3|"|\@3|"|b+0&#ffd7ff255|a|r|\+0fd7ff255@3|"| +0&#ffffff0@37 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|7|3|,|1| @9|B|o|t| diff --git a/runtime/syntax/testdir/input/vim_ex_set.vim b/runtime/syntax/testdir/input/vim_ex_set.vim index 0b1d0101a4..e1bfc0f9c2 100644 --- a/runtime/syntax/testdir/input/vim_ex_set.vim +++ b/runtime/syntax/testdir/input/vim_ex_set.vim @@ -93,7 +93,7 @@ set path= \abc,def -" CompilerSet +" :CompilerSet CompilerSet makeprg=ant CompilerSet errorformat=\ %#[%.%#]\ %#%f:%l:%v:%*\\d:%*\\d:\ %t%[%^:]%#:%m, @@ -111,3 +111,14 @@ echo "Foo" set quoteescape=\ echo "Foo" + +" Issue #16913 (vim syntax: set langmap may have wrong highlight) + +set langmap+=ФЫВАПРОЛДЖЭЁ;ASDFGHJKL\\:\\"\\| +set langmap+=ЯЧСМИТЬБЮ;ZXCVBNM<> + +set langmap+=ФЫВАПРОЛДЖЭЁ;ASDFGHJKL\\:\\"\\| + \ langmap+=ЯЧСМИТЬБЮ;ZXCVBNM<> + +set langmap+=ФЫВАПРОЛДЖЭЁ;ASDFGHJKL\\:\\"\\| langmap+=ЯЧСМИТЬБЮ;ZXCVBNM<> + diff --git a/runtime/syntax/testdir/input/vim_ex_set_backslash.vim b/runtime/syntax/testdir/input/vim_ex_set_backslash.vim new file mode 100644 index 0000000000..53851a7693 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_set_backslash.vim @@ -0,0 +1,79 @@ +" Vim :set command (escaped characters) +" VIM_TEST_SETUP hi link vimSetEscape DiffAdd +" VIM_TEST_SETUP hi link vimSetBarEscape DiffDelete +" VIM_TEST_SETUP hi link vimSetQuoteEscape DiffDelete +" VIM_TEST_SETUP hi link vimSetEqual DiffChange + + +echo "-- 1 --" +set titlestring=\afoo\abar\a " comment +echo &titlestring +set titlestring=\afoo\abar\a +echo &titlestring +set titlestring=\ foo\ bar\ " comment +echo &titlestring +set titlestring=\ foo\ bar\ +echo &titlestring +set titlestring=\|foo\|bar\| " comment +echo &titlestring +set titlestring=\|foo\|bar\| +echo &titlestring +set titlestring=\"foo\"bar\" " comment +echo &titlestring +set titlestring=\"foo\"bar\" +echo &titlestring + +echo "-- 2 --" +set titlestring=\\afoo\\abar\\a " comment +echo &titlestring +set titlestring=\\afoo\\abar\\a +echo &titlestring +set titlestring=\\ foo\\ bar\\ " comment +echo &titlestring +set titlestring=\\ foo\\ bar\\ +echo &titlestring +set titlestring=\\|foo\\|bar\\| " comment +echo &titlestring +set titlestring=\\|foo\\|bar\\| +echo &titlestring +set titlestring=\\"foo\\"bar\\" " comment +echo &titlestring +set titlestring=\\"foo\\"bar\\" +echo &titlestring + +echo "-- 3 --" +set titlestring=\\\afoo\\\abar\\\a " comment +echo &titlestring +set titlestring=\\\afoo\\\abar\\\a +echo &titlestring +set titlestring=\\\ foo\\\ bar\\\ " comment +echo &titlestring +set titlestring=\\\ foo\\\ bar\\\ +echo &titlestring +set titlestring=\\\|foo\\\|bar\\\| " comment +echo &titlestring +set titlestring=\\\|foo\\\|bar\\\| +echo &titlestring +set titlestring=\\\"foo\\\"bar\\\" " comment +echo &titlestring +set titlestring=\\\"foo\\\"bar\\\" +echo &titlestring + +echo "-- 4 --" +set titlestring=\\\\afoo\\\\abar\\\\a " comment +echo &titlestring +set titlestring=\\\\afoo\\\\abar\\\\a +echo &titlestring +set titlestring=\\\\ foo\\\\ bar\\\\ " comment +echo &titlestring +set titlestring=\\\\ foo\\\\ bar\\\\ +echo &titlestring +set titlestring=\\\\|foo\\\\|bar\\\\| " comment +echo &titlestring +set titlestring=\\\\|foo\\\\|bar\\\\| +echo &titlestring +set titlestring=\\\\"foo\\\\"bar\\\\" " comment +echo &titlestring +set titlestring=foo\\\\"\\\\"bar\\\\" +echo &titlestring + diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 2a833e4d8d..228e741df5 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Mar 29 +" Last Change: 2025 Apr 03 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -823,12 +823,31 @@ syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)' " Set command and associated set-options (vimOptions) with comment {{{2 syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetArgs -syn region vimSetArgs 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 region vimSetComment contained start=+"+ skip=+\n\s*\%(\\\||"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend +syn match vimSetCmdSep contained "|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc +syn match vimSetEscape contained "\\\%(\\[|"]\|.\)" +syn match vimSetBarEscape contained "\\|" +syn match vimSetQuoteEscape contained +\\"+ +syn region vimSetArgs contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*"\\ + + \ end=+\ze\\\@1 Date: Fri, 4 Apr 2025 19:11:13 +0200 Subject: [PATCH 043/633] runtime(doc): update WinScrolled documentation closes: #17036 Signed-off-by: Christian Brabandt --- runtime/doc/autocmd.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index 820c302608..b9b76ffced 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -1,4 +1,4 @@ -*autocmd.txt* For Vim version 9.1. Last change: 2025 Apr 03 +*autocmd.txt* For Vim version 9.1. Last change: 2025 Apr 04 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1481,6 +1481,13 @@ WinScrolled After any window in the current tab page or changed width or height. See |win-scrolled-resized|. + Note: This can not be skipped with + `:noautocmd`, because it triggers after + processing normal commands when Vim is back in + the main loop. If you want to disable this, + consider setting the 'eventignore' option + instead. + The pattern is matched against the |window-ID| of the first window that scrolled or resized. Both and are set to the From 9aa120f7ada592ed03b37f4de8ee413c5385f123 Mon Sep 17 00:00:00 2001 From: Yee Cheng Chin Date: Fri, 4 Apr 2025 19:16:21 +0200 Subject: [PATCH 044/633] patch 9.1.1276: inline word diff treats multibyte chars as word char Problem: inline word diff treats multibyte chars as word char (after 9.1.1243) Solution: treat all non-alphanumeric characters as non-word characters (Yee Cheng Chin) Previously inline word diff simply used Vim's definition of keyword to determine what is a word, which leads to multi-byte character classes such as emojis and CJK (Chinese/Japanese/Korean) characters all classifying as word characters, leading to entire sentences being grouped as a single word which does not provide meaningful information in a diff highlight. Fix this by treating all non-alphanumeric characters (with class number above 2) as non-word characters, as there is usually no benefit in using word diff on them. These include CJK characters, emojis, and also subscript/superscript numbers. Meanwhile, multi-byte characters like Cyrillic and Greek letters will still continue to considered as words. Note that this is slightly inconsistent with how words are defined elsewhere, as Vim usually considers any character with class >=2 to be a "word". related: #16881 (diff inline highlight) closes: #17050 Signed-off-by: Yee Cheng Chin Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 7 +++++-- src/diff.c | 11 ++++++++-- src/mbyte.c | 4 ++-- .../dumps/Test_diff_inline_word_03.dump | 20 +++++++++++++++++++ src/testdir/test_diffmode.vim | 5 +++++ src/version.c | 2 ++ 6 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 src/testdir/dumps/Test_diff_inline_word_03.dump diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 84deecae6f..e2206f0b46 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Mar 28 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 04 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2989,7 +2989,10 @@ A jump table for the options with a short description can be found at |Q_op|. difference. word Use internal diff to perform a |word|-wise diff and highlight the - difference. + difference. Non-alphanumeric + multi-byte characters such as emoji + and CJK characters are considered + individual words. internal Use the internal diff library. This is ignored when 'diffexpr' is set. *E960* diff --git a/src/diff.c b/src/diff.c index 3adcdb7dba..e694cf20cd 100644 --- a/src/diff.c +++ b/src/diff.c @@ -3309,10 +3309,17 @@ diff_find_change_inline_diff( char_u *s; for (s = curline; *s != NUL;) { - // Always use the first buffer's 'iskeyword' to have a consistent diff int new_in_keyword = FALSE; if (diff_flags & DIFF_INLINE_WORD) - new_in_keyword = vim_iswordp_buf(s, curtab->tp_diffbuf[file1_idx]); + { + // Always use the first buffer's 'iskeyword' to have a + // consistent diff. + // For multibyte chars, only treat alphanumeric chars + // (class 2) as "word", as other classes such as emojis and + // CJK ideographs do not usually benefit from word diff as + // Vim doesn't have a good way to segment them. + new_in_keyword = (mb_get_class_buf(s, curtab->tp_diffbuf[file1_idx]) == 2); + } if (in_keyword && !new_in_keyword) { ga_append(curstr, NL); diff --git a/src/mbyte.c b/src/mbyte.c index a38ab24f32..cc8d628ed5 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -828,8 +828,8 @@ remove_bom(char_u *s) * Get class of pointer: * 0 for blank or NUL * 1 for punctuation - * 2 for an (ASCII) word character - * >2 for other word characters + * 2 for an alphanumeric word character + * >2 for other word characters, including CJK and emoji */ int mb_get_class(char_u *p) diff --git a/src/testdir/dumps/Test_diff_inline_word_03.dump b/src/testdir/dumps/Test_diff_inline_word_03.dump new file mode 100644 index 0000000000..30efaed3a6 --- /dev/null +++ b/src/testdir/dumps/Test_diff_inline_word_03.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|🚀*0#0000000#ffd7ff255|⛵️*2&#ff404010|一*0&#ffd7ff255|二|三*2&#ff404010|ひ*0&#ffd7ff255|ら|が*0࿈ff13|な*0&#ffd7ff255|Δ+2&#ff404010|έ|λ|τ|α| +0&#ffd7ff255|Δ+2&#ff404010|e|l|t|a| +0&#ffd7ff255|f|o@1|b|a||+1&#ffffff0| +0#0000e05#a8a8a8255@1|🚀*0#0000000#ffd7ff255|🛸*2&#ff404010|一*0&#ffd7ff255|二|四*2&#ff404010|ひ*0&#ffd7ff255|ら|な|δ+2&#ff404010|έ|λ|τ|α| +0&#ffd7ff255|δ+2&#ff404010|e|l|t|a| +0&#ffd7ff255|f|o@1|b|a|r| +|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1 +|:+0&&> @73 diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim index 1b5e5c0819..d0c2f18e4e 100644 --- a/src/testdir/test_diffmode.vim +++ b/src/testdir/test_diffmode.vim @@ -2444,6 +2444,11 @@ func Test_diff_inline() call term_sendkeys(buf, ":windo set iskeyword&\:1wincmd w\") + " word diff: test handling of multi-byte characters. Only alphanumeric chars + " (e.g. Greek alphabet, but not CJK/emoji) count as words. + call WriteDiffFiles(buf, ["🚀⛵️一二三ひらがなΔέλτα Δelta foobar"], ["🚀🛸一二四ひらなδέλτα δelta foobar"]) + call VerifyInternal(buf, "Test_diff_inline_word_03", " diffopt+=inline:word") + " char diff: should slide highlight to whitespace boundary if possible for " better readability (by using forced indent-heuristics). A wrong result " would be if the highlight is "Bar, prefix". It should be "prefixBar, " diff --git a/src/version.c b/src/version.c index d1ba7adf5a..3e45e2f95f 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1276, /**/ 1275, /**/ From d84cbdb5a36e14913f16621cd78c1d5a9baac53e Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Sat, 5 Apr 2025 15:51:26 +0200 Subject: [PATCH 045/633] patch 9.1.1277: tests: trailing comment char in test_popupwin Problem: tests: trailing comment char in test_popupwin Solution: remove crufty tail comment (Doug Kearns) Remove a crufty tail comment from Test_popup_with_border_and_padding(). The line used to be in a string list and the closing quote and comma persist. closes: #17058 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- src/testdir/test_popupwin.vim | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim index 5082676ea2..3c8e5d7101 100644 --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -148,7 +148,7 @@ func Test_popup_with_border_and_padding() \ lastline: 1, \ scrollbar: 0, \ visible: 1} - let winid = popup_create('hello border', #{line: 2, col: 3, border: []})", + let winid = popup_create('hello border', #{line: 2, col: 3, border: []}) call assert_equal(with_border_or_padding, winid->popup_getpos()) let options = popup_getoptions(winid) call assert_equal([], options.border) diff --git a/src/version.c b/src/version.c index 3e45e2f95f..971133b2a1 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1277, /**/ 1276, /**/ From 2f5a8c0b5b00690f554a7234d020a47bd96520a0 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Sat, 5 Apr 2025 15:55:36 +0200 Subject: [PATCH 046/633] runtime(vim): Update base-syntax, match full :redir command closes: #17057 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/generator/gen_syntax_vim.vim | 1 + runtime/syntax/generator/vim.vim.base | 31 +++++++++++-- .../syntax/testdir/dumps/vim_ex_redir_00.dump | 20 ++++++++ .../syntax/testdir/dumps/vim_ex_redir_01.dump | 20 ++++++++ .../syntax/testdir/dumps/vim_ex_redir_02.dump | 20 ++++++++ .../testdir/input/setup/vim_ex_redir.vim | 2 + runtime/syntax/testdir/input/vim_ex_redir.vim | 46 +++++++++++++++++++ runtime/syntax/vim.vim | 37 ++++++++++++--- 8 files changed, 168 insertions(+), 9 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/vim_ex_redir_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_redir_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_redir_02.dump create mode 100644 runtime/syntax/testdir/input/setup/vim_ex_redir.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_redir.vim diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim index 750b5d8b7b..19e5491ebd 100644 --- a/runtime/syntax/generator/gen_syntax_vim.vim +++ b/runtime/syntax/generator/gen_syntax_vim.vim @@ -300,6 +300,7 @@ function s:get_vim_command_type(cmd_name) normal popup public + redir return set setglobal diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index aa868e9f01..83a61c9b7e 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Apr 03 +" Last Change: 2025 Apr 05 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -230,7 +230,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vim syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1!\=" skipwhite nextgroup=vimNormalArg contains=vimBang syn region vimNormalArg contained start="\S" skip=+\n\s*\\\|\n\s*["#]\\ + end="$" contains=@vimContinue +" Redir: {{{2 +" ===== +syn match vimRedir "\" skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd +syn match vimRedirBang contained "\a\@1<=!" skipwhite nextgroup=vimRedirFileOperator + +syn match vimRedirFileOperator contained ">>\=" skipwhite nextgroup=vimRedirFile +syn region vimRedirFile contained + \ start="\S" + \ matchgroup=Normal + \ end="\s*$" + \ end="\s*\ze[|"]" + \ nextgroup=vimCmdSep,vimComment + \ contains=vimSpecFile +syn match vimRedirRegisterOperator contained ">>\=" +syn match vimRedirRegister contained "@[a-zA-Z*+"]" nextgroup=vimRedirRegisterOperator +syn match vimRedirVariableOperator contained "=>>\=" skipwhite nextgroup=vimVar +syn keyword vimRedirEnd contained END + " Sleep: {{{2 " ===== syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg @@ -1589,7 +1607,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimLetHereDoc vimString hi def link vimLetHereDocStart Special hi def link vimLetHereDocStop Special - hi def link vimLetRegister Special + hi def link vimLetRegister vimRegister hi def link vimLineComment vimComment hi def link vimMapBang vimBang hi def link vimMapLeader vimBracket @@ -1635,6 +1653,13 @@ if !exists("skip_vim_syntax_inits") hi def link vimPlainMark vimMark hi def link vimPlainRegister vimRegister hi def link vimQuoteEscape vimEscape + hi def link vimRedir vimCommand + hi def link vimRedirBang vimBang + hi def link vimRedirFileOperator vimOper + hi def link vimRedirRegisterOperator vimOper + hi def link vimRedirVariableOperator vimOper + hi def link vimRedirEnd Special + hi def link vimRedirRegister vimRegister hi def link vimRegister SpecialChar hi def link vimScriptDelim Comment hi def link vimSearch vimString diff --git a/runtime/syntax/testdir/dumps/vim_ex_redir_00.dump b/runtime/syntax/testdir/dumps/vim_ex_redir_00.dump new file mode 100644 index 0000000000..eae6fb50a6 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_redir_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|r|e|d|i|r| |c|o|m@1|a|n|d| +0#0000000&@54 +@75 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&@1|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@57 +|r+0#af5f00255&|e|d|i|r|!| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@57 +|r+0#af5f00255&|e|d|i|r| +0#0000000&@1|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&@56 +|r+0#af5f00255&|e|d|i|r|!| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&@56 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&@1|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@56 +|r+0#af5f00255&|e|d|i|r|!| +0#0000000&|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@56 +|r+0#af5f00255&|e|d|i|r| +0#0000000&@1|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&@55 +|r+0#af5f00255&|e|d|i|r|!| +0#0000000&|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&@55 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@44 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@44 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_redir_01.dump b/runtime/syntax/testdir/dumps/vim_ex_redir_01.dump new file mode 100644 index 0000000000..372c484302 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_redir_01.dump @@ -0,0 +1,20 @@ +|r+0#af5f00255#ffffff0|e|d|i|r| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@44 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@44 +@75 +>r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e|n|a|m|e| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@43 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|>+0#af5f00255&@1| +0#0000000&|f+0#e000002&|i|l|e| |n|a|m|e| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@43 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|a| +0#0000000&@66 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|A| +0#0000000&@66 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|a|>+0#af5f00255&| +0#0000000&@65 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|A|>+0#af5f00255&| +0#0000000&@65 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|a|>+0#af5f00255&@1| +0#0000000&@64 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|A|>+0#af5f00255&@1| +0#0000000&@64 +@75 +@57|1|9|,|1| @9|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_redir_02.dump b/runtime/syntax/testdir/dumps/vim_ex_redir_02.dump new file mode 100644 index 0000000000..bff02dac0a --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_redir_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|*|>+0#af5f00255&| +0#0000000&@65 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|+|>+0#af5f00255&| +0#0000000&@65 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|*|>+0#af5f00255&@1| +0#0000000&@64 +>r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|+|>+0#af5f00255&@1| +0#0000000&@64 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|"|>+0#af5f00255&| +0#0000000&@65 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|@+0#e000e06&|"|>+0#af5f00255&@1| +0#0000000&@64 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@1|v+0#00e0e07&|a|r| +0#0000000&@61 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|=+0#af5f00255&|>@1| +0#0000000&|v+0#00e0e07&|a|r| +0#0000000&@61 +@75 +|r+0#af5f00255&|e|d|i|r| +0#0000000&|E+0#e000e06&|N|D| +0#0000000&@65 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|3|7|,|1| @9|B|o|t| diff --git a/runtime/syntax/testdir/input/setup/vim_ex_redir.vim b/runtime/syntax/testdir/input/setup/vim_ex_redir.vim new file mode 100644 index 0000000000..6193cc4e58 --- /dev/null +++ b/runtime/syntax/testdir/input/setup/vim_ex_redir.vim @@ -0,0 +1,2 @@ +highlight link vimVar Identifier +highlight link vimRedirFile String diff --git a/runtime/syntax/testdir/input/vim_ex_redir.vim b/runtime/syntax/testdir/input/vim_ex_redir.vim new file mode 100644 index 0000000000..1deb113fb5 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_redir.vim @@ -0,0 +1,46 @@ +" Vim :redir command + + +redir > filename +redir! > filename +redir > file name +redir! > file name + +redir >> filename +redir! >> filename +redir >> file name +redir! >> file name + +redir > filename " comment +redir > filename | echo "Foo" +redir > file name " comment +redir > file name | echo "Foo" + +redir >> filename " comment +redir >> filename | echo "Foo" +redir >> file name " comment +redir >> file name | echo "Foo" + +redir @a +redir @A + +redir @a> +redir @A> + +redir @a>> +redir @A>> + +redir @*> +redir @+> + +redir @*>> +redir @+>> + +redir @"> +redir @">> + +redir => var +redir =>> var + +redir END + diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 228e741df5..ece8eb5ad8 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Apr 03 +" Last Change: 2025 Apr 05 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -36,9 +36,9 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell syn keyword vimCommand contained abo[veleft] 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] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler] con[tinue] conf[irm] nextgroup=vimBang syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] 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] em[enu] en[dif] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] filt[er] fin[d] fina[lly] 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] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] imp[ort] int[ro] ip[ut] is[earch] nextgroup=vimBang syn keyword vimCommand contained 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] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] mz[scheme] mzf[ile] n[ext] nb[key] nextgroup=vimBang -syn keyword vimCommand contained 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] pb[uffer] 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] 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] 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] nextgroup=vimBang -syn keyword vimCommand contained sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] 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] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] tj[ump] nextgroup=vimBang -syn keyword vimCommand contained tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] 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] 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 nextgroup=vimBang +syn keyword vimCommand contained 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] pb[uffer] 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] 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] redr[aw] redraws[tatus] redrawt[abline] reg[isters] res[ize] ret[ab] 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] nextgroup=vimBang +syn keyword vimCommand contained sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] 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] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] nextgroup=vimBang +syn keyword vimCommand contained tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] 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] 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 nextgroup=vimBang " Lower priority for _new_ to distinguish constructors from the command. syn match vimCommand contained "\(\@!" @@ -280,7 +280,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vim syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1!\=" skipwhite nextgroup=vimNormalArg contains=vimBang syn region vimNormalArg contained start="\S" skip=+\n\s*\\\|\n\s*["#]\\ + end="$" contains=@vimContinue +" Redir: {{{2 +" ===== +syn match vimRedir "\" skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd +syn match vimRedirBang contained "\a\@1<=!" skipwhite nextgroup=vimRedirFileOperator + +syn match vimRedirFileOperator contained ">>\=" skipwhite nextgroup=vimRedirFile +syn region vimRedirFile contained + \ start="\S" + \ matchgroup=Normal + \ end="\s*$" + \ end="\s*\ze[|"]" + \ nextgroup=vimCmdSep,vimComment + \ contains=vimSpecFile +syn match vimRedirRegisterOperator contained ">>\=" +syn match vimRedirRegister contained "@[a-zA-Z*+"]" nextgroup=vimRedirRegisterOperator +syn match vimRedirVariableOperator contained "=>>\=" skipwhite nextgroup=vimVar +syn keyword vimRedirEnd contained END + " Sleep: {{{2 " ===== syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg @@ -1647,7 +1665,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimLetHereDoc vimString hi def link vimLetHereDocStart Special hi def link vimLetHereDocStop Special - hi def link vimLetRegister Special + hi def link vimLetRegister vimRegister hi def link vimLineComment vimComment hi def link vimMapBang vimBang hi def link vimMapLeader vimBracket @@ -1693,6 +1711,13 @@ if !exists("skip_vim_syntax_inits") hi def link vimPlainMark vimMark hi def link vimPlainRegister vimRegister hi def link vimQuoteEscape vimEscape + hi def link vimRedir vimCommand + hi def link vimRedirBang vimBang + hi def link vimRedirFileOperator vimOper + hi def link vimRedirRegisterOperator vimOper + hi def link vimRedirVariableOperator vimOper + hi def link vimRedirEnd Special + hi def link vimRedirRegister vimRegister hi def link vimRegister SpecialChar hi def link vimScriptDelim Comment hi def link vimSearch vimString From d22f43111b6bef8c146a8fe7f871f478fbb4a96f Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sat, 5 Apr 2025 15:57:12 +0200 Subject: [PATCH 047/633] patch 9.1.1278: Vim9: too long functions in vim9type.c Problem: Vim9: too long functions in vim9type.c Solution: refactor into separate functions (Yegappan Lakshmanan) closes: #17056 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/version.c | 2 + src/vim9type.c | 353 +++++++++++++++++++++++++++++-------------------- 2 files changed, 214 insertions(+), 141 deletions(-) diff --git a/src/version.c b/src/version.c index 971133b2a1..883367da10 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1278, /**/ 1277, /**/ diff --git a/src/vim9type.c b/src/vim9type.c index a3881c9b1e..a90c0cc1c2 100644 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -1174,6 +1174,122 @@ check_tuple_type_maybe( return OK; } +/* + * Check if the expected and actual types match for a function + * Returns OK if "expected" and "actual" are matching function types. + * Returns FAIL if "expected" and "actual" are different types. + * Returns MAYBE when a runtime type check is needed. + */ + static int +check_func_type_maybe( + type_T *expected, + type_T *actual, + where_T where) +{ + int ret = OK; + + // If the return type is unknown it can be anything, including + // nothing, thus there is no point in checking. + if (expected->tt_member != &t_unknown) + { + if (actual->tt_member != NULL + && actual->tt_member != &t_unknown) + { + where_T func_where = where; + + func_where.wt_kind = WT_METHOD_RETURN; + ret = check_type_maybe(expected->tt_member, + actual->tt_member, FALSE, + func_where); + } + else + ret = MAYBE; + } + if (ret != FAIL + && ((expected->tt_flags & TTFLAG_VARARGS) + != (actual->tt_flags & TTFLAG_VARARGS)) + && expected->tt_argcount != -1) + ret = FAIL; + if (ret != FAIL && expected->tt_argcount != -1 + && actual->tt_min_argcount != -1 + && (actual->tt_argcount == -1 + || (actual->tt_argcount < expected->tt_min_argcount + || actual->tt_argcount > expected->tt_argcount))) + ret = FAIL; + if (ret != FAIL && expected->tt_args != NULL + && actual->tt_args != NULL) + { + int i; + + for (i = 0; i < expected->tt_argcount + && i < actual->tt_argcount; ++i) + { + where_T func_where = where; + func_where.wt_kind = WT_METHOD_ARG; + + // Allow for using "any" argument type, lambda's have them. + if (actual->tt_args[i] != &t_any && check_type( + expected->tt_args[i], actual->tt_args[i], FALSE, + func_where) == FAIL) + { + ret = FAIL; + break; + } + } + } + if (ret == OK && expected->tt_argcount >= 0 + && actual->tt_argcount == -1) + // check the argument count at runtime + ret = MAYBE; + + return ret; +} + +/* + * Check if the expected and actual types match for an object + * Returns OK if "expected" and "actual" are matching object types. + * Returns FAIL if "expected" and "actual" are different types. + * Returns MAYBE when a runtime type check is needed. + */ + static int +check_object_type_maybe( + type_T *expected, + type_T *actual, + where_T where) +{ + int ret = OK; + + if (actual->tt_type == VAR_ANY) + return MAYBE; // use runtime type check + if (actual->tt_type != VAR_OBJECT) + return FAIL; // don't use tt_class + if (actual->tt_class == NULL) // null object + return OK; + // t_object_any matches any object except for an enum item + if (expected == &t_object_any && !IS_ENUM(actual->tt_class)) + return OK; + + // For object method arguments, do a invariant type check in + // an extended class. For all others, do a covariance type check. + if (where.wt_kind == WT_METHOD_ARG) + { + if (actual->tt_class != expected->tt_class) + ret = FAIL; + } + else if (!class_instance_of(actual->tt_class, expected->tt_class)) + { + // 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; + } + + return ret; +} + /* * Check if the expected and actual types match. * Does not allow for assigning "any" to a specific type. @@ -1246,91 +1362,9 @@ check_type_maybe( else if (expected->tt_type == VAR_TUPLE && actual != &t_any) ret = check_tuple_type_maybe(expected, actual, where); else if (expected->tt_type == VAR_FUNC && actual != &t_any) - { - // If the return type is unknown it can be anything, including - // nothing, thus there is no point in checking. - if (expected->tt_member != &t_unknown) - { - if (actual->tt_member != NULL - && actual->tt_member != &t_unknown) - { - where_T func_where = where; - - func_where.wt_kind = WT_METHOD_RETURN; - ret = check_type_maybe(expected->tt_member, - actual->tt_member, FALSE, - func_where); - } - else - ret = MAYBE; - } - if (ret != FAIL - && ((expected->tt_flags & TTFLAG_VARARGS) - != (actual->tt_flags & TTFLAG_VARARGS)) - && expected->tt_argcount != -1) - ret = FAIL; - if (ret != FAIL && expected->tt_argcount != -1 - && actual->tt_min_argcount != -1 - && (actual->tt_argcount == -1 - || (actual->tt_argcount < expected->tt_min_argcount - || actual->tt_argcount > expected->tt_argcount))) - ret = FAIL; - if (ret != FAIL && expected->tt_args != NULL - && actual->tt_args != NULL) - { - int i; - - for (i = 0; i < expected->tt_argcount - && i < actual->tt_argcount; ++i) - { - where_T func_where = where; - func_where.wt_kind = WT_METHOD_ARG; - - // Allow for using "any" argument type, lambda's have them. - if (actual->tt_args[i] != &t_any && check_type( - expected->tt_args[i], actual->tt_args[i], FALSE, - func_where) == FAIL) - { - ret = FAIL; - break; - } - } - } - if (ret == OK && expected->tt_argcount >= 0 - && actual->tt_argcount == -1) - // check the argument count at runtime - ret = MAYBE; - } + ret = check_func_type_maybe(expected, actual, where); else if (expected->tt_type == VAR_OBJECT) - { - if (actual->tt_type == VAR_ANY) - return MAYBE; // use runtime type check - if (actual->tt_type != VAR_OBJECT) - return FAIL; // don't use tt_class - if (actual->tt_class == NULL) // null object - return OK; - // t_object_any matches any object except for an enum item - if (expected == &t_object_any && !IS_ENUM(actual->tt_class)) - return OK; - - // For object method arguments, do a invariant type check in - // an extended class. For all others, do a covariance type check. - if (where.wt_kind == WT_METHOD_ARG) - { - if (actual->tt_class != expected->tt_class) - ret = FAIL; - } - else if (!class_instance_of(actual->tt_class, expected->tt_class)) - { - // 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; - } - } + ret = check_object_type_maybe(expected, actual, where); if (ret == FAIL && give_msg) type_mismatch_where(expected, actual, where); @@ -1411,6 +1445,91 @@ check_argument_types( return OK; } +/* + * Skip over type in list, dict or tuple. + * Returns a pointer to the character after the type. "syn_error" is set to + * TRUE on syntax error. + */ + static char_u * +skip_member_type(char_u *start, char_u *p, int *syn_error) +{ + if (STRNCMP("tuple", start, 5) == 0) + { + // handle tuple<{type1}, {type2}, ....> + p = skipwhite(p + 1); + while (*p != '>' && *p != NUL) + { + char_u *sp = p; + + if (STRNCMP(p, "...", 3) == 0) + p += 3; + p = skip_type(p, TRUE); + if (p == sp) + { + *syn_error = TRUE; + return p; // syntax error + } + if (*p == ',') + p = skipwhite(p + 1); + } + if (*p == '>') + p++; + } + else + { + p = skipwhite(p); + p = skip_type(skipwhite(p + 1), FALSE); + p = skipwhite(p); + if (*p == '>') + ++p; + } + + return p; +} + +/* + * Skip over a function type. Returns a pointer to the character after the + * type. "syn_error" is set to TRUE on syntax error. + */ + static char_u * +skip_func_type(char_u *p, int *syn_error) +{ + if (*p == '(') + { + // handle func(args): type + ++p; + while (*p != ')' && *p != NUL) + { + char_u *sp = p; + + if (STRNCMP(p, "...", 3) == 0) + p += 3; + p = skip_type(p, TRUE); + if (p == sp) + { + *syn_error = TRUE; + return p; // syntax error + } + if (*p == ',') + p = skipwhite(p + 1); + } + if (*p == ')') + { + if (p[1] == ':') + p = skip_type(skipwhite(p + 2), FALSE); + else + ++p; + } + } + else + { + // handle func: return_type + p = skip_type(skipwhite(p + 1), FALSE); + } + + return p; +} + /* * Skip over a type definition and return a pointer to just after it. * When "optional" is TRUE then a leading "?" is accepted. @@ -1418,7 +1537,8 @@ check_argument_types( char_u * skip_type(char_u *start, int optional) { - char_u *p = start; + char_u *p = start; + int syn_error = FALSE; if (optional && *p == '?') ++p; @@ -1430,66 +1550,17 @@ skip_type(char_u *start, int optional) // Skip over ""; this is permissive about white space. if (*skipwhite(p) == '<') { - if (STRNCMP("tuple", start, 5) == 0) - { - // handle tuple<{type1}, {type2}, ....> - p = skipwhite(p + 1); - while (*p != '>' && *p != NUL) - { - char_u *sp = p; - - if (STRNCMP(p, "...", 3) == 0) - p += 3; - p = skip_type(p, TRUE); - if (p == sp) - return p; // syntax error - if (*p == ',') - p = skipwhite(p + 1); - } - if (*p == '>') - p++; - } - else - { - p = skipwhite(p); - p = skip_type(skipwhite(p + 1), FALSE); - p = skipwhite(p); - if (*p == '>') - ++p; - } + p = skip_member_type(start, p, &syn_error); + if (syn_error) + return p; } else if ((*p == '(' || (*p == ':' && VIM_ISWHITE(p[1]))) && STRNCMP("func", start, 4) == 0) { - if (*p == '(') - { - // handle func(args): type - ++p; - while (*p != ')' && *p != NUL) - { - char_u *sp = p; - - if (STRNCMP(p, "...", 3) == 0) - p += 3; - p = skip_type(p, TRUE); - if (p == sp) - return p; // syntax error - if (*p == ',') - p = skipwhite(p + 1); - } - if (*p == ')') - { - if (p[1] == ':') - p = skip_type(skipwhite(p + 2), FALSE); - else - ++p; - } - } - else - { - // handle func: return_type - p = skip_type(skipwhite(p + 1), FALSE); - } + // skip over function type + p = skip_func_type(p, &syn_error); + if (syn_error) + return p; } return p; From 8daae6fea9080a0825b5d6b3bb38960d5064bf1b Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sat, 5 Apr 2025 16:00:22 +0200 Subject: [PATCH 048/633] patch 9.1.1279: Vim9: null_object and null_class are no reserved names Problem: Vim9: null_object and null_class are no reserved names Solution: Add null_object and null_class as reserved names. (Yegappan Lakshmanan) closes: #17054 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- runtime/doc/vim9class.txt | 6 ++--- src/testdir/test_vim9_assign.vim | 2 ++ src/version.c | 2 ++ src/vim9script.c | 42 ++++++++++++++++++++++---------- src/vim9type.c | 10 +++++--- 5 files changed, 43 insertions(+), 19 deletions(-) diff --git a/runtime/doc/vim9class.txt b/runtime/doc/vim9class.txt index 7ba91e7d92..5d6f7fca18 100644 --- a/runtime/doc/vim9class.txt +++ b/runtime/doc/vim9class.txt @@ -1,4 +1,4 @@ -*vim9class.txt* For Vim version 9.1. Last change: 2025 Feb 16 +*vim9class.txt* For Vim version 9.1. Last change: 2025 Apr 05 VIM REFERENCE MANUAL by Bram Moolenaar @@ -641,8 +641,8 @@ class, then the type of the variable is set. The following reserved keyword names cannot be used as an object or class variable name: "super", "this", "true", "false", "null", "null_blob", -"null_dict", "null_function", "null_list", "null_partial", "null_string", -"null_channel" and "null_job". +"null_channel", "null_class", "null_dict", "null_function", "null_job", +"null_list", "null_object", "null_partial" and "null_string". Extending a class ~ *extends* diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index 97c11a740d..2294936ec3 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -326,6 +326,8 @@ def Test_reserved_name() 'null_list', 'null_partial', 'null_string', + 'null_object', + 'null_class', ] + more_names v9.CheckDefExecAndScriptFailure(['var ' .. name .. ' = 0'], 'E1034:') v9.CheckDefExecAndScriptFailure(['var ' .. name .. ': bool'], 'E1034:') diff --git a/src/version.c b/src/version.c index 883367da10..eba6725ded 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1279, /**/ 1278, /**/ diff --git a/src/vim9script.c b/src/vim9script.c index cdacf0b230..7e33770a04 100644 --- a/src/vim9script.c +++ b/src/vim9script.c @@ -1119,36 +1119,52 @@ check_script_var_type( } // words that cannot be used as a variable +// Keep this array sorted, as bsearch() is used to search this array. static char *reserved[] = { - "true", "false", "null", "null_blob", + "null_channel", + "null_class", "null_dict", "null_function", + "null_job", "null_list", - "null_tuple", + "null_object", "null_partial", "null_string", - "null_channel", - "null_job", + "null_tuple", "super", "this", - NULL + "true", }; +/* + * String compare function used for bsearch() + */ + static int +comp_names(const void *s1, const void *s2) +{ + return STRCMP(*(char **)s1, *(char **)s2); +} + +/* + * Returns OK if "name" is not a reserved keyword. Otherwise returns FAIL. + */ int check_reserved_name(char_u *name, int is_objm_access) { - int idx; + // "this" can be used in an object method + if (is_objm_access && STRCMP("this", name) == 0) + return OK; + + if (bsearch(&name, reserved, ARRAY_LENGTH(reserved), + sizeof(reserved[0]), comp_names) != NULL) + { + semsg(_(e_cannot_use_reserved_name_str), name); + return FAIL; + } - for (idx = 0; reserved[idx] != NULL; ++idx) - if (STRCMP(reserved[idx], name) == 0 - && !(STRCMP("this", name) == 0 && is_objm_access)) - { - semsg(_(e_cannot_use_reserved_name_str), name); - return FAIL; - } return OK; } diff --git a/src/vim9type.c b/src/vim9type.c index a90c0cc1c2..ab5e077528 100644 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -333,6 +333,9 @@ tuple_type_add_types( return OK; } +/* + * Get a list type, based on the member item type in "member_type". + */ type_T * get_list_type(type_T *member_type, garray_T *type_gap) { @@ -367,9 +370,7 @@ get_list_type(type_T *member_type, garray_T *type_gap) * "tuple_types_ga". */ type_T * -get_tuple_type( - garray_T *tuple_types_gap, - garray_T *type_gap) +get_tuple_type(garray_T *tuple_types_gap, garray_T *type_gap) { type_T *type; type_T **tuple_types = tuple_types_gap->ga_data; @@ -397,6 +398,9 @@ get_tuple_type( return type; } +/* + * Get a dict type, based on the member item type in "member_type". + */ type_T * get_dict_type(type_T *member_type, garray_T *type_gap) { From ba7376678885a62fe0d5d0afa7fdb7dae01086ee Mon Sep 17 00:00:00 2001 From: Satoru Kitaguchi Date: Sun, 6 Apr 2025 16:04:59 +0200 Subject: [PATCH 049/633] patch 9.1.1280: trailing additional semicolon in get_matches_in_str() Problem: trailing additional semicolon in get_matches_in_str() (Hirohito Higashi) Solution: remove it (Satoru Kitaguchi) closes: #17066 Co-authored-by: Hirohito Higashi Signed-off-by: Satoru Kitaguchi Signed-off-by: Christian Brabandt --- src/evalfunc.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/evalfunc.c b/src/evalfunc.c index f2c69999ae..2aa516dc40 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -9164,7 +9164,7 @@ get_matches_in_str( if (d == NULL) return FAIL; if (list_append_dict(mlist, d) == FAIL) - return FAIL;; + return FAIL; if (dict_add_number(d, matchbuf ? "lnum" : "idx", idx) == FAIL) return FAIL; diff --git a/src/version.c b/src/version.c index eba6725ded..50743e0519 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1280, /**/ 1279, /**/ From 221927b2bfbd7de1623770bee4f6740356bb6c81 Mon Sep 17 00:00:00 2001 From: Abhijit Barik Date: Sun, 6 Apr 2025 16:12:06 +0200 Subject: [PATCH 050/633] patch 9.1.1281: extra newline output when editing stdin Problem: extra newline output when editing stdin Solution: remove outputting when reading from stdin in non-terminal mode (Abhijit Barik) fixes: #16856 closes: #17047 Co-authored-by: LemonBoy Signed-off-by: Abhijit Barik Signed-off-by: Christian Brabandt --- src/main.c | 2 +- src/testdir/test_startup.vim | 62 ++++++++++++++++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index f603a52a52..7766946288 100644 --- a/src/main.c +++ b/src/main.c @@ -660,7 +660,7 @@ vim_main2(void) #if defined(UNIX) || defined(VMS) // When switching screens and something caused a message from a vimrc // script, need to output an extra newline on exit. - if ((did_emsg || msg_didout) && *T_TI != NUL) + if ((did_emsg || msg_didout) && *T_TI != NUL && params.edit_type != EDIT_STDIN) newline_on_exit = TRUE; #endif diff --git a/src/testdir/test_startup.vim b/src/testdir/test_startup.vim index 8052aa883d..03876749f4 100644 --- a/src/testdir/test_startup.vim +++ b/src/testdir/test_startup.vim @@ -781,6 +781,68 @@ func Test_progpath() call assert_match('vim\c', v:progname) endfunc +func Test_stdin_no_newline() + CheckScreendump + CheckUnix + CheckExecutable bash + + let $PS1 = 'TEST_PROMPT> ' + let buf = RunVimInTerminal('', #{rows: 20, cmd: 'bash --noprofile --norc'}) + call TermWait(buf, 100) + + " Write input to temp file + call term_sendkeys(buf, "echo hello > temp.txt\") + call TermWait(buf, 200) + + call term_sendkeys(buf, "bash -c '../vim --not-a-term -u NONE -c \":q!\" -' < temp.txt\") + call TermWait(buf, 200) + + " Capture terminal output + let lines = [] + for i in range(1, term_getsize(buf)[0]) + call add(lines, term_getline(buf, i)) + endfor + + " Find the command line in output + let cmd_line = -1 + for i in range(len(lines)) + if lines[i] =~ '.*vim.*--not-a-term.*' + let cmd_line = i + break + endif + endfor + + if cmd_line == -1 + call assert_report('Command line not found in terminal output') + else + let next_line = -1 + for i in range(cmd_line + 1, len(lines)) + if lines[i] =~ '\S' + let next_line = i + break + endif + endfor + + if next_line == -1 + call assert_report('No prompt found after command execution') + else + call assert_equal(cmd_line + 1, next_line, 'Prompt should be on the immediate next line') + call assert_match('.*TEST_PROMPT>.*', lines[next_line], 'Line should contain the prompt PS1') + endif + endif + + " Clean up temp file and exit shell + call term_sendkeys(buf, "rm -f temp.txt\") + call term_sendkeys(buf, "exit\") + call TermWait(buf, 200) + + if job_status(term_getjob(buf)) ==# 'run' + call StopVimInTerminal(buf) + endif + + unlet $PS1 +endfunc + func Test_silent_ex_mode() " must be able to get the output of Vim. CheckUnix diff --git a/src/version.c b/src/version.c index 50743e0519..a900afc7b1 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1281, /**/ 1280, /**/ From c54a8eb258ddc4dfc79f668a2d0c0a3c16abc8c4 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sun, 6 Apr 2025 16:15:10 +0200 Subject: [PATCH 051/633] patch 9.1.1282: Build and test failure without job feature Problem: Build and test failure without job feature (lazypingu) Solution: Adjust ifdefs, add CheckFeature job to tests fixes: #17053 closes: #17059 Signed-off-by: Christian Brabandt --- src/feature.h | 13 +++++++------ src/testdir/test_vim9_builtin.vim | 1 + src/testdir/test_vimscript.vim | 1 + src/version.c | 2 ++ 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/feature.h b/src/feature.h index bcfc4a40c0..703a72fc9e 100644 --- a/src/feature.h +++ b/src/feature.h @@ -1015,12 +1015,6 @@ * +tgetent */ -/* - * The Netbeans feature requires +eval. - */ -#if !defined(FEAT_EVAL) && defined(FEAT_NETBEANS_INTG) -# undef FEAT_NETBEANS_INTG -#endif /* * The +channel feature requires +eval. @@ -1029,6 +1023,13 @@ # undef FEAT_JOB_CHANNEL #endif +/* + * The Netbeans feature requires +eval and +job_channel + */ +#if (!defined(FEAT_EVAL) || !defined(FEAT_JOB_CHANNEL)) && defined(FEAT_NETBEANS_INTG) +# undef FEAT_NETBEANS_INTG +#endif + /* * +terminal ":terminal" command. Runs a terminal in a window. * requires +channel diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index 7d65cb61eb..7a3a1864d3 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -1648,6 +1648,7 @@ def Test_foldtextresult() enddef def Test_foreach() + CheckFeature job v9.CheckSourceDefAndScriptFailure(['foreach(test_null_job(), "")'], ['E1013: Argument 1: type mismatch, expected list but got job', 'E1251: List, Tuple, Dictionary, Blob or String required for argument 1']) enddef diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim index 5c88ec6237..16dd70c9d2 100644 --- a/src/testdir/test_vimscript.vim +++ b/src/testdir/test_vimscript.vim @@ -7521,6 +7521,7 @@ endfunc " Test for 'for' loop failures func Test_for_loop_failure() + CheckFeature job func ForFn() for x in test_null_job() endfor diff --git a/src/version.c b/src/version.c index a900afc7b1..bab345d6df 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1282, /**/ 1281, /**/ From 88d41ab270a8390a43da97a903b1a4d76b89d330 Mon Sep 17 00:00:00 2001 From: 64-bitman <60551350+64-bitman@users.noreply.github.com> Date: Sun, 6 Apr 2025 17:20:39 +0200 Subject: [PATCH 052/633] patch 9.1.1283: quickfix stack is limited to 10 items Problem: quickfix and location-list stack is limited to 10 items Solution: add the 'chistory' and 'lhistory' options to configure a larger quickfix/location list stack (64-bitman) closes: #16920 Co-authored-by: Hirohito Higashi Signed-off-by: 64-bitman <60551350+64-bitman@users.noreply.github.com> Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 28 ++- runtime/doc/quickfix.txt | 18 +- runtime/doc/quickref.txt | 4 +- runtime/doc/tags | 5 + runtime/doc/version9.txt | 5 +- runtime/optwin.vim | 9 +- runtime/syntax/vim.vim | 32 +-- src/errors.h | 10 + src/main.c | 7 + src/option.c | 42 ++++ src/option.h | 2 + src/optiondefs.h | 19 ++ src/proto/option.pro | 1 + src/proto/quickfix.pro | 3 + src/quickfix.c | 363 ++++++++++++++++++++++++++++------ src/structs.h | 2 + src/testdir/gen_opt_test.vim | 2 + src/testdir/test_quickfix.vim | 173 ++++++++++++++++ src/version.c | 2 + 19 files changed, 642 insertions(+), 85 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index e2206f0b46..962a6e790f 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 04 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1717,6 +1717,19 @@ A jump table for the options with a short description can be found at |Q_op|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. + *'chistory'* *'chi'* +'chistory' 'chi' number (default: 10) + global + {only available when compiled with the |+quickfix| + feature} + Number of quickfix lists that should be remembered for the quickfix + stack. Must be between 1 and 100. If the option is set to a value + that is lower than the amount of entries in the quickfix list stack, + entries will be removed starting from the oldest one. If the current + quickfix list was removed, then the quickfix list at top of the stack + (the most recently created) will be used in its place. For additional + info, see |quickfix-stack|. + *'cindent'* *'cin'* *'nocindent'* *'nocin'* 'cindent' 'cin' boolean (default off) local to buffer @@ -5316,6 +5329,19 @@ A jump table for the options with a short description can be found at |Q_op|. temporarily when performing an operation where redrawing may cause flickering or cause a slowdown. + *'lhistory'* *'lhi'* +'lhistory' 'lhi' number (default: 10) + local to window + {only available when compiled with the |+quickfix| + feature} + Like 'chistory', but for the location list stack associated with the + current window. If the option is changed in either the location list + window itself or the the window that is associated with the location + list stack, the new value will also be applied to the other one. This + means this value will always be the same for a given location list + window and its corresponding window. See |quickfix-stack| for + additional info. + *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'* 'linebreak' 'lbr' boolean (default off) local to window diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt index 91e48637ab..a9a43feda6 100644 --- a/runtime/doc/quickfix.txt +++ b/runtime/doc/quickfix.txt @@ -1,4 +1,4 @@ -*quickfix.txt* For Vim version 9.1. Last change: 2025 Mar 11 +*quickfix.txt* For Vim version 9.1. Last change: 2025 Apr 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -43,12 +43,12 @@ From inside Vim an easy way to run a command and handle the output is with the The 'errorformat' option should be set to match the error messages from your compiler (see |errorformat| below). - *quickfix-ID* + *quickfix-stack* *quickfix-ID* Each quickfix list has a unique identifier called the quickfix ID and this number will not change within a Vim session. The |getqflist()| function can be used to get the identifier assigned to a list. There is also a quickfix list -number which may change whenever more than ten lists are added to a quickfix -stack. +number which may change whenever more than 'chistory' lists are added to a +quickfix stack. *location-list* *E776* A location list is a window-local quickfix list. You get one after commands @@ -860,10 +860,12 @@ using these functions are below: ============================================================================= 3. Using more than one list of errors *quickfix-error-lists* -So far has been assumed that there is only one list of errors. Actually the -ten last used lists are remembered. When starting a new list, the previous -ones are automatically kept. Two commands can be used to access older error -lists. They set one of the existing error lists as the current one. +So far it has been assumed that there is only one list of errors. Actually +there can be multiple used lists that are remembered; see 'chistory' and +'lhistory'. +When starting a new list, the previous ones are automatically kept. Two +commands can be used to access older error lists. They set one of the +existing error lists as the current one. *:colder* *:col* *E380* :col[der] [count] Go to older error list. When [count] is given, do diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt index 87764a29de..349c1af8d0 100644 --- a/runtime/doc/quickref.txt +++ b/runtime/doc/quickref.txt @@ -1,4 +1,4 @@ -*quickref.txt* For Vim version 9.1. Last change: 2025 Feb 08 +*quickref.txt* For Vim version 9.1. Last change: 2025 Apr 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -639,6 +639,7 @@ Short explanation of each option: *option-list* 'cdpath' 'cd' list of directories searched with ":cd" 'cedit' key used to open the command-line window 'charconvert' 'ccv' expression for character encoding conversion +'chistory' 'chi' maximum number of quickfix lists in history 'cindent' 'cin' do C program indenting 'cinkeys' 'cink' keys that trigger indent when 'cindent' is set 'cinoptions' 'cino' how to do indenting when 'cindent' is set @@ -786,6 +787,7 @@ Short explanation of each option: *option-list* 'langremap' 'lrm' do apply 'langmap' to mapped characters 'laststatus' 'ls' tells when last window has status lines 'lazyredraw' 'lz' don't redraw while executing macros +'lhistory' 'lhi' maximum number of location lists in history 'linebreak' 'lbr' wrap long lines at a blank 'lines' number of lines in the display 'linespace' 'lsp' number of pixel lines to use between characters diff --git a/runtime/doc/tags b/runtime/doc/tags index acb2251019..e55623dad4 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -134,6 +134,8 @@ $quote eval.txt /*$quote* 'ch' options.txt /*'ch'* 'character' intro.txt /*'character'* 'charconvert' options.txt /*'charconvert'* +'chi' options.txt /*'chi'* +'chistory' options.txt /*'chistory'* 'ci' options.txt /*'ci'* 'cia' options.txt /*'cia'* 'cin' options.txt /*'cin'* @@ -463,6 +465,8 @@ $quote eval.txt /*$quote* 'lazyredraw' options.txt /*'lazyredraw'* 'lbr' options.txt /*'lbr'* 'lcs' options.txt /*'lcs'* +'lhi' options.txt /*'lhi'* +'lhistory' options.txt /*'lhistory'* 'linebreak' options.txt /*'linebreak'* 'lines' options.txt /*'lines'* 'linespace' options.txt /*'linespace'* @@ -9768,6 +9772,7 @@ quickfix-pandoc quickfix.txt /*quickfix-pandoc* quickfix-parse quickfix.txt /*quickfix-parse* quickfix-perl quickfix.txt /*quickfix-perl* quickfix-size quickfix.txt /*quickfix-size* +quickfix-stack quickfix.txt /*quickfix-stack* quickfix-title quickfix.txt /*quickfix-title* quickfix-valid quickfix.txt /*quickfix-valid* quickfix-window quickfix.txt /*quickfix-window* diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index b7b2bcc5fd..48d0941193 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Apr 03 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41729,6 +41729,7 @@ Ex-Commands: ~ Options: ~ +'chistory' Size of the quickfix stack |quickfix-stack|. 'completefuzzycollect' Enable fuzzy collection of candiates for (some) |ins-completion| modes 'completeitemalign' Order of |complete-items| in Insert mode completion @@ -41736,6 +41737,8 @@ Options: ~ 'eventignorewin' autocommand events that are ignored in a window 'findfunc' Vim function to obtain the results for a |:find| command +'lhistory' Size of the location list stack |quickfix-stack|. +'completefuzzycollect' Enable fuzzy collection of candiates for (some) 'messagesopt' configure |:messages| and |hit-enter| prompt 'winfixbuf' Keep buffer focused in a window 'tabclose' Which tab page to focus after closing a tab page diff --git a/runtime/optwin.vim b/runtime/optwin.vim index 2bcea9df01..05ea6a230e 100644 --- a/runtime/optwin.vim +++ b/runtime/optwin.vim @@ -1,7 +1,7 @@ " These commands create the option window. " " Maintainer: The Vim Project -" Last Change: 2025 Mar 28 +" Last Change: 2025 Apr 06 " Former Maintainer: Bram Moolenaar " If there already is an option window, jump to that one. @@ -405,6 +405,13 @@ if has("linebreak") call append("$", "\t" .. s:local_to_window) call OptionL("nuw") endif +if has("quickfix") + call AddOption("chistory", gettext("maximum number of quickfix lists that can be stored in history")) + call OptionL("chi") + call AddOption("lhistory", gettext("maximum number of location lists that can be stored in history")) + call append("$", "\t" .. s:local_to_window) + call OptionL("lhi") +endif if has("conceal") call AddOption("conceallevel", gettext("controls whether concealable text is hidden")) call append("$", "\t" .. s:local_to_window) diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index ece8eb5ad8..dcdb6bc542 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Apr 05 +" Last Change: 2025 Apr 06 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -47,14 +47,14 @@ syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue Di " vimOptions are caught only when contained in a vimSet {{{2 " 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 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 chi chistory 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 cfc completefuzzycollect cia completeitemalign 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 eiw eventignorewin et expandtab ex exrc fenc fileencoding skipwhite nextgroup=vimSetEqual,vimSetMod syn keyword vimOption contained fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc 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 skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc 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 mopt messagesopt msm mkspellmem ml modeline skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus 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 pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions 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 skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang 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 skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype 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 +syn keyword vimOption contained imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc 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 lhi lhistory 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 mopt messagesopt msm mkspellmem skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus 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 pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions 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 skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang 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 skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype 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='' @@ -85,15 +85,15 @@ syn match vimOption contained "t_k;" " vimOptions: These are the variable names {{{2 " GEN_SYN_VIM: vimOption normal variable, START_STR='syn keyword vimOptionVarName contained', END_STR='' -syn keyword vimOptionVarName 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 vimOptionVarName contained cfc completefuzzycollect cia completeitemalign 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 eiw eventignorewin et expandtab ex exrc fenc fileencoding -syn keyword vimOptionVarName contained fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc 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 -syn keyword vimOptionVarName contained imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc 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 mopt messagesopt -syn keyword vimOptionVarName contained msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus 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 pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome -syn keyword vimOptionVarName contained pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions 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 -syn keyword vimOptionVarName contained scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang 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 -syn keyword vimOptionVarName contained titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype 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 -syn keyword vimOptionVarName contained wd writedelay xtermcodes +syn keyword vimOptionVarName 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 chi chistory 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 +syn keyword vimOptionVarName contained cfu completefunc cfc completefuzzycollect cia completeitemalign 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 eiw eventignorewin et expandtab +syn keyword vimOptionVarName contained ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc 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 +syn keyword vimOptionVarName contained imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc 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 lhi lhistory 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 +syn keyword vimOptionVarName contained mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus 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 pmw pummaxwidth pw pumwidth pythondll pythonhome +syn keyword vimOptionVarName contained pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions 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 +syn keyword vimOptionVarName contained ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang 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 +syn keyword vimOptionVarName contained 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 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 +syn keyword vimOptionVarName contained write wa writeany wb writebackup wd writedelay xtermcodes " GEN_SYN_VIM: vimOption term output code variable, START_STR='syn keyword vimOptionVarName contained', END_STR='' syn keyword vimOptionVarName 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 syn keyword vimOptionVarName 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 diff --git a/src/errors.h b/src/errors.h index 6e2782df5b..90cc2b143e 100644 --- a/src/errors.h +++ b/src/errors.h @@ -3718,3 +3718,13 @@ EXTERN char e_cannot_use_variadic_tuple_in_concatenation[] #endif EXTERN char e_unicode_val_too_large[] INIT(= N_("E1541: Value too large, max Unicode codepoint is U+10FFFF")); +#ifdef FEAT_QUICKFIX +EXTERN char e_cannot_have_negative_or_zero_number_of_quickfix[] + INIT(= N_("E1542: Cannot have a negative or zero number of quickfix/location lists")); +EXTERN char e_cannot_have_more_than_hundred_quickfix[] + INIT(= N_("E1543: Cannot have more than a hundred quickfix/location lists")); +EXTERN char e_failed_resizing_quickfix_stack[] + INIT(= N_("E1544: Failed resizing the quickfix/location list stack")); +EXTERN char e_no_quickfix_stack[] + INIT(= N_("E1545: Quickfix list stack unavailable")); +#endif diff --git a/src/main.c b/src/main.c index 7766946288..a3caac8fb5 100644 --- a/src/main.c +++ b/src/main.c @@ -1024,6 +1024,13 @@ common_init_2(mparm_T *paramp) #ifdef FEAT_SIGNS init_signs(); #endif + +#ifdef FEAT_QUICKFIX + // initialize global quickfix list + // don't send an error message when memory allocation fails + // do it when the user tries to access the quickfix list + qf_init_quickfix_stack(); +#endif } /* diff --git a/src/option.c b/src/option.c index f61d726990..5c28c801f5 100644 --- a/src/option.c +++ b/src/option.c @@ -4735,6 +4735,44 @@ did_set_wrap(optset_T *args UNUSED) return NULL; } +#ifdef FEAT_QUICKFIX +/* + * Process the new 'chistory' or 'lhistory' option value. 'chistory' will + * be used if args->os_varp is the same as p_chi, else 'lhistory'. + */ + char * +did_set_xhistory(optset_T *args) +{ + int is_p_chi = (long*)args->os_varp == &p_chi; + int err; + long *arg = (is_p_chi) ? &p_chi :(long*)args->os_varp; + + // cannot have zero or negative number of quickfix lists in a stack + if (*arg < 1) + { + *arg = args->os_oldval.number; + return e_cannot_have_negative_or_zero_number_of_quickfix; + } + + // cannot have more than 100 quickfix lists in a stack + if (*arg > 100) + { + *arg = args->os_oldval.number; + return e_cannot_have_more_than_hundred_quickfix; + } + + if (is_p_chi) + err = qf_resize_quickfix_stack(*arg); + else + err = ll_resize_stack(curwin, *arg); + + if (err == FAIL) + return e_failed_resizing_quickfix_stack; + + return NULL; +} +#endif + /* * Set the value of a boolean option, and take care of side effects. * Returns NULL for success, or an error message for an error. @@ -6653,6 +6691,7 @@ get_varp(struct vimoption *p) case PV_WFW: return (char_u *)&(curwin->w_p_wfw); #if defined(FEAT_QUICKFIX) case PV_PVW: return (char_u *)&(curwin->w_p_pvw); + case PV_LHI: return (char_u *)&(curwin->w_p_lhi); #endif #ifdef FEAT_RIGHTLEFT case PV_RL: return (char_u *)&(curwin->w_p_rl); @@ -6973,6 +7012,9 @@ copy_winopt(winopt_T *from, winopt_T *to) #ifdef FEAT_SIGNS to->wo_scl = copy_option_val(from->wo_scl); #endif +#ifdef FEAT_QUICKFIX + to->wo_lhi = from->wo_lhi; +#endif #ifdef FEAT_EVAL // Copy the script context so that we know where the value was last set. diff --git a/src/option.h b/src/option.h index 0b568f1939..54bdeedd75 100644 --- a/src/option.h +++ b/src/option.h @@ -859,6 +859,7 @@ EXTERN char_u *p_rop; // 'renderoptions' EXTERN long p_report; // 'report' #if defined(FEAT_QUICKFIX) EXTERN long p_pvh; // 'previewheight' +EXTERN long p_chi; // 'chistory' #endif #ifdef MSWIN EXTERN int p_rs; // 'restorescreen' @@ -1323,6 +1324,7 @@ enum #endif #if defined(FEAT_QUICKFIX) , WV_PVW + , WV_LHI #endif #ifdef FEAT_RIGHTLEFT , WV_RL diff --git a/src/optiondefs.h b/src/optiondefs.h index b6b5d49eb5..8ed4ebe781 100644 --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -192,6 +192,7 @@ #endif #if defined(FEAT_QUICKFIX) # define PV_PVW OPT_WIN(WV_PVW) +# define PV_LHI OPT_WIN(WV_LHI) #endif #ifdef FEAT_RIGHTLEFT # define PV_RL OPT_WIN(WV_RL) @@ -573,6 +574,15 @@ static struct vimoption options[] = #else (char_u *)NULL, PV_NONE, NULL, NULL, {(char_u *)0L, (char_u *)0L} +#endif + SCTX_INIT}, + {"chistory", "chi", P_NUM|P_VI_DEF, +#ifdef FEAT_QUICKFIX + (char_u *)&p_chi, PV_NONE, did_set_xhistory, NULL, + {(char_u *)10L, (char_u *)0L} +#else + (char_u *)NULL, PV_NONE, NULL, NULL, + {(char_u *)0L, (char_u *)0L} #endif SCTX_INIT}, {"cindent", "cin", P_BOOL|P_VI_DEF|P_VIM, @@ -1573,6 +1583,15 @@ static struct vimoption options[] = {"lazyredraw", "lz", P_BOOL|P_VI_DEF, (char_u *)&p_lz, PV_NONE, NULL, NULL, {(char_u *)FALSE, (char_u *)0L} SCTX_INIT}, + {"lhistory", "lhi", P_NUM|P_VI_DEF, +#ifdef FEAT_QUICKFIX + (char_u *)VAR_WIN, PV_LHI, did_set_xhistory, NULL, + {(char_u *)10L, (char_u *)0L} +#else + (char_u *)NULL, PV_NONE, NULL, NULL, + {(char_u *)0L, (char_u *)0L} +#endif + SCTX_INIT}, {"linebreak", "lbr", P_BOOL|P_VI_DEF|P_RWIN, #ifdef FEAT_LINEBREAK (char_u *)VAR_WIN, PV_LBR, NULL, NULL, diff --git a/src/proto/option.pro b/src/proto/option.pro index 12be870688..c6dfc1bd45 100644 --- a/src/proto/option.pro +++ b/src/proto/option.pro @@ -88,6 +88,7 @@ char *did_set_winminheight(optset_T *args); char *did_set_winminwidth(optset_T *args); char *did_set_winwidth(optset_T *args); char *did_set_wrap(optset_T *args); +char *did_set_xhistory(optset_T *args); void check_redraw(long_u flags); int findoption(char_u *arg); getoption_T get_option_value(char_u *name, long *numval, char_u **stringval, int *flagsp, int scope); diff --git a/src/proto/quickfix.pro b/src/proto/quickfix.pro index b708d6bd4d..8102a8f1ae 100644 --- a/src/proto/quickfix.pro +++ b/src/proto/quickfix.pro @@ -3,6 +3,9 @@ int qf_init(win_T *wp, char_u *efile, char_u *errorformat, int newlist, char_u * int qf_stack_get_bufnr(void); void qf_free_all(win_T *wp); void check_quickfix_busy(void); +int qf_resize_quickfix_stack(int n); +int ll_resize_stack(win_T *wp, int n); +int qf_init_quickfix_stack(void); void copy_loclist_stack(win_T *from, win_T *to); void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit); void qf_list(exarg_T *eap); diff --git a/src/quickfix.c b/src/quickfix.c index 11bfa82241..9722058e38 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -51,7 +51,6 @@ struct qfline_S /* * There is a stack of error lists. */ -#define LISTCOUNT 10 #define INVALID_QFIDX (-1) #define INVALID_QFBUFNR (0) @@ -113,12 +112,14 @@ struct qf_info_S int qf_refcount; int qf_listcount; // current number of lists int qf_curlist; // current error list - qf_list_T qf_lists[LISTCOUNT]; + int qf_maxcount; // maximum number of lists + qf_list_T *qf_lists; qfltype_T qfl_type; // type of list int qf_bufnr; // quickfix window buffer number }; -static qf_info_T ql_info; // global quickfix list +static qf_info_T ql_info_actual; // global quickfix list +static qf_info_T *ql_info; // points to ql_info_actual if memory allocation is sucessful. static int_u last_qf_id = 0; // Last used quickfix list id #define FMT_PATTERNS 14 // maximum number of % recognized @@ -170,14 +171,21 @@ static efm_T *fmt_start = NULL; // cached across qf_parse_line() calls // callback function for 'quickfixtextfunc' static callback_T qftf_cb; +static void qf_pop_stack(qf_info_T *qi, int adjust); static void qf_new_list(qf_info_T *qi, char_u *qf_title); static int qf_add_entry(qf_list_T *qfl, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, long end_lnum, int col, int end_col, int vis_col, char_u *pattern, int nr, int type, typval_T *user_data, int valid); +static int qf_resize_stack(qf_info_T *qi, int n); +static void qf_sync_llw_to_win(win_T *llw); +static void qf_sync_win_to_llw(win_T *pwp); +static qf_info_T *qf_alloc_stack(qfltype_T qfltype, int n); +static qf_list_T *qf_alloc_list_stack(int n); static void qf_free(qf_list_T *qfl); static char_u *qf_types(int, int); static int qf_get_fnum(qf_list_T *qfl, char_u *, char_u *); static char_u *qf_push_dir(char_u *, struct dir_stack_T **, int is_file_stack); static char_u *qf_pop_dir(struct dir_stack_T **); static char_u *qf_guess_filepath(qf_list_T *qfl, char_u *); +static win_T *qf_find_win_with_loclist(qf_info_T *ll); static void qf_jump_newwin(qf_info_T *qi, int dir, int errornr, int forceit, int newwin); static void qf_fmt_text(garray_T *gap, char_u *text); static void qf_range_text(garray_T *gap, qfline_T *qfp); @@ -1902,14 +1910,12 @@ qf_init(win_T *wp, char_u *qf_title, char_u *enc) { - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; if (wp != NULL) - { qi = ll_get_or_alloc_list(wp); - if (qi == NULL) - return FAIL; - } + if (qi == NULL) + return FAIL; return qf_init_ext(qi, qi->qf_curlist, efile, curbuf, NULL, errorformat, newlist, (linenr_T)0, (linenr_T)0, qf_title, enc); @@ -1958,6 +1964,34 @@ qf_get_curlist(qf_info_T *qi) return qf_get_list(qi, qi->qf_curlist); } +/* + * Pop a quickfix list from the quickfix/location list stack + * Automatically adjust qf_curlist so that it stays pointed + * to the same list, unless it is deleted, if so then use the + * newest created list instead. qf_listcount will be set correctly. + * The above will only happen if is TRUE. + */ + static void +qf_pop_stack(qf_info_T *qi, int adjust) +{ + int i; + qf_free(&qi->qf_lists[0]); + for (i = 1; i < qi->qf_listcount; ++i) + qi->qf_lists[i - 1] = qi->qf_lists[i]; + + // fill with zeroes now unused list at the top + vim_memset(qi->qf_lists + qi->qf_listcount - 1, 0, sizeof(*qi->qf_lists)); + + if (adjust) + { + qi->qf_listcount--; + if (qi->qf_curlist == 0) + qi->qf_curlist = qi->qf_listcount - 1; + else + qi->qf_curlist--; + } +} + /* * Prepare for adding a new quickfix list. If the current list is in the * middle of the stack, then all the following lists are freed and then @@ -1966,7 +2000,6 @@ qf_get_curlist(qf_info_T *qi) static void qf_new_list(qf_info_T *qi, char_u *qf_title) { - int i; qf_list_T *qfl; // If the current entry is not the last entry, delete entries beyond @@ -1977,15 +2010,14 @@ qf_new_list(qf_info_T *qi, char_u *qf_title) // When the stack is full, remove to oldest entry // Otherwise, add a new entry. - if (qi->qf_listcount == LISTCOUNT) + if (qi->qf_listcount == qi->qf_maxcount) { - qf_free(&qi->qf_lists[0]); - for (i = 1; i < LISTCOUNT; ++i) - qi->qf_lists[i - 1] = qi->qf_lists[i]; - qi->qf_curlist = LISTCOUNT - 1; + qf_pop_stack(qi, FALSE); + qi->qf_curlist = qi->qf_listcount - 1; // point to new empty list } else qi->qf_curlist = qi->qf_listcount++; + qfl = qf_get_curlist(qi); CLEAR_POINTER(qfl); qf_store_title(qfl, qf_title); @@ -2017,7 +2049,9 @@ locstack_queue_delreq(qf_info_T *qi) int qf_stack_get_bufnr(void) { - return ql_info.qf_bufnr; + if (ql_info == NULL) + return INVALID_QFBUFNR; + return ql_info->qf_bufnr; } /* @@ -2056,13 +2090,35 @@ wipe_qf_buffer(qf_info_T *qi) } } + +/* + * Free all lists in the stack (not including the stack) + */ + static void +qf_free_list_stack_items(qf_info_T *qi) +{ + for (int i = 0; i < qi->qf_listcount; ++i) + qf_free(qf_get_list(qi, i)); +} + +/* + * Free a qf_ifo_T struct completely + */ + static void +qf_free_lists(qf_info_T *qi) +{ + qf_free_list_stack_items(qi); + + vim_free(qi->qf_lists); + vim_free(qi); +} + /* * Free a location list stack */ static void ll_free_all(qf_info_T **pqi) { - int i; qf_info_T *qi; qi = *pqi; @@ -2085,9 +2141,7 @@ ll_free_all(qf_info_T **pqi) // If the quickfix window buffer is loaded, then wipe it wipe_qf_buffer(qi); - for (i = 0; i < qi->qf_listcount; ++i) - qf_free(qf_get_list(qi, i)); - vim_free(qi); + qf_free_lists(qi); } } @@ -2097,8 +2151,7 @@ ll_free_all(qf_info_T **pqi) void qf_free_all(win_T *wp) { - int i; - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; if (wp != NULL) { @@ -2106,10 +2159,8 @@ qf_free_all(win_T *wp) ll_free_all(&wp->w_llist); ll_free_all(&wp->w_llist_ref); } - else - // quickfix list - for (i = 0; i < qi->qf_listcount; ++i) - qf_free(qf_get_list(qi, i)); + else if (qi != NULL) + qf_free_list_stack_items(qi); // quickfix list } /* @@ -2292,10 +2343,140 @@ qf_add_entry( } /* - * Allocate a new quickfix/location list stack + * Resize global quickfix stack to be able to hold n amount of lists. + * returns FAIL on failure and OK on success. + */ + int +qf_resize_quickfix_stack(int n) +{ + if (ql_info == NULL) + { + emsg(_(e_no_quickfix_stack)); + return FAIL; + } + + if (qf_resize_stack(ql_info, n) == FAIL) + return FAIL; + + return OK; +} + +/* + * Resize location list stack for window 'wp' to be able to + * hold n amount of lists. Returns FAIL on failure and OK on success + */ + int +ll_resize_stack(win_T *wp, int n) +{ + // check if current window is a location list window; + // if so then sync its 'lhistory' to the parent window or vice versa + if (IS_LL_WINDOW(curwin)) + qf_sync_llw_to_win(wp); + else + qf_sync_win_to_llw(wp); + + qf_info_T *qi = ll_get_or_alloc_list(wp); + + if (qf_resize_stack(qi, n) == FAIL) + return FAIL; + + return OK; +} + +/* + * Resize quickfix stack to be able to hold n amount of quickfix lists. + * Returns FAIL on failure and OK on success. + */ + static int +qf_resize_stack(qf_info_T *qi, int n) +{ + qf_list_T *new; + int amount_to_rm = 0, i; + size_t lsz = sizeof(*qi->qf_lists); + + if (n == qi->qf_maxcount) + return OK; + else if (n < qi->qf_maxcount && n < qi->qf_listcount) + { + // We have too many lists to store them all in the new stack, + // pop lists until we can fit them all in the newly resized stack + amount_to_rm = qi->qf_listcount - n; + + for (i = 0; i < amount_to_rm; i++) + qf_pop_stack(qi, TRUE); + } + + new = vim_realloc(qi->qf_lists, lsz * n); + + if (new == NULL) + return FAIL; + + // fill with zeroes any newly allocated memory + if (n > qi->qf_maxcount) + vim_memset(new + qi->qf_maxcount, 0, lsz * (n - qi->qf_maxcount)); + + qi->qf_lists = new; + qi->qf_maxcount = n; + + qf_update_buffer(qi, NULL); + + return OK; +} + +/* + * Initialize global quickfix list, should only be called once. + * Returns FAIL on failure and OK on success. + */ + int +qf_init_quickfix_stack(void) +{ + ql_info_actual.qf_lists = qf_alloc_list_stack(p_chi); + + if (ql_info_actual.qf_lists == NULL) + return FAIL; + + ql_info = &ql_info_actual; + ql_info->qfl_type = QFLT_QUICKFIX; + ql_info->qf_maxcount = p_chi; + return OK; +} + +/* + * Sync a location list window's 'lhistory' value to the parent window + */ + static void +qf_sync_llw_to_win(win_T *llw) +{ + win_T *wp = qf_find_win_with_loclist(llw->w_llist_ref); + + if (wp != NULL) + wp->w_p_lhi = llw->w_p_lhi; +} + +/* + * Sync a window's 'lhistory' value to its location list window, if any + */ + static void +qf_sync_win_to_llw(win_T *pwp) +{ + win_T *wp; + qf_info_T *llw = pwp->w_llist; + + if (llw != NULL) + FOR_ALL_WINDOWS(wp) + if (wp->w_llist_ref == llw && bt_quickfix(wp->w_buffer)) + { + wp->w_p_lhi = pwp->w_p_lhi; + return; + } +} + +/* + * Allocate a new quickfix/location list stack that is able to hold + * up to n amount of lists */ static qf_info_T * -qf_alloc_stack(qfltype_T qfltype) +qf_alloc_stack(qfltype_T qfltype, int n) { qf_info_T *qi; @@ -2306,9 +2487,31 @@ qf_alloc_stack(qfltype_T qfltype) qi->qf_refcount++; qi->qfl_type = qfltype; qi->qf_bufnr = INVALID_QFBUFNR; + + qi->qf_lists = qf_alloc_list_stack(n); + + if (qi->qf_lists == NULL) + { + vim_free(qi); + return NULL; + } + + qi->qf_maxcount = n; + return qi; } +/* + * Allocate memory for qf_lists member of qf_info_T struct. + * 'actual' is the actual amount of lists that have been allocated for + * (only set when function returns sucessfully) + */ + static qf_list_T * +qf_alloc_list_stack(int n) +{ + return ALLOC_CLEAR_MULT(qf_list_T, n); +} + /* * Return the location list stack for window 'wp'. * If not present, allocate a location list stack @@ -2325,7 +2528,9 @@ ll_get_or_alloc_list(win_T *wp) ll_free_all(&wp->w_llist_ref); if (wp->w_llist == NULL) - wp->w_llist = qf_alloc_stack(QFLT_LOCATION); // new location list + // new location list + wp->w_llist = qf_alloc_stack(QFLT_LOCATION, wp->w_p_lhi); + return wp->w_llist; } @@ -2338,7 +2543,7 @@ ll_get_or_alloc_list(win_T *wp) static qf_info_T * qf_cmd_get_stack(exarg_T *eap, int print_emsg) { - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; if (is_loclist_cmd(eap->cmdidx)) { @@ -2350,6 +2555,8 @@ qf_cmd_get_stack(exarg_T *eap, int print_emsg) return NULL; } } + if (qi == NULL && print_emsg) + emsg(_(e_no_quickfix_stack)); return qi; } @@ -2364,7 +2571,7 @@ qf_cmd_get_stack(exarg_T *eap, int print_emsg) static qf_info_T * qf_cmd_get_or_alloc_stack(exarg_T *eap, win_T **pwinp) { - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; if (is_loclist_cmd(eap->cmdidx)) { @@ -2494,9 +2701,12 @@ copy_loclist_stack(win_T *from, win_T *to) if (qi == NULL) // no location list to copy return; - // allocate a new location list - if ((to->w_llist = qf_alloc_stack(QFLT_LOCATION)) == NULL) + // allocate a new location list, set size of stack to 'from' window value + if ((to->w_llist = qf_alloc_stack(QFLT_LOCATION, from->w_p_lhi)) == NULL) return; + else + // set 'to' lhi to reflect new value + to->w_p_lhi = to->w_llist->qf_maxcount; to->w_llist->qf_listcount = qi->qf_listcount; @@ -2760,7 +2970,7 @@ qf_guess_filepath(qf_list_T *qfl, char_u *filename) static int qflist_valid(win_T *wp, int_u qf_id) { - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; int i; if (wp != NULL) @@ -2768,9 +2978,9 @@ qflist_valid(win_T *wp, int_u qf_id) if (!win_valid(wp)) return FALSE; qi = GET_LOC_LIST(wp); // Location list - if (qi == NULL) - return FALSE; } + if (qi == NULL) + return FALSE; for (i = 0; i < qi->qf_listcount; ++i) if (qi->qf_lists[i].qf_id == qf_id) @@ -3633,7 +3843,14 @@ qf_jump_newwin(qf_info_T *qi, int retval = OK; if (qi == NULL) - qi = &ql_info; + { + if (ql_info == NULL) + { + emsg(_(e_no_quickfix_stack)); + return; + } + qi = ql_info; + } if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi))) { @@ -4137,7 +4354,7 @@ qf_mark_adjust( int i; qfline_T *qfp; int idx; - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; int found_one = FALSE; int buf_has_flag = wp == NULL ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY; @@ -4149,6 +4366,8 @@ qf_mark_adjust( return; qi = wp->w_llist; } + else if (qi == NULL) + return; for (idx = 0; idx < qi->qf_listcount; ++idx) { @@ -4231,10 +4450,15 @@ qf_types(int c, int nr) void qf_view_result(int split) { - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; if (IS_LL_WINDOW(curwin)) qi = GET_LOC_LIST(curwin); + else if (qi == NULL) + { + emsg(_(e_no_quickfix_stack)); + return; + } if (qf_list_empty(qf_get_curlist(qi))) { @@ -4544,11 +4768,13 @@ ex_cbottom(exarg_T *eap) linenr_T qf_current_entry(win_T *wp) { - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; if (IS_LL_WINDOW(wp)) // In the location list window, use the referenced location list qi = wp->w_llist_ref; + else if (qi == NULL) + return 0; return qf_get_curlist(qi)->qf_index; } @@ -5230,7 +5456,7 @@ ex_make(exarg_T *eap) char_u *cmd; char_u *enc = NULL; win_T *wp = NULL; - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; int res; char_u *au_name = NULL; int_u save_qfid; @@ -5295,6 +5521,9 @@ ex_make(exarg_T *eap) if (qi == NULL) goto cleanup; } + else if (qi == NULL) + goto cleanup; + if (res >= 0) qf_list_changed(qf_get_curlist(qi)); @@ -5968,7 +6197,7 @@ ex_cfile(exarg_T *eap) { char_u *enc = NULL; win_T *wp = NULL; - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; char_u *au_name = NULL; int_u save_qfid = 0; // init for gcc int res; @@ -6025,6 +6254,11 @@ ex_cfile(exarg_T *eap) return; } } + else if (qi == NULL) + { + decr_quickfix_busy(); + return; + } if (res >= 0) qf_list_changed(qf_get_curlist(qi)); save_qfid = qf_get_curlist(qi)->qf_id; @@ -6953,13 +7187,12 @@ get_errorlist( if (qi == NULL) { - qi = &ql_info; + qi = ql_info; if (wp != NULL) - { qi = GET_LOC_LIST(wp); - if (qi == NULL) - return FAIL; - } + if (qi == NULL) + return FAIL; + } if (eidx < 0) @@ -7038,7 +7271,7 @@ qf_get_list_from_lines(dict_T *what, dictitem_T *di, dict_T *retdict) if (l == NULL) return FAIL; - qi = qf_alloc_stack(QFLT_INTERNAL); + qi = qf_alloc_stack(QFLT_INTERNAL, 1); if (qi != NULL) { if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, errorformat, @@ -7047,7 +7280,8 @@ qf_get_list_from_lines(dict_T *what, dictitem_T *di, dict_T *retdict) (void)get_errorlist(qi, NULL, 0, 0, l); qf_free(&qi->qf_lists[0]); } - free(qi); + + qf_free_lists(qi); } dict_add_list(retdict, "items", l); status = OK; @@ -7365,7 +7599,7 @@ qf_getprop_qftf(qf_list_T *qfl, dict_T *retdict) static int qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) { - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; qf_list_T *qfl; int status = OK; int qf_idx = INVALID_QFIDX; @@ -7378,6 +7612,8 @@ qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) if (wp != NULL) qi = GET_LOC_LIST(wp); + else if (qi == NULL) + return FAIL; flags = qf_getprop_keys2flags(what, (wp != NULL)); @@ -7993,7 +8229,7 @@ qf_free_stack(win_T *wp, qf_info_T *qi) { // If the location list window is open, then create a new empty // location list - qf_info_T *new_ll = qf_alloc_stack(QFLT_LOCATION); + qf_info_T *new_ll = qf_alloc_stack(QFLT_LOCATION, wp->w_p_lhi); if (new_ll != NULL) { @@ -8023,7 +8259,7 @@ set_errorlist( char_u *title, dict_T *what) { - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; int retval = OK; if (wp != NULL) @@ -8032,6 +8268,11 @@ set_errorlist( if (qi == NULL) return FAIL; } + else if (qi == NULL) + { + emsg(_(e_no_quickfix_stack)); + return FAIL; + } if (action == 'f') { @@ -8067,7 +8308,7 @@ set_errorlist( static int mark_quickfix_user_data(qf_info_T *qi, int copyID) { int abort = FALSE; - for (int i = 0; i < LISTCOUNT && !abort; ++i) + for (int i = 0; i < qi->qf_maxcount && !abort; ++i) { qf_list_T *qfl = &qi->qf_lists[i]; if (!qfl->qf_has_user_data) @@ -8097,7 +8338,7 @@ mark_quickfix_ctx(qf_info_T *qi, int copyID) typval_T *ctx; callback_T *cb; - for (i = 0; i < LISTCOUNT && !abort; ++i) + for (i = 0; i < qi->qf_maxcount && !abort; ++i) { ctx = qi->qf_lists[i].qf_ctx; if (ctx != NULL && ctx->v_type != VAR_NUMBER @@ -8122,11 +8363,14 @@ set_ref_in_quickfix(int copyID) tabpage_T *tp; win_T *win; - abort = mark_quickfix_ctx(&ql_info, copyID); + if (ql_info == NULL) + return TRUE; + + abort = mark_quickfix_ctx(ql_info, copyID); if (abort) return abort; - abort = mark_quickfix_user_data(&ql_info, copyID); + abort = mark_quickfix_user_data(ql_info, copyID); if (abort) return abort; @@ -8454,7 +8698,7 @@ hgr_get_ll(int *new_ll) if (qi == NULL) { // Allocate a new location list for help text matches - if ((qi = qf_alloc_stack(QFLT_LOCATION)) == NULL) + if ((qi = qf_alloc_stack(QFLT_LOCATION, 1)) == NULL) return NULL; *new_ll = TRUE; } @@ -8625,7 +8869,7 @@ ex_helpgrep(exarg_T *eap) regmatch_T regmatch; char_u *save_cpo; int save_cpo_allocated; - qf_info_T *qi = &ql_info; + qf_info_T *qi = ql_info; int new_qi = FALSE; char_u *au_name = NULL; char_u *lang = NULL; @@ -8652,6 +8896,11 @@ ex_helpgrep(exarg_T *eap) if (qi == NULL) return; } + else if (qi == NULL) + { + emsg(_(e_no_quickfix_stack)); + return; + } // Make 'cpoptions' empty, the 'l' flag should not be used here. save_cpo = p_cpo; diff --git a/src/structs.h b/src/structs.h index 0baf54383e..78f0a708a7 100644 --- a/src/structs.h +++ b/src/structs.h @@ -276,6 +276,8 @@ typedef struct #if defined(FEAT_QUICKFIX) int wo_pvw; # define w_p_pvw w_onebuf_opt.wo_pvw // 'previewwindow' + long wo_lhi; +# define w_p_lhi w_onebuf_opt.wo_lhi // 'lhistory' #endif #ifdef FEAT_RIGHTLEFT int wo_rl; diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim index 8842454624..4721477bf5 100644 --- a/src/testdir/gen_opt_test.vim +++ b/src/testdir/gen_opt_test.vim @@ -73,6 +73,7 @@ let test_values = { \ []], \ "\ number options + \ 'chistory': [[1, 2, 10, 50], [1000, -1]], \ 'cmdheight': [[1, 2, 10], [-1, 0]], \ 'cmdwinheight': [[1, 2, 10], [-1, 0]], \ 'columns': [[12, 80, 10000], [-1, 0, 10]], @@ -83,6 +84,7 @@ let test_values = { \ 'iminsert': [[0, 1, 2], [-1, 3, 999]], \ 'imsearch': [[-1, 0, 1, 2], [-2, 3, 999]], \ 'imstyle': [[0, 1], [-1, 2, 999]], + \ 'lhistory': [[1, 2, 10, 50], [1000, -1]], \ 'lines': [[2, 24, 1000], [-1, 0, 1]], \ 'linespace': [[-1, 0, 2, 4, 999], ['']], \ 'numberwidth': [[1, 4, 8, 10, 11, 20], [-1, 0, 21]], diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index 03fbbee711..54e3bb770e 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -43,6 +43,8 @@ func s:setup_commands(cchar) command! -count=1 -nargs=0 Xabove cabove command! -count=1 -nargs=0 Xbefore cbefore command! -count=1 -nargs=0 Xafter cafter + command! -nargs=1 Xsethist set chistory= + command! -nargs=0 Xsethistdefault set chistory& let g:Xgetlist = function('getqflist') let g:Xsetlist = function('setqflist') call setqflist([], 'f') @@ -80,6 +82,9 @@ func s:setup_commands(cchar) command! -count=1 -nargs=0 Xabove labove command! -count=1 -nargs=0 Xbefore lbefore command! -count=1 -nargs=0 Xafter lafter + command! -nargs=1 Xsethist set lhistory= + command! -nargs=1 Xsetlocalhist setlocal lhistory= + command! -nargs=0 Xsethistdefault set lhistory& let g:Xgetlist = function('getloclist', [0]) let g:Xsetlist = function('setloclist', [0]) call setloclist(0, [], 'f') @@ -6718,6 +6723,174 @@ func Test_hardlink_fname() call Xtest_hardlink_fname('l') endfunc +" Test for checking if correct number of tests are deleted +" and current list stays the same after setting Xhistory +" to a smaller number. Do roughly the same for growing the stack. +func Xtest_resize_list_stack(cchar) + call s:setup_commands(a:cchar) + Xsethist 100 + + for i in range(1, 100) + Xexpr string(i) + endfor + Xopen + call assert_equal(g:Xgetlist({'nr': '$'}).nr, 100) + call assert_equal("|| 100", getline(1)) + Xsethist 8 + call assert_equal("|| 100", getline(1)) + Xolder 5 + call assert_equal("|| 95", getline(1)) + Xsethist 6 + call assert_equal("|| 95", getline(1)) + Xsethist 1 + call assert_equal("|| 100", getline(1)) + + " grow array again + Xsethist 100 + for i in range(1, 99) + Xexpr string(i) + endfor + call assert_equal("|| 99", getline(1)) + Xolder 99 + call assert_equal("|| 100", getline(1)) + + Xsethistdefault +endfunc + +func Test_resize_list_stack() + call Xtest_resize_list_stack('c') + call Xtest_resize_list_stack('l') +endfunc + +" Test to check if order of lists is from +" oldest at the bottom to newest at the top +func Xtest_Xhistory_check_order(cchar) + + Xsethist 100 + + for i in range(1, 100) + Xexpr string(i) + endfor + + Xopen + for i in range(100, 1, -1) + let l:ret = assert_equal("|| " .. i, getline(1)) + + if ret == 1 || i == 1 + break + endif + Xolder + endfor + + for i in range(1, 50) + Xexpr string(i) + endfor + + for i in range(50, 1, -1) + let l:ret = assert_equal("|| " .. i, getline(1)) + + if ret == 1 || i == 50 + break + endif + Xolder + endfor + + for i in range(50, 1, -1) + let l:ret = assert_equal("|| " .. i, getline(1)) + + if ret == 1 || i == 50 + break + endif + Xolder + endfor + + Xsethistdefault +endfunc + +func Test_set_history_to_check_order() + call Xtest_Xhistory_check_order('c') + call Xtest_Xhistory_check_order('l') +endfunc + +" Check if 'lhistory' is the same between the location list window +" and associated normal window +func Test_win_and_loc_synced() + new + set lhistory=2 + lexpr "Text" + lopen + + " check if lhistory is synced when modified inside the + " location list window + setlocal lhistory=1 + wincmd k + call assert_equal(&lhistory, 1) + + " check if lhistory is synced when modified inside the + " normal window + setlocal lhistory=10 + lopen + call assert_equal(&lhistory, 10) + + wincmd k + lclose + wincmd q + + set lhistory& +endfunc + +" Test if setting the lhistory of one window doesn't affect the other +func Test_two_win_are_independent_of_history() + setlocal lhistory=10 + new + setlocal lhistory=20 + wincmd w + call assert_equal(&lhistory, 10) + wincmd w + wincmd q + + set lhistory& +endfunc + +" Test if lhistory is copied over to a new window +func Test_lhistory_copied_over() + setlocal lhistory=3 + split + call assert_equal(&lhistory, 3) + wincmd q + + set lhistory& +endfunc + +" Test if error occurs when given invalid history number +func Xtest_invalid_history_num(cchar) + call s:setup_commands(a:cchar) + + call assert_fails('Xsethist -10000', "E1542:") + call assert_fails('Xsethist 10000', "E1543:") + Xsethistdefault +endfunc + +func Test_invalid_history_num() + call Xtest_invalid_history_num('c') + call Xtest_invalid_history_num('l') +endfunc + +" Test if chistory and lhistory don't affect each other +func Test_chi_and_lhi_are_independent() + set chistory=100 + set lhistory=100 + + set chistory=10 + call assert_equal(&lhistory, 100) + + set lhistory=1 + call assert_equal(&chistory, 10) + + set chistory& + set lhistory& +endfunc + func Test_quickfix_close_buffer_crash() new lexpr 'test' | lopen diff --git a/src/version.c b/src/version.c index bab345d6df..6f9ae4bb47 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1283, /**/ 1282, /**/ From 9adb310cf34be232c8d71a93cabdf76b7f71a9cb Mon Sep 17 00:00:00 2001 From: 231tr0n Date: Sun, 6 Apr 2025 17:28:11 +0200 Subject: [PATCH 053/633] runtime(svelte): add matchit support to svelte filetype plugin closes: #17052 Signed-off-by: 231tr0n Signed-off-by: Christian Brabandt --- runtime/ftplugin/svelte.vim | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/runtime/ftplugin/svelte.vim b/runtime/ftplugin/svelte.vim index e0ec4e0ae3..5114de256c 100644 --- a/runtime/ftplugin/svelte.vim +++ b/runtime/ftplugin/svelte.vim @@ -1,13 +1,40 @@ " Vim filetype plugin " Language: svelte " Maintainer: Igor Lacerda -" Last Change: 2024 Jun 09 +" Last Change: 2025 Apr 06 if exists('b:did_ftplugin') finish endif let b:did_ftplugin = 1 -setl commentstring= +let s:cpo_sav = &cpo +set cpo&vim -let b:undo_ftplugin = 'setl cms<' +setlocal matchpairs+=<:> +setlocal commentstring= +setlocal comments=s: + +let b:undo_ftplugin = 'setlocal comments< commentstring< matchpairs<' + +if exists('&omnifunc') + setlocal omnifunc=htmlcomplete#CompleteTags + call htmlcomplete#DetectOmniFlavor() + let b:undo_ftplugin ..= " | setlocal omnifunc<" +endif + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_ignorecase = 1 + let b:match_words = '<:>,' . + \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' . + \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' . + \ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>,' . + \ '{#\(if\|each\)[^}]*}:{\:else[^}]*}:{\/\(if\|each\)},' . + \ '{#await[^}]*}:{\:then[^}]*}:{\:catch[^}]*}:{\/await},' . + \ '{#snippet[^}]*}:{\/snippet},' . + \ '{#key[^}]*}:{\/key}' + let b:html_set_match_words = 1 + let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words b:html_set_match_words" +endif +let &cpo = s:cpo_sav +unlet! s:cpo_sav From 9cd6d82fbb1693aff2878d851571aa0126b3cb38 Mon Sep 17 00:00:00 2001 From: Radu Dineiu Date: Sun, 6 Apr 2025 17:33:13 +0200 Subject: [PATCH 054/633] runtime(fstab): set formatoptions-=t in filetype plugin closes: #17020 Signed-off-by: Radu Dineiu Co-authored-by: Christian Brabandt --- runtime/ftplugin/fstab.vim | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/runtime/ftplugin/fstab.vim b/runtime/ftplugin/fstab.vim index 0e7ffda498..d340c4b8d5 100644 --- a/runtime/ftplugin/fstab.vim +++ b/runtime/ftplugin/fstab.vim @@ -2,9 +2,12 @@ " Language: fstab file " Maintainer: Radu Dineiu " URL: https://raw.github.com/rid9/vim-fstab/master/ftplugin/fstab.vim -" Last Change: 2021 Jan 02 -" 2024 May 23 by Riley Bruins ('commentstring') -" Version: 1.0 +" Last Change: 2025 Mar 31 +" Version: 1.0.1 +" +" Changelog: +" - 2024 May 23 by Riley Bruins ('commentstring') +" - 2025 Mar 31 added setlocal formatoptions-=t " " Credits: " Subhaditya Nath @@ -15,6 +18,8 @@ endif let b:did_ftplugin = 1 setlocal commentstring=#\ %s -let b:undo_ftplugin = "setlocal commentstring<" +setlocal formatoptions-=t + +let b:undo_ftplugin = "setlocal commentstring< formatoptions<" " vim: ts=8 ft=vim From 2afdb3a65bdeac1dba3070347d27659119f4b479 Mon Sep 17 00:00:00 2001 From: clach04 Date: Sun, 6 Apr 2025 17:37:12 +0200 Subject: [PATCH 055/633] runtime(doc): Fix minor typo in options.txt closes: #17060 Signed-off-by: clach04 Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 962a6e790f..7720769aec 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -2668,7 +2668,7 @@ A jump table for the options with a short description can be found at |Q_op|. *E1193* *E1194* *E1195* *E1196* *E1230* *E1197* *E1198* *E1199* *E1200* *E1201* xchacha20 XChaCha20 Cipher with Poly1305 Message Authentication - Code. Medium strong till strong encryption. + Code. Medium strong to strong encryption. Encryption is provided by the libsodium library, it requires Vim to be built with |+sodium|. It adds a seed and a message authentication code (MAC) From 00b927b295c11e61942d34f7e1c384f1c6af9513 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Sun, 6 Apr 2025 17:40:43 +0200 Subject: [PATCH 056/633] runtime(lua): improve foldexpr, add vim9 script version closes: #17049 Signed-off-by: Konfekt Signed-off-by: Christian Brabandt --- runtime/ftplugin/lua.vim | 130 +++++++++++++++++++++++++++------------ 1 file changed, 91 insertions(+), 39 deletions(-) diff --git a/runtime/ftplugin/lua.vim b/runtime/ftplugin/lua.vim index cc042c5dc4..87f54ddb6d 100644 --- a/runtime/ftplugin/lua.vim +++ b/runtime/ftplugin/lua.vim @@ -1,12 +1,13 @@ " Vim filetype plugin file. -" Language: Lua -" Maintainer: Doug Kearns -" Previous Maintainer: Max Ischenko -" Contributor: Dorai Sitaram -" C.D. MacEachern -" Tyler Miller -" Phạm Bình An -" Last Change: 2025 Feb 27 +" Language: Lua +" Maintainer: Doug Kearns +" Previous Maintainer: Max Ischenko +" Contributor: Dorai Sitaram +" C.D. MacEachern +" Tyler Miller +" Phạm Bình An +" @konfekt +" Last Change: 2025 Apr 04 if exists("b:did_ftplugin") finish @@ -41,11 +42,11 @@ let b:undo_ftplugin = "setl cms< com< def< fo< inc< inex< sua<" if exists("loaded_matchit") && !exists("b:match_words") let b:match_ignorecase = 0 let b:match_words = - \ '\<\%(do\|function\|if\)\>:' .. - \ '\<\%(return\|else\|elseif\)\>:' .. - \ '\,' .. - \ '\:\,' .. - \ '\%(--\)\=\[\(=*\)\[:]\1]' + \ '\<\%(do\|function\|if\)\>:' .. + \ '\<\%(return\|else\|elseif\)\>:' .. + \ '\,' .. + \ '\:\,' .. + \ '\%(--\)\=\[\(=*\)\[:]\1]' let b:undo_ftplugin ..= " | unlet! b:match_words b:match_ignorecase" endif @@ -61,7 +62,7 @@ endif if has("folding") && get(g:, "lua_folding", 0) setlocal foldmethod=expr - setlocal foldexpr=s:LuaFold(v:lnum) + setlocal foldexpr=s:LuaFold() let b:lua_lasttick = -1 let b:undo_ftplugin ..= " | setl foldexpr< foldmethod< | unlet! b:lua_lasttick b:lua_foldlists" endif @@ -87,19 +88,19 @@ function s:LuaInclude(fname) abort endfunction let s:patterns = [ - \ ['do', 'end'], - \ ['if\s+.+\s+then', 'end'], - \ ['repeat', 'until\s+.+'], - \ ['for\s+.+\s+do', 'end'], - \ ['while\s+.+\s+do', 'end'], - \ ['function.+', 'end'], - \ ['return\s+function.+', 'end'], - \ ['local\s+function\s+.+', 'end'], - \ ] - -function s:LuaFold(lnum) abort + \ ['do', 'end'], + \ ['if\s+.+\s+then', 'end'], + \ ['repeat', 'until\s+.+'], + \ ['for\s+.+\s+do', 'end'], + \ ['while\s+.+\s+do', 'end'], + \ ['function.+', 'end'], + \ ['return\s+function.+', 'end'], + \ ['local\s+function\s+.+', 'end'], + \ ] + +function s:LuaFold() abort if b:lua_lasttick == b:changedtick - return b:lua_foldlists[a:lnum - 1] + return b:lua_foldlists[v:lnum - 1] endif let b:lua_lasttick = b:changedtick @@ -108,27 +109,78 @@ function s:LuaFold(lnum) abort let buf = getline(1, "$") for line in buf for t in s:patterns + let open = 0 + let end = 0 let tagopen = '\v^\s*' .. t[0] ..'\s*$' - let tagclose = '\v^\s*' .. t[1] ..'\s*$' + let tagend = '\v^\s*' .. t[1] ..'\s*$' if line =~# tagopen - call add(foldlist, t) - break - elseif line =~# tagclose - if len(foldlist) > 0 && line =~# foldlist[-1][1] - call remove(foldlist, -1) - else - let foldlist = [] - endif - break + call add(foldlist, t) + let open = 1 + break + elseif line =~# tagend + if len(foldlist) > 0 && line =~# foldlist[-1][1] + call remove(foldlist, -1) + let end = 1 + else + let foldlist = [] + endif + break endif endfor - call add(b:lua_foldlists, len(foldlist)) + let prefix = "" + if open == 1 | let prefix = ">" | endif + if end == 1 | let prefix = "<" | endif + let b:lua_foldlists += [prefix..(len(foldlist) + end)] endfor - return lua_foldlists[a:lnum - 1] + return b:lua_foldlists[v:lnum - 1] endfunction +if !has('vim9script') + let &cpo = s:cpo_save + unlet s:cpo_save + + finish +endif + +delfunction! s:LuaFold +def s:LuaFold(): string + if b:lua_lasttick == b:changedtick + return b:lua_foldlists[v:lnum - 1] + endif + b:lua_lasttick = b:changedtick + + b:lua_foldlists = [] + var foldlist = [] + var buf = getline(1, "$") + for line in buf + var open = 0 + var end = 0 + for t in patterns + var tagopen = '\v^\s*' .. t[0] .. '\s*$' + var tagend = '\v^\s*' .. t[1] .. '\s*$' + if line =~# tagopen + add(foldlist, t) + open = 1 + break + elseif line =~# tagend + if len(foldlist) > 0 && line =~# foldlist[-1][1] + end = 1 + remove(foldlist, -1) + else + foldlist = [] + endif + break + endif + endfor + var prefix = "" + if open == 1 | prefix = ">" | endif + if end == 1 | prefix = "<" | endif + b:lua_foldlists += [prefix .. (len(foldlist) + end)] + endfor + return b:lua_foldlists[v:lnum - 1] +enddef + let &cpo = s:cpo_save unlet s:cpo_save - " vim: nowrap sw=2 sts=2 ts=8 noet: From 2ffb4d0298426f6c57f3ec3caae4480024e4372d Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Mon, 7 Apr 2025 14:07:28 +0200 Subject: [PATCH 057/633] runtime(lua): fix whitespace style issues in lua ftplugin related: #17049 Signed-off-by: Christian Brabandt --- runtime/ftplugin/lua.vim | 88 ++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/runtime/ftplugin/lua.vim b/runtime/ftplugin/lua.vim index 87f54ddb6d..33471cc64e 100644 --- a/runtime/ftplugin/lua.vim +++ b/runtime/ftplugin/lua.vim @@ -1,13 +1,14 @@ " Vim filetype plugin file. -" Language: Lua -" Maintainer: Doug Kearns -" Previous Maintainer: Max Ischenko -" Contributor: Dorai Sitaram -" C.D. MacEachern -" Tyler Miller -" Phạm Bình An -" @konfekt -" Last Change: 2025 Apr 04 + +" Language: Lua +" Maintainer: Doug Kearns +" Previous Maintainer: Max Ischenko +" Contributor: Dorai Sitaram +" C.D. MacEachern +" Tyler Miller +" Phạm Bình An +" @konfekt +" Last Change: 2025 Apr 04 if exists("b:did_ftplugin") finish @@ -42,11 +43,11 @@ let b:undo_ftplugin = "setl cms< com< def< fo< inc< inex< sua<" if exists("loaded_matchit") && !exists("b:match_words") let b:match_ignorecase = 0 let b:match_words = - \ '\<\%(do\|function\|if\)\>:' .. - \ '\<\%(return\|else\|elseif\)\>:' .. - \ '\,' .. - \ '\:\,' .. - \ '\%(--\)\=\[\(=*\)\[:]\1]' + \ '\<\%(do\|function\|if\)\>:' .. + \ '\<\%(return\|else\|elseif\)\>:' .. + \ '\,' .. + \ '\:\,' .. + \ '\%(--\)\=\[\(=*\)\[:]\1]' let b:undo_ftplugin ..= " | unlet! b:match_words b:match_ignorecase" endif @@ -88,15 +89,15 @@ function s:LuaInclude(fname) abort endfunction let s:patterns = [ - \ ['do', 'end'], - \ ['if\s+.+\s+then', 'end'], - \ ['repeat', 'until\s+.+'], - \ ['for\s+.+\s+do', 'end'], - \ ['while\s+.+\s+do', 'end'], - \ ['function.+', 'end'], - \ ['return\s+function.+', 'end'], - \ ['local\s+function\s+.+', 'end'], - \ ] + \ ['do', 'end'], + \ ['if\s+.+\s+then', 'end'], + \ ['repeat', 'until\s+.+'], + \ ['for\s+.+\s+do', 'end'], + \ ['while\s+.+\s+do', 'end'], + \ ['function.+', 'end'], + \ ['return\s+function.+', 'end'], + \ ['local\s+function\s+.+', 'end'], + \ ] function s:LuaFold() abort if b:lua_lasttick == b:changedtick @@ -114,17 +115,17 @@ function s:LuaFold() abort let tagopen = '\v^\s*' .. t[0] ..'\s*$' let tagend = '\v^\s*' .. t[1] ..'\s*$' if line =~# tagopen - call add(foldlist, t) - let open = 1 - break + call add(foldlist, t) + let open = 1 + break elseif line =~# tagend - if len(foldlist) > 0 && line =~# foldlist[-1][1] - call remove(foldlist, -1) - let end = 1 - else - let foldlist = [] - endif - break + if len(foldlist) > 0 && line =~# foldlist[-1][1] + call remove(foldlist, -1) + let end = 1 + else + let foldlist = [] + endif + break endif endfor let prefix = "" @@ -160,17 +161,17 @@ def s:LuaFold(): string var tagopen = '\v^\s*' .. t[0] .. '\s*$' var tagend = '\v^\s*' .. t[1] .. '\s*$' if line =~# tagopen - add(foldlist, t) - open = 1 - break + add(foldlist, t) + open = 1 + break elseif line =~# tagend - if len(foldlist) > 0 && line =~# foldlist[-1][1] - end = 1 - remove(foldlist, -1) - else - foldlist = [] - endif - break + if len(foldlist) > 0 && line =~# foldlist[-1][1] + end = 1 + remove(foldlist, -1) + else + foldlist = [] + endif + break endif endfor var prefix = "" @@ -183,4 +184,5 @@ enddef let &cpo = s:cpo_save unlet s:cpo_save + " vim: nowrap sw=2 sts=2 ts=8 noet: From b87620466c6500fb37fd9be1016a27fa9626749a Mon Sep 17 00:00:00 2001 From: glepnir Date: Mon, 7 Apr 2025 20:57:14 +0200 Subject: [PATCH 058/633] patch 9.1.1284: not possible to configure pum truncation char Problem: not possible to configure the completion menu truncation character Solution: add the "trunc" suboption to the 'fillchars' setting to configure the truncation indicator (glepnir). closes: #17006 Co-authored-by: zeertzjq Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 17 +- runtime/doc/version9.txt | 9 +- runtime/optwin.vim | 4 +- src/popupmenu.c | 173 +++++++++--------- src/screen.c | 13 +- src/structs.h | 1 + src/testdir/dumps/Test_pum_maxwidth_02.dump | 4 +- src/testdir/dumps/Test_pum_maxwidth_03.dump | 4 +- src/testdir/dumps/Test_pum_maxwidth_04.dump | 4 +- src/testdir/dumps/Test_pum_maxwidth_05.dump | 18 +- src/testdir/dumps/Test_pum_maxwidth_06.dump | 8 +- src/testdir/dumps/Test_pum_maxwidth_07.dump | 16 +- src/testdir/dumps/Test_pum_maxwidth_08.dump | 16 +- src/testdir/dumps/Test_pum_maxwidth_09.dump | 18 +- src/testdir/dumps/Test_pum_maxwidth_10.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_11.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_12.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_13.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_14.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_15.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_16.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_17.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_18.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_19.dump | 8 + src/testdir/dumps/Test_pum_maxwidth_20.dump | 8 + .../Test_pum_maxwidth_with_many_items_01.dump | 8 - .../Test_pum_maxwidth_with_many_items_02.dump | 8 - .../Test_pum_maxwidth_with_many_items_03.dump | 8 - .../Test_pum_maxwidth_with_many_items_04.dump | 8 - .../Test_pum_maxwidth_with_many_items_05.dump | 8 - .../Test_pum_maxwidth_with_many_items_06.dump | 8 - .../Test_pum_maxwidth_with_many_items_07.dump | 8 - .../Test_pum_maxwidth_with_many_items_08.dump | 8 - src/testdir/gen_opt_test.vim | 5 +- src/testdir/test_popup.vim | 136 ++++++++------ src/version.c | 2 + 36 files changed, 333 insertions(+), 267 deletions(-) create mode 100644 src/testdir/dumps/Test_pum_maxwidth_10.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_11.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_12.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_13.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_14.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_15.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_16.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_17.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_18.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_19.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_20.dump delete mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_01.dump delete mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_02.dump delete mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_03.dump delete mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_04.dump delete mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_05.dump delete mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_06.dump delete mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_07.dump delete mode 100644 src/testdir/dumps/Test_pum_maxwidth_with_many_items_08.dump diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 7720769aec..f90a335d60 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 06 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 07 VIM REFERENCE MANUAL by Bram Moolenaar @@ -3603,8 +3603,8 @@ A jump table for the options with a short description can be found at |Q_op|. *'fillchars'* *'fcs'* 'fillchars' 'fcs' string (default "vert:|,fold:-,eob:~,lastline:@") global or local to window |global-local| - Characters to fill the statuslines, vertical separators and special - lines in the window. + Characters to fill the statuslines, vertical separators, special + lines in the window and truncated text in the |ins-completion-menu|. It is a comma-separated list of items. Each item has a name, a colon and the value of that item: |E1511| @@ -3619,6 +3619,8 @@ A jump table for the options with a short description can be found at |Q_op|. diff '-' deleted lines of the 'diff' option eob '~' empty lines below the end of a buffer lastline '@' 'display' contains lastline/truncate + trunc '>' truncated text in the + |ins-completion-menu|. Any one that is omitted will fall back to the default. @@ -3635,9 +3637,14 @@ A jump table for the options with a short description can be found at |Q_op|. stlnc StatusLineNC |hl-StatusLineNC| vert VertSplit |hl-VertSplit| fold Folded |hl-Folded| + foldopen FoldColumn |hl-FoldColumn| + foldclose FoldColumn |hl-FoldColumn| + foldsep FoldColumn |hl-FoldColumn| diff DiffDelete |hl-DiffDelete| eob EndOfBuffer |hl-EndOfBuffer| lastline NonText |hl-NonText| + trunc one of the many Popup menu highlighting groups like + |hl-PmenuSel| *'findfunc'* *'ffu'* *E1514* 'findfunc' 'ffu' string (default empty) @@ -6513,7 +6520,9 @@ A jump table for the options with a short description can be found at |Q_op|. Determines the maximum width to use for the popup menu for completion. When zero, there is no maximum width limit, otherwise the popup menu will never be wider than this value. Truncated text will be indicated - by "..." at the end. Takes precedence over 'pumwidth'. + by "trunc" value of 'fillchars' option. + + This option takes precedence over 'pumwidth'. |ins-completion-menu|. *'pumwidth'* *'pw'* diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 48d0941193..646f130f25 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Apr 06 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 07 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41613,7 +41613,7 @@ Completion: ~ - New option value for 'completeopt': "nosort" - do not sort completion results "preinsert" - highlight to be inserted values -- handle multi-line completion as expected +- handle multi-line completion items as expected - improved commandline completion for the |:hi| command - New option value for 'wildmode': "noselect" - do not auto select an entry in the wildmenu @@ -41629,7 +41629,8 @@ Options: ~ - 'rulerformat' now supports the |stl-%!| item - use 'smoothscroll' logic for CTRL-F / CTRL-B for pagewise scrolling and CTRL-D / CTRL-U for half-pagewise scrolling -- 'pummaxwidth' maximum width for the completion popup menu +- New option value for 'fillchars': + "trunc" - configure truncation indicator, 'pummaxwidth' Ex commands: ~ - allow to specify a priority when defining a new sign |:sign-define| @@ -41734,11 +41735,11 @@ Options: ~ |ins-completion| modes 'completeitemalign' Order of |complete-items| in Insert mode completion popup +'completemaxwidth' maximum width for the completion popup menu 'eventignorewin' autocommand events that are ignored in a window 'findfunc' Vim function to obtain the results for a |:find| command 'lhistory' Size of the location list stack |quickfix-stack|. -'completefuzzycollect' Enable fuzzy collection of candiates for (some) 'messagesopt' configure |:messages| and |hit-enter| prompt 'winfixbuf' Keep buffer focused in a window 'tabclose' Which tab page to focus after closing a tab page diff --git a/runtime/optwin.vim b/runtime/optwin.vim index 05ea6a230e..c5e77afd78 100644 --- a/runtime/optwin.vim +++ b/runtime/optwin.vim @@ -1,7 +1,7 @@ " These commands create the option window. " " Maintainer: The Vim Project -" Last Change: 2025 Apr 06 +" Last Change: 2025 Apr 07 " Former Maintainer: Bram Moolenaar " If there already is an option window, jump to that one. @@ -371,7 +371,7 @@ call AddOption("sidescrolloff", gettext("minimal number of columns to keep call append("$", " \tset siso=" . &siso) call AddOption("display", gettext("include \"lastline\" to show the last line even if it doesn't fit\ninclude \"uhex\" to show unprintable characters as a hex number")) call OptionG("dy", &dy) -call AddOption("fillchars", gettext("characters to use for the status line, folds and filler lines")) +call AddOption("fillchars", gettext("characters to use for the status line, folds, diffs, buffer text, filler lines and truncation in the completion menu")) call OptionG("fcs", &fcs) call AddOption("cmdheight", gettext("number of lines used for the command-line")) call append("$", " \tset ch=" . &ch) diff --git a/src/popupmenu.c b/src/popupmenu.c index 294823bafe..556c2c350f 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -604,13 +604,10 @@ pum_redraw(void) int last_isabbr = FALSE; int orig_attr = -1; int scroll_range = pum_size - pum_height; - int need_ellipsis = FALSE; - int char_cells = 0; - int ellipsis_width = 3; - int over_cell = 0; char_u *new_str = NULL; - int kept_len = 0; - char_u *last_char = NULL; + char_u *ptr = NULL; + int remaining = 0; + int fcs_trunc = curwin->w_fill_chars.trunc; hlf_T hlfsNorm[3]; hlf_T hlfsSel[3]; @@ -727,14 +724,8 @@ pum_redraw(void) { char_u *rt_start = rt; int cells; - int used_cells = 0; - char_u *old_rt = NULL; - char_u *orig_rt = NULL; - - cells = mb_string2cells(rt, -1); - need_ellipsis = p_pmw > ellipsis_width - && pum_width == p_pmw - && cells > pum_width; + + cells = mb_string2cells(rt , -1); if (cells > pum_width) { do @@ -744,42 +735,7 @@ pum_redraw(void) MB_PTR_ADV(rt); } while (cells > pum_width); - if (need_ellipsis) - { - orig_rt = rt; - while (*orig_rt != NUL) - { - char_cells = has_mbyte ? (*mb_ptr2cells)(orig_rt) : 1; - if (used_cells + char_cells > ellipsis_width) - break; - used_cells += char_cells; - MB_PTR_ADV(orig_rt); - last_char = orig_rt; - } - - if (last_char != NULL) - { - if (used_cells < ellipsis_width) - { - over_cell = ellipsis_width - used_cells; - MB_PTR_ADV(orig_rt); - last_char = orig_rt; - } - kept_len = (int)STRLEN(last_char); - new_str = alloc(ellipsis_width + over_cell + kept_len + 1); - if (!new_str) - return; - vim_memset(new_str, '.', ellipsis_width); - if (over_cell > 0) - vim_memset(new_str + ellipsis_width, ' ', over_cell); - memcpy(new_str + ellipsis_width + over_cell, last_char, kept_len); - new_str[ellipsis_width + kept_len + over_cell] = NUL; - old_rt = rt_start; - rt = rt_start = new_str; - vim_free(old_rt); - } - } - else if (cells < pum_width) + if (cells < pum_width) { // Most left character requires 2-cells // but only 1 cell is available on @@ -790,6 +746,50 @@ pum_redraw(void) } } + // truncated + if (pum_width == p_pmw + && totwidth + 1 + cells >= pum_width) + { + char_u *orig_rt = rt; + char_u *old_rt = NULL; + int over_cell = 0; + int size = 0; + + remaining = pum_width - totwidth - 1; + cells = mb_string2cells(rt, -1); + if (cells > remaining) + { + while (cells > remaining) + { + MB_PTR_ADV(orig_rt); + cells -= has_mbyte ? (*mb_ptr2cells)(orig_rt) : 1; + } + } + size = (int)STRLEN(orig_rt); + if (cells < remaining) + over_cell = remaining - cells; + new_str = alloc(size + over_cell + 1 + utf_char2len(fcs_trunc)); + if (!new_str) + return; + ptr = new_str; + if (fcs_trunc != NUL && fcs_trunc != '>') + ptr += (*mb_char2bytes)(fcs_trunc, ptr); + else + *ptr++ = '<'; + if (over_cell) + { + vim_memset(ptr, ' ', over_cell); + ptr += over_cell; + } + memcpy(ptr, orig_rt, size); + ptr[size] = NUL; + old_rt = rt_start; + rt = rt_start = new_str; + vim_free(old_rt); + cells = mb_string2cells(rt, -1); + width = cells; + } + if (attrs == NULL) screen_puts_len(rt, (int)STRLEN(rt), row, col - cells + 1, attr); @@ -809,13 +809,10 @@ pum_redraw(void) { if (st != NULL) { - int size = (int)STRLEN(st); - int cells = (*mb_string2cells)(st, size); - int used_cells = 0; - char_u *st_end = NULL; - need_ellipsis = p_pmw > ellipsis_width - && pum_width == p_pmw - && col + cells > pum_col + pum_width; + int size = (int)STRLEN(st); + int cells = (*mb_string2cells)(st, size); + char_u *st_end = NULL; + int over_cell = 0; // only draw the text that fits while (size > 0 @@ -831,40 +828,46 @@ pum_redraw(void) --cells; } - // Add '...' indicator if truncated due to p_pmw - if (need_ellipsis) + // truncated + if (pum_width == p_pmw + && totwidth + 1 + cells >= pum_width) { - st_end = st + size; - while (st_end > st) - { - char_cells = has_mbyte ? (*mb_ptr2cells)(st_end) : 1; - if (used_cells + char_cells > ellipsis_width) - break; - used_cells += char_cells; - MB_PTR_BACK(st, st_end); - last_char = st_end; - } - - if (last_char != NULL && st_end > st) + remaining = pum_width - totwidth - 1; + if (cells > remaining) { - if (used_cells < ellipsis_width) + st_end = st + size; + while (st_end > st && cells > remaining) { MB_PTR_BACK(st, st_end); - last_char = st_end; - over_cell = ellipsis_width - used_cells; + cells -= has_mbyte ? (*mb_ptr2cells)(st_end) : 1; } - kept_len = last_char - st; - new_str = alloc(ellipsis_width + over_cell + kept_len + 1); - if (!new_str) - return; - memcpy(new_str, st, kept_len); - if (over_cell > 0) - vim_memset(new_str + kept_len, ' ', over_cell); - vim_memset(new_str + kept_len + over_cell, '.', ellipsis_width); - new_str[kept_len + ellipsis_width + over_cell] = NUL; - vim_free(st); - st = new_str; + size = st_end - st; } + + if (cells < remaining) + over_cell = remaining - cells; + new_str = alloc(size + over_cell + 1 + utf_char2len(fcs_trunc)); + if (!new_str) + return; + memcpy(new_str, st, size); + ptr = new_str + size; + if (over_cell > 0) + { + vim_memset(ptr, ' ', over_cell); + ptr += over_cell; + } + + if (fcs_trunc != NUL) + ptr += (*mb_char2bytes)(fcs_trunc, ptr); + else + *ptr++ = '>'; + + *ptr = NUL; + vim_free(st); + st = new_str; + cells = mb_string2cells(st, -1); + size = (int)STRLEN(st); + width = cells; } if (attrs == NULL) diff --git a/src/screen.c b/src/screen.c index b8a9c48058..9a5927abeb 100644 --- a/src/screen.c +++ b/src/screen.c @@ -4712,7 +4712,8 @@ static struct charstab filltab[] = CHARSTAB_ENTRY(&fill_chars.foldsep, "foldsep"), CHARSTAB_ENTRY(&fill_chars.diff, "diff"), CHARSTAB_ENTRY(&fill_chars.eob, "eob"), - CHARSTAB_ENTRY(&fill_chars.lastline, "lastline") + CHARSTAB_ENTRY(&fill_chars.lastline, "lastline"), + CHARSTAB_ENTRY(&fill_chars.trunc, "trunc"), }; static lcs_chars_T lcs_chars; static struct charstab lcstab[] = @@ -4826,6 +4827,7 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, fill_chars.diff = '-'; fill_chars.eob = '~'; fill_chars.lastline = '@'; + fill_chars.trunc = '>'; } } p = value; @@ -4837,6 +4839,7 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, continue; s = p + tab[i].name.length + 1; + if (is_listchars && STRCMP(tab[i].name.string, "multispace") == 0) { if (round == 0) @@ -4858,7 +4861,6 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, return field_value_err(errbuf, errbuflen, e_wrong_number_of_characters_for_field_str, tab[i].name.string); - p = s; } else { @@ -4870,8 +4872,8 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, if (p == last_multispace && lcs_chars.multispace != NULL) lcs_chars.multispace[multispace_pos++] = c1; } - p = s; } + p = s; break; } @@ -4879,7 +4881,7 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, { if (round == 0) { - // get length of lcs-leadmultispace string in first + // Get length of lcs-leadmultispace string in first // round last_lmultispace = p; lead_multispace_len = 0; @@ -4897,7 +4899,6 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, return field_value_err(errbuf, errbuflen, e_wrong_number_of_characters_for_field_str, tab[i].name.string); - p = s; } else { @@ -4909,8 +4910,8 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, if (p == last_lmultispace && lcs_chars.leadmultispace != NULL) lcs_chars.leadmultispace[multispace_pos++] = c1; } - p = s; } + p = s; break; } diff --git a/src/structs.h b/src/structs.h index 78f0a708a7..9b44598ac8 100644 --- a/src/structs.h +++ b/src/structs.h @@ -3850,6 +3850,7 @@ typedef struct int diff; int eob; int lastline; + int trunc; } fill_chars_T; /* diff --git a/src/testdir/dumps/Test_pum_maxwidth_02.dump b/src/testdir/dumps/Test_pum_maxwidth_02.dump index 427ea9f64b..17e77e54f1 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_02.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_02.dump @@ -1,8 +1,8 @@ |1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @43 |1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @43 @12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a> @31 -|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|.@2| +0#4040ff13#ffffff0@52 -|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|.@2| +0#4040ff13#ffffff0@52 +|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|8|9|>| +0#4040ff13#ffffff0@52 +|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|8|9|>| +0#4040ff13#ffffff0@52 |~| @73 |~| @73 |~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_03.dump b/src/testdir/dumps/Test_pum_maxwidth_03.dump index e30310827d..906e5950b1 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_03.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_03.dump @@ -1,8 +1,8 @@ |1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @43 |1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @43 @12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a> @31 -|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|.@2| +0#4040ff13#ffffff0@42 -|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|.@2| +0#4040ff13#ffffff0@42 +|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|>| +0#4040ff13#ffffff0@42 +|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|>| +0#4040ff13#ffffff0@42 |~| @73 |~| @73 |~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_04.dump b/src/testdir/dumps/Test_pum_maxwidth_04.dump index a6d257ec11..72d0c5ac64 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_04.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_04.dump @@ -1,8 +1,8 @@ |1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @43 |1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @43 @12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a> @31 -|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|.@2| +0#4040ff13#ffffff0@54 -|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|.@2| +0#4040ff13#ffffff0@54 +|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|>| +0#4040ff13#ffffff0@54 +|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|>| +0#4040ff13#ffffff0@54 |~| @73 |~| @73 |~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_05.dump b/src/testdir/dumps/Test_pum_maxwidth_05.dump index b5765bc035..6fb50819d6 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_05.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_05.dump @@ -1,8 +1,10 @@ -|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 -|1+0#0000001#e0e0e08|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_| | +0#4040ff13#ffffff0@43 -|一*0#0000001#ffd7ff255|二|三|四|五|六|七|八|九|十| +&@10| +0#4040ff13#ffffff0@43 -|a+0#0000001#ffd7ff255|b|c|d|e|f|g|h|i|j| @20| +0#4040ff13#ffffff0@43 -|上*0#0000001#ffd7ff255|下|左|右| +&@22| +0#4040ff13#ffffff0@43 -|~| @73 -|~| @73 -|~| @73 +|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| +|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| +@12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_ +|1|2|3|4|5|6|7|8|9|_|a> @20 +|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|>| +0#4040ff13#ffffff0@11 +|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|>| +0#4040ff13#ffffff0@11 +|~| @30 +|~| @30 +|~| @30 +|-+2#0000000&@1| |m+0#00e0003&|a|t|c|h| |1| |o|f| |2| +0#0000000&@16 diff --git a/src/testdir/dumps/Test_pum_maxwidth_06.dump b/src/testdir/dumps/Test_pum_maxwidth_06.dump index abc6bdf22b..b5765bc035 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_06.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_06.dump @@ -1,8 +1,8 @@ |1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 -|1+0#0000001#e0e0e08|2|3|4|5|6|7|.@2| +0#4040ff13#ffffff0@64 -|一*0#0000001#ffd7ff255|二|三| +&|.@2| +0#4040ff13#ffffff0@64 -|a+0#0000001#ffd7ff255|b|c|d|e|f|g|h|i|j| +0#4040ff13#ffffff0@64 -|上*0#0000001#ffd7ff255|下|左|右| +&@1| +0#4040ff13#ffffff0@64 +|1+0#0000001#e0e0e08|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_| | +0#4040ff13#ffffff0@43 +|一*0#0000001#ffd7ff255|二|三|四|五|六|七|八|九|十| +&@10| +0#4040ff13#ffffff0@43 +|a+0#0000001#ffd7ff255|b|c|d|e|f|g|h|i|j| @20| +0#4040ff13#ffffff0@43 +|上*0#0000001#ffd7ff255|下|左|右| +&@22| +0#4040ff13#ffffff0@43 |~| @73 |~| @73 |~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_07.dump b/src/testdir/dumps/Test_pum_maxwidth_07.dump index acdaa39dbc..ada8acb0d9 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_07.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_07.dump @@ -1,8 +1,8 @@ -| +0&#ffffff0@43> |_|9|8|7|6|5|4|3|2|1|_|9|8|7|6|5|4|3|2|1|_|9|8|7|6|5|4|3|2|1 -| +0#4040ff13&@64|.+0#0000001#e0e0e08@2|7|6|5|4|3|2|1 -| +0#4040ff13#ffffff0@64|.+0#0000001#ffd7ff255@2| |三*&|二|一 -| +0#4040ff13#ffffff0@64|j+0#0000001#ffd7ff255|i|h|g|f|e|d|c|b|a -| +0#4040ff13#ffffff0@64| +0#0000001#ffd7ff255@1|右*&|左|下|上 -| +0#4040ff13#ffffff0@73|~ -| @73|~ -| @73|~ +|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 +|1+0#0000001#e0e0e08|2|3|4|5|6|7|8|9|>| +0#4040ff13#ffffff0@64 +|一*0#0000001#ffd7ff255|二|三|四| +&|>| +0#4040ff13#ffffff0@64 +|a+0#0000001#ffd7ff255|b|c|d|e|f|g|h|i|>| +0#4040ff13#ffffff0@64 +|上*0#0000001#ffd7ff255|下|左|右| +&@1| +0#4040ff13#ffffff0@64 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_08.dump b/src/testdir/dumps/Test_pum_maxwidth_08.dump index 3c6ae5124e..aa41b76d1e 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_08.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_08.dump @@ -1,8 +1,8 @@ -|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 -|1+0#0000001#e0e0e08|2| +0#4040ff13#ffffff0@72 -|一*0#0000001#ffd7ff255| +0#4040ff13#ffffff0@72 -|a+0#0000001#ffd7ff255|b| +0#4040ff13#ffffff0@72 -|上*0#0000001#ffd7ff255| +0#4040ff13#ffffff0@72 -|~| @73 -|~| @73 -|~| @73 +| +0&#ffffff0@43> |_|9|8|7|6|5|4|3|2|1|_|9|8|7|6|5|4|3|2|1|_|9|8|7|6|5|4|3|2|1 +| +0#4040ff13&@64|<+0#0000001#e0e0e08|9|8|7|6|5|4|3|2|1 +| +0#4040ff13#ffffff0@64|<+0#0000001#ffd7ff255| |四*&|三|二|一 +| +0#4040ff13#ffffff0@64|<+0#0000001#ffd7ff255|i|h|g|f|e|d|c|b|a +| +0#4040ff13#ffffff0@64| +0#0000001#ffd7ff255@1|右*&|左|下|上 +| +0#4040ff13#ffffff0@73|~ +| @73|~ +| @73|~ diff --git a/src/testdir/dumps/Test_pum_maxwidth_09.dump b/src/testdir/dumps/Test_pum_maxwidth_09.dump index f46d0aab34..fd71673bf6 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_09.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_09.dump @@ -1,10 +1,8 @@ -|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| -|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| -@12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_ -|1|2|3|4|5|6|7|8|9|_|a> @20 -|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|.@2| +0#4040ff13#ffffff0@11 -|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|.@2| +0#4040ff13#ffffff0@11 -|~| @30 -|~| @30 -|~| @30 -|-+2#0000000&@1| |m+0#00e0003&|a|t|c|h| |1| |o|f| |2| +0#0000000&@16 +|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 +|1+0#0000001#e0e0e08|>| +0#4040ff13#ffffff0@72 +| +0#0000001#ffd7ff255|>| +0#4040ff13#ffffff0@72 +|a+0#0000001#ffd7ff255|>| +0#4040ff13#ffffff0@72 +| +0#0000001#ffd7ff255|>| +0#4040ff13#ffffff0@72 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_10.dump b/src/testdir/dumps/Test_pum_maxwidth_10.dump new file mode 100644 index 0000000000..bf47664c0c --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_10.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|>| +0#4040ff13#ffffff0@60 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|>| +0#4040ff13#ffffff0@60 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|>| +0#4040ff13#ffffff0@60 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_11.dump b/src/testdir/dumps/Test_pum_maxwidth_11.dump new file mode 100644 index 0000000000..21d0f02da7 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_11.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|…| +0#4040ff13#ffffff0@60 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|…| +0#4040ff13#ffffff0@60 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|…| +0#4040ff13#ffffff0@60 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_12.dump b/src/testdir/dumps/Test_pum_maxwidth_12.dump new file mode 100644 index 0000000000..6168fd8d4f --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_12.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| @7|f|o|…| +0#4040ff13#ffffff0@60 +|b+0#0000001#ffd7ff255|a|r| @7|一*&|…+&| +0#4040ff13#ffffff0@60 +|一*0#0000001#ffd7ff255|二|三|四|五| +&|m|u|…| +0#4040ff13#ffffff0@60 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_13.dump b/src/testdir/dumps/Test_pum_maxwidth_13.dump new file mode 100644 index 0000000000..09ead2ab7b --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_13.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| @7|f|o|>| +0#4040ff13#ffffff0@60 +|b+0#0000001#ffd7ff255|a|r| @7|一*&|>+&| +0#4040ff13#ffffff0@60 +|一*0#0000001#ffd7ff255|二|三|四|五| +&|m|u|>| +0#4040ff13#ffffff0@60 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_14.dump b/src/testdir/dumps/Test_pum_maxwidth_14.dump new file mode 100644 index 0000000000..e8fb585d29 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_14.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|_| +0#4040ff13#ffffff0@60 +|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|_| +0#4040ff13#ffffff0@60 +|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|_| +0#4040ff13#ffffff0@60 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_15.dump b/src/testdir/dumps/Test_pum_maxwidth_15.dump new file mode 100644 index 0000000000..bf76319e91 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_15.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@70> |o@1|f +| +0#4040ff13&@60|<+0#0000001#e0e0e08|f| |d|n|i|K|o@1|f| |o@1|f +| +0#4040ff13#ffffff0@60|<+0#0000001#ffd7ff255|b| |d|n|i|K|r|a|b| |r|a|b +| +0#4040ff13#ffffff0@60|<+0#0000001#ffd7ff255|b| |d|n|i|K|z|a|b| |z|a|b +| +0#4040ff13#ffffff0@73|~ +| @73|~ +| @73|~ +| @73|~ diff --git a/src/testdir/dumps/Test_pum_maxwidth_16.dump b/src/testdir/dumps/Test_pum_maxwidth_16.dump new file mode 100644 index 0000000000..3a9ff4ddfc --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_16.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@70> |o@1|f +| +0#4040ff13&@60|<+0#0000001#e0e0e08|o|f| @7|o@1|f +| +0#4040ff13#ffffff0@60|<+0#0000001#ffd7ff255|一*&| +&@7|r|a|b +| +0#4040ff13#ffffff0@60|<+0#0000001#ffd7ff255|u|m| |五*&|四|三|二|一 +| +0#4040ff13#ffffff0@73|~ +| @73|~ +| @73|~ +| @73|~ diff --git a/src/testdir/dumps/Test_pum_maxwidth_17.dump b/src/testdir/dumps/Test_pum_maxwidth_17.dump new file mode 100644 index 0000000000..7bd5affdfe --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_17.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@70> |o@1|f +| +0#4040ff13&@60|…+0#0000001#e0e0e08|o|f| @7|o@1|f +| +0#4040ff13#ffffff0@60|…+0#0000001#ffd7ff255|一*&| +&@7|r|a|b +| +0#4040ff13#ffffff0@60|…+0#0000001#ffd7ff255|u|m| |五*&|四|三|二|一 +| +0#4040ff13#ffffff0@73|~ +| @73|~ +| @73|~ +| @73|~ diff --git a/src/testdir/dumps/Test_pum_maxwidth_18.dump b/src/testdir/dumps/Test_pum_maxwidth_18.dump new file mode 100644 index 0000000000..6a0b6b179d --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_18.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@70> |r|a|b +| +0#4040ff13&@60|<+0#0000001#e0e0e08|o|f| |三*&|二|一| +&|r|a|b +| +0#4040ff13#ffffff0@73|~ +| @73|~ +| @73|~ +| @73|~ +| @73|~ +| @73|~ diff --git a/src/testdir/dumps/Test_pum_maxwidth_19.dump b/src/testdir/dumps/Test_pum_maxwidth_19.dump new file mode 100644 index 0000000000..0b09ce9c23 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_19.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1|>| +0#4040ff13#ffffff0@70 +|b+0#0000001#ffd7ff255|a|r|>| +0#4040ff13#ffffff0@70 +|一*0#0000001#ffd7ff255| +&|>| +0#4040ff13#ffffff0@70 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_20.dump b/src/testdir/dumps/Test_pum_maxwidth_20.dump new file mode 100644 index 0000000000..2946f2492b --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_20.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@70> |o@1|f +| +0#4040ff13&@70|<+0#0000001#e0e0e08|o@1|f +| +0#4040ff13#ffffff0@70|<+0#0000001#ffd7ff255|r|a|b +| +0#4040ff13#ffffff0@70|<+0#0000001#ffd7ff255| |一*& +| +0#4040ff13#ffffff0@73|~ +| @73|~ +| @73|~ +| @73|~ diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_01.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_01.dump deleted file mode 100644 index 6453b70c2a..0000000000 --- a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_01.dump +++ /dev/null @@ -1,8 +0,0 @@ -|f+0&#ffffff0|o@1> @71 -|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|o@1|M|e|n|u| | +0#4040ff13#ffffff0@54 -|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|a|r|M|e|n|u| | +0#4040ff13#ffffff0@54 -|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|a|z|M|e|n|u| | +0#4040ff13#ffffff0@54 -|~| @73 -|~| @73 -|~| @73 -|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_02.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_02.dump deleted file mode 100644 index e8d9d97844..0000000000 --- a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_02.dump +++ /dev/null @@ -1,8 +0,0 @@ -|f+0&#ffffff0|o@1> @71 -|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|o@1|M|e|n|u| +0#4040ff13#ffffff0@55 -|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|a|r|M|e|n|u| +0#4040ff13#ffffff0@55 -|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|a|z|M|e|n|u| +0#4040ff13#ffffff0@55 -|~| @73 -|~| @73 -|~| @73 -|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_03.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_03.dump deleted file mode 100644 index f31cda1e53..0000000000 --- a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_03.dump +++ /dev/null @@ -1,8 +0,0 @@ -|f+0&#ffffff0|o@1> @71 -|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|o@1|.@2| +0#4040ff13#ffffff0@56 -|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|a|r|.@2| +0#4040ff13#ffffff0@56 -|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|a|z|.@2| +0#4040ff13#ffffff0@56 -|~| @73 -|~| @73 -|~| @73 -|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_04.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_04.dump deleted file mode 100644 index f6f22b134e..0000000000 --- a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_04.dump +++ /dev/null @@ -1,8 +0,0 @@ -|f+0&#ffffff0|o@1> @71 -|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|.@2| +0#4040ff13#ffffff0@58 -|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|.@2| +0#4040ff13#ffffff0@58 -|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|.@2| +0#4040ff13#ffffff0@58 -|~| @73 -|~| @73 -|~| @73 -|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_05.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_05.dump deleted file mode 100644 index 1002ef385d..0000000000 --- a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_05.dump +++ /dev/null @@ -1,8 +0,0 @@ -|f+0&#ffffff0|o@1> @71 -|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| |f|o@1| +0#4040ff13#ffffff0@59 -|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| |b|a|r| +0#4040ff13#ffffff0@59 -|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| |b|a|z| +0#4040ff13#ffffff0@59 -|~| @73 -|~| @73 -|~| @73 -|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_06.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_06.dump deleted file mode 100644 index a9a63a6fe7..0000000000 --- a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_06.dump +++ /dev/null @@ -1,8 +0,0 @@ -|f+0&#ffffff0|o@1> @71 -|f+0#0000001#e0e0e08|o@1| |f|o@1|K|i|n|d| | +0#4040ff13#ffffff0@62 -|b+0#0000001#ffd7ff255|a|r| |b|a|r|K|i|n|d| | +0#4040ff13#ffffff0@62 -|b+0#0000001#ffd7ff255|a|z| |b|a|z|K|i|n|d| | +0#4040ff13#ffffff0@62 -|~| @73 -|~| @73 -|~| @73 -|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_07.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_07.dump deleted file mode 100644 index 12091b438e..0000000000 --- a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_07.dump +++ /dev/null @@ -1,8 +0,0 @@ -|f+0&#ffffff0|o@1> @71 -|f+0#0000001#e0e0e08|o@1| |f|o@1|.@2| +0#4040ff13#ffffff0@64 -|b+0#0000001#ffd7ff255|a|r| |b|a|r|.@2| +0#4040ff13#ffffff0@64 -|b+0#0000001#ffd7ff255|a|z| |b|a|z|.@2| +0#4040ff13#ffffff0@64 -|~| @73 -|~| @73 -|~| @73 -|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_08.dump b/src/testdir/dumps/Test_pum_maxwidth_with_many_items_08.dump deleted file mode 100644 index 01c3e7d25b..0000000000 --- a/src/testdir/dumps/Test_pum_maxwidth_with_many_items_08.dump +++ /dev/null @@ -1,8 +0,0 @@ -|f+0&#ffffff0|o@1> @71 -|f+0#0000001#e0e0e08| +0#4040ff13#ffffff0@73 -|b+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@73 -|b+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim index 4721477bf5..a0876290f3 100644 --- a/src/testdir/gen_opt_test.vim +++ b/src/testdir/gen_opt_test.vim @@ -203,8 +203,9 @@ let test_values = { \ 'fileformats': [['', 'dos', 'dos,unix'], ['xxx']], \ 'fillchars': [['', 'stl:x', 'stlnc:x', 'vert:x', 'fold:x', 'foldopen:x', \ 'foldclose:x', 'foldsep:x', 'diff:x', 'eob:x', 'lastline:x', - \ 'stl:\ ,vert:\|,fold:\\,diff:x'], - \ ['xxx', 'vert:']], + \ 'trunc:_', 'trunc:_,eob:x,trunc:_', + \ 'stl:\ ,vert:\|,fold:\\,trunc:…,diff:x'], + \ ['xxx', 'vert:', 'trunc:', "trunc:\b"]], \ 'foldclose': [['', 'all'], ['xxx']], \ 'foldmethod': [['manual', 'indent', 'expr', 'marker', 'syntax', 'diff'], \ ['', 'xxx', 'expr,diff']], diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index 445a2befc8..d282f91cfa 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -2018,8 +2018,9 @@ func Test_pum_maxwidth() call term_sendkeys(buf, "\3Gdd\"zp") call term_sendkeys(buf, ":set lines=10 columns=32\") + call TermWait(buf, 50) call term_sendkeys(buf, "GA\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_09', {'rows': 10, 'cols': 32}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_05', {'rows': 10, 'cols': 32}) call term_sendkeys(buf, "\3Gdd\"zp") call StopVimInTerminal(buf) @@ -2029,107 +2030,130 @@ func Test_pum_maxwidth_multibyte() CheckScreendump let lines =<< trim END + let g:change = 0 func Omni_test(findstart, base) if a:findstart return col(".") endif - return [ - \ #{word: "123456789_123456789_123456789_"}, - \ #{word: "一二三四五六七八九十"}, - \ #{word: "abcdefghij"}, - \ #{word: "上下左右"}, - \ ] + if g:change == 0 + return [ + \ #{word: "123456789_123456789_123456789_"}, + \ #{word: "一二三四五六七八九十"}, + \ #{word: "abcdefghij"}, + \ #{word: "上下左右"}, + \ ] + elseif g:change == 1 + return [ + \ #{word: "foo", menu: "fooMenu", kind: "fooKind"}, + \ #{word: "bar", menu: "barMenu", kind: "barKind"}, + \ #{word: "baz", menu: "bazMenu", kind: "bazKind"}, + \ ] + elseif g:change == 2 + return [ + \ #{word: "foo", menu: "fooMenu", kind: "fooKind"}, + \ #{word: "bar", menu: "fooMenu", kind: "一二三四"}, + \ #{word: "一二三四五", kind: "multi"}, + \ ] + else + return [#{word: "bar", menu: "fooMenu", kind: "一二三"}] + endif endfunc set omnifunc=Omni_test + set cot+=menuone END call writefile(lines, 'Xtest', 'D') let buf = RunVimInTerminal('-S Xtest', {}) call TermWait(buf) call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_05', {'rows': 8}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_06', {'rows': 8}) call term_sendkeys(buf, "\") call term_sendkeys(buf, ":set pummaxwidth=10\") call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_06', {'rows': 8}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_07', {'rows': 8}) call term_sendkeys(buf, "\") if has('rightleft') call term_sendkeys(buf, ":set rightleft\") call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_07', {'rows': 8}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_08', {'rows': 8}) call term_sendkeys(buf, "\:set norightleft\") endif call term_sendkeys(buf, ":set pummaxwidth=2\") call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_08', {'rows': 8}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_09', {'rows': 8}) call term_sendkeys(buf, "\") - call StopVimInTerminal(buf) -endfunc - -func Test_pum_maxwidth_with_many_items() - CheckScreendump - - let lines =<< trim END - func Omni_test(findstart, base) - if a:findstart - return col(".") - endif - return [ - \ #{word: "foo", menu: "fooMenu", kind: "fooKind"}, - \ #{word: "bar", menu: "barMenu", kind: "barKind"}, - \ #{word: "baz", menu: "bazMenu", kind: "bazKind"}, - \ ] - endfunc - set omnifunc=Omni_test - END - call writefile(lines, 'Xtest', 'D') - let buf = RunVimInTerminal('-S Xtest', {}) - call TermWait(buf) - - call term_sendkeys(buf, ":set pummaxwidth=20\") - call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_01', {'rows': 8}) + call term_sendkeys(buf, ":set pummaxwidth=14\") + call term_sendkeys(buf, ":let g:change=1\S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_10', {'rows': 8}) call term_sendkeys(buf, "\") - call term_sendkeys(buf, ":set pummaxwidth=19\") + " Unicode Character U+2026 but one cell + call term_sendkeys(buf, ":set fcs+=trunc:…\") call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_02', {'rows': 8}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_11', {'rows': 8}) call term_sendkeys(buf, "\") - call term_sendkeys(buf, ":set pummaxwidth=18\") " display Ellipsis - call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_03', {'rows': 8}) + call term_sendkeys(buf, ":let g:change=2\S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_12', {'rows': 8}) call term_sendkeys(buf, "\") - call term_sendkeys(buf, ":set pummaxwidth=16\") " display Ellipsis + call term_sendkeys(buf, ":set fcs&\") call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_04', {'rows': 8}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_13', {'rows': 8}) call term_sendkeys(buf, "\") - call term_sendkeys(buf, ":set pummaxwidth=15\") + call term_sendkeys(buf, ":set fcs=trunc:_\") + call term_sendkeys(buf, ":let g:change=1\") + call TermWait(buf, 50) call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_05', {'rows': 8}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_14', {'rows': 8}) call term_sendkeys(buf, "\") + call term_sendkeys(buf, ":set fcs&\") - call term_sendkeys(buf, ":set pummaxwidth=12\") - call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_06', {'rows': 8}) - call term_sendkeys(buf, "\") + if has('rightleft') + call term_sendkeys(buf, ":set rightleft\") + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_15', {'rows': 8}) + call term_sendkeys(buf, "\") - call term_sendkeys(buf, ":set pummaxwidth=10\") " display Ellipsis - call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_07', {'rows': 8}) - call term_sendkeys(buf, "\") + call term_sendkeys(buf, ":let g:change=2\") + call TermWait(buf, 50) + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_16', {'rows': 8}) + call term_sendkeys(buf, "\") + + call term_sendkeys(buf, ":set fcs+=trunc:…\") + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_17', {'rows': 8}) + call term_sendkeys(buf, "\") - call term_sendkeys(buf, ":set pummaxwidth=1\") + call term_sendkeys(buf, ":set fcs&\") + call term_sendkeys(buf, ":let g:change=3\") + call TermWait(buf, 50) + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_18', {'rows': 8}) + call term_sendkeys(buf, "\:set norightleft\") + endif + + call term_sendkeys(buf, ":set pummaxwidth=4\") + call term_sendkeys(buf, ":let g:change=2\") + call TermWait(buf, 50) call term_sendkeys(buf, "S\\") - call VerifyScreenDump(buf, 'Test_pum_maxwidth_with_many_items_08', {'rows': 8}) + call VerifyScreenDump(buf, 'Test_pum_maxwidth_19', {'rows': 8}) call term_sendkeys(buf, "\") + if has('rightleft') + call term_sendkeys(buf, ":set rightleft\") + call TermWait(buf, 50) + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_20', {'rows': 8}) + call term_sendkeys(buf, "\:set norightleft\") + endif + call StopVimInTerminal(buf) endfunc diff --git a/src/version.c b/src/version.c index 6f9ae4bb47..8e39db9160 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1284, /**/ 1283, /**/ From 5ce1e4ad4aaad243de03f29b0b341532bc6c8866 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Mon, 7 Apr 2025 21:09:18 +0200 Subject: [PATCH 059/633] patch 9.1.1285: Vim9: no error message for missing method after "super." Problem: Vim9: no error message for missing method after "super." Solution: output an error message, add a few more tests (Yegappan Lakshmanan). closes: #17070 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/testdir/test_expr.vim | 10 +++++ src/testdir/test_vim9_class.vim | 73 ++++++++++++++++++++++++++++++++ src/testdir/test_vim9_script.vim | 16 +++++++ src/version.c | 2 + src/vim9expr.c | 3 ++ 5 files changed, 104 insertions(+) diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim index 41b54aac13..be95c6442a 100644 --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -1060,6 +1060,16 @@ func Test_bitwise_shift() END call v9.CheckDefAndScriptSuccess(lines) + " Error in the second expression of "<<" + let lines =<< trim END + vim9script + def Fn() + var x = 1 << y + enddef + defcompile + END + call v9.CheckSourceFailure(lines, 'E1001: Variable not found: y') + let lines =<< trim END # Use in a lambda function const DivBy2Ref_A = (n: number): number => n >> 1 diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index 4b6cb81bb6..4aa9bb3b36 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -1921,6 +1921,21 @@ def Test_class_member() END v9.CheckSourceFailure(lines, "E1004: White space required before and after '='", 3) + # Space is not allowed before the object member variable name + lines =<< trim END + vim9script + class A + var n: number = 10 + endclass + + def Fn() + var a = A.new() + var y = a. n + enddef + defcompile + END + v9.CheckSourceFailure(lines, "E1202: No white space allowed after '.': . n", 2) + # Access a non-existing member lines =<< trim END vim9script @@ -3469,6 +3484,39 @@ def Test_super_dispatch() assert_equal('A', TestA(C.new())) END v9.CheckSourceSuccess(lines) + + # Invoking a class method in the parent class using "super" should fail + lines =<< trim END + vim9script + + class A + static def Fn(): string + return 'A' + enddef + endclass + + class B extends A + static def Fn(): string + return super.Fn() + enddef + endclass + defcompile + END + v9.CheckSourceFailure(lines, 'E1325: Method "Fn" not found in class "B"') + + # Missing name after "super" keyword + lines =<< trim END + vim9script + class A + endclass + class B extends A + def Fn() + var x = super.() + enddef + endclass + defcompile + END + v9.CheckSourceFailure(lines, 'E1127: Missing name after dot', 1) enddef def Test_class_import() @@ -12454,6 +12502,24 @@ def Test_super_keyword() END v9.CheckSourceSuccess(lines) + # Using 'super' to access an static class variable in the parent should fail + lines =<< trim END + vim9script + + class A + static var foo: string = 'xxx' + endclass + + class B extends A + def GetString(): string + return super.foo + enddef + endclass + + defcompile + END + v9.CheckSourceFailure(lines, 'E1326: Variable "foo" not found in object "B"') + # Using super to access an overriden method in the parent class lines =<< trim END vim9script @@ -12980,6 +13046,13 @@ def Test_object_of_class_type() var x: object END v9.CheckSourceFailure(lines, 'E488: Trailing characters: ,any>') + + lines =<< trim END + var x: object + END + v9.CheckSourceDefAndScriptFailure(lines, [ + \ 'E1353: Class name not found: ', + \ 'E1353: Class name not found: ']) enddef " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 8456037c71..698091361b 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -4055,6 +4055,22 @@ def Test_error_in_autoload_script() &rtp = save_rtp enddef +" Test for sourcing a Vim9 script with a function script variable and "noclear". +" The type for the variable is dynamically allocated and should be freed. +def Test_source_func_script_var() + var lines =<< trim END + vim9script noclear + var Fn: func(list): number + Fn = function('min') + assert_equal(2, Fn([4, 2])) + END + new + setline(1, lines) + source + source + bw! +enddef + def Test_error_in_autoload_script_foldexpr() var save_rtp = &rtp mkdir('Xvim/autoload', 'pR') diff --git a/src/version.c b/src/version.c index 8e39db9160..466fdd5c23 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1285, /**/ 1284, /**/ diff --git a/src/vim9expr.c b/src/vim9expr.c index 0ceff0b851..40c5fcc721 100644 --- a/src/vim9expr.c +++ b/src/vim9expr.c @@ -404,7 +404,10 @@ compile_class_object_index(cctx_T *cctx, char_u **arg, type_T *type) char_u *name = *arg; char_u *name_end = find_name_end(name, NULL, NULL, FNE_CHECK_START); if (name_end == name) + { + emsg(_(e_missing_name_after_dot)); return FAIL; + } size_t len = name_end - name; if (*name_end == '(') From e370141bf41919642061ee2e78340dca84678712 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Mon, 7 Apr 2025 21:14:41 +0200 Subject: [PATCH 060/633] patch 9.1.1286: filetype: help files not detected when 'iskeyword' includes ":" Problem: Help files not detected when 'iskeyword' includes ":". Solution: Do not use \< and \> in the pattern (zeertzjq). fixes: #17069 closes: #17071 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- runtime/filetype.vim | 2 +- src/testdir/test_filetype.vim | 28 ++++++++++++++++++++++------ src/version.c | 2 ++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 59e6a810ba..2d9d3ad6f9 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -53,7 +53,7 @@ endfunc " Vim help file, set ft explicitly, because 'modeline' might be off au BufNewFile,BufRead */doc/*.txt - \ if getline('$') =~ '\(^\|\s\)vim:.*\<\(ft\|filetype\)=help\>' + \ if getline('$') =~ '\%(^\|\s\)vim:\%(.*\%(:\|\s\)\)\?\%(ft\|filetype\)=help\%(:\|\s\|$\)' \| setf help \| endif diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index f6948e6699..e2286abd38 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -1635,20 +1635,36 @@ func Test_haredoc_file() endfunc func Test_help_file() + func! s:Check_help_with_iskeyword(fname) + exe 'split' a:fname + call assert_equal('help', &filetype) + bwipe! + set iskeyword+=: + exe 'split' a:fname + call assert_equal('help', &filetype) + bwipe! + set iskeyword& + endfunc + set nomodeline filetype on call assert_true(mkdir('doc', 'pR')) call writefile(['some text', 'vim:ft=help:'], 'doc/help.txt', 'D') - split doc/help.txt - call assert_equal('help', &filetype) - bwipe! + call s:Check_help_with_iskeyword('doc/help.txt') call writefile(['some text', 'Copyright: |manual-copyright| vim:ft=help:'], \ 'doc/help1.txt', 'D') - split doc/help1.txt - call assert_equal('help', &filetype) - bwipe! + call s:Check_help_with_iskeyword('doc/help1.txt') + + call writefile(['some text', 'vim:noet:ft=help:'], 'doc/help2.txt', 'D') + call s:Check_help_with_iskeyword('doc/help2.txt') + + call writefile(['some text', 'vim: noet ft=help'], 'doc/help3.txt', 'D') + call s:Check_help_with_iskeyword('doc/help3.txt') + + call writefile(['some text', 'vim: ft=help noet'], 'doc/help4.txt', 'D') + call s:Check_help_with_iskeyword('doc/help4.txt') call writefile(['some text'], 'doc/nothelp.txt', 'D') split doc/nothelp.txt diff --git a/src/version.c b/src/version.c index 466fdd5c23..259fbc0e85 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1286, /**/ 1285, /**/ From adcfb6caeb1c9c54448fff8d5812c3dca2ba0d03 Mon Sep 17 00:00:00 2001 From: Hirohito Higashi Date: Mon, 7 Apr 2025 21:19:07 +0200 Subject: [PATCH 061/633] patch 9.1.1287: quickfix code can be further improved Problem: quickfix code can be further improved (after v9.1.1283) Solution: slightly refactor quickfix.c (Hirohito Higashi) - remove error message output - adjust comments - rename functions: - qf_init_quickfix_stack() --> qf_init_stack() - qf_resize_quickfix_stack() --> qf_resize_stack() - qf_resize_stack() --> qf_resize_stack_base() Now qf_alloc_stack() can handle both quickfix/location lists. closes: #17068 Signed-off-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- src/main.c | 4 +-- src/option.c | 2 +- src/proto/quickfix.pro | 4 +-- src/quickfix.c | 73 ++++++++++++++++++------------------------ src/version.c | 2 ++ 5 files changed, 39 insertions(+), 46 deletions(-) diff --git a/src/main.c b/src/main.c index a3caac8fb5..9a862c4be9 100644 --- a/src/main.c +++ b/src/main.c @@ -1026,10 +1026,10 @@ common_init_2(mparm_T *paramp) #endif #ifdef FEAT_QUICKFIX - // initialize global quickfix list + // initialize quickfix list // don't send an error message when memory allocation fails // do it when the user tries to access the quickfix list - qf_init_quickfix_stack(); + qf_init_stack(); #endif } diff --git a/src/option.c b/src/option.c index 5c28c801f5..cfdeb44e10 100644 --- a/src/option.c +++ b/src/option.c @@ -4762,7 +4762,7 @@ did_set_xhistory(optset_T *args) } if (is_p_chi) - err = qf_resize_quickfix_stack(*arg); + err = qf_resize_stack(*arg); else err = ll_resize_stack(curwin, *arg); diff --git a/src/proto/quickfix.pro b/src/proto/quickfix.pro index 8102a8f1ae..6cd7cfcc04 100644 --- a/src/proto/quickfix.pro +++ b/src/proto/quickfix.pro @@ -3,9 +3,9 @@ int qf_init(win_T *wp, char_u *efile, char_u *errorformat, int newlist, char_u * int qf_stack_get_bufnr(void); void qf_free_all(win_T *wp); void check_quickfix_busy(void); -int qf_resize_quickfix_stack(int n); +int qf_resize_stack(int n); int ll_resize_stack(win_T *wp, int n); -int qf_init_quickfix_stack(void); +void qf_init_stack(void); void copy_loclist_stack(win_T *from, win_T *to); void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit); void qf_list(exarg_T *eap); diff --git a/src/quickfix.c b/src/quickfix.c index 9722058e38..decc01b413 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -174,7 +174,7 @@ static callback_T qftf_cb; static void qf_pop_stack(qf_info_T *qi, int adjust); static void qf_new_list(qf_info_T *qi, char_u *qf_title); static int qf_add_entry(qf_list_T *qfl, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, long end_lnum, int col, int end_col, int vis_col, char_u *pattern, int nr, int type, typval_T *user_data, int valid); -static int qf_resize_stack(qf_info_T *qi, int n); +static int qf_resize_stack_base(qf_info_T *qi, int n); static void qf_sync_llw_to_win(win_T *llw); static void qf_sync_win_to_llw(win_T *pwp); static qf_info_T *qf_alloc_stack(qfltype_T qfltype, int n); @@ -2343,19 +2343,16 @@ qf_add_entry( } /* - * Resize global quickfix stack to be able to hold n amount of lists. + * Resize quickfix stack to be able to hold n amount of lists. * returns FAIL on failure and OK on success. */ int -qf_resize_quickfix_stack(int n) +qf_resize_stack(int n) { if (ql_info == NULL) - { - emsg(_(e_no_quickfix_stack)); return FAIL; - } - if (qf_resize_stack(ql_info, n) == FAIL) + if (qf_resize_stack_base(ql_info, n) == FAIL) return FAIL; return OK; @@ -2376,22 +2373,28 @@ ll_resize_stack(win_T *wp, int n) qf_sync_win_to_llw(wp); qf_info_T *qi = ll_get_or_alloc_list(wp); + if (qi == NULL) + return FAIL; - if (qf_resize_stack(qi, n) == FAIL) + if (qf_resize_stack_base(qi, n) == FAIL) return FAIL; return OK; } /* - * Resize quickfix stack to be able to hold n amount of quickfix lists. + * Resize quickfix/location lists stack to be able to hold n amount of lists. * Returns FAIL on failure and OK on success. */ static int -qf_resize_stack(qf_info_T *qi, int n) +qf_resize_stack_base(qf_info_T *qi, int n) { qf_list_T *new; int amount_to_rm = 0, i; + + if (qi == NULL) + return FAIL; + size_t lsz = sizeof(*qi->qf_lists); if (n == qi->qf_maxcount) @@ -2424,21 +2427,12 @@ qf_resize_stack(qf_info_T *qi, int n) } /* - * Initialize global quickfix list, should only be called once. - * Returns FAIL on failure and OK on success. + * Initialize quickfix list, should only be called once. */ - int -qf_init_quickfix_stack(void) + void +qf_init_stack(void) { - ql_info_actual.qf_lists = qf_alloc_list_stack(p_chi); - - if (ql_info_actual.qf_lists == NULL) - return FAIL; - - ql_info = &ql_info_actual; - ql_info->qfl_type = QFLT_QUICKFIX; - ql_info->qf_maxcount = p_chi; - return OK; + ql_info = qf_alloc_stack(QFLT_QUICKFIX, p_chi); } /* @@ -2480,22 +2474,24 @@ qf_alloc_stack(qfltype_T qfltype, int n) { qf_info_T *qi; - qi = ALLOC_CLEAR_ONE_ID(qf_info_T, aid_qf_qfinfo); - if (qi == NULL) - return NULL; - - qi->qf_refcount++; + if (qfltype == QFLT_QUICKFIX) + qi = &ql_info_actual; + else + { + qi = ALLOC_CLEAR_ONE_ID(qf_info_T, aid_qf_qfinfo); + if (qi == NULL) + return NULL; + qi->qf_refcount++; + } qi->qfl_type = qfltype; qi->qf_bufnr = INVALID_QFBUFNR; - qi->qf_lists = qf_alloc_list_stack(n); - if (qi->qf_lists == NULL) { - vim_free(qi); + if (qfltype != QFLT_QUICKFIX) + vim_free(qi); return NULL; } - qi->qf_maxcount = n; return qi; @@ -8259,20 +8255,15 @@ set_errorlist( char_u *title, dict_T *what) { - qf_info_T *qi = ql_info; + qf_info_T *qi; int retval = OK; if (wp != NULL) - { qi = ll_get_or_alloc_list(wp); - if (qi == NULL) - return FAIL; - } - else if (qi == NULL) - { - emsg(_(e_no_quickfix_stack)); + else + qi = ql_info; + if (qi == NULL) return FAIL; - } if (action == 'f') { diff --git a/src/version.c b/src/version.c index 259fbc0e85..62b1cf770c 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1287, /**/ 1286, /**/ From 2525573de71a432d73247366c6e6bf0b9567ce22 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Tue, 8 Apr 2025 08:36:18 +0200 Subject: [PATCH 062/633] runtime(doc): rename wrong option to 'pummaxwidth' Signed-off-by: Christian Brabandt --- runtime/doc/version9.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 646f130f25..8a7f49e334 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Apr 07 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41735,16 +41735,16 @@ Options: ~ |ins-completion| modes 'completeitemalign' Order of |complete-items| in Insert mode completion popup -'completemaxwidth' maximum width for the completion popup menu 'eventignorewin' autocommand events that are ignored in a window 'findfunc' Vim function to obtain the results for a |:find| command 'lhistory' Size of the location list stack |quickfix-stack|. 'messagesopt' configure |:messages| and |hit-enter| prompt -'winfixbuf' Keep buffer focused in a window +'pummaxwidth' maximum width for the completion popup menu '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 +'winfixbuf' Keep buffer focused in a window ============================================================================== INCOMPATIBLE CHANGES *incompatible-9.2* From b71f1309a210bf8f61a24f4eda336de64c6f0a07 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Tue, 8 Apr 2025 20:29:40 +0200 Subject: [PATCH 063/633] patch 9.1.1288: Using wrong window in ll_resize_stack() Problem: Using wrong window in ll_resize_stack() (after v9.1.1287) Solution: Use "wp" instead of "curwin", even though they are always the same value. Fix typos in documentation (zeertzjq). closes: #17080 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 15 +++++++-------- src/quickfix.c | 8 +++----- src/version.c | 2 ++ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index f90a335d60..8530196aa3 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 07 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -5341,13 +5341,12 @@ A jump table for the options with a short description can be found at |Q_op|. local to window {only available when compiled with the |+quickfix| feature} - Like 'chistory', but for the location list stack associated with the - current window. If the option is changed in either the location list - window itself or the the window that is associated with the location - list stack, the new value will also be applied to the other one. This - means this value will always be the same for a given location list - window and its corresponding window. See |quickfix-stack| for - additional info. + Like 'chistory', but for the location list stack associated with a + window. If the option is changed in either the location list window + itself or the window that is associated with the location list stack, + the new value will also be applied to the other one. This means this + value will always be the same for a given location list window and its + corresponding window. See |quickfix-stack| for additional info. *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'* 'linebreak' 'lbr' boolean (default off) diff --git a/src/quickfix.c b/src/quickfix.c index decc01b413..2b12fb5ec1 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -2102,7 +2102,7 @@ qf_free_list_stack_items(qf_info_T *qi) } /* - * Free a qf_ifo_T struct completely + * Free a qf_info_T struct completely */ static void qf_free_lists(qf_info_T *qi) @@ -2365,9 +2365,9 @@ qf_resize_stack(int n) int ll_resize_stack(win_T *wp, int n) { - // check if current window is a location list window; + // check if given window is a location list window; // if so then sync its 'lhistory' to the parent window or vice versa - if (IS_LL_WINDOW(curwin)) + if (IS_LL_WINDOW(wp)) qf_sync_llw_to_win(wp); else qf_sync_win_to_llw(wp); @@ -2499,8 +2499,6 @@ qf_alloc_stack(qfltype_T qfltype, int n) /* * Allocate memory for qf_lists member of qf_info_T struct. - * 'actual' is the actual amount of lists that have been allocated for - * (only set when function returns sucessfully) */ static qf_list_T * qf_alloc_list_stack(int n) diff --git a/src/version.c b/src/version.c index 62b1cf770c..c9bcdcaaf9 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1288, /**/ 1287, /**/ From 7517a8cadfd0e70d0422955cbad4767f6a40f29d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andis=20Spri=C5=86=C4=B7is?= Date: Tue, 8 Apr 2025 20:34:14 +0200 Subject: [PATCH 064/633] runtime(lf): improve syntax script, add filetype plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Greatly improve detection and highlighting of command/shell regions, input-device key labels, escape sequences (@joelim-work) - Add ftplugin for formatoptions, toggling comment areas (@andis-sprinkis) - Add a few missing lf option keywords, rm. old non-working code, misc. formatting (@andis-sprinkis) closes: #17078 Signed-off-by: Andis Spriņķis Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 1 + runtime/ftplugin/lf.vim | 22 +++ runtime/syntax/lf.vim | 399 ++++++++++++++++++++-------------------- 3 files changed, 219 insertions(+), 203 deletions(-) create mode 100644 runtime/ftplugin/lf.vim diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index 180b9e9911..68d9a62cfe 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -222,6 +222,7 @@ runtime/ftplugin/ldapconf.vim @ribru17 runtime/ftplugin/leo.vim @ribru17 runtime/ftplugin/less.vim @genoma runtime/ftplugin/lex.vim @ribru17 +runtime/ftplugin/lf.vim @andis-sprinkis runtime/ftplugin/liquid.vim @tpope runtime/ftplugin/lua.vim @dkearns runtime/ftplugin/lc.vim @ribru17 diff --git a/runtime/ftplugin/lf.vim b/runtime/ftplugin/lf.vim new file mode 100644 index 0000000000..7cec11194e --- /dev/null +++ b/runtime/ftplugin/lf.vim @@ -0,0 +1,22 @@ +" Vim filetype plugin file +" Language: lf file manager configuration file (lfrc) +" Maintainer: Andis Sprinkis +" URL: https://github.com/andis-sprinkis/lf-vim +" Last Change: 6 Apr 2025 + +if exists("b:did_ftplugin") | finish | endif + +let b:did_ftplugin = 1 + +let s:cpo = &cpo +set cpo&vim + +let b:undo_ftplugin = "setlocal comments< commentstring< formatoptions<" + +setlocal comments=:# +setlocal commentstring=#\ %s + +setlocal formatoptions-=t formatoptions+=rol + +let &cpo = s:cpo +unlet s:cpo diff --git a/runtime/syntax/lf.vim b/runtime/syntax/lf.vim index 3c1513fe68..2fe2859ec7 100644 --- a/runtime/syntax/lf.vim +++ b/runtime/syntax/lf.vim @@ -3,242 +3,235 @@ " Maintainer: Andis Sprinkis " Former Maintainer: Cameron Wright " URL: https://github.com/andis-sprinkis/lf-vim -" Last Change: 28 March 2025 -" 29 Mar 2025 by Vim Project (save and restore 'cpo' setting) +" Last Change: 5 Apr 2025 " " The shell syntax highlighting is configurable. See $VIMRUNTIME/doc/syntax.txt " lf version: 34 -if exists("b:current_syntax") - finish -endif +if exists("b:current_syntax") | finish | endif + let s:cpo = &cpo set cpo&vim let b:current_syntax = "lf" "{{{ Comment Matching -syn match lfComment '#.*$' +syn match lfComment '#.*$' "}}} "{{{ String Matching -syn match lfString "'.*'" -syn match lfString '".*"' contains=lfVar,lfSpecial -"}}} - -"{{{ Match lf Variables -syn match lfVar '\$f\|\$fx\|\$fs\|\$id' +syn match lfString "'.*'" +syn match lfString '".*"' contains=lfSpecial "}}} "{{{ Keywords -syn keyword lfKeyword set setlocal cmd map cmap skipwhite +syn keyword lfKeyword set setlocal cmd map cmap skipwhite "}}} "{{{ Options Keywords -syn keyword lfOptions - \ anchorfind - \ autoquit - \ borderfmt - \ bottom - \ calcdirsize - \ cd - \ cleaner - \ clear - \ clearmaps - \ cmd-capitalize-word - \ cmd-complete - \ cmd-delete - \ cmd-delete-back - \ cmd-delete-end - \ cmd-delete-home - \ cmd-delete-unix-word - \ cmd-delete-word - \ cmd-delete-word-back - \ cmd-end - \ cmd-enter - \ cmd-escape - \ cmd-history-next - \ cmd-history-prev - \ cmd-home - \ cmd-interrupt - \ cmd-left - \ cmd-lowercase-word - \ cmd-menu-accept - \ cmd-menu-complete - \ cmd-menu-complete-back - \ cmd-right - \ cmd-transpose - \ cmd-transpose-word - \ cmd-uppercase-word - \ cmd-word - \ cmd-word-back - \ cmd-yank - \ copy - \ copyfmt - \ cursoractivefmt - \ cursorparentfmt - \ cursorpreviewfmt - \ cut - \ cutfmt - \ delete - \ dircache - \ dircounts - \ dirfirst - \ dironly - \ dirpreviews - \ down - \ draw - \ drawbox - \ dupfilefmt - \ echo - \ echoerr - \ echomsg - \ errorfmt - \ filesep - \ filter - \ find - \ find-back - \ find-next - \ find-prev - \ findlen - \ glob-select - \ glob-unselect - \ globfilter - \ globsearch - \ half-down - \ half-up - \ hidden - \ hiddenfiles - \ high - \ history - \ icons - \ ifs - \ ignorecase - \ ignoredia - \ incfilter - \ incsearch - \ info - \ infotimefmtnew - \ infotimefmtold - \ invert - \ invert-below - \ jump-next - \ jump-prev - \ load - \ locale - \ low - \ mark-load - \ mark-remove - \ mark-save - \ middle - \ mouse - \ number - \ numberfmt - \ on-cd - \ on-focus-gained - \ on-focus-lost - \ on-init - \ on-quit - \ on-redraw - \ on-select - \ open - \ page-down - \ page-up - \ paste - \ period - \ pre-cd - \ preserve - \ preview - \ previewer - \ promptfmt - \ push - \ quit - \ ratios - \ read - \ redraw - \ relativenumber - \ reload - \ rename - \ reverse - \ roundbox - \ rulerfmt - \ scroll-down - \ scroll-up - \ scrolloff - \ search - \ search-back - \ search-next - \ search-prev - \ select - \ selectfmt - \ selmode - \ setfilter - \ shell - \ shell-async - \ shell-pipe - \ shell-wait - \ shellflag - \ shellopts - \ showbinds - \ sixel - \ smartcase - \ smartdia - \ sortby - \ source - \ statfmt - \ sync - \ tabstop - \ tag - \ tag-toggle - \ tagfmt - \ tempmarks - \ timefmt - \ toggle - \ top - \ truncatechar - \ truncatepct - \ unselect - \ up - \ updir - \ waitmsg - \ watch - \ wrapscan - \ wrapscroll +syn keyword lfOptions + \ anchorfind + \ autoquit + \ borderfmt + \ bottom + \ calcdirsize + \ cd + \ cleaner + \ clear + \ clearmaps + \ cmaps + \ cmd-capitalize-word + \ cmd-complete + \ cmd-delete + \ cmd-delete-back + \ cmd-delete-end + \ cmd-delete-home + \ cmd-delete-unix-word + \ cmd-delete-word + \ cmd-delete-word-back + \ cmd-end + \ cmd-enter + \ cmd-escape + \ cmd-history-next + \ cmd-history-prev + \ cmd-home + \ cmd-interrupt + \ cmd-left + \ cmd-lowercase-word + \ cmd-menu-accept + \ cmd-menu-complete + \ cmd-menu-complete-back + \ cmd-right + \ cmd-transpose + \ cmd-transpose-word + \ cmd-uppercase-word + \ cmd-word + \ cmd-word-back + \ cmd-yank + \ cmds + \ copy + \ copyfmt + \ cursoractivefmt + \ cursorparentfmt + \ cursorpreviewfmt + \ cut + \ cutfmt + \ delete + \ dircache + \ dircounts + \ dirfirst + \ dironly + \ dirpreviews + \ doc + \ down + \ draw + \ drawbox + \ dupfilefmt + \ echo + \ echoerr + \ echomsg + \ errorfmt + \ filesep + \ filter + \ find + \ find-back + \ find-next + \ find-prev + \ findlen + \ glob-select + \ glob-unselect + \ globfilter + \ globsearch + \ half-down + \ half-up + \ hidden + \ hiddenfiles + \ high + \ history + \ icons + \ ifs + \ ignorecase + \ ignoredia + \ incfilter + \ incsearch + \ info + \ infotimefmtnew + \ infotimefmtold + \ invert + \ invert-below + \ jump-next + \ jump-prev + \ load + \ locale + \ low + \ maps + \ mark-load + \ mark-remove + \ mark-save + \ middle + \ mouse + \ number + \ numberfmt + \ on-cd + \ on-focus-gained + \ on-focus-lost + \ on-init + \ on-quit + \ on-redraw + \ on-select + \ open + \ page-down + \ page-up + \ paste + \ period + \ pre-cd + \ preserve + \ preview + \ previewer + \ promptfmt + \ push + \ quit + \ ratios + \ read + \ redraw + \ relativenumber + \ reload + \ rename + \ reverse + \ roundbox + \ rulerfmt + \ scroll-down + \ scroll-up + \ scrolloff + \ search + \ search-back + \ search-next + \ search-prev + \ select + \ selectfmt + \ selmode + \ setfilter + \ shell + \ shell-async + \ shell-pipe + \ shell-wait + \ shellflag + \ shellopts + \ showbinds + \ sixel + \ smartcase + \ smartdia + \ sortby + \ source + \ statfmt + \ sync + \ tabstop + \ tag + \ tag-toggle + \ tagfmt + \ tempmarks + \ timefmt + \ toggle + \ top + \ truncatechar + \ truncatepct + \ unselect + \ up + \ updir + \ waitmsg + \ watch + \ wrapscan + \ wrapscroll "}}} "{{{ Special Matching -syn match lfSpecial '<.*>\|\\.' +syn match lfSpecial '\v\<[^>]+\>' +syn match lfSpecial '\v\\(["\\abfnrtv]|\o+)' "}}} "{{{ Shell Script Matching for cmd let s:shell_syntax = get(g:, 'lf_shell_syntax', "syntax/sh.vim") let s:shell_syntax = get(b:, 'lf_shell_syntax', s:shell_syntax) + unlet b:current_syntax exe 'syn include @Shell '.s:shell_syntax let b:current_syntax = "lf" -syn region lfIgnore start=".{{\n" end="^}}" - \ keepend contains=lfExternalShell,lfExternalPatch -syn match lfShell '\$[a-zA-Z].*$ - \\|:[a-zA-Z].*$ - \\|%[a-zA-Z].*$ - \\|![a-zA-Z].*$ - \\|&[a-zA-Z].*$' - \ transparent contains=@Shell,lfExternalPatch -syn match lfExternalShell "^.*$" transparent contained contains=@Shell -syn match lfExternalPatch "^\s*cmd\ .*\ .{{$\|^}}$" contained + +syn region lfCommand matchgroup=lfCommandMarker start=' \zs:\ze' end='$' keepend transparent +syn region lfCommand matchgroup=lfCommandMarker start=' \zs:{{\ze' end='}}' keepend transparent +syn region lfShell matchgroup=lfShellMarker start=' \zs[$!%&]\ze' end='$' keepend contains=@Shell +syn region lfShell matchgroup=lfShellMarker start=' \zs[$!%&]{{\ze' end='}}' keepend contains=@Shell "}}} "{{{ Link Highlighting -hi def link lfComment Comment -hi def link lfVar Type -hi def link lfSpecial Special -hi def link lfString String -hi def link lfKeyword Statement -hi def link lfOptions Constant -hi def link lfConstant Constant -hi def link lfExternalShell Normal -hi def link lfExternalPatch Special -hi def link lfIgnore Special +hi def link lfComment Comment +hi def link lfSpecial SpecialChar +hi def link lfString String +hi def link lfKeyword Statement +hi def link lfOptions Constant +hi def link lfCommandMarker Special +hi def link lfShellMarker Special "}}} + let &cpo = s:cpo unlet s:cpo From 0b540c6f381c63c2d80cc0aaef76b0df008b9f86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20B=C3=ACnh=20An?= Date: Tue, 8 Apr 2025 20:40:12 +0200 Subject: [PATCH 065/633] runtime(help): add omni completion and 'iskeyword' to filetype plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: - Help tags provide a good way to navigate the Vim documentation, but many help documents don't use them effectively. I think one of the reasons is that help writers have to look up help tags manually with `:help` command, which is not very convenient. - 'iskeyword' is only set for help buffers opened by `:help` command. That means if I'm editing a help file, I cannot jump to tag in same file using `Ctrl-]` unless I manually set it, which is annoying. Solution: - Add omni completion for Vim help tags. - Set 'iskeyword' for `ft-help` closes: #17073 Co-authored-by: Christian Brabandt Signed-off-by: Phạm Bình An Signed-off-by: Christian Brabandt --- runtime/doc/helphelp.txt | 9 +++++++-- runtime/doc/tags | 1 + runtime/ftplugin/help.vim | 28 +++++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/runtime/doc/helphelp.txt b/runtime/doc/helphelp.txt index 7b9dd7671c..26804d546c 100644 --- a/runtime/doc/helphelp.txt +++ b/runtime/doc/helphelp.txt @@ -1,4 +1,4 @@ -*helphelp.txt* For Vim version 9.1. Last change: 2025 Jan 11 +*helphelp.txt* For Vim version 9.1. Last change: 2025 Apr 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -471,8 +471,13 @@ highlighting. So do these: You can find the details in $VIMRUNTIME/syntax/help.vim -GENDER NEUTRAL LANGUAGE +FILETYPE COMPLETION *ft-help-omni* + +To get completion for help tags when writing a tag reference, you can use the +|i_CTRL-X_CTRL-O| command. + +GENDER NEUTRAL LANGUAGE *gender-neutral* *inclusion* Vim is for everybody, no matter race, gender or anything. For new or updated help text, gender neutral language is recommended. Some of the help text is diff --git a/runtime/doc/tags b/runtime/doc/tags index e55623dad4..e0006da548 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7394,6 +7394,7 @@ ft-groff-syntax syntax.txt /*ft-groff-syntax* ft-gsp-syntax syntax.txt /*ft-gsp-syntax* ft-hare filetype.txt /*ft-hare* ft-haskell-syntax syntax.txt /*ft-haskell-syntax* +ft-help-omni helphelp.txt /*ft-help-omni* ft-html-indent indent.txt /*ft-html-indent* ft-html-omni insert.txt /*ft-html-omni* ft-html-syntax syntax.txt /*ft-html-syntax* diff --git a/runtime/ftplugin/help.vim b/runtime/ftplugin/help.vim index b619a7573b..0109c1752c 100644 --- a/runtime/ftplugin/help.vim +++ b/runtime/ftplugin/help.vim @@ -1,7 +1,8 @@ " Vim filetype plugin file " Language: Vim help file " Previous Maintainer: Nikolai Weibull -" Latest Revision: 2018-12-29 +" Last Change: 2025 Apr 08 +" 2025 Apr 08 by Vim project (set 'omnifunc' and 'iskeyword', #17073) if exists("b:did_ftplugin") finish @@ -11,12 +12,33 @@ let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo&vim -let b:undo_ftplugin = "setl fo< tw< cole< cocu< keywordprg<" +let b:undo_ftplugin = "setl isk< fo< tw< cole< cocu< keywordprg< omnifunc<" -setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help +setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help omnifunc=s:HelpComplete +let &l:iskeyword='!-~,^*,^|,^",192-255' if has("conceal") setlocal cole=2 cocu=nc endif +if !exists('*s:HelpComplete') + func s:HelpComplete(findstart, base) + if a:findstart + let colnr = col('.') - 1 " Get the column number before the cursor + let line = getline('.') + for i in range(colnr - 1, 0, -1) + if line[i] ==# '|' + return i + 1 " Don't include the `|` in base + elseif line[i] ==# "'" + return i " Include the `'` in base + endif + endfor + else + return taglist('^' .. a:base) + \ ->map({_, item -> #{word: item->get('name'), kind: item->get('kind')}}) + \ ->extend(getcompletion(a:base, 'help')) + endif + endfunc +endif + let &cpo = s:cpo_save unlet s:cpo_save From 520a2c7852e1f8798fa1cfbe7a7579982145daa1 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Tue, 8 Apr 2025 20:50:00 +0200 Subject: [PATCH 066/633] runtime(vim): Update base-syntax, improve :command highlighting - Match multiline :command definitions. - Match custom completion funcref var names. fixes: #17001 closes: #17067 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/generator/gen_syntax_vim.vim | 6 +- runtime/syntax/generator/vim.vim.base | 77 +++++++++---- .../testdir/dumps/vim_ex_command_00.dump | 18 +-- .../testdir/dumps/vim_ex_command_01.dump | 26 ++--- .../testdir/dumps/vim_ex_command_02.dump | 38 +++--- .../testdir/dumps/vim_ex_command_03.dump | 30 ++--- .../testdir/dumps/vim_ex_command_04.dump | 38 +++--- .../testdir/dumps/vim_ex_command_05.dump | 20 ++++ .../testdir/dumps/vim_ex_command_06.dump | 20 ++++ .../testdir/dumps/vim_ex_command_07.dump | 20 ++++ .../testdir/dumps/vim_ex_command_08.dump | 20 ++++ .../syntax/testdir/input/vim_ex_command.vim | 108 +++++++++++++++--- runtime/syntax/vim.vim | 77 +++++++++---- 13 files changed, 351 insertions(+), 147 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/vim_ex_command_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_command_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_command_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_command_08.dump diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim index 19e5491ebd..b8580790ab 100644 --- a/runtime/syntax/generator/gen_syntax_vim.vim +++ b/runtime/syntax/generator/gen_syntax_vim.vim @@ -1,7 +1,7 @@ " Vim syntax file generator " Language: Vim script " Maintainer: Hirohito Higashi (h_east) -" Last Change: 2025 Mar 09 +" Last Change: 2025 Apr 06 let s:keepcpo= &cpo set cpo&vim @@ -734,9 +734,9 @@ function s:update_syntax_vim_file(vim_info) let lnum = s:search_and_check('vimVarName', base_fname, str_info) let lnum = s:append_syn_any(lnum, str_info, li) - " vimUserAttrbCmplt + " vimUserAttrComplete let li = a:vim_info.compl_name - let lnum = s:search_and_check('vimUserCmdAttrCmplt', base_fname, str_info) + let lnum = s:search_and_check('vimUserCmdAttrComplete', base_fname, str_info) let lnum = s:append_syn_any(lnum, str_info, li) " vimUserAttrbAddr diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 83a61c9b7e..d13d1f09cc 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Apr 05 +" Last Change: 2025 Apr 06 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -614,22 +614,30 @@ syn match vimSpecFileMod "\(:[phtre]\)\+" contained " User-Specified Commands: {{{2 " ======================= syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange -syn keyword vimUserCmdKey contained com[mand] -syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock -syn match vimUserCmd "\!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter -syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)" -syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr -syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError -syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber -syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs -syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange -syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey + +syn match vimUserCmd "\!\=" skipwhite nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang +syn match vimUserCmd +\!\=\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang + +syn region vimUserCmdAttrs contained + \ start="-\l" + \ start=+^\s*\%(\\\|["#]\\ \)+ + \ end="\ze\s\u" + \ skipwhite nextgroup=vimUserCmdName + \ contains=@vimContinue,vimUserCmdAttr,vimUserCmdAttrError + \ transparent +syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)" +syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr +syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrComplete,vimUserCmdError +syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber +syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs +syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange +syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey syn match vimUserCmdAttrNargs contained "[01*?+]" syn match vimUserCmdAttrRange contained "%" @@ -640,17 +648,34 @@ endif syn case ignore syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister] -" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR='' -syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError -syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError + +" GEN_SYN_VIM: vimUserCmdAttrComplete, START_STR='syn keyword vimUserCmdAttrComplete contained', END_STR='' +syn keyword vimUserCmdAttrComplete 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 shellcmdline sign syntax syntime tag tag_listfiles user var +syn keyword vimUserCmdAttrComplete contained custom customlist nextgroup=vimUserCmdAttrCompleteFunc,vimUserCmdError +syn match vimUserCmdAttrCompleteFunc contained ",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 nextgroup=vimUserCmdError contains=vimVarScope,vimFuncSID + " GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR='' -syn match vimUserCmdAttrAddr contained "?" +syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win +syn match vimUserCmdAttrAddr contained "?" syn case match -syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList +syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock,vimUserCmdReplacement +syn match vimUserCmdName contained +\<\u[[:alnum:]]*\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdBlock,vimUserCmdReplacement +syn region vimUserCmdReplacement contained + \ start="\S" + \ start=+^\s*\%(\\\|["#]\\ \)+ + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimContinue,@vimUserCmdList,vimComFilter +syn region vimUserCmdBlock contained + \ matchgroup=vimSep + \ start="{" + \ end="^\s*\zs}" + \ contains=@vimDefBodyList -syn match vimDelcommand "\" skipwhite nextgroup=vimDelcommandAttr -syn match vimDelcommandAttr contained "-buffer\>" +syn match vimDelcommand "\" skipwhite nextgroup=vimDelcommandAttr,vimDelcommandName +syn match vimDelcommandAttr contained "-buffer\>" skipwhite nextgroup=vimDelcommandName +syn match vimDelcommandName contained "\<\u[[:alnum:]]*\>" " Lower Priority Comments: after some vim commands... {{{2 " ======================= @@ -1729,8 +1754,10 @@ if !exists("skip_vim_syntax_inits") hi def link vimUnlet vimCommand hi def link vimUnletBang vimBang hi def link vimUnmap vimMap + hi def link vimUserCmd vimCommand hi def link vimUserCmdAttrAddr vimSpecial - hi def link vimUserCmdAttrCmplt vimSpecial + hi def link vimUserCmdAttrComplete vimSpecial + hi def link vimUserCmdAttrCompleteFunc vimVar hi def link vimUserCmdAttrNargs vimSpecial hi def link vimUserCmdAttrRange vimSpecial hi def link vimUserCmdAttrKey vimUserCmdAttr diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_00.dump b/runtime/syntax/testdir/dumps/vim_ex_command_00.dump index b9326415af..e782ad02ba 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_command_00.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_command_00.dump @@ -1,20 +1,20 @@ >"+0#0000e05#ffffff0| |V|i|m| |:|c|o|m@1|a|n|d|,| |:|d|e|l|c|o|m@1|a|n|d| |a|n|d| |:|c|o|m|c|l|e|a|r| |c|o|m@1|a|n|d|s| +0#0000000&@24 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|U|s|e|r|C|m|d|N|a|m|e| |T|o|d|o| +0#0000000&@23 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|D|e|l|c|o|m@1|a|n|d|N|a|m|e| |T|o|d|o| +0#0000000&@20 @75 @75 |"+0#0000e05&| |l|i|s|t| +0#0000000&@68 @75 |c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@67 -|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F| @65 +|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F+0#0000001#ffff4012| +0#0000000#ffffff0@65 +@75 @75 |"+0#0000e05&| |d|e|f|i|n|e| +0#0000000&@66 @75 -|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@1|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51 -|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51 -|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@38 +|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@1|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51 +@75 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@38 @75 -|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@60 -@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@62 -@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@62 -@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@62 -|}+0#e000e06&| +0#0000000&@73 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@60 @57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_01.dump b/runtime/syntax/testdir/dumps/vim_ex_command_01.dump index 347a4f7985..a653a4d61d 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_command_01.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_command_01.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@74 -|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@60 +|c+0#af5f00255#ffffff0|o|m@1|a|n|d| +0#0000000&@1|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51 +@75 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@38 +@75 +>c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@60 @2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@62 @2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@62 @2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@62 ->}+0#e000e06&| +0#0000000&@73 +|}+0#e000e06&| +0#0000000&@73 @75 |c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| +0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| +0#0000000&|-+0#e000e06&|k|e@1 -|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&|F|o@1| @35 -@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 +|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@24 @75 -|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|,+0#0000000&|C|o|m|p|l|e|t|e|r|1| |F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@23 -|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|l|i|s|t|,+0#0000000&|C|o|m|p|l|e|t|e|r|2| |F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@19 -@75 -|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60 -@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1| |(|d|e|f|i|n|e|d| |i|n| |:|f|u|n|c|t|i|o|n|)|"| +0#0000000&@26 -|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| +0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| +0#0000000&|-+0#e000e06&|k|e@1 +|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@35 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 @75 -|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|2|(+0#e000e06&|)| +0#0000000&@64 -@57|1|9|,|1| @9|2|3|%| +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| +0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| +0#0000000&|-+0#e000e06&|@+0#4040ff13&@2 +| +0#0000000&@56|1|9|,|1| @9|1|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_02.dump b/runtime/syntax/testdir/dumps/vim_ex_command_02.dump index 00a82981ff..9909f2f4da 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_command_02.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_command_02.dump @@ -1,20 +1,20 @@ -|d+0#af5f00255#ffffff0|e|f| +0#0000000&|F|o@1|2|(+0#e000e06&|)| +0#0000000&@64 -@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1| |(|d|e|f|i|n|e|d| |i|n| |:|d|e|f|)|"| +0#0000000&@31 -|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +|c+0#af5f00255#ffffff0|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| +0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| +0#0000000&|-+0#e000e06&|k|e@1 +|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@39 +@6|\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 @75 -|"+0#0000e05&| |m|u|l|t|i|l|i|n|e| |d|e|f|i|n|e| +0#0000000&@56 -> @74 -|"+0#0000e05&| |c|o|m@1|a|n|d|!| +0#0000000&@64 -|"+0#0000e05&| @6|\| |-|a|d@1|r|=|l|i|n|e|s| +0#0000000&@53 -|"+0#0000e05&| @6|\| |-|b|a|n|g| +0#0000000&@59 -|"+0#0000e05&| @6|\| |-|b|a|r| +0#0000000&@60 -|"+0#0000e05&| @6|\| |-|b|u|f@1|e|r| +0#0000000&@57 -|"+0#0000e05&| @6|\| |-|c|o|m|p|l|e|t|e|=|b|u|f@1|e|r| +0#0000000&@48 -|"+0#0000e05&| @6|\| |-|c|o|u|n|t| +0#0000000&@58 -|"+0#0000e05&| @6|\| |-|n|a|r|g|s|=|*| +0#0000000&@56 -|"+0#0000e05&| @6|\| |-|r|a|n|g|e| +0#0000000&@58 -|"+0#0000e05&| @6|\| |-|r|e|g|i|s|t|e|r| +0#0000000&@55 -|"+0#0000e05&| @6|\| |-|k|e@1|p|s|c|r|i|p|t| +0#0000000&@53 -|"+0#0000e05&| @6|\| |F|o@1| | +0#0000000&@60 -|"+0#0000e05&| @6|\| |e|c|h|o| |"+0#e000002&|F|O@1|"| +0#0000000&@54 -@57|3|6|,|0|-|1| @7|5|4|%| +>c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| +0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| +0#0000000&|-+0#e000e06&|k|e@1 +|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@35 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 +@75 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| +0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| +0#0000000&|-+0#e000e06&|k|e@1 +|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@39 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 +@75 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|,+0#0000000&|s+0#00e0e07&|:|C|o|m|p|l|e|t|e|r|1| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@21 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|l|i|s|t|,+0#0000000&|s+0#00e0e07&|:|C|o|m|p|l|e|t|e|r|2| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@17 +@57|3|4|,|1| @9|2@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_03.dump b/runtime/syntax/testdir/dumps/vim_ex_command_03.dump index 0fe7a38d9f..c035fb6d61 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_command_03.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_command_03.dump @@ -1,20 +1,20 @@ -|"+0#0000e05#ffffff0| @6|\| |e|c|h|o| |"+0#e000002&|F|O@1|"| +0#0000000&@54 +|c+0#af5f00255#ffffff0|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|l|i|s|t|,+0#0000000&|s+0#00e0e07&|:|C|o|m|p|l|e|t|e|r|2| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@17 @75 -|"+0#0000e05&| |e|r@1|o|r|s| +0#0000000&@66 -@75 -|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r|=+0#af5f00255#ffffff0|a+0#00e0e07&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r| +0#0000000#ffffff0|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@8 +|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60 +@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1| |(|d|e|f|i|n|e|d| |i|n| |:|f|u|n|c|t|i|o|n|)|"| +0#0000000&@26 +|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 > @74 -|"+0#0000e05&| |d|e|l|e|t|e| +0#0000000&@66 -@75 -|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F|o@1| @60 -|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|F|o@1| @52 +|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|2|(+0#e000e06&|)| +0#0000000&@64 +@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1| |(|d|e|f|i|n|e|d| |i|n| |:|d|e|f|)|"| +0#0000000&@31 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 @75 -|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F|o@1| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@47 -|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|F|o@1| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@39 @75 -|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F|o@1| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@50 -|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|F|o@1| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@42 +|"+0#0000e05&| |m|u|l|t|i|l|i|n|e| |d|e|f|i|n|e| +0#0000000&@56 @75 -|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&@66 -|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@56 -@57|5|4|,|0|-|1| @7|8|7|%| +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|a|d@1|r|=|l+0#00e0003&|i|n|e|s| +0#0000000&@54 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&@61 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&@62 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|b+0#00e0003&|u|f@1|e|r| +0#0000000&@50 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|u|n|t| +0#0000000&@60 +@57|5|0|,|0|-|1| @7|3|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_04.dump b/runtime/syntax/testdir/dumps/vim_ex_command_04.dump index 9700fc3488..a263a186a7 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_command_04.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_command_04.dump @@ -1,20 +1,20 @@ -|c+0#af5f00255#ffffff0|o|m|c|l|e|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@56 -|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@53 +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|u|n|t| +0#0000000&@60 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|a|n|g|e| +0#0000000&@60 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@57 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|k|e@1|p|s|c|r|i|p|t| +0#0000000&@55 +@6>\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56 @75 -@75 -|"+0#0000e05&| |I|s@1|u|e| |#|1|4|1|3|5| +0#0000000&@60 -> @74 -|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#e000e06&|'+0#e000002&|l|s|'|)+0#e000e06&| +0#0000000&@49 -@75 -|~+0#4040ff13&| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -| +0#0000000&@56|7|2|,|0|-|1| @7|B|o|t| +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&@66 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|a|d@1|r|=|l+0#00e0003&|i|n|e|s| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&@61 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&@62 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|b+0#00e0003&|u|f@1|e|r| +0#0000000&@50 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|u|n|t| +0#0000000&@60 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|a|n|g|e| +0#0000000&@60 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@57 +@57|6|8|,|7| @9|4|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_05.dump b/runtime/syntax/testdir/dumps/vim_ex_command_05.dump new file mode 100644 index 0000000000..7b78054c9a --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_command_05.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@57 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|k|e@1|p|s|c|r|i|p|t| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56 +> @74 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&@66 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|a|d@1|r|=|l+0#00e0003&|i|n|e|s| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&@61 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&@62 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&@59 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|b+0#00e0003&|u|f@1|e|r| +0#0000000&@50 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|u|n|t| +0#0000000&@60 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@57|8|6|,|0|-|1| @7|6|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_06.dump b/runtime/syntax/testdir/dumps/vim_ex_command_06.dump new file mode 100644 index 0000000000..4e9926fd8b --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_command_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&@58 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|a|n|g|e| +0#0000000&@60 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6>\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@57 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|k|e@1|p|s|c|r|i|p|t| +0#0000000&@55 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56 +@75 +@75 +|"+0#0000e05&| |e|r@1|o|r|s| +0#0000000&@66 +@75 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r|=+0#0000000#ffffff0|a|r|g|u|m|e|n|t|s| |-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r| +0#0000000#ffffff0|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@8 +@57|1|0|4|,|7| @8|7|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_07.dump b/runtime/syntax/testdir/dumps/vim_ex_command_07.dump new file mode 100644 index 0000000000..3d51e30ef9 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_command_07.dump @@ -0,0 +1,20 @@ +|c+0#af5f00255#ffffff0|o|m@1|a|n|d|!| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r|=+0#0000000#ffffff0|a|r|g|u|m|e|n|t|s| |-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r| +0#0000000#ffffff0|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@8 +@75 +@75 +|"+0#0000e05&| |d|e|l|e|t|e| +0#0000000&@66 +@75 +>d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@60 +|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@52 +@75 +|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@47 +|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@39 +@75 +|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@50 +|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@42 +@75 +|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&@66 +|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@56 +|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@53 +@75 +@75 +@57|1|2@1|,|1| @8|9|2|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_08.dump b/runtime/syntax/testdir/dumps/vim_ex_command_08.dump new file mode 100644 index 0000000000..19a6c36471 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_command_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|"+0#0000e05&| |I|s@1|u|e| |#|1|4|1|3|5| |(|v|i|m|.|v|i|m| |s|y|n|t|a|x| |h|i|g|h|l|i|g|h|t|i|n|g| |b|r|o|k|e|n| |w|r|t| |s|y|s|t|e|m|(|)@1| +0#0000000&@10 +@75 +|c+0#af5f00255&|o|m| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|y|s|t|e|m|(+0#e000e06&|'+0#e000002&|l|s|'|)+0#e000e06&| +0#0000000&@49 +@75 +> @74 +|"+0#0000e05&| |I|s@1|u|e| |#|1|7|0@1|1| |(|W|r|o|n|g| |v|i|m|U|s|e|r|C|m|d|A|t@1|r|E|r@1|o|r| |h|i|g|h|l|i|g|h|t|i|n|g| |i|n| |v|i|m|.|v|i|m|)| +0#0000000&@8 +@75 +|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|f+0#00e0003&|i|l|e| +0#0000000&|M+0#0000001#ffff4012|a|k|e| +0#0000000#ffffff0|A|s|y|n|c|R|u|n| |-+0#af5f00255&|p+0#00e0e07&|r|o|g|r|a|m|=+0#af5f00255&|m+0#00e0e07&|a|k|e| +0#0000000&|@| |<+0#e000e06&|a|r|g|s|> +| +0#0000000&@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|4|0|,|0|-|1| @6|B|o|t| diff --git a/runtime/syntax/testdir/input/vim_ex_command.vim b/runtime/syntax/testdir/input/vim_ex_command.vim index 0873648cb6..4679b08e9c 100644 --- a/runtime/syntax/testdir/input/vim_ex_command.vim +++ b/runtime/syntax/testdir/input/vim_ex_command.vim @@ -1,4 +1,6 @@ " Vim :command, :delcommand and :comclear commands +" VIM_TEST_SETUP highlight link vimUserCmdName Todo +" VIM_TEST_SETUP highlight link vimDelcommandName Todo " list @@ -6,10 +8,12 @@ command command F + " define command Foo echo "Foo" command! Foo echo "Foo" + command! Foo echo "Foo" | echo "Bar" command! Foo { @@ -18,11 +22,27 @@ command! Foo { echo "Baz" } +command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 -keepscript -nargs=* -range=% -register Foo echo "Foo" + +command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 -keepscript -nargs=* -range=% -register Foo + \ echo "Foo" + +command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 -keepscript -nargs=* -range=% -register + \ Foo + \ echo "Foo" + command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 -keepscript -nargs=* -range=% -register Foo + "\ comment \ echo "Foo" -command! -complete=custom,Completer1 Foo echo "Foo" -command! -complete=customlist,Completer2 Foo echo "Foo" +command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 -keepscript -nargs=* -range=% -register + "\ comment + \ Foo + "\ comment + \ echo "Foo" + +command! -complete=custom,s:Completer1 Foo echo "Foo" +command! -complete=customlist,s:Completer2 Foo echo "Foo" function Foo() command! Foo echo "Foo (defined in :function)" @@ -32,43 +52,93 @@ def Foo2() command! Foo echo "Foo (defined in :def)" enddef + " multiline define -" command! -" \ -addr=lines -" \ -bang -" \ -bar -" \ -buffer -" \ -complete=buffer -" \ -count -" \ -nargs=* -" \ -range -" \ -register -" \ -keepscript -" \ Foo -" \ echo "FOO" +command! -addr=lines + \ -bang + \ -bar + \ -buffer + \ -complete=buffer + \ -count + \ -nargs=* + \ -range + \ -register + \ -keepscript + \ Foo + \ echo "Foo" | + \ echo "Bar" + +command! + \ -addr=lines + \ -bang + \ -bar + \ -buffer + \ -complete=buffer + \ -count + \ -nargs=* + \ -range + \ -register + \ -keepscript + \ Foo + \ echo "Foo" | + \ echo "Bar" + +command! + "\ comment + \ -addr=lines + \ -bang + "\ comment + "\ comment + \ -bar + \ -buffer + "\ comment + \ -complete=buffer + "\ comment + \ -count + "\ comment + \ -nargs=* + "\ comment + \ -range + "\ comment + \ -register + "\ comment + \ -keepscript + "\ comment + \ Foo + "\ comment + \ echo "Foo" | + "\ comment + \ echo "Bar" + " errors command! -badattr=arguments -bang -badattr -nargs=* Foo echo "Foo" + " delete delcommand Foo delcommand -buffer Foo -delcommand Foo | echo "..." -delcommand -buffer Foo | echo "..." +delcommand Foo | echo "Foo" +delcommand -buffer Foo | echo "Foo" delcommand Foo " comment delcommand -buffer Foo " comment comclear comclear " comment -comclear | echo "..." +comclear | echo "Foo" -" Issue #14135 +" Issue #14135 (vim.vim syntax highlighting broken wrt system()) com Foo call system('ls') + +" Issue #17001 (Wrong vimUserCmdAttrError highlighting in vim.vim) + +command! -bang -nargs=* -complete=file Make AsyncRun -program=make @ + diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index dcdb6bc542..07c325011a 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -664,22 +664,30 @@ syn match vimSpecFileMod "\(:[phtre]\)\+" contained " User-Specified Commands: {{{2 " ======================= syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange -syn keyword vimUserCmdKey contained com[mand] -syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock -syn match vimUserCmd "\!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter -syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)" -syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr -syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError -syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber -syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs -syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey -syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange -syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey + +syn match vimUserCmd "\!\=" skipwhite nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang +syn match vimUserCmd +\!\=\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang + +syn region vimUserCmdAttrs contained + \ start="-\l" + \ start=+^\s*\%(\\\|["#]\\ \)+ + \ end="\ze\s\u" + \ skipwhite nextgroup=vimUserCmdName + \ contains=@vimContinue,vimUserCmdAttr,vimUserCmdAttrError + \ transparent +syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)" +syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr +syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrComplete,vimUserCmdError +syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber +syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs +syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey +syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange +syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey syn match vimUserCmdAttrNargs contained "[01*?+]" syn match vimUserCmdAttrRange contained "%" @@ -690,19 +698,36 @@ endif syn case ignore syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister] -" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR='' -syn keyword vimUserCmdAttrCmplt 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 shellcmdline sign syntax syntime tag tag_listfiles user var -syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError -syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError + +" GEN_SYN_VIM: vimUserCmdAttrComplete, START_STR='syn keyword vimUserCmdAttrComplete contained', END_STR='' +syn keyword vimUserCmdAttrComplete 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 shellcmdline sign syntax syntime tag tag_listfiles user var +syn keyword vimUserCmdAttrComplete 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 shellcmdline sign syntax syntime tag tag_listfiles user var +syn keyword vimUserCmdAttrComplete contained custom customlist nextgroup=vimUserCmdAttrCompleteFunc,vimUserCmdError +syn match vimUserCmdAttrCompleteFunc contained ",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 nextgroup=vimUserCmdError contains=vimVarScope,vimFuncSID + " GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR='' syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win -syn match vimUserCmdAttrAddr contained "?" +syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win +syn match vimUserCmdAttrAddr contained "?" syn case match -syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList +syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock,vimUserCmdReplacement +syn match vimUserCmdName contained +\<\u[[:alnum:]]*\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdBlock,vimUserCmdReplacement +syn region vimUserCmdReplacement contained + \ start="\S" + \ start=+^\s*\%(\\\|["#]\\ \)+ + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimContinue,@vimUserCmdList,vimComFilter +syn region vimUserCmdBlock contained + \ matchgroup=vimSep + \ start="{" + \ end="^\s*\zs}" + \ contains=@vimDefBodyList -syn match vimDelcommand "\" skipwhite nextgroup=vimDelcommandAttr -syn match vimDelcommandAttr contained "-buffer\>" +syn match vimDelcommand "\" skipwhite nextgroup=vimDelcommandAttr,vimDelcommandName +syn match vimDelcommandAttr contained "-buffer\>" skipwhite nextgroup=vimDelcommandName +syn match vimDelcommandName contained "\<\u[[:alnum:]]*\>" " Lower Priority Comments: after some vim commands... {{{2 " ======================= @@ -1787,8 +1812,10 @@ if !exists("skip_vim_syntax_inits") hi def link vimUnlet vimCommand hi def link vimUnletBang vimBang hi def link vimUnmap vimMap + hi def link vimUserCmd vimCommand hi def link vimUserCmdAttrAddr vimSpecial - hi def link vimUserCmdAttrCmplt vimSpecial + hi def link vimUserCmdAttrComplete vimSpecial + hi def link vimUserCmdAttrCompleteFunc vimVar hi def link vimUserCmdAttrNargs vimSpecial hi def link vimUserCmdAttrRange vimSpecial hi def link vimUserCmdAttrKey vimUserCmdAttr From f9f53f5a8f4c7b3da548914a4552a0c0c572364a Mon Sep 17 00:00:00 2001 From: Joe Reynolds Date: Wed, 9 Apr 2025 19:27:37 +0200 Subject: [PATCH 067/633] runtime(remind): include remind.vim ftplugin closes: #17085 Signed-off-by: Joe Reynolds Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 1 + runtime/ftplugin/remind.vim | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 runtime/ftplugin/remind.vim diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index 68d9a62cfe..01adaa935e 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -270,6 +270,7 @@ runtime/ftplugin/qml.vim @ChaseKnowlden runtime/ftplugin/racket.vim @benknoble runtime/ftplugin/rasi.vim @fymyte runtime/ftplugin/readline.vim @dkearns +runtime/ftplugin/remind.vim @joereynolds runtime/ftplugin/rescript.vim @ribru17 runtime/ftplugin/routeros.vim @zainin runtime/ftplugin/rst.vim @marshallward diff --git a/runtime/ftplugin/remind.vim b/runtime/ftplugin/remind.vim new file mode 100644 index 0000000000..d645845979 --- /dev/null +++ b/runtime/ftplugin/remind.vim @@ -0,0 +1,14 @@ +" Vim filetype plugin file +" Language: Remind - a sophisticated calendar and alarm +" Maintainer: Joe Reynolds +" Latest Revision: 2025 April 08 +" License: Vim (see :h license) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:# commentstring=#\ %s + +let b:undo_ftplugin = "setl cms< com<" From 96a0b2a6d5107580398435e263bd529d4ba3df49 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 9 Apr 2025 19:29:18 +0200 Subject: [PATCH 068/633] patch 9.1.1289: tests: no test for matchparen plugin with WinScrolled event Problem: tests: no test for matchparen plugin with WinScrolled event Solution: add missing test closes: #10942 Signed-off-by: Christian Brabandt --- runtime/plugin/matchparen.vim | 2 +- .../dumps/Test_matchparen_winscrolled1.dump | 7 ++++++ .../dumps/Test_matchparen_winscrolled2.dump | 7 ++++++ src/testdir/test_plugin_matchparen.vim | 24 +++++++++++++++++++ src/version.c | 2 ++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/testdir/dumps/Test_matchparen_winscrolled1.dump create mode 100644 src/testdir/dumps/Test_matchparen_winscrolled2.dump diff --git a/runtime/plugin/matchparen.vim b/runtime/plugin/matchparen.vim index 1c8c9f3294..562148c19e 100644 --- a/runtime/plugin/matchparen.vim +++ b/runtime/plugin/matchparen.vim @@ -1,6 +1,6 @@ " Vim plugin for showing matching parens " Maintainer: The Vim Project -" Last Change: 2025 Mar 14 +" Last Change: 2025 Apr 08 " Former Maintainer: Bram Moolenaar " Exit quickly when: diff --git a/src/testdir/dumps/Test_matchparen_winscrolled1.dump b/src/testdir/dumps/Test_matchparen_winscrolled1.dump new file mode 100644 index 0000000000..60232cf2ec --- /dev/null +++ b/src/testdir/dumps/Test_matchparen_winscrolled1.dump @@ -0,0 +1,7 @@ +|f+0&#ffffff0|o@1|b|a|r| |{+0(ffff15| +0&#ffffff0@66 +@75 +@75 +@75 +>}+0(ffff15| +0&#ffffff0@73 +|~+0#4040ff13&| @73 +| +0#0000000&@56|5|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_matchparen_winscrolled2.dump b/src/testdir/dumps/Test_matchparen_winscrolled2.dump new file mode 100644 index 0000000000..37f3792789 --- /dev/null +++ b/src/testdir/dumps/Test_matchparen_winscrolled2.dump @@ -0,0 +1,7 @@ +| +0&#ffffff0@74 +@75 +@75 +>}| @73 +|~+0#4040ff13&| @73 +|~| @73 +| +0#0000000&@56|5|,|1| @10|B|o|t| diff --git a/src/testdir/test_plugin_matchparen.vim b/src/testdir/test_plugin_matchparen.vim index 13d6e9e11a..dca6e3258b 100644 --- a/src/testdir/test_plugin_matchparen.vim +++ b/src/testdir/test_plugin_matchparen.vim @@ -177,4 +177,28 @@ func Test_matchparen_ignore_sh_case() call StopVimInTerminal(buf) endfunc +" Test for the WinScrolled event +func Test_scroll_winenter() + CheckScreendump + + let lines =<< trim END + source $VIMRUNTIME/plugin/matchparen.vim + set scrolloff=1 + call setline(1, ['foobar {', '', '', '', '}']) + call cursor(5, 1) + END + + let filename = 'Xmatchparen_winscrolled' + call writefile(lines, filename, 'D') + + let buf = RunVimInTerminal('-S '.filename, #{rows: 7}) + call VerifyScreenDump(buf, 'Test_matchparen_winscrolled1', {}) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_matchparen_winscrolled2', {}) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_matchparen_winscrolled1', {}) + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index c9bcdcaaf9..9cfbe0b2a3 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1289, /**/ 1288, /**/ From b0e19f9e1b43328158784ad2429880e0370b5e7b Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 10 Apr 2025 19:54:16 +0200 Subject: [PATCH 069/633] patch 9.1.1290: tests: missing cleanup in test_filetype.vim Problem: tests: missing cleanup in test_filetype.vim, wrong name in test_plugin_matchparen Solution: Add :bwipe corresponding to :split, rename test case closes: #17088 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/testdir/test_filetype.vim | 3 +++ src/testdir/test_plugin_matchparen.vim | 2 +- src/version.c | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index e2286abd38..b3e60e29f3 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -2814,6 +2814,7 @@ func Test_pro_file() call writefile(['x = findgen(100)/10'], 'Xfile.pro', 'D') split Xfile.pro call assert_equal('idlang', &filetype) + bwipe! filetype off endfunc @@ -2847,6 +2848,7 @@ func Test_pl_file() call writefile(['%data = (1, 2, 3);'], 'Xfile.pl', 'D') split Xfile.pl call assert_equal('perl', &filetype) + bwipe! filetype off endfunc @@ -2892,6 +2894,7 @@ func Test_org_file() call writefile(['* org Headline', '*some bold text*', '/some italic text/'], 'Xfile.org', 'D') split Xfile.org call assert_equal('org', &filetype) + bwipe! filetype off endfunc diff --git a/src/testdir/test_plugin_matchparen.vim b/src/testdir/test_plugin_matchparen.vim index dca6e3258b..74563a19a7 100644 --- a/src/testdir/test_plugin_matchparen.vim +++ b/src/testdir/test_plugin_matchparen.vim @@ -178,7 +178,7 @@ func Test_matchparen_ignore_sh_case() endfunc " Test for the WinScrolled event -func Test_scroll_winenter() +func Test_scroll_winscrolled() CheckScreendump let lines =<< trim END diff --git a/src/version.c b/src/version.c index 9cfbe0b2a3..4609244f5d 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1290, /**/ 1289, /**/ From 9b171bdfd6b4c92a43c9690001fb2c8e09cf6a0c Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Thu, 10 Apr 2025 19:59:22 +0200 Subject: [PATCH 070/633] runtime(vim): Update-base-syntax, match full :*grep, :make, :sort and :filter commands closes: #17082 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/generator/gen_syntax_vim.vim | 13 +- runtime/syntax/generator/vim.vim.base | 125 +++++++++++++++- .../testdir/dumps/vim_ex_filter_00.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_grep_00.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_grep_01.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_grep_02.dump | 20 +++ .../testdir/dumps/vim_ex_helpgrep_00.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_make_00.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_make_01.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_make_02.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_sort_00.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_sort_01.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_sort_02.dump | 20 +++ .../syntax/testdir/dumps/vim_ex_sort_03.dump | 20 +++ .../testdir/dumps/vim_ex_vimgrep_00.dump | 20 +++ .../testdir/dumps/vim_ex_vimgrep_01.dump | 20 +++ .../testdir/dumps/vim_ex_vimgrep_02.dump | 20 +++ .../testdir/dumps/vim_ex_vimgrep_03.dump | 20 +++ .../testdir/dumps/vim_ex_vimgrep_04.dump | 20 +++ .../syntax/testdir/input/vim_ex_filter.vim | 13 ++ runtime/syntax/testdir/input/vim_ex_grep.vim | 47 ++++++ .../syntax/testdir/input/vim_ex_helpgrep.vim | 11 ++ runtime/syntax/testdir/input/vim_ex_make.vim | 38 +++++ runtime/syntax/testdir/input/vim_ex_sort.vim | 55 +++++++ .../syntax/testdir/input/vim_ex_vimgrep.vim | 69 +++++++++ runtime/syntax/vim.vim | 135 +++++++++++++++++- 26 files changed, 836 insertions(+), 10 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/vim_ex_filter_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_grep_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_grep_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_grep_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_helpgrep_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_make_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_make_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_make_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_sort_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_sort_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_sort_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_sort_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_vimgrep_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_vimgrep_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_vimgrep_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_vimgrep_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_vimgrep_04.dump create mode 100644 runtime/syntax/testdir/input/vim_ex_filter.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_grep.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_helpgrep.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_make.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_sort.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_vimgrep.vim diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim index b8580790ab..d2bfc5c678 100644 --- a/runtime/syntax/generator/gen_syntax_vim.vim +++ b/runtime/syntax/generator/gen_syntax_vim.vim @@ -1,7 +1,7 @@ " Vim syntax file generator " Language: Vim script " Maintainer: Hirohito Higashi (h_east) -" Last Change: 2025 Apr 06 +" Last Change: 2025 Apr 10 let s:keepcpo= &cpo set cpo&vim @@ -284,14 +284,22 @@ function s:get_vim_command_type(cmd_name) enum execute export + filter final for function + grep + grepadd + helpgrep if interface insert let loadkeymap + lhelpgrep + lvimgrep + lvimgrepadd + make map mapclear match @@ -308,6 +316,7 @@ function s:get_vim_command_type(cmd_name) sleep smagic snomagic + sort static substitute syntax @@ -318,6 +327,8 @@ function s:get_vim_command_type(cmd_name) unmap var vim9script + vimgrep + vimgrepadd while EOL " Required for original behavior diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index d13d1f09cc..2dab30760e 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Apr 06 +" Last Change: 2025 Apr 10 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -230,7 +230,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vim syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1" skip=+\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent +" Filter: {{{2 +" ====== +syn match vimExFilter "\" skipwhite nextgroup=vimExFilterBang,vimExFilterPattern +syn match vimExFilterBang contained "\a\@1<=!" skipwhite nextgroup=vimExFilterPattern +syn region vimExFilterPattern contained + \ start="[[:ident:]]" + \ end="\ze[[:space:]\n]" + \ skipwhite nextgroup=@vimCmdList + \ contains=@vimSubstList + \ oneline +syn region vimExFilterPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:ident:]|"]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=@vimCmdList + \ contains=@vimSubstList + \ oneline + +" Grep and Make: {{{2 +" ============= +" | is the command separator, escaped with \| all other backslashes are passed through literally, no tail comments +syn match vimGrep "\" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep +syn match vimGrepadd "\" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep +syn region vimGrepArgs contained + \ start="|\@!\S" + \ skip=+\n\s*\%(\\\|[#"]\\ \)+ + \ matchgroup=vimCmdSep + \ end="|" + \ end="$" + "\ TODO: include vimSpecFile + \ contains=vimGrepBarEscape +syn match vimGrepBarEscape contained "\\|" +syn match vimGrepBang contained "\a\@1<=!" skipwhite nextgroup=vimGrepArgs,vimCmdSep + +syn match vimMake "\" skipwhite nextgroup=vimMakeBang,vimMakeArgs,vimCmdSep +syn region vimMakeArgs contained + \ start="|\@!\S" + \ skip=+\n\s*\%(\\\|[#"]\\ \)+ + \ matchgroup=vimCmdSep + \ end="|" + \ end="$" + "\ TODO: include vimSpecFile + \ contains=vimMakeBarEscape +syn match vimMakeBarEscape contained "\\|" +syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep + +syn match vimHelpgrep "\" skipwhite nextgroup=vimHelpgrepBang,vimHelpgrepPattern +syn region vimHelpgrepPattern contained + \ start="\S" + \ matchgroup=Special + \ end="@\w\w\>" + \ end="$" + \ contains=@vimSubstList + \ oneline + +" Vimgrep: {{{2 +" ======= +syn match vimVimgrep "\" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern +syn match vimVimgrepadd "\" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern +syn match vimVimgrepBang contained "\a\@1<=!" skipwhite nextgroup=vimVimgrepPattern +syn region vimVimgrepPattern contained + \ start="[[:ident:]]" + \ end="\ze[[:space:]\n]" + \ skipwhite nextgroup=vimVimgrepFile,vimCmdSep + \ contains=@vimSubstList + \ oneline +syn region vimVimgrepPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:ident:]|"]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=vimVimgrepFlags,vimVimgrepFile,vimCmdSep + \ contains=@vimSubstList + \ oneline +syn match vimVimgrepEscape contained "\\\%(\\|\|.\)" +syn match vimVimgrepBarEscape contained "\\|" +syn region vimVimgrepFile contained + \ start="|\@!\S" + \ matchgroup=vimCmdSep + \ end="|" + \ end="\ze\s" + \ end="$" + \ skipwhite nextgroup=vimVimgrepFile + \ contains=vimSpecFile,vimVimgrepEscape,vimVimgrepBarEscape +syn match vimVimgrepFlags contained "\<[gjf]\{,3\}\>" skipwhite nextgroup=vimVimgrepfile + " Maps: {{{2 " ==== " GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs' @@ -1067,6 +1154,23 @@ syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>" +" Sort: {{{2 +" ==== +syn match vimSort "\" skipwhite nextgroup=vimSortBang,@vimSortOptions,vimSortPattern,vimCmdSep +syn match vimSortBang contained "\a\@1<=!" skipwhite nextgroup=@vimSortOptions,vimSortPattern,vimCmdSep +syn match vimSortOptionsError contained "\a\+" +syn match vimSortOptions contained "\<[ilur]*[nfxob]\=[ilur]*\>" skipwhite nextgroup=vimSortPattern,vimCmdSep +syn region vimSortPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:alpha:]|]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=@vimSortOptions,vimCmdSep + \ contains=@vimSubstList + \ oneline + +syn cluster vimSortOptions contains=vimSortOptions,vimSortOptionsError + " Syntax: {{{2 "======= syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial @@ -1525,6 +1629,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimHiKeyError vimError hi def link vimMapModErr vimError hi def link vimShebangError vimError + hi def link vimSortOptionsError Error hi def link vimSubstFlagErr vimError hi def link vimSynCaseError vimError hi def link vimSyncError vimError @@ -1581,6 +1686,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimEnvvar PreProc hi def link vimError Error hi def link vimEscape Special + hi def link vimExFilter vimCommand + hi def link vimExFilterBang vimCommand hi def link vimFBVar vimVar hi def link vimFgBgAttrib vimHiAttrib hi def link vimFuncEcho vimCommand @@ -1598,11 +1705,15 @@ if !exists("skip_vim_syntax_inits") hi def link vimFuncParamEquals vimOper hi def link vimFuncScope vimVarScope hi def link vimFuncSID vimNotation + hi def link vimGrep vimCommand + hi def link vimGrepadd vimCommand + hi def link vimGrepBang vimBang hi def link vimGroupAdd vimSynOption hi def link vimGroupName Normal hi def link vimGroupRem vimSynOption hi def link vimGroupSpecial Special hi def link vimGroup Type + hi def link vimHelpgrep vimCommand hi def link vimHiAttrib PreProc hi def link vimHiBang vimBang hi def link vimHiClear Type @@ -1634,6 +1745,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimLetHereDocStop Special hi def link vimLetRegister vimRegister hi def link vimLineComment vimComment + hi def link vimMake vimCommand + hi def link vimMakeadd vimCommand + hi def link vimMakeBang vimBang hi def link vimMapBang vimBang hi def link vimMapLeader vimBracket hi def link vimMapLeaderKey vimNotation @@ -1701,6 +1815,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimSleep vimCommand hi def link vimSleepArg Constant hi def link vimSleepBang vimBang + hi def link vimSort vimCommand + hi def link vimSortBang vimBang + hi def link vimSortOptions Special hi def link vimSpecFile Identifier hi def link vimSpecFileMod vimSpecFile hi def link vimSpecial Type @@ -1768,6 +1885,10 @@ if !exists("skip_vim_syntax_inits") hi def link vimUserFunc Normal hi def link vimVar Normal hi def link vimVarScope Identifier + hi def link vimVimgrep vimCommand + hi def link vimVimgrepadd vimCommand + hi def link vimVimgrepBang vimBang + hi def link vimVimgrepFlags Special hi def link vimVimVar Identifier hi def link vimVimVarName Identifier hi def link vimWarn WarningMsg diff --git a/runtime/syntax/testdir/dumps/vim_ex_filter_00.dump b/runtime/syntax/testdir/dumps/vim_ex_filter_00.dump new file mode 100644 index 0000000000..46ad3e8e45 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_filter_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|f|i|l|t|e|r| |c|o|m@1|a|n|d| +0#0000000&@53 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|C|m|d|S|e|p| |O|p|e|r|a|t|o|r| +0#0000000&@24 +@75 +@75 +|f+0#af5f00255&|i|l|t|e|r| +0#0000000&@1|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @1|o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&@44 +|f+0#af5f00255&|i|l|t|e|r|!| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @1|o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&@44 +@75 +|f+0#af5f00255&|i|l|t|e|r| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&@43 +|f+0#af5f00255&|i|l|t|e|r|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&@43 +@75 +|f+0#af5f00255&|i|l|t|e|r| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@29 +|f+0#af5f00255&|i|l|t|e|r|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|o+0#af5f00255&|l|d|f|i|l|e|s| +0#0000000&||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@29 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/dumps/vim_ex_grep_00.dump b/runtime/syntax/testdir/dumps/vim_ex_grep_00.dump new file mode 100644 index 0000000000..c23ec04d23 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_grep_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|*|g|r|e|p| |a|n|d| |:|*|g|r|e|p|a|d@1| |c|o|m@1|a|n|d|s| +0#0000000&@39 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|C|m|d|S|e|p| |O|p|e|r|a|t|o|r| +0#0000000&@31 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|G|r|e|p|B|a|r|E|s|c|a|p|e| |S|p|e|c|i|a|l| +0#0000000&@25 +@75 +@75 +|g+0#af5f00255&|r|e|p| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @49 +|l+0#af5f00255&|g|r|e|p| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @49 +@75 +|g+0#af5f00255&|r|e|p|!| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @48 +|l+0#af5f00255&|g|r|e|p|!| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @48 +@75 +|g+0#af5f00255&|r|e|p|a|d@1| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @46 +|l+0#af5f00255&|g|r|e|p|a|d@1| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @46 +@75 +|g+0#af5f00255&|r|e|p|a|d@1|!| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @45 +|l+0#af5f00255&|g|r|e|p|a|d@1|!| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @45 +@75 +@75 +|"+0#0000e05&| |s|p|e|c|i|a|l| |f|i|l|e|n|a|m|e| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@45 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_grep_01.dump b/runtime/syntax/testdir/dumps/vim_ex_grep_01.dump new file mode 100644 index 0000000000..4bfb61327a --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_grep_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|g+0#af5f00255&|r|e|p|a|d@1|!| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @45 +|l+0#af5f00255&|g|r|e|p|a|d@1|!| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| @45 +@75 +@75 +>"+0#0000e05&| |s|p|e|c|i|a|l| |f|i|l|e|n|a|m|e| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@45 +@75 +|g+0#af5f00255&|r|e|p| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |%| @55 +|l+0#af5f00255&|g|r|e|p| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |%| @55 +@75 +|g+0#af5f00255&|r|e|p|!| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |%| @54 +|l+0#af5f00255&|g|r|e|p|!| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |%| @54 +@75 +|g+0#af5f00255&|r|e|p|a|d@1|!| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |%| @51 +|l+0#af5f00255&|g|r|e|p|a|d@1|!| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |%| @51 +@75 +|g+0#af5f00255&|r|e|p|a|d@1|!| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |%| @51 +|l+0#af5f00255&|g|r|e|p|a|d@1|!| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |%| @51 +@75 +@57|1|9|,|1| @9|4|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_grep_02.dump b/runtime/syntax/testdir/dumps/vim_ex_grep_02.dump new file mode 100644 index 0000000000..bce2ea4096 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_grep_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +@75 +|"+0#0000e05&| |t|r|a|i|l|i|n|g| |b|a|r|,| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@43 +@75 +|g+0#af5f00255&|r|e|p| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@36 +>l+0#af5f00255&|g|r|e|p| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@36 +@75 +|g+0#af5f00255&|r|e|p|!| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@35 +|l+0#af5f00255&|g|r|e|p|!| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@35 +@75 +|g+0#af5f00255&|r|e|p|a|d@1| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@33 +|l+0#af5f00255&|g|r|e|p|a|d@1| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@33 +@75 +|g+0#af5f00255&|r|e|p|a|d@1|!| +0#0000000&@1|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@32 +|l+0#af5f00255&|g|r|e|p|a|d@1|!| +0#0000000&|'|p|a|t|\+0#e000e06&|||t+0#0000000&|e|r|n|'| |f|o@1|.|t|x|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@32 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|3|7|,|1| @9|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_helpgrep_00.dump b/runtime/syntax/testdir/dumps/vim_ex_helpgrep_00.dump new file mode 100644 index 0000000000..da8e2ed839 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_helpgrep_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|h|e|l|p|g|r|e|p| |c|o|m@1|a|n|d| +0#0000000&@51 +@75 +@75 +|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:|h|e|l|p| @60 +|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:|h|e|l|p|@+0#e000e06&|e|n| +0#0000000&@57 +|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:|h|\+0#e000e06&|%|(|e+0#0000000&|l|p|\+0#e000e06&|)|\+0#0000000&|=| @53 +@75 +|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:|h|e|l|p| @59 +|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:|h|e|l|p|@+0#e000e06&|e|n| +0#0000000&@56 +|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:|h|\+0#e000e06&|%|(|e+0#0000000&|l|p|\+0#e000e06&|)|\+0#0000000&|=| @52 +@75 +|~+0#4040ff13&| @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_make_00.dump b/runtime/syntax/testdir/dumps/vim_ex_make_00.dump new file mode 100644 index 0000000000..9de6731e94 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_make_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|*|m|a|k|e| |c|o|m@1|a|n|d|s| +0#0000000&@53 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|C|m|d|S|e|p| |O|p|e|r|a|t|o|r| +0#0000000&@24 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|M|a|k|e|B|a|r|E|s|c|a|p|e| |S|p|e|c|i|a|l| +0#0000000&@18 +@75 +@75 +|m+0#af5f00255&|a|k|e| +0#0000000&@70 +|l+0#af5f00255&|m|a|k|e| +0#0000000&@69 +@75 +|m+0#af5f00255&|a|k|e|!| +0#0000000&@69 +|l+0#af5f00255&|m|a|k|e|!| +0#0000000&@68 +@75 +|m+0#af5f00255&|a|k|e| +0#0000000&@1|-|o|p|t|i|o|n|s| |t|a|r|g|e|t| @53 +|l+0#af5f00255&|m|a|k|e| +0#0000000&|-|o|p|t|i|o|n|s| |t|a|r|g|e|t| @53 +@75 +|m+0#af5f00255&|a|k|e|!| +0#0000000&@1|-|o|p|t|i|o|n|s| |t|a|r|g|e|t| @52 +|l+0#af5f00255&|m|a|k|e|!| +0#0000000&|-|o|p|t|i|o|n|s| |t|a|r|g|e|t| @52 +@75 +@75 +|"+0#0000e05&| |s|p|e|c|i|a|l| |f|i|l|e|n|a|m|e| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@45 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_make_01.dump b/runtime/syntax/testdir/dumps/vim_ex_make_01.dump new file mode 100644 index 0000000000..bd89d5abc3 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_make_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|m+0#af5f00255&|a|k|e|!| +0#0000000&@1|-|o|p|t|i|o|n|s| |t|a|r|g|e|t| @52 +|l+0#af5f00255&|m|a|k|e|!| +0#0000000&|-|o|p|t|i|o|n|s| |t|a|r|g|e|t| @52 +@75 +@75 +>"+0#0000e05&| |s|p|e|c|i|a|l| |f|i|l|e|n|a|m|e| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@45 +@75 +|m+0#af5f00255&|a|k|e| +0#0000000&@1|%| @67 +|l+0#af5f00255&|m|a|k|e| +0#0000000&|%| @67 +@75 +@75 +|"+0#0000e05&| |t|r|a|i|l|i|n|g| |b|a|r|,| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@43 +@75 +|m+0#af5f00255&|a|k|e| +0#0000000&@1|t|a|r|\+0#e000e06&|||g+0#0000000&|e|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@47 +|l+0#af5f00255&|m|a|k|e| +0#0000000&|t|a|r|\+0#e000e06&|||g+0#0000000&|e|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@47 +@75 +|m+0#af5f00255&|a|k|e|!| +0#0000000&@1|t|a|r|\+0#e000e06&|||g+0#0000000&|e|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46 +|l+0#af5f00255&|m|a|k|e|!| +0#0000000&|t|a|r|\+0#e000e06&|||g+0#0000000&|e|t| ||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46 +@75 +@57|1|9|,|1| @9|6|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_make_02.dump b/runtime/syntax/testdir/dumps/vim_ex_make_02.dump new file mode 100644 index 0000000000..f8328fe83d --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_make_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|m+0#af5f00255&|a|k|e| +0#0000000&@1||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 +|l+0#af5f00255&|m|a|k|e| +0#0000000&||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 +@75 +|m+0#af5f00255&|a|k|e|!| +0#0000000&@1||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@55 +>l+0#af5f00255&|m|a|k|e|!| +0#0000000&||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@55 +@75 +|~+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_sort_00.dump b/runtime/syntax/testdir/dumps/vim_ex_sort_00.dump new file mode 100644 index 0000000000..616dc2719d --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_sort_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|s|o|r|t| |c|o|m@1|a|n|d| +0#0000000&@55 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|C|m|d|S|e|p| |O|p|e|r|a|t|o|r| +0#0000000&@24 +@75 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@70 +|s+0#af5f00255&|o|r|t|!| +0#0000000&@69 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|i+0#e000e06&|l|u| +0#0000000&@65 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|i+0#e000e06&|l|u| +0#0000000&@65 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|i+0#e000e06&|l|u| +0#0000000&@50 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|i+0#e000e06&|l|u| +0#0000000&@50 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|i|l|u| +0#0000000&@49 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|n+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|n+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|f+0#e000e06&|i|l|u| +0#0000000&@64 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_sort_01.dump b/runtime/syntax/testdir/dumps/vim_ex_sort_01.dump new file mode 100644 index 0000000000..54f457f0fa --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_sort_01.dump @@ -0,0 +1,20 @@ +|s+0#af5f00255#ffffff0|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|i|l|u| +0#0000000&@49 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|n+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|n+0#e000e06&|i|l|u| +0#0000000&@64 +>s+0#af5f00255&|o|r|t| +0#0000000&@1|f+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|f+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|x+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|x+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|o+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|o+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|b+0#e000e06&|i|l|u| +0#0000000&@64 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|b+0#e000e06&|i|l|u| +0#0000000&@64 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|n+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|n+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|x+0#e000e06&|i|l|u| +0#0000000&@49 +@57|1|9|,|1| @9|3|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_sort_02.dump b/runtime/syntax/testdir/dumps/vim_ex_sort_02.dump new file mode 100644 index 0000000000..2ddabe21f5 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_sort_02.dump @@ -0,0 +1,20 @@ +|s+0#af5f00255#ffffff0|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|x+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|x+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|o+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|o+0#e000e06&|i|l|u| +0#0000000&@49 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#e000e06&|i|l|u| +0#0000000&@49 +>s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#e000e06&|i|l|u| +0#0000000&@49 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|n|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|n|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|f|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|f|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|x|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|x|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|o|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|o|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|b|i|l|u| +0#0000000&@48 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|b|i|l|u| +0#0000000&@48 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 +@57|3|7|,|1| @9|8|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_sort_03.dump b/runtime/syntax/testdir/dumps/vim_ex_sort_03.dump new file mode 100644 index 0000000000..ca2ff97889 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_sort_03.dump @@ -0,0 +1,20 @@ +|s+0#af5f00255#ffffff0|o|r|t| +0#0000000&@1||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 +|s+0#af5f00255&|o|r|t|!| +0#0000000&||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56 +@75 +|s+0#af5f00255&|o|r|t| +0#0000000&@1|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|i|l|u| +0#0000000&||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@35 +|s+0#af5f00255&|o|r|t|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|r+0#e000e06&|i|l|u| +0#0000000&||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@35 +> @74 +|~+0#4040ff13&| @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_vimgrep_00.dump b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_00.dump new file mode 100644 index 0000000000..299d8ea1be --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|*|v|i|m|g|r|e|p| |a|n|d| |:|*|v|i|m|g|r|e|p|a|d@1| |c|o|m@1|a|n|d|s| +0#0000000&@33 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|V|i|m|g|r|e|p|F|i|l|e| |T|o|d|o| +0#0000000&@23 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|C|m|d|S|e|p| |O|p|e|r|a|t|o|r| +0#0000000&@24 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|V|i|m|g|r|e|p|B|a|r|E|s|c|a|p|e| |S|p|e|c|i|a|l| +0#0000000&@15 +@75 +@75 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@44 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@44 +@75 +|v+0#af5f00255&|i|m|g|r|e|p|!| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@43 +|v+0#af5f00255&|i|m|g|r|e|p|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@43 +@75 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&|g|j|f| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@41 +@75 +|"+0#0000e05&| |t|r|a|i|l|i|n|g| |b|a|r|,| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@43 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|\+0#e000e06#ffffff0|||a+0#0000001#ffff4012|\+0#e000e06#ffffff0|||r+0#0000001#ffff4012|.|t|x|t| +0#0000000#ffffff0||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@26 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|"|t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|"|a|"|r|.|t|x|t| +0#0000000#ffffff0@2||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@26 +@75 +|v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@41 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_vimgrep_01.dump b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_01.dump new file mode 100644 index 0000000000..869a3b11df --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|"+0#0000e05&| |t|r|a|i|l|i|n|g| |b|a|r|,| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@43 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|\+0#e000e06#ffffff0|||a+0#0000001#ffff4012|\+0#e000e06#ffffff0|||r+0#0000001#ffff4012|.|t|x|t| +0#0000000#ffffff0||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@26 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|"|t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|"|a|"|r|.|t|x|t| +0#0000000#ffffff0@2||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@26 +@75 +>v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@41 +|v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@41 +@75 +|v+0#af5f00255&|i|m|g|r|e|p|a|d@1|!| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@40 +|v+0#af5f00255&|i|m|g|r|e|p|a|d@1|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@40 +@75 +|v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&|g|j|f| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@38 +@75 +|"+0#0000e05&| |t|r|a|i|l|i|n|g| |b|a|r|,| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@43 +|v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|\+0#e000e06#ffffff0|||a+0#0000001#ffff4012|\+0#e000e06#ffffff0|||r+0#0000001#ffff4012|.|t|x|t| +0#0000000#ffffff0||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@23 +|v+0#af5f00255&|i|m|g|r|e|p|a|d@1| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|"|t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|"|a|"|r|.|t|x|t| +0#0000000#ffffff0@2||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@23 +@75 +|l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@43 +|l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@43 +@57|1|9|,|1| @9|2|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_vimgrep_02.dump b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_02.dump new file mode 100644 index 0000000000..fefec2425b --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_02.dump @@ -0,0 +1,20 @@ +|l+0#af5f00255#ffffff0|v|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@43 +@75 +|l+0#af5f00255&|v|i|m|g|r|e|p|!| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@42 +|l+0#af5f00255&|v|i|m|g|r|e|p|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@42 +@75 +>l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&|g|j|f| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@40 +@75 +|"+0#0000e05&| |t|r|a|i|l|i|n|g| |b|a|r|,| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@43 +|l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|\+0#e000e06#ffffff0|||a+0#0000001#ffff4012|\+0#e000e06#ffffff0|||r+0#0000001#ffff4012|.|t|x|t| +0#0000000#ffffff0||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@25 +|l+0#af5f00255&|v|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|"|t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|"|a|"|r|.|t|x|t| +0#0000000#ffffff0@2||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@25 +@75 +|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@40 +|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@40 +@75 +|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1|!| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@39 +|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1|!| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@39 +@75 +|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&|g|j|f| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0@37 +@75 +@57|3|7|,|1| @9|6|2|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_vimgrep_03.dump b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_03.dump new file mode 100644 index 0000000000..4d783e4ba1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_03.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|"+0#0000e05&| |t|r|a|i|l|i|n|g| |b|a|r|,| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@43 +|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|||t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|\+0#e000e06#ffffff0|||a+0#0000001#ffff4012|\+0#e000e06#ffffff0|||r+0#0000001#ffff4012|.|t|x|t| +0#0000000#ffffff0||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@22 +|l+0#af5f00255&|v|i|m|g|r|e|p|a|d@1| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&|"|t|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|b+0#0000001#ffff4012|"|a|"|r|.|t|x|t| +0#0000000#ffffff0@2||+0#af5f00255&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@22 +@75 +> @74 +|"+0#0000e05&| |f|i|l|e| |a|r|g|s| +0#0000000&@63 +@75 +|"+0#0000e05&| |m|u|l|t|i|p|l|e| |f|i|l|e|s| +0#0000000&@58 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0|b+0#0000001#ffff4012|a|r|.|t|x|t| +0#0000000#ffffff0@36 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|f+0#0000001#ffff4012|o@1|.|t|x|t| +0#0000000#ffffff0|b+0#0000001#ffff4012|a|r|.|t|x|t| +0#0000000#ffffff0@36 +@75 +|"+0#0000e05&| |w|i|l|d|c|a|r|d| |p|a|t@1|e|r|n|s| +0#0000000&@55 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|*+0#0000001#ffff4012@1|/|*|.|t|x|t| +0#0000000#ffffff0@43 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|*+0#0000001#ffff4012@1|/|*|.|t|x|t| +0#0000000#ffffff0@43 +@75 +|"+0#0000e05&| |s|p|e|c|i|a|l| |f|i|l|e|n|a|m|e| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@45 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|%+0#0000001#ffff4012| +0#0000000#ffffff0@50 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|%+0#0000001#ffff4012| +0#0000000#ffffff0@50 +@57|5@1|,|0|-|1| @7|9|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_vimgrep_04.dump b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_04.dump new file mode 100644 index 0000000000..a95f118e12 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_04.dump @@ -0,0 +1,20 @@ +|v+0#af5f00255#ffffff0|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|%+0#0000001#ffff4012| +0#0000000#ffffff0@50 +> @74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|6|9|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/input/vim_ex_filter.vim b/runtime/syntax/testdir/input/vim_ex_filter.vim new file mode 100644 index 0000000000..baf28a1ea6 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_filter.vim @@ -0,0 +1,13 @@ +" Vim :filter command +" VIM_TEST_SETUP highlight link vimCmdSep Operator + + +filter pa\%(tt\)ern oldfiles +filter! pa\%(tt\)ern oldfiles + +filter /pa\%(tt\)ern/ oldfiles +filter! /pa\%(tt\)ern/ oldfiles + +filter /pa\%(t|t\)ern/ oldfiles | echo "Foo" +filter! /pa\%(t|t\)ern/ oldfiles | echo "Foo" + diff --git a/runtime/syntax/testdir/input/vim_ex_grep.vim b/runtime/syntax/testdir/input/vim_ex_grep.vim new file mode 100644 index 0000000000..234f2d9620 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_grep.vim @@ -0,0 +1,47 @@ +" Vim :*grep and :*grepadd commands +" VIM_TEST_SETUP hi link vimCmdSep Operator +" VIM_TEST_SETUP hi link vimGrepBarEscape Special + + +grep 'pat\|tern' foo.txt +lgrep 'pat\|tern' foo.txt + +grep! 'pat\|tern' foo.txt +lgrep! 'pat\|tern' foo.txt + +grepadd 'pat\|tern' foo.txt +lgrepadd 'pat\|tern' foo.txt + +grepadd! 'pat\|tern' foo.txt +lgrepadd! 'pat\|tern' foo.txt + + +" special filename characters + +grep 'pat\|tern' % +lgrep 'pat\|tern' % + +grep! 'pat\|tern' % +lgrep! 'pat\|tern' % + +grepadd! 'pat\|tern' % +lgrepadd! 'pat\|tern' % + +grepadd! 'pat\|tern' % +lgrepadd! 'pat\|tern' % + + +" trailing bar, no tail comment + +grep 'pat\|tern' foo.txt | echo "Foo" +lgrep 'pat\|tern' foo.txt | echo "Foo" + +grep! 'pat\|tern' foo.txt | echo "Foo" +lgrep! 'pat\|tern' foo.txt | echo "Foo" + +grepadd 'pat\|tern' foo.txt | echo "Foo" +lgrepadd 'pat\|tern' foo.txt | echo "Foo" + +grepadd! 'pat\|tern' foo.txt | echo "Foo" +lgrepadd! 'pat\|tern' foo.txt | echo "Foo" + diff --git a/runtime/syntax/testdir/input/vim_ex_helpgrep.vim b/runtime/syntax/testdir/input/vim_ex_helpgrep.vim new file mode 100644 index 0000000000..aeef4501d4 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_helpgrep.vim @@ -0,0 +1,11 @@ +" Vim :helpgrep command + + +helpgrep :help +helpgrep :help@en +helpgrep :h\%(elp\)\= + +lhelpgrep :help +lhelpgrep :help@en +lhelpgrep :h\%(elp\)\= + diff --git a/runtime/syntax/testdir/input/vim_ex_make.vim b/runtime/syntax/testdir/input/vim_ex_make.vim new file mode 100644 index 0000000000..7ce87f2e35 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_make.vim @@ -0,0 +1,38 @@ +" Vim :*make commands +" VIM_TEST_SETUP highlight link vimCmdSep Operator +" VIM_TEST_SETUP highlight link vimMakeBarEscape Special + + +make +lmake + +make! +lmake! + +make -options target +lmake -options target + +make! -options target +lmake! -options target + + +" special filename characters + +make % +lmake % + + +" trailing bar, no tail comment + +make tar\|get | echo "Foo" +lmake tar\|get | echo "Foo" + +make! tar\|get | echo "Foo" +lmake! tar\|get | echo "Foo" + +make | echo "Foo" +lmake | echo "Foo" + +make! | echo "Foo" +lmake! | echo "Foo" + diff --git a/runtime/syntax/testdir/input/vim_ex_sort.vim b/runtime/syntax/testdir/input/vim_ex_sort.vim new file mode 100644 index 0000000000..eb95706058 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_sort.vim @@ -0,0 +1,55 @@ +" Vim :sort command +" VIM_TEST_SETUP highlight link vimCmdSep Operator + + +sort +sort! + +sort ilu +sort! ilu + +sort /pa\%(tt\)ern/ ilu +sort! /pa\%(tt\)ern/ ilu + +sort /pa\%(tt\)ern/ rilu +sort! /pa\%(tt\)ern/ rilu + +sort nilu +sort! nilu +sort filu +sort! filu +sort xilu +sort! xilu +sort oilu +sort! oilu +sort bilu +sort! bilu + +sort /pa\%(tt\)ern/ nilu +sort! /pa\%(tt\)ern/ nilu +sort /pa\%(tt\)ern/ filu +sort! /pa\%(tt\)ern/ filu +sort /pa\%(tt\)ern/ xilu +sort! /pa\%(tt\)ern/ xilu +sort /pa\%(tt\)ern/ oilu +sort! /pa\%(tt\)ern/ oilu +sort /pa\%(tt\)ern/ bilu +sort! /pa\%(tt\)ern/ bilu + +sort /pa\%(tt\)ern/ rnilu +sort! /pa\%(tt\)ern/ rnilu +sort /pa\%(tt\)ern/ rfilu +sort! /pa\%(tt\)ern/ rfilu +sort /pa\%(tt\)ern/ rxilu +sort! /pa\%(tt\)ern/ rxilu +sort /pa\%(tt\)ern/ roilu +sort! /pa\%(tt\)ern/ roilu +sort /pa\%(tt\)ern/ rbilu +sort! /pa\%(tt\)ern/ rbilu + +sort | echo "Foo" +sort! | echo "Foo" + +sort /pa\%(t|t\)ern/ rilu | echo "Foo" +sort! /pa\%(t|t\)ern/ rilu | echo "Foo" + diff --git a/runtime/syntax/testdir/input/vim_ex_vimgrep.vim b/runtime/syntax/testdir/input/vim_ex_vimgrep.vim new file mode 100644 index 0000000000..97b9b86f7d --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_vimgrep.vim @@ -0,0 +1,69 @@ +" Vim :*vimgrep and :*vimgrepadd commands +" VIM_TEST_SETUP highlight link vimVimgrepFile Todo +" VIM_TEST_SETUP highlight link vimCmdSep Operator +" VIM_TEST_SETUP highlight link vimVimgrepBarEscape Special + + +vimgrep pa\%(tt\)ern foo.txt +vimgrep /pa\%(tt\)ern/ foo.txt + +vimgrep! pa\%(tt\)ern foo.txt +vimgrep! /pa\%(tt\)ern/ foo.txt + +vimgrep /pa\%(tt\)ern/gjf foo.txt + +" trailing bar, no tail comment +vimgrep /pa\%(t|t\)ern/ b\|a\|r.txt | echo "Foo" +vimgrep /pa\%(t"t\)ern/ b"a"r.txt | echo "Foo" + +vimgrepadd pa\%(tt\)ern foo.txt +vimgrepadd /pa\%(tt\)ern/ foo.txt + +vimgrepadd! pa\%(tt\)ern foo.txt +vimgrepadd! /pa\%(tt\)ern/ foo.txt + +vimgrepadd /pa\%(tt\)ern/gjf foo.txt + +" trailing bar, no tail comment +vimgrepadd /pa\%(t|t\)ern/ b\|a\|r.txt | echo "Foo" +vimgrepadd /pa\%(t"t\)ern/ b"a"r.txt | echo "Foo" + +lvimgrep pa\%(tt\)ern foo.txt +lvimgrep /pa\%(tt\)ern/ foo.txt + +lvimgrep! pa\%(tt\)ern foo.txt +lvimgrep! /pa\%(tt\)ern/ foo.txt + +lvimgrep /pa\%(tt\)ern/gjf foo.txt + +" trailing bar, no tail comment +lvimgrep /pa\%(t|t\)ern/ b\|a\|r.txt | echo "Foo" +lvimgrep /pa\%(t"t\)ern/ b"a"r.txt | echo "Foo" + +lvimgrepadd pa\%(tt\)ern foo.txt +lvimgrepadd /pa\%(tt\)ern/ foo.txt + +lvimgrepadd! pa\%(tt\)ern foo.txt +lvimgrepadd! /pa\%(tt\)ern/ foo.txt + +lvimgrepadd /pa\%(tt\)ern/gjf foo.txt + +" trailing bar, no tail comment +lvimgrepadd /pa\%(t|t\)ern/ b\|a\|r.txt | echo "Foo" +lvimgrepadd /pa\%(t"t\)ern/ b"a"r.txt | echo "Foo" + + +" file args + +" multiple files +vimgrep pa\%(tt\)ern foo.txt bar.txt +vimgrep /pa\%(tt\)ern/ foo.txt bar.txt + +" wildcard patterns +vimgrep pa\%(tt\)ern **/*.txt +vimgrep /pa\%(tt\)ern/ **/*.txt + +" special filename characters +vimgrep pa\%(tt\)ern % +vimgrep /pa\%(tt\)ern/ % + diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 07c325011a..6ab723106d 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Apr 06 +" Last Change: 2025 Apr 10 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -34,11 +34,11 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell " regular vim commands {{{2 " GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang' syn keyword vimCommand contained abo[veleft] 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] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler] con[tinue] conf[irm] nextgroup=vimBang -syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] 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] em[enu] en[dif] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] filt[er] fin[d] fina[lly] 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] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] imp[ort] int[ro] ip[ut] is[earch] nextgroup=vimBang -syn keyword vimCommand contained 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] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] mz[scheme] mzf[ile] n[ext] nb[key] nextgroup=vimBang -syn keyword vimCommand contained 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] pb[uffer] 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] 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] redr[aw] redraws[tatus] redrawt[abline] reg[isters] res[ize] ret[ab] 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] nextgroup=vimBang -syn keyword vimCommand contained sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] 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] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] nextgroup=vimBang -syn keyword vimCommand contained tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] 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] 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 nextgroup=vimBang +syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] 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] em[enu] en[dif] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] imp[ort] int[ro] ip[ut] is[earch] isp[lit] j[oin] ju[mps] k kee[pmarks] nextgroup=vimBang +syn keyword vimCommand contained 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] 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] lw[indow] ls m[ove] ma[rk] marks 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] nextgroup=vimBang +syn keyword vimCommand contained on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pb[uffer] 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] 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] redr[aw] redraws[tatus] redrawt[abline] reg[isters] res[ize] ret[ab] 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] scr[iptnames] scripte[ncoding] nextgroup=vimBang +syn keyword vimCommand contained scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] nextgroup=vimBang +syn keyword vimCommand contained uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] 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 nextgroup=vimBang " Lower priority for _new_ to distinguish constructors from the command. syn match vimCommand contained "\(\@!" @@ -280,7 +280,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vim syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1" skip=+\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent +" Filter: {{{2 +" ====== +syn match vimExFilter "\" skipwhite nextgroup=vimExFilterBang,vimExFilterPattern +syn match vimExFilterBang contained "\a\@1<=!" skipwhite nextgroup=vimExFilterPattern +syn region vimExFilterPattern contained + \ start="[[:ident:]]" + \ end="\ze[[:space:]\n]" + \ skipwhite nextgroup=@vimCmdList + \ contains=@vimSubstList + \ oneline +syn region vimExFilterPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:ident:]|"]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=@vimCmdList + \ contains=@vimSubstList + \ oneline + +" Grep and Make: {{{2 +" ============= +" | is the command separator, escaped with \| all other backslashes are passed through literally, no tail comments +syn match vimGrep "\" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep +syn match vimGrepadd "\" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep +syn region vimGrepArgs contained + \ start="|\@!\S" + \ skip=+\n\s*\%(\\\|[#"]\\ \)+ + \ matchgroup=vimCmdSep + \ end="|" + \ end="$" + "\ TODO: include vimSpecFile + \ contains=vimGrepBarEscape +syn match vimGrepBarEscape contained "\\|" +syn match vimGrepBang contained "\a\@1<=!" skipwhite nextgroup=vimGrepArgs,vimCmdSep + +syn match vimMake "\" skipwhite nextgroup=vimMakeBang,vimMakeArgs,vimCmdSep +syn region vimMakeArgs contained + \ start="|\@!\S" + \ skip=+\n\s*\%(\\\|[#"]\\ \)+ + \ matchgroup=vimCmdSep + \ end="|" + \ end="$" + "\ TODO: include vimSpecFile + \ contains=vimMakeBarEscape +syn match vimMakeBarEscape contained "\\|" +syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep + +syn match vimHelpgrep "\" skipwhite nextgroup=vimHelpgrepBang,vimHelpgrepPattern +syn region vimHelpgrepPattern contained + \ start="\S" + \ matchgroup=Special + \ end="@\w\w\>" + \ end="$" + \ contains=@vimSubstList + \ oneline + +" Vimgrep: {{{2 +" ======= +syn match vimVimgrep "\" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern +syn match vimVimgrepadd "\" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern +syn match vimVimgrepBang contained "\a\@1<=!" skipwhite nextgroup=vimVimgrepPattern +syn region vimVimgrepPattern contained + \ start="[[:ident:]]" + \ end="\ze[[:space:]\n]" + \ skipwhite nextgroup=vimVimgrepFile,vimCmdSep + \ contains=@vimSubstList + \ oneline +syn region vimVimgrepPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:ident:]|"]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=vimVimgrepFlags,vimVimgrepFile,vimCmdSep + \ contains=@vimSubstList + \ oneline +syn match vimVimgrepEscape contained "\\\%(\\|\|.\)" +syn match vimVimgrepBarEscape contained "\\|" +syn region vimVimgrepFile contained + \ start="|\@!\S" + \ matchgroup=vimCmdSep + \ end="|" + \ end="\ze\s" + \ end="$" + \ skipwhite nextgroup=vimVimgrepFile + \ contains=vimSpecFile,vimVimgrepEscape,vimVimgrepBarEscape +syn match vimVimgrepFlags contained "\<[gjf]\{,3\}\>" skipwhite nextgroup=vimVimgrepfile + " Maps: {{{2 " ==== " GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs' @@ -1125,6 +1212,23 @@ syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>" +" Sort: {{{2 +" ==== +syn match vimSort "\" skipwhite nextgroup=vimSortBang,@vimSortOptions,vimSortPattern,vimCmdSep +syn match vimSortBang contained "\a\@1<=!" skipwhite nextgroup=@vimSortOptions,vimSortPattern,vimCmdSep +syn match vimSortOptionsError contained "\a\+" +syn match vimSortOptions contained "\<[ilur]*[nfxob]\=[ilur]*\>" skipwhite nextgroup=vimSortPattern,vimCmdSep +syn region vimSortPattern contained + \ matchgroup=Delimiter + \ start="\z([^[:space:][:alpha:]|]\)" + \ skip="\\\\\|\\\z1" + \ end="\z1" + \ skipwhite nextgroup=@vimSortOptions,vimCmdSep + \ contains=@vimSubstList + \ oneline + +syn cluster vimSortOptions contains=vimSortOptions,vimSortOptionsError + " Syntax: {{{2 "======= syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial @@ -1583,6 +1687,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimHiKeyError vimError hi def link vimMapModErr vimError hi def link vimShebangError vimError + hi def link vimSortOptionsError Error hi def link vimSubstFlagErr vimError hi def link vimSynCaseError vimError hi def link vimSyncError vimError @@ -1639,6 +1744,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimEnvvar PreProc hi def link vimError Error hi def link vimEscape Special + hi def link vimExFilter vimCommand + hi def link vimExFilterBang vimCommand hi def link vimFBVar vimVar hi def link vimFgBgAttrib vimHiAttrib hi def link vimFuncEcho vimCommand @@ -1656,11 +1763,15 @@ if !exists("skip_vim_syntax_inits") hi def link vimFuncParamEquals vimOper hi def link vimFuncScope vimVarScope hi def link vimFuncSID vimNotation + hi def link vimGrep vimCommand + hi def link vimGrepadd vimCommand + hi def link vimGrepBang vimBang hi def link vimGroupAdd vimSynOption hi def link vimGroupName Normal hi def link vimGroupRem vimSynOption hi def link vimGroupSpecial Special hi def link vimGroup Type + hi def link vimHelpgrep vimCommand hi def link vimHiAttrib PreProc hi def link vimHiBang vimBang hi def link vimHiClear Type @@ -1692,6 +1803,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimLetHereDocStop Special hi def link vimLetRegister vimRegister hi def link vimLineComment vimComment + hi def link vimMake vimCommand + hi def link vimMakeadd vimCommand + hi def link vimMakeBang vimBang hi def link vimMapBang vimBang hi def link vimMapLeader vimBracket hi def link vimMapLeaderKey vimNotation @@ -1759,6 +1873,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimSleep vimCommand hi def link vimSleepArg Constant hi def link vimSleepBang vimBang + hi def link vimSort vimCommand + hi def link vimSortBang vimBang + hi def link vimSortOptions Special hi def link vimSpecFile Identifier hi def link vimSpecFileMod vimSpecFile hi def link vimSpecial Type @@ -1826,6 +1943,10 @@ if !exists("skip_vim_syntax_inits") hi def link vimUserFunc Normal hi def link vimVar Normal hi def link vimVarScope Identifier + hi def link vimVimgrep vimCommand + hi def link vimVimgrepadd vimCommand + hi def link vimVimgrepBang vimBang + hi def link vimVimgrepFlags Special hi def link vimVimVar Identifier hi def link vimVimVarName Identifier hi def link vimWarn WarningMsg From 06a41ad084109ae67b949276f16e388fd4d9350a Mon Sep 17 00:00:00 2001 From: Elsarques Date: Thu, 10 Apr 2025 20:04:14 +0200 Subject: [PATCH 071/633] runtime(keymaps): include 2 Brazilian Keymaps closes: #17072 Signed-off-by: Elsarques Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 2 + runtime/keymap/brazilian_portuguese-abnt.vim | 70 ++++++++++++++++++ .../keymap/brazilian_portuguese-compact.vim | 71 +++++++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 runtime/keymap/brazilian_portuguese-abnt.vim create mode 100644 runtime/keymap/brazilian_portuguese-compact.vim diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index 01adaa935e..277a2831d8 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -416,6 +416,8 @@ runtime/indent/xml.vim @chrisbra runtime/indent/zsh.vim @chrisbra runtime/keymap/armenian-eastern_utf-8.vim @blinskey runtime/keymap/armenian-western_utf-8.vim @blinskey +runtime/keymap/brazilian_portuguese-abnt.vim @LuMarquesIlva +runtime/keymap/brazilian_portuguese-compact.vim @LuMarquesIlva runtime/keymap/russian-typograph.vim @RestorerZ runtime/keymap/tamil_tscii.vim @yegappan runtime/keymap/ukrainian-enhanced.vim @Dolfost diff --git a/runtime/keymap/brazilian_portuguese-abnt.vim b/runtime/keymap/brazilian_portuguese-abnt.vim new file mode 100644 index 0000000000..67daff9d68 --- /dev/null +++ b/runtime/keymap/brazilian_portuguese-abnt.vim @@ -0,0 +1,70 @@ +" Vim Keymap file for Brazilian Portuguese - ABNT (without altgr because that would be ABNT2) + +" Maintainer: Elsarques +" Last Changed: 2025-04-06 + +scriptencoding utf-8 + +let b:keymap_name = "abnt" + +loadkeymap +[[ ´ LATIN ACUTE ACCENT +[a á LATIN SMALL LETTER A WITH ACUTE +[e é LATIN SMALL LETTER E WITH ACUTE +[u ú LATIN SMALL LETTER U WITH ACUTE +[i í LATIN SMALL LETTER I WITH ACUTE +[o ó LATIN SMALL LETTER O WITH ACUTE +[A Á LATIN CAPITAL LETTER A WITH ACUTE +[E É LATIN CAPITAL LETTER E WITH ACUTE +[U Ú LATIN CAPITAL LETTER U WITH ACUTE +[I Í LATIN CAPITAL LETTER I WITH ACUTE +[O Ó LATIN CAPITAL LETTER O WITH ACUTE +{{ ` GRAVE +{e è LATIN SMALL LETTER E WITH GRAVE +{a à LATIN SMALL LETTER A WITH GRAVE +{u ù LATIN SMALL LETTER U WITH GRAVE +{i ì LATIN SMALL LETTER I WITH GRAVE +{o ò LATIN SMALL LETTER O WITH GRAVE +{u ù LATIN SMALL LETTER U WITH GRAVE +{E È LATIN CAPITAL LETTER E WITH GRAVE +{A À LATIN CAPITAL LETTER A WITH GRAVE +{U Ù LATIN CAPITAL LETTER U WITH GRAVE +{I Ì LATIN CAPITAL LETTER I WITH GRAVE +{O Ò LATIN CAPITAL LETTER O WITH GRAVE +{U Ù LATIN CAPITAL LETTER U WITH GRAVE +] [ ASCII OPENING BRACKETS +} { ASCII OPENING CURLY BRACKETS +; ç LATIN SMALL LETTER C WITH CEDILLA +: Ç LATIN CAPITAL LETTER C WITH CEDILLA +' ~ ASCII TILDE +'a ã LATIN SMALL LETTER A WITH TILDE +'e ẽ LATIN SMALL LETTER E WITH TILDE +'i ĩ LATIN SMALL LETTER I WITH TILDE +'o õ LATIN SMALL LETTER O WITH TILDE +'u ũ LATIN SMALL LETTER U WITH TILDE +'A à LATIN CAPITAL LETTER A WITH TILDE +'E Ẽ LATIN CAPITAL LETTER E WITH TILDE +'I Ĩ LATIN CAPITAL LETTER I WITH TILDE +'O Õ LATIN CAPITAL LETTER O WITH TILDE +'U Ũ LATIN CAPITAL LETTER U WITH TILDE +\" ^ ASCII CIRCUMFLEX +\"a â LATIN SMALL LETTER A WITH CIRCUMFLEX +\"e ê LATIN SMALL LETTER E WITH CIRCUMFLEX +\"i î LATIN SMALL LETTER I WITH CIRCUMFLEX +\"o ô LATIN SMALL LETTER O WITH CIRCUMFLEX +\"u û LATIN SMALL LETTER U WITH CIRCUMFLEX +\"A  LATIN CAPITAL LETTER A WITH CIRCUMFLEX +\"E Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX +\"I Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX +\"O Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX +\"U Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX +[- | ASCII VERTICAL-BAR +\\ ] ASCII CLOSING BRACKETS +| } ASCII CLOSING CURLY BRACKETS +/ ; ASCII SEMICOLON +? : ASCII COLON +~ " ASCII DOUBLE QUOTES +¬ \\ ASCII BACKSLASH +® | ASCII HORIZONTAL SLASH +[= / ASCII SLASH +'= ? ASCII INTEROGATION diff --git a/runtime/keymap/brazilian_portuguese-compact.vim b/runtime/keymap/brazilian_portuguese-compact.vim new file mode 100644 index 0000000000..1a4a3d4233 --- /dev/null +++ b/runtime/keymap/brazilian_portuguese-compact.vim @@ -0,0 +1,71 @@ +" Vim Keymap file for Brazilian Portuguese - ABNT Compact (for keyboards +" with less keys and without altgr because that would be ABNT2) + +" Maintainer: Elsarques +" Last Changed: 2025-04-06 + +scriptencoding utf-8 + +let b:keymap_name = "abnt-compact" + +loadkeymap +[[ ´ LATIN ACUTE ACCENT +[a á LATIN SMALL LETTER A WITH ACUTE +[e é LATIN SMALL LETTER E WITH ACUTE +[u ú LATIN SMALL LETTER U WITH ACUTE +[i í LATIN SMALL LETTER I WITH ACUTE +[o ó LATIN SMALL LETTER O WITH ACUTE +[A Á LATIN CAPITAL LETTER A WITH ACUTE +[E É LATIN CAPITAL LETTER E WITH ACUTE +[U Ú LATIN CAPITAL LETTER U WITH ACUTE +[I Í LATIN CAPITAL LETTER I WITH ACUTE +[O Ó LATIN CAPITAL LETTER O WITH ACUTE +{{ ` GRAVE +{e è LATIN SMALL LETTER E WITH GRAVE +{a à LATIN SMALL LETTER A WITH GRAVE +{u ù LATIN SMALL LETTER U WITH GRAVE +{i ì LATIN SMALL LETTER I WITH GRAVE +{o ò LATIN SMALL LETTER O WITH GRAVE +{u ù LATIN SMALL LETTER U WITH GRAVE +{E È LATIN CAPITAL LETTER E WITH GRAVE +{A À LATIN CAPITAL LETTER A WITH GRAVE +{U Ù LATIN CAPITAL LETTER U WITH GRAVE +{I Ì LATIN CAPITAL LETTER I WITH GRAVE +{O Ò LATIN CAPITAL LETTER O WITH GRAVE +{U Ù LATIN CAPITAL LETTER U WITH GRAVE +] [ ASCII OPENING BRACKETS +} { ASCII OPENING CURLY BRACKETS +; ç LATIN SMALL LETTER C WITH CEDILLA +: Ç LATIN CAPITAL LETTER C WITH CEDILLA +' ~ ASCII TILDE +'a ã LATIN SMALL LETTER A WITH TILDE +'e ẽ LATIN SMALL LETTER E WITH TILDE +'i ĩ LATIN SMALL LETTER I WITH TILDE +'o õ LATIN SMALL LETTER O WITH TILDE +'u ũ LATIN SMALL LETTER U WITH TILDE +'A à LATIN CAPITAL LETTER A WITH TILDE +'E Ẽ LATIN CAPITAL LETTER E WITH TILDE +'I Ĩ LATIN CAPITAL LETTER I WITH TILDE +'O Õ LATIN CAPITAL LETTER O WITH TILDE +'U Ũ LATIN CAPITAL LETTER U WITH TILDE +[- \\ ASCII BACKSLASH +[= / ASCII SLASH +\" ^ ASCII CIRCUMFLEX +\"a â LATIN SMALL LETTER A WITH CIRCUMFLEX +\"e ê LATIN SMALL LETTER E WITH CIRCUMFLEX +\"i î LATIN SMALL LETTER I WITH CIRCUMFLEX +\"o ô LATIN SMALL LETTER O WITH CIRCUMFLEX +\"u û LATIN SMALL LETTER U WITH CIRCUMFLEX +\"A  LATIN CAPITAL LETTER A WITH CIRCUMFLEX +\"E Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX +\"I Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX +\"O Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX +\"U Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX +\"- | ASCII VERTICAL-BAR +\\ ] ASCII CLOSING BRACKETS +| } ASCII CLOSING CURLY BRACKETS +/ ; ASCII SEMICOLON +? : ASCII COLON +~ " ASCII DOUBLE QUOTES +'- ? ASCII EXCLAMATION +'= | ASCII VERTICAL SLASH From ec032de6465f159bd57c22d464e0f4815f3aefc7 Mon Sep 17 00:00:00 2001 From: John Marriott Date: Thu, 10 Apr 2025 21:34:19 +0200 Subject: [PATCH 072/633] patch 9.1.1291: too many strlen() calls in buffer.c Problem: too many strlen() calls in buffer.c Solution: refactor buffer.c and remove strlen() calls (John Marriott) closes: #17063 Signed-off-by: John Marriott Signed-off-by: Christian Brabandt --- src/buffer.c | 542 ++++++++++++++++++++++++++++---------------------- src/proto.h | 1 + src/strings.c | 27 +++ src/version.c | 2 + 4 files changed, 333 insertions(+), 239 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 90ca596783..955800e3ae 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -45,7 +45,7 @@ static int buf_same_ino(buf_T *buf, stat_T *stp); static int otherfile_buf(buf_T *buf, char_u *ffname); #endif static int value_changed(char_u *str, char_u **last); -static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file); +static int append_arg_number(win_T *wp, char_u *buf, size_t buflen, int add_file); static void free_buffer(buf_T *); static void free_buffer_stuff(buf_T *buf, int free_options); static int bt_nofileread(buf_T *buf); @@ -72,6 +72,19 @@ static int buf_free_count = 0; static int top_file_num = 1; // highest file number static garray_T buf_reuse = GA_EMPTY; // file numbers to recycle +/* + * Calculate the percentage that `part` is of the `whole`. + */ + static int +calc_percentage(long part, long whole) +{ + // With 32 bit longs and more than 21,474,836 lines multiplying by 100 + // causes an overflow, thus for large numbers divide instead. + return (part > 1000000L) + ? (int)(part / (whole / 100L)) + : (int)((part * 100L) / whole); +} + /* * Return the highest possible buffer number. */ @@ -454,7 +467,7 @@ static hashtab_T buf_hashtab; static void buf_hashtab_add(buf_T *buf) { - sprintf((char *)buf->b_key, "%x", buf->b_fnum); + vim_snprintf((char *)buf->b_key, sizeof(buf->b_key), "%x", buf->b_fnum); if (hash_add(&buf_hashtab, buf->b_key, "create buffer") == FAIL) emsg(_(e_buffer_cannot_be_registered)); } @@ -3088,7 +3101,7 @@ buflist_findnr(int nr) if (nr == 0) nr = curwin->w_alt_fnum; - sprintf((char *)key, "%x", nr); + vim_snprintf((char *)key, sizeof(key), "%x", nr); hi = hash_find(&buf_hashtab, key); if (!HASHITEM_EMPTY(hi)) @@ -3385,6 +3398,8 @@ buflist_list(exarg_T *eap) for (buf = firstbuf; buf != NULL && !got_int; buf = buf->b_next) #endif { + char_u *name; + #ifdef FEAT_TERMINAL job_running = term_job_running(buf->b_term); job_none_open = term_none_open(buf->b_term); @@ -3413,8 +3428,9 @@ buflist_list(exarg_T *eap) || (vim_strchr(eap->arg, '#') && (buf == curbuf || curwin->w_alt_fnum != buf->b_fnum))) continue; - if (buf_spname(buf) != NULL) - vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1); + name = buf_spname(buf); + if (name != NULL) + vim_strncpy(NameBuff, name, MAXPATHL - 1); else home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE); if (message_filtered(NameBuff)) @@ -3439,7 +3455,7 @@ buflist_list(exarg_T *eap) ro_char = !buf->b_p_ma ? '-' : (buf->b_p_ro ? '=' : ' '); msg_putchar('\n'); - len = vim_snprintf((char *)IObuff, IOSIZE - 20, "%3d%c%c%c%c%c \"%s\"", + len = (int)vim_snprintf_safelen((char *)IObuff, IOSIZE - 20, "%3d%c%c%c%c%c \"%s\"", buf->b_fnum, buf->b_p_bl ? ' ' : 'u', buf == curbuf ? '%' : @@ -3449,8 +3465,6 @@ buflist_list(exarg_T *eap) ro_char, changed_char, NameBuff); - if (len > IOSIZE - 20) - len = IOSIZE - 20; // put "line 999" in column 40 or after the file name i = 40 - vim_strsize(IObuff); @@ -3850,83 +3864,81 @@ fileinfo( int dont_truncate) { char_u *name; - int n; - char *p; char *buffer; - size_t len; + size_t bufferlen = 0; buffer = alloc(IOSIZE); if (buffer == NULL) return; if (fullname > 1) // 2 CTRL-G: include buffer number - { - vim_snprintf(buffer, IOSIZE, "buf %d: ", curbuf->b_fnum); - p = buffer + STRLEN(buffer); - } - else - p = buffer; + bufferlen = vim_snprintf_safelen(buffer, IOSIZE, "buf %d: ", curbuf->b_fnum); + + buffer[bufferlen++] = '"'; - *p++ = '"'; - if (buf_spname(curbuf) != NULL) - vim_strncpy((char_u *)p, buf_spname(curbuf), IOSIZE - (p - buffer) - 1); + name = buf_spname(curbuf); + if (name != NULL) + bufferlen += vim_snprintf_safelen(buffer + bufferlen, + IOSIZE - bufferlen, "%s", name); else { if (!fullname && curbuf->b_fname != NULL) name = curbuf->b_fname; else name = curbuf->b_ffname; - home_replace(shorthelp ? curbuf : NULL, name, (char_u *)p, - (int)(IOSIZE - (p - buffer)), TRUE); + home_replace(shorthelp ? curbuf : NULL, name, (char_u *)buffer + bufferlen, + IOSIZE - (int)bufferlen, TRUE); + bufferlen += STRLEN(buffer + bufferlen); } - vim_snprintf_add(buffer, IOSIZE, "\"%s%s%s%s%s%s", - curbufIsChanged() ? (shortmess(SHM_MOD) - ? " [+]" : _(" [Modified]")) : " ", - (curbuf->b_flags & BF_NOTEDITED) && !bt_dontwrite(curbuf) - ? _("[Not edited]") : "", - (curbuf->b_flags & BF_NEW) && !bt_dontwrite(curbuf) - ? new_file_message() : "", - (curbuf->b_flags & BF_READERR) ? _("[Read errors]") : "", - curbuf->b_p_ro ? (shortmess(SHM_RO) ? _("[RO]") - : _("[readonly]")) : "", - (curbufIsChanged() || (curbuf->b_flags & BF_WRITE_MASK) - || curbuf->b_p_ro) ? - " " : ""); - // With 32 bit longs and more than 21,474,836 lines multiplying by 100 - // causes an overflow, thus for large numbers divide instead. - if (curwin->w_cursor.lnum > 1000000L) - n = (int)(((long)curwin->w_cursor.lnum) / - ((long)curbuf->b_ml.ml_line_count / 100L)); - else - n = (int)(((long)curwin->w_cursor.lnum * 100L) / - (long)curbuf->b_ml.ml_line_count); + bufferlen += vim_snprintf_safelen( + buffer + bufferlen, + IOSIZE - bufferlen, + "\"%s%s%s%s%s%s", + curbufIsChanged() ? (shortmess(SHM_MOD) + ? " [+]" : _(" [Modified]")) : " ", + (curbuf->b_flags & BF_NOTEDITED) && !bt_dontwrite(curbuf) + ? _("[Not edited]") : "", + (curbuf->b_flags & BF_NEW) && !bt_dontwrite(curbuf) + ? new_file_message() : "", + (curbuf->b_flags & BF_READERR) ? _("[Read errors]") : "", curbuf->b_p_ro + ? (shortmess(SHM_RO) ? _("[RO]") : _("[readonly]")) : "", + (curbufIsChanged() || (curbuf->b_flags & BF_WRITE_MASK) || curbuf->b_p_ro) + ? " " : ""); + if (curbuf->b_ml.ml_flags & ML_EMPTY) - vim_snprintf_add(buffer, IOSIZE, "%s", _(no_lines_msg)); + bufferlen += vim_snprintf_safelen(buffer + bufferlen, + IOSIZE - bufferlen, "%s", _(no_lines_msg)); else if (p_ru) // Current line and column are already on the screen -- webb - vim_snprintf_add(buffer, IOSIZE, - NGETTEXT("%ld line --%d%%--", "%ld lines --%d%%--", - curbuf->b_ml.ml_line_count), - (long)curbuf->b_ml.ml_line_count, n); + bufferlen += vim_snprintf_safelen( + buffer + bufferlen, + IOSIZE - bufferlen, + NGETTEXT("%ld line --%d%%--", "%ld lines --%d%%--", curbuf->b_ml.ml_line_count), + (long)curbuf->b_ml.ml_line_count, + calc_percentage(curwin->w_cursor.lnum, curbuf->b_ml.ml_line_count)); else { - vim_snprintf_add(buffer, IOSIZE, - _("line %ld of %ld --%d%%-- col "), - (long)curwin->w_cursor.lnum, - (long)curbuf->b_ml.ml_line_count, - n); + bufferlen += vim_snprintf_safelen( + buffer + bufferlen, + IOSIZE - bufferlen, + _("line %ld of %ld --%d%%-- col "), + (long)curwin->w_cursor.lnum, + (long)curbuf->b_ml.ml_line_count, + calc_percentage(curwin->w_cursor.lnum, curbuf->b_ml.ml_line_count)); + validate_virtcol(); - len = STRLEN(buffer); - (void)col_print((char_u *)buffer + len, IOSIZE - len, + bufferlen += col_print((char_u *)buffer + bufferlen, IOSIZE - bufferlen, (int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1); } - (void)append_arg_number(curwin, (char_u *)buffer, IOSIZE, - !shortmess(SHM_FILE)); + (void)append_arg_number(curwin, (char_u *)buffer + bufferlen, + IOSIZE - bufferlen, !shortmess(SHM_FILE)); if (dont_truncate) { + int n; + // Temporarily set msg_scroll to avoid the message being truncated. // First call msg_start() to get the message in the right place. msg_start(); @@ -3937,7 +3949,7 @@ fileinfo( } else { - p = msg_trunc_attr(buffer, FALSE, 0); + char *p = msg_trunc_attr(buffer, FALSE, 0); if (restart_edit != 0 || (msg_scrolled && !need_wait_return)) // Need to repeat the message after redrawing when: // - When restart_edit is set (otherwise there will be a delay @@ -3958,9 +3970,9 @@ col_print( int vcol) { if (col == vcol) - return vim_snprintf((char *)buf, buflen, "%d", col); + return (int)vim_snprintf_safelen((char *)buf, buflen, "%d", col); - return vim_snprintf((char *)buf, buflen, "%d-%d", col, vcol); + return (int)vim_snprintf_safelen((char *)buf, buflen, "%d-%d", col, vcol); } static char_u *lasttitle = NULL; @@ -3972,14 +3984,11 @@ static char_u *lasticon = NULL; void maketitle(void) { - char_u *p; char_u *title_str = NULL; char_u *icon_str = NULL; - int maxlen = 0; - int len; int mustset; char_u buf[IOSIZE]; - int off; + size_t buflen = 0; if (!redrawing()) { @@ -3994,6 +4003,8 @@ maketitle(void) if (p_title) { + int maxlen = 0; + if (p_titlelen > 0) { maxlen = p_titlelen * Columns / 100; @@ -4012,51 +4023,90 @@ maketitle(void) else #endif title_str = p_titlestring; + buflen = STRLEN(title_str); } else { - // format: "fname + (path) (1 of 2) - VIM" + char_u *p; + + // format: " [flags] <(path)> [argument info] <- servername>" + // example: + // buffer.c + (/home/vim/src) (1 of 2) - VIM + + // reserve some space for different parts of the title. + // use sizeof() to introduce 'size_t' so we don't have to + // cast sizes to it. +#define SPACE_FOR_FNAME (sizeof(buf) - 100) +#define SPACE_FOR_DIR (sizeof(buf) - 20) +#define SPACE_FOR_ARGNR (sizeof(buf) - 10) // at least room for " - VIM" -#define SPACE_FOR_FNAME (IOSIZE - 100) -#define SPACE_FOR_DIR (IOSIZE - 20) -#define SPACE_FOR_ARGNR (IOSIZE - 10) // at least room for " - VIM" + // file name if (curbuf->b_fname == NULL) - vim_strncpy(buf, (char_u *)_("[No Name]"), SPACE_FOR_FNAME); + buflen = vim_snprintf_safelen((char *)buf, + SPACE_FOR_FNAME, "%s", _("[No Name]")); #ifdef FEAT_TERMINAL else if (curbuf->b_term != NULL) - { - vim_strncpy(buf, term_get_status_text(curbuf->b_term), - SPACE_FOR_FNAME); - } + buflen = vim_snprintf_safelen((char *)buf, + SPACE_FOR_FNAME, "%s", + term_get_status_text(curbuf->b_term)); #endif else { - p = transstr(gettail(curbuf->b_fname)); - if (p != NULL) - { - vim_strncpy(buf, p, SPACE_FOR_FNAME); - vim_free(p); - } - else - STRCPY(buf, ""); + buflen = vim_snprintf_safelen((char *)buf, + SPACE_FOR_FNAME, "%s", + ((p = transstr(gettail(curbuf->b_fname))) != NULL) + ? p + : (char_u *)""); + vim_free(p); } + // flags #ifdef FEAT_TERMINAL if (curbuf->b_term == NULL) #endif + { switch (bufIsChanged(curbuf) + (curbuf->b_p_ro * 2) + (!curbuf->b_p_ma * 4)) { - case 1: STRCAT(buf, " +"); break; - case 2: STRCAT(buf, " ="); break; - case 3: STRCAT(buf, " =+"); break; + case 1: + // file was modified + buflen += vim_snprintf_safelen( + (char *)buf + buflen, + sizeof(buf) - buflen, " +"); + break; + case 2: + // file is readonly + buflen += vim_snprintf_safelen( + (char *)buf + buflen, + sizeof(buf) - buflen, " ="); + break; + case 3: + // file was modified and is readonly + buflen += vim_snprintf_safelen( + (char *)buf + buflen, + sizeof(buf) - buflen, " =+"); + break; case 4: - case 6: STRCAT(buf, " -"); break; + case 6: + // file cannot be modified + buflen += vim_snprintf_safelen( + (char *)buf + buflen, + sizeof(buf) - buflen, " -"); + break; case 5: - case 7: STRCAT(buf, " -+"); break; + case 7: + // file cannot be modified but was modified + buflen += vim_snprintf_safelen( + (char *)buf + buflen, + sizeof(buf) - buflen, " -+"); + break; + default: + break; } + } + // path (surrounded by '()') if (curbuf->b_fname != NULL #ifdef FEAT_TERMINAL && curbuf->b_term == NULL @@ -4064,64 +4114,69 @@ maketitle(void) ) { // Get path of file, replace home dir with ~ - off = (int)STRLEN(buf); - buf[off++] = ' '; - buf[off++] = '('; + buflen += vim_snprintf_safelen((char *)buf + buflen, + sizeof(buf) - buflen, " ("); + home_replace(curbuf, curbuf->b_ffname, - buf + off, SPACE_FOR_DIR - off, TRUE); + buf + buflen, (int)(SPACE_FOR_DIR - buflen), TRUE); + #ifdef BACKSLASH_IN_FILENAME // avoid "c:/name" to be reduced to "c" - if (SAFE_isalpha(buf[off]) && buf[off + 1] == ':') - off += 2; + if (SAFE_isalpha(buf[buflen]) && buf[buflen + 1] == ':') + buflen += 2; // step over "c:" #endif - // remove the file name - p = gettail_sep(buf + off); - if (p == buf + off) + + // determine if we have a help or normal buffer + p = gettail_sep(buf + buflen); + if (p == buf + buflen) { - // must be a help buffer - vim_strncpy(buf + off, (char_u *)_("help"), - (size_t)(SPACE_FOR_DIR - off - 1)); + // help buffer + buflen += vim_snprintf_safelen((char *)buf + buflen, + SPACE_FOR_DIR - buflen, "%s)", _("help")); } else - *p = NUL; - - // Translate unprintable chars and concatenate. Keep some - // room for the server name. When there is no room (very long - // file name) use (...). - if (off < SPACE_FOR_DIR) { - p = transstr(buf + off); - if (p != NULL) + // normal buffer + + // Translate unprintable chars and concatenate. Keep some + // room for the server name. When there is no room (very long + // file name) use (...). + if (buflen < SPACE_FOR_DIR) { - vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off)); + // remove the file name + *p = NUL; + + buflen += vim_snprintf_safelen((char *)buf + buflen, + SPACE_FOR_DIR - buflen, "%s)", + ((p = transstr(buf + buflen)) != NULL) + ? p + : (char_u *)""); vim_free(p); } + else + buflen += vim_snprintf_safelen((char *)buf + buflen, + SPACE_FOR_ARGNR - buflen, "...)"); } - else - { - vim_strncpy(buf + off, (char_u *)"...", - (size_t)(SPACE_FOR_ARGNR - off)); - } - STRCAT(buf, ")"); } - append_arg_number(curwin, buf, SPACE_FOR_ARGNR, FALSE); + // argument info + buflen += append_arg_number(curwin, buf + buflen, + SPACE_FOR_ARGNR - buflen, FALSE); + // servername + buflen += vim_snprintf_safelen((char *)buf + buflen, + sizeof(buf) - buflen, " - %s", #if defined(FEAT_CLIENTSERVER) - if (serverName != NULL) - { - STRCAT(buf, " - "); - vim_strcat(buf, serverName, IOSIZE); - } - else + (serverName != NULL) + ? serverName : #endif - STRCAT(buf, " - VIM"); + (char_u *)"VIM"); if (maxlen > 0) { // make it shorter by removing a bit in the middle if (vim_strsize(buf) > maxlen) - trunc_string(buf, buf, maxlen, IOSIZE); + trunc_string(buf, buf, maxlen, sizeof(buf)); } } } @@ -4142,22 +4197,23 @@ maketitle(void) } else { - if (buf_spname(curbuf) != NULL) - p = buf_spname(curbuf); - else // use file name only in icon - p = gettail(curbuf->b_ffname); - *icon_str = NUL; + char_u *name; + int namelen; + + name = buf_spname(curbuf); + if (name == NULL) + name = gettail(curbuf->b_ffname); // Truncate name at 100 bytes. - len = (int)STRLEN(p); - if (len > 100) + namelen = (int)STRLEN(name); + if (namelen > 100) { - len -= 100; + namelen -= 100; if (has_mbyte) - len += (*mb_tail_off)(p, p + len) + 1; - p += len; + namelen += (*mb_tail_off)(name, name + namelen) + 1; + name += namelen; } - STRCPY(icon_str, p); - trans_characters(icon_str, IOSIZE); + STRCPY(buf, name); + trans_characters(buf, sizeof(buf)); } } @@ -4270,18 +4326,15 @@ build_stl_str_hl( { linenr_T lnum; colnr_T len; + size_t outputlen; // length of out[] used (excluding the NUL) char_u *p; char_u *s; - char_u *t; int byteval; #ifdef FEAT_EVAL int use_sandbox; - win_T *save_curwin; - buf_T *save_curbuf; int save_VIsual_active; #endif int empty_line; - colnr_T virtcol; long l; long n; int prevchar_isflag; @@ -4293,8 +4346,6 @@ build_stl_str_hl( int width; int itemcnt; int curitem; - int group_end_userhl; - int group_start_userhl; int groupdepth; #ifdef FEAT_EVAL int evaldepth; @@ -4306,7 +4357,6 @@ build_stl_str_hl( char_u opt; #define TMPLEN 70 char_u buf_tmp[TMPLEN]; - char_u win_tmp[TMPLEN]; char_u *usefmt = fmt; stl_hlrec_T *sp; int save_redraw_not_allowed = redraw_not_allowed; @@ -4429,7 +4479,7 @@ build_stl_str_hl( sizeof(int) * new_len); if (new_separator_locs == NULL) break; - stl_separator_locations = new_separator_locs;; + stl_separator_locations = new_separator_locs; stl_items_len = new_len; } @@ -4478,6 +4528,8 @@ build_stl_str_hl( } if (*s == ')') { + char_u *t; + s++; if (groupdepth < 1) continue; @@ -4489,9 +4541,11 @@ build_stl_str_hl( if (curitem > stl_groupitem[groupdepth] + 1 && stl_items[stl_groupitem[groupdepth]].stl_minwid == 0) { + int group_start_userhl = 0; + int group_end_userhl = 0; + // remove group if all items are empty and highlight group // doesn't change - group_start_userhl = group_end_userhl = 0; for (n = stl_groupitem[groupdepth] - 1; n >= 0; n--) { if (stl_items[n].stl_type == Highlight) @@ -4693,12 +4747,16 @@ build_stl_str_hl( case STL_FILEPATH: case STL_FULLPATH: case STL_FILENAME: + { + char_u *name; + fillable = FALSE; // don't change ' ' to fillchar - if (buf_spname(wp->w_buffer) != NULL) - vim_strncpy(NameBuff, buf_spname(wp->w_buffer), MAXPATHL - 1); + name = buf_spname(wp->w_buffer); + if (name != NULL) + vim_strncpy(NameBuff, name, MAXPATHL - 1); else { - t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname + char_u *t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname : wp->w_buffer->b_fname; home_replace(wp->w_buffer, t, NameBuff, MAXPATHL, TRUE); } @@ -4708,13 +4766,17 @@ build_stl_str_hl( else str = gettail(NameBuff); break; + } case STL_VIM_EXPR: // '{' { #ifdef FEAT_EVAL - char_u *block_start = s - 1; + char_u *block_start = s - 1; #endif - int reevaluate = (*s == '%'); + int reevaluate = (*s == '%'); + char_u *t; + buf_T *save_curbuf; + win_T *save_curwin; if (reevaluate) s++; @@ -4727,16 +4789,16 @@ build_stl_str_hl( break; s++; if (reevaluate) - p[-1] = 0; // remove the % at the end of %{% expr %} + p[-1] = NUL; // remove the % at the end of %{% expr %} else - *p = 0; + *p = NUL; p = t; #ifdef FEAT_EVAL vim_snprintf((char *)buf_tmp, sizeof(buf_tmp), "%d", curbuf->b_fnum); set_internal_string_var((char_u *)"g:actual_curbuf", buf_tmp); - vim_snprintf((char *)win_tmp, sizeof(win_tmp), "%d", curwin->w_id); - set_internal_string_var((char_u *)"g:actual_curwin", win_tmp); + vim_snprintf((char *)buf_tmp, sizeof(buf_tmp), "%d", curwin->w_id); + set_internal_string_var((char_u *)"g:actual_curwin", buf_tmp); save_curbuf = curbuf; save_curwin = curwin; @@ -4755,7 +4817,7 @@ build_stl_str_hl( do_unlet((char_u *)"g:actual_curbuf", TRUE); do_unlet((char_u *)"g:actual_curwin", TRUE); - if (str != NULL && *str != 0) + if (str != NULL && *str != NUL) { if (*skipdigits(str) == NUL) { @@ -4767,30 +4829,19 @@ build_stl_str_hl( // If the output of the expression needs to be evaluated // replace the %{} block with the result of evaluation - if (reevaluate && str != NULL && *str != 0 + if (reevaluate && str != NULL && *str != NUL && strchr((const char *)str, '%') != NULL && evaldepth < MAX_STL_EVAL_DEPTH) { size_t parsed_usefmt = (size_t)(block_start - usefmt); - size_t str_length = strlen((const char *)str); - size_t fmt_length = strlen((const char *)s); - size_t new_fmt_len = parsed_usefmt - + str_length + fmt_length + 3; - char_u *new_fmt = (char_u *)alloc(new_fmt_len * sizeof(char_u)); + size_t new_fmt_len = (parsed_usefmt + + STRLEN(str) + STRLEN(s) + 3) * sizeof(char_u); + char_u *new_fmt = (char_u *)alloc(new_fmt_len); if (new_fmt != NULL) { - char_u *new_fmt_p = new_fmt; - - new_fmt_p = (char_u *)memcpy(new_fmt_p, usefmt, parsed_usefmt) - + parsed_usefmt; - new_fmt_p = (char_u *)memcpy(new_fmt_p , str, str_length) - + str_length; - new_fmt_p = (char_u *)memcpy(new_fmt_p, "%}", 2) + 2; - new_fmt_p = (char_u *)memcpy(new_fmt_p , s, fmt_length) - + fmt_length; - *new_fmt_p = 0; - new_fmt_p = NULL; + vim_snprintf((char *)new_fmt, new_fmt_len, "%.*s%s%s%s", + (int)parsed_usefmt, usefmt, str, "%}", s); if (usefmt != fmt) vim_free(usefmt); @@ -4820,7 +4871,9 @@ build_stl_str_hl( case STL_VIRTCOL: case STL_VIRTCOL_ALT: - virtcol = wp->w_virtcol + 1; + { + colnr_T virtcol = wp->w_virtcol + 1; + // Don't display %V if it's the same as %c. if (opt == STL_VIRTCOL_ALT && (virtcol == (colnr_T)((State & MODE_INSERT) == 0 @@ -4828,10 +4881,10 @@ build_stl_str_hl( break; num = (long)virtcol; break; + } case STL_PERCENTAGE: - num = (int)(((long)wp->w_cursor.lnum * 100L) / - (long)wp->w_buffer->b_ml.ml_line_count); + num = calc_percentage((long)wp->w_cursor.lnum, (long)wp->w_buffer->b_ml.ml_line_count); break; case STL_ALTPERCENT: @@ -4846,8 +4899,8 @@ build_stl_str_hl( case STL_ARGLISTSTAT: fillable = FALSE; - buf_tmp[0] = 0; - if (append_arg_number(wp, buf_tmp, (int)sizeof(buf_tmp), FALSE)) + buf_tmp[0] = NUL; + if (append_arg_number(wp, buf_tmp, sizeof(buf_tmp), FALSE) > 0) str = buf_tmp; break; @@ -4921,6 +4974,8 @@ build_stl_str_hl( if (*wp->w_buffer->b_p_ft != NUL && STRLEN(wp->w_buffer->b_p_ft) < TMPLEN - 2) { + char_u *t; + vim_snprintf((char *)buf_tmp, sizeof(buf_tmp), ",%s", wp->w_buffer->b_p_ft); for (t = buf_tmp; *t != 0; t++) @@ -4963,26 +5018,30 @@ build_stl_str_hl( break; case STL_HIGHLIGHT: - t = s; - while (*s != '#' && *s != NUL) - ++s; - if (*s == '#') { - stl_items[curitem].stl_type = Highlight; - stl_items[curitem].stl_start = p; - stl_items[curitem].stl_minwid = -syn_namen2id(t, (int)(s - t)); - curitem++; + char_u *t = s; + + while (*s != '#' && *s != NUL) + ++s; + if (*s == '#') + { + stl_items[curitem].stl_type = Highlight; + stl_items[curitem].stl_start = p; + stl_items[curitem].stl_minwid = -syn_namen2id(t, (int)(s - t)); + curitem++; + } + if (*s != NUL) + ++s; + continue; } - if (*s != NUL) - ++s; - continue; } stl_items[curitem].stl_start = p; stl_items[curitem].stl_type = Normal; if (str != NULL && *str) { - t = str; + char_u *t = str; + if (itemisflag) { if ((t[0] && t[1]) @@ -5037,13 +5096,13 @@ build_stl_str_hl( } else if (num >= 0) { - int nbase = (base == 'D' ? 10 : (base == 'O' ? 8 : 16)); - char_u nstr[20]; + int nbase = (base == 'D' ? 10 : (base == 'O' ? 8 : 16)); + char_u nstr[20]; + char_u *t = nstr; if (p + 20 >= out + outlen) break; // not sufficient space prevchar_isitem = TRUE; - t = nstr; if (opt == STL_VIRTCOL_ALT) { *t++ = '-'; @@ -5054,12 +5113,13 @@ build_stl_str_hl( *t++ = '0'; *t++ = '*'; *t++ = nbase == 16 ? base : (char_u)(nbase == 8 ? 'o' : 'd'); - *t = 0; + *t = NUL; for (n = num, l = 1; n >= nbase; n /= nbase) l++; if (opt == STL_VIRTCOL_ALT) l++; + if (l > maxwid) { l += 2; @@ -5069,14 +5129,13 @@ build_stl_str_hl( *t++ = '>'; *t++ = '%'; *t = t[-3]; - *++t = 0; - vim_snprintf((char *)p, outlen - (p - out), (char *)nstr, - 0, num, n); + *++t = NUL; + p += vim_snprintf_safelen((char *)p, outlen - (p - out), + (char *)nstr, 0, num, n); } else - vim_snprintf((char *)p, outlen - (p - out), (char *)nstr, - minwid, num); - p += STRLEN(p); + p += vim_snprintf_safelen((char *)p, outlen - (p - out), + (char *)nstr, minwid, num); } else stl_items[curitem].stl_type = Empty; @@ -5089,6 +5148,7 @@ build_stl_str_hl( curitem++; } *p = NUL; + outputlen = (size_t)(p - out); itemcnt = curitem; #ifdef FEAT_EVAL @@ -5145,10 +5205,12 @@ build_stl_str_hl( break; itemcnt = l; *s++ = '>'; - *s = 0; + *s = NUL; } else { + char_u *end = out + outputlen; + if (has_mbyte) { n = 0; @@ -5161,7 +5223,8 @@ build_stl_str_hl( else n = width - maxwidth + 1; p = s + n; - STRMOVE(s + 1, p); + mch_memmove(s + 1, p, (size_t)(end - p) + 1); // +1 for NUL + end -= (size_t)(p - (s + 1)); *s = '<'; --n; // count the '<' @@ -5176,14 +5239,15 @@ build_stl_str_hl( // Fill up for half a double-wide character. while (++width < maxwidth) { - s = s + STRLEN(s); + s = end; MB_CHAR2BYTES(fillchar, s); *s = NUL; + end = s; } } width = maxwidth; } - else if (width < maxwidth && STRLEN(out) + maxwidth - width + 1 < outlen) + else if (width < maxwidth && outputlen + maxwidth - width + 1 < outlen) { // Find how many separators there are, which we will use when // figuring out how many groups there are. @@ -5284,7 +5348,7 @@ build_stl_str_hl( #endif // FEAT_STL_OPT /* - * Get relative cursor position in window into "buf[buflen]", in the localized + * Get relative cursor position in window into "buf[]", in the localized * percentage form like %99, 99%; using "Top", "Bot" or "All" when appropriate. */ int @@ -5295,7 +5359,6 @@ get_rel_pos( { long above; // number of lines above window long below; // number of lines below window - int len; if (buflen < 3) // need at least 3 chars for writing return 0; @@ -5309,42 +5372,31 @@ get_rel_pos( #endif below = wp->w_buffer->b_ml.ml_line_count - wp->w_botline + 1; if (below <= 0) - len = vim_snprintf((char *)buf, buflen, "%s", (above == 0) ? _("All") : _("Bot")); - else if (above <= 0) - len = vim_snprintf((char *)buf, buflen, "%s", _("Top")); - else - { - int perc = (above > 1000000L) - ? (int)(above / ((above + below) / 100L)) - : (int)(above * 100L / (above + below)); + return (int)vim_snprintf_safelen((char *)buf, buflen, + "%s", (above == 0) ? _("All") : _("Bot")); - // localized percentage value - len = vim_snprintf((char *)buf, buflen, _("%s%d%%"), (perc < 10) ? " " : "", perc); - } - if (len < 0) - { - buf[0] = NUL; - len = 0; - } - else if (len > buflen - 1) - len = buflen - 1; + if (above <= 0) + return (int)vim_snprintf_safelen((char *)buf, buflen, + "%s", _("Top")); - return len; + // localized percentage value + return (int)vim_snprintf_safelen((char *)buf, buflen, + _("%2d%%"), calc_percentage(above, above + below)); } /* - * Append (file 2 of 8) to "buf[buflen]", if editing more than one file. - * Return TRUE if it was appended. + * Append (file 2 of 8) to "buf[]", if editing more than one file. + * Return the number of characters appended. */ static int append_arg_number( win_T *wp, char_u *buf, - int buflen, + size_t buflen, int add_file) // Add "file" before the arg number { if (ARGCOUNT <= 1) // nothing to do - return FALSE; + return 0; char *msg; switch ((wp->w_arg_idx_invalid ? 1 : 0) + (add_file ? 2 : 0)) @@ -5355,10 +5407,8 @@ append_arg_number( case 3: msg = _(" (file (%d) of %d)"); break; } - char_u *p = buf + STRLEN(buf); // go to the end of the buffer - vim_snprintf((char *)p, (size_t)(buflen - (p - buf)), msg, + return (int)vim_snprintf_safelen((char *)buf, buflen, msg, wp->w_arg_idx + 1, ARGCOUNT); - return TRUE; } /* @@ -5698,17 +5748,16 @@ chk_modeline( int flags) // Same as for do_modelines(). { char_u *s; + char_u *line_end; // point to the end of the line char_u *e; - char_u *linecopy; // local copy of any modeline found int prev; - int vers; - int end; int retval = OK; - sctx_T save_current_sctx; ESTACK_CHECK_DECLARATION; prev = -1; - for (s = ml_get(lnum); *s != NUL; ++s) + s = ml_get(lnum); + line_end = s + ml_get_len(lnum); + for (; *s != NUL; ++s) { if (prev == -1 || vim_isspace(prev)) { @@ -5718,6 +5767,8 @@ chk_modeline( // Accept both "vim" and "Vim". if ((s[0] == 'v' || s[0] == 'V') && s[1] == 'i' && s[2] == 'm') { + int vers; + if (s[3] == '<' || s[3] == '=' || s[3] == '>') e = s + 4; else @@ -5739,14 +5790,23 @@ chk_modeline( if (*s) { + size_t len; + char_u *linecopy; // local copy of any modeline found + int end; + do // skip over "ex:", "vi:" or "vim:" ++s; while (s[-1] != ':'); - s = linecopy = vim_strsave(s); // copy the line, it will change + len = (size_t)(line_end - s); // remember the line length + // so we can restore 'line_end' + // after the copy + s = linecopy = vim_strnsave(s, len); // copy the line, it will change if (linecopy == NULL) return FAIL; + line_end = s + len; // restore 'line_end' + // prepare for emsg() estack_push(ETYPE_MODELINE, (char_u *)"modelines", lnum); ESTACK_CHECK_SETUP; @@ -5764,7 +5824,10 @@ chk_modeline( */ for (e = s; *e != ':' && *e != NUL; ++e) if (e[0] == '\\' && e[1] == ':') - STRMOVE(e, e + 1); + { + mch_memmove(e, e + 1, (size_t)(line_end - (e + 1)) + 1); // +1 for NUL + --line_end; + } if (*e == NUL) end = TRUE; @@ -5781,15 +5844,15 @@ chk_modeline( if (*e != ':') // no terminating ':'? break; end = TRUE; - s = vim_strchr(s, ' ') + 1; + s += (*(s + 2) == ' ') ? 3 : 4; } *e = NUL; // truncate the set command if (*s != NUL) // skip over an empty "::" { int secure_save = secure; + sctx_T save_current_sctx = current_sctx; - save_current_sctx = current_sctx; current_sctx.sc_version = 1; #ifdef FEAT_EVAL current_sctx.sc_sid = SID_MODELINE; @@ -5807,7 +5870,8 @@ chk_modeline( if (retval == FAIL) // stop if error found break; } - s = e + 1; // advance to next part + s = (e == line_end) ? e : e + 1; // advance to next part + // careful not to go off the end } ESTACK_CHECK_NOW; diff --git a/src/proto.h b/src/proto.h index f04ba05259..a5ca9e4e29 100644 --- a/src/proto.h +++ b/src/proto.h @@ -140,6 +140,7 @@ void siemsg(const char *, ...) ATTRIBUTE_COLD ATTRIBUTE_FORMAT_PRINTF(1, 2); int vim_snprintf_add(char *, size_t, const char *, ...) ATTRIBUTE_FORMAT_PRINTF(3, 4); int vim_snprintf(char *, size_t, const char *, ...) ATTRIBUTE_FORMAT_PRINTF(3, 4); +size_t vim_snprintf_safelen(char *, size_t, const char *, ...) ATTRIBUTE_FORMAT_PRINTF(3, 4); int vim_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap) ATTRIBUTE_FORMAT_PRINTF(3, 0); diff --git a/src/strings.c b/src/strings.c index d6f1b38236..e1d23e387a 100644 --- a/src/strings.c +++ b/src/strings.c @@ -2487,6 +2487,33 @@ vim_snprintf(char *str, size_t str_m, const char *fmt, ...) return str_l; } +/* + * Like vim_snprintf() except the return value can be safely used to increment a + * buffer length. + * Normal `snprintf()` (and `vim_snprintf()`) returns the number of bytes that + * would have been copied if the destination buffer was large enough. + * This means that you cannot rely on it's return value for the destination + * length because the destination may be shorter than the source. This function + * guarantees the returned length will never be greater than the destination length. + */ + size_t +vim_snprintf_safelen(char *str, size_t str_m, const char *fmt, ...) +{ + va_list ap; + int str_l; + + va_start(ap, fmt); + str_l = vim_vsnprintf(str, str_m, fmt, ap); + va_end(ap); + + if (str_l < 0) + { + *str = NUL; + return 0; + } + return ((size_t)str_l >= str_m) ? str_m - 1 : (size_t)str_l; +} + int vim_vsnprintf( char *str, diff --git a/src/version.c b/src/version.c index 4609244f5d..e500aa19e0 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1291, /**/ 1290, /**/ From 5c84d12df104e976e8f56c43f9f975e54d9fd779 Mon Sep 17 00:00:00 2001 From: Aliaksei Budavei <0x000c70@gmail.com> Date: Thu, 10 Apr 2025 21:52:14 +0200 Subject: [PATCH 073/633] runtime(filetype): make shell filetype detection more robust closes: #17063 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt --- runtime/autoload/dist/ft.vim | 15 ++++++++------- runtime/syntax/sh.vim | 11 ++++++++--- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index a740305226..4053e51f00 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -3,7 +3,7 @@ vim9script # Vim functions for file type detection # # Maintainer: The Vim Project -# Last Change: 2025 Jan 25 +# Last Change: 2025 Apr 10 # Former Maintainer: Bram Moolenaar # These functions are moved here from runtime/filetype.vim to make startup @@ -875,16 +875,16 @@ export def SetFileTypeSH(name: string, setft = true): string if setft && expand("") =~ g:ft_ignore_pat return '' endif - if name =~ '\' + if name =~ '^csh$' || name =~ '^#!.\{-2,}\' # Some .sh scripts contain #!/bin/csh. return SetFileTypeShell("csh", setft) - elseif name =~ '\' + elseif name =~ '^tcsh$' || name =~ '^#!.\{-2,}\' # Some .sh scripts contain #!/bin/tcsh. return SetFileTypeShell("tcsh", setft) - elseif name =~ '\' + elseif name =~ '^zsh$' || name =~ '^#!.\{-2,}\' # Some .sh scripts contain #!/bin/zsh. return SetFileTypeShell("zsh", setft) - elseif name =~ '\' + elseif name =~ '^ksh$' || name =~ '^#!.\{-2,}\' b:is_kornshell = 1 if exists("b:is_bash") unlet b:is_bash @@ -892,7 +892,8 @@ export def SetFileTypeSH(name: string, setft = true): string if exists("b:is_sh") unlet b:is_sh endif - elseif exists("g:bash_is_sh") || name =~ '\' || name =~ '\' + elseif exists("g:bash_is_sh") || name =~ '^bash2\=$' || + \ name =~ '^#!.\{-2,}\' b:is_bash = 1 if exists("b:is_kornshell") unlet b:is_kornshell @@ -900,7 +901,7 @@ export def SetFileTypeSH(name: string, setft = true): string if exists("b:is_sh") unlet b:is_sh endif - elseif name =~ '\' || name =~ '\' + elseif name =~ '^\%(da\)\=sh$' || name =~ '^#!.\{-2,}\<\%(da\)\=sh\>' # Ubuntu links "sh" to "dash", thus it is expected to work the same way b:is_sh = 1 if exists("b:is_kornshell") diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim index 298198274e..9e5320f1ce 100644 --- a/runtime/syntax/sh.vim +++ b/runtime/syntax/sh.vim @@ -9,6 +9,7 @@ " 2025 Jan 18 add bash coproc, remove duplicate syn keywords (#16467) " 2025 Mar 21 update shell capability detection (#16939) " 2025 Apr 03 command substitution opening paren at EOL (#17026) +" 2025 Apr 10 improve shell detection (#17084) " Version: 208 " Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH " For options and settings, please use: :help ft-sh-syntax @@ -23,11 +24,13 @@ endif let b:is_sh = 1 " If the shell script itself specifies which shell to use, use it -if getline(1) =~ '\' +let s:shebang = getline(1) + +if s:shebang =~ '^#!.\{-2,}\' let b:is_kornshell = 1 -elseif getline(1) =~ '\' +elseif s:shebang =~ '^#!.\{-2,}\' let b:is_bash = 1 -elseif getline(1) =~ '\' +elseif s:shebang =~ '^#!.\{-2,}\' let b:is_dash = 1 " handling /bin/sh with is_kornshell/is_sh {{{1 " b:is_sh will be set when "#! /bin/sh" is found; @@ -70,6 +73,8 @@ elseif !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_posix" endif endif +unlet s:shebang + " if b:is_dash, set b:is_posix too if exists("b:is_dash") let b:is_posix= 1 From d82f3cae396710b61bca78eb559393ed420959b3 Mon Sep 17 00:00:00 2001 From: Aliaksei Budavei <0x000c70@gmail.com> Date: Sat, 12 Apr 2025 11:18:10 +0200 Subject: [PATCH 074/633] runtime(sh): Do not look up a "sh" utility in $PATH for "sh_13.sh" Dash may not be installed on a BSD CI runner, list it in the shebang line. See #17084 closes: #17094 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt --- runtime/syntax/testdir/dumps/sh_13_00.dump | 6 +++--- runtime/syntax/testdir/input/sh_13.sh | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/runtime/syntax/testdir/dumps/sh_13_00.dump b/runtime/syntax/testdir/dumps/sh_13_00.dump index 7fe0991d4b..b65d187322 100644 --- a/runtime/syntax/testdir/dumps/sh_13_00.dump +++ b/runtime/syntax/testdir/dumps/sh_13_00.dump @@ -1,4 +1,5 @@ ->#+0#0000e05#ffffff0| |I|s@1|u|e| |#|1|7|0|2|6| |(|b|a|s|h| |h|i|g|h|l|i|g|h|t|i|n|g| |r|e|q|u|i|r|e|s| |s|p|a|c|e| |a|f|t|e|r| |$|(|)@1| +0#0000000&@15 +>#+0#0000e05#ffffff0|!|/|b|i|n|/|d|a|s|h| +0#0000000&@63 +|#+0#0000e05&| |I|s@1|u|e| |#|1|7|0|2|6| |(|b|a|s|h| |h|i|g|h|l|i|g|h|t|i|n|g| |r|e|q|u|i|r|e|s| |s|p|a|c|e| |a|f|t|e|r| |$|(|)@1| +0#0000000&@15 |#+0#0000e05&| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|i|s@1|u|e|s|/|1|7|0|2|6|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|7@1|4|1@1|2@1|8|4| +0#0000000&@9 @75 |_|c|o|m|p|_|c|o|m|p|g|e|n|_|s|p|l|i|t| |-+0#e000e06&|l| +0#0000000&|-+0#e000e06&@1| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|(| +0#0000000&@45 @@ -16,5 +17,4 @@ |~| @73 |~| @73 |~| @73 -|~| @73 -|i+0#0000000&|s|_|b|a|s|h|:| |1|,| @45|1|,|1| @10|A|l@1| +|i+0#0000000&|s|_|d|a|s|h|:| |1|,| |i|s|_|p|o|s|i|x|:| |1|,| |i|s|_|s|h|:| |1|,| @22|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/input/sh_13.sh b/runtime/syntax/testdir/input/sh_13.sh index a81c0a4542..18fd0d1335 100644 --- a/runtime/syntax/testdir/input/sh_13.sh +++ b/runtime/syntax/testdir/input/sh_13.sh @@ -1,3 +1,4 @@ +#!/bin/dash # Issue #17026 (bash highlighting requires space after $()) # https://github.com/vim/vim/issues/17026#issuecomment-2774112284 From c8ce81b0dcaddefc65e3d445c92c9e0253bd9173 Mon Sep 17 00:00:00 2001 From: Hirohito Higashi Date: Sat, 12 Apr 2025 11:28:18 +0200 Subject: [PATCH 075/633] patch 9.1.1292: statusline not correctly evaluated Problem: statusline not correctly evaluated (Peter Kenny, after v9.1.1291) Solution: revert part of patch v9.1.1291 (Hirohito Higashi) fixes: #17095 closes: #17094 Signed-off-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- src/buffer.c | 21 ++++++++++++++++----- src/version.c | 2 ++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 955800e3ae..eed3e8de13 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -4834,14 +4834,25 @@ build_stl_str_hl( && evaldepth < MAX_STL_EVAL_DEPTH) { size_t parsed_usefmt = (size_t)(block_start - usefmt); - size_t new_fmt_len = (parsed_usefmt - + STRLEN(str) + STRLEN(s) + 3) * sizeof(char_u); - char_u *new_fmt = (char_u *)alloc(new_fmt_len); + size_t str_length = strlen((const char *)str); + size_t fmt_length = strlen((const char *)s); + size_t new_fmt_len = parsed_usefmt + + str_length + fmt_length + 3; + char_u *new_fmt = (char_u *)alloc(new_fmt_len * sizeof(char_u)); if (new_fmt != NULL) { - vim_snprintf((char *)new_fmt, new_fmt_len, "%.*s%s%s%s", - (int)parsed_usefmt, usefmt, str, "%}", s); + char_u *new_fmt_p = new_fmt; + + new_fmt_p = (char_u *)memcpy(new_fmt_p, usefmt, parsed_usefmt) + + parsed_usefmt; + new_fmt_p = (char_u *)memcpy(new_fmt_p , str, str_length) + + str_length; + new_fmt_p = (char_u *)memcpy(new_fmt_p, "%}", 2) + 2; + new_fmt_p = (char_u *)memcpy(new_fmt_p , s, fmt_length) + + fmt_length; + *new_fmt_p = 0; + new_fmt_p = NULL; if (usefmt != fmt) vim_free(usefmt); diff --git a/src/version.c b/src/version.c index e500aa19e0..1b1cfd6b32 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1292, /**/ 1291, /**/ From 0e59e67a63ed4abe0627a5ccf74763bdaece74ab Mon Sep 17 00:00:00 2001 From: Maxim Kim Date: Sat, 12 Apr 2025 11:34:08 +0200 Subject: [PATCH 076/633] patch 9.1.1293: comment plugin does not handle 'exclusive' selection for comment object Problem: comment plugin does not handle 'exclusive' selection for comment object (@mawkish) Solution: handle special case selection='exclusive' for inline comment object (Maxim Kim) fixes: #17023 closes: #17098 Signed-off-by: Maxim Kim Signed-off-by: Christian Brabandt --- .../dist/opt/comment/autoload/comment.vim | 3 +++ src/testdir/test_plugin_comment.vim | 23 +++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 28 insertions(+) diff --git a/runtime/pack/dist/opt/comment/autoload/comment.vim b/runtime/pack/dist/opt/comment/autoload/comment.vim index 183351d19d..a0ee7a72fb 100644 --- a/runtime/pack/dist/opt/comment/autoload/comment.vim +++ b/runtime/pack/dist/opt/comment/autoload/comment.vim @@ -158,6 +158,9 @@ export def ObjComment(inner: bool) else cursor(pos_end[1], pos_end[2]) normal! v + if &selection == 'exclusive' + normal! lo + endif cursor(pos_start[1], pos_start[2]) endif enddef diff --git a/src/testdir/test_plugin_comment.vim b/src/testdir/test_plugin_comment.vim index 992a4f1b51..d4718bc520 100644 --- a/src/testdir/test_plugin_comment.vim +++ b/src/testdir/test_plugin_comment.vim @@ -677,3 +677,26 @@ func Test_inline_uncomment() let result = readfile(output_file) call assert_equal(['echo "Hello" This should be a comment'], result) endfunc + +func Test_textobj_selection_exclusive_inline_comment() + CheckScreendump + let lines =<< trim END + print("Hello") # selection exclusive + END + + let input_file = "test_selection_exclusive_inline_comment_input.py" + call writefile(lines, input_file, "D") + + let buf = RunVimInTerminal('-c "set selection=exclusive" -c "packadd comment" ' .. input_file, {}) + + call term_sendkeys(buf, "dac") + + let output_file = "test_selection_exclusive_inline_comment.py" + call term_sendkeys(buf, $":w {output_file}\") + defer delete(output_file) + + call StopVimInTerminal(buf) + + let result = readfile(output_file) + call assert_equal(['print("Hello")'], result) +endfunc diff --git a/src/version.c b/src/version.c index 1b1cfd6b32..726629cdeb 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1293, /**/ 1292, /**/ From ab2fe65fbf2680af5f23112da9f8a83167e234bb Mon Sep 17 00:00:00 2001 From: Qiming zhao Date: Sat, 12 Apr 2025 11:40:17 +0200 Subject: [PATCH 077/633] runtime(doc): correct backslash escaping comma example closes: #17096 Signed-off-by: Qiming zhao Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 8530196aa3..a2f5f1f097 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 08 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 12 VIM REFERENCE MANUAL by Bram Moolenaar @@ -212,7 +212,7 @@ A few examples: > :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" + :set tags=tags\\,file results in "tags\,file" :let &tags='tags\,file' (same as above) The "|" character separates a ":set" command from a following command. To From bc27b6e34fa9228ac468973e1b1b80506fdc177a Mon Sep 17 00:00:00 2001 From: JMcKiern Date: Sat, 12 Apr 2025 11:51:00 +0200 Subject: [PATCH 078/633] patch 9.1.1294: gui tabline menu does not use confirm when closing tabs Problem: gui tabline menu does not use confirm when closing tabs Solution: use ":confirm tabclose" explicitly (JMcKiern) closes: #17093 Signed-off-by: JMcKiern Signed-off-by: Christian Brabandt --- src/normal.c | 4 ++-- src/version.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/normal.c b/src/normal.c index e7915d6ff8..6cd9004ad1 100644 --- a/src/normal.c +++ b/src/normal.c @@ -3074,10 +3074,10 @@ handle_tabmenu(void) { case TABLINE_MENU_CLOSE: if (current_tab == 0) - do_cmdline_cmd((char_u *)"tabclose"); + do_cmdline_cmd((char_u *)"confirm tabclose"); else { - vim_snprintf((char *)IObuff, IOSIZE, "tabclose %d", + vim_snprintf((char *)IObuff, IOSIZE, "confirm tabclose %d", current_tab); do_cmdline_cmd(IObuff); } diff --git a/src/version.c b/src/version.c index 726629cdeb..2e2debb9d8 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1294, /**/ 1293, /**/ From eded33621be29b9fdc51466efdc946fa8d3e756f Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Sat, 12 Apr 2025 18:03:32 +0200 Subject: [PATCH 079/633] runtime(doc): Improve 'wildmode' setting desciption closes: #17100 Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 90 +++++++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index a2f5f1f097..9fab3f46d8 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -9638,55 +9638,65 @@ A jump table for the options with a short description can be found at |Q_op|. *'wildmode'* *'wim'* 'wildmode' 'wim' string (Vim default: "full") global - Completion mode that is used for the character specified with - 'wildchar'. It is a comma-separated list of up to four parts. Each - part specifies what to do for each consecutive use of 'wildchar'. The - first part specifies the behavior for the first use of 'wildchar', - The second part for the second use, etc. - - Each part consists of a colon separated list consisting of the - following possible values: - "" Complete only the first match. - "full" Complete the next full match. After the last match, - the original string is used and then the first match - again. Will also start 'wildmenu' if it is enabled. - "longest" Complete till longest common string. If this doesn't - result in a longer string, use the next part. - "list" When more than one match, list all matches. - "lastused" When completing buffer names and more than one buffer - matches, sort buffers by time last used (other than - the current buffer). - "noselect" Do not pre-select first menu item and start 'wildmenu' - if it is enabled. - When there is only a single match, it is fully completed in all cases - except when "noselect" is present. - - Examples of useful colon-separated values: - "longest:full" Like "longest", but also start 'wildmenu' if it is - enabled. Will not complete to the next full match. - "list:full" When more than one match, list all matches and - complete first match. - "list:longest" When more than one match, list all matches and - complete till longest common string. - "list:lastused" When more than one buffer matches, list all matches - and sort buffers by time last used (other than the - current buffer). + Completion mode used for the character specified with 'wildchar'. + This option is a comma-separated list of up to four parts, + corresponding to the first, second, third, and fourth presses of + 'wildchar'. Each part is a colon-separated list of completion + behaviors, which are applied simultaneously during that phase. + + The possible behavior values are: + "" Only complete (insert) the first match. No further + matches are cycled or listed. + "full" Complete the next full match. Cycles through all + matches, returning to the original input after the + last match. If 'wildmenu' is enabled, it will be + shown. + "longest" Complete to the longest common substring. If this + doesn't extend the input, the next 'wildmode' part is + used. + "list" If multiple matches are found, list all of them. + "lastused" When completing buffer names, sort them by most + recently used (excluding the current buffer). Only + applies to buffer name completion. + "noselect" If 'wildmenu' is enabled, show the menu but do not + preselect the first item. + If only one match exists, it is completed fully—unless "noselect" is + specified. + + Some useful combinations of colon-separated values: + "longest:full" Start with the longest common string and show + 'wildmenu' (if enabled). Does not cycle + through full matches. + "list:full" List all matches and complete first match. + "list:longest" List all matches and complete till the longest + common prefix. + "list:lastused" List all matches. When completing buffers, + sort them by most recently used (excluding the + current buffer). + "noselect:lastused" Do not preselect the first item in 'wildmenu' + if it is active. When completing buffers, + sort them by most recently used (excluding the + current buffer). Examples: > :set wildmode=full -< Complete first full match, next match, etc. (the default) > +< Complete full match on every press (default behavior) > :set wildmode=longest,full -< Complete longest common string, then each full match > +< First press: longest common substring + Second press: cycle through full matches > :set wildmode=list:full -< List all matches and complete each full match > +< First press: list all matches and complete the first one > :set wildmode=list,full -< List all matches without completing, then each full match > +< First press: list matches only + Second press: complete full matches > :set wildmode=longest,list -< Complete longest common string, then list alternatives > +< First press: longest common substring + Second press: list all matches > :set wildmode=noselect:full -< Display 'wildmenu' without completing, then each full match > +< Show 'wildmenu' without completing or selecting on first press + Cycle full matches on second press > :set wildmode=noselect:lastused,full -< Same as above, but sort buffers by time last used. +< Same as above, but buffer matches are sorted by last used More info here: |cmdline-completion|. *'wildoptions'* *'wop'* From 6f6c0dba9f578787af0f259a832c972807a884cd Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sat, 12 Apr 2025 18:07:39 +0200 Subject: [PATCH 080/633] runtime(doc): disable last-position-jump in diff mode This has been bothering me quite for some time and I never knew why it happened. Just today it occurred to me this might have been because of the last-position-jump. So I figured, let's fix it for everybody, not just me. closes: #17092 Signed-off-by: Christian Brabandt --- runtime/defaults.vim | 1 + runtime/doc/usr_05.txt | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/runtime/defaults.vim b/runtime/defaults.vim index 38b03da11d..f5b4888a62 100644 --- a/runtime/defaults.vim +++ b/runtime/defaults.vim @@ -107,6 +107,7 @@ if 1 \ let line = line("'\"") \ | if line >= 1 && line <= line("$") && &filetype !~# 'commit' \ && index(['xxd', 'gitrebase', 'tutor'], &filetype) == -1 + \ && !&diff \ | execute "normal! g`\"" \ | endif diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt index 56714dbd8d..fea6cddd19 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: 2025 Mar 22 +*usr_05.txt* For Vim version 9.1. Last change: 2025 Apr 10 VIM USER MANUAL - by Bram Moolenaar @@ -307,23 +307,27 @@ This switches on three very clever mechanisms: filetypes. See |:filetype-indent-on| and 'indentexpr'. - *restore-cursor* *last-position-jump* > + *restore-cursor* *last-position-jump* >vim augroup RestoreCursor autocmd! autocmd BufReadPost * \ let line = line("'\"") \ | if line >= 1 && line <= line("$") && &filetype !~# 'commit' \ && index(['xxd', 'gitrebase'], &filetype) == -1 + \ && !&diff \ | execute "normal! g`\"" \ | endif augroup END Another autocommand. This time it is used after reading any file. The complicated stuff after it checks if the '" mark is defined, and jumps to it -if so. It doesn't do that for a commit or rebase message, which are likely -a different one than last time, and when using xxd(1) to filter and edit -binary files, which transforms input files back and forth, causing them to -have dual nature, so to speak. See also |using-xxd|. +if so. It doesn't do that when: + - editing a commit or rebase message, which are likely a different one than + last time, + - using xxd(1) to filter and edit binary files, which transforms input files + back and forth, causing them to have dual nature, so to speak (see also + |using-xxd|) and + - Vim is in diff mode The backslash at the start of a line is used to continue the command from the previous line. That avoids a line getting very long. See |line-continuation|. From cf665ccd3771d59584f2f44a7c644c017a2ad84f Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sat, 12 Apr 2025 18:09:28 +0200 Subject: [PATCH 081/633] patch 9.1.1295: clientserver: does not handle :stopinsert correctly Problem: clientserver: When in insert mode, a :stopinsert command is not correctly processed (user202729) Solution: If the :stopinsert command is received while waiting for input, stuff the NOP key into the type-ahead buffer and detect that :stopinsert was used in edit() so that the cursor position is decremented. fixes: #17016 closes: #17024 Signed-off-by: Christian Brabandt --- src/edit.c | 11 ++++++++- src/ex_docmd.c | 6 +++++ src/testdir/test_clientserver.vim | 41 +++++++++++++++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/edit.c b/src/edit.c index 53428e0fbb..ab67fdc68b 100644 --- a/src/edit.c +++ b/src/edit.c @@ -608,7 +608,16 @@ edit( if (c != K_IGNORE && c != K_NOP) vungetc(c); count = 0; - nomove = TRUE; + + if (!bt_prompt(curwin->w_buffer) +#ifdef FEAT_TERMINAL + && !bt_terminal(curwin->w_buffer) +#endif + && stop_insert_mode) + // :stopinsert command via callback or via server command + nomove = FALSE; + else + nomove = TRUE; ins_compl_prep(ESC); goto doESCkey; } diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 03eaef4205..279a202cd3 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -9326,6 +9326,12 @@ ex_stopinsert(exarg_T *eap UNUSED) { restart_edit = 0; stop_insert_mode = TRUE; +#if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL) + // when called from remote_expr in insert mode, make sure insert mode is + // ended by adding K_NOP to the typeahead buffer + if (vgetc_busy) + ins_char_typebuf(K_NOP, 0); +#endif clearmode(); } diff --git a/src/testdir/test_clientserver.vim b/src/testdir/test_clientserver.vim index 8be521b9f7..02b0c3921f 100644 --- a/src/testdir/test_clientserver.vim +++ b/src/testdir/test_clientserver.vim @@ -191,6 +191,47 @@ func Test_client_server() \ has('unix') ? ['E573:.*abc'] : 'E258:') endfunc +func Test_client_server_stopinsert() + " test does not work on MS-Windows + CheckNotMSWindows + let g:test_is_flaky = 1 + let cmd = GetVimCommand() + if cmd == '' + throw 'GetVimCommand() failed' + endif + call Check_X11_Connection() + let fname = 'Xclientserver_stop.txt' + let name = 'XVIMTEST2' + call writefile(['one two three'], fname, 'D') + + let cmd .= ' -c "set virtualedit=onemore"' + let cmd .= ' -c "call cursor(1, 14)"' + let cmd .= ' -c "startinsert"' + let cmd .= ' --servername ' . name + let cmd .= ' ' .. fname + let job = job_start(cmd, {'stoponexit': 'kill', 'out_io': 'null'}) + call WaitForAssert({-> assert_equal("run", job_status(job))}) + + " Takes a short while for the server to be active. + " When using valgrind it takes much longer. + call WaitForAssert({-> assert_match(name, serverlist())}) + + call remote_expr(name, 'execute("stopinsert")') + + call assert_equal('n', name->remote_expr("mode(1)")) + call assert_equal('13', name->remote_expr("col('.')")) + + eval name->remote_send(":qa!\") + try + call WaitForAssert({-> assert_equal("dead", job_status(job))}) + finally + if job_status(job) != 'dead' + call assert_report('Server did not exit') + call job_stop(job, 'kill') + endif + endtry +endfunc + " Uncomment this line to get a debugging log " call ch_logfile('channellog', 'w') diff --git a/src/version.c b/src/version.c index 2e2debb9d8..53b794173b 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1295, /**/ 1294, /**/ From d4dbf822dcb9fd95379bebab85def391e1179b21 Mon Sep 17 00:00:00 2001 From: glepnir Date: Sat, 12 Apr 2025 18:35:34 +0200 Subject: [PATCH 082/633] patch 9.1.1296: completion: incorrect truncation logic Problem: completion: incorrect truncation logic (after: v9.1.1284) Solution: replace string allocation with direct screen rendering and fixe RTL/LTR truncation calculations (glepnir) closes: #17081 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 2 + runtime/doc/version9.txt | 3 +- src/popupmenu.c | 114 ++++++++++---------- src/screen.c | 2 + src/structs.h | 1 + src/testdir/dumps/Test_pum_maxwidth_07.dump | 2 +- src/testdir/dumps/Test_pum_maxwidth_08.dump | 2 +- src/testdir/test_popup.vim | 2 +- src/version.c | 2 + 9 files changed, 69 insertions(+), 61 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 9fab3f46d8..089df14114 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -3621,6 +3621,7 @@ A jump table for the options with a short description can be found at |Q_op|. lastline '@' 'display' contains lastline/truncate trunc '>' truncated text in the |ins-completion-menu|. + truncrl '<' same as "trunc' in 'rightleft' mode Any one that is omitted will fall back to the default. @@ -3645,6 +3646,7 @@ A jump table for the options with a short description can be found at |Q_op|. lastline NonText |hl-NonText| trunc one of the many Popup menu highlighting groups like |hl-PmenuSel| + truncrl same as "trunc" *'findfunc'* *'ffu'* *E1514* 'findfunc' 'ffu' string (default empty) diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 8a7f49e334..befd92ffd6 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Apr 08 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 12 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41631,6 +41631,7 @@ Options: ~ and CTRL-D / CTRL-U for half-pagewise scrolling - New option value for 'fillchars': "trunc" - configure truncation indicator, 'pummaxwidth' + "truncrl" - like "trunc" but in 'rl' mode, 'pummaxwidth' Ex commands: ~ - allow to specify a priority when defining a new sign |:sign-define| diff --git a/src/popupmenu.c b/src/popupmenu.c index 556c2c350f..07c99f052b 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -604,10 +604,15 @@ pum_redraw(void) int last_isabbr = FALSE; int orig_attr = -1; int scroll_range = pum_size - pum_height; - char_u *new_str = NULL; - char_u *ptr = NULL; int remaining = 0; - int fcs_trunc = curwin->w_fill_chars.trunc; + int fcs_trunc; + +#ifdef FEAT_RIGHTLEFT + if (pum_rl) + fcs_trunc = curwin->w_fill_chars.truncrl; + else +#endif + fcs_trunc = curwin->w_fill_chars.trunc; hlf_T hlfsNorm[3]; hlf_T hlfsSel[3]; @@ -722,10 +727,19 @@ pum_redraw(void) if (rt != NULL) { - char_u *rt_start = rt; - int cells; + char_u *rt_start = rt; + int cells; + int over_cell = 0; + int truncated = FALSE; cells = mb_string2cells(rt , -1); + truncated = pum_width == p_pmw + && pum_width - totwidth < cells; + + if (pum_width == p_pmw && !truncated + && (j + 1 < 3 && pum_get_item(idx, order[j + 1]) != NULL)) + truncated = TRUE; + if (cells > pum_width) { do @@ -746,13 +760,9 @@ pum_redraw(void) } } - // truncated - if (pum_width == p_pmw - && totwidth + 1 + cells >= pum_width) + if (truncated) { char_u *orig_rt = rt; - char_u *old_rt = NULL; - int over_cell = 0; int size = 0; remaining = pum_width - totwidth - 1; @@ -768,26 +778,19 @@ pum_redraw(void) size = (int)STRLEN(orig_rt); if (cells < remaining) over_cell = remaining - cells; - new_str = alloc(size + over_cell + 1 + utf_char2len(fcs_trunc)); - if (!new_str) - return; - ptr = new_str; - if (fcs_trunc != NUL && fcs_trunc != '>') - ptr += (*mb_char2bytes)(fcs_trunc, ptr); + + cells = mb_string2cells(orig_rt, size); + width = cells + over_cell + 1; + rt = orig_rt; + + if (fcs_trunc != NUL) + screen_putchar(fcs_trunc, row, col - width + 1, attr); else - *ptr++ = '<'; - if (over_cell) - { - vim_memset(ptr, ' ', over_cell); - ptr += over_cell; - } - memcpy(ptr, orig_rt, size); - ptr[size] = NUL; - old_rt = rt_start; - rt = rt_start = new_str; - vim_free(old_rt); - cells = mb_string2cells(rt, -1); - width = cells; + screen_putchar('<', row, col - width + 1, attr); + + if (over_cell > 0) + screen_fill(row, row + 1, col - width + 2, + col - width + 2 + over_cell, ' ', ' ', attr); } if (attrs == NULL) @@ -809,10 +812,16 @@ pum_redraw(void) { if (st != NULL) { - int size = (int)STRLEN(st); - int cells = (*mb_string2cells)(st, size); - char_u *st_end = NULL; - int over_cell = 0; + int size = (int)STRLEN(st); + int cells = (*mb_string2cells)(st, size); + char_u *st_end = NULL; + int over_cell = 0; + int truncated = pum_width == p_pmw + && pum_width - totwidth < cells; + + if (pum_width == p_pmw && !truncated + && (j + 1 < 3 && pum_get_item(idx, order[j + 1]) != NULL)) + truncated = TRUE; // only draw the text that fits while (size > 0 @@ -829,8 +838,7 @@ pum_redraw(void) } // truncated - if (pum_width == p_pmw - && totwidth + 1 + cells >= pum_width) + if (truncated) { remaining = pum_width - totwidth - 1; if (cells > remaining) @@ -846,28 +854,8 @@ pum_redraw(void) if (cells < remaining) over_cell = remaining - cells; - new_str = alloc(size + over_cell + 1 + utf_char2len(fcs_trunc)); - if (!new_str) - return; - memcpy(new_str, st, size); - ptr = new_str + size; - if (over_cell > 0) - { - vim_memset(ptr, ' ', over_cell); - ptr += over_cell; - } - - if (fcs_trunc != NUL) - ptr += (*mb_char2bytes)(fcs_trunc, ptr); - else - *ptr++ = '>'; - - *ptr = NUL; - vim_free(st); - st = new_str; - cells = mb_string2cells(st, -1); - size = (int)STRLEN(st); - width = cells; + cells = mb_string2cells(st, size); + width = cells + over_cell + 1; } if (attrs == NULL) @@ -875,6 +863,18 @@ pum_redraw(void) else pum_screen_puts_with_attrs(row, col, cells, st, size, attrs); + if (truncated) + { + if (over_cell > 0) + screen_fill(row, row + 1, col + cells, + col + cells + over_cell, ' ', ' ', attr); + if (fcs_trunc != NUL) + screen_putchar(fcs_trunc, row, + col + cells + over_cell, attr); + else + screen_putchar('>', row, + col + cells + over_cell, attr); + } vim_free(st); } diff --git a/src/screen.c b/src/screen.c index 9a5927abeb..ab37e1d61f 100644 --- a/src/screen.c +++ b/src/screen.c @@ -4714,6 +4714,7 @@ static struct charstab filltab[] = CHARSTAB_ENTRY(&fill_chars.eob, "eob"), CHARSTAB_ENTRY(&fill_chars.lastline, "lastline"), CHARSTAB_ENTRY(&fill_chars.trunc, "trunc"), + CHARSTAB_ENTRY(&fill_chars.truncrl, "truncrl"), }; static lcs_chars_T lcs_chars; static struct charstab lcstab[] = @@ -4828,6 +4829,7 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, fill_chars.eob = '~'; fill_chars.lastline = '@'; fill_chars.trunc = '>'; + fill_chars.truncrl = '<'; } } p = value; diff --git a/src/structs.h b/src/structs.h index 9b44598ac8..b5c898d163 100644 --- a/src/structs.h +++ b/src/structs.h @@ -3851,6 +3851,7 @@ typedef struct int eob; int lastline; int trunc; + int truncrl; } fill_chars_T; /* diff --git a/src/testdir/dumps/Test_pum_maxwidth_07.dump b/src/testdir/dumps/Test_pum_maxwidth_07.dump index ada8acb0d9..112e1f5888 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_07.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_07.dump @@ -1,7 +1,7 @@ |1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_> @44 |1+0#0000001#e0e0e08|2|3|4|5|6|7|8|9|>| +0#4040ff13#ffffff0@64 |一*0#0000001#ffd7ff255|二|三|四| +&|>| +0#4040ff13#ffffff0@64 -|a+0#0000001#ffd7ff255|b|c|d|e|f|g|h|i|>| +0#4040ff13#ffffff0@64 +|a+0#0000001#ffd7ff255|b|c|d|e|f|g|h|i|j| +0#4040ff13#ffffff0@64 |上*0#0000001#ffd7ff255|下|左|右| +&@1| +0#4040ff13#ffffff0@64 |~| @73 |~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_08.dump b/src/testdir/dumps/Test_pum_maxwidth_08.dump index aa41b76d1e..9f92ae7063 100644 --- a/src/testdir/dumps/Test_pum_maxwidth_08.dump +++ b/src/testdir/dumps/Test_pum_maxwidth_08.dump @@ -1,7 +1,7 @@ | +0&#ffffff0@43> |_|9|8|7|6|5|4|3|2|1|_|9|8|7|6|5|4|3|2|1|_|9|8|7|6|5|4|3|2|1 | +0#4040ff13&@64|<+0#0000001#e0e0e08|9|8|7|6|5|4|3|2|1 | +0#4040ff13#ffffff0@64|<+0#0000001#ffd7ff255| |四*&|三|二|一 -| +0#4040ff13#ffffff0@64|<+0#0000001#ffd7ff255|i|h|g|f|e|d|c|b|a +| +0#4040ff13#ffffff0@64|j+0#0000001#ffd7ff255|i|h|g|f|e|d|c|b|a | +0#4040ff13#ffffff0@64| +0#0000001#ffd7ff255@1|右*&|左|下|上 | +0#4040ff13#ffffff0@73|~ | @73|~ diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index d282f91cfa..b2952fdc35 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -2126,7 +2126,7 @@ func Test_pum_maxwidth_multibyte() call VerifyScreenDump(buf, 'Test_pum_maxwidth_16', {'rows': 8}) call term_sendkeys(buf, "\") - call term_sendkeys(buf, ":set fcs+=trunc:…\") + call term_sendkeys(buf, ":set fcs+=truncrl:…\") call term_sendkeys(buf, "S\\") call VerifyScreenDump(buf, 'Test_pum_maxwidth_17', {'rows': 8}) call term_sendkeys(buf, "\") diff --git a/src/version.c b/src/version.c index 53b794173b..6f3f241784 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1296, /**/ 1295, /**/ From 829eda7d381e5f635169c927103568b335cd599d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20B=C3=ACnh=20An?= Date: Sun, 13 Apr 2025 17:30:59 +0200 Subject: [PATCH 083/633] runtime(new-tutor): update tutor and correct comandline completion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: Some parts of the tutor are outdated. - For example, pressing `` after typing `:e` does not complete the command `:edit`, but shows a completion menu with the first entry being `:earlier`. closes: #17107 Signed-off-by: Phạm Bình An Signed-off-by: Christian Brabandt --- runtime/tutor/en/vim-01-beginner.tutor | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/runtime/tutor/en/vim-01-beginner.tutor b/runtime/tutor/en/vim-01-beginner.tutor index 85d693d5f3..86efa78561 100644 --- a/runtime/tutor/en/vim-01-beginner.tutor +++ b/runtime/tutor/en/vim-01-beginner.tutor @@ -458,7 +458,7 @@ Now go on to the next lesson. # Lesson 4.1: CURSOR LOCATION AND FILE STATUS ** Type ``{normal} to show your location in a file and the file status. - Type `G`{normal} to move to a line in the file. ** + Type `{count}G`{normal} to move to line {count} in the file. ** NOTE: Read this entire lesson before executing any of the steps!! @@ -933,11 +933,20 @@ default. To start using more features you have to create a "vimrc" file. 3. Press ``{normal} and Vim will show a list of commands that start with "e". - 4. Press ``{normal} and Vim will complete the command name to ":edit". + 4. Press ``{normal} and Vim will show a menu with possible completions + (or complete the match, if the entered command is unique, e.g. + ":ed``{normal}" will be completed to ":edit"). - 5. Now add a space and the start of an existing file name: `:edit FIL`{vim} + 5. Use ``{normal} or ``{normal} to go to the next match. Or use + ``{normal} or ``{normal} to go to the previous match. - 6. Press ``{normal}. Vim will complete the name (if it is unique). + 6. Choose the entry `edit`{vim}. Now you can see that the word `edit`{vim} + have been automatically inserted to the command line. + + 7. Now add a space and the start of an existing file name: `:edit FIL`{vim} + + 8. Press ``{normal}. Vim will show a completion menu with list of file + names that start with `FIL` NOTE: Completion works for many commands. It is especially useful for `:help`{vim}. @@ -956,7 +965,7 @@ NOTE: Completion works for many commands. It is especially useful for 5. Create a vimrc startup script to keep your preferred settings. 6. While in command mode, press ``{normal} to see possible completions. - Press ``{normal} to use one completion. + Press ``{normal} to use the completion menu and select a match. # CONCLUSION From c98250377d32007490da46b3334771ba3b2667fe Mon Sep 17 00:00:00 2001 From: Luuk van Baal Date: Sun, 13 Apr 2025 17:45:34 +0200 Subject: [PATCH 084/633] patch 9.1.1297: Ctrl-D scrolling can get stuck Problem: cursor_correct() calculates a valid cursor position which is later changed by update_topline() and causes Ctrl-D scrolling to be stuck (Daniel Steinberg, after v9.1.0258). Solution: Update the valid cursor position before validating topline (Luuk van Baal). fixes: #17106 closes: #17110 Signed-off-by: Luuk van Baal Signed-off-by: Christian Brabandt --- src/move.c | 1 + src/testdir/test_normal.vim | 19 +++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 22 insertions(+) diff --git a/src/move.c b/src/move.c index 5d34947a58..f4bce40d7b 100644 --- a/src/move.c +++ b/src/move.c @@ -3120,6 +3120,7 @@ cursor_correct(void) ~(VALID_WROW|VALID_WCOL|VALID_CHEIGHT|VALID_CROW); } } + check_cursor_moved(curwin); curwin->w_valid |= VALID_TOPLINE; } diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index 35c290c8d7..aa24bceda5 100644 --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -4326,4 +4326,23 @@ func Test_normal_go() bwipe! endfunc +" Test for Ctrl-D with 'scrolloff' and narrow window does not get stuck. +func Test_scroll_longline_scrolloff() + 11new + 36vsplit + set scrolloff=5 + + call setline(1, ['']->repeat(5)) + call setline(6, ['foo'->repeat(20)]->repeat(2)) + call setline(8, ['bar'->repeat(30)]) + call setline(9, ['']->repeat(5)) + exe "normal! \" + call assert_equal(6, line('w0')) + exe "normal! \" + call assert_equal(7, line('w0')) + + set scrolloff& + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable diff --git a/src/version.c b/src/version.c index 6f3f241784..e95226cdcd 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1297, /**/ 1296, /**/ From 3956c5b53c671b8b3df50758be0093f5699db0e7 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sun, 13 Apr 2025 17:49:50 +0200 Subject: [PATCH 085/633] patch 9.1.1298: define_function() is too long Problem: define_function() is too long Solution: refactor and split up into smaller functions (Yegappan Lakshmanan) closes: #17105 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/userfunc.c | 197 ++++++++++++++++++++++++++++--------------------- src/version.c | 2 + 2 files changed, 116 insertions(+), 83 deletions(-) diff --git a/src/userfunc.c b/src/userfunc.c index b328cf58ad..76cfd4413f 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -4838,6 +4838,117 @@ list_functions(regmatch_T *regmatch) } } +/* + * ":function /pat": list functions matching pattern. + */ + static char_u * +list_functions_matching_pat(exarg_T *eap) +{ + char_u *p; + char_u c; + + p = skip_regexp(eap->arg + 1, '/', TRUE); + if (!eap->skip) + { + regmatch_T regmatch; + + c = *p; + *p = NUL; + regmatch.regprog = vim_regcomp(eap->arg + 1, RE_MAGIC); + *p = c; + if (regmatch.regprog != NULL) + { + regmatch.rm_ic = p_ic; + list_functions(®match); + vim_regfree(regmatch.regprog); + } + } + if (*p == '/') + ++p; + + return p; +} + +/* + * List function "name". + * Returns the function pointer or NULL on failure. + */ + static ufunc_T * +list_one_function(exarg_T *eap, char_u *name, char_u *p, int is_global) +{ + ufunc_T *fp = NULL; + int j; + + if (!ends_excmd(*skipwhite(p))) + { + semsg(_(e_trailing_characters_str), p); + return NULL; + } + + set_nextcmd(eap, p); + + if (eap->nextcmd != NULL) + *p = NUL; + + if (eap->skip || got_int) + return NULL; + + fp = find_func(name, is_global); + if (fp == NULL && ASCII_ISUPPER(*eap->arg)) + { + char_u *up = untrans_function_name(name); + + // With Vim9 script the name was made script-local, if not + // found try again with the original name. + if (up != NULL) + fp = find_func(up, FALSE); + } + + if (fp == NULL) + { + emsg_funcname(e_undefined_function_str, eap->arg); + return NULL; + } + + // Check no function was added or removed from a timer, e.g. at + // the more prompt. "fp" may then be invalid. + int prev_ht_changed = func_hashtab.ht_changed; + + if (list_func_head(fp, TRUE) != OK) + return fp; + + for (j = 0; j < fp->uf_lines.ga_len && !got_int; ++j) + { + if (FUNCLINE(fp, j) == NULL) + continue; + msg_putchar('\n'); + msg_outnum((long)(j + 1)); + if (j < 9) + msg_putchar(' '); + if (j < 99) + msg_putchar(' '); + if (function_list_modified(prev_ht_changed)) + break; + msg_prt_line(FUNCLINE(fp, j), FALSE); + out_flush(); // show a line at a time + ui_breakcheck(); + } + + if (!got_int) + { + msg_putchar('\n'); + if (!function_list_modified(prev_ht_changed)) + { + if (fp->uf_def_status != UF_NOT_COMPILED) + msg_puts(" enddef"); + else + msg_puts(" endfunction"); + } + } + + return fp; +} + /* * ":function" also supporting nested ":def". * When "name_arg" is not NULL this is a nested function, using "name_arg" for @@ -4858,7 +4969,6 @@ define_function( int obj_member_count) { int j; - int c; int saved_did_emsg = FALSE; char_u *name = name_arg; size_t namelen = 0; @@ -4888,9 +4998,7 @@ define_function( int vim9script = in_vim9script(); imported_T *import = NULL; - /* - * ":function" without argument: list functions. - */ + // ":function" without argument: list functions. if (ends_excmd2(eap->cmd, eap->arg)) { if (!eap->skip) @@ -4904,24 +5012,7 @@ define_function( */ if (*eap->arg == '/') { - p = skip_regexp(eap->arg + 1, '/', TRUE); - if (!eap->skip) - { - regmatch_T regmatch; - - c = *p; - *p = NUL; - regmatch.regprog = vim_regcomp(eap->arg + 1, RE_MAGIC); - *p = c; - if (regmatch.regprog != NULL) - { - regmatch.rm_ic = p_ic; - list_functions(®match); - vim_regfree(regmatch.regprog); - } - } - if (*p == '/') - ++p; + p = list_functions_matching_pat(eap); set_nextcmd(eap, p); return NULL; } @@ -5027,67 +5118,7 @@ define_function( */ if (!paren) { - if (!ends_excmd(*skipwhite(p))) - { - semsg(_(e_trailing_characters_str), p); - goto ret_free; - } - set_nextcmd(eap, p); - if (eap->nextcmd != NULL) - *p = NUL; - if (!eap->skip && !got_int) - { - fp = find_func(name, is_global); - if (fp == NULL && ASCII_ISUPPER(*eap->arg)) - { - char_u *up = untrans_function_name(name); - - // With Vim9 script the name was made script-local, if not - // found try again with the original name. - if (up != NULL) - fp = find_func(up, FALSE); - } - - if (fp != NULL) - { - // Check no function was added or removed from a timer, e.g. at - // the more prompt. "fp" may then be invalid. - int prev_ht_changed = func_hashtab.ht_changed; - - if (list_func_head(fp, TRUE) == OK) - { - for (j = 0; j < fp->uf_lines.ga_len && !got_int; ++j) - { - if (FUNCLINE(fp, j) == NULL) - continue; - msg_putchar('\n'); - msg_outnum((long)(j + 1)); - if (j < 9) - msg_putchar(' '); - if (j < 99) - msg_putchar(' '); - if (function_list_modified(prev_ht_changed)) - break; - msg_prt_line(FUNCLINE(fp, j), FALSE); - out_flush(); // show a line at a time - ui_breakcheck(); - } - if (!got_int) - { - msg_putchar('\n'); - if (!function_list_modified(prev_ht_changed)) - { - if (fp->uf_def_status != UF_NOT_COMPILED) - msg_puts(" enddef"); - else - msg_puts(" endfunction"); - } - } - } - } - else - emsg_funcname(e_undefined_function_str, eap->arg); - } + fp = list_one_function(eap, name, p, is_global); goto ret_free; } diff --git a/src/version.c b/src/version.c index e95226cdcd..41225c7bac 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1298, /**/ 1297, /**/ From 3cbd7f18e320aa1df652c9a16bed4b284c4538b8 Mon Sep 17 00:00:00 2001 From: Kirill Morozov Date: Sun, 13 Apr 2025 17:58:32 +0200 Subject: [PATCH 086/633] runtime(gleam): update Maintainer and filetype options closes: #17086 Signed-off-by: Kirill Morozov Signed-off-by: Trilowy <49493635+trilowy@users.noreply.github.com> Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 2 +- runtime/ftplugin/gleam.vim | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index 277a2831d8..02a5dd8527 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -180,7 +180,7 @@ runtime/ftplugin/gitconfig.vim @tpope runtime/ftplugin/gitignore.vim @ObserverOfTime runtime/ftplugin/gitrebase.vim @tpope runtime/ftplugin/gitsendemail.vim @tpope -runtime/ftplugin/gleam.vim @trilowy +runtime/ftplugin/gleam.vim @kirillmorozov runtime/ftplugin/go.vim @dbarnett runtime/ftplugin/goaccess.vim @meonkeys runtime/ftplugin/gomod.vim @yu-yk diff --git a/runtime/ftplugin/gleam.vim b/runtime/ftplugin/gleam.vim index 9ed607c4b3..5187d4d008 100644 --- a/runtime/ftplugin/gleam.vim +++ b/runtime/ftplugin/gleam.vim @@ -1,7 +1,8 @@ " Vim filetype plugin file -" Language: Gleam -" Maintainer: Trilowy (https://github.com/trilowy) -" Last Change: 2024 Oct 13 +" Language: Gleam +" Maintainer: Kirill Morozov +" Previous Maintainer: Trilowy (https://github.com/trilowy) +" Last Change: 2025-04-12 if exists('b:did_ftplugin') finish @@ -10,7 +11,11 @@ let b:did_ftplugin = 1 setlocal comments=://,:///,://// setlocal commentstring=//\ %s +setlocal expandtab +setlocal formatprg=gleam\ format\ --stdin +setlocal shiftwidth=2 +setlocal softtabstop=2 -let b:undo_ftplugin = "setlocal comments< commentstring<" +let b:undo_ftplugin = "setlocal com< cms< fp< et< sw< sts<" " vim: sw=2 sts=2 et From f4b1a60dd145c8dddd2b6a37699e96772cd69402 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sun, 13 Apr 2025 18:06:49 +0200 Subject: [PATCH 087/633] runtime(doc): update options.txt and clarify 'wildmode' further related: #17100 Co-authored-by: Girish Palya Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 089df14114..83e00e0a2f 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 12 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 13 VIM REFERENCE MANUAL by Bram Moolenaar @@ -9662,7 +9662,7 @@ A jump table for the options with a short description can be found at |Q_op|. applies to buffer name completion. "noselect" If 'wildmenu' is enabled, show the menu but do not preselect the first item. - If only one match exists, it is completed fully—unless "noselect" is + If only one match exists, it is completed fully, unless "noselect" is specified. Some useful combinations of colon-separated values: @@ -9698,7 +9698,7 @@ A jump table for the options with a short description can be found at |Q_op|. < Show 'wildmenu' without completing or selecting on first press Cycle full matches on second press > :set wildmode=noselect:lastused,full -< Same as above, but buffer matches are sorted by last used +< Same as above, but buffer matches are sorted by time last used More info here: |cmdline-completion|. *'wildoptions'* *'wop'* From 906f3068127c694d568c096a81d5e952341464fe Mon Sep 17 00:00:00 2001 From: "Philip H." <47042125+pheiduck@users.noreply.github.com> Date: Sun, 13 Apr 2025 18:19:56 +0200 Subject: [PATCH 088/633] CI: install xcode 16.3 on macos-15 runner closes: #17111 Signed-off-by: Philip H. <47042125+pheiduck@users.noreply.github.com> Signed-off-by: Christian Brabandt --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c323a86f4..b35c3b65ef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -355,7 +355,7 @@ jobs: if: matrix.runner == 'macos-15' run: | # Xcode 16 has compiler bugs which are fixed in 16.2+ - sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer + sudo xcode-select -s /Applications/Xcode_16.3.app/Contents/Developer - name: Set up environment run: | From 836b87d6998a1f18783afdc41c90ae1f38c9c3e9 Mon Sep 17 00:00:00 2001 From: Pierrick Guillaume Date: Sun, 13 Apr 2025 18:25:33 +0200 Subject: [PATCH 089/633] patch 9.1.1299: filetype: mbsyncrc files are not recognized Problem: filetype: mbsyncrc files are not recognized Solution: detect isyncrc and "*.mbsyncrc" files as mbsync filetype, include filetype and syntax plugin (Pierrick Guillaume) mbsync is a command line application which synchronizes mailboxes; currently Maildir and IMAP4 mailboxes are supported. New messages, message deletions and flag changes can be propagated both ways; the operation set can be selected in a fine-grained manner. References: mbsync syntax overview: mbsync manual (isync v1.4.4) https://isync.sourceforge.io/mbsync.html Upstream support for the mbsync filetype. Original plugin: https://github.com/Fymyte/mbsync.vim closes: #17103 Signed-off-by: Pierrick Guillaume Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 2 + runtime/doc/syntax.txt | 8 +- runtime/doc/tags | 2 + runtime/filetype.vim | 4 +- runtime/ftplugin/mbsync.vim | 13 ++ runtime/syntax/mbsync.vim | 218 ++++++++++++++++++++++++++++++++++ src/testdir/test_filetype.vim | 3 +- src/version.c | 2 + 8 files changed, 248 insertions(+), 4 deletions(-) create mode 100644 runtime/ftplugin/mbsync.vim create mode 100644 runtime/syntax/mbsync.vim diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index 02a5dd8527..6c723186db 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -231,6 +231,7 @@ runtime/ftplugin/m17ndb.vim @dseomn runtime/ftplugin/m3build.vim @dkearns runtime/ftplugin/m3quake.vim @dkearns runtime/ftplugin/markdown.vim @tpope +runtime/ftplugin/mbsync.vim @fymyte runtime/ftplugin/mediawiki.vim @avidseeker runtime/ftplugin/meson.vim @Liambeguin runtime/ftplugin/modula2.vim @dkearns @@ -554,6 +555,7 @@ runtime/syntax/mailcap.vim @dkearns runtime/syntax/make.vim @rohieb runtime/syntax/mallard.vim @jhradilek runtime/syntax/markdown.vim @tpope +runtime/syntax/mbsync.vim @fymyte runtime/syntax/mason.vim @petdance runtime/syntax/mediawiki.vim @avidseeker runtime/syntax/meson.vim @Liambeguin diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index 521c6116d8..3c3bde227e 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2025 Mar 27 +*syntax.txt* For Vim version 9.1. Last change: 2025 Apr 13 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2451,6 +2451,12 @@ have the following in your .vimrc: > let filetype_m = "mma" +MBSYNC *mbsync.vim* *ft-mbsync-syntax* + +The mbsync application uses a configuration file to setup mailboxes names, +user and password. All files ending with `.mbsyncrc` or with the name +`isyncrc` will be recognized as mbsync configuration files. + MEDIAWIKI *ft-mediawiki-syntax* By default, syntax highlighting includes basic HTML tags like style and diff --git a/runtime/doc/tags b/runtime/doc/tags index e0006da548..6b27199300 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7430,6 +7430,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-mbsync-syntax syntax.txt /*ft-mbsync-syntax* ft-mediawiki-syntax syntax.txt /*ft-mediawiki-syntax* ft-metafont ft_mp.txt /*ft-metafont* ft-metafont-intro ft_mp.txt /*ft-metafont-intro* @@ -8854,6 +8855,7 @@ matlab-indent indent.txt /*matlab-indent* matlab-indenting indent.txt /*matlab-indenting* max() builtin.txt /*max()* maxcol-variable eval.txt /*maxcol-variable* +mbsync.vim syntax.txt /*mbsync.vim* mbyte-IME mbyte.txt /*mbyte-IME* mbyte-XIM mbyte.txt /*mbyte-XIM* mbyte-combining mbyte.txt /*mbyte-combining* diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 2d9d3ad6f9..35726a7888 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: The Vim Project -" Last Change: 2025 Mar 18 +" Last Change: 2025 Apr 13 " Former Maintainer: Bram Moolenaar " Listen very carefully, I will say this only once @@ -1554,7 +1554,7 @@ au BufNewFile,BufRead *.nb,*.wl setf mma au BufNewFile,BufRead *.mel setf mel " mbsync -au BufNewFile,BufRead .mbsyncrc setf conf +au BufNewFile,BufRead *.mbsyncrc,isyncrc setf mbsync " mcmeta au BufNewFile,BufRead *.mcmeta setf json diff --git a/runtime/ftplugin/mbsync.vim b/runtime/ftplugin/mbsync.vim new file mode 100644 index 0000000000..f2d13effb4 --- /dev/null +++ b/runtime/ftplugin/mbsync.vim @@ -0,0 +1,13 @@ +" Vim filetype plugin file +" Language: mbsync configuration file +" Maintainer: Pierrick Guillaume +" Last Change: 2025 Apr 13 + +if (exists('b:did_ftplugin')) + finish +endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setlocal commentstring<" + +setlocal commentstring=#\ %s diff --git a/runtime/syntax/mbsync.vim b/runtime/syntax/mbsync.vim new file mode 100644 index 0000000000..f1df4719ca --- /dev/null +++ b/runtime/syntax/mbsync.vim @@ -0,0 +1,218 @@ +" Vim syntax file +" Language: mbsyncrc +" Maintainer: Pierrick Guillaume +" Last Change: 2025 Apr 13 +" +" Syntax support for mbsync config file + +" This file is based on the mbsync manual (isync v1.4.4) +" https://isync.sourceforge.io/mbsync.html + +if exists('b:current_syntax') + finish +endif + +let b:current_syntax = 'mbsync' + +let s:cpo_save = &cpo +set cpo&vim + +syn match mbsError '.*' + +syn match mbsCommentL '^#.*$' + +" Properties {{{ + +syn match mbsNumber '[0-9]\+' display contained +syn match mbsPath '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained +syn match mbsPath '"\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@! -]\|\\.\)\+"' display contained +syn match mbsName '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained +syn match mbsName '"\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@! -]\|\\.\)\+"' display contained +syn match mbsCommand '+\?.*$' display contained contains=mbsCommandPrompt +syn match mbsCommandPrompt '+' display contained +syn region mbsString start=+"+ skip=+\\"+ end=+"+ display contained +syn match mbsSizeUnit '[kKmMbB]' display contained +syn match mbsSize '[0-9]\+' display contained contains=mbsNumber nextgroup=mbsSizeUnit +syn keyword mbsBool yes no contained + +" }}} + + +" Stores {{{ +" Global Store Config Items +syn match mbsGlobConfPath '^Path\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent +syn match mbsGlobConfMaxSize '^MaxSize\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsSize transparent +syn match mbsGlobConfMapInbox '^MapInbox\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent +syn match mbsGlobConfFlatten '^Flatten\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent +syn match mbsGlobConfTrash '^Trash\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent +syn match mbsGlobConfTrashNO '^TrashNewOnly\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsBool transparent +syn match mbsGlobConfTrashRN '^TrashRemoteNew\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsBool transparent +syn keyword mbsGlobConfItemK Path MaxSize MapInbox Flatten Trash TrashNewOnly TrashRemoteNew contained + +syn cluster mbsGlobConfItem contains=mbsGlobConfPath,mbsGlobConfMaxSize,mbsGlobConfMapInbox,mbsGlobConfFlatten,mbsCommentL,mbsGlobConfTrash.* + + +" MaildirStore +syn match mbsMdSConfStMaildirStore '^MaildirStore\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsName transparent +syn match mbsMdSConfStAltMap '^AltMap\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsBool transparent +syn match mbsMdsConfStInbox '^Inbox\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsPath transparent +syn match mbsMdsConfStInfoDelimiter '^InfoDelimiter\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsPath transparent +syn keyword mbsMdSConfSubFoldersOpt Verbatim Legacy contained +syn match mbsMdSConfSubFoldersOpt 'Maildir++' display contained +syn match mbsMdsConfStSubFolders '^SubFolders\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsMdSConfSubFoldersOpt transparent + +syn cluster mbsMdSConfItem contains=mbsMdSConfSt.* + +syn keyword mbsMdSConfItemK MaildirStore AltMap Inbox InfoDelimiter SubFolders contained + +syn region mbsMaildirStore start="^MaildirStore" end="^$" end='\%$' contains=@mbsGlobConfItem,mbsCommentL,@mbsMdSConfItem,mbsError transparent + + +" IMAP4Accounts +syn match mbsIAConfStIMAPAccount '^IMAPAccount\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsName transparent +syn match mbsIAConfStHost '^Host\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStPort '^Port\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent +syn match mbsIAConfStTimeout '^Timeout\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent +syn match mbsIAConfStUser '^User\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStUserCmd '^UserCmd\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent +syn match mbsIAConfStPass '^Pass\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStPassCmd '^PassCmd\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent +syn match mbsIAConfStUseKeychain '^UseKeychain\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsBool transparent +syn match mbsIAConfStTunnel '^Tunnel\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent +syn match mbsIAConfStAuthMechs '^AuthMechs\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn keyword mbsIAConfSSLTypeOpt None STARTTLS IMAPS contained +syn match mbsIAConfStSSLType '^SSLType\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfSSLTypeOpt transparent +syn match mbsIAConfSSLVersionsOpt '\%(SSLv3\|TLSv1\%(.[123]\)\?\)\%(\s\+\%(SSLv3\|TLSv1\%(.[123]\)\?\)\)*' contained +syn match mbsIAConfStSSLVersions '^SSLVersions\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfSSLVersionsOpt transparent +syn match mbsIAConfStSystemCertificates '^SystemCertificates\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsBool transparent +syn match mbsIAConfStCertificateFile '^CertificateFile\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStClientCertificate '^ClientCertificate\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStClientKey '^ClientKey\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent +syn match mbsIAConfStCipherString '^CipherString\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsString transparent +syn match mbsIAConfStPipelineDepth '^PipelineDepth\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent +syn match mbsIAConfStDisableExtensions '^DisableExtensions\?\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent + +syn cluster mbsIAConfItem contains=mbsIAConfSt.* + +syn keyword mbsIAConfItemK + \ IMAPAccount Host Port Timeout User UserCmd Pass PassCmd UseKeychain Tunnel + \ AuthMechs SSLType SSLVersions SystemCertificates CertificateFile ClientCertificate + \ ClientKey CipherString PipelineDepth DisableExtension[s] contained + +syn region mbsIMAP4AccontsStore start="^IMAPAccount" end="^$" end="\%$" contains=@mbsGlobConfItem,mbsCommentL,@mbsIAConfItem,mbsError transparent + + +" IMAPStores +syn match mbsISConfStIMAPStore '^IMAPStore\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsName transparent +syn match mbsISConfStAccount '^Account\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsName transparent +syn match mbsISConfStUseNamespace '^UseNamespace\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsBool transparent +syn match mbsISConfStPathDelimiter '^PathDelimiter\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsPath transparent +syn match mbsISConfStSubscribedOnly '^SubscribedOnly\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsBool transparent + +syn cluster mbsISConfItem contains=mbsISConfSt.* + +syn keyword mbsISConfItemK IMAPStore Account UseNamespace PathDelimiter SubscribedOnly contained + +syn region mbsIMAPStore start="^IMAPStore" end="^$" end="\%$" contains=@mbsGlobConfItem,mbsCommentL,@mbsISConfItem,mbsError transparent + +" }}} + +" Channels {{{ + +syn match mbsCConfStChannel '^Channel\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsName transparent +syn region mbsCConfProxOpt matchgroup=mbsCConfProxOptOp start=':' matchgroup=mbsCConfProxOptOp end=':' contained contains=mbsName nextgroup=mbsPath keepend +syn match mbsCConfStFar '^Far\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfProxOpt transparent +syn match mbsCConfStNear '^Near\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfProxOpt transparent +syn match mbsCConfPatternOptOp '[*%!]' display contained +syn match mbsCConfPatternOpt '.*$' display contained contains=mbsCConfPatternOptOp +syn match mbsCConfStPattern '^Patterns\?\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfPatternOpt transparent +syn match mbsCConfStMaxSize '^MaxSize\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsSize transparent +syn match mbsCConfStMaxMessages '^MaxMessages\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsNumber transparent +syn match mbsCConfStExpireUnread '^ExpireUnread\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsBool transparent +syn match mbsCConfSyncOpt 'None\|All\|\%(\s\+\%(Pull\|Push\|New\|ReNew\|Delete\|Flags\)\)\+' display contained +syn match mbsCConfStSync '^Sync\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfSyncOpt transparent +syn keyword mbsCConfManipOpt None Far Near Both contained +syn match mbsCConfStCreate '^Create\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent +syn match mbsCConfStRemove '^Remove\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent +syn match mbsCConfStExpunge '^Expunge\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent +syn match mbsCConfStCopyArrivalDate '^CopyArrivalDate\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsBool transparent +syn match mbsCConfSyncStateOpt '\*\|.*$' display contained contains=mbsCConfSyncStateOptOp,mbsPath transparent +syn match mbsCConfSyncStateOptOp '\*' display contained +syn match mbsCConfStSyncState '^SyncState\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfSyncStateOpt transparent + +syn cluster mbsCConfItem contains=mbsCConfSt.* + +syn keyword mbsCConfItemK + \ Channel Far Near Pattern[s] MaxSize MaxMessages ExpireUnread Sync Create + \ Remove Expunge CopyArrivalDate SyncState contained + +syn region mbsChannel start="^Channel" end="^$" end="\%$" contains=@mbsCConfItem,mbsCommentL,mbsError transparent + +" }}} + +" Groups {{{ + +syn match mbsGConfGroupOpt '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained contains=mbsName nextgroup=mbsGConfChannelOpt +syn match mbsGConfStGroup '^Group\s\+\ze.*$' contains=mbsGConfItemK contained nextgroup=mbsGConfGroupOpt transparent +syn match mbsGConfChannelOpt '.*$' display contained +syn match mbsGConfStChannel '^Channels\?\s\+\ze.*$' contains=mbsGConfItemK contained nextgroup=mbsGConfChannelOpt transparent + +syn cluster mbsGConfItem contains=mbsGConfSt.* + +syn keyword mbsGConfItemK Group Channel[s] contained + +syn region mbsGroup start="^Group" end="^$" end="\%$" contains=@mbsGConfItem,mbsError transparent + +" }}} + +" Global Options {{{ + +syn match mbsFSync '^FSync\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsBool transparent +syn match mbsFieldDelimiter '^FieldDelimiter\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsPath transparent +syn match mbsBufferLimit '^BufferLimit\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsSize transparent + +syn keyword mbsGlobOptItemK FSync FieldDelimiter BufferLimit contained +" }}} + +" Highlights {{{ + +hi def link mbsError Error + +hi def link mbsCommentL Comment + +hi def link mbsNumber Number +hi def link mbsSizeUnit Type +hi def link mbsPath String +hi def link mbsString String +hi def link mbsCommand String +hi def link mbsCommandPrompt Operator +hi def link mbsName Constant +hi def link mbsBool Boolean + +hi def link mbsGlobConfItemK Statement + +hi def link mbsMdSConfItemK Statement +hi def link mbsMdSConfSubFoldersOpt Keyword + +hi def link mbsIAConfItemK Statement +hi def link mbsIAConfSSLTypeOpt Keyword +hi def link mbsIAConfSSLVersionsOpt Keyword + +hi def link mbsISConfItemK Statement + +hi def link mbsCConfItemK Statement +hi def link mbsCConfProxOptOp Operator +hi def link mbsCConfPatternOpt String +hi def link mbsCConfPatternOptOp Operator +hi def link mbsCConfSyncOpt Keyword +hi def link mbsCConfManipOpt Keyword +hi def link mbsCConfSyncStateOptOp Operator + +hi def link mbsGConfItemK Statement +hi def link mbsGConfChannelOpt String + +hi def link mbsGlobOptItemK Statement +" }}} + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index b3e60e29f3..a56e1ac027 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -181,7 +181,7 @@ def s:GetFilenameChecks(): dict> 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'], + conf: ['auto.master', 'file.conf', 'texdoc.cnf', '.x11vncrc', '.chktexrc', '.ripgreprc', 'ripgreprc', 'file.ctags'], config: ['configure.in', 'configure.ac', '/etc/hostname.file', 'any/etc/hostname.file'], confini: ['pacman.conf', 'paru.conf', 'mpv.conf', 'any/.aws/config', 'any/.aws/credentials', 'file.nmconnection'], context: ['tex/context/any/file.tex', 'file.mkii', 'file.mkiv', 'file.mkvi', 'file.mkxl', 'file.mklx'], @@ -472,6 +472,7 @@ def s:GetFilenameChecks(): dict> matlab: ['file.m'], maxima: ['file.demo', 'file.dmt', 'file.dm1', 'file.dm2', 'file.dm3', 'file.wxm', 'maxima-init.mac'], + mbsync: ['.mbsyncrc', 'file.mbsyncrc', 'isyncrc'], mediawiki: ['file.mw', 'file.wiki'], mel: ['file.mel'], mermaid: ['file.mmd', 'file.mmdc', 'file.mermaid'], diff --git a/src/version.c b/src/version.c index 41225c7bac..e4a0b0ed1e 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1299, /**/ 1298, /**/ From 4ec93fec125b2743a7f63b4fd3087fa5895eab8b Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Mon, 14 Apr 2025 21:14:33 +0200 Subject: [PATCH 090/633] runtime(doc): update enum helptext closes: #17112 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- runtime/doc/vim9class.txt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/runtime/doc/vim9class.txt b/runtime/doc/vim9class.txt index 5d6f7fca18..519545677c 100644 --- a/runtime/doc/vim9class.txt +++ b/runtime/doc/vim9class.txt @@ -1,4 +1,4 @@ -*vim9class.txt* For Vim version 9.1. Last change: 2025 Apr 05 +*vim9class.txt* For Vim version 9.1. Last change: 2025 Apr 13 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1067,6 +1067,22 @@ The above enum definition is equivalent to the following class definition: > public const ordinal: number endclass < +A enum can contain object variables and methods just like a regular +class: > + + enum Color + Cyan([0, 255, 255]), + Magenta([255, 0, 255]), + Gray([128, 128, 128]) + + var rgb_values: list + + def Get_RGB(): list + return this.rgb_values + enddef + endenum + echo Color.Magenta.Get_RGB() +< ============================================================================== 9. Rationale From 10f69298b4577b3712eedeb49b4d9ad1a69111f8 Mon Sep 17 00:00:00 2001 From: John Marriott Date: Mon, 14 Apr 2025 21:19:34 +0200 Subject: [PATCH 091/633] patch 9.1.1300: wrong detection of -inf Problem: wrong detection of -inf Solution: correctly compare 4 characters and not 3 (John Marriott) closes: #17109 Signed-off-by: John Marriott Signed-off-by: Christian Brabandt --- src/float.c | 2 +- src/testdir/test_viminfo.vim | 26 ++++++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/float.c b/src/float.c index 9e8074de8e..4c8e5fe10a 100644 --- a/src/float.c +++ b/src/float.c @@ -41,7 +41,7 @@ string2float( *value = INFINITY; return 3; } - if (STRNICMP(text, "-inf", 3) == 0) + if (STRNICMP(text, "-inf", 4) == 0) { *value = -INFINITY; return 4; diff --git a/src/testdir/test_viminfo.vim b/src/testdir/test_viminfo.vim index 7aab271336..2bbca3e5d3 100644 --- a/src/testdir/test_viminfo.vim +++ b/src/testdir/test_viminfo.vim @@ -1329,4 +1329,30 @@ func Test_viminfo_oldfiles_filter() let &viminfofile = _viminfofile endfunc +func Test_viminfo_global_var() + let _viminfofile = &viminfofile + let _viminfo = &viminfo + let &viminfofile='' + set viminfo+=! + let lines = [ + \ '# comment line', + \ "", + \ '# Viminfo version', + \ '|1,4', + \ "", + \ '*encoding=utf-8', + \ "", + \ '# global variables:', + \ "!VAL\tFLO\t-in", + \ "!VAR\tFLO\t-inf", + \ "", + \ ] + call writefile(lines, 'Xviminfo2', 'D') + rviminfo! Xviminfo2 + call assert_equal(0.0, g:VAL) + call assert_equal(str2float("-inf"), g:VAR) + let &viminfofile = _viminfofile + let &viminfo = _viminfo +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index e4a0b0ed1e..0a5b4ecf5d 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1300, /**/ 1299, /**/ From cbe53191d01926c045a39198b3a9517e3c5077d2 Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Mon, 14 Apr 2025 22:13:15 +0200 Subject: [PATCH 092/633] patch 9.1.1301: completion: cannot configure completion functions with 'complete' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: completion: cannot configure completion functions with 'complete' Solution: add support for setting completion functions using the f and o flag for 'complete' (Girish Palya) This change adds two new values to the `'complete'` (`'cpt'`) option: - `f` – invokes the function specified by the `'completefunc'` option - `f{func}` – invokes a specific function `{func}` (can be a string or `Funcref`) These new flags extend keyword completion behavior (e.g., via `` / ``) by allowing function-based sources to participate in standard keyword completion. **Key behaviors:** - Multiple `f{func}` values can be specified, and all will be called in order. - Functions should follow the interface defined in `:help complete-functions`. - When using `f{func}`, escaping is required for spaces (with `\`) and commas (with `\\`) in `Funcref` names. - If a function sets `'refresh'` to `'always'`, it will be re-invoked on every change to the input text. Otherwise, Vim will attempt to reuse and filter existing matches as the input changes, which matches the default behavior of other completion sources. - Matches are inserted at the keyword boundary for consistency with other completion methods. - If finding matches is time-consuming, `complete_check()` can be used to maintain responsiveness. - Completion matches are gathered in the sequence defined by the `'cpt'` option, preserving source priority. This feature increases flexibility of standard completion mechanism and may reduce the need for external completion plugins for many users. **Examples:** Complete matches from [LSP](https://github.com/yegappan/lsp) client. Notice the use of `refresh: always` and `function()`. ```vim set cpt+=ffunction("g:LspCompletor"\\,\ [5]). # maxitems = 5 def! g:LspCompletor(maxitems: number, findstart: number, base: string): any if findstart == 1 return g:LspOmniFunc(findstart, base) endif return {words: g:LspOmniFunc(findstart, base)->slice(0, maxitems), refresh: 'always'} enddef autocmd VimEnter * g:LspOptionsSet({ autoComplete: false, omniComplete: true }) ``` Complete matches from `:iabbrev`. ```vim set cpt+=fAbbrevCompletor def! g:AbbrevCompletor(findstart: number, base: string): any if findstart > 0 var prefix = getline('.')->strpart(0, col('.') - 1)->matchstr('\S\+$') if prefix->empty() return -2 endif return col('.') - prefix->len() - 1 endif var lines = execute('ia', 'silent!') if lines =~? gettext('No abbreviation found') return v:none # Suppresses warning message endif var items = [] for line in lines->split("\n") var m = line->matchlist('\v^i\s+\zs(\S+)\s+(.*)$') if m->len() > 2 && m[1]->stridx(base) == 0 items->add({ word: m[1], info: m[2], dup: 1 }) endif endfor return items->empty() ? v:none : items->sort((v1, v2) => v1.word < v2.word ? -1 : v1.word ==# v2.word ? 0 : 1) enddef ``` **Auto-completion:** Vim's standard completion frequently checks for user input while searching for new matches. It is responsive irrespective of file size. This makes it well-suited for smooth auto-completion. You can try with above examples: ```vim set cot=menuone,popup,noselect inf autocmd TextChangedI * InsComplete() def InsComplete() if getcharstr(1) == '' && getline('.')->strpart(0, col('.') - 1) =~ '\k$' SkipTextChangedIEvent() feedkeys("\", "n") endif enddef inoremap =SkipTextChangedIEvent() def SkipTextChangedIEvent(): string # Suppress next event caused by (or when no matches found) set eventignore+=TextChangedI timer_start(1, (_) => { set eventignore-=TextChangedI }) return '' enddef ``` closes: #17065 Co-authored-by: Christian Brabandt Co-authored-by: zeertzjq Co-authored-by: glepnir Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- runtime/doc/insert.txt | 5 +- runtime/doc/options.txt | 24 +- runtime/doc/version9.txt | 6 +- src/insexpand.c | 423 +++++++++++++++++-- src/optionstr.c | 65 +-- src/testdir/test_ins_complete.vim | 679 +++++++++++++++++++++++++++++- src/testdir/test_options.vim | 8 + src/version.c | 2 + 8 files changed, 1118 insertions(+), 94 deletions(-) diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt index 5c0ebcf2e7..f52cf40adb 100644 --- a/runtime/doc/insert.txt +++ b/runtime/doc/insert.txt @@ -1,4 +1,4 @@ -*insert.txt* For Vim version 9.1. Last change: 2025 Mar 09 +*insert.txt* For Vim version 9.1. Last change: 2025 Apr 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1167,6 +1167,9 @@ For example, the function can contain this: > let matches = ... list of words ... return {'words': matches, 'refresh': 'always'} < +If looking for matches is time-consuming, |complete_check()| may be used to +maintain responsiveness. + *complete-items* Each list item can either be a string or a Dictionary. When it is a string it is used as the completion. When it is a Dictionary it can contain these diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 83e00e0a2f..99e6d54f89 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 13 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2085,6 +2085,28 @@ A jump table for the options with a short description can be found at |Q_op|. |i_CTRL-X_CTRL-D| ] tag completion t same as "]" + f{func} call the function {func}. Multiple "f" flags may be specified. + Refer to |complete-functions| for details on how the function + is invoked and what it should return. The value can be the + name of a function or a |Funcref|. For |Funcref| values, + spaces must be escaped with a backslash ('\'), and commas with + double backslashes ('\\') (see |option-backslash|). + If the Dict returned by the {func} includes {"refresh": "always"}, + the function will be invoked again whenever the leading text + changes. + Completion matches are always inserted at the keyword + boundary, regardless of the column returned by {func} when + a:findstart is 1. This ensures compatibility with other + completion sources. + To make further modifications to the inserted text, {func} + can make use of |CompleteDonePre|. + If generating matches is potentially slow, |complete_check()| + should be used to avoid blocking and preserve editor + responsiveness. + f equivalent to using "f{func}", where the function is taken from + the 'completefunc' option. + o equivalent to using "f{func}", where the function is taken from + the 'omnifunc' option. Unloaded buffers are not loaded, thus their autocmds |:autocmd| are not executed, this may lead to unexpected completions from some files diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index befd92ffd6..50fb66ff93 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Apr 12 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41617,6 +41617,10 @@ Completion: ~ - improved commandline completion for the |:hi| command - New option value for 'wildmode': "noselect" - do not auto select an entry in the wildmenu +- New flags for 'complete': + "f{func}" - complete using given function + "f" - complete using 'completefunc' + "o" - complete using 'omnifunc' Options: ~ - the default for 'commentstring' contains whitespace padding to have diff --git a/src/insexpand.c b/src/insexpand.c index 9df0445392..4afb3d9a81 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -109,6 +109,7 @@ struct compl_S int cp_in_match_array; // collected by compl_match_array int cp_user_abbr_hlattr; // highlight attribute for abbr int cp_user_kind_hlattr; // highlight attribute for kind + int cp_cpt_value_idx; // index of this match's source in 'cpt' option }; // values for cp_flags @@ -124,7 +125,7 @@ struct compl_S * "compl_first_match" points to the start of the list. * "compl_curr_match" points to the currently selected entry. * "compl_shown_match" is different from compl_curr_match during - * ins_compl_get_exp(). + * ins_compl_get_exp(), when new matches are added to the list. * "compl_old_match" points to previous "compl_curr_match". */ static compl_T *compl_first_match = NULL; @@ -171,7 +172,10 @@ static int compl_started = FALSE; static int ctrl_x_mode = CTRL_X_NORMAL; static int compl_matches = 0; // number of completion matches -static string_T compl_pattern = {NULL, 0}; +static string_T compl_pattern = {NULL, 0}; // search pattern for matching items +#ifdef FEAT_COMPL_FUNC +static string_T cpt_compl_pattern = {NULL, 0}; // pattern returned by func in 'cpt' +#endif static int compl_direction = FORWARD; static int compl_shows_dir = FORWARD; static int compl_pending = 0; // > 1 for postponed CTRL-N @@ -208,6 +212,10 @@ static int compl_selected_item = -1; static int *compl_fuzzy_scores; +static int *cpt_func_refresh_always; // array indicating which 'cpt' functions have 'refresh:always' set +static int cpt_value_count; // total number of completion sources specified in the 'cpt' option +static int cpt_value_idx; // index of the current completion source being expanded + // "compl_match_array" points the currently displayed list of entries in the // popup menu. It is NULL when there is no popup menu. static pumitem_T *compl_match_array = NULL; @@ -227,7 +235,14 @@ static void ins_compl_fixRedoBufForLeader(char_u *ptr_arg); # if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL) static void ins_compl_add_list(list_T *list); static void ins_compl_add_dict(dict_T *dict); +static int get_userdefined_compl_info(colnr_T curs_col, callback_T *cb, int *startcol); +static callback_T *get_cpt_func_callback(char_u *funcname); +static void get_cpt_func_completion_matches(callback_T *cb); # endif +static int cpt_compl_src_init(char_u *p_cpt); +static int is_cpt_func_refresh_always(void); +static void cpt_compl_src_clear(void); +static void cpt_compl_refresh(void); static int ins_compl_key2dir(int c); static int ins_compl_pum_key(int c); static int ins_compl_key2count(int c); @@ -873,6 +888,7 @@ ins_compl_add( match->cp_user_abbr_hlattr = user_hl ? user_hl[0] : -1; match->cp_user_kind_hlattr = user_hl ? user_hl[1] : -1; match->cp_score = score; + match->cp_cpt_value_idx = cpt_value_idx; if (cptext != NULL) { @@ -1937,6 +1953,26 @@ find_line_end(char_u *ptr) return s; } +/* + * Free a completion item in the list + */ + static void +ins_compl_item_free(compl_T *match) +{ + int i; + + VIM_CLEAR_STRING(match->cp_str); + // several entries may use the same fname, free it just once. + if (match->cp_flags & CP_FREE_FNAME) + vim_free(match->cp_fname); + for (i = 0; i < CPT_COUNT; ++i) + vim_free(match->cp_text[i]); +#ifdef FEAT_EVAL + clear_tv(&match->cp_user_data); +#endif + vim_free(match); +} + /* * Free the list of completions */ @@ -1944,7 +1980,6 @@ find_line_end(char_u *ptr) ins_compl_free(void) { compl_T *match; - int i; VIM_CLEAR_STRING(compl_pattern); VIM_CLEAR_STRING(compl_leader); @@ -1960,16 +1995,7 @@ ins_compl_free(void) { match = compl_curr_match; compl_curr_match = compl_curr_match->cp_next; - VIM_CLEAR_STRING(match->cp_str); - // several entries may use the same fname, free it just once. - if (match->cp_flags & CP_FREE_FNAME) - vim_free(match->cp_fname); - for (i = 0; i < CPT_COUNT; ++i) - vim_free(match->cp_text[i]); -#ifdef FEAT_EVAL - clear_tv(&match->cp_user_data); -#endif - vim_free(match); + ins_compl_item_free(match); } while (compl_curr_match != NULL && !is_first_match(compl_curr_match)); compl_first_match = compl_curr_match = NULL; compl_shown_match = NULL; @@ -1993,6 +2019,7 @@ ins_compl_clear(void) edit_submode_extra = NULL; VIM_CLEAR_STRING(compl_orig_text); compl_enter_selects = FALSE; + cpt_compl_src_clear(); #ifdef FEAT_EVAL // clear v:completed_item set_vim_var_dict(VV_COMPLETED_ITEM, dict_alloc_lock(VAR_FIXED)); @@ -2026,8 +2053,8 @@ ins_compl_win_active(win_T *wp UNUSED) } /* - * Selected one of the matches. When FALSE the match was edited or using the - * longest common string. + * Selected one of the matches. When FALSE, the match was either edited or + * using the longest common string. */ int ins_compl_used_match(void) @@ -2185,7 +2212,11 @@ ins_compl_new_leader(void) compl_used_match = FALSE; if (compl_started) + { ins_compl_set_original_text(compl_leader.string, compl_leader.length); + if (is_cpt_func_refresh_always()) + cpt_compl_refresh(); + } else { #ifdef FEAT_SPELL @@ -2298,6 +2329,7 @@ ins_compl_restart(void) compl_matches = 0; compl_cont_status = 0; compl_cont_mode = 0; + cpt_compl_src_clear(); } /* @@ -3051,24 +3083,30 @@ get_insert_callback(int type) /* * Execute user defined complete function 'completefunc', 'omnifunc' or * 'thesaurusfunc', and get matches in "matches". - * "type" is either CTRL_X_OMNI or CTRL_X_FUNCTION or CTRL_X_THESAURUS. + * "type" can be one of CTRL_X_OMNI, CTRL_X_FUNCTION, or CTRL_X_THESAURUS. + * Callback function "cb" is set if triggered by a function in the 'cpt' + * option; otherwise, it is NULL. */ static void -expand_by_function(int type, char_u *base) +expand_by_function(int type, char_u *base, callback_T *cb) { list_T *matchlist = NULL; dict_T *matchdict = NULL; typval_T args[3]; char_u *funcname; pos_T pos; - callback_T *cb; typval_T rettv; int save_State = State; int retval; + int is_cpt_function = (cb != NULL); - funcname = get_complete_funcname(type); - if (*funcname == NUL) - return; + if (!is_cpt_function) + { + funcname = get_complete_funcname(type); + if (*funcname == NUL) + return; + cb = get_insert_callback(type); + } // Call 'completefunc' to obtain the list of matches. args[0].v_type = VAR_NUMBER; @@ -3083,7 +3121,6 @@ expand_by_function(int type, char_u *base) // Insert mode in another buffer. ++textlock; - cb = get_insert_callback(type); retval = call_callback(cb, 0, &rettv, 2, args); // Call a function, which returns a list or dict. @@ -3650,6 +3687,7 @@ typedef struct int found_all; // found all matches of a certain type. char_u *dict; // dictionary file to search int dict_f; // "dict" is an exact file name or not + callback_T *func_cb; // callback of function in 'cpt' option } ins_compl_next_state_T; /* @@ -3763,6 +3801,19 @@ process_next_cpt_value( st->dict_f = DICT_FIRST; } } +#ifdef FEAT_COMPL_FUNC + else if (*st->e_cpt == 'f' || *st->e_cpt == 'o') + { + compl_type = CTRL_X_FUNCTION; + if (*st->e_cpt == 'o') + st->func_cb = &curbuf->b_ofu_cb; + else + st->func_cb = (*++st->e_cpt != ',' && *st->e_cpt != NUL) + ? get_cpt_func_callback(st->e_cpt) : &curbuf->b_cfu_cb; + if (!st->func_cb) + compl_type = -1; + } +#endif #ifdef FEAT_FIND_ID else if (*st->e_cpt == 'i') compl_type = CTRL_X_PATH_PATTERNS; @@ -3821,7 +3872,7 @@ get_next_dict_tsr_completion(int compl_type, char_u *dict, int dict_f) { #ifdef FEAT_COMPL_FUNC if (thesaurus_func_complete(compl_type)) - expand_by_function(compl_type, compl_pattern.string); + expand_by_function(compl_type, compl_pattern.string, NULL); else #endif ins_compl_dictionaries( @@ -4412,6 +4463,38 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos) return found_new_match; } +/* + * Return the callback function associated with "funcname". + */ +#ifdef FEAT_COMPL_FUNC + static callback_T * +get_cpt_func_callback(char_u *funcname) +{ + static callback_T cb; + char_u buf[LSIZE]; + int slen; + + slen = copy_option_part(&funcname, buf, LSIZE, ","); + if (slen > 0 && option_set_callback_func(buf, &cb)) + return &cb; + return NULL; +} + +/* + * Retrieve new completion matches by invoking callback "cb". + */ + static void +expand_cpt_function(callback_T *cb) +{ + // Re-insert the text removed by ins_compl_delete(). + ins_compl_insert_bytes(compl_orig_text.string + get_compl_len(), -1); + // Get matches + get_cpt_func_completion_matches(cb); + // Undo insertion + ins_compl_delete(); +} +#endif + /* * get the next set of completion matches for "type". * Returns TRUE if a new match is found. Otherwise returns FALSE. @@ -4453,8 +4536,13 @@ get_next_completion_match(int type, ins_compl_next_state_T *st, pos_T *ini) #ifdef FEAT_COMPL_FUNC case CTRL_X_FUNCTION: + if (ctrl_x_mode_normal()) // Invoked by a func in 'cpt' option + expand_cpt_function(st->func_cb); + else + expand_by_function(type, compl_pattern.string, NULL); + break; case CTRL_X_OMNI: - expand_by_function(type, compl_pattern.string); + expand_by_function(type, compl_pattern.string, NULL); break; #endif @@ -4513,6 +4601,10 @@ ins_compl_get_exp(pos_T *ini) ? (char_u *)"." : curbuf->b_p_cpt); st.e_cpt = st.e_cpt_copy == NULL ? (char_u *)"" : st.e_cpt_copy; st.last_match_pos = st.first_match_pos = *ini; + + if ((ctrl_x_mode_normal() || ctrl_x_mode_line_or_eval()) + && !cpt_compl_src_init(st.e_cpt)) + return FAIL; } else if (st.ins_buf != curbuf && !buf_valid(st.ins_buf)) st.ins_buf = curbuf; // In case the buffer was wiped out. @@ -4522,7 +4614,7 @@ ins_compl_get_exp(pos_T *ini) ? &st.last_match_pos : &st.first_match_pos; // For ^N/^P loop over all the flags/windows/buffers in 'complete'. - for (;;) + for (cpt_value_idx = 0;;) { found_new_match = FAIL; st.set_match_pos = FALSE; @@ -4538,7 +4630,10 @@ ins_compl_get_exp(pos_T *ini) if (status == INS_COMPL_CPT_END) break; if (status == INS_COMPL_CPT_CONT) + { + cpt_value_idx++; continue; + } } // If complete() was called then compl_pattern has been reset. The @@ -4549,6 +4644,9 @@ ins_compl_get_exp(pos_T *ini) // get the next set of completion matches found_new_match = get_next_completion_match(type, &st, ini); + if (type > 0) + cpt_value_idx++; + // break the loop for specialized modes (use 'complete' just for the // generic ctrl_x_mode == CTRL_X_NORMAL) or when we've found a new // match @@ -4575,6 +4673,7 @@ ins_compl_get_exp(pos_T *ini) compl_started = FALSE; } } + cpt_value_idx = -1; compl_started = TRUE; if ((ctrl_x_mode_normal() || ctrl_x_mode_line_or_eval()) @@ -5478,9 +5577,13 @@ get_cmdline_compl_info(char_u *line, colnr_T curs_col) * 'completefunc' and 'thesaurusfunc') * Sets the global variables: compl_col, compl_length and compl_pattern. * Uses the global variable: spell_bad_len + * Callback function "cb" is set if triggered by a function in the 'cpt' + * option; otherwise, it is NULL. + * "startcol", when not NULL, contains the column returned by function. */ static int -get_userdefined_compl_info(colnr_T curs_col UNUSED) +get_userdefined_compl_info(colnr_T curs_col UNUSED, callback_T *cb UNUSED, + int *startcol UNUSED) { int ret = FAIL; @@ -5493,16 +5596,22 @@ get_userdefined_compl_info(colnr_T curs_col UNUSED) char_u *funcname; pos_T pos; int save_State = State; - callback_T *cb; + int len; + string_T *compl_pat; + int is_cpt_function = (cb != NULL); - // Call 'completefunc' or 'omnifunc' or 'thesaurusfunc' and get pattern - // length as a string - funcname = get_complete_funcname(ctrl_x_mode); - if (*funcname == NUL) + if (!is_cpt_function) { - semsg(_(e_option_str_is_not_set), ctrl_x_mode_function() - ? "completefunc" : "omnifunc"); - return FAIL; + // Call 'completefunc' or 'omnifunc' or 'thesaurusfunc' and get pattern + // length as a string + funcname = get_complete_funcname(ctrl_x_mode); + if (*funcname == NUL) + { + semsg(_(e_option_str_is_not_set), ctrl_x_mode_function() + ? "completefunc" : "omnifunc"); + return FAIL; + } + cb = get_insert_callback(ctrl_x_mode); } args[0].v_type = VAR_NUMBER; @@ -5512,7 +5621,6 @@ get_userdefined_compl_info(colnr_T curs_col UNUSED) args[2].v_type = VAR_UNKNOWN; pos = curwin->w_cursor; ++textlock; - cb = get_insert_callback(ctrl_x_mode); col = call_callback_retnr(cb, 2, args); --textlock; @@ -5526,6 +5634,9 @@ get_userdefined_compl_info(colnr_T curs_col UNUSED) return FAIL; } + if (startcol != NULL) + *startcol = col; + // Return value -2 means the user complete function wants to cancel the // complete without an error, do the same if the function did not execute // successfully. @@ -5534,6 +5645,8 @@ get_userdefined_compl_info(colnr_T curs_col UNUSED) // Return value -3 does the same as -2 and leaves CTRL-X mode. if (col == -3) { + if (is_cpt_function) + return FAIL; ctrl_x_mode = CTRL_X_NORMAL; edit_submode = NULL; if (!shortmess(SHM_COMPLETIONMENU)) @@ -5546,24 +5659,27 @@ get_userdefined_compl_info(colnr_T curs_col UNUSED) compl_opt_refresh_always = FALSE; compl_opt_suppress_empty = FALSE; - if (col < 0) + if (col < 0 || col > curs_col) col = curs_col; - compl_col = col; - if (compl_col > curs_col) - compl_col = curs_col; // Setup variables for completion. Need to obtain "line" again, // it may have become invalid. line = ml_get(curwin->w_cursor.lnum); - compl_length = curs_col - compl_col; - compl_pattern.string = vim_strnsave(line + compl_col, (size_t)compl_length); - if (compl_pattern.string == NULL) + len = curs_col - col; + compl_pat = is_cpt_function ? &cpt_compl_pattern : &compl_pattern; + compl_pat->string = vim_strnsave(line + col, (size_t)len); + if (compl_pat->string == NULL) { - compl_pattern.length = 0; + compl_pat->length = 0; return FAIL; } + compl_pat->length = (size_t)compl_length; - compl_pattern.length = (size_t)compl_length; + if (!is_cpt_function) + { + compl_col = col; + compl_length = len; + } ret = OK; #endif @@ -5644,7 +5760,7 @@ compl_get_info(char_u *line, int startcol, colnr_T curs_col, int *line_invalid) else if (ctrl_x_mode_function() || ctrl_x_mode_omni() || thesaurus_func_complete(ctrl_x_mode)) { - if (get_userdefined_compl_info(curs_col) == FAIL) + if (get_userdefined_compl_info(curs_col, NULL, NULL) != OK) return FAIL; *line_invalid = TRUE; // "line" may have become invalid } @@ -6130,3 +6246,220 @@ spell_back_to_badword(void) start_arrow(&tpos); } #endif + +/* + * Reset the info associated with completion sources. + */ + static void +cpt_compl_src_clear(void) +{ + VIM_CLEAR(cpt_func_refresh_always); + cpt_value_idx = -1; + cpt_value_count = 0; +} + +/* + * Initialize the info associated with completion sources. + */ + static int +cpt_compl_src_init(char_u *cpt_str) +{ + int count = 0; + char_u *p = cpt_str; + + while (*p) + { + while (*p == ',' || *p == ' ') // Skip delimiters + p++; + if (*p) // If not end of string, count this segment + { + count++; + copy_option_part(&p, IObuff, IOSIZE, ","); // Advance p + } + } + cpt_compl_src_clear(); + cpt_value_count = count; + if (count > 0) + { + cpt_func_refresh_always = ALLOC_CLEAR_MULT(int, count); + if (cpt_func_refresh_always == NULL) + { + cpt_value_count = 0; + return FAIL; + } + } + return OK; +} + +/* + * Return TRUE if any of the completion sources have 'refresh' set to 'always'. + */ + static int +is_cpt_func_refresh_always(void) +{ +#ifdef FEAT_COMPL_FUNC + int i; + + for (i = 0; i < cpt_value_count; i++) + if (cpt_func_refresh_always[i]) + return TRUE; +#endif + return FALSE; +} + +/* + * Make the completion list non-cyclic. + */ +#ifdef FEAT_COMPL_FUNC + static void +ins_compl_make_linear(void) +{ + compl_T *m; + + if (compl_first_match == NULL || compl_first_match->cp_prev == NULL) + return; + m = compl_first_match->cp_prev; + m->cp_next = NULL; + compl_first_match->cp_prev = NULL; +} +#endif + +/* + * Remove the matches linked to the current completion source (as indicated by + * cpt_value_idx) from the completion list. + */ +#ifdef FEAT_COMPL_FUNC + static compl_T * +remove_old_matches(void) +{ + compl_T *sublist_start = NULL, *sublist_end = NULL, *insert_at = NULL; + compl_T *current, *next; + int compl_shown_removed = FALSE; + int forward = compl_dir_forward(); + + // Identify the sublist of old matches that needs removal + for (current = compl_first_match; current != NULL; current = current->cp_next) + { + if (current->cp_cpt_value_idx < cpt_value_idx && (forward || (!forward && !insert_at))) + insert_at = current; + + if (current->cp_cpt_value_idx == cpt_value_idx) + { + if (!sublist_start) + sublist_start = current; + sublist_end = current; + if (!compl_shown_removed && compl_shown_match == current) + compl_shown_removed = TRUE; + } + + if ((forward && current->cp_cpt_value_idx > cpt_value_idx) || (!forward && insert_at)) + break; + } + + // Re-assign compl_shown_match if necessary + if (compl_shown_removed) + { + if (forward) + compl_shown_match = compl_first_match; + else + { // Last node will have the prefix that is being completed + for (current = compl_first_match; current->cp_next != NULL; current = current->cp_next) + ; + compl_shown_match = current; + } + } + + if (!sublist_start) // No nodes to remove + return insert_at; + + // Update links to remove sublist + if (sublist_start->cp_prev) + sublist_start->cp_prev->cp_next = sublist_end->cp_next; + else + compl_first_match = sublist_end->cp_next; + + if (sublist_end->cp_next) + sublist_end->cp_next->cp_prev = sublist_start->cp_prev; + + // Free all nodes in the sublist + sublist_end->cp_next = NULL; + for (current = sublist_start; current != NULL; current = next) + { + next = current->cp_next; + ins_compl_item_free(current); + } + + return insert_at; +} +#endif + +/* + * Retrieve completion matches using the callback function "cb" and store the + * 'refresh:always' flag. + */ +#ifdef FEAT_COMPL_FUNC + static void +get_cpt_func_completion_matches(callback_T *cb UNUSED) +{ + int ret; + int startcol; + + VIM_CLEAR_STRING(cpt_compl_pattern); + ret = get_userdefined_compl_info(curwin->w_cursor.col, cb, &startcol); + if (ret == FAIL && startcol == -3) + cpt_func_refresh_always[cpt_value_idx] = FALSE; + else if (ret == OK) + { + expand_by_function(0, cpt_compl_pattern.string, cb); + cpt_func_refresh_always[cpt_value_idx] = compl_opt_refresh_always; + compl_opt_refresh_always = FALSE; + } +} +#endif + +/* + * Retrieve completion matches from functions in the 'cpt' option where the + * 'refresh:always' flag is set. + */ + static void +cpt_compl_refresh(void) +{ +#ifdef FEAT_COMPL_FUNC + char_u *cpt; + char_u *p; + callback_T *cb; + + // Make the completion list linear (non-cyclic) + ins_compl_make_linear(); + // Make a copy of 'cpt' in case the buffer gets wiped out + cpt = vim_strsave(curbuf->b_p_cpt); + + cpt_value_idx = 0; + for (p = cpt; *p; cpt_value_idx++) + { + while (*p == ',' || *p == ' ') // Skip delimiters + p++; + + if (cpt_func_refresh_always[cpt_value_idx]) + { + if (*p == 'o') + cb = &curbuf->b_ofu_cb; + else if (*p == 'f') + cb = (*(p + 1) != ',' && *(p + 1) != NUL) + ? get_cpt_func_callback(p + 1) : &curbuf->b_cfu_cb; + if (cb) + { + compl_curr_match = remove_old_matches(); + get_cpt_func_completion_matches(cb); + } + } + + copy_option_part(&p, IObuff, IOSIZE, ","); // Advance p + } + cpt_value_idx = -1; + + vim_free(cpt); + // Make the list cyclic + compl_matches = ins_compl_make_cyclic(); +#endif +} diff --git a/src/optionstr.c b/src/optionstr.c index 60e28d68b7..47c340577f 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -1552,48 +1552,57 @@ did_set_commentstring(optset_T *args) #endif /* - * The 'complete' option is changed. + * Check if value for 'complete' is valid when 'complete' option is changed. */ char * did_set_complete(optset_T *args) { char_u **varp = (char_u **)args->os_varp; - char_u *s; + char_u *p = NULL; + char_u buffer[LSIZE]; + char_u *buf_ptr; + int escape; - // check if it is a valid value for 'complete' -- Acevedo - for (s = *varp; *s;) + for (p = *varp; *p; ) { - while (*s == ',' || *s == ' ') - s++; - if (!*s) - break; - if (vim_strchr((char_u *)".wbuksid]tU", *s) == NULL) - return illegal_char(args->os_errbuf, args->os_errbuflen, *s); - if (*++s != NUL && *s != ',' && *s != ' ') + vim_memset(buffer, 0, LSIZE); + buf_ptr = buffer; + escape = 0; + + // Extract substring while handling escaped commas + while (*p && (*p != ',' || escape) && buf_ptr < (buffer + LSIZE - 1)) { - if (s[-1] == 'k' || s[-1] == 's') + if (*p == '\\' && *(p + 1) == ',') { - // skip optional filename after 'k' and 's' - while (*s && *s != ',' && *s != ' ') - { - if (*s == '\\' && s[1] != NUL) - ++s; - ++s; - } + escape = 1; // Mark escape mode + p++; // Skip '\' } else { - if (args->os_errbuf != NULL) - { - vim_snprintf((char *)args->os_errbuf, args->os_errbuflen, - _(e_illegal_character_after_chr), *--s); - return args->os_errbuf; - } - return ""; + escape = 0; + *buf_ptr++ = *p; } + p++; } - } + *buf_ptr = NUL; + + if (vim_strchr((char_u *)".wbuksid]tUfo", *buffer) == NULL) + return illegal_char(args->os_errbuf, args->os_errbuflen, *buffer); + if (!vim_strchr((char_u *)"ksf", *buffer) && *(buffer + 1) != NUL) + { + if (args->os_errbuf) + { + vim_snprintf((char *)args->os_errbuf, args->os_errbuflen, + _(e_illegal_character_after_chr), *buffer); + return args->os_errbuf; + } + } + + // Skip comma and spaces + while (*p == ',' || *p == ' ') + p++; + } return NULL; } @@ -1601,7 +1610,7 @@ did_set_complete(optset_T *args) expand_set_complete(optexpand_T *args, int *numMatches, char_u ***matches) { static char *(p_cpt_values[]) = { - ".", "w", "b", "u", "k", "kspell", "s", "i", "d", "]", "t", "U", + ".", "w", "b", "u", "k", "kspell", "s", "i", "d", "]", "t", "U", "f", "o", NULL}; return expand_set_opt_string( args, diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index bc971b5da8..5c67dbf4f2 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -130,10 +130,15 @@ func Test_omni_dash() new exe "normal Gofind -\\" call assert_equal("find -help", getline('$')) + %d + set complete=o + exe "normal Gofind -\" + " 'complete' inserts at 'iskeyword' boundary (so you get --help) + call assert_equal("find --help", getline('$')) bwipe! delfunc Omni - set omnifunc= + set omnifunc= complete& endfunc func Test_omni_throw() @@ -153,11 +158,21 @@ func Test_omni_throw() call assert_exception('he he he') call assert_equal(1, g:CallCount) endtry + %d + set complete=o + let g:CallCount = 0 + try + exe "normal ifoo\" + call assert_false(v:true, 'command should have failed') + catch + call assert_exception('he he he') + call assert_equal(1, g:CallCount) + endtry bwipe! delfunc Omni unlet g:CallCount - set omnifunc= + set omnifunc= complete& endfunc func Test_omni_autoload() @@ -210,6 +225,16 @@ func Test_completefunc_args() call assert_equal(0, s:args[1][0]) set omnifunc= + set complete=fCompleteFunc + call feedkeys("i\\", 'x') + call assert_equal([1, 1], s:args[0]) + call assert_equal(0, s:args[1][0]) + set complete=o + call feedkeys("i\\", 'x') + call assert_equal([1, 1], s:args[0]) + call assert_equal(0, s:args[1][0]) + set complete& + bwipe! unlet s:args delfunc CompleteFunc @@ -255,7 +280,7 @@ func s:CompleteDone_CheckCompletedItemDict(pre) call assert_equal( ['one', 'two'], v:completed_item[ 'user_data' ] ) if a:pre - call assert_equal('function', complete_info().mode) + call assert_equal(a:pre == 1 ? 'function' : 'keyword', complete_info().mode) endif let s:called_completedone = 1 @@ -272,7 +297,15 @@ func Test_CompleteDoneNone() call assert_true(s:called_completedone) call assert_equal(oldline, newline) + let s:called_completedone = 0 + set complete=fCompleteDone_CompleteFuncNone + execute "normal a\\" + set complete& + let newline = join(map(range(&columns), 'nr2char(screenchar(&lines-1, v:val+1))'), '') + + call assert_true(s:called_completedone) + call assert_equal(oldline, newline) let s:called_completedone = 0 au! CompleteDone endfunc @@ -293,6 +326,7 @@ func Test_CompleteDone_vevent_keys() endfunc set omnifunc=CompleteFunc set completefunc=CompleteFunc + set complete=.,fCompleteFunc set completeopt+=menuone new @@ -316,7 +350,11 @@ func Test_CompleteDone_vevent_keys() call assert_equal('vim', g:complete_word) call assert_equal('keyword', g:complete_type) - call feedkeys("Shello vim visual v\\\", 'tx') + call feedkeys("Shello vim visual v\\", 'tx') + call assert_equal('', g:complete_word) + call assert_equal('keyword', g:complete_type) + + call feedkeys("Shello vim visual v\\", 'tx') call assert_equal('vim', g:complete_word) call assert_equal('keyword', g:complete_type) @@ -374,6 +412,21 @@ func Test_CompleteDoneDict() call assert_true(s:called_completedone) let s:called_completedone = 0 + au! CompleteDonePre + au! CompleteDone + + au CompleteDonePre * :call CompleteDone_CheckCompletedItemDict(2) + au CompleteDone * :call CompleteDone_CheckCompletedItemDict(0) + + set complete=.,fCompleteDone_CompleteFuncDict + execute "normal a\\" + set complete& + + call assert_equal(['one', 'two'], v:completed_item[ 'user_data' ]) + call assert_true(s:called_completedone) + + let s:called_completedone = 0 + au! CompleteDonePre au! CompleteDone endfunc @@ -416,6 +469,15 @@ func Test_CompleteDoneDictNoUserData() call assert_equal('', v:completed_item[ 'user_data' ]) call assert_true(s:called_completedone) + let s:called_completedone = 0 + + set complete=.,fCompleteDone_CompleteFuncDictNoUserData + execute "normal a\\" + set complete& + + call assert_equal('', v:completed_item[ 'user_data' ]) + call assert_true(s:called_completedone) + let s:called_completedone = 0 au! CompleteDone endfunc @@ -449,6 +511,24 @@ func Test_CompleteDoneList() call assert_equal('', v:completed_item[ 'user_data' ]) call assert_true(s:called_completedone) + let s:called_completedone = 0 + + set complete=.,fCompleteDone_CompleteFuncList + execute "normal a\\" + set complete& + + call assert_equal('', v:completed_item[ 'user_data' ]) + call assert_true(s:called_completedone) + + let s:called_completedone = 0 + + set complete=.,f + execute "normal a\\" + set complete& + + call assert_equal('', v:completed_item[ 'user_data' ]) + call assert_true(s:called_completedone) + let s:called_completedone = 0 au! CompleteDone endfunc @@ -492,11 +572,51 @@ func Test_completefunc_info() set completefunc=CompleteTest call feedkeys("i\\\\=string(complete_info())\\", "tx") call assert_equal("matched{'pum_visible': 1, 'mode': 'function', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1)) - bwipe! + %d + set complete=.,fCompleteTest + call feedkeys("i\\\=string(complete_info())\\", "tx") + call assert_equal("matched{'pum_visible': 1, 'mode': 'keyword', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1)) + %d + set complete=.,f + call feedkeys("i\\\=string(complete_info())\\", "tx") + call assert_equal("matched{'pum_visible': 1, 'mode': 'keyword', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1)) set completeopt& + set complete& set completefunc& endfunc +func Test_cpt_func_cursorcol() + func CptColTest(findstart, query) + if a:findstart + call assert_equal("foo bar", getline(1)) + call assert_equal(8, col('.')) + return col('.') + endif + call assert_equal("foo bar", getline(1)) + call assert_equal(8, col('.')) + return v:none + endfunc + + set complete=fCptColTest + new + call feedkeys("ifoo bar\", "tx") + bwipe! + new + set completeopt=longest + call feedkeys("ifoo bar\", "tx") + bwipe! + new + set completeopt=menuone + call feedkeys("ifoo bar\", "tx") + bwipe! + new + set completeopt=menuone,preinsert + call feedkeys("ifoo bar\", "tx") + bwipe! + set complete& completeopt& + delfunc CptColTest +endfunc + func ScrollInfoWindowUserDefinedFn(findstart, query) " User defined function (i_CTRL-X_CTRL-U) if a:findstart @@ -552,24 +672,34 @@ func CompleteInfoUserDefinedFn(findstart, query) endfunc func CompleteInfoTestUserDefinedFn(mvmt, idx, noselect) - new if a:noselect set completeopt=menuone,popup,noinsert,noselect else set completeopt=menu,preview endif - set completefunc=CompleteInfoUserDefinedFn - call feedkeys("i\\" . a:mvmt . "\\=string(complete_info())\\", "tx") - let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : '' - call assert_equal(completed. "{'pum_visible': 1, 'mode': 'function', 'selected': " . a:idx . ", 'items': [" . + let items = "[" . \ "{'word': 'foo', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}, " . \ "{'word': 'bar', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}, " . \ "{'word': 'baz', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}, " . \ "{'word': 'qux', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}" . - \ "]}", getline(1)) + \ "]" + new + set completefunc=CompleteInfoUserDefinedFn + call feedkeys("i\\" . a:mvmt . "\\=string(complete_info())\\", "tx") + let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : '' + call assert_equal(completed. "{'pum_visible': 1, 'mode': 'function', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1)) + %d + set complete=.,fCompleteInfoUserDefinedFn + call feedkeys("i\" . a:mvmt . "\\=string(complete_info())\\", "tx") + let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : '' + call assert_equal(completed. "{'pum_visible': 1, 'mode': 'keyword', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1)) + %d + set complete=.,f + call feedkeys("i\" . a:mvmt . "\\=string(complete_info())\\", "tx") + let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : '' + call assert_equal(completed. "{'pum_visible': 1, 'mode': 'keyword', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1)) bwipe! - set completeopt& - set completefunc& + set completeopt& completefunc& complete& endfunc func Test_complete_info_user_defined_fn() @@ -839,6 +969,10 @@ func Test_completefunc_error() set completefunc=CompleteFunc call setline(1, ['', 'abcd', '']) call assert_fails('exe "normal 2G$a\\"', 'E565:') + set complete=fCompleteFunc + call assert_fails('exe "normal 2G$a\"', 'E565:') + set complete=f + call assert_fails('exe "normal 2G$a\"', 'E565:') " delete text when called for the second time func CompleteFunc2(findstart, base) @@ -851,6 +985,10 @@ func Test_completefunc_error() set completefunc=CompleteFunc2 call setline(1, ['', 'abcd', '']) call assert_fails('exe "normal 2G$a\\"', 'E565:') + set complete=fCompleteFunc2 + call assert_fails('exe "normal 2G$a\"', 'E565:') + set complete=f + call assert_fails('exe "normal 2G$a\"', 'E565:') " Jump to a different window from the complete function func CompleteFunc3(findstart, base) @@ -863,9 +1001,15 @@ func Test_completefunc_error() set completefunc=CompleteFunc3 new call assert_fails('exe "normal a\\"', 'E565:') + %d + set complete=fCompleteFunc3 + call assert_fails('exe "normal a\"', 'E565:') + %d + set complete=f + call assert_fails('exe "normal a\"', 'E565:') close! - set completefunc& + set completefunc& complete& delfunc CompleteFunc delfunc CompleteFunc2 delfunc CompleteFunc3 @@ -884,7 +1028,15 @@ func Test_completefunc_invalid_data() set completefunc=CompleteFunc exe "normal i\\" call assert_equal('moon', getline(1)) - set completefunc& + %d + set complete=fCompleteFunc + exe "normal i\" + call assert_equal('moon', getline(1)) + %d + set complete=f + exe "normal i\" + call assert_equal('moon', getline(1)) + set completefunc& complete& close! endfunc @@ -1557,18 +1709,363 @@ func Test_complete_item_refresh_always() return #{words: res, refresh: 'always'} endif endfunc - new set completeopt=menu,longest set completefunc=Tcomplete + new exe "normal! iup\\\\\\\" call assert_equal('up', getline(1)) call assert_equal(6, g:CallCount) + %d + let g:CallCount = 0 + set complete=fTcomplete + exe "normal! iup\\\\\\" + call assert_equal('up', getline(1)) + call assert_equal(6, g:CallCount) + %d + let g:CallCount = 0 + set complete=f + exe "normal! iup\\\\\\" + call assert_equal('up', getline(1)) + call assert_equal(6, g:CallCount) + %d + let g:CallCount = 0 + set omnifunc=Tcomplete + set complete=o + exe "normal! iup\\\\\\" + call assert_equal('up', getline(1)) + call assert_equal(6, g:CallCount) + bw! set completeopt& + set complete& set completefunc& - bw! delfunc Tcomplete endfunc +" Test for 'cpt' user func that fails (return -2/-3) when refresh:always +func Test_cpt_func_refresh_always_fail() + func! CompleteFail(retval, findstart, base) + if a:findstart + return a:retval + endif + call assert_equal(-999, a:findstart) " Should not reach here + endfunc + new + set complete=ffunction('CompleteFail'\\,\ [-2]) + exe "normal! ia\" + %d + set complete=ffunction('CompleteFail'\\,\ [-3]) + exe "normal! ia\" + bw! + + func! CompleteFailIntermittent(retval, findstart, base) + if a:findstart + if g:CallCount == 2 + let g:CallCount += 1 + return a:retval + endif + return col('.') - 1 + endif + let g:CallCount += 1 + let res = [[], ['foo', 'fbar'], ['foo1', 'foo2'], ['foofail'], ['fooo3']] + return #{words: res[g:CallCount], refresh: 'always'} + endfunc + new + set completeopt=menuone,noselect + set complete=ffunction('CompleteFailIntermittent'\\,\ [-2]) + let g:CallCount = 0 + exe "normal! if\\=complete_info([\"items\"])\" + call assert_match('''word'': ''foo''.*''word'': ''fbar''', getline(1)) + call assert_equal(1, g:CallCount) + %d + let g:CallCount = 0 + exe "normal! if\o\=complete_info([\"items\", \"selected\"])\" + call assert_match('''selected'': -1.*''word'': ''foo1''.*''word'': ''foo2''', getline(1)) + call assert_equal(2, g:CallCount) + %d + set complete=ffunction('CompleteFailIntermittent'\\,\ [-3]) + let g:CallCount = 0 + exe "normal! if\o\=complete_info([\"items\", \"selected\"])\" + call assert_match('''selected'': -1.*''word'': ''foo1''.*''word'': ''foo2''', getline(1)) + call assert_equal(2, g:CallCount) + %d + set complete=ffunction('CompleteFailIntermittent'\\,\ [-2]) + " completion mode is dismissed when there are no matches in list + let g:CallCount = 0 + exe "normal! if\oo\=complete_info([\"items\"])\" + call assert_equal('foo{''items'': []}', getline(1)) + call assert_equal(3, g:CallCount) + %d + let g:CallCount = 0 + exe "normal! if\oo\\=complete_info([\"items\"])\" + call assert_equal('fo{''items'': []}', getline(1)) + call assert_equal(3, g:CallCount) + %d + " completion mode continues when matches from other sources present + set complete=.,ffunction('CompleteFailIntermittent'\\,\ [-2]) + call setline(1, 'fooo1') + let g:CallCount = 0 + exe "normal! Gof\oo\=complete_info([\"items\", \"selected\"])\" + call assert_equal('foo{''selected'': -1, ''items'': [{''word'': ''fooo1'', ''menu'': '''', ' + \ . '''user_data'': '''', ''info'': '''', ''kind'': '''', ''abbr'': ''''}]}', + \ getline(2)) + call assert_equal(3, g:CallCount) + %d + call setline(1, 'fooo1') + let g:CallCount = 0 + exe "normal! Gof\oo\\=complete_info([\"items\"])\" + call assert_match('''word'': ''fooo1''.*''word'': ''fooo3''', getline(2)) + call assert_equal(4, g:CallCount) + %d + " refresh will stop when -3 is returned + set complete=.,,\ ffunction('CompleteFailIntermittent'\\,\ [-3]) + call setline(1, 'fooo1') + let g:CallCount = 0 + exe "normal! Gof\o\\=complete_info([\"items\", \"selected\"])\" + call assert_equal('f{''selected'': -1, ''items'': [{''word'': ''fooo1'', ''menu'': '''', ' + \ . '''user_data'': '''', ''info'': '''', ''kind'': '''', ''abbr'': ''''}]}', + \ getline(2)) + call assert_equal(3, g:CallCount) + %d + call setline(1, 'fooo1') + let g:CallCount = 0 + exe "normal! Gof\oo\\=complete_info([\"items\", \"selected\"])\" + call assert_equal('fo{''selected'': -1, ''items'': [{''word'': ''fooo1'', ''menu'': '''', ' + \ . '''user_data'': '''', ''info'': '''', ''kind'': '''', ''abbr'': ''''}]}', + \ getline(2)) + call assert_equal(3, g:CallCount) + bw! + + set complete& completeopt& + delfunc CompleteFail + delfunc CompleteFailIntermittent +endfunc + +" Select items before they are removed by refresh:always +func Test_cpt_select_item_refresh_always() + + func CompleteMenuWords() + let info = complete_info(["items", "selected"]) + call map(info.items, {_, v -> v.word}) + return info + endfunc + + func! CompleteItemsSelect(compl, findstart, base) + if a:findstart + return col('.') - 1 + endif + let g:CallCount += 1 + if g:CallCount == 2 + return #{words: a:compl, refresh: 'always'} + endif + let res = [[], ['fo', 'foobar'], [], ['foo1', 'foo2']] + return #{words: res[g:CallCount], refresh: 'always'} + endfunc + + new + set complete=.,ffunction('CompleteItemsSelect'\\,\ [[]]) + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\=CompleteMenuWords()\" + call assert_equal('fo{''selected'': 1, ''items'': [''foobarbar'', ''fo'', ''foobar'']}', getline(2)) + call assert_equal(1, g:CallCount) + %d + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\\=CompleteMenuWords()\" + call assert_equal('fo{''selected'': 0, ''items'': [''fo'', ''foobar'', ''foobarbar'']}', getline(2)) + call assert_equal(1, g:CallCount) + %d + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\o\=CompleteMenuWords()\" + call assert_equal('foo{''selected'': -1, ''items'': []}' , getline(2)) + call assert_equal(1, g:CallCount) + %d + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\\=CompleteMenuWords()\" + call assert_equal('f{''selected'': -1, ''items'': [''foobarbar'']}', getline(2)) + call assert_equal(2, g:CallCount) + %d + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\\\=CompleteMenuWords()\" + call assert_equal('f{''selected'': -1, ''items'': [''foobarbar'']}', getline(2)) + call assert_equal(2, g:CallCount) + + %d + set complete=.,ffunction('CompleteItemsSelect'\\,\ [['foonext']]) + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\\=CompleteMenuWords()\" + call assert_equal('f{''selected'': -1, ''items'': [''foobarbar'', ''foonext'']}', getline(2)) + call assert_equal(2, g:CallCount) + %d + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\\\=CompleteMenuWords()\" + call assert_equal('f{''selected'': -1, ''items'': [''foonext'', ''foobarbar'']}', getline(2)) + call assert_equal(2, g:CallCount) + + %d + call setline(1, "foob") + let g:CallCount = 0 + exe "normal! Gof\\\=CompleteMenuWords()\" + call assert_equal('foo{''selected'': 0, ''items'': [''foob'', ''foonext'']}', getline(2)) + call assert_equal(2, g:CallCount) + %d + call setline(1, "foob") + let g:CallCount = 0 + exe "normal! Gof\\\\=CompleteMenuWords()\" + call assert_equal('fo{''selected'': 0, ''items'': [''foob'', ''foo1'', ''foo2'']}', getline(2)) + call assert_equal(3, g:CallCount) + + %d + call setline(1, "foob") + let g:CallCount = 0 + exe "normal! Gof\\\=CompleteMenuWords()\" + call assert_equal('foo{''selected'': 1, ''items'': [''foonext'', ''foob'']}', getline(2)) + call assert_equal(2, g:CallCount) + %d + call setline(1, "foob") + let g:CallCount = 0 + exe "normal! Gof\\\\=CompleteMenuWords()\" + call assert_equal('fo{''selected'': 2, ''items'': [''foo1'', ''foo2'', ''foob'']}', getline(2)) + call assert_equal(3, g:CallCount) + + %d + set complete=.,ffunction('CompleteItemsSelect'\\,\ [['fo'\\,\ 'foonext']]) + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\\=CompleteMenuWords()\" + call assert_equal('f{''selected'': -1, ''items'': [''foobarbar'', ''fo'', ''foonext'']}', getline(2)) + call assert_equal(2, g:CallCount) + %d + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\\\=CompleteMenuWords()\" + call assert_equal('f{''selected'': -1, ''items'': [''fo'', ''foonext'', ''foobarbar'']}', getline(2)) + call assert_equal(2, g:CallCount) + bw! + + set complete& + delfunc CompleteMenuWords + delfunc CompleteItemsSelect +endfunc + +" Test two functions together, each returning refresh:always +func Test_cpt_multi_func_refresh_always() + + func CompleteMenuMatches() + let info = complete_info(["matches", "selected"]) + call map(info.matches, {_, v -> v.word}) + return info + endfunc + + func! CompleteItems1(findstart, base) + if a:findstart + return col('.') - 1 + endif + let g:CallCount1 += 1 + let res = [[], [], ['foo1', 'foobar1'], [], ['foo11', 'foo12'], [], ['foo13', 'foo14']] + return #{words: res[g:CallCount1], refresh: 'always'} + endfunc + + func! CompleteItems2(findstart, base) + if a:findstart + return col('.') - 1 + endif + let g:CallCount2 += 1 + let res = [[], [], [], ['foo2', 'foobar2'], ['foo21', 'foo22'], ['foo23'], []] + return #{words: res[g:CallCount2], refresh: 'always'} + endfunc + + set complete= + exe "normal! if\\=CompleteMenuMatches()\" + " \x0e is + call assert_equal("f\x0e" . '{''matches'': [], ''selected'': -1}', getline(1)) + + set completeopt=menuone,noselect + set complete=fCompleteItems1,fCompleteItems2 + + new + let g:CallCount1 = 0 + let g:CallCount2 = 0 + exe "normal! if\o\o\=CompleteMenuMatches()\" + call assert_equal('foo{''matches'': [''foo2'', ''foobar2''], ''selected'': -1}', getline(1)) + call assert_equal(3, g:CallCount1) + call assert_equal(3, g:CallCount2) + %d + let g:CallCount1 = 0 + let g:CallCount2 = 0 + exe "normal! if\o\o\=CompleteMenuMatches()\" + call assert_equal('foo{''matches'': [''foo2'', ''foobar2''], ''selected'': -1}', getline(1)) + call assert_equal(3, g:CallCount1) + call assert_equal(3, g:CallCount2) + %d + let g:CallCount1 = 0 + let g:CallCount2 = 0 + exe "normal! if\\=CompleteMenuMatches()\" + call assert_equal('f{''matches'': [], ''selected'': -1}', getline(1)) + call assert_equal(1, g:CallCount1) + call assert_equal(1, g:CallCount2) + %d + let g:CallCount1 = 1 + let g:CallCount2 = 1 + exe "normal! if\\=CompleteMenuMatches()\" + call assert_equal('f{''matches'': [''foo1'', ''foobar1''], ''selected'': -1}', getline(1)) + call assert_equal(2, g:CallCount2) + call assert_equal(2, g:CallCount2) + %d + let g:CallCount1 = 1 + let g:CallCount2 = 1 + exe "normal! if\o\=CompleteMenuMatches()\" + call assert_equal('fo{''matches'': [''foo2'', ''foobar2''], ''selected'': -1}', getline(1)) + call assert_equal(3, g:CallCount2) + call assert_equal(3, g:CallCount2) + %d + let g:CallCount1 = 1 + let g:CallCount2 = 1 + exe "normal! if\o\=CompleteMenuMatches()\" + call assert_equal('fo{''matches'': [''foo2'', ''foobar2''], ''selected'': -1}', getline(1)) + call assert_equal(3, g:CallCount2) + call assert_equal(3, g:CallCount2) + %d + let g:CallCount1 = 1 + let g:CallCount2 = 1 + exe "normal! if\oo\=CompleteMenuMatches()\" + call assert_equal('foo{''matches'': [''foo11'', ''foo12'', ''foo21'', ''foo22''], ''selected'': -1}', getline(1)) + call assert_equal(4, g:CallCount2) + call assert_equal(4, g:CallCount2) + %d + let g:CallCount1 = 1 + let g:CallCount2 = 1 + exe "normal! if\oo\\=CompleteMenuMatches()\" + call assert_equal('fo{''matches'': [''foo23''], ''selected'': -1}', getline(1)) + call assert_equal(5, g:CallCount2) + call assert_equal(5, g:CallCount2) + %d + let g:CallCount1 = 1 + let g:CallCount2 = 1 + exe "normal! if\oo\\=CompleteMenuMatches()\" + call assert_equal('fo{''matches'': [''foo23''], ''selected'': -1}', getline(1)) + call assert_equal(5, g:CallCount2) + call assert_equal(5, g:CallCount2) + %d + let g:CallCount1 = 1 + let g:CallCount2 = 1 + exe "normal! if\oo\o\=CompleteMenuMatches()\" + call assert_equal('foo{''matches'': [''foo13'', ''foo14''], ''selected'': -1}', getline(1)) + call assert_equal(6, g:CallCount2) + call assert_equal(6, g:CallCount2) + bw! + + set complete& completeopt& + delfunc CompleteMenuMatches + delfunc CompleteItems1 + delfunc CompleteItems2 +endfunc + " Test for completing from a thesaurus file without read permission func Test_complete_unreadable_thesaurus_file() CheckUnix @@ -1608,6 +2105,143 @@ func Test_no_mapping_for_ctrl_x_key() bwipe! endfunc +" Test for different ways of setting a function in 'complete' option +func Test_cpt_func_callback() + func CompleteFunc1(callnr, findstart, base) + call add(g:CompleteFunc1Args, [a:callnr, a:findstart, a:base]) + return a:findstart ? 0 : [] + endfunc + func CompleteFunc2(findstart, base) + call add(g:CompleteFunc2Args, [a:findstart, a:base]) + return a:findstart ? 0 : [] + endfunc + + let lines =<< trim END + #" Test for using a global function name + set complete=fg:CompleteFunc2 + new + call setline(1, 'global') + LET g:CompleteFunc2Args = [] + call feedkeys("A\\", 'x') + call assert_equal([[1, ''], [0, 'global']], g:CompleteFunc2Args) + set complete& + bw! + + #" Test for using a function() + set complete=ffunction('g:CompleteFunc1'\\,\ [10]) + new + call setline(1, 'one') + LET g:CompleteFunc1Args = [] + call feedkeys("A\\", 'x') + call assert_equal([[10, 1, ''], [10, 0, 'one']], g:CompleteFunc1Args) + set complete& + bw! + + #" Using a funcref variable + set complete=ffuncref('g:CompleteFunc1'\\,\ [11]) + new + call setline(1, 'two') + LET g:CompleteFunc1Args = [] + call feedkeys("A\\", 'x') + call assert_equal([[11, 1, ''], [11, 0, 'two']], g:CompleteFunc1Args) + set complete& + bw! + + END + call v9.CheckLegacyAndVim9Success(lines) + + " Test for using a script-local function name + func s:CompleteFunc3(findstart, base) + call add(g:CompleteFunc3Args, [a:findstart, a:base]) + return a:findstart ? 0 : [] + endfunc + set complete=fs:CompleteFunc3 + new + call setline(1, 'script1') + let g:CompleteFunc3Args = [] + call feedkeys("A\\", 'x') + call assert_equal([[1, ''], [0, 'script1']], g:CompleteFunc3Args) + set complete& + bw! + + let &complete = 'fs:CompleteFunc3' + new + call setline(1, 'script2') + let g:CompleteFunc3Args = [] + call feedkeys("A\\", 'x') + call assert_equal([[1, ''], [0, 'script2']], g:CompleteFunc3Args) + bw! + delfunc s:CompleteFunc3 + set complete& + + " In Vim9 script s: can be omitted + let lines =<< trim END + vim9script + var CompleteFunc4Args = [] + def CompleteFunc4(findstart: bool, base: string): any + add(CompleteFunc4Args, [findstart, base]) + return findstart ? 0 : [] + enddef + set complete=fCompleteFunc4 + new + setline(1, 'script1') + feedkeys("A\\", 'x') + assert_equal([[1, ''], [0, 'script1']], CompleteFunc4Args) + set complete& + bw! + END + call v9.CheckScriptSuccess(lines) + + " Vim9 tests + let lines =<< trim END + vim9script + + def Vim9CompleteFunc(callnr: number, findstart: number, base: string): any + add(g:Vim9completeFuncArgs, [callnr, findstart, base]) + return findstart ? 0 : [] + enddef + + # Test for using a def function with completefunc + set complete=ffunction('Vim9CompleteFunc'\\,\ [60]) + new | only + setline(1, 'one') + g:Vim9completeFuncArgs = [] + feedkeys("A\\", 'x') + assert_equal([[60, 1, ''], [60, 0, 'one']], g:Vim9completeFuncArgs) + bw! + + # Test for using a global function name + &complete = 'fg:CompleteFunc2' + new | only + setline(1, 'two') + g:CompleteFunc2Args = [] + feedkeys("A\\", 'x') + assert_equal([[1, ''], [0, 'two']], g:CompleteFunc2Args) + bw! + + # Test for using a script-local function name + def LocalCompleteFunc(findstart: number, base: string): any + add(g:LocalCompleteFuncArgs, [findstart, base]) + return findstart ? 0 : [] + enddef + &complete = 'fLocalCompleteFunc' + new | only + setline(1, 'three') + g:LocalCompleteFuncArgs = [] + feedkeys("A\\", 'x') + assert_equal([[1, ''], [0, 'three']], g:LocalCompleteFuncArgs) + bw! + END + call v9.CheckScriptSuccess(lines) + + " cleanup + set completefunc& complete& + delfunc CompleteFunc1 + delfunc CompleteFunc2 + unlet g:CompleteFunc1Args g:CompleteFunc2Args + %bw! +endfunc + " Test for different ways of setting the 'completefunc' option func Test_completefunc_callback() func CompleteFunc1(callnr, findstart, base) @@ -2484,10 +3118,19 @@ endfunc func Test_complete_smartindent() new setlocal smartindent completefunc=FooBarComplete - exe "norm! o{\\\\}\\" let result = getline(1,'$') call assert_equal(['', '{','}',''], result) + %d + setlocal complete=fFooBarComplete + exe "norm! o{\\\}\\" + let result = getline(1,'$') + call assert_equal(['', '{','}',''], result) + %d + setlocal complete=f + exe "norm! o{\\\}\\" + let result = getline(1,'$') + call assert_equal(['', '{','}',''], result) bw! delfunction! FooBarComplete endfunc diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim index 70570cf276..834ca44df2 100644 --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -272,6 +272,14 @@ func Test_complete() call feedkeys("i\\", 'xt') bwipe! call assert_fails('set complete=ix', 'E535:') + call assert_fails('set complete=x', 'E539:') + call assert_fails('set complete=..', 'E535:') + set complete=.,w,b,u,k,\ s,i,d,],t,U,f,o + set complete=. + set complete+=ffuncref('foo'\\,\ [10]) + set complete=ffuncref('foo'\\,\ [10]) + set complete& + set complete+=ffunction('foo'\\,\ [10\\,\ 20]) set complete& endfun diff --git a/src/version.c b/src/version.c index 0a5b4ecf5d..2758382375 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1301, /**/ 1300, /**/ From d2079cff48117b121cd4afcc91fc14a696bdb142 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Tue, 15 Apr 2025 18:10:26 +0200 Subject: [PATCH 093/633] patch 9.1.1302: Coverity warns about using uninitialized value Problem: Coverity warns about using uninitialized value (Coverity, Tony Mechelynck, after v9.1.1301) Solution: initialize callback pointer to NULL Signed-off-by: Christian Brabandt --- src/insexpand.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/insexpand.c b/src/insexpand.c index 4afb3d9a81..c0762da908 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -6427,7 +6427,7 @@ cpt_compl_refresh(void) #ifdef FEAT_COMPL_FUNC char_u *cpt; char_u *p; - callback_T *cb; + callback_T *cb = NULL; // Make the completion list linear (non-cyclic) ins_compl_make_linear(); diff --git a/src/version.c b/src/version.c index 2758382375..90ddf0bab4 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1302, /**/ 1301, /**/ From 2137710b436e481168382c50aa4838a4b9730163 Mon Sep 17 00:00:00 2001 From: John Marriott Date: Tue, 15 Apr 2025 18:15:24 +0200 Subject: [PATCH 094/633] patch 9.1.1303: missing out-of-memory check in linematch.c Problem: missing out-of-memory check in linematch.c Solution: return early in case of memory allocation failure, move the pow() calculation ouside of the for() loop (John Marriott) closes: #17118 Signed-off-by: John Marriott Signed-off-by: Christian Brabandt --- src/linematch.c | 12 +++++++++++- src/version.c | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/linematch.c b/src/linematch.c index 17e932d003..1fab282760 100644 --- a/src/linematch.c +++ b/src/linematch.c @@ -410,12 +410,16 @@ linematch_nbuffers( // create the flattened path matrix diffcmppath_T *diffcmppath = lalloc(sizeof(diffcmppath_T) * memsize, TRUE); + if (diffcmppath == NULL) + return 0; + // allocate memory here + size_t n = (size_t)pow(2.0, (double)ndiffs); for (size_t i = 0; i < memsize; i++) { diffcmppath[i].df_lev_score = 0; diffcmppath[i].df_path_n = 0; - for (size_t j = 0; j < (size_t)pow(2, (double)ndiffs); j++) + for (size_t j = 0; j < n; j++) diffcmppath[i].df_choice_mem[j] = -1; } @@ -428,6 +432,12 @@ linematch_nbuffers( diffcmppath_T *startNode = &diffcmppath[u]; *decisions = lalloc(sizeof(int) * memsize_decisions, TRUE); + if (*decisions == NULL) + { + vim_free(diffcmppath); + return 0; + } + size_t n_optimal = 0; test_charmatch_paths(startNode, 0); while (startNode->df_path_n > 0) diff --git a/src/version.c b/src/version.c index 90ddf0bab4..e2314ca12f 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1303, /**/ 1302, /**/ From d62377386c92e500365009412efd3b1232a02c82 Mon Sep 17 00:00:00 2001 From: Luca Saccarola Date: Tue, 15 Apr 2025 18:26:32 +0200 Subject: [PATCH 095/633] runtime(netrw): upstream snapshot of v180 relevant commits: - fix(gvim): don't set previous jump - don't overwrite copy, copydir, mkdir and move command options - fix: correctly name deprecate function - refactor: remove s:NetrwBufRemover - refactor: s:NetrwDelete -> netrw#fs#Remove - defaults!: remove g:netrw_use_errorwindow fixes: #17114 closes: #17123 Signed-off-by: Luca Saccarola Signed-off-by: Christian Brabandt --- runtime/doc/pi_netrw.txt | 11 -- runtime/doc/tags | 1 - .../pack/dist/opt/netrw/autoload/netrw.vim | 166 +++--------------- .../pack/dist/opt/netrw/autoload/netrw/fs.vim | 24 +++ .../dist/opt/netrw/autoload/netrw/msg.vim | 2 +- .../dist/opt/netrw/autoload/netrwSettings.vim | 2 +- runtime/pack/dist/opt/netrw/doc/netrw.txt | 11 -- .../dist/opt/netrw/plugin/netrwPlugin.vim | 2 +- 8 files changed, 55 insertions(+), 164 deletions(-) diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt index 1189b370b6..51688b705f 100644 --- a/runtime/doc/pi_netrw.txt +++ b/runtime/doc/pi_netrw.txt @@ -431,17 +431,6 @@ settings are described below, in |netrw-browser-options|, and in *g:netrw_silent* =0 : transfers done normally =1 : transfers done silently - *g:netrw_use_errorwindow* =2: messages from netrw will use a popup window - Move the mouse and pause to remove the popup window. - (default value if popup windows are available) - =1 : messages from netrw will use a separate one - line window. This window provides reliable - delivery of messages. - (default value if popup windows are not available) - =0 : messages from netrw will use echoerr ; - messages don't always seem to show up this - way, but one doesn't have to quit the window. - *g:netrw_cygwin* =1 assume scp under windows is from cygwin. Also permits network browsing to use ls with time and size sorting (default if windows) diff --git a/runtime/doc/tags b/runtime/doc/tags index 6b27199300..8c7b81adbe 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7767,7 +7767,6 @@ g:netrw_sshport pi_netrw.txt /*g:netrw_sshport* g:netrw_timefmt pi_netrw.txt /*g:netrw_timefmt* g:netrw_tmpfile_escape pi_netrw.txt /*g:netrw_tmpfile_escape* g:netrw_uid pi_netrw.txt /*g:netrw_uid* -g:netrw_use_errorwindow pi_netrw.txt /*g:netrw_use_errorwindow* g:netrw_use_noswf pi_netrw.txt /*g:netrw_use_noswf* g:netrw_use_nt_rcp pi_netrw.txt /*g:netrw_use_nt_rcp* g:netrw_usetab pi_netrw.txt /*g:netrw_usetab* diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw.vim b/runtime/pack/dist/opt/netrw/autoload/netrw.vim index feee23dffb..520a3f6059 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrw.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrw.vim @@ -19,7 +19,7 @@ if &cp || exists("g:loaded_netrw") finish endif -let g:loaded_netrw = "v179" +let g:loaded_netrw = "v180" if !has("patch-9.1.1054") && !has('nvim') echoerr 'netrw needs Vim v9.1.1054' @@ -58,70 +58,8 @@ function! netrw#ErrorMsg(level, msg, errnum) let level = "**note** (netrw) " endif - if g:netrw_use_errorwindow == 2 && exists("*popup_atcursor") - " use popup window - if type(a:msg) == 3 - let msg = [level]+a:msg - else - let msg = level.a:msg - endif - let s:popuperr_id = popup_atcursor(msg, {}) - let s:popuperr_text = "" - elseif has('nvim') + if has('nvim') call v:lua.vim.notify(level . a:msg, a:level + 2) - elseif g:netrw_use_errorwindow - " (default) netrw creates a one-line window to show error/warning - " messages (reliably displayed) - - " record current window number - let s:winBeforeErr = winnr() - " call Decho("s:winBeforeErr=".s:winBeforeErr,'~'.expand("")) - - " getting messages out reliably is just plain difficult! - " This attempt splits the current window, creating a one line window. - if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0 - " call Decho("write to NetrwMessage buffer",'~'.expand("")) - exe bufwinnr("NetrwMessage")."wincmd w" - " call Decho("setl ma noro",'~'.expand("")) - setl ma noro - if type(a:msg) == 3 - for msg in a:msg - NetrwKeepj call setline(line("$")+1,level.msg) - endfor - else - NetrwKeepj call setline(line("$")+1,level.a:msg) - endif - NetrwKeepj $ - else - " call Decho("create a NetrwMessage buffer window",'~'.expand("")) - bo 1split - sil! call s:NetrwEnew() - sil! NetrwKeepj call s:NetrwOptionsSafe(1) - setl bt=nofile - NetrwKeepj file NetrwMessage - " call Decho("setl ma noro",'~'.expand("")) - setl ma noro - if type(a:msg) == 3 - for msg in a:msg - NetrwKeepj call setline(line("$")+1,level.msg) - endfor - else - NetrwKeepj call setline(line("$"),level.a:msg) - endif - NetrwKeepj $ - endif - " call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr(),'~'.expand("")) - if &fo !~ '[ta]' - syn clear - syn match netrwMesgNote "^\*\*note\*\*" - syn match netrwMesgWarning "^\*\*warning\*\*" - syn match netrwMesgError "^\*\*error\*\*" - hi link netrwMesgWarning WarningMsg - hi link netrwMesgError Error - endif - " call Decho("setl noma ro bh=wipe",'~'.expand("")) - setl ro nomod noma bh=wipe - else " (optional) netrw will show messages using echomsg. Even if the " message doesn't appear, at least it'll be recallable via :messages @@ -129,15 +67,15 @@ function! netrw#ErrorMsg(level, msg, errnum) if a:level == s:WARNING echohl WarningMsg elseif a:level == s:ERROR - echohl Error + echohl ErrorMsg endif if type(a:msg) == 3 for msg in a:msg - unsilent echomsg level.msg + echomsg level.msg endfor else - unsilent echomsg level.a:msg + echomsg level.a:msg endif echohl None @@ -186,21 +124,13 @@ let s:has_balloon = !has('nvim') && " --------------------------------------------------------------------- " Default option values: {{{2 -let g:netrw_localcopycmdopt = "" -let g:netrw_localcopydircmdopt = "" -let g:netrw_localmkdiropt = "" -let g:netrw_localmovecmdopt = "" +call s:NetrwInit("g:netrw_localcopycmdopt","") +call s:NetrwInit("g:netrw_localcopydircmdopt","") +call s:NetrwInit("g:netrw_localmkdiropt","") +call s:NetrwInit("g:netrw_localmovecmdopt","") " --------------------------------------------------------------------- " Default values for netrw's global protocol variables {{{2 -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) -endif if !exists("g:netrw_dav_cmd") if executable("cadaver") @@ -404,7 +334,7 @@ if !exists("g:netrw_localcopycmd") let g:netrw_localcopycmd= "cp" else let g:netrw_localcopycmd = expand("$COMSPEC", v:true) - let g:netrw_localcopycmdopt= " /c copy" + call s:NetrwInit("g:netrw_localcopycmdopt"," /c copy") endif elseif has("unix") || has("macunix") let g:netrw_localcopycmd= "cp" @@ -416,17 +346,17 @@ if !exists("g:netrw_localcopydircmd") if has("win32") if g:netrw_cygwin let g:netrw_localcopydircmd = "cp" - let g:netrw_localcopydircmdopt= " -R" + call s:NetrwInit("g:netrw_localcopydircmdopt"," -R") else let g:netrw_localcopydircmd = expand("$COMSPEC", v:true) - let g:netrw_localcopydircmdopt= " /c xcopy /e /c /h /i /k" + call s:NetrwInit("g:netrw_localcopydircmdopt"," /c xcopy /e /c /h /i /k") endif elseif has("unix") let g:netrw_localcopydircmd = "cp" - let g:netrw_localcopydircmdopt= " -R" + call s:NetrwInit("g:netrw_localcopydircmdopt"," -R") elseif has("macunix") let g:netrw_localcopydircmd = "cp" - let g:netrw_localcopydircmdopt= " -R" + call s:NetrwInit("g:netrw_localcopydircmdopt"," -R") else let g:netrw_localcopydircmd= "" endif @@ -439,8 +369,8 @@ if has("win32") if g:netrw_cygwin call s:NetrwInit("g:netrw_localmkdir","mkdir") else - let g:netrw_localmkdir = expand("$COMSPEC", v:true) - let g:netrw_localmkdiropt= " /c mkdir" + call s:NetrwInit("g:netrw_localmkdir",expand("$COMSPEC", v:true)) + call s:NetrwInit("g:netrw_localmkdiropt"," /c mkdir") endif else call s:NetrwInit("g:netrw_localmkdir","mkdir") @@ -458,7 +388,7 @@ if !exists("g:netrw_localmovecmd") let g:netrw_localmovecmd= "mv" else let g:netrw_localmovecmd = expand("$COMSPEC", v:true) - let g:netrw_localmovecmdopt= " /c move" + call s:NetrwInit("g:netrw_localmovecmdopt"," /c move") endif elseif has("unix") || has("macunix") let g:netrw_localmovecmd= "mv" @@ -2223,7 +2153,7 @@ fun! netrw#NetRead(mode,...) endif if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz' " call Decho("cleanup by deleting tmpfile<".tmpfile.">",'~'.expand("")) - NetrwKeepj call s:NetrwDelete(tmpfile) + call netrw#fs#Remove(tmpfile) endif NetrwKeepj call s:NetrwOptionsRestore("w:") @@ -2591,7 +2521,7 @@ fun! netrw#NetWrite(...) range " call Decho("cleanup",'~'.expand("")) if s:FileReadable(tmpfile) " call Decho("tmpfile<".tmpfile."> readable, will now delete it",'~'.expand("")) - call s:NetrwDelete(tmpfile) + call netrw#fs#Remove(tmpfile) endif call s:NetrwOptionsRestore("w:") @@ -6424,7 +6354,7 @@ fun! s:NetrwMarkFileCopy(islocal,...) NetrwKeepj call s:NetrwUpload(localfiles,s:netrwmftgt) if getcwd() == tmpdir for fname in s:netrwmarkfilelist_{bufnr('%')} - NetrwKeepj call s:NetrwDelete(fname) + call netrw#fs#Remove(fname) endfor if s:NetrwLcd(curdir) " call Dret("s:NetrwMarkFileCopy : lcd failure") @@ -7631,7 +7561,9 @@ fun! s:NetrwMenu(domenu) elseif !a:domenu let s:netrwcnt = 0 let curwin = winnr() - windo if getline(2) =~# "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif + keepjumps windo if getline(2) =~# "Netrw" + let s:netrwcnt = s:netrwcnt + 1 + endif exe curwin."wincmd w" if s:netrwcnt <= 1 @@ -10291,7 +10223,7 @@ function! s:NetrwLocalRmFile(path, fname, all) if !dir && (all || empty(ok)) " This works because delete return 0 if successful - if s:NetrwDelete(rmfile) + if netrw#fs#Remove(rmfile) call netrw#ErrorMsg(s:ERROR, printf("unable to delete <%s>!", rmfile), 103) else " Remove file only if there are no pending changes @@ -10740,51 +10672,6 @@ fun! s:RestoreRegister(dict) endfor endfun -" --------------------------------------------------------------------- -" s:NetrwDelete: Deletes a file. {{{2 -" Uses Steve Hall's idea to insure that Windows paths stay -" acceptable. No effect on Unix paths. -" Examples of use: let result= s:NetrwDelete(path) -function! s:NetrwDelete(path) - let path = netrw#fs#WinPath(a:path) - - if !g:netrw_cygwin && has("win32") && exists("+shellslash") - let sskeep = &shellslash - setl noshellslash - let result = delete(path) - let &shellslash = sskeep - else - let result = delete(path) - endif - - if result < 0 - NetrwKeepj call netrw#ErrorMsg(s:WARNING, "delete(".path.") failed!", 71) - endif - - return result -endfunction - -" --------------------------------------------------------------------- -" s:NetrwBufRemover: removes a buffer that: {{{2s -" has buffer-id > 1 -" is unlisted -" is unnamed -" does not appear in any window -fun! s:NetrwBufRemover(bufid) - " call Dfunc("s:NetrwBufRemover(".a:bufid.")") - " call Decho("buf#".a:bufid." ".((a:bufid > 1)? ">" : "≯")." must be >1 for removal","~".expand("")) - " call Decho("buf#".a:bufid." is ".(buflisted(a:bufid)? "listed" : "unlisted"),"~".expand("")) - " call Decho("buf#".a:bufid." has name <".bufname(a:bufid).">","~".expand("")) - " call Decho("buf#".a:bufid." has winid#".bufwinid(a:bufid),"~".expand("")) - - if a:bufid > 1 && !buflisted(a:bufid) && bufloaded(a:bufid) && bufname(a:bufid) == "" && bufwinid(a:bufid) == -1 - " call Decho("(s:NetrwBufRemover) removing buffer#".a:bufid,"~".expand("")) - exe "sil! bd! ".a:bufid - endif - - " call Dret("s:NetrwBufRemover") -endfun - " --------------------------------------------------------------------- " s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2 fun! s:NetrwEnew(...) @@ -10794,7 +10681,10 @@ fun! s:NetrwEnew(...) " Clean out the last buffer: " Check if the last buffer has # > 1, is unlisted, is unnamed, and does not appear in a window " If so, delete it. - call s:NetrwBufRemover(bufnr("$")) + let bufid = bufnr('$') + if bufid > 1 && !buflisted(bufid) && bufloaded(bufid) && bufname(bufid) == "" && bufwinid(bufid) == -1 + execute printf("silent! bdelete! %s", bufid) + endif " grab a function-local-variable copy of buffer variables " call Decho("make function-local copy of netrw variables",'~'.expand("")) diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim b/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim index 2b987ed00a..a8d8d6bfd4 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim @@ -162,6 +162,30 @@ function! netrw#fs#WinPath(path) return path endfunction +" }}} +" netrw#fs#Remove: deletes a file. {{{ +" Uses Steve Hall's idea to insure that Windows paths stay +" acceptable. No effect on Unix paths. + +function! netrw#fs#Remove(path) + let path = netrw#fs#WinPath(a:path) + + if !g:netrw_cygwin && has("win32") && exists("+shellslash") + let sskeep = &shellslash + setl noshellslash + let result = delete(path) + let &shellslash = sskeep + else + let result = delete(path) + endif + + if result < 0 + call netrw#ErrorMsg(netrw#LogLevel('WARNING'), printf('delete("%s") failed!', path), 71) + endif + + return result +endfunction + " }}} " vim:ts=8 sts=4 sw=4 et fdm=marker diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw/msg.vim b/runtime/pack/dist/opt/netrw/autoload/netrw/msg.vim index bf5fadbd76..75a5330e62 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrw/msg.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrw/msg.vim @@ -3,7 +3,7 @@ " BREAKAGES IF USED OUTSIDE OF NETRW.VIM ARE EXPECTED. let s:deprecation_msgs = [] -function! netrw#own#Deprecate(name, version, alternatives) +function! netrw#msg#Deprecate(name, version, alternatives) " If running on neovim use vim.deprecate if has('nvim') let s:alternative = a:alternatives->get('nvim', v:null) diff --git a/runtime/pack/dist/opt/netrw/autoload/netrwSettings.vim b/runtime/pack/dist/opt/netrw/autoload/netrwSettings.vim index c32051ca79..20428d621b 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrwSettings.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrwSettings.vim @@ -15,7 +15,7 @@ if &cp || exists("g:loaded_netrwSettings") finish endif -let g:loaded_netrwSettings = "v179" +let g:loaded_netrwSettings = "v180" " NetrwSettings: {{{ diff --git a/runtime/pack/dist/opt/netrw/doc/netrw.txt b/runtime/pack/dist/opt/netrw/doc/netrw.txt index f6cc0ddb9d..7c686ef4b8 100644 --- a/runtime/pack/dist/opt/netrw/doc/netrw.txt +++ b/runtime/pack/dist/opt/netrw/doc/netrw.txt @@ -431,17 +431,6 @@ settings are described below, in |netrw-browser-options|, and in *g:netrw_silent* =0 : transfers done normally =1 : transfers done silently - *g:netrw_use_errorwindow* =2: messages from netrw will use a popup window - Move the mouse and pause to remove the popup window. - (default value if popup windows are available) - =1 : messages from netrw will use a separate one - line window. This window provides reliable - delivery of messages. - (default value if popup windows are not available) - =0 : messages from netrw will use echoerr ; - messages don't always seem to show up this - way, but one doesn't have to quit the window. - *g:netrw_cygwin* =1 assume scp under windows is from cygwin. Also permits network browsing to use ls with time and size sorting (default if windows) diff --git a/runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim b/runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim index aed36a0cc7..178eecc288 100644 --- a/runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim +++ b/runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim @@ -15,7 +15,7 @@ if &cp || exists("g:loaded_netrwPlugin") finish endif -let g:loaded_netrwPlugin = "v179" +let g:loaded_netrwPlugin = "v180" let s:keepcpo = &cpo set cpo&vim From babdb0554a44a5e406a499bf8c315e660b2a028e Mon Sep 17 00:00:00 2001 From: Eisuke Kawashima Date: Tue, 15 Apr 2025 18:30:05 +0200 Subject: [PATCH 096/633] patch 9.1.1304: filetype: some man files are not recognized Problem: filetype: some man files are not recognized (e.g. 1p (POSIX commands)) Solution: update the filetype detection pattern and detect more man files as nroff (Eisuke Kawashima) - sections are revised referring to - debian-12:/etc/manpath.config - fedora-41:/etc/man_db.conf - detection logic is improved - detection test is implemented closes: #17117 Signed-off-by: Eisuke Kawashima Signed-off-by: Christian Brabandt --- runtime/autoload/dist/ft.vim | 16 ++++++++++------ runtime/filetype.vim | 4 ++-- src/testdir/test_filetype.vim | 14 ++++++++++++++ src/version.c | 2 ++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index 4053e51f00..25c7f571ab 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -3,7 +3,7 @@ vim9script # Vim functions for file type detection # # Maintainer: The Vim Project -# Last Change: 2025 Apr 10 +# Last Change: 2025 Apr 15 # Former Maintainer: Bram Moolenaar # These functions are moved here from runtime/filetype.vim to make startup @@ -595,11 +595,15 @@ enddef # This function checks if one of the first five lines start with a dot. In # that case it is probably an nroff file: 'filetype' is set and 1 is returned. export def FTnroff(): number - if getline(1)[0] .. getline(2)[0] .. getline(3)[0] - .. getline(4)[0] .. getline(5)[0] =~ '\.' - setf nroff - return 1 - endif + var n = 1 + while n < 5 + var line = getline(n) + if line =~ '^\.\S\S\?' + setf nroff + return 1 + endif + n += 1 + endwhile return 0 enddef diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 35726a7888..573d2f3139 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: The Vim Project -" Last Change: 2025 Apr 13 +" Last Change: 2025 Apr 15 " Former Maintainer: Bram Moolenaar " Listen very carefully, I will say this only once @@ -1726,7 +1726,7 @@ au BufNewFile,BufRead *.me \ setf nroff | \ endif au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff -au BufNewFile,BufRead *.[1-9] call dist#ft#FTnroff() +au BufNewFile,BufRead *.[0-9],*.[013]p,*.[1-8]x,*.3{am,perl,pm,posix,type},*.[nlop] call dist#ft#FTnroff() " Nroff or Objective C++ au BufNewFile,BufRead *.mm call dist#ft#FTmm() diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index a56e1ac027..98dba23ebc 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -2889,6 +2889,20 @@ func Test_map_file() filetype off endfunc +func Test_nroff_file() + filetype on + + call writefile(['.TH vim 1 "YYYY Mth DD"'], 'Xfile.1', 'D') + split Xfile.1 + call assert_equal('nroff', &filetype) + bwipe! + + call writefile(['. /etc/profile'], 'Xfile.1', 'D') + split Xfile.1 + call assert_notequal('nroff', &filetype) + bwipe! +endfunc + func Test_org_file() filetype on diff --git a/src/version.c b/src/version.c index e2314ca12f..30904d7c06 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1304, /**/ 1303, /**/ From cf7f01252f00061876f7eb14dbf74342a55a13a1 Mon Sep 17 00:00:00 2001 From: glepnir Date: Tue, 15 Apr 2025 19:02:00 +0200 Subject: [PATCH 097/633] patch 9.1.1305: completion menu active after switching windows/tabs Problem: When switching to another window or tab page while the completion menu is active, the menu stays visible, although it belongs to the previous window/tab page context (Evgeni Chasnovski). Solution: Track the window and tab page where completion started. Detect changes in the main editing loop and cancel completion mode if the current window or tab page differs from where completion started. fixes: #17090 closes: #17101 Co-authored-by: zeertzjq Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/edit.c | 5 +++ src/insexpand.c | 29 +++++++++++------ src/proto/insexpand.pro | 1 + .../dumps/Test_switchwin_clear_pum_01.dump | 20 ++++++++++++ .../dumps/Test_switchwin_clear_pum_02.dump | 20 ++++++++++++ .../dumps/Test_tabnext_clear_pum_01.dump | 20 ++++++++++++ .../dumps/Test_tabnext_clear_pum_02.dump | 20 ++++++++++++ src/testdir/test_popup.vim | 32 +++++++++++++++++++ src/version.c | 2 ++ 9 files changed, 139 insertions(+), 10 deletions(-) create mode 100644 src/testdir/dumps/Test_switchwin_clear_pum_01.dump create mode 100644 src/testdir/dumps/Test_switchwin_clear_pum_02.dump create mode 100644 src/testdir/dumps/Test_tabnext_clear_pum_01.dump create mode 100644 src/testdir/dumps/Test_tabnext_clear_pum_02.dump diff --git a/src/edit.c b/src/edit.c index ab67fdc68b..3c98bb8bb1 100644 --- a/src/edit.c +++ b/src/edit.c @@ -1411,6 +1411,11 @@ edit( ) did_cursorhold = FALSE; + // Check if we need to cancel completion mode because the window + // or tab page was changed + if (ins_compl_active() && !ins_compl_win_active(curwin)) + ins_compl_cancel(); + // If the cursor was moved we didn't just insert a space if (arrow_used) inserted_space = FALSE; diff --git a/src/insexpand.c b/src/insexpand.c index c0762da908..8c15adeee4 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -192,6 +192,9 @@ static string_T compl_orig_text = {NULL, 0}; // text as it was before static int compl_cont_mode = 0; static expand_T compl_xp; +static win_T *compl_curr_win = NULL; // win where completion is active +static buf_T *compl_curr_buf = NULL; // buf where completion is active + // List of flags for method of completion. static int compl_cont_status = 0; # define CONT_ADDING 1 // "normal" or "adding" expansion @@ -2014,6 +2017,8 @@ ins_compl_clear(void) compl_matches = 0; compl_selected_item = -1; compl_ins_end_col = 0; + compl_curr_win = NULL; + compl_curr_buf = NULL; VIM_CLEAR_STRING(compl_pattern); VIM_CLEAR_STRING(compl_leader); edit_submode_extra = NULL; @@ -2039,17 +2044,10 @@ ins_compl_active(void) * Return True when wp is the actual completion window */ int -ins_compl_win_active(win_T *wp UNUSED) +ins_compl_win_active(win_T *wp) { - return ins_compl_active() -#if defined(FEAT_QUICKFIX) - && (!wp->w_p_pvw -# ifdef FEAT_PROP_POPUP - && !(wp->w_popup_flags & POPF_INFO) -# endif - ) -#endif - ; + return ins_compl_active() && wp == compl_curr_win + && wp->w_buffer == compl_curr_buf; } /* @@ -2706,6 +2704,15 @@ ins_compl_stop(int c, int prev_mode, int retval) return retval; } +/* + * Cancel completion. + */ + int +ins_compl_cancel(void) +{ + return ins_compl_stop(' ', ctrl_x_mode, TRUE); +} + /* * Prepare for Insert mode completion, or stop it. * Called just after typing a character in Insert mode. @@ -6080,6 +6087,8 @@ ins_complete(int c, int enable_pum) else if (insert_match && stop_arrow() == FAIL) return FAIL; + compl_curr_win = curwin; + compl_curr_buf = curwin->w_buffer; compl_shown_match = compl_curr_match; compl_shows_dir = compl_direction; diff --git a/src/proto/insexpand.pro b/src/proto/insexpand.pro index a9ca289db1..8529b7b6c1 100644 --- a/src/proto/insexpand.pro +++ b/src/proto/insexpand.pro @@ -66,4 +66,5 @@ void ins_compl_insert(int in_compl_func, int move_cursor); void ins_compl_check_keys(int frequency, int in_compl_func); int ins_complete(int c, int enable_pum); void free_insexpand_stuff(void); +int ins_compl_cancel(void); /* vim: set ft=c : */ diff --git a/src/testdir/dumps/Test_switchwin_clear_pum_01.dump b/src/testdir/dumps/Test_switchwin_clear_pum_01.dump new file mode 100644 index 0000000000..9005f8d853 --- /dev/null +++ b/src/testdir/dumps/Test_switchwin_clear_pum_01.dump @@ -0,0 +1,20 @@ +|b+0&#ffffff0@1| |b@2| |b@1> @27||+1&&|a+0&&@1| |a@2| |a@1| @27 +|~+0#4040ff13&| @4| +0#0000001#e0e0e08|b@1| @12| +0#4040ff13#ffffff0@14||+1#0000000&|~+0#4040ff13&| @35 +|~| @4| +0#0000001#ffd7ff255|b@2| @11| +0#4040ff13#ffffff0@14||+1#0000000&|~+0#4040ff13&| @35 +|~| @4| +0#0000001#ffd7ff255|a@1| @12| +0#4040ff13#ffffff0@14||+1#0000000&|~+0#4040ff13&| @35 +|~| @4| +0#0000001#ffd7ff255|a@2| @11| +0#4040ff13#ffffff0@14||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|w+3#0000000&|i|n|_|b| |[|+|]| @9|1|,|1|0| @10|A|l@1| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|9| @11|A|l@1 +|-+2&&@1| |K|e|y|w|o|r|d| |c|o|m|p|l|e|t|i|o|n| |(|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |4| +0#0000000&@33 diff --git a/src/testdir/dumps/Test_switchwin_clear_pum_02.dump b/src/testdir/dumps/Test_switchwin_clear_pum_02.dump new file mode 100644 index 0000000000..39013c09fd --- /dev/null +++ b/src/testdir/dumps/Test_switchwin_clear_pum_02.dump @@ -0,0 +1,20 @@ +|b+0&#ffffff0@1| |b@2| |b@1| @27||+1&&|a+0&&@1| |a@2| |a>a| @27 +|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|~| @35||+1#0000000&|~+0#4040ff13&| @35 +|w+1#0000000&|i|n|_|b| |[|+|]| @9|1|,|1|0| @10|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|9| @11|A|l@1 +|-+2&&@1| |I|N|S|E|R|T| |-@1| +0&&@62 diff --git a/src/testdir/dumps/Test_tabnext_clear_pum_01.dump b/src/testdir/dumps/Test_tabnext_clear_pum_01.dump new file mode 100644 index 0000000000..6eb86e6c7d --- /dev/null +++ b/src/testdir/dumps/Test_tabnext_clear_pum_01.dump @@ -0,0 +1,20 @@ +| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|+| |[|N|o| |N|a|m|e|]| | +1&&@49|X+8#0000001#e0e0e08 +|a+0#0000000#ffffff0@1| |a@2| |a@1> @65 +|~+0#4040ff13&| @4| +0#0000001#e0e0e08|a@1| @12| +0#4040ff13#ffffff0@52 +|~| @4| +0#0000001#ffd7ff255|a@2| @11| +0#4040ff13#ffffff0@52 +|~| @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| |c|o|m|p|l|e|t|i|o|n| |(|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |2| +0#0000000&@33 diff --git a/src/testdir/dumps/Test_tabnext_clear_pum_02.dump b/src/testdir/dumps/Test_tabnext_clear_pum_02.dump new file mode 100644 index 0000000000..347767c664 --- /dev/null +++ b/src/testdir/dumps/Test_tabnext_clear_pum_02.dump @@ -0,0 +1,20 @@ +| +2&#ffffff0|[|N|o| |N|a|m|e|]| | +8#0000001#e0e0e08|+| |[|N|o| |N|a|m|e|]| | +1#0000000#ffffff0@49|X+8#0000001#e0e0e08 +> +0#0000000#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|0|,|1| @10|A|l@1| diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index b2952fdc35..ac879d24ff 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -2157,4 +2157,36 @@ func Test_pum_maxwidth_multibyte() call StopVimInTerminal(buf) endfunc +func Test_pum_clear_when_switch_tab_or_win() + CheckScreendump + + let lines =<< trim END + inoremap wincmd w + inoremap tabnext + END + + call writefile(lines, 'Xtest', 'D') + let buf = RunVimInTerminal('-S Xtest', {}) + + call term_sendkeys(buf, ":tabe\") + call TermWait(buf, 50) + call term_sendkeys(buf, "Aaa aaa \") + call VerifyScreenDump(buf, 'Test_tabnext_clear_pum_01', {}) + call term_sendkeys(buf, "\") + call TermWait(buf, 50) + call VerifyScreenDump(buf, 'Test_tabnext_clear_pum_02', {}) + call term_sendkeys(buf, "\:tabclose!\") + + call term_sendkeys(buf, ":vnew win_b\") + call TermWait(buf, 50) + call term_sendkeys(buf, "Abb bbb \") + call VerifyScreenDump(buf, 'Test_switchwin_clear_pum_01', {}) + call term_sendkeys(buf, "\") + call TermWait(buf, 50) + call VerifyScreenDump(buf, 'Test_switchwin_clear_pum_02', {}) + + call StopVimInTerminal(buf) +endfunc + + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 30904d7c06..7bd2bb6b7b 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1305, /**/ 1304, /**/ From 32f2bb6e1e672f52d736579d9752473b14a5744d Mon Sep 17 00:00:00 2001 From: glepnir Date: Tue, 15 Apr 2025 19:06:58 +0200 Subject: [PATCH 098/633] patch 9.1.1306: completion menu rendering can be improved Problem: Parts of the popup menu were rendered twice when the popup was at maximum width because the truncation flag was being set too liberally. Solution: Make the truncation condition more precise by only setting it when there's exactly one character of space remaining (glepnir). closes: #17108 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/popupmenu.c | 22 +++++++++------------- src/version.c | 2 ++ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/popupmenu.c b/src/popupmenu.c index 07c99f052b..38ab24bcec 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -691,6 +691,10 @@ pum_redraw(void) width = 0; s = NULL; p = pum_get_item(idx, item_type); + + if (j + 1 < 3) + next_isempty = pum_get_item(idx, order[j + 1]) == NULL; + if (p != NULL) for ( ; ; MB_PTR_ADV(p)) { @@ -731,15 +735,13 @@ pum_redraw(void) int cells; int over_cell = 0; int truncated = FALSE; + int pad = next_isempty ? 0 : 2; cells = mb_string2cells(rt , -1); truncated = pum_width == p_pmw - && pum_width - totwidth < cells; - - if (pum_width == p_pmw && !truncated - && (j + 1 < 3 && pum_get_item(idx, order[j + 1]) != NULL)) - truncated = TRUE; + && pum_width - totwidth < cells + pad; + // only draw the text that fits if (cells > pum_width) { do @@ -816,12 +818,9 @@ pum_redraw(void) int cells = (*mb_string2cells)(st, size); char_u *st_end = NULL; int over_cell = 0; + int pad = next_isempty ? 0 : 2; int truncated = pum_width == p_pmw - && pum_width - totwidth < cells; - - if (pum_width == p_pmw && !truncated - && (j + 1 < 3 && pum_get_item(idx, order[j + 1]) != NULL)) - truncated = TRUE; + && pum_width - totwidth < cells + pad; // only draw the text that fits while (size > 0 @@ -910,9 +909,6 @@ pum_redraw(void) else n = order[j] == CPT_ABBR ? 1 : 0; - if (j + 1 < 3) - next_isempty = pum_get_item(idx, order[j + 1]) == NULL; - // Stop when there is nothing more to display. if (j == 2 || (next_isempty && (j == 1 || (j == 0 diff --git a/src/version.c b/src/version.c index 7bd2bb6b7b..166c76da62 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1306, /**/ 1305, /**/ From f35bd76b31e6cd62bcc47e401887059b8503c5cc Mon Sep 17 00:00:00 2001 From: Eisuke Kawashima Date: Tue, 15 Apr 2025 19:20:06 +0200 Subject: [PATCH 099/633] patch 9.1.1307: make syntax does not reliably detect different flavors Problem: GNU extensions, such as `ifeq` and `wildcard` function, are highlighted in BSDmakefile Solution: detect BSD, GNU, or Microsoft implementation according to filename, user-defined global variables, or file contents closes: #17089 Co-authored-by: Roland Hieber Signed-off-by: Eisuke Kawashima Signed-off-by: Christian Brabandt --- runtime/autoload/dist/ft.vim | 40 ++++++++++++++++++++++---- runtime/doc/filetype.txt | 4 ++- runtime/doc/syntax.txt | 15 ++++++---- runtime/filetype.vim | 2 +- runtime/syntax/make.vim | 54 ++++++++++++++++++++++++++--------- src/testdir/test_filetype.vim | 37 ++++++++++++++++++++++-- src/version.c | 2 ++ 7 files changed, 126 insertions(+), 28 deletions(-) diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index 25c7f571ab..a0be9302c6 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -557,17 +557,47 @@ export def FTm() enddef export def FTmake() - # Check if it is a Microsoft Makefile - unlet! b:make_microsoft + # Check if it is a BSD, GNU, or Microsoft Makefile + unlet! b:make_flavor + + # 1. filename + if expand('%:t') == 'BSDmakefile' + b:make_flavor = 'bsd' + setf make + return + elseif expand('%:t') == 'GNUmakefile' + b:make_flavor = 'gnu' + setf make + return + endif + + # 2. user's setting + if exists('g:make_flavor') + b:make_flavor = g:make_flavor + setf make + return + elseif get(g:, 'make_microsoft') + echom "make_microsoft is deprecated; try g:make_flavor = 'microsoft' instead" + b:make_flavor = 'microsoft' + setf make + return + endif + + # 3. try to detect a flavor from file content 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 + b:make_flavor = 'microsoft' + break + elseif line =~ '^\.\%(export\|error\|for\|if\%(n\=\%(def\|make\)\)\=\|info\|warning\)\>' + b:make_flavor = 'bsd' break - elseif line =~ '^ *ifn\=\(eq\|def\)\>' || line =~ '^ *[-s]\=include\s' + elseif line =~ '^ *\%(ifn\=\%(eq\|def\)\|define\|override\)\>' + b:make_flavor = 'gnu' break - elseif line =~ '^ *\w\+\s*[!?:+]=' + elseif line =~ '\$[({][a-z-]\+\s\+\S\+' # a function call, e.g. $(shell pwd) + b:make_flavor = 'gnu' break endif n += 1 diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index 20bf395972..761d6676f4 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -1,4 +1,4 @@ -*filetype.txt* For Vim version 9.1. Last change: 2025 Mar 15 +*filetype.txt* For Vim version 9.1. Last change: 2025 Apr 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -158,6 +158,8 @@ variables can be used to overrule the filetype used for certain extensions: *.inc g:filetype_inc *.lsl g:filetype_lsl *.m g:filetype_m |ft-mathematica-syntax| + *[mM]makefile,*.mk,*.mak,[mM]akefile* + g:make_flavor |ft-make-syntax| *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md g:filetype_md |ft-pandoc-syntax| *.mod g:filetype_mod diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index 3c3bde227e..ae89bd9f10 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2025 Apr 13 +*syntax.txt* For Vim version 9.1. Last change: 2025 Apr 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2393,11 +2393,16 @@ 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: > +There are various Make implementations, which add extensions other than the +POSIX specification and thus are mutually incompatible. If the filename is +BSDmakefile or GNUmakefile, the corresponding implementation is automatically +determined; otherwise vim tries to detect it by the file contents. If you see +any wrong highlights because of this, you can enforce a flavor by setting one +of the following: > - :let make_microsoft = 1 + :let g:make_flavor = 'bsd' " or + :let g:make_flavor = 'gnu' " or + :let g:make_flavor = 'microsoft' MAPLE *maple.vim* *ft-maple-syntax* diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 573d2f3139..b976d46d7b 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -3186,7 +3186,7 @@ au BufNewFile,BufRead */etc/sensors.d/[^.]* call s:StarSetf('sensors') au BufNewFile,BufRead */etc/logcheck/*.d*/* call s:StarSetf('logcheck') " Makefile -au BufNewFile,BufRead [mM]akefile* call s:StarSetf('make') +au BufNewFile,BufRead [mM]akefile* if expand(':t') !~ g:ft_ignore_pat | call dist#ft#FTmake() | endif " Ruby Makefile au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby') diff --git a/runtime/syntax/make.vim b/runtime/syntax/make.vim index d3ddf78291..a6d8ad47e3 100644 --- a/runtime/syntax/make.vim +++ b/runtime/syntax/make.vim @@ -4,6 +4,7 @@ " Previous Maintainer: Claudio Fleiner " URL: https://github.com/vim/vim/blob/master/runtime/syntax/make.vim " Last Change: 2022 Nov 06 +" 2025 Apr 15 by Vim project: rework Make flavor detection (#17089) " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -13,6 +14,9 @@ endif let s:cpo_save = &cpo set cpo&vim +" enable GNU extension when b:make_flavor is not set—detection failed or Makefile is POSIX-compliant +let s:make_flavor = 'gnu' + " some special characters syn match makeSpecial "^\s*[@+-]\+" syn match makeNextLine "\\\n\s*" @@ -21,14 +25,16 @@ syn match makeNextLine "\\\n\s*" syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$" \ contains=makeStatement,makeIdent,makePreCondit,makeDefine -" Microsoft Makefile specials -syn case ignore -syn match makeInclude "^!\s*include\s.*$" -syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|else\s*if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>" -syn case match +if get(b:, 'make_flavor', s:make_flavor) == 'microsoft' + " Microsoft Makefile specials + syn case ignore + syn match makeInclude "^!\s*include\s.*$" + syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|else\s*if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>" + syn case match +endif " identifiers -if exists("b:make_microsoft") || exists("make_microsoft") +if get(b:, 'make_flavor', s:make_flavor) == 'microsoft' syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent else @@ -59,13 +65,31 @@ syn match makeTarget "^[~A-Za-z0-9_./$(){}%*@-][A-Za-z0-9_./\t $(){}%* \ skipnl nextgroup=makeCommands,makeCommandError syn region makeSpecTarget transparent matchgroup=makeSpecTarget - \ start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\|ONESHELL\)\>\s*:\{1,2}[^:=]"rs=e-1 + \ start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|NOTPARALLEL\|POSIX\)\>\s*:\{1,2}[^:=]"rs=e-1 \ end="[^\\]$" keepend \ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands -syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\|ONESHELL\)\>\s*::\=\s*$" +syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|NOTPARALLEL\|POSIX\)\>\s*::\=\s*$" \ contains=makeIdent,makeComment \ skipnl nextgroup=makeCommands,makeCommandError +if get(b:, 'make_flavor', s:make_flavor) == 'bsd' + syn region makeSpecTarget transparent matchgroup=makeSpecTarget + \ start="^\.DELETE_ON_ERROR\>\s*:\{1,2}[^:=]"rs=e-1 + \ end="[^\\]$" keepend + \ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands + syn match makeSpecTarget "^\.DELETE_ON_ERROR\>\s*::\=\s*$" + \ contains=makeIdent,makeComment + \ skipnl nextgroup=makeCommands,makeCommandError +elseif get(b:, 'make_flavor', s:make_flavor) == 'gnu' + syn region makeSpecTarget transparent matchgroup=makeSpecTarget + \ start="^\.\(EXPORT_ALL_VARIABLES\|DELETE_ON_ERROR\|INTERMEDIATE\|KEEP_STATE\|LIBPATTERNS\|ONESHELL\|SECONDARY\)\>\s*:\{1,2}[^:=]"rs=e-1 + \ end="[^\\]$" keepend + \ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands + syn match makeSpecTarget "^\.\(EXPORT_ALL_VARIABLES\|DELETE_ON_ERROR\|INTERMEDIATE\|KEEP_STATE\|LIBPATTERNS\|ONESHELL\|SECONDARY\)\>\s*::\=\s*$" + \ contains=makeIdent,makeComment + \ skipnl nextgroup=makeCommands,makeCommandError +endif + syn match makeCommandError "^\s\+\S.*" contained syn region makeCommands contained start=";"hs=s+1 start="^\t" \ end="^[^\t#]"me=e-1,re=e-1 end="^$" @@ -74,17 +98,19 @@ syn region makeCommands contained start=";"hs=s+1 start="^\t" syn match makeCmdNextLine "\\\n."he=e-1 contained " some directives -syn match makePreCondit "^ *\(ifn\=\(eq\|def\)\>\|else\(\s\+ifn\=\(eq\|def\)\)\=\>\|endif\>\)" syn match makeInclude "^ *[-s]\=include\s.*$" -syn match makeStatement "^ *vpath" syn match makeExport "^ *\(export\|unexport\)\>" -syn match makeOverride "^ *override\>" -" Statements / Functions (GNU make) -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 +if get(b:, 'make_flavor', s:make_flavor) == 'gnu' + " Statements / Functions (GNU make) + syn match makePreCondit "^ *\(ifn\=\(eq\|def\)\>\|else\(\s\+ifn\=\(eq\|def\)\)\=\>\|endif\>\)" + syn match makeStatement "^ *vpath\>" + 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\|intcmp\|join\|lastword\|let\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1 +endif " Comment if !exists("make_no_comments") - if exists("b:make_microsoft") || exists("make_microsoft") + if get(b:, 'make_flavor', s:make_flavor) == 'microsoft' syn match makeComment "#.*" contains=@Spell,makeTodo else syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 98dba23ebc..d3342822c0 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -2857,15 +2857,48 @@ endfunc func Test_make_file() filetype on + " BSD Makefile + call writefile([''], 'BSDmakefile', 'D') + split BSDmakefile + call assert_equal('bsd', get(b:, 'make_flavor', '')) + bwipe! + + call writefile(['.ifmake all', '.endif'], 'XMakefile.mak', 'D') + split XMakefile.mak + call assert_equal('bsd', get(b:, 'make_flavor', '')) + bwipe! + + " GNU Makefile + call writefile([''], 'GNUmakefile', 'D') + split GNUmakefile + call assert_equal('gnu', get(b:, 'make_flavor', '')) + bwipe! + + call writefile(['ifeq ($(foo),foo)', 'endif'], 'XMakefile.mak', 'D') + split XMakefile.mak + call assert_equal('gnu', get(b:, 'make_flavor', '')) + bwipe! + + call writefile(['define foo', 'endef'], 'XMakefile.mak', 'D') + split XMakefile.mak + call assert_equal('gnu', get(b:, 'make_flavor', '')) + bwipe! + + call writefile(['vim := $(wildcard *.vim)'], 'XMakefile.mak', 'D') + split XMakefile.mak + call assert_equal('gnu', get(b:, 'make_flavor', '')) + bwipe! + " 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)) + call assert_equal('microsoft', get(b:, 'make_flavor', '')) bwipe! + " BSD or GNU 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)) + call assert_notequal('microsoft', get(b:, 'make_flavor', '')) bwipe! filetype off diff --git a/src/version.c b/src/version.c index 166c76da62..bdfcde210e 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1307, /**/ 1306, /**/ From b156588eb707a084bbff8685953a8892e1e45bca Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Tue, 15 Apr 2025 20:16:00 +0200 Subject: [PATCH 100/633] patch 9.1.1308: completion: cannot order matches by distance to cursor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: During insert-mode completion, the most relevant match is often the one closest to the cursor—frequently just above the current line. However, both `` and `` tend to rank candidates from the current buffer that appear above the cursor near the bottom of the completion menu, rather than near the top. This ordering can feel unintuitive, especially when `noselect` is active, as it doesn't prioritize the most contextually relevant suggestions. Solution: This change introduces a new sub-option value "nearest" for the 'completeopt' setting. When enabled, matches from the current buffer are prioritized based on their proximity to the cursor position, improving the relevance of suggestions during completion (Girish Palya). Key Details: - Option: "nearest" added to 'completeopt' - Applies to: Matches from the current buffer only - Effect: Sorts completion candidates by their distance from the cursor - Interaction with other options: - Has no effect if the `fuzzy` option is also present This feature is helpful especially when working within large buffers where multiple similar matches may exist at different locations. You can test this feature with auto-completion using the snippet below. Try it in a large file like `vim/src/insexpand.c`, where you'll encounter many potential matches. You'll notice that the popup menu now typically surfaces the most relevant matches—those closest to the cursor—at the top. Sorting by spatial proximity (i.e., contextual relevance) often produces more useful matches than sorting purely by lexical distance ("fuzzy"). Another way to sort matches is by recency, using an LRU (Least Recently Used) cache—essentially ranking candidates based on how recently they were used. However, this is often overkill in practice, as spatial proximity (as provided by the "nearest" option) is usually sufficient to surface the most relevant matches. ```vim set cot=menuone,popup,noselect,nearest inf def SkipTextChangedIEvent(): string # Suppress next event caused by (or when no matches found) set eventignore+=TextChangedI timer_start(1, (_) => { set eventignore-=TextChangedI }) return '' enddef autocmd TextChangedI * InsComplete() def InsComplete() if getcharstr(1) == '' && getline('.')->strpart(0, col('.') - 1) =~ '\k$' SkipTextChangedIEvent() feedkeys("\", "n") endif enddef inoremap =SkipTextChangedIEvent() inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" ``` closes: #17076 Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 6 +- runtime/doc/version9.txt | 3 +- src/insexpand.c | 109 ++++++++++++++++++++++++++-- src/option.h | 1 + src/optionstr.c | 2 +- src/testdir/test_ins_complete.vim | 115 ++++++++++++++++++++++++++++++ src/version.c | 2 + 7 files changed, 231 insertions(+), 7 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 99e6d54f89..b3b29d0d8a 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 14 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2201,6 +2201,10 @@ A jump table for the options with a short description can be found at |Q_op|. Useful when there is additional information about the match, e.g., what file it comes from. + nearest Matches are presented in order of proximity to the cursor + position. This applies only to matches from the current + buffer. No effect if "fuzzy" is present. + noinsert Do not insert any text for a match until the user selects a match from the menu. Only works in combination with "menu" or "menuone". No effect if "longest" is present. diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 50fb66ff93..27470f0022 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Apr 14 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41613,6 +41613,7 @@ Completion: ~ - New option value for 'completeopt': "nosort" - do not sort completion results "preinsert" - highlight to be inserted values + "nearest" - sort completion results by distance to cursor - handle multi-line completion items as expected - improved commandline completion for the |:hi| command - New option value for 'wildmode': diff --git a/src/insexpand.c b/src/insexpand.c index 8c15adeee4..55c0e483e2 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -105,7 +105,7 @@ struct compl_S // cp_flags has CP_FREE_FNAME int cp_flags; // CP_ values int cp_number; // sequence number - int cp_score; // fuzzy match score + int cp_score; // fuzzy match score or proximity score int cp_in_match_array; // collected by compl_match_array int cp_user_abbr_hlattr; // highlight attribute for abbr int cp_user_kind_hlattr; // highlight attribute for kind @@ -792,6 +792,88 @@ cfc_has_mode(void) return FALSE; } +/* + * Returns TRUE if matches should be sorted based on proximity to the cursor. + */ + static int +is_nearest_active(void) +{ + unsigned int flags = get_cot_flags(); + + return (flags & COT_NEAREST) && !(flags & COT_FUZZY); +} + +/* + * Repositions a match in the completion list based on its proximity score. + * If the match is at the head and has a higher score than the next node, + * or if it's in the middle/tail and has a lower score than the previous node, + * it is moved to the correct position while maintaining ascending order. + */ + static void +reposition_match(compl_T *match) +{ + compl_T *insert_before = NULL; + compl_T *insert_after = NULL; + + // Node is at head and score is too big + if (!match->cp_prev) + { + if (match->cp_next && match->cp_next->cp_score > 0 && + match->cp_next->cp_score < match->cp_score) + { + // : compl_first_match is at head and newly inserted node + compl_first_match = compl_curr_match = match->cp_next; + // Find the correct position in ascending order + insert_before = match->cp_next; + do + { + insert_after = insert_before; + insert_before = insert_before->cp_next; + } while (insert_before && insert_before->cp_score > 0 && + insert_before->cp_score < match->cp_score); + } + else + return; + } + // Node is at tail or in the middle but score is too small + else + { + if (match->cp_prev->cp_score > 0 && match->cp_prev->cp_score > match->cp_score) + { + // : compl_curr_match (and newly inserted match) is at tail + if (!match->cp_next) + compl_curr_match = compl_curr_match->cp_prev; + // Find the correct position in ascending order + insert_after = match->cp_prev; + do + { + insert_before = insert_after; + insert_after = insert_after->cp_prev; + } while (insert_after && insert_after->cp_score > 0 && + insert_after->cp_score > match->cp_score); + } + else + return; + } + + if (insert_after) + { + // Remove the match from its current position + if (match->cp_prev) + match->cp_prev->cp_next = match->cp_next; + else + compl_first_match = match->cp_next; + if (match->cp_next) + match->cp_next->cp_prev = match->cp_prev; + + // Insert the match at the correct position + match->cp_next = insert_before; + match->cp_prev = insert_after; + insert_after->cp_next = match; + insert_before->cp_prev = match; + } +} + /* * Add a match to the list of matches. The arguments are: * str - text of the match to add @@ -849,7 +931,14 @@ ins_compl_add( && STRNCMP(match->cp_str.string, str, len) == 0 && ((int)match->cp_str.length <= len || match->cp_str.string[len] == NUL)) + { + if (is_nearest_active() && score > 0 && score < match->cp_score) + { + match->cp_score = score; + reposition_match(match); + } return NOTDONE; + } match = match->cp_next; } while (match != NULL && !is_first_match(match)); } @@ -961,6 +1050,9 @@ ins_compl_add( compl_first_match = match; compl_curr_match = match; + if (is_nearest_active() && score > 0) + reposition_match(match); + // Find the longest common string if still doing that. if (compl_get_longest && (flags & CP_ORIGINAL_TEXT) == 0 && !cfc_has_mode()) ins_compl_longest_match(match); @@ -4367,6 +4459,7 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos) int in_collect = (cfc_has_mode() && compl_length > 0); char_u *leader = ins_compl_leader(); int score = 0; + int in_curbuf = st->ins_buf == curbuf; // If 'infercase' is set, don't use 'smartcase' here save_p_scs = p_scs; @@ -4378,7 +4471,7 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos) // buffer is a good idea, on the other hand, we always set // wrapscan for curbuf to avoid missing matches -- Acevedo,Webb save_p_ws = p_ws; - if (st->ins_buf != curbuf) + if (!in_curbuf) p_ws = FALSE; else if (*st->e_cpt == '.') p_ws = TRUE; @@ -4443,7 +4536,7 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos) break; // when ADDING, the text before the cursor matches, skip it - if (compl_status_adding() && st->ins_buf == curbuf + if (compl_status_adding() && in_curbuf && start_pos->lnum == st->cur_match_pos->lnum && start_pos->col == st->cur_match_pos->col) continue; @@ -4454,8 +4547,16 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos) if (ptr == NULL || (ins_compl_has_preinsert() && STRCMP(ptr, compl_pattern.string) == 0)) continue; + if (is_nearest_active() && in_curbuf) + { + score = st->cur_match_pos->lnum - curwin->w_cursor.lnum; + if (score < 0) + score = -score; + score++; + } + if (ins_compl_add_infercase(ptr, len, p_ic, - st->ins_buf == curbuf ? NULL : st->ins_buf->b_sfname, + in_curbuf ? NULL : st->ins_buf->b_sfname, 0, cont_s_ipos, score) != NOTDONE) { if (in_collect && score == compl_first_match->cp_next->cp_score) diff --git a/src/option.h b/src/option.h index 54bdeedd75..db1030d124 100644 --- a/src/option.h +++ b/src/option.h @@ -535,6 +535,7 @@ EXTERN unsigned cot_flags; // flags from 'completeopt' #define COT_FUZZY 0x100 // TRUE: fuzzy match enabled #define COT_NOSORT 0x200 // TRUE: fuzzy match without qsort score #define COT_PREINSERT 0x400 // TRUE: preinsert +#define COT_NEAREST 0x800 // TRUE: prioritize matches close to cursor #define CFC_KEYWORD 0x001 #define CFC_FILES 0x002 diff --git a/src/optionstr.c b/src/optionstr.c index 47c340577f..62a708683e 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -122,7 +122,7 @@ static char *(p_fdm_values[]) = {"manual", "expr", "marker", "indent", "syntax", static char *(p_fcl_values[]) = {"all", NULL}; #endif static char *(p_cfc_values[]) = {"keyword", "files", "whole_line", NULL}; -static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview", "popup", "popuphidden", "noinsert", "noselect", "fuzzy", "nosort", "preinsert", NULL}; +static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview", "popup", "popuphidden", "noinsert", "noselect", "fuzzy", "nosort", "preinsert", "nearest", NULL}; #ifdef BACKSLASH_IN_FILENAME static char *(p_csl_values[]) = {"slash", "backslash", NULL}; #endif diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 5c67dbf4f2..66beb78e65 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -4067,4 +4067,119 @@ func Test_complete_append_selected_match_default() delfunc PrintMenuWords endfunc +" Test 'nearest' flag of 'completeopt' +func Test_nearest_cpt_option() + + func PrintMenuWords() + let info = complete_info(["selected", "matches"]) + call map(info.matches, {_, v -> v.word}) + return info + endfunc + + new + set completeopt+=nearest + call setline(1, ["fo", "foo", "foobar"]) + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('foobar{''matches'': [''foobar'', ''foo'', ''fo''], ''selected'': 0}', getline(4)) + %d + call setline(1, ["fo", "foo", "foobar"]) + exe "normal! Of\\=PrintMenuWords()\" + call assert_equal('foobar{''matches'': [''fo'', ''foo'', ''foobar''], ''selected'': 2}', getline(1)) + %d + + set completeopt=menu,noselect,nearest + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foobarbaz'', ''foobar'', ''foo'', ''fo''], ''selected'': -1}', getline(5)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foobarbaz'', ''foobar'', ''foo'', ''fo''], ''selected'': -1}', getline(5)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! Of\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''fo'', ''foo'', ''foobar'', ''foobarbaz''], ''selected'': -1}', getline(1)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! Of\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''fo'', ''foo'', ''foobar'', ''foobarbaz''], ''selected'': -1}', getline(1)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! of\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foo'', ''fo'', ''foobar'', ''foobarbaz''], ''selected'': -1}', getline(2)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! of\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foo'', ''fo'', ''foobar'', ''foobarbaz''], ''selected'': -1}', getline(2)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! jof\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foobar'', ''foo'', ''foobarbaz'', ''fo''], ''selected'': -1}', getline(3)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! jof\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foobar'', ''foo'', ''foobarbaz'', ''fo''], ''selected'': -1}', getline(3)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! 2jof\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foobarbaz'', ''foobar'', ''foo'', ''fo''], ''selected'': -1}', getline(4)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! 2jof\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foobarbaz'', ''foobar'', ''foo'', ''fo''], ''selected'': -1}', getline(4)) + + %d + set completeopt=menuone,noselect,nearest + call setline(1, "foo") + exe "normal! Of\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foo''], ''selected'': -1}', getline(1)) + %d + call setline(1, "foo") + exe "normal! o\\=PrintMenuWords()\" + call assert_equal('{''matches'': [''foo''], ''selected'': -1}', getline(2)) + %d + exe "normal! o\\=PrintMenuWords()\" + call assert_equal('', getline(1)) + %d + exe "normal! o\\=PrintMenuWords()\" + call assert_equal('', getline(1)) + + " Reposition match: node is at tail but score is too small + %d + call setline(1, ["foo1", "bar1", "bar2", "foo2", "foo1"]) + exe "normal! of\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foo1'', ''foo2''], ''selected'': -1}', getline(2)) + " Reposition match: node is in middle but score is too big + %d + call setline(1, ["foo1", "bar1", "bar2", "foo3", "foo1", "foo2"]) + exe "normal! of\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foo1'', ''foo3'', ''foo2''], ''selected'': -1}', getline(2)) + + set completeopt=menu,longest,nearest + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! of\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''foo'', ''fo'', ''foobar'', ''foobarbaz''], ''selected'': -1}', getline(2)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! 2jof\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''foobarbaz'', ''foobar'', ''foo'', ''fo''], ''selected'': -1}', getline(4)) + + " No effect if 'fuzzy' is present + set completeopt& + set completeopt+=fuzzy,nearest + %d + call setline(1, ["foo", "fo", "foobarbaz", "foobar"]) + exe "normal! of\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo'', ''foobarbaz'', ''foobar'', ''foo''], ''selected'': 0}', getline(2)) + %d + call setline(1, ["fo", "foo", "foobar", "foobarbaz"]) + exe "normal! 2jof\\=PrintMenuWords()\" + call assert_equal('foobar{''matches'': [''foobarbaz'', ''fo'', ''foo'', ''foobar''], ''selected'': 3}', getline(4)) + bw! + + set completeopt& + delfunc PrintMenuWords +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable diff --git a/src/version.c b/src/version.c index bdfcde210e..ec3e1a36d4 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1308, /**/ 1307, /**/ From 839fd942654b2a7c90ad0633b1c8bb9da4094cbb Mon Sep 17 00:00:00 2001 From: Luca Saccarola Date: Tue, 15 Apr 2025 20:28:09 +0200 Subject: [PATCH 101/633] runtime(netrw): remove deprecated functions closes: #17124 Signed-off-by: Luca Saccarola Signed-off-by: Christian Brabandt --- runtime/pack/dist/opt/netrw/autoload/netrw.vim | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw.vim b/runtime/pack/dist/opt/netrw/autoload/netrw.vim index 520a3f6059..f284117047 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrw.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrw.vim @@ -11379,23 +11379,6 @@ endfun " Deprecated: {{{1 -function! netrw#Launch(args) - call netrw#msg#Deprecate('netrw#Launch', 'v180', {'vim': 'dist#vim9#Launch', 'nvim': 'vim.system'}) - if !has('nvim') - call dist#vim9#Launch(args) - endif -endfunction - -function! netrw#Open(file) - call netrw#msg#Deprecate('netrw#Open', 'v180', {'vim': 'dist#vim9#Open', 'nvim': 'vim.ui.open'}) - call netrw#os#Open(a:file) -endfunction - -function! netrw#WinPath(path) - call netrw#msg#Deprecate('netrw#WinPath', 'v180', {}) - call netrw#fs#WinPath(a:path) -endfunction - " }}} " Settings Restoration: {{{1 " ========================== From 470317f78b110b4559cecb26039b5f93447c1bf0 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 16 Apr 2025 17:13:28 +0200 Subject: [PATCH 102/633] runtime(tar): remove dependency on netrw#WinPath, include mapping doc related: #17124 Signed-off-by: Christian Brabandt --- runtime/autoload/tar.vim | 28 ++++++++++++++++++++++++---- runtime/doc/pi_tar.txt | 11 ++++++++++- runtime/doc/tags | 1 + 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/runtime/autoload/tar.vim b/runtime/autoload/tar.vim index 4aab915661..499036ef9c 100644 --- a/runtime/autoload/tar.vim +++ b/runtime/autoload/tar.vim @@ -14,6 +14,7 @@ " 2025 Mar 02 by Vim Project: escape the filename before using :read " 2025 Mar 02 by Vim Project: determine the compression using readblob() " instead of shelling out to file(1) +" 2025 Apr 16 by Vim Project: decouple from netrw by adding s:WinPath() " " Contains many ideas from Michael Toren's " @@ -146,7 +147,7 @@ fun! tar#Browse(tarfile) let lastline= line("$") call setline(lastline+1,'" tar.vim version '.g:loaded_tar) call setline(lastline+2,'" Browsing tarfile '.a:tarfile) - call setline(lastline+3,'" Select a file with cursor and press ENTER') + call setline(lastline+3,'" Select a file with cursor and press ENTER, "x" to extract a file') keepj $put ='' keepj sil! 0d keepj $ @@ -615,7 +616,7 @@ fun! tar#Extract() let tarball = expand("%") let tarbase = substitute(tarball,'\..*$','','') - let extractcmd= netrw#WinPath(g:tar_extractcmd) + let extractcmd= s:WinPath(g:tar_extractcmd) if filereadable(tarbase.".tar") call system(extractcmd." ".shellescape(tarbase).".tar ".shellescape(fname)) if v:shell_error != 0 @@ -765,6 +766,25 @@ fun! s:Header(fname) return "unknown" endfun +" --------------------------------------------------------------------- +" s:WinPath: {{{2 +fun! s:WinPath(path) + if (!g:netrw_cygwin || &shell !~ '\%(\\|\\)\%(\.exe\)\=$') && has("win32") + " remove cygdrive prefix, if present + let path = substitute(a:path, '/cygdrive/\(.\)', '\1:', '') + " remove trailing slash (Win95) + let path = substitute(path, '\(\\\|/\)$', '', 'g') + " remove escaped spaces + let path = substitute(path, '\ ', ' ', 'g') + " convert slashes to backslashes + let path = substitute(path, '/', '\', 'g') + else + let path = a:path + endif + + return path +endfun + " --------------------------------------------------------------------- " tar#Vimuntar: installs a tarball in the user's .vim / vimfiles directory {{{2 fun! tar#Vimuntar(...) @@ -786,7 +806,7 @@ fun! tar#Vimuntar(...) if simplify(curdir) != simplify(vimhome) " copy (possibly compressed) tarball to .vim/vimfiles - call system(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome)) + call system(s:WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome)) exe "cd ".fnameescape(vimhome) endif @@ -808,7 +828,7 @@ fun! tar#Vimuntar(...) else call vimball#Decompress(tartail,0) endif - let extractcmd= netrw#WinPath(g:tar_extractcmd) + let extractcmd= s:WinPath(g:tar_extractcmd) call system(extractcmd." ".shellescape(tarbase.".tar")) " set up help diff --git a/runtime/doc/pi_tar.txt b/runtime/doc/pi_tar.txt index 5b317d6087..6d49928dcb 100644 --- a/runtime/doc/pi_tar.txt +++ b/runtime/doc/pi_tar.txt @@ -1,4 +1,4 @@ -*pi_tar.txt* For Vim version 9.1. Last change: 2024 May 11 +*pi_tar.txt* For Vim version 9.1. Last change: 2025 Mar 16 +====================+ | Tar File Interface | @@ -74,6 +74,15 @@ Copyright 2005-2017: *tar-copyright* let g:loaded_tarPlugin= 1 let g:loaded_tar = 1 < + *tar-mappings* + MAPPINGS~ + + The following (buffer-local) mappings are available in a tar buffer: + + Open selected file for editing, any changes will be + written back to the archive. + same as + x Extract selected file. ============================================================================== 3. Options *tar-options* diff --git a/runtime/doc/tags b/runtime/doc/tags index 8c7b81adbe..415b67589e 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -10681,6 +10681,7 @@ tar-contents pi_tar.txt /*tar-contents* tar-copyright pi_tar.txt /*tar-copyright* tar-history pi_tar.txt /*tar-history* tar-manual pi_tar.txt /*tar-manual* +tar-mappings pi_tar.txt /*tar-mappings* tar-options pi_tar.txt /*tar-options* tar-usage pi_tar.txt /*tar-usage* tcl if_tcl.txt /*tcl* From fbbaa6ebe92b938f1f9ef008571c330a8d29166a Mon Sep 17 00:00:00 2001 From: Eisuke Kawashima Date: Wed, 16 Apr 2025 18:20:59 +0200 Subject: [PATCH 103/633] runtime: set 'cpoptions' for line-continuation in various runtime files closes: #17121 Signed-off-by: Eisuke Kawashima Signed-off-by: Christian Brabandt --- runtime/ftplugin/go.vim | 7 +++++++ runtime/ftplugin/heex.vim | 7 +++++++ runtime/ftplugin/lprolog.vim | 10 +++++++++- runtime/ftplugin/mediawiki.vim | 7 +++++++ runtime/ftplugin/mojo.vim | 7 +++++++ runtime/ftplugin/nroff.vim | 7 +++++++ runtime/ftplugin/tera.vim | 7 +++++++ runtime/indent/cucumber.vim | 6 ++++++ runtime/syntax/asy.vim | 6 ++++++ runtime/syntax/jq.vim | 7 +++++++ runtime/syntax/modula2.vim | 7 +++++++ runtime/syntax/pacmanlog.vim | 7 +++++++ runtime/syntax/rasi.vim | 6 ++++++ runtime/syntax/tutor.vim | 9 +++++++++ runtime/syntax/typst.vim | 11 +++++++++-- 15 files changed, 108 insertions(+), 3 deletions(-) diff --git a/runtime/ftplugin/go.vim b/runtime/ftplugin/go.vim index 57fc73cd13..f3cae02065 100644 --- a/runtime/ftplugin/go.vim +++ b/runtime/ftplugin/go.vim @@ -5,12 +5,16 @@ " 2024 Jul 16 by Vim Project (add recommended indent style) " 2025 Mar 07 by Vim Project (add formatprg and keywordprg option #16804) " 2025 Mar 18 by Vim Project (use :term for 'keywordprg' #16911) +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) if exists('b:did_ftplugin') finish endif let b:did_ftplugin = 1 +let s:cpo_save = &cpo +set cpo&vim + setlocal formatoptions-=t setlocal formatprg=gofmt @@ -45,4 +49,7 @@ if !exists('*' .. expand('') .. 'GoKeywordPrg') endfunc endif +let &cpo = s:cpo_save +unlet s:cpo_save + " vim: sw=2 sts=2 et diff --git a/runtime/ftplugin/heex.vim b/runtime/ftplugin/heex.vim index becc071c37..2f53d22ee6 100644 --- a/runtime/ftplugin/heex.vim +++ b/runtime/ftplugin/heex.vim @@ -2,12 +2,16 @@ " Language: HEEx " Maintainer: Mitchell Hanberg " Last Change: 2022 Sep 21 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) if exists("b:did_ftplugin") finish endif let b:did_ftplugin = 1 +let s:cpo_save = &cpo +set cpo&vim + setlocal shiftwidth=2 softtabstop=2 expandtab setlocal comments=:<%!-- @@ -25,3 +29,6 @@ if exists("loaded_matchit") && !exists("b:match_words") \ '<\@<=\([^/!][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words" endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/lprolog.vim b/runtime/ftplugin/lprolog.vim index 1075a9c813..07ffc527c8 100644 --- a/runtime/ftplugin/lprolog.vim +++ b/runtime/ftplugin/lprolog.vim @@ -2,7 +2,9 @@ " Language: LambdaProlog (Teyjus) " Maintainer: Markus Mottl " URL: http://www.ocaml.info/vim/ftplugin/lprolog.vim -" Last Change: 2023 Aug 28 - added undo_ftplugin (Vim Project) +" Last Change: 2025 Apr 16 +" 2025 Apr 16 - set 'cpoptions' for line continuation +" 2023 Aug 28 - added undo_ftplugin (Vim Project) " 2006 Feb 05 " 2001 Sep 16 - fixed 'no_mail_maps'-bug (MM) " 2001 Sep 02 - initial release (MM) @@ -12,6 +14,9 @@ if exists("b:did_ftplugin") finish endif +let s:cpo_save = &cpo +set cpo&vim + " Don't do other file type settings for this buffer let b:did_ftplugin = 1 @@ -43,3 +48,6 @@ if !exists("no_plugin_maps") && !exists("no_lprolog_maps") vnoremap BUncomOn :'<,'>`0i/*`>o0i*/`< vnoremap BUncomOff :'<,'>`dd`< endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/mediawiki.vim b/runtime/ftplugin/mediawiki.vim index 4618246106..399de421ee 100644 --- a/runtime/ftplugin/mediawiki.vim +++ b/runtime/ftplugin/mediawiki.vim @@ -3,6 +3,7 @@ " Home: http://en.wikipedia.org/wiki/Wikipedia:Text_editor_support#Vim " Last Change: 2024 Jul 14 " Credits: chikamichi +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) " if exists("b:did_ftplugin") @@ -10,6 +11,9 @@ if exists("b:did_ftplugin") endif let b:did_ftplugin = 1 +let s:cpo_save = &cpo +set cpo&vim + " 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 @@ -40,3 +44,6 @@ setlocal foldmethod=expr let b:undo_ftplugin = "setl commentstring< comments< formatoptions< foldexpr< foldmethod<" let b:undo_ftplugin += " matchpairs< linebreak< wrap< textwidth<" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/mojo.vim b/runtime/ftplugin/mojo.vim index ff50229934..c7f3b6b41e 100644 --- a/runtime/ftplugin/mojo.vim +++ b/runtime/ftplugin/mojo.vim @@ -2,12 +2,16 @@ " Language: Mojo " Maintainer: Riley Bruins " Last Change: 2024 Jul 07 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) if exists('b:did_ftplugin') finish endif let b:did_ftplugin = 1 +let s:cpo_save = &cpo +set cpo&vim + setlocal include=^\\s*\\(from\\\|import\\) setlocal define=^\\s*\\(\\(async\\s\\+\\)\\?def\\\|class\\) @@ -39,3 +43,6 @@ let b:undo_ftplugin = 'setlocal include<' \ . '|setlocal suffixesadd<' \ . '|setlocal comments<' \ . '|setlocal commentstring<' + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/nroff.vim b/runtime/ftplugin/nroff.vim index 7d3d2a597f..1c6d4ebc79 100644 --- a/runtime/ftplugin/nroff.vim +++ b/runtime/ftplugin/nroff.vim @@ -7,12 +7,16 @@ " Last Changes: " 2024 May 24 by Riley Bruins ('commentstring' #14843) " 2025 Feb 12 by Wu, Zhenyu (matchit configuration #16619) +" 2025 Apr 16 by Eisuke Kawashima (cpoptions #17121) if exists("b:did_ftplugin") finish endif let b:did_ftplugin = 1 +let s:cpo_save = &cpo +set cpo&vim + setlocal commentstring=.\\\"\ %s setlocal comments=:.\\\" setlocal sections+=Sh @@ -30,3 +34,6 @@ if exists('loaded_matchit') \ . ',^\.\s*FS\>:^\.\s*FE\>' let b:undo_ftplugin .= "| unlet b:match_words" endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/tera.vim b/runtime/ftplugin/tera.vim index 65bae70048..ce4134ae03 100644 --- a/runtime/ftplugin/tera.vim +++ b/runtime/ftplugin/tera.vim @@ -2,12 +2,16 @@ " Language: Tera " Maintainer: Muntasir Mahmud " Last Change: 2025 Mar 08 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) if exists("b:did_ftplugin") finish endif let b:did_ftplugin = 1 +let s:cpo_save = &cpo +set cpo&vim + setlocal autoindent setlocal commentstring={#\ %s\ #} @@ -28,3 +32,6 @@ setlocal softtabstop=2 let b:undo_ftplugin = "setlocal autoindent< commentstring< comments< " .. \ "includeexpr< suffixesadd< expandtab< shiftwidth< softtabstop<" let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/indent/cucumber.vim b/runtime/indent/cucumber.vim index 5d144e426b..33d4cc7317 100644 --- a/runtime/indent/cucumber.vim +++ b/runtime/indent/cucumber.vim @@ -2,11 +2,14 @@ " Language: Cucumber " Maintainer: Tim Pope " Last Change: 2023 Dec 28 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) if exists("b:did_indent") finish endif let b:did_indent = 1 +let s:cpo_save = &cpo +set cpo&vim setlocal autoindent setlocal indentexpr=GetCucumberIndent() @@ -95,4 +98,7 @@ function! GetCucumberIndent(...) abort return prev.indent < 0 ? 0 : prev.indent endfunction +let &cpo = s:cpo_save +unlet s:cpo_save + " vim:set sts=2 sw=2: diff --git a/runtime/syntax/asy.vim b/runtime/syntax/asy.vim index ed2bf712f5..de17d925d0 100644 --- a/runtime/syntax/asy.vim +++ b/runtime/syntax/asy.vim @@ -3,6 +3,7 @@ " Maintainer: Avid Seeker " Andy Hammerlindl " Last Change: 2022 Jan 05 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) " Hacked together from Bram Moolenaar's C syntax file, and Claudio Fleiner's " Java syntax file. @@ -11,6 +12,9 @@ if exists("b:current_syntax") finish endif +let s:cpo_save = &cpo +set cpo&vim + " useful C/C++/Java keywords syn keyword asyStatement break return continue unravel syn keyword asyConditional if else @@ -241,3 +245,5 @@ hi def link asyTodo Todo hi def link asyPathSpec Statement let b:current_syntax = "asy" +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/syntax/jq.vim b/runtime/syntax/jq.vim index 272dcb4ebe..3275e2ef5e 100644 --- a/runtime/syntax/jq.vim +++ b/runtime/syntax/jq.vim @@ -3,12 +3,16 @@ " Maintainer: Vito " Last Change: 2024 Apr 17 " Upstream: https://github.com/vito-c/jq.vim +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) " " Quit when a (custom) syntax file was already loaded if exists('b:current_syntax') finish endif +let s:cpo_save = &cpo +set cpo&vim + " syn include @jqHtml syntax/html.vim " Doc comment HTML " jqTodo @@ -128,3 +132,6 @@ hi def link jqString String hi def link jqInterpolationDelimiter Delimiter hi def link jqConditional Conditional hi def link jqNumber Number + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/syntax/modula2.vim b/runtime/syntax/modula2.vim index 6a9f4af6aa..3c1346e9f5 100644 --- a/runtime/syntax/modula2.vim +++ b/runtime/syntax/modula2.vim @@ -3,14 +3,21 @@ " Maintainer: Doug Kearns " Previous Maintainer: pf@artcom0.north.de (Peter Funk) " Last Change: 2024 Jan 04 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) if exists("b:current_syntax") finish endif +let s:cpo_save = &cpo +set cpo&vim + let dialect = modula2#GetDialect() exe "runtime! syntax/modula2/opt/" .. dialect .. ".vim" let b:current_syntax = "modula2" +let &cpo = s:cpo_save +unlet s:cpo_save + " vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/syntax/pacmanlog.vim b/runtime/syntax/pacmanlog.vim index 98abd58685..798b48f727 100644 --- a/runtime/syntax/pacmanlog.vim +++ b/runtime/syntax/pacmanlog.vim @@ -2,11 +2,15 @@ " Language: pacman.log " Maintainer: Ronan Pigott " Last Change: 2023 Dec 04 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) if exists("b:current_syntax") finish endif +let s:cpo_save = &cpo +set cpo&vim + syn sync maxlines=1 syn region pacmanlogMsg start='\S' end='$' keepend contains=pacmanlogTransaction,pacmanlogALPMMsg syn region pacmanlogTag start='\['hs=s+1 end='\]'he=e-1 keepend nextgroup=pacmanlogMsg @@ -39,3 +43,6 @@ hi def link pacmanlogPackageName Normal hi def link pacmanlogPackageVersion Comment let b:current_syntax = "pacmanlog" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/syntax/rasi.vim b/runtime/syntax/rasi.vim index 40c3393fc5..c4c4508f12 100644 --- a/runtime/syntax/rasi.vim +++ b/runtime/syntax/rasi.vim @@ -2,6 +2,7 @@ " Language: rasi (Rofi Advanced Style Information) " Maintainer: Pierrick Guillaume " Last Change: 2024 May 21 +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) " " Syntax support for rasi config file @@ -12,6 +13,8 @@ if exists('b:current_syntax') finish endif let b:current_syntax = 'rasi' +let s:cpo_save = &cpo +set cpo&vim " String {{{ syn region rasiString start=+"+ skip=+\\"+ end=+"+ oneline contained @@ -295,4 +298,7 @@ hi def link rasiInvPropertyId rasiError hi def link rasiInvPropertyVal rasiError " }}} +let &cpo = s:cpo_save +unlet s:cpo_save + " vim:ts=8 diff --git a/runtime/syntax/tutor.vim b/runtime/syntax/tutor.vim index 83ca547fdd..7d0cd31c1d 100644 --- a/runtime/syntax/tutor.vim +++ b/runtime/syntax/tutor.vim @@ -1,7 +1,14 @@ +" Language: Vim Tutor +" Maintainer: Vim Project +" Last Change: 2025 Apr 16 + if exists("b:current_syntax") finish endif +let s:cpo_save = &cpo +set cpo&vim + syn include @VIM syntax/vim.vim unlet b:current_syntax syn include @TUTORSHELL syntax/sh.vim @@ -75,3 +82,5 @@ hi def link tutorInlineX tutorX hi def link tutorShellPrompt Delimiter let b:current_syntax = "tutor" +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/syntax/typst.vim b/runtime/syntax/typst.vim index b1f05ec853..686f7c3f31 100644 --- a/runtime/syntax/typst.vim +++ b/runtime/syntax/typst.vim @@ -1,14 +1,18 @@ " Vim syntax file " Language: Typst -" Previous Maintainer: Gregory Anders " Maintainer: Luca Saccarola +" Previous Maintainer: Gregory Anders +" Based On: https://github.com/kaarmu/typst.vim " Last Change: 2024 Dec 09 -" Based on: https://github.com/kaarmu/typst.vim +" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) if exists('b:current_syntax') finish endif +let s:cpo_save = &cpo +set cpo&vim + syntax sync fromstart syntax spell toplevel @@ -470,4 +474,7 @@ highlight default typstMarkupBoldItalic term=bold,italic let b:current_syntax = 'typst' +let &cpo = s:cpo_save +unlet s:cpo_save + " }}}1 From 031919c7ac66c4fcff3719b4f4158887b68d3315 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Wed, 16 Apr 2025 18:23:23 +0200 Subject: [PATCH 104/633] patch 9.1.1309: tests: no test for 'pummaxwidth' with non-truncated "kind" Problem: tests: no test for 'pummaxwidth' with non-truncated "kind". Solution: Add a test with "kind" and larger 'pummaxwidth' (zeertzjq). closes: #17126 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/testdir/dumps/Test_pum_maxwidth_21.dump | 8 ++++++++ src/testdir/dumps/Test_pum_maxwidth_22.dump | 8 ++++++++ src/testdir/test_popup.vim | 14 ++++++++++++++ src/version.c | 2 ++ 4 files changed, 32 insertions(+) create mode 100644 src/testdir/dumps/Test_pum_maxwidth_21.dump create mode 100644 src/testdir/dumps/Test_pum_maxwidth_22.dump diff --git a/src/testdir/dumps/Test_pum_maxwidth_21.dump b/src/testdir/dumps/Test_pum_maxwidth_21.dump new file mode 100644 index 0000000000..53def2cfc3 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_21.dump @@ -0,0 +1,8 @@ +|f+0&#ffffff0|o@1> @71 +|f+0#0000001#e0e0e08|o@1| @7|f|o@1|K|>| +0#4040ff13#ffffff0@58 +|b+0#0000001#ffd7ff255|a|r| @7|一*&|二|>+&| +0#4040ff13#ffffff0@58 +|一*0#0000001#ffd7ff255|二|三|四|五| +&|m|u|l|t|i| +0#4040ff13#ffffff0@58 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/dumps/Test_pum_maxwidth_22.dump b/src/testdir/dumps/Test_pum_maxwidth_22.dump new file mode 100644 index 0000000000..fa95a1ead2 --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_22.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@70> |o@1|f +| +0#4040ff13&@58|<+0#0000001#e0e0e08|K|o@1|f| @7|o@1|f +| +0#4040ff13#ffffff0@58|<+0#0000001#ffd7ff255|二*&|一| +&@7|r|a|b +| +0#4040ff13#ffffff0@58|i+0#0000001#ffd7ff255|t|l|u|m| |五*&|四|三|二|一 +| +0#4040ff13#ffffff0@73|~ +| @73|~ +| @73|~ +| @73|~ diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index ac879d24ff..f1fc9600c1 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -2154,6 +2154,20 @@ func Test_pum_maxwidth_multibyte() call term_sendkeys(buf, "\:set norightleft\") endif + call term_sendkeys(buf, ":set pummaxwidth=16\") + call TermWait(buf, 50) + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_21', {'rows': 8}) + call term_sendkeys(buf, "\") + + if has('rightleft') + call term_sendkeys(buf, ":set rightleft\") + call TermWait(buf, 50) + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_22', {'rows': 8}) + call term_sendkeys(buf, "\:set norightleft\") + endif + call StopVimInTerminal(buf) endfunc diff --git a/src/version.c b/src/version.c index ec3e1a36d4..cf494034fc 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1309, /**/ 1308, /**/ From 40daa1358cf46cd155b733ffb1e5a3f9f591dedb Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Wed, 16 Apr 2025 18:29:15 +0200 Subject: [PATCH 105/633] runtime(gleam): Update ftplugin, use recommended_style config variable Wrap the setting of basic whitespace formatting options in a conditional block, following the de facto standard. Setting 'et', 'sts' and 'sw' can be disabled by setting "gleam_recommended_style" to false. Follow up to PR #17086. closes: #17128 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/doc/filetype.txt | 12 +++++++++++- runtime/doc/tags | 1 + runtime/ftplugin/gleam.vim | 14 +++++++++----- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index 761d6676f4..c0bf1e616b 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -1,4 +1,4 @@ -*filetype.txt* For Vim version 9.1. Last change: 2025 Apr 15 +*filetype.txt* For Vim version 9.1. Last change: 2025 Apr 16 VIM REFERENCE MANUAL by Bram Moolenaar @@ -662,6 +662,16 @@ possibilities: > The `:Cycle` command is also mapped to the CTRL-A and CTRL-X keys. For details, see `git-rebase --help`. +GLEAM *ft-gleam-plugin* + +By default the following options are set for the recommended gleam style: > + + setlocal expandtab shiftwidth=2 softtabstop=2 + +To disable this behavior, set the following variable in your vimrc: > + + let g:gleam_recommended_style = 0 + GO *ft-go-plugin* By default the following options are set, based on Golang official docs: > diff --git a/runtime/doc/tags b/runtime/doc/tags index 415b67589e..961bde3a2a 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7388,6 +7388,7 @@ 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-gitrebase-plugin filetype.txt /*ft-gitrebase-plugin* +ft-gleam-plugin filetype.txt /*ft-gleam-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* diff --git a/runtime/ftplugin/gleam.vim b/runtime/ftplugin/gleam.vim index 5187d4d008..70958c70fc 100644 --- a/runtime/ftplugin/gleam.vim +++ b/runtime/ftplugin/gleam.vim @@ -2,7 +2,7 @@ " Language: Gleam " Maintainer: Kirill Morozov " Previous Maintainer: Trilowy (https://github.com/trilowy) -" Last Change: 2025-04-12 +" Last Change: 2025 Apr 16 if exists('b:did_ftplugin') finish @@ -11,11 +11,15 @@ let b:did_ftplugin = 1 setlocal comments=://,:///,://// setlocal commentstring=//\ %s -setlocal expandtab setlocal formatprg=gleam\ format\ --stdin -setlocal shiftwidth=2 -setlocal softtabstop=2 -let b:undo_ftplugin = "setlocal com< cms< fp< et< sw< sts<" +let b:undo_ftplugin = "setlocal com< cms< fp<" + +if get(g:, "gleam_recommended_style", 1) + setlocal expandtab + setlocal shiftwidth=2 + setlocal softtabstop=2 + let b:undo_ftplugin ..= " | setlocal et< sw< sts<" +endif " vim: sw=2 sts=2 et From 1c2b25825037bf83862f7af71ce9177cf949daca Mon Sep 17 00:00:00 2001 From: glepnir Date: Wed, 16 Apr 2025 19:41:19 +0200 Subject: [PATCH 106/633] patch 9.1.1310: completion: redundant check for preinsert effect Problem: Duplicate check for preinsert effect, particularly for Ctrl_w and Ctrl_U. Solution: Remove the specific check for Ctrl_w and Ctrl_U to eliminate redundancy (glepnir). closes: #17129 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/insexpand.c | 3 --- src/version.c | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 55c0e483e2..f4449c0bfe 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -2757,9 +2757,6 @@ ins_compl_stop(int c, int prev_mode, int retval) retval = TRUE; } - if ((c == Ctrl_W || c == Ctrl_U) && ins_compl_preinsert_effect()) - ins_compl_delete(); - auto_format(FALSE, TRUE); // Trigger the CompleteDonePre event to give scripts a chance to diff --git a/src/version.c b/src/version.c index cf494034fc..bdd9723119 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1310, /**/ 1309, /**/ From 0ac1eb3555445f4c458c06cef7c411de1c8d1020 Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Wed, 16 Apr 2025 20:18:33 +0200 Subject: [PATCH 107/633] patch 9.1.1311: completion: not possible to limit number of matches Problem: completion: not possible to limit number of matches Solution: allow to limit the matches for 'complete' sources by using the "{flag}^{limit}" notation (Girish Palya) This change extends the 'complete' option to support limiting the number of matches returned from individual completion sources. **Rationale:** In large files, certain sources (such as the current buffer) can generate an overwhelming number of matches, which may cause more relevant results from other sources (e.g., LSP or tags) to be pushed out of view. By specifying per-source match limits, the completion menu remains balanced and diverse, improving visibility and relevance of suggestions. A caret (`^`) followed by a number can be appended to a source flag to specify the maximum number of matches for that source. For example: ``` :set complete=.^9,w,u,t^5 ``` In this configuration: - The current buffer (`.`) will return up to 9 matches. - The tag completion (`t`) will return up to 5 matches. - Other sources (`w`, `u`) are not limited. This feature is fully backward-compatible and does not affect behavior when the `^count` suffix is not used. The caret (`^`) was chosen as the delimiter because it is least likely to appear in file names. closes: #17087 Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 9 +- runtime/doc/version9.txt | 4 +- src/insexpand.c | 216 +++++++++++++++++++++++------- src/optionstr.c | 33 ++++- src/testdir/test_ins_complete.vim | 120 +++++++++++++++++ src/testdir/test_options.vim | 13 +- src/version.c | 2 + 7 files changed, 341 insertions(+), 56 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index b3b29d0d8a..8ab0dcc8bd 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 15 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 16 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2125,6 +2125,13 @@ A jump table for the options with a short description can be found at |Q_op|. based expansion (e.g., dictionary |i_CTRL-X_CTRL-K|, included patterns |i_CTRL-X_CTRL-I|, tags |i_CTRL-X_CTRL-]| and normal expansions). + An optional match limit can be specified for a completion source by + appending a caret ("^") followed by a {count} to the source flag. + For example: ".^9,w,u,t^5" limits matches from the current buffer + to 9 and from tags to 5. Other sources remain unlimited. + The match limit takes effect only during forward completion (CTRL-N) + and is ignored during backward completion (CTRL-P). + *'completefunc'* *'cfu'* 'completefunc' 'cfu' string (default: empty) local to buffer diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 27470f0022..a5579f4ab8 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Apr 15 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 16 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41622,6 +41622,8 @@ Completion: ~ "f{func}" - complete using given function "f" - complete using 'completefunc' "o" - complete using 'omnifunc' +- allow to limit matches for the 'complete' sources by using the + "{flag}^" notation Options: ~ - the default for 'commentstring' contains whitespace padding to have diff --git a/src/insexpand.c b/src/insexpand.c index f4449c0bfe..9a82a32bcb 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -109,7 +109,7 @@ struct compl_S int cp_in_match_array; // collected by compl_match_array int cp_user_abbr_hlattr; // highlight attribute for abbr int cp_user_kind_hlattr; // highlight attribute for kind - int cp_cpt_value_idx; // index of this match's source in 'cpt' option + int cp_cpt_source_idx; // index of this match's source in 'cpt' option }; // values for cp_flags @@ -215,9 +215,16 @@ static int compl_selected_item = -1; static int *compl_fuzzy_scores; -static int *cpt_func_refresh_always; // array indicating which 'cpt' functions have 'refresh:always' set -static int cpt_value_count; // total number of completion sources specified in the 'cpt' option -static int cpt_value_idx; // index of the current completion source being expanded +// Define the structure for completion source (in 'cpt' option) information +typedef struct cpt_source_T +{ + int refresh_always; // Flag array to indicate which 'cpt' functions have 'refresh:always' set + int max_matches; // Maximum number of items to display in the menu from the source +} cpt_source_T; + +static cpt_source_T *cpt_sources_array; // Pointer to the array of completion sources +static int cpt_sources_count; // Total number of completion sources specified in the 'cpt' option +static int cpt_sources_index; // Index of the current completion source being expanded // "compl_match_array" points the currently displayed list of entries in the // popup menu. It is NULL when there is no popup menu. @@ -239,12 +246,12 @@ static void ins_compl_fixRedoBufForLeader(char_u *ptr_arg); static void ins_compl_add_list(list_T *list); static void ins_compl_add_dict(dict_T *dict); static int get_userdefined_compl_info(colnr_T curs_col, callback_T *cb, int *startcol); -static callback_T *get_cpt_func_callback(char_u *funcname); static void get_cpt_func_completion_matches(callback_T *cb); +static callback_T *get_cpt_func_callback(char_u *funcname); # endif -static int cpt_compl_src_init(char_u *p_cpt); +static int cpt_sources_init(void); static int is_cpt_func_refresh_always(void); -static void cpt_compl_src_clear(void); +static void cpt_sources_clear(void); static void cpt_compl_refresh(void); static int ins_compl_key2dir(int c); static int ins_compl_pum_key(int c); @@ -980,7 +987,7 @@ ins_compl_add( match->cp_user_abbr_hlattr = user_hl ? user_hl[0] : -1; match->cp_user_kind_hlattr = user_hl ? user_hl[1] : -1; match->cp_score = score; - match->cp_cpt_value_idx = cpt_value_idx; + match->cp_cpt_source_idx = cpt_sources_index; if (cptext != NULL) { @@ -1467,6 +1474,10 @@ ins_compl_build_pum(void) compl_T *match_tail = NULL; compl_T *match_next = NULL; int update_shown_match = fuzzy_filter; + int match_count; + int cur_source = -1; + int max_matches_found = FALSE; + int is_forward = compl_shows_dir_forward() && !fuzzy_filter; // Need to build the popup menu list. compl_match_arraysize = 0; @@ -1495,7 +1506,24 @@ ins_compl_build_pum(void) if (fuzzy_filter && compl_leader.string != NULL && compl_leader.length > 0) compl->cp_score = fuzzy_match_str(compl->cp_str.string, compl_leader.string); + if (is_forward && compl->cp_cpt_source_idx != -1) + { + if (cur_source != compl->cp_cpt_source_idx) + { + cur_source = compl->cp_cpt_source_idx; + match_count = 1; + max_matches_found = FALSE; + } + else if (cpt_sources_array && !max_matches_found) + { + int max_matches = cpt_sources_array[cur_source].max_matches; + if (max_matches > 0 && match_count > max_matches) + max_matches_found = TRUE; + } + } + if (!match_at_original_text(compl) + && !max_matches_found && (compl_leader.string == NULL || ins_compl_equal(compl, compl_leader.string, (int)compl_leader.length) || (fuzzy_filter && compl->cp_score > 0))) @@ -1545,6 +1573,8 @@ ins_compl_build_pum(void) shown_match_ok = TRUE; } } + if (is_forward && compl->cp_cpt_source_idx != -1) + match_count++; i++; } @@ -2116,7 +2146,7 @@ ins_compl_clear(void) edit_submode_extra = NULL; VIM_CLEAR_STRING(compl_orig_text); compl_enter_selects = FALSE; - cpt_compl_src_clear(); + cpt_sources_clear(); #ifdef FEAT_EVAL // clear v:completed_item set_vim_var_dict(VV_COMPLETED_ITEM, dict_alloc_lock(VAR_FIXED)); @@ -2419,7 +2449,7 @@ ins_compl_restart(void) compl_matches = 0; compl_cont_status = 0; compl_cont_mode = 0; - cpt_compl_src_clear(); + cpt_sources_clear(); } /* @@ -3622,6 +3652,7 @@ get_complete_info(list_T *what_list, dict_T *retdict) #define CI_WHAT_MATCHES 0x20 #define CI_WHAT_ALL 0xff int what_flag; + int compl_fuzzy_match = (get_cot_flags() & COT_FUZZY) != 0; if (what_list == NULL) what_flag = CI_WHAT_ALL & ~(CI_WHAT_MATCHES | CI_WHAT_COMPLETED); @@ -3698,7 +3729,8 @@ get_complete_info(list_T *what_list, dict_T *retdict) if (compl_curr_match != NULL && compl_curr_match->cp_number == match->cp_number) selected_idx = list_idx; - list_idx += 1; + if (compl_fuzzy_match || match->cp_in_match_array) + list_idx += 1; } match = match->cp_next; } @@ -4669,6 +4701,39 @@ get_next_completion_match(int type, ins_compl_next_state_T *st, pos_T *ini) return found_new_match; } +/* + * Strips carets followed by numbers. This suffix typically represents the + * max_matches setting. + */ + static void +strip_caret_numbers_in_place(char_u *str) +{ + char_u *read = str, *write = str, *p; + + if (str == NULL) + return; + + while (*read) + { + if (*read == '^') + { + p = read + 1; + while (vim_isdigit(*p)) + p++; + if ((*p == ',' || *p == '\0') && p != read + 1) + { + read = p; + continue; + } + else + *write++ = *read++; + } + else + *write++ = *read++; + } + *write = '\0'; +} + /* * Get the next expansion(s), using "compl_pattern". * The search starts at position "ini" in curbuf and in the direction @@ -4704,11 +4769,12 @@ ins_compl_get_exp(pos_T *ini) // Make a copy of 'complete', in case the buffer is wiped out. st.e_cpt_copy = vim_strsave((compl_cont_status & CONT_LOCAL) ? (char_u *)"." : curbuf->b_p_cpt); + strip_caret_numbers_in_place(st.e_cpt_copy); st.e_cpt = st.e_cpt_copy == NULL ? (char_u *)"" : st.e_cpt_copy; st.last_match_pos = st.first_match_pos = *ini; if ((ctrl_x_mode_normal() || ctrl_x_mode_line_or_eval()) - && !cpt_compl_src_init(st.e_cpt)) + && !cpt_sources_init()) return FAIL; } else if (st.ins_buf != curbuf && !buf_valid(st.ins_buf)) @@ -4719,7 +4785,7 @@ ins_compl_get_exp(pos_T *ini) ? &st.last_match_pos : &st.first_match_pos; // For ^N/^P loop over all the flags/windows/buffers in 'complete'. - for (cpt_value_idx = 0;;) + for (cpt_sources_index = 0;;) { found_new_match = FAIL; st.set_match_pos = FALSE; @@ -4736,7 +4802,7 @@ ins_compl_get_exp(pos_T *ini) break; if (status == INS_COMPL_CPT_CONT) { - cpt_value_idx++; + cpt_sources_index++; continue; } } @@ -4750,7 +4816,7 @@ ins_compl_get_exp(pos_T *ini) found_new_match = get_next_completion_match(type, &st, ini); if (type > 0) - cpt_value_idx++; + cpt_sources_index++; // break the loop for specialized modes (use 'complete' just for the // generic ctrl_x_mode == CTRL_X_NORMAL) or when we've found a new @@ -4778,7 +4844,7 @@ ins_compl_get_exp(pos_T *ini) compl_started = FALSE; } } - cpt_value_idx = -1; + cpt_sources_index = -1; compl_started = TRUE; if ((ctrl_x_mode_normal() || ctrl_x_mode_line_or_eval()) @@ -5058,6 +5124,25 @@ find_comp_when_fuzzy(void) return NULL; } +/* + * Find the appropriate completion item when 'complete' ('cpt') includes + * a 'max_matches' postfix. In this case, we search for a match where + * 'cp_in_match_array' is set, indicating that the match is also present + * in 'compl_match_array'. + */ + static compl_T * +find_comp_when_cpt_sources(void) +{ + int is_forward = compl_shows_dir_forward(); + compl_T *match = compl_shown_match; + + do + match = is_forward ? match->cp_next : match->cp_prev; + while (match->cp_next && !match->cp_in_match_array + && !match_at_original_text(match)); + return match; +} + /* * Find the next set of matches for completion. Repeat the completion "todo" * times. The number of matches found is returned in 'num_matches'. @@ -5083,13 +5168,18 @@ find_next_completion_match( unsigned int cur_cot_flags = get_cot_flags(); int compl_no_select = (cur_cot_flags & COT_NOSELECT) != 0; int compl_fuzzy_match = (cur_cot_flags & COT_FUZZY) != 0; + int cpt_sources_active = compl_match_array && cpt_sources_array; while (--todo >= 0) { if (compl_shows_dir_forward() && compl_shown_match->cp_next != NULL) { - compl_shown_match = compl_fuzzy_match && compl_match_array != NULL - ? find_comp_when_fuzzy() : compl_shown_match->cp_next; + if (compl_match_array != NULL && compl_fuzzy_match) + compl_shown_match = find_comp_when_fuzzy(); + else if (cpt_sources_active) + compl_shown_match = find_comp_when_cpt_sources(); + else + compl_shown_match = compl_shown_match->cp_next; found_end = (compl_first_match != NULL && (is_first_match(compl_shown_match->cp_next) || is_first_match(compl_shown_match))); @@ -5098,8 +5188,12 @@ find_next_completion_match( && compl_shown_match->cp_prev != NULL) { found_end = is_first_match(compl_shown_match); - compl_shown_match = compl_fuzzy_match && compl_match_array != NULL - ? find_comp_when_fuzzy() : compl_shown_match->cp_prev; + if (compl_match_array != NULL && compl_fuzzy_match) + compl_shown_match = find_comp_when_fuzzy(); + else if (cpt_sources_active) + compl_shown_match = find_comp_when_cpt_sources(); + else + compl_shown_match = compl_shown_match->cp_prev; found_end |= is_first_match(compl_shown_match); } else @@ -6358,42 +6452,60 @@ spell_back_to_badword(void) * Reset the info associated with completion sources. */ static void -cpt_compl_src_clear(void) +cpt_sources_clear(void) { - VIM_CLEAR(cpt_func_refresh_always); - cpt_value_idx = -1; - cpt_value_count = 0; + VIM_CLEAR(cpt_sources_array); + cpt_sources_index = -1; + cpt_sources_count = 0; } /* * Initialize the info associated with completion sources. */ static int -cpt_compl_src_init(char_u *cpt_str) +cpt_sources_init(void) { + char_u buf[LSIZE]; + int slen; int count = 0; - char_u *p = cpt_str; + char_u *p; - while (*p) + for (p = curbuf->b_p_cpt; *p;) { while (*p == ',' || *p == ' ') // Skip delimiters p++; if (*p) // If not end of string, count this segment { + (void)copy_option_part(&p, buf, LSIZE, ","); // Advance p count++; - copy_option_part(&p, IObuff, IOSIZE, ","); // Advance p } } - cpt_compl_src_clear(); - cpt_value_count = count; + cpt_sources_clear(); + cpt_sources_count = count; if (count > 0) { - cpt_func_refresh_always = ALLOC_CLEAR_MULT(int, count); - if (cpt_func_refresh_always == NULL) + cpt_sources_array = ALLOC_CLEAR_MULT(cpt_source_T, count); + if (cpt_sources_array == NULL) { - cpt_value_count = 0; + cpt_sources_count = 0; return FAIL; } + count = 0; + for (p = curbuf->b_p_cpt; *p;) + { + while (*p == ',' || *p == ' ') // Skip delimiters + p++; + if (*p) // If not end of string, count this segment + { + char_u *t; + + vim_memset(buf, 0, LSIZE); + slen = copy_option_part(&p, buf, LSIZE, ","); // Advance p + if (slen > 0 && (t = vim_strchr(buf, '^')) != NULL) + cpt_sources_array[count].max_matches = atoi((char *)t + 1); + count++; + } + } } return OK; } @@ -6407,8 +6519,8 @@ is_cpt_func_refresh_always(void) #ifdef FEAT_COMPL_FUNC int i; - for (i = 0; i < cpt_value_count; i++) - if (cpt_func_refresh_always[i]) + for (i = 0; i < cpt_sources_count; i++) + if (cpt_sources_array[i].refresh_always) return TRUE; #endif return FALSE; @@ -6433,7 +6545,7 @@ ins_compl_make_linear(void) /* * Remove the matches linked to the current completion source (as indicated by - * cpt_value_idx) from the completion list. + * cpt_sources_index) from the completion list. */ #ifdef FEAT_COMPL_FUNC static compl_T * @@ -6441,16 +6553,20 @@ remove_old_matches(void) { compl_T *sublist_start = NULL, *sublist_end = NULL, *insert_at = NULL; compl_T *current, *next; - int compl_shown_removed = FALSE; - int forward = compl_dir_forward(); + int compl_shown_removed = FALSE; + int forward = (compl_first_match->cp_cpt_source_idx < 0); + + compl_direction = forward ? FORWARD : BACKWARD; + compl_shows_dir = compl_direction; // Identify the sublist of old matches that needs removal for (current = compl_first_match; current != NULL; current = current->cp_next) { - if (current->cp_cpt_value_idx < cpt_value_idx && (forward || (!forward && !insert_at))) + if (current->cp_cpt_source_idx < cpt_sources_index && + (forward || (!forward && !insert_at))) insert_at = current; - if (current->cp_cpt_value_idx == cpt_value_idx) + if (current->cp_cpt_source_idx == cpt_sources_index) { if (!sublist_start) sublist_start = current; @@ -6459,7 +6575,8 @@ remove_old_matches(void) compl_shown_removed = TRUE; } - if ((forward && current->cp_cpt_value_idx > cpt_value_idx) || (!forward && insert_at)) + if ((forward && current->cp_cpt_source_idx > cpt_sources_index) + || (!forward && insert_at)) break; } @@ -6470,7 +6587,8 @@ remove_old_matches(void) compl_shown_match = compl_first_match; else { // Last node will have the prefix that is being completed - for (current = compl_first_match; current->cp_next != NULL; current = current->cp_next) + for (current = compl_first_match; current->cp_next != NULL; + current = current->cp_next) ; compl_shown_match = current; } @@ -6514,11 +6632,12 @@ get_cpt_func_completion_matches(callback_T *cb UNUSED) VIM_CLEAR_STRING(cpt_compl_pattern); ret = get_userdefined_compl_info(curwin->w_cursor.col, cb, &startcol); if (ret == FAIL && startcol == -3) - cpt_func_refresh_always[cpt_value_idx] = FALSE; + cpt_sources_array[cpt_sources_index].refresh_always = FALSE; else if (ret == OK) { expand_by_function(0, cpt_compl_pattern.string, cb); - cpt_func_refresh_always[cpt_value_idx] = compl_opt_refresh_always; + cpt_sources_array[cpt_sources_index].refresh_always = + compl_opt_refresh_always; compl_opt_refresh_always = FALSE; } } @@ -6540,14 +6659,15 @@ cpt_compl_refresh(void) ins_compl_make_linear(); // Make a copy of 'cpt' in case the buffer gets wiped out cpt = vim_strsave(curbuf->b_p_cpt); + strip_caret_numbers_in_place(cpt); - cpt_value_idx = 0; - for (p = cpt; *p; cpt_value_idx++) + cpt_sources_index = 0; + for (p = cpt; *p; cpt_sources_index++) { while (*p == ',' || *p == ' ') // Skip delimiters p++; - if (cpt_func_refresh_always[cpt_value_idx]) + if (cpt_sources_array[cpt_sources_index].refresh_always) { if (*p == 'o') cb = &curbuf->b_ofu_cb; @@ -6563,7 +6683,7 @@ cpt_compl_refresh(void) copy_option_part(&p, IObuff, IOSIZE, ","); // Advance p } - cpt_value_idx = -1; + cpt_sources_index = -1; vim_free(cpt); // Make the list cyclic diff --git a/src/optionstr.c b/src/optionstr.c index 62a708683e..90b8e52ffb 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -1558,9 +1558,10 @@ did_set_commentstring(optset_T *args) did_set_complete(optset_T *args) { char_u **varp = (char_u **)args->os_varp; - char_u *p = NULL; + char_u *p, *t; char_u buffer[LSIZE]; char_u *buf_ptr; + char_u char_before = NUL; int escape; for (p = *varp; *p; ) @@ -1589,16 +1590,40 @@ did_set_complete(optset_T *args) if (vim_strchr((char_u *)".wbuksid]tUfo", *buffer) == NULL) return illegal_char(args->os_errbuf, args->os_errbuflen, *buffer); - if (!vim_strchr((char_u *)"ksf", *buffer) && *(buffer + 1) != NUL) + if (vim_strchr((char_u *)"ksf", *buffer) == NULL && *(buffer + 1) != NUL + && *(buffer + 1) != '^') + char_before = *buffer; + else + { + // Test for a number after '^' + if ((t = vim_strchr(buffer, '^')) != NULL) + { + *t++ = NUL; + if (!*t) + char_before = '^'; + else + { + for (; *t; t++) + { + if (!vim_isdigit(*t)) + { + char_before = '^'; + break; + } + } + } + } + } + if (char_before != NUL) { if (args->os_errbuf) { vim_snprintf((char *)args->os_errbuf, args->os_errbuflen, - _(e_illegal_character_after_chr), *buffer); + _(e_illegal_character_after_chr), char_before); return args->os_errbuf; } + return NULL; } - // Skip comma and spaces while (*p == ',' || *p == ' ') p++; diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 66beb78e65..2b14bfa760 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -4038,6 +4038,126 @@ func Test_complete_multiline_marks() delfunc Omni_test endfunc +func Test_complete_match_count() + func PrintMenuWords() + let info = complete_info(["selected", "matches"]) + call map(info.matches, {_, v -> v.word}) + return info + endfunc + + new + set cpt=.^0,w + call setline(1, ["fo", "foo", "foobar", "fobarbaz"]) + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo'', ''foo'', ''foobar'', ''fobarbaz''], ''selected'': 0}', getline(5)) + 5d + set cpt=.^0,w + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('fobarbaz{''matches'': [''fo'', ''foo'', ''foobar'', ''fobarbaz''], ''selected'': 3}', getline(5)) + 5d + set cpt=.^1,w + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo''], ''selected'': 0}', getline(5)) + 5d + " max_matches is ignored for backward search + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('fobarbaz{''matches'': [''fo'', ''foo'', ''foobar'', ''fobarbaz''], ''selected'': 3}', getline(5)) + 5d + set cpt=.^2,w + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo'', ''foo''], ''selected'': 0}', getline(5)) + 5d + set cot=menuone,noselect + set cpt=.^1,w + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''fo''], ''selected'': -1}', getline(5)) + set cot& + + func ComplFunc(findstart, base) + if a:findstart + return col(".") + endif + return ["foo1", "foo2", "foo3", "foo4"] + endfunc + + %d + set completefunc=ComplFunc + set cpt=.^1,f^2 + call setline(1, ["fo", "foo", "foobar", "fobarbaz"]) + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 0}', getline(5)) + 5d + exe "normal! Gof\\\=PrintMenuWords()\" + call assert_equal('foo1{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 1}', getline(5)) + 5d + exe "normal! Gof\\\\=PrintMenuWords()\" + call assert_equal('foo2{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 2}', getline(5)) + 5d + exe "normal! Gof\\\\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': -1}', getline(5)) + 5d + exe "normal! Gof\\\\\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 0}', getline(5)) + + 5d + exe "normal! Gof\\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': -1}', getline(5)) + 5d + exe "normal! Gof\\\\=PrintMenuWords()\" + call assert_equal('foo2{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 2}', getline(5)) + 5d + exe "normal! Gof\\\\\=PrintMenuWords()\" + call assert_equal('foo1{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 1}', getline(5)) + 5d + exe "normal! Gof\\\\\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 0}', getline(5)) + 5d + exe "normal! Gof\\\\\\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': -1}', getline(5)) + + %d + call setline(1, ["foo"]) + set cpt=fComplFunc^2,. + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('foo1{''matches'': [''foo1'', ''foo2'', ''foo''], ''selected'': 0}', getline(2)) + bw! + + " Test refresh:always with max_items + let g:CallCount = 0 + func! CompleteItemsSelect(findstart, base) + if a:findstart + return col('.') - 1 + endif + let g:CallCount += 1 + let res = [[], ['foobar'], ['foo1', 'foo2', 'foo3'], ['foo4', 'foo5', 'foo6']] + return #{words: res[g:CallCount], refresh: 'always'} + endfunc + + new + set complete=.,ffunction('CompleteItemsSelect')^2 + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\\=PrintMenuWords()\" + call assert_equal('foobar{''matches'': [''foobarbar'', ''foobar''], ''selected'': 1}', getline(2)) + call assert_equal(1, g:CallCount) + %d + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\o\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''foobarbar'', ''foo1'', ''foo2''], ''selected'': -1}', getline(2)) + call assert_equal(2, g:CallCount) + %d + call setline(1, "foobarbar") + let g:CallCount = 0 + exe "normal! Gof\\o\\=PrintMenuWords()\" + call assert_equal('f{''matches'': [''foobarbar'', ''foo4'', ''foo5''], ''selected'': -1}', getline(2)) + call assert_equal(3, g:CallCount) + bw! + + set completeopt& complete& + delfunc PrintMenuWords +endfunc + func Test_complete_append_selected_match_default() " when typing a normal character during completion, " completion is ended, see diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim index 834ca44df2..d8ad3f210b 100644 --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -275,11 +275,20 @@ func Test_complete() call assert_fails('set complete=x', 'E539:') call assert_fails('set complete=..', 'E535:') set complete=.,w,b,u,k,\ s,i,d,],t,U,f,o + call assert_fails('set complete=i^-10', 'E535:') + call assert_fails('set complete=i^x', 'E535:') + call assert_fails('set complete=k^2,t^-1,s^', 'E535') + call assert_fails('set complete=t^-1', 'E535') + call assert_fails('set complete=kfoo^foo2', 'E535') + call assert_fails('set complete=kfoo^', 'E535') + call assert_fails('set complete=.^', 'E535') + set complete=.,w,b,u,k,s,i,d,],t,U,f,o set complete=. + set complete=.^10,t^0 set complete+=ffuncref('foo'\\,\ [10]) - set complete=ffuncref('foo'\\,\ [10]) + set complete=ffuncref('foo'\\,\ [10])^10 set complete& - set complete+=ffunction('foo'\\,\ [10\\,\ 20]) + set complete+=ffunction('g:foo'\\,\ [10\\,\ 20]) set complete& endfun diff --git a/src/version.c b/src/version.c index bdd9723119..7aae2b5082 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1311, /**/ 1310, /**/ From ad503fe92772cb37d6f8601f48ff2bdb34cdbe96 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 16 Apr 2025 20:25:47 +0200 Subject: [PATCH 108/633] patch 9.1.1312: tests: Test_backupskip() fails when HOME is defined Problem: tests: Test_backupskip() fails when HOME is defined Solution: unset $HOME temporarily Signed-off-by: Christian Brabandt --- src/testdir/test_options.vim | 5 ++++- src/version.c | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim index d8ad3f210b..9708fcc051 100644 --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -1168,11 +1168,14 @@ func Test_backupskip() call setenv(var, '/duplicate/path') endfor + " unset $HOME, so that it won't try to read init files + let saveenv['HOME'] = getenv("HOME") + call setenv('HOME', v:null) exe 'silent !' . cmd call assert_equal(['errors:'], readfile('Xtestout')) " restore environment variables - for var in ['TMPDIR', 'TMP', 'TEMP'] + for var in ['TMPDIR', 'TMP', 'TEMP', 'HOME'] call setenv(var, saveenv[var]) endfor diff --git a/src/version.c b/src/version.c index 7aae2b5082..2a51b4207a 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1312, /**/ 1311, /**/ From b53d4fb63e0d4d36033d47ec35f2f302931f77ae Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 16 Apr 2025 21:12:30 +0200 Subject: [PATCH 109/633] patch 9.1.1313: compile warning about uninitialized value Problem: compile warning about uninitialized value (Tony Mechelynck, after v9.1.1311) Solution: initialize variable on declaration Signed-off-by: Christian Brabandt --- src/insexpand.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/insexpand.c b/src/insexpand.c index 9a82a32bcb..8673e74551 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -1474,7 +1474,7 @@ ins_compl_build_pum(void) compl_T *match_tail = NULL; compl_T *match_next = NULL; int update_shown_match = fuzzy_filter; - int match_count; + int match_count = 0; int cur_source = -1; int max_matches_found = FALSE; int is_forward = compl_shows_dir_forward() && !fuzzy_filter; diff --git a/src/version.c b/src/version.c index 2a51b4207a..ef28005d9e 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1313, /**/ 1312, /**/ From 06fdfa11c565599ac13ad5c077d1dabbbfde03ac Mon Sep 17 00:00:00 2001 From: Hirohito Higashi Date: Thu, 17 Apr 2025 20:13:05 +0200 Subject: [PATCH 110/633] patch 9.1.1314: max allowed string width too small Problem: max allowed string width too small Solution: increased MAX_ALLOWED_STRING_WIDTH from 6400 to 1MiB (Hirohito Higashi) closes: #17138 Co-authored-by: John Marriott Signed-off-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- src/strings.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings.c b/src/strings.c index e1d23e387a..84bec92f73 100644 --- a/src/strings.c +++ b/src/strings.c @@ -2782,7 +2782,7 @@ format_overflow_error(const char *pstart) semsg(_(e_out_of_memory_allocating_nr_bytes), arglen); } -#define MAX_ALLOWED_STRING_WIDTH 6400 +#define MAX_ALLOWED_STRING_WIDTH 1048576 // 1 MiB static int get_unsigned_int( diff --git a/src/version.c b/src/version.c index ef28005d9e..5ced0fefdd 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1314, /**/ 1313, /**/ From cfe502c5753cce2080ddabdfdcacb8e4b3092721 Mon Sep 17 00:00:00 2001 From: glepnir Date: Thu, 17 Apr 2025 20:17:53 +0200 Subject: [PATCH 111/633] patch 9.1.1315: completion: issue with fuzzy completion and 'completefuzzycollect' Problem: chain complete does not work when 'cot' includes fuzzy and 'completefuzzycollect' collects wrong next word. (Konfekt) Solution: compl_startpos is not set correctly, remove next word check in search_for_fuzzy_match (glepnir). fixes #17131 fixes #16942 closes: #17136 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/insexpand.c | 3 +-- src/search.c | 24 ------------------ src/testdir/test_ins_complete.vim | 41 ++++++++++--------------------- src/version.c | 2 ++ 4 files changed, 16 insertions(+), 54 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 8673e74551..233586277e 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -6101,7 +6101,6 @@ ins_compl_start(void) if (line_invalid) line = ml_get(curwin->w_cursor.lnum); - int in_fuzzy = get_cot_flags() & COT_FUZZY; if (compl_status_adding()) { edit_submode_pre = (char_u *)_(" Adding"); @@ -6119,7 +6118,7 @@ ins_compl_start(void) compl_col = curwin->w_cursor.col; compl_lnum = curwin->w_cursor.lnum; } - else if (ctrl_x_mode_normal() && in_fuzzy) + else if (ctrl_x_mode_normal() && cfc_has_mode()) { compl_startpos = curwin->w_cursor; compl_cont_status &= CONT_S_IPOS; diff --git a/src/search.c b/src/search.c index abd74416d6..68b2e727ba 100644 --- a/src/search.c +++ b/src/search.c @@ -5370,30 +5370,6 @@ search_for_fuzzy_match( len, ¤t_pos, score); if (found_new_match) { - if (ctrl_x_mode_normal()) - { - if (STRNCMP(*ptr, pattern, *len) == 0 && pattern[*len] == NUL) - { - char_u *next_word_end = find_word_start(*ptr + *len); - if (*next_word_end != NUL && *next_word_end != NL) - { - // Find end of the word. - if (has_mbyte) - while (*next_word_end != NUL) - { - int l = (*mb_ptr2len)(next_word_end); - - if (l < 2 && !vim_iswordc(*next_word_end)) - break; - next_word_end += l; - } - else - next_word_end = find_word_end(next_word_end); - } - - *len = next_word_end - *ptr; - } - } *pos = current_pos; break; } diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 2b14bfa760..916ad19fbc 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -3480,6 +3480,14 @@ func Test_complete_opt_fuzzy() call feedkeys("Sb\\\\\", 'tx') call assert_equal('b', getline('.')) + " chain completion + call feedkeys("Slore spum\lor\\\\\", 'tx') + call assert_equal('lore spum', getline('.')) + + " issue #15412 + call feedkeys("Salpha bravio charlie\alpha\\\\\\\", 'tx') + call assert_equal('alpha bravio charlie', getline('.')) + " clean up set omnifunc= bw! @@ -3565,34 +3573,6 @@ func Test_complete_fuzzy_collect() call feedkeys("Su\\\\0", 'tx!') call assert_equal('no one can save me but you', getline('.')) - " issue #15412 - call setline(1, ['alpha bravio charlie']) - call feedkeys("Salpha\\\0", 'tx!') - call assert_equal('alpha bravio', getline('.')) - call feedkeys("Salp\\\0", 'tx!') - call assert_equal('alpha', getline('.')) - call feedkeys("A\\\0", 'tx!') - call assert_equal('alpha bravio', getline('.')) - call feedkeys("A\\\0", 'tx!') - call assert_equal('alpha bravio charlie', getline('.')) - - set complete-=i - call feedkeys("Salp\\\0", 'tx!') - call assert_equal('alpha', getline('.')) - call feedkeys("A\\\0", 'tx!') - call assert_equal('alpha bravio', getline('.')) - call feedkeys("A\\\0", 'tx!') - call assert_equal('alpha bravio charlie', getline('.')) - - call setline(1, ['alpha bravio charlie', 'alpha another']) - call feedkeys("Salpha\\\\0", 'tx!') - call assert_equal('alpha another', getline('.')) - call setline(1, ['你好 我好', '你好 他好']) - call feedkeys("S你好\\\0", 'tx!') - call assert_equal('你好 我好', getline('.')) - call feedkeys("S你好\\\\0", 'tx!') - call assert_equal('你好 他好', getline('.')) - " issue #15526 set completeopt=menuone,menu,noselect call setline(1, ['Text', 'ToText', '']) @@ -3618,6 +3598,11 @@ func Test_complete_fuzzy_collect() call feedkeys("Gofuzzy\\\\\\0", 'tx!') call assert_equal('completefuzzycollect', getline('.')) + execute('%d _') + call setline(1, ['fuzzy', 'fuzzy foo', "fuzzy bar", 'fuzzycollect']) + call feedkeys("Gofuzzy\\\\\\0", 'tx!') + call assert_equal('fuzzycollect', getline('.')) + bw! bw! set dict& diff --git a/src/version.c b/src/version.c index 5ced0fefdd..9a1926004c 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1315, /**/ 1314, /**/ From 7ddba51635abdacb2bf8b96bff2ddfdefa0c985b Mon Sep 17 00:00:00 2001 From: John Marriott Date: Thu, 17 Apr 2025 20:35:42 +0200 Subject: [PATCH 112/633] patch 9.1.1316: missing memory allocation failure in os_mswin.c Problem: missing memory allocation failure in os_mswin.c Solution: check for memory allocation failure and return early. (John Marriott) closes: #17134 Signed-off-by: John Marriott Signed-off-by: Christian Brabandt --- src/os_mswin.c | 8 ++++++-- src/proto/os_mswin.pro | 1 + src/version.c | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/os_mswin.c b/src/os_mswin.c index 485ee20afc..c47346033f 100644 --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -2307,16 +2307,20 @@ findServer(char_u *name) void serverSetName(char_u *name) { + size_t namelen; char_u *ok_name; HWND hwnd = 0; int i = 0; char_u *p; // Leave enough space for a 9-digit suffix to ensure uniqueness! - ok_name = alloc(STRLEN(name) + 10); + namelen = STRLEN(name); + ok_name = alloc(namelen + 10); + if (ok_name == NULL) + return; STRCPY(ok_name, name); - p = ok_name + STRLEN(name); + p = ok_name + namelen; for (;;) { diff --git a/src/proto/os_mswin.pro b/src/proto/os_mswin.pro index 055cf8cd3a..e8e08d2ee5 100644 --- a/src/proto/os_mswin.pro +++ b/src/proto/os_mswin.pro @@ -1,4 +1,5 @@ /* os_mswin.c */ +void SaveInst(HINSTANCE hInst); void mch_exit_g(int r); void mch_early_init(void); int mch_input_isatty(void); diff --git a/src/version.c b/src/version.c index 9a1926004c..abd0fa3661 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1316, /**/ 1315, /**/ From cca5dea76e5bfa8369ae9d54b35fd140bb9159b4 Mon Sep 17 00:00:00 2001 From: Igor Lacerda Date: Thu, 17 Apr 2025 20:41:31 +0200 Subject: [PATCH 113/633] patch 9.1.1317: noisy error when restoring folds from session fails Problem: noisy error when restoring folds from session fails Solution: ignore errors silently when sourcing session file. (Igor Lacerda) fixes: #15813 closes: #17127 Signed-off-by: Igor Lacerda Signed-off-by: Christian Brabandt --- src/fold.c | 7 ++++--- src/testdir/test_mksession.vim | 18 ++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/fold.c b/src/fold.c index b165dc9b0e..4824a807ce 100644 --- a/src/fold.c +++ b/src/fold.c @@ -3576,7 +3576,7 @@ put_folds_recurse(FILE *fd, garray_T *gap, linenr_T off) // Do nested folds first, they will be created closed. if (put_folds_recurse(fd, &fp->fd_nested, off + fp->fd_top) == FAIL) return FAIL; - if (fprintf(fd, "%ld,%ldfold", fp->fd_top + off, + if (fprintf(fd, "sil! %ld,%ldfold", fp->fd_top + off, fp->fd_top + off + fp->fd_len - 1) < 0 || put_eol(fd) == FAIL) return FAIL; @@ -3609,9 +3609,10 @@ put_foldopen_recurse( if (fp->fd_nested.ga_len > 0) { // open nested folds while this fold is open + // ignore errors if (fprintf(fd, "%ld", fp->fd_top + off) < 0 || put_eol(fd) == FAIL - || put_line(fd, "normal! zo") == FAIL) + || put_line(fd, "sil! normal! zo") == FAIL) return FAIL; if (put_foldopen_recurse(fd, wp, &fp->fd_nested, off + fp->fd_top) @@ -3652,7 +3653,7 @@ put_fold_open_close(FILE *fd, fold_T *fp, linenr_T off) { if (fprintf(fd, "%ld", fp->fd_top + off) < 0 || put_eol(fd) == FAIL - || fprintf(fd, "normal! z%c", + || fprintf(fd, "sil! normal! z%c", fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0 || put_eol(fd) == FAIL) return FAIL; diff --git a/src/testdir/test_mksession.vim b/src/testdir/test_mksession.vim index d0ee6e8a79..72a9376c3e 100644 --- a/src/testdir/test_mksession.vim +++ b/src/testdir/test_mksession.vim @@ -1264,6 +1264,24 @@ func Test_mkview_manual_fold() bw! endfunc +" Test for handling invalid folds within views +func Test_mkview_ignore_invalid_folds() + call writefile(range(1,10), 'Xmkvfile', 'D') + new Xmkvfile + " create some folds + 5,6fold + 4,7fold + mkview Xview + normal zE + " delete lines to make folds invalid + call deletebufline('', 6, '$') + source Xview + call assert_equal([-1, -1, -1, -1, -1, -1], [foldclosed(3), foldclosed(4), + \ foldclosed(5), foldclosed(6), foldclosed(7), foldclosed(8)]) + call delete('Xview') + bw! +endfunc + " Test default 'viewdir' value func Test_mkview_default_home() if has('win32') diff --git a/src/version.c b/src/version.c index abd0fa3661..e6c8690d20 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1317, /**/ 1316, /**/ From 8f096845693fc7a170283ca5dcf8e13aea3ec273 Mon Sep 17 00:00:00 2001 From: ash Date: Thu, 17 Apr 2025 20:44:58 +0200 Subject: [PATCH 114/633] runtime(jjdescription): Don't require a space to start comments Since jj v0.24.0 (December 2024), `JJ:` comments are recognised even when not followed by a space. closes: #17130 Signed-off-by: ash Signed-off-by: Gregory Anders Signed-off-by: Christian Brabandt --- runtime/syntax/jjdescription.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runtime/syntax/jjdescription.vim b/runtime/syntax/jjdescription.vim index 04848bcb3b..bd1c6f22fd 100644 --- a/runtime/syntax/jjdescription.vim +++ b/runtime/syntax/jjdescription.vim @@ -2,6 +2,7 @@ " Language: jj description " Maintainer: Gregory Anders " Last Change: 2024 May 8 +" 2025 Apr 17 by Vim Project (don't require space to start comments, #17130) if exists('b:current_syntax') finish @@ -11,7 +12,7 @@ syn match jjAdded "A .*" contained syn match jjRemoved "D .*" contained syn match jjChanged "M .*" contained -syn region jjComment start="^JJ: " end="$" contains=jjAdded,jjRemoved,jjChanged +syn region jjComment start="^JJ:" end="$" contains=jjAdded,jjRemoved,jjChanged syn include @jjCommitDiff syntax/diff.vim syn region jjCommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|@@\@!\|[^[:alnum:]\ +-]\S\@!\)\@=/ fold contains=@jjCommitDiff From e9a27ef37395a0130f99e21b288b7765f0e38236 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 18 Apr 2025 10:45:45 +0200 Subject: [PATCH 115/633] patch 9.1.1318: tests: test_format fails Problem: tests: test_format fails (after 9.1.1314). Solution: Increase the string size. Add missing test_format.res in NEW_TESTS_RES (zeertzjq). closes: #17144 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- runtime/doc/builtin.txt | 5 +++-- src/testdir/Make_all.mak | 1 + src/testdir/test_format.vim | 12 ++++++------ src/version.c | 2 ++ 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index 5a72e214f3..4ad6b3d7d2 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -1,4 +1,4 @@ -*builtin.txt* For Vim version 9.1. Last change: 2025 Mar 30 +*builtin.txt* For Vim version 9.1. Last change: 2025 Apr 18 VIM REFERENCE MANUAL by Bram Moolenaar @@ -8158,7 +8158,8 @@ printf({fmt}, {expr1} ...) *printf()* < 1.41 You will get an overflow error |E1510|, when the field-width - or precision will result in a string longer than 6400 chars. + or precision will result in a string longer than 1 MB + (1024*1024 = 1048576) chars. *E1500* You cannot mix positional and non-positional arguments: > diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 55434b0dc8..de4e30f754 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -434,6 +434,7 @@ NEW_TESTS_RES = \ test_float_func.res \ test_fnameescape.res \ test_fold.res \ + test_format.res \ test_functions.res \ test_function_lists.res \ test_getcwd.res \ diff --git a/src/testdir/test_format.vim b/src/testdir/test_format.vim index 785348bee8..c261288931 100644 --- a/src/testdir/test_format.vim +++ b/src/testdir/test_format.vim @@ -334,13 +334,13 @@ func Test_printf_pos_errors() call v9.CheckLegacyAndVim9Failure(["call printf('%1$*123456789$.*987654321$d', 5)"], "E1510:") call v9.CheckLegacyAndVim9Failure(["call printf('%123456789$*1$.*987654321$d', 5)"], "E1510:") - call v9.CheckLegacyAndVim9Failure(["call printf('%1$*2$.*1$d', 5, 9999)"], "E1510:") - call v9.CheckLegacyAndVim9Failure(["call printf('%1$*1$.*2$d', 5, 9999)"], "E1510:") - call v9.CheckLegacyAndVim9Failure(["call printf('%2$*3$.*1$d', 5, 9123, 9321)"], "E1510:") - call v9.CheckLegacyAndVim9Failure(["call printf('%1$*2$.*3$d', 5, 9123, 9321)"], "E1510:") - call v9.CheckLegacyAndVim9Failure(["call printf('%2$*1$.*3$d', 5, 9123, 9312)"], "E1510:") + call v9.CheckLegacyAndVim9Failure(["call printf('%1$*2$.*1$d', 5, 9999999)"], "E1510:") + call v9.CheckLegacyAndVim9Failure(["call printf('%1$*1$.*2$d', 5, 9999999)"], "E1510:") + call v9.CheckLegacyAndVim9Failure(["call printf('%2$*3$.*1$d', 5, 9999123, 9999321)"], "E1510:") + call v9.CheckLegacyAndVim9Failure(["call printf('%1$*2$.*3$d', 5, 9999123, 9999321)"], "E1510:") + call v9.CheckLegacyAndVim9Failure(["call printf('%2$*1$.*3$d', 5, 9999123, 9999312)"], "E1510:") - call v9.CheckLegacyAndVim9Failure(["call printf('%1$*2$d', 5, 9999)"], "E1510:") + call v9.CheckLegacyAndVim9Failure(["call printf('%1$*2$d', 5, 9999999)"], "E1510:") endfunc func Test_printf_pos_64bit() diff --git a/src/version.c b/src/version.c index e6c8690d20..a095b67821 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1318, /**/ 1317, /**/ From 98800979dc109e03f390a0472b14ed89189e02fe Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 18 Apr 2025 10:57:33 +0200 Subject: [PATCH 116/633] patch 9.1.1319: Various typos in the code, issue with test_inst_complete.vim Problem: Various typos in the code, redundant and strange use of :execute in test_ins_complete.vim (after 9.1.1315). Solution: Fix typos in the code and in the documentation, use the executed command directly (zeertzjq). closes: #17143 Co-authored-by: Christ van Willegen Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- runtime/doc/develop.txt | 4 ++-- runtime/doc/version9.txt | 6 +++--- src/diff.c | 4 ++-- src/normal.c | 2 +- src/ops.c | 4 ++-- src/os_unix.c | 2 +- src/quickfix.c | 2 +- src/term.c | 2 +- src/testdir/test_ins_complete.vim | 2 +- src/version.c | 2 ++ 10 files changed, 16 insertions(+), 14 deletions(-) diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt index d97d230e9f..18e2caec70 100644 --- a/runtime/doc/develop.txt +++ b/runtime/doc/develop.txt @@ -1,4 +1,4 @@ -*develop.txt* For Vim version 9.1. Last change: 2024 Dec 25 +*develop.txt* For Vim version 9.1. Last change: 2025 Apr 18 VIM REFERENCE MANUAL by Bram Moolenaar @@ -192,7 +192,7 @@ For any non-trivial change, please always create a pull request on github, since this triggers the test suite. *style-clang-format* -sound.c and sign.c can be (semi-) automatically formated using the +sound.c and sign.c can be (semi-) automatically formatted using the `clang-format` formatter according to the distributed .clang-format file. Other source files do not yet correspond to the .clang-format file. This may change in the future and they may be reformatted as well. diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index a5579f4ab8..4fb3227086 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Apr 16 +*version9.txt* For Vim version 9.1. Last change: 2025 Apr 18 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41594,7 +41594,7 @@ Default values: ~ - the default 'backspace' option for Vim has been set to "indent,eol,start" and removed from |defaults.vim| - the default fontsize for the GTK builds of Vim (Windows and Unix) has been - increased to 12pt to accomodate modern high-dpi monitors + increased to 12pt to accommodate modern high-dpi monitors - the default value of the 'keyprotocol' option has been updated and support for the ghostty terminal emulator (using kitty protocol) has been added @@ -41739,7 +41739,7 @@ Ex-Commands: ~ Options: ~ 'chistory' Size of the quickfix stack |quickfix-stack|. -'completefuzzycollect' Enable fuzzy collection of candiates for (some) +'completefuzzycollect' Enable fuzzy collection of candidates for (some) |ins-completion| modes 'completeitemalign' Order of |complete-items| in Insert mode completion popup diff --git a/src/diff.c b/src/diff.c index e694cf20cd..ec108e985e 100644 --- a/src/diff.c +++ b/src/diff.c @@ -3229,7 +3229,7 @@ diff_refine_inline_char_highlight(diff_T *dp_orig, garray_T *linemap, int idx1) } /* - * Find the inline difference within a diff block among differnt buffers. Do + * Find the inline difference within a diff block among different buffers. Do * this by splitting each block's content into characters or words, and then * use internal xdiff to calculate the per-character/word diff. The result is * stored in dp instead of returned by the function. @@ -4548,7 +4548,7 @@ f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { // Remember the results if using simple since it's recalculated per // call. Otherwise just call diff_find_change() every time since - // internally the result is cached interally. + // internally the result is cached internally. cache_results = FALSE; } diff --git a/src/normal.c b/src/normal.c index 6cd9004ad1..ea30607d6a 100644 --- a/src/normal.c +++ b/src/normal.c @@ -2786,7 +2786,7 @@ nv_zet(cmdarg_T *cap) } break; - // "zp", "zP" in block mode put without addind trailing spaces + // "zp", "zP" in block mode put without adding trailing spaces case 'P': case 'p': nv_put(cap); break; diff --git a/src/ops.c b/src/ops.c index 0e3711eb75..b4b59de226 100644 --- a/src/ops.c +++ b/src/ops.c @@ -248,11 +248,11 @@ get_vts_sum(int *vts_array, int index) int sum = 0; int i; - // Perform the summation for indeces within the actual array. + // Perform the summation for indices within the actual array. for (i = 1; i <= index && i <= vts_array[0]; i++) sum += vts_array[i]; - // Add topstops whose indeces exceed the actual array. + // Add tabstops whose indices exceed the actual array. if (i <= index) sum += vts_array[vts_array[0]] * (index - vts_array[0]); diff --git a/src/os_unix.c b/src/os_unix.c index dc08408de6..de6e661abf 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4434,7 +4434,7 @@ mch_report_winsize(int fd, int rows, int cols) ws.ws_col = cols; ws.ws_row = rows; - // calcurate and set tty pixel size + // calculate and set tty pixel size struct cellsize cs; mch_calc_cell_size(&cs); diff --git a/src/quickfix.c b/src/quickfix.c index 2b12fb5ec1..2bc2f2d5fb 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -119,7 +119,7 @@ struct qf_info_S }; static qf_info_T ql_info_actual; // global quickfix list -static qf_info_T *ql_info; // points to ql_info_actual if memory allocation is sucessful. +static qf_info_T *ql_info; // points to ql_info_actual if memory allocation is successful. static int_u last_qf_id = 0; // Last used quickfix list id #define FMT_PATTERNS 14 // maximum number of % recognized diff --git a/src/term.c b/src/term.c index 81b04e0dc9..5c030ed20a 100644 --- a/src/term.c +++ b/src/term.c @@ -1710,7 +1710,7 @@ static char *(key_names[]) = // Do those ones first, both may cause a screen redraw. "Co", // disabled, because it switches termguicolors, but that - // is noticable and confuses users + // is noticeable and confuses users // "RGB", # endif "ku", "kd", "kr", "kl", diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 916ad19fbc..9d39b2a7ff 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -3598,7 +3598,7 @@ func Test_complete_fuzzy_collect() call feedkeys("Gofuzzy\\\\\\0", 'tx!') call assert_equal('completefuzzycollect', getline('.')) - execute('%d _') + %d _ call setline(1, ['fuzzy', 'fuzzy foo', "fuzzy bar", 'fuzzycollect']) call feedkeys("Gofuzzy\\\\\\0", 'tx!') call assert_equal('fuzzycollect', getline('.')) diff --git a/src/version.c b/src/version.c index a095b67821..952c742015 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1319, /**/ 1318, /**/ From 1d96caaa4b195043f84a0c83277b2038af4a7b50 Mon Sep 17 00:00:00 2001 From: David Mandelberg Date: Fri, 18 Apr 2025 11:41:44 +0200 Subject: [PATCH 117/633] patch 9.1.1320: filetype: alsoft config files are not recognized Problem: filetype: alsoft config files are not recognized Solution: detect alsoft config files as dosini filetype (David Mandelberg) References: * code with paths to config: ReadALConfig() in https://github.com/kcat/openal-soft/blob/master/alc/alconfig.cpp * example config: https://github.com/kcat/openal-soft/blob/master/alsoftrc.sample closes: #17140 Signed-off-by: David Mandelberg Signed-off-by: Christian Brabandt --- runtime/filetype.vim | 3 +++ src/testdir/test_filetype.vim | 4 +++- src/version.c | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/runtime/filetype.vim b/runtime/filetype.vim index b976d46d7b..c2c639c96b 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1780,6 +1780,9 @@ au BufNewFile,BufRead .ondirrc setf ondir " OPAM au BufNewFile,BufRead opam,*.opam,*.opam.template,opam.locked,*.opam.locked setf opam +" OpenAL Soft config files +au BufNewFile,BufRead .alsoftrc,alsoft.conf,alsoft.ini,alsoftrc.sample setf dosini + " 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() diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index d3342822c0..91460cec6c 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -239,7 +239,9 @@ def s:GetFilenameChecks(): dict> '.coveragerc', '.pypirc', '.gitlint', '.oelint.cfg', 'pylintrc', '.pylintrc', '/home/user/.config/bpython/config', '/home/user/.config/mypy/config', '.wakatime.cfg', '.replyrc', 'psprint.conf', 'sofficerc', 'any/.config/lxqt/globalkeyshortcuts.conf', 'any/.config/screengrab/screengrab.conf', - 'any/.local/share/flatpak/repo/config', '.notmuch-config', '.notmuch-config.myprofile', + 'any/.local/share/flatpak/repo/config', + '.alsoftrc', 'alsoft.conf', 'alsoft.ini', 'alsoftrc.sample', + '.notmuch-config', '.notmuch-config.myprofile', '~/.config/notmuch/myprofile/config'] + WhenConfigHome('$XDG_CONFIG_HOME/notmuch/myprofile/config'), dot: ['file.dot', 'file.gv'], dracula: ['file.drac', 'file.drc', 'file.lvs', 'file.lpe', 'drac.file'], diff --git a/src/version.c b/src/version.c index 952c742015..c255361965 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1320, /**/ 1319, /**/ From aee34ef23e08a944f87d6bb4f972c56ba88dc6dd Mon Sep 17 00:00:00 2001 From: Hampus Avekvist Date: Fri, 18 Apr 2025 18:18:06 +0200 Subject: [PATCH 118/633] patch 9.1.1321: filetype: MS ixx and mpp files are not recognized Problem: filetype: MS ixx and mpp files are not recognized Solution: detect *.mpp and *.ixx files as c++ filetype (Hampus Avekvist) closes: #17155 Signed-off-by: Hampus Avekvist Signed-off-by: Christian Brabandt --- runtime/filetype.vim | 5 ++++- src/testdir/test_filetype.vim | 2 +- src/version.c | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/runtime/filetype.vim b/runtime/filetype.vim index c2c639c96b..e850074346 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: The Vim Project -" Last Change: 2025 Apr 15 +" Last Change: 2025 Apr 18 " Former Maintainer: Bram Moolenaar " Listen very carefully, I will say this only once @@ -429,6 +429,9 @@ if has("fname_case") au BufNewFile,BufRead *.C,*.H if !&fileignorecase | setf cpp | endif endif +" MS files (ixx: C++ module interface file, Microsoft Project file) +au BufNewFile,BufRead *.ixx,*.mpp setf cpp + " C++ 20 modules (clang) " https://clang.llvm.org/docs/StandardCPlusPlusModules.html#file-name-requirement au BufNewFile,BufRead *.cppm,*.ccm,*.cxxm,*.c++m setf cpp diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 91460cec6c..6ec55aeb06 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -188,7 +188,7 @@ def s:GetFilenameChecks(): dict> cook: ['file.cook'], corn: ['file.corn'], cpon: ['file.cpon'], - cpp: ['file.cxx', 'file.c++', 'file.hh', 'file.hxx', 'file.hpp', 'file.ipp', 'file.moc', 'file.tcc', 'file.inl', 'file.tlh', 'file.cppm', 'file.ccm', 'file.cxxm', 'file.c++m'], + cpp: ['file.cxx', 'file.c++', 'file.hh', 'file.hxx', 'file.hpp', 'file.ipp', 'file.ixx', 'file.moc', 'file.tcc', 'file.inl', 'file.tlh', 'file.cppm', 'file.ccm', 'file.cxxm', 'file.c++m', 'file.mpp'], cqlang: ['file.cql'], crm: ['file.crm'], crontab: ['crontab', 'crontab.file', '/etc/cron.d/file', 'any/etc/cron.d/file'], diff --git a/src/version.c b/src/version.c index c255361965..4c9f4ce53d 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1321, /**/ 1320, /**/ From 7e93d4c617784e03f539d139f3475bd72c04a6e5 Mon Sep 17 00:00:00 2001 From: phanium <91544758+phanen@users.noreply.github.com> Date: Fri, 18 Apr 2025 18:32:52 +0200 Subject: [PATCH 119/633] patch 9.1.1322: small delete register cannot paste multi-line correctly Problem: small delete register cannot paste multi-line correctly (after v8.2.2189) Solution: caused by 032a2d050b82b146d70d6ff714838ee62c07d8ad, so make this logic handle charwise only (phanium) closes: #17151 Signed-off-by: phanium <91544758+phanen@users.noreply.github.com> Signed-off-by: Christian Brabandt --- src/register.c | 12 +++++++----- src/testdir/test_registers.vim | 9 +++++++++ src/version.c | 2 ++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/register.c b/src/register.c index 267e0fcc43..9d27706698 100644 --- a/src/register.c +++ b/src/register.c @@ -846,7 +846,7 @@ insert_reg( { for (i = 0; i < y_current->y_size; ++i) { - if (regname == '-') + if (regname == '-' && y_current->y_type == MCHAR) { int dir = BACKWARD; if ((State & REPLACE_FLAG) != 0) @@ -867,11 +867,13 @@ insert_reg( do_put(regname, NULL, dir, 1L, PUT_CURSEND); } else + { stuffescaped(y_current->y_array[i].string, literally); - // Insert a newline between lines and after last line if - // y_type is MLINE. - if (y_current->y_type == MLINE || i < y_current->y_size - 1) - stuffcharReadbuff('\n'); + // Insert a newline between lines and after last line if + // y_type is MLINE. + if (y_current->y_type == MLINE || i < y_current->y_size - 1) + stuffcharReadbuff('\n'); + } } } } diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim index 981f9d227e..b597ab326e 100644 --- a/src/testdir/test_registers.vim +++ b/src/testdir/test_registers.vim @@ -1204,4 +1204,13 @@ func Test_mark_from_yank() bw! endfunc +func Test_insert_small_delete_linewise() + new + call setline(1, ['foo']) + call cursor(1, 1) + exe ":norm! \"-cc\-" + call assert_equal(['foo', ''], getline(1, '$')) + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 4c9f4ce53d..4990e4475c 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1322, /**/ 1321, /**/ From ded2b41326a5ad3238422ed2244d79dfa18cc667 Mon Sep 17 00:00:00 2001 From: "Philip H." <47042125+pheiduck@users.noreply.github.com> Date: Fri, 18 Apr 2025 18:42:24 +0200 Subject: [PATCH 120/633] CI: update coverity runner to Ubuntu 24.04 closes: #17150 Signed-off-by: Philip H. <47042125+pheiduck@users.noreply.github.com> Signed-off-by: Christian Brabandt --- .github/workflows/coverity.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index 90a6e9ff0c..46489ba36c 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -9,7 +9,7 @@ permissions: jobs: scan: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 env: CC: gcc From 0ed11ba223ec69dfefc8cc5800fb3e0d610fd9f8 Mon Sep 17 00:00:00 2001 From: Hirohito Higashi Date: Fri, 18 Apr 2025 18:45:31 +0200 Subject: [PATCH 121/633] runtime(doc): Tweak documentation style a bit Signed-off-by: Christian Brabandt --- CONTRIBUTING.md | 6 +++--- runtime/doc/builtin.txt | 2 +- runtime/doc/version9.txt | 4 ++-- runtime/doc/vim9.txt | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c766d71d51..b157277519 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,13 +33,13 @@ terms. To sign off a commit, simply use the -s flag when committing: ```sh git commit -s -``` +``` This ensures that every contribution is properly documented and traceable, aligning with industry standards used in projects like the Linux Kernel or the git project. By making Signed-off commits a standard practice, we help maintain a legally compliant and well-governed codebase while fostering trust -within our contributor community. +within our contributor community. When merging PRs into Vim, the current maintainer @chrisbra usually adds missing `Signed-off-by` trailers for the author user name and email address as well for @@ -71,7 +71,7 @@ Or open [the todo file][todo list] on GitHub to see the latest version. # Syntax, indent and other runtime files The latest version of these files can be obtained from the repository. -They are usually not updated with numbered patches. However, they may +They are usually not updated with numbered patches. However, they may or may not work with older Vim releases (since they may contain new features). If you find a problem with one of these files or have a suggestion for diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index 4ad6b3d7d2..b69f6b4631 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -8158,7 +8158,7 @@ printf({fmt}, {expr1} ...) *printf()* < 1.41 You will get an overflow error |E1510|, when the field-width - or precision will result in a string longer than 1 MB + or precision will result in a string longer than 1 MiB (1024*1024 = 1048576) chars. *E1500* diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 4fb3227086..527ed18502 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -41637,8 +41637,8 @@ Options: ~ - use 'smoothscroll' logic for CTRL-F / CTRL-B for pagewise scrolling and CTRL-D / CTRL-U for half-pagewise scrolling - New option value for 'fillchars': - "trunc" - configure truncation indicator, 'pummaxwidth' - "truncrl" - like "trunc" but in 'rl' mode, 'pummaxwidth' + "trunc" - configure truncation indicator, 'pummaxwidth' + "truncrl" - like "trunc" but in 'rl' mode, 'pummaxwidth' Ex commands: ~ - allow to specify a priority when defining a new sign |:sign-define| diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt index 54fb8f333e..ba72358d13 100644 --- a/runtime/doc/vim9.txt +++ b/runtime/doc/vim9.txt @@ -1,4 +1,4 @@ -*vim9.txt* For Vim version 9.1. Last change: 2025 Apr 03 +*vim9.txt* For Vim version 9.1. Last change: 2025 Apr 18 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1493,11 +1493,11 @@ tuple a tuple with a single item of type |Number| tuple a tuple with two items of type |Number| and |String| tuple a tuple with three items of type |Number|, - |Float| and |Boolean|. + |Float| and |Boolean| tuple<...list> a variadic tuple with zero or more items of - type |Number|. + type |Number| tuple> a tuple with an item of type |Number| followed - by zero or more items of type |String|. + by zero or more items of type |String| Examples: > var myTuple: tuple = (20,) From 13960a8779542adfa50cd2266c7c1cf8f1229d15 Mon Sep 17 00:00:00 2001 From: "Philip H." <47042125+pheiduck@users.noreply.github.com> Date: Fri, 18 Apr 2025 18:48:53 +0200 Subject: [PATCH 122/633] CI: GCC 13 install fails, so disable that particular ppa closes: #17149 Signed-off-by: Philip H. <47042125+pheiduck@users.noreply.github.com> Signed-off-by: Christian Brabandt --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b35c3b65ef..fc6cd9663e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: env: CC: ${{ matrix.compiler }} - GCC_VER: 13 + GCC_VER: 14 CLANG_VER: 20 TEST: test SRCDIR: ./src @@ -149,7 +149,8 @@ jobs: if: matrix.compiler == 'gcc' run: | # ubuntu-toolchain-r/test PPA for gcc-13 compiler - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + # disabled because the installation failed, causing test failures + # sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y sudo apt-get update -y sudo apt-get install -y gcc-${{ env.GCC_VER }}:${{ matrix.architecture }} sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_VER }} 100 From cb3b752f9523060d3feaee33049d2092c288fca2 Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Fri, 18 Apr 2025 18:52:28 +0200 Subject: [PATCH 123/633] runtime(doc): clarify "nearest" value for 'completeopt' closes: #17146 Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 8ab0dcc8bd..83032e1c42 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Apr 16 +*options.txt* For Vim version 9.1. Last change: 2025 Apr 18 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2208,8 +2208,10 @@ A jump table for the options with a short description can be found at |Q_op|. Useful when there is additional information about the match, e.g., what file it comes from. - nearest Matches are presented in order of proximity to the cursor - position. This applies only to matches from the current + nearest Matches are listed based on their proximity to the cursor + position, unlike the default behavior, which only + considers proximity for matches appearing below the + cursor. This applies only to matches from the current buffer. No effect if "fuzzy" is present. noinsert Do not insert any text for a match until the user selects From 54081f0ce087bb3efd2f62fdbbbd5ac812da69f8 Mon Sep 17 00:00:00 2001 From: Arnie97 Date: Fri, 18 Apr 2025 19:34:14 +0200 Subject: [PATCH 124/633] runtime(nix): set iskeyword and b:match_words in ftplugin closes: #17154 Signed-off-by: Arnie97 Signed-off-by: Keith Smiley Signed-off-by: Christian Brabandt --- runtime/ftplugin/nix.vim | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/runtime/ftplugin/nix.vim b/runtime/ftplugin/nix.vim index d417cc7805..311e00b4a8 100644 --- a/runtime/ftplugin/nix.vim +++ b/runtime/ftplugin/nix.vim @@ -2,6 +2,7 @@ " Language: nix " Maintainer: Keith Smiley " Last Change: 2023 Jul 22 +" 2025 Apr 18 by Vim Project (set 'iskeyword' and b:match_words #17154) " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -11,7 +12,10 @@ endif " Don't load another plugin for this buffer let b:did_ftplugin = 1 -let b:undo_ftplugin = "setl commentstring< comments<" +let b:undo_ftplugin = "setl commentstring< comments< iskeyword< | unlet! b:match_words" + +let b:match_words = "\:\:\,\:\" setlocal comments=:# setlocal commentstring=#\ %s +setlocal iskeyword+=- From 81677996513e8f186acc93122673e6741c563477 Mon Sep 17 00:00:00 2001 From: "Philip H." <47042125+pheiduck@users.noreply.github.com> Date: Sat, 19 Apr 2025 11:09:30 +0200 Subject: [PATCH 125/633] CI: coverity.yml: remove python2-dev pkg and retire --enable-pythoninterp follow-up: ded2b41326a5ad3238422ed2244d79dfa18cc667 closes: #17157 Signed-off-by: Philip H. <47042125+pheiduck@users.noreply.github.com> Signed-off-by: Christian Brabandt --- .github/workflows/coverity.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index 46489ba36c..fb2832172e 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -36,7 +36,6 @@ jobs: gettext \ libcanberra-dev \ libperl-dev \ - python2-dev \ python3-dev \ liblua5.4-dev \ lua5.4 \ @@ -53,7 +52,7 @@ jobs: echo "$(pwd)/cov-scan/bin" >> $GITHUB_PATH ( echo "NPROC=$(getconf _NPROCESSORS_ONLN)" - echo "CONFOPT=--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" + echo "CONFOPT=--enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" ) >> $GITHUB_ENV - name: Configure From baa8c90cc0d214e036a3a7980d5cf95cae88a68d Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sat, 19 Apr 2025 11:14:11 +0200 Subject: [PATCH 126/633] patch 9.1.1323: b:undo_ftplugin not executed when re-using buffer Problem: b:undo_ftplugin not executed when re-using buffer (archy3) Solution: explicitly execute b:undo_ftplugin in buflist_new() when re-using the current buffer fixes: #17113 closes: #17133 Signed-off-by: Christian Brabandt --- src/buffer.c | 15 +++++++++++++++ src/proto/window.pro | 2 ++ src/testdir/test_filetype.vim | 28 ++++++++++++++++++++++++++++ src/version.c | 2 ++ src/window.c | 4 ++-- 5 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index eed3e8de13..0624f9dced 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -72,6 +72,20 @@ static int buf_free_count = 0; static int top_file_num = 1; // highest file number static garray_T buf_reuse = GA_EMPTY; // file numbers to recycle + static void +trigger_undo_ftplugin(buf_T *buf, win_T *win) +{ + window_layout_lock(); + buf->b_locked++; + win->w_locked = TRUE; + // b:undo_ftplugin may be set, undo it + do_cmdline_cmd((char_u*)"if exists('b:undo_ftplugin') | :legacy :exe \ + b:undo_ftplugin | endif"); + buf->b_locked--; + win->w_locked = FALSE; + window_layout_unlock(); +} + /* * Calculate the percentage that `part` is of the `whole`. */ @@ -2206,6 +2220,7 @@ buflist_new( if ((flags & BLN_CURBUF) && curbuf_reusable()) { buf = curbuf; + trigger_undo_ftplugin(buf, curwin); // It's like this buffer is deleted. Watch out for autocommands that // change curbuf! If that happens, allocate a new buffer anyway. buf_freeall(buf, BFA_WIPE | BFA_DEL); diff --git a/src/proto/window.pro b/src/proto/window.pro index ccb69efd3a..d92a5af488 100644 --- a/src/proto/window.pro +++ b/src/proto/window.pro @@ -1,4 +1,6 @@ /* window.c */ +void window_layout_lock(void); +void window_layout_unlock(void); int window_layout_locked(enum CMD_index cmd); int check_can_set_curbuf_disabled(void); int check_can_set_curbuf_forceit(int forceit); diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 6ec55aeb06..1411559aaf 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -1131,6 +1131,34 @@ func Test_filetype_indent_off() close endfunc +func Test_undo_ftplugin_on_buffer_reuse() + filetype on + + new + let b:undo_ftplugin = ":let g:var='exists'" + let g:bufnr = bufnr('%') + " no changes done to the buffer, so the buffer will be re-used + e $VIMRUNTIME/defaults.vim + call assert_equal(g:bufnr, bufnr('%')) + call assert_equal('exists', get(g:, 'var', 'fail')) + unlet! g:bufnr g:var + + " try to wipe the buffer + enew + bw defaults.vim + let b:undo_ftplugin = ':bw' + call assert_fails(':e $VIMRUNTIME/defaults.vim', 'E937') + + " try to split the window + enew + bw defaults.vim + let b:undo_ftplugin = ':sp $VIMRUNTIME/defaults.vim' + call assert_fails(':e $VIMRUNTIME/defaults.vim', 'E242') + + bwipe! + filetype off +endfunc + """"""""""""""""""""""""""""""""""""""""""""""""" " Tests for specific extensions and filetypes. " Keep sorted. diff --git a/src/version.c b/src/version.c index 4990e4475c..db77e4538f 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1323, /**/ 1322, /**/ diff --git a/src/window.c b/src/window.c index 21f81e5fc0..9ea68107c7 100644 --- a/src/window.c +++ b/src/window.c @@ -97,14 +97,14 @@ static int close_disallowed = 0; * make sure the previously selected window is still there. * Must be matched with exactly one call to window_layout_unlock()! */ - static void + void window_layout_lock(void) { ++split_disallowed; ++close_disallowed; } - static void + void window_layout_unlock(void) { --split_disallowed; From 6924eb81f4e69726f59eaa0c121b7442343d770d Mon Sep 17 00:00:00 2001 From: Foxe Chen Date: Sat, 19 Apr 2025 11:25:18 +0200 Subject: [PATCH 127/633] patch 9.1.1324: undefined behaviour if X11 connection dies Problem: undefined behaviour if X11 connection dies Solution: call setjmp() before the main_loop() and restore x11 state if the X11 connection dies (Foxe Chen) fixes: #698 closes: #17142 Signed-off-by: Foxe Chen Signed-off-by: Christian Brabandt --- src/main.c | 80 ++++++++++++++++++++++++++++++++++----------------- src/version.c | 2 ++ 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/src/main.c b/src/main.c index 9a862c4be9..31494e3e8e 100644 --- a/src/main.c +++ b/src/main.c @@ -449,6 +449,35 @@ main #endif // NO_VIM_MAIN #endif // PROTO +#if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD) +/* + * Restore the state after a fatal X error. + */ + static void +x_restore_state(void) +{ + State = MODE_NORMAL; + VIsual_active = FALSE; + got_int = TRUE; + need_wait_return = FALSE; + global_busy = FALSE; + exmode_active = 0; + skip_redraw = FALSE; + RedrawingDisabled = 0; + no_wait_return = 0; + vgetc_busy = 0; +# ifdef FEAT_EVAL + emsg_skip = 0; +# endif + emsg_off = 0; + setmouse(); + settmode(TMODE_RAW); + starttermcap(); + scroll_start(); + redraw_later_clear(); +} +#endif + /* * vim_main2() is needed for FEAT_MZSCHEME, but we define it always to keep * things simple. @@ -790,9 +819,28 @@ vim_main2(void) getout(1); } - // Execute any "+", "-c" and "-S" arguments. - if (params.n_commands > 0) - exe_commands(¶ms); +#if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD) + // Temporarily set x_jump_env to here in case there is an X11 IO error, + // because x_jump_env is only actually set in main_loop(), before + // exe_commands(). May not be the best solution since commands passed via + // the command line can be very broad like sourcing a file, in which case + // an X IO error results in the command being partially done. In theory we + // could use SETJMP in RealWaitForChar(), but the stack frame for that may + // possibly exit and then LONGJMP is called on it. + int jump_result = SETJMP(x_jump_env); + + if (jump_result == 0) + { +#endif + // Execute any "+", "-c" and "-S" arguments. + if (params.n_commands > 0) + exe_commands(¶ms); +#if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD) + } + else + // Restore state and continue just like what main_loop() does. + x_restore_state(); +#endif // Must come before the may_req_ calls. starting = 0; @@ -1242,30 +1290,10 @@ main_loop( #if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD) // Setup to catch a terminating error from the X server. Just ignore // it, restore the state and continue. This might not always work - // properly, but at least we don't exit unexpectedly when the X server - // exits while Vim is running in a console. + // properly, but at least we hopefully don't exit unexpectedly when the X + // server exits while Vim is running in a console. if (!cmdwin && !noexmode && SETJMP(x_jump_env)) - { - State = MODE_NORMAL; - VIsual_active = FALSE; - got_int = TRUE; - need_wait_return = FALSE; - global_busy = FALSE; - exmode_active = 0; - skip_redraw = FALSE; - RedrawingDisabled = 0; - no_wait_return = 0; - vgetc_busy = 0; -# ifdef FEAT_EVAL - emsg_skip = 0; -# endif - emsg_off = 0; - setmouse(); - settmode(TMODE_RAW); - starttermcap(); - scroll_start(); - redraw_later_clear(); - } + x_restore_state(); #endif clear_oparg(&oa); diff --git a/src/version.c b/src/version.c index db77e4538f..e3b55fa94a 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1324, /**/ 1323, /**/ From fe8508eda002196bd9095c35ea7892bce06bb6d2 Mon Sep 17 00:00:00 2001 From: Aliaksei Budavei <0x000c70@gmail.com> Date: Sat, 19 Apr 2025 11:35:02 +0200 Subject: [PATCH 128/633] runtime(indent-tests): Instrument timed "search*()" calls The offered "tracer.vim" script can be used to measure and record elapsed time for explicitly annotated "search*()"es, set off with "VIM_INDENT_TEST_TRACE_(START|END)" comment markers, in indent plugins. related: #17116 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt --- Filelist | 1 + runtime/indent/testdir/tools/tracer.vim | 166 ++++++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 runtime/indent/testdir/tools/tracer.vim diff --git a/Filelist b/Filelist index 4067df5081..c5b3c4fdd8 100644 --- a/Filelist +++ b/Filelist @@ -863,6 +863,7 @@ RT_SCRIPTS = \ runtime/indent/testdir/*.vim \ runtime/indent/testdir/*.in \ runtime/indent/testdir/*.ok \ + runtime/indent/testdir/tools/* \ runtime/ftplugin/*.vim \ runtime/ftplugin/logtalk.dict \ runtime/ftplugin/README.txt \ diff --git a/runtime/indent/testdir/tools/tracer.vim b/runtime/indent/testdir/tools/tracer.vim new file mode 100644 index 0000000000..d87315401c --- /dev/null +++ b/runtime/indent/testdir/tools/tracer.vim @@ -0,0 +1,166 @@ +vim9script + +# Whenever indent plugins contain "search*()" lines explicitly annotated with +# "VIM_INDENT_TEST_TRACE_(START|END)" comment markers; this script can then be +# used as shown to measure and record elapsed time for such decorated calls. +# +# Usage: +# cd runtime/indent +# vim -u NONE -S testdir/tools/tracer.vim \ +# html.vim javascript.vim \ +# ../autoload/python.vim ../autoload/dist/vimindent.vim +# git diff +# make clean test +# vim testdir/00-TRACE_LOG.fail + +def GenerateTempletForTracing(fname: string, vname: string): list + #### ONLY INSTRUMENT "search*()"es FOR INDENT TESTS. + + const templet: list =<< trim eval END + + if getcwd() =~# '\, result: any): any + const end: list = reltime(start) + + if !has_key(g:indent_test_trace_times, id) + g:indent_test_trace_times[id] = [] + endif + + g:indent_test_trace_times[id] + ->add(reltimefloat(end)) + return result + enddef + + def! g:IndentTestInitTracing() + # Possibly use a later "{fname}", cf. ":runtime indent/foo.vim". + autocmd_add([{{ + replace: true, + group: 'tracing', + event: 'QuitPre', + bufnr: bufnr(), + cmd: 'g:IndentTestWriteTraceTimes()', + }}]) + g:indent_test_trace_times = {{}} + enddef + + def! g:IndentTestWriteTraceTimes() + # Anticipate usage by multiple languages. + const token: string = printf('%02x', (rand() % 26)) + writefile(['" {fname}:', + "let {vname}_" .. token .. " = " .. string(g:indent_test_trace_times), + "let {vname}_" .. token .. "_summary = " .. string(g:indent_test_trace_times + ->items() + ->reduce((outer: dict>, times: list) => + extend({{[times[0]]: times[1] + ->copy() + ->reduce((inner: dict, v: float) => + extend({{ + min: inner.min < v ? inner.min : v, + max: inner.max > v ? inner.max : v, + sum: (inner.sum + v), + avg: ((inner.sum + v) / inner.count), + }}, + inner, + "keep"), + {{ + min: v:numbermax - 0.0, + max: v:numbermin + 0.0, + sum: 0.0, + avg: 0.0, + count: len(times[1]), + }})}}, + outer), + {{}}))], + (!empty($VIM_INDENT_TEST_LOG) && filewritable($VIM_INDENT_TEST_LOG)) + ? $VIM_INDENT_TEST_LOG + : "testdir/00-TRACE_LOG.fail", + "a") + enddef + + call g:IndentTestInitTracing() + + else + + def! g:IndentTestTrace(_: string, _: list, result: any): any + return result + enddef + + endif + + END + return templet +enddef + +def InstrumentMarkedEntry(): bool + const marker_start: string = 'VIM_INDENT_TEST_TRACE_START' + const start: number = search('\C\<' .. marker_start .. '\>', 'ceW') + + if start == 0 + return false + endif + + const marker_end: string = 'VIM_INDENT_TEST_TRACE_END' + const end: number = search('\C\<' .. marker_end .. '\>', 'ceW') + + if end == 0 + return false + endif + + const tracee: list = matchlist( + getline(start + 1), + '\(^.\+\)\(\ 1 + setline((start + 1), tracer) + setline((end - 1), getline(end - 1) .. ')') + else + setline((start + 1), tracer .. ')') + endif + + return true +enddef + +def ProcessIndentPluginCmdlineArgs() + const names: list = range(char2nr('a'), char2nr('z')) + ->map((_: number, n: number) => nr2char(n, true)) + var entries: number = 0 + var next: number = 0 + + for fname: string in argv(-1) + if filereadable(fname) && filewritable(fname) + execute 'new ' .. fname + call cursor(1, 1) + + while InstrumentMarkedEntry() + entries += 1 + endwhile + + if entries > 0 + append(1, GenerateTempletForTracing(fname, get(names, next, names[-1]))) + wq + endif + + entries = 0 + next += 1 + endif + endfor +enddef + +if empty(system('git status --porcelain=v1')) + ProcessIndentPluginCmdlineArgs() +endif + +quitall + +# vim:fdm=syntax:sw=2:ts=8:noet:nosta: From 4e3df44aa2a4f99c3c35e11371f7f1b2b6207558 Mon Sep 17 00:00:00 2001 From: Aliaksei Budavei <0x000c70@gmail.com> Date: Sun, 13 Apr 2025 21:00:42 +0300 Subject: [PATCH 129/633] runtime(indent-tests): Annotate timed "search*()"es for tracing related: #17116 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt --- runtime/autoload/dist/vimindent.vim | 6 +++++- runtime/autoload/python.vim | 2 ++ runtime/indent/html.vim | 6 +++++- runtime/indent/javascript.vim | 4 +++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/runtime/autoload/dist/vimindent.vim b/runtime/autoload/dist/vimindent.vim index 0681496ae9..37f2ee5e18 100644 --- a/runtime/autoload/dist/vimindent.vim +++ b/runtime/autoload/dist/vimindent.vim @@ -2,7 +2,7 @@ vim9script # Language: Vim script # Maintainer: github user lacygoill -# Last Change: 2024 Dec 26 +# Last Change: 2025 Apr 13 # # Includes changes from The Vim Project: # - 2024 Feb 09: Fix indent after literal Dict (A. Radev via #13966) @@ -981,8 +981,10 @@ def SearchPair( # {{{3 if end == '[' || end == ']' e = e->escape('[]') endif + # VIM_INDENT_TEST_TRACE_START return searchpair('\C' .. s, (middle == '' ? '' : '\C' .. middle), '\C' .. e, flags, (): bool => InCommentOrString(), stopline, TIMEOUT) + # VIM_INDENT_TEST_TRACE_END dist#vimindent#SearchPair enddef def SearchPairStart( # {{{3 @@ -1268,7 +1270,9 @@ def NonCommentedMatch(line: dict, pat: string): bool # {{{3 var pos: list = getcurpos() cursor(line.lnum, 1) + # VIM_INDENT_TEST_TRACE_START var match_lnum: number = search(pat, 'cnW', line.lnum, TIMEOUT, (): bool => InCommentOrString()) + # VIM_INDENT_TEST_TRACE_END dist#vimindent#NonCommentedMatch setpos('.', pos) return match_lnum > 0 enddef diff --git a/runtime/autoload/python.vim b/runtime/autoload/python.vim index d5f4862363..cf01198d73 100644 --- a/runtime/autoload/python.vim +++ b/runtime/autoload/python.vim @@ -20,10 +20,12 @@ let g:python_indent = extend(get(g:, 'python_indent', {}), #{ let s:maxoff = 50 " maximum number of lines to look backwards for () function s:SearchBracket(fromlnum, flags) + " VIM_INDENT_TEST_TRACE_START return searchpairpos('[[({]', '', '[])}]', a:flags, \ {-> synstack('.', col('.')) \ ->indexof({_, id -> synIDattr(id, 'name') =~ '\%(Comment\|Todo\|String\)$'}) >= 0}, \ [0, a:fromlnum - s:maxoff]->max(), g:python_indent.searchpair_timeout) + " VIM_INDENT_TEST_TRACE_END python#s:SearchBracket endfunction " See if the specified line is already user-dedented from the expected value. diff --git a/runtime/indent/html.vim b/runtime/indent/html.vim index 2fa10cc91e..671a4d1971 100644 --- a/runtime/indent/html.vim +++ b/runtime/indent/html.vim @@ -1,7 +1,7 @@ " Vim indent script for HTML " Maintainer: The Vim Project " Original Author: Andy Wokula -" Last Change: 2023 Aug 13 +" Last Change: 2025 Apr 13 " Version: 1.0 "{{{ " Description: HTML indent script with cached state for faster indenting on a " range of lines. @@ -868,7 +868,9 @@ func HtmlIndent_FindTagStart(lnum) let idx = match(getline(a:lnum), '\S>\s*$') if idx > 0 call cursor(a:lnum, idx) + " VIM_INDENT_TEST_TRACE_START let lnum = searchpair('<\w', '' , '\S>', 'bW', '', max([a:lnum - b:html_indent_line_limit, 0])) + " VIM_INDENT_TEST_TRACE_END HtmlIndent_FindTagStart if lnum > 0 return [lnum, 1] endif @@ -903,7 +905,9 @@ func HtmlIndent_FindTagEnd() call search('--\zs>') elseif s:get_tag('/' . tagname) != 0 " tag with a closing tag, find matching "" + " VIM_INDENT_TEST_TRACE_START call searchpair('<' . tagname, '', '', 'W', '', line('.') + b:html_indent_line_limit) + " VIM_INDENT_TEST_TRACE_END HtmlIndent_FindTagEnd else " self-closing tag, find the ">" call search('\S\zs>') diff --git a/runtime/indent/javascript.vim b/runtime/indent/javascript.vim index 8077442ed0..6537d3f2fd 100644 --- a/runtime/indent/javascript.vim +++ b/runtime/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: Chris Paul ( https://github.com/bounceme ) " URL: https://github.com/pangloss/vim-javascript -" Last Change: December 4, 2017 +" Last Change: 2025 Apr 13 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -69,7 +69,9 @@ let s:rel = has('reltime') " searchpair() wrapper if s:rel function s:GetPair(start,end,flags,skip) + " VIM_INDENT_TEST_TRACE_START return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,s:l1,a:skip ==# 's:SkipFunc()' ? 2000 : 200) + " VIM_INDENT_TEST_TRACE_END s:GetPair endfunction else function s:GetPair(start,end,flags,skip) From 5ecb452f5bd8bd2dd4fc2800953d5ecd9871f282 Mon Sep 17 00:00:00 2001 From: Aliaksei Budavei <0x000c70@gmail.com> Date: Sun, 13 Apr 2025 22:24:46 +0300 Subject: [PATCH 130/633] runtime(indent-tests): Raise timeouts for "search*()"es Related to #15974 and #16870. closes: #17116 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt --- runtime/indent/testdir/README.txt | 3 +++ runtime/indent/testdir/bitbake.in | 2 ++ runtime/indent/testdir/bitbake.ok | 2 ++ runtime/indent/testdir/html.in | 1 + runtime/indent/testdir/html.ok | 1 + runtime/indent/testdir/python.in | 2 ++ runtime/indent/testdir/python.ok | 2 ++ runtime/indent/testdir/runtest.vim | 13 ------------- runtime/indent/testdir/vim.in | 2 ++ runtime/indent/testdir/vim.ok | 2 ++ runtime/indent/testdir/vim9.in | 6 ++++-- runtime/indent/testdir/vim9.ok | 6 ++++-- 12 files changed, 25 insertions(+), 17 deletions(-) diff --git a/runtime/indent/testdir/README.txt b/runtime/indent/testdir/README.txt index 65975605c2..7454210ef0 100644 --- a/runtime/indent/testdir/README.txt +++ b/runtime/indent/testdir/README.txt @@ -36,6 +36,9 @@ First of all, create a FILETYPE.in file. It should contain: \ 'string' " END_INDENT + When an indent script utilises timed "search*()"es and supports related + timeout configuration, consider setting a generous timeout value from + INDENT_EXE lines (look at "g:vim_indent" in "testdir/vim.in" for details). Note that the command is not undone, you may need to reverse the effect for the next block of lines. diff --git a/runtime/indent/testdir/bitbake.in b/runtime/indent/testdir/bitbake.in index afd19be182..97b760fc59 100644 --- a/runtime/indent/testdir/bitbake.in +++ b/runtime/indent/testdir/bitbake.in @@ -1,6 +1,8 @@ # vim: set filetype=bitbake : # START_INDENT +# INDENT_EXE let g:pyindent_searchpair_timeout = 64 +# INDENT_EXE runtime autoload/python.vim FOO = " \ bar \ baz \ diff --git a/runtime/indent/testdir/bitbake.ok b/runtime/indent/testdir/bitbake.ok index 1bc5a18c6f..000ef50847 100644 --- a/runtime/indent/testdir/bitbake.ok +++ b/runtime/indent/testdir/bitbake.ok @@ -1,6 +1,8 @@ # vim: set filetype=bitbake : # START_INDENT +# INDENT_EXE let g:pyindent_searchpair_timeout = 64 +# INDENT_EXE runtime autoload/python.vim FOO = " \ bar \ baz \ diff --git a/runtime/indent/testdir/html.in b/runtime/indent/testdir/html.in index 4783a096d0..72a38b93c1 100644 --- a/runtime/indent/testdir/html.in +++ b/runtime/indent/testdir/html.in @@ -2,6 +2,7 @@ % START_INDENT +% INDENT_EXE let b:html_indent_line_limit = 64 + + + +



+

An H2 header

+



+
+ +

Paragraph #1. +

+ +

Paragraph #2. + +

+ + +

Paragraph #1. +

    +
  • Item a.
  • Item b.
  • +
  • Item c. +
+

Paragraph #2. +

+
+ +
+
A quick brown fox jumps over the lazy dog +
Woof! +
+
A quick brown fox jumps over the lazy dog +
Woof! +
+
+ +
Thread #1 +
Thread #2 +
+
+ +

+ + +

+ + + ++ + +
Some Caption
Header #1Header #2Header #3 +
Column #1Column #2Column #3 +
Column #1Column #2Column #3 +
Column #1Column #2Column #3 +
Column #1Column #2Column #3 +
+ +
+
	
+<div class="block">
+<blockquote><pre><code>
+</code></pre></blockquote></div>
+
+ +

Paragraph #3.

Paragraph #4.

Paragraph #5. + +

Paragraph #6.

Paragraph #7.

Paragraph #8.

Paragraph #9.

+ +

Paragraph #10. +

+ +

Paragraph #11.

Paragraph #12.

Paragraph #13.

Paragraph #14.

+ +

Paragraph #15. +

Paragraph #16. + + diff --git a/runtime/syntax/testdir/input/html_fold_syntax.html b/runtime/syntax/testdir/input/html_fold_syntax.html new file mode 100644 index 0000000000..73579aa9a9 --- /dev/null +++ b/runtime/syntax/testdir/input/html_fold_syntax.html @@ -0,0 +1,105 @@ + + + + + +A folding syntax test + + + +



+

An H2 header

+



+
+ +

Paragraph #1. +

+ +

Paragraph #2.

+ +
+ + +

Paragraph #1.

+
    +
  • Item a.
  • Item b.
  • +
  • Item c.
  • +
+

Paragraph #2. +

+
+ +
+
A quick brown fox jumps over the lazy dog
+
Woof! +
+
A quick brown fox jumps over the lazy dog
+
Woof!
+
+
+ +
Thread #1 +
Thread #2 +
+
+ +

+ + +

+ + + + + + + + + + + +
Some Caption
Header #1Header #2Header #3
Column #1Column #2Column #3
Column #1Column #2Column #3
Column #1Column #2Column #3
Column #1Column #2Column #3
+ +
+
	
+<div class="block">
+<blockquote><pre><code>
+</code></pre></blockquote></div>
+
+ +

Paragraph #3.

Paragraph #4.

Paragraph #5.

+ +

Paragraph #6.

Paragraph #7.

Paragraph #8.

Paragraph #9.

+ +

Paragraph #10. +

+ +

Paragraph #11.

Paragraph #12.

Paragraph #13.

Paragraph #14.

+ +

Paragraph #15. +

Paragraph #16. + + diff --git a/runtime/syntax/testdir/input/setup/html_fold_expr.vim b/runtime/syntax/testdir/input/setup/html_fold_expr.vim new file mode 100644 index 0000000000..e8daae0e74 --- /dev/null +++ b/runtime/syntax/testdir/input/setup/html_fold_expr.vim @@ -0,0 +1,2 @@ +let g:html_expr_folding = 1 +filetype plugin on From 73440245361f3399b88c872236830da3086ad942 Mon Sep 17 00:00:00 2001 From: Aliaksei Budavei <0x000c70@gmail.com> Date: Sat, 10 May 2025 21:44:07 +0200 Subject: [PATCH 238/633] runtime(java): Search type and method declarations with "&inc" and "&def" =============== LIMITATIONS AND OBSERVATIONS =============== * Remember that external-type names can only be found when they match filenames resolvable in "&path" with "import" declarations; load the source file of an external type to look up its nested types and sibling top types, if any. * Strive to narrow the search by assigning only relevant pathnames for directories *or* an archive to "&path", e.g. ":set path-=/usr/include". * Use "{Visual}gf" on fully-qualified names. * Accept the fact that "&define" cannot contain end-of-line characters (":help definition-search"). A declaration whose matchable header is not contained within a line can be found iff all of its non-optional components belong to the same line; for types, such components are a keyword, e.g. "class", followed by a run of blank characters and an identifier, e.g. "Test"; for methods: a return type, e.g. "String", or a keyword "void", followed by a run of blank characters and an identifier, e.g. "toString", that is followed by "(". * The members of the "java.lang" package are usually not associated with "import" declarations; to look up their declarations, load a source file for a member of that package, and then use, on a simple name of interest for a member, either "[-Ctrl-d" etc. for local declarations or "gf" for external declarations, assuming that "." *or* the appropriate pathname for a JDK archive is assigned to "&path". * Follow the above instruction made for the "java.lang" members for any type whose simple name is not associated with an "import" declaration, i.e. a member type of the same package that is declared in another compilation unit. * Append the "$" character to "&iskeyword" when looking up declarations of generated code. See zzzyxwvut/java-vim#4. closes: #17281 Co-authored-by: Konfekt Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt --- runtime/ftplugin/java.vim | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/runtime/ftplugin/java.vim b/runtime/ftplugin/java.vim index cfd25bce6c..4a08c57dd4 100644 --- a/runtime/ftplugin/java.vim +++ b/runtime/ftplugin/java.vim @@ -3,9 +3,7 @@ " Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com> " Former Maintainer: Dan Sharp " Repository: https://github.com/zzzyxwvut/java-vim.git -" Last Change: 2024 Dec 25 -" 2024 Jan 14 by Vim Project (browsefilter) -" 2024 May 23 by Riley Bruins ('commentstring') +" Last Change: 2025 May 08 " Make sure the continuation lines below do not cause problems in " compatibility mode. @@ -30,6 +28,32 @@ let b:did_ftplugin = 1 " extension. set suffixes+=.class +" Set up "&define" and "&include". +let s:peek = '' + +try + " Since v7.3.1037. + if 'ab' !~ 'a\@1' +let s:types = '\%(\%(abstract\|final\|non-sealed\|s\%(ealed\|tatic\|trictfp\)\)\s\+\)*' . + \ '\%(class\|enum\|@\=interface\|record\)\s\+\ze\K\k*\>' +let s:methods = '\%(\%(abstract\|default\|final\|native\|s\%(tatic\|trictfp\|ynchronized\)\)\s\+\)*' . + \ '\%(<.\{-1,}>\s\+\)\=\%(\K\k*\.\)*\K\k*\s*\%(<.\{-1,}>\%(\s\|\[\)\@=\)\=\s*\%(\[\]\s*\)*' . + \ '\s\+\ze\%(\<\%(assert\|case\|instanceof\|new\|return\|throw\|when\)\s\+\)\@' . + \ s:peek . ' Date: Sun, 11 May 2025 14:00:49 +0300 Subject: [PATCH 239/633] docs(readme): update link to website Signed-off-by: ANKDDEV --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 980b8be3c2..69749b1483 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Vim - the text editor - for macOS -- MacVim homepage: +- MacVim homepage: - Download the latest version from [Releases](https://github.com/macvim-dev/macvim/releases/latest) From d4110e06952be7d06ba39cf0434626bbd7301a9d Mon Sep 17 00:00:00 2001 From: Sean Dewar <6256228+seandewar@users.noreply.github.com> Date: Sun, 11 May 2025 13:45:21 +0200 Subject: [PATCH 240/633] patch 9.1.1380: 'eventignorewin' only checked for current buffer Problem: When an autocommand executes for a non-current buffer, 'eventignorewin' is only checked from the buffer's last wininfo (overwrites win_ignore in the loop), not from the value of 'eventignorewin' in all windows showing the buffer as described (after v9.1.1084) Solution: Fix the check and don't use wininfo, as that may only contain windows that recently showed the buffer. Consider all the buffer's windows in all tabpages (Sean Dewar). closes: #17294 Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com> Signed-off-by: Christian Brabandt --- src/autocmd.c | 18 ++++++--- src/testdir/test_autocmd.vim | 76 ++++++++++++++++++++++++++++++++++++ src/version.c | 2 + 3 files changed, 91 insertions(+), 5 deletions(-) diff --git a/src/autocmd.c b/src/autocmd.c index 6ee6c11afc..3d21a937bc 100644 --- a/src/autocmd.c +++ b/src/autocmd.c @@ -2135,16 +2135,24 @@ apply_autocmds_group( if (event_ignored(event, p_ei)) goto BYPASS_AU; - wininfo_T *wip; int win_ignore = FALSE; // If event is allowed in 'eventignorewin', check if curwin or all windows // into "buf" are ignoring the event. if (buf == curbuf && event_tab[event].key <= 0) win_ignore = event_ignored(event, curwin->w_p_eiw); - else if (buf != NULL && event_tab[event].key <= 0) - FOR_ALL_BUF_WININFO(buf, wip) - if (wip->wi_win != NULL && wip->wi_win->w_buffer == buf) - win_ignore = event_ignored(event, wip->wi_win->w_p_eiw); + else if (buf != NULL && event_tab[event].key <= 0 && buf->b_nwindows > 0) + { + tabpage_T *tp; + win_T *wp; + + win_ignore = TRUE; + FOR_ALL_TAB_WINDOWS(tp, wp) + if (wp->w_buffer == buf && !event_ignored(event, wp->w_p_eiw)) + { + win_ignore = FALSE; + break; + } + } if (win_ignore) goto BYPASS_AU; diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index 192c436bef..db5558304d 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -5314,4 +5314,80 @@ func Test_autocmd_tabclosedpre() bw! endfunc +func Test_eventignorewin_non_current() + defer CleanUpTestAuGroup() + let s:triggered = '' + augroup testing + " Will set to the buffer of the closing window. + autocmd WinClosed * let s:triggered = 'WinClosed' + augroup END + let initial_win = win_getid() + + new + let new_buf = bufnr() + " Only set for one of the windows into the new buffer. + setlocal eventignorewin=all + split + setlocal eventignorewin= + let close_winnr = winnr() + + " Return to the window where the buffer is non-current. WinClosed should + " trigger as not all windows into new_buf have 'eventignorewin' set for it. + call win_gotoid(initial_win) + call assert_notequal(new_buf, bufnr()) + execute close_winnr 'close' + call assert_equal('WinClosed', s:triggered) + + wincmd w + call assert_equal(new_buf, bufnr()) + tab split + setlocal eventignorewin= + let close_winnr = win_getid() + + " Ensure that new_buf's window in the other tabpage with 'eventignorewin' + " unset allows WinClosed to run when new_buf is non-current. + call win_gotoid(initial_win) + call assert_notequal(new_buf, bufnr()) + let s:triggered = '' + only! + call assert_equal('WinClosed', s:triggered) + call assert_equal(1, win_findbuf(new_buf)->len()) + + " Create an only window to new_buf with 'eventignorewin' set. + tabonly! + execute new_buf 'sbuffer' + setlocal eventignorewin=all + wincmd p + call assert_equal(1, win_findbuf(new_buf)->len()) + call assert_notequal(new_buf, bufnr()) + + " Closing a window unrelated to new_buf should not block WinClosed. + split + let s:triggered = '' + close + call assert_equal('WinClosed', s:triggered) + call assert_equal(1, win_findbuf(new_buf)->len()) + + " Check WinClosed is blocked when we close the only window to new_buf (that + " has 'eventignorewin' set) while new_buf is non-current. + call assert_notequal(new_buf, bufnr()) + let s:triggered = '' + only! + call assert_equal('', s:triggered) + call assert_equal(0, win_findbuf(new_buf)->len()) + + augroup testing + autocmd! + autocmd BufNew * ++once let s:triggered = 'BufNew' + augroup END + + " Buffer not shown in a window, 'eventignorewin' should not block (and + " can't even be set for it anyway in this case). + badd foo + call assert_equal('BufNew', s:triggered) + + unlet! s:triggered + %bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index b0dc438870..aa4bc198e0 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1380, /**/ 1379, /**/ From 5a18ccf49007481b1fffcf101e4ce0b36a2db241 Mon Sep 17 00:00:00 2001 From: glepnir Date: Sun, 11 May 2025 13:48:33 +0200 Subject: [PATCH 241/633] patch 9.1.1381: completion: cannot return to original text Problem: Cannot return to the original text after selecting the next item when the currently selected item is the last one. Solution: When continuing to move down past the last item, locate the original completion at the head/tail nodes of the completed linked list (glepnir). closes: #17300 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/insexpand.c | 5 ++--- src/testdir/test_ins_complete.vim | 15 ++++++++++++++- src/version.c | 2 ++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 7bbff4ecb4..bb280fa465 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -5236,9 +5236,8 @@ find_comp_when_fuzzy(void) if ((is_forward && compl_selected_item == compl_match_arraysize - 1) || (is_backward && compl_selected_item == 0)) - return compl_first_match != compl_shown_match ? - (is_forward ? compl_shown_match->cp_next : compl_first_match) : - (compl_first_match->cp_prev ? compl_first_match->cp_prev : NULL); + return match_at_original_text(compl_first_match) + ? compl_first_match : compl_first_match->cp_prev; if (is_forward) target_idx = compl_selected_item + 1; diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 6f342ae466..f7292ea34c 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -3387,11 +3387,15 @@ func Test_complete_opt_fuzzy() autocmd CompleteChanged * :call OnPumChange() augroup END + let g:change = 0 func Omni_test(findstart, base) if a:findstart return col(".") endif - return [#{word: "foo"}, #{word: "foobar"}, #{word: "fooBaz"}, #{word: "foobala"}, #{word: "你好吗"}, #{word: "我好"}] + if g:change == 0 + return [#{word: "foo"}, #{word: "foobar"}, #{word: "fooBaz"}, #{word: "foobala"}, #{word: "你好吗"}, #{word: "我好"}] + endif + return [#{word: "for i = .."}, #{word: "bar"}, #{word: "foo"}, #{word: "for .. ipairs"}, #{word: "for .. pairs"}] endfunc new @@ -3488,6 +3492,15 @@ func Test_complete_opt_fuzzy() call feedkeys("Salpha bravio charlie\alpha\\\\\\\", 'tx') call assert_equal('alpha bravio charlie', getline('.')) + set cot=fuzzy,menu,noinsert + call feedkeys(":let g:change=1\") + call feedkeys("S\\for\\\", 'tx') + call assert_equal('for', getline('.')) + call feedkeys("S\\for\", 'tx') + call assert_equal('for', getline('.')) + call feedkeys("S\\for\\", 'tx') + call assert_equal('for .. ipairs', getline('.')) + " clean up set omnifunc= bw! diff --git a/src/version.c b/src/version.c index aa4bc198e0..449a358b6b 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1381, /**/ 1380, /**/ From 74e8f28b5c697d1e690a198caa4b3b0ee2d82fb1 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sun, 11 May 2025 14:43:11 +0200 Subject: [PATCH 242/633] runtime(getscript): check for network errors related: #17249 Co-authored-by: Philip H. <47042125+pheiduck@users.noreply.github.com> Signed-off-by: Christian Brabandt --- runtime/autoload/getscript.vim | 149 +++++++++++++++------------------ 1 file changed, 67 insertions(+), 82 deletions(-) diff --git a/runtime/autoload/getscript.vim b/runtime/autoload/getscript.vim index e599d1ed95..88d7a3a0e6 100644 --- a/runtime/autoload/getscript.vim +++ b/runtime/autoload/getscript.vim @@ -13,6 +13,7 @@ " substitution of hardcoded commands with global variables " 2024 Nov 12 by Vim Project: fix problems on Windows (#16036) " 2025 Feb 28 by Vim Project: add support for bzip3 (#16755) +" 2025 May 11 by Vim Project: check network connectivity (#17249) " }}} " " GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim @@ -147,9 +148,6 @@ if g:GetLatestVimScripts_allowautoinstall elseif exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim) let s:autoinstall= $HOME."/".s:dotvim endif -" call Decho("s:autoinstall<".s:autoinstall.">") -"else "Decho -" call Decho("g:GetLatestVimScripts_allowautoinstall=".g:GetLatestVimScripts_allowautoinstall.": :AutoInstall: disabled") endif " --------------------------------------------------------------------- @@ -163,24 +161,19 @@ silent! com -nargs=0 GLVS call getscript#GetLatestVimScripts() " scripts based on the list in " (first dir in runtimepath)/GetLatest/GetLatestVimScripts.dat fun! getscript#GetLatestVimScripts() -" call Dfunc("GetLatestVimScripts() autoinstall<".s:autoinstall.">") -" insure that wget is executable if executable(g:GetLatestVimScripts_wget) != 1 echoerr "GetLatestVimScripts needs ".g:GetLatestVimScripts_wget." which apparently is not available on your system" -" call Dret("GetLatestVimScripts : wget not executable/available") return endif " Find the .../GetLatest subdirectory under the runtimepath for datadir in split(&rtp,',') + [''] if isdirectory(datadir."/GetLatest") -" call Decho("found directory<".datadir.">") let datadir= datadir . "/GetLatest" break endif if filereadable(datadir."GetLatestVimScripts.dat") -" call Decho("found ".datadir."/GetLatestVimScripts.dat") break endif endfor @@ -188,32 +181,25 @@ fun! getscript#GetLatestVimScripts() " Sanity checks: readability and writability if datadir == "" echoerr 'Missing "GetLatest/" on your runtimepath - see :help glvs-dist-install' -" call Dret("GetLatestVimScripts : unable to find a GetLatest subdirectory") return endif if filewritable(datadir) != 2 echoerr "(getLatestVimScripts) Your ".datadir." isn't writable" -" call Dret("GetLatestVimScripts : non-writable directory<".datadir.">") return endif let datafile= datadir."/GetLatestVimScripts.dat" if !filereadable(datafile) echoerr "Your data file<".datafile."> isn't readable" -" call Dret("GetLatestVimScripts : non-readable datafile<".datafile.">") return endif if !filewritable(datafile) echoerr "Your data file<".datafile."> isn't writable" -" call Dret("GetLatestVimScripts : non-writable datafile<".datafile.">") return endif " -------------------- " Passed sanity checks " -------------------- -" call Decho("datadir <".datadir.">") -" call Decho("datafile <".datafile.">") - " don't let any event handlers interfere (like winmanager's, taglist's, etc) let eikeep = &ei let hlskeep = &hls @@ -226,25 +212,20 @@ fun! getscript#GetLatestVimScripts() " 3. split window " 4. edit datafile let origdir= getcwd() -" call Decho("exe cd ".fnameescape(substitute(datadir,'\','/','ge'))) exe "cd ".fnameescape(substitute(datadir,'\','/','ge')) split -" call Decho("exe e ".fnameescape(substitute(datafile,'\','/','ge'))) exe "e ".fnameescape(substitute(datafile,'\','/','ge')) res 1000 let s:downloads = 0 let s:downerrors= 0 + let s:message = [] " Check on dependencies mentioned in plugins -" call Decho(" ") -" call Decho("searching plugins for GetLatestVimScripts dependencies") let lastline = line("$") -" call Decho("lastline#".lastline) let firstdir = substitute(&rtp,',.*$','','') let plugins = split(globpath(firstdir,"plugin/**/*.vim"),'\n') let plugins += split(globpath(firstdir,"ftplugin/**/*.vim"),'\n') let plugins += split(globpath(firstdir,"AsNeeded/**/*.vim"),'\n') -" extend the search to the packages too (this script predates the feature) let plugins += split(globpath(firstdir,"pack/*/start/*/plugin/**/*.vim"),'\n') let plugins += split(globpath(firstdir,"pack/*/opt/*/plugin/**/*.vim"),'\n') let plugins += split(globpath(firstdir,"pack/*/start/*/ftplugin/**/*.vim"),'\n') @@ -257,14 +238,10 @@ fun! getscript#GetLatestVimScripts() " It reads the plugin script at the end of the GetLatestVimScripts.dat " file, examines it, and then removes it. for plugin in plugins -" call Decho(" ") -" call Decho("plugin<".plugin.">") " read plugin in " evidently a :r creates a new buffer (the "#" buffer) that is subsequently unused -- bwiping it $ -" call Decho(".dependency checking<".plugin."> line$=".line("$")) -" call Decho("..exe silent r ".fnameescape(plugin)) exe "silent r ".fnameescape(plugin) exe "silent bwipe ".bufnr("#") @@ -272,7 +249,6 @@ fun! getscript#GetLatestVimScripts() let depscript = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+\s\+\(.*\)$','\1','e') let depscriptid = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\(\d\+\)\s\+.*$','\1','') let llp1 = lastline+1 -" call Decho("..depscript<".depscript.">") " found a "GetLatestVimScripts: # #" line in the script; " check if it's already in the datafile by searching backwards from llp1, @@ -286,21 +262,17 @@ fun! getscript#GetLatestVimScripts() " this second search is taken when, for example, a 0 0 scriptname is to be skipped over let srchline= search('\<'.noai_script.'\>','bW') endif -" call Decho("..noai_script<".noai_script."> depscriptid#".depscriptid." srchline#".srchline." curline#".line(".")." lastline#".lastline) if srchline == 0 " found a new script to permanently include in the datafile let keep_rega = @a let @a = substitute(getline(curline),'^"\s\+GetLatestVimScripts:\s\+','','') echomsg "Appending <".@a."> to ".datafile." for ".depscript -" call Decho("..Appending <".@a."> to ".datafile." for ".depscript) exe lastline."put a" let @a = keep_rega let lastline = llp1 let curline = curline + 1 let foundscript = foundscript + 1 -" else " Decho -" call Decho("..found <".noai_script."> (already in datafile at line#".srchline.")") endif let curline = curline + 1 @@ -309,12 +281,8 @@ fun! getscript#GetLatestVimScripts() " llp1: last line plus one let llp1= lastline + 1 -" call Decho(".deleting lines: ".llp1.",$d") exe "silent! ".llp1.",$d" endfor -" call Decho("--- end dependency checking loop --- foundscript=".foundscript) -" call Decho(" ") -" call Dredir("BUFFER TEST (GetLatestVimScripts 1)","ls!") if foundscript == 0 setlocal nomod @@ -323,32 +291,32 @@ fun! getscript#GetLatestVimScripts() " -------------------------------------------------------------------- " Check on out-of-date scripts using GetLatest/GetLatestVimScripts.dat " -------------------------------------------------------------------- -" call Decho("begin: checking out-of-date scripts using datafile<".datafile.">") setlocal lz 1 -" /^-----/,$g/^\s*\d/call Decho(getline(".")) - 1 /^-----/,$g/^\s*\d/call s:GetOneScript() -" call Decho("--- end out-of-date checking --- ") " Final report (an echomsg) try silent! ?^-------? catch /^Vim\%((\a\+)\)\=:E114/ -" call Dret("GetLatestVimScripts : nothing done!") return endtry exe "norm! kz\" redraw! + if !empty(s:message) + echohl WarningMsg + for mess in s:message + echom mess + endfor + let s:downerrors += len(s:message) + endif let s:msg = "" if s:downloads == 1 let s:msg = "Downloaded one updated script to <".datadir.">" - elseif s:downloads == 2 - let s:msg= "Downloaded two updated scripts to <".datadir.">" elseif s:downloads > 1 let s:msg= "Downloaded ".s:downloads." updated scripts to <".datadir.">" else - let s:msg= "Everything was already current" + let s:msg= empty(s:message) ? "Everything was already current" : "There were some errors" endif if s:downerrors > 0 let s:msg= s:msg." (".s:downerrors." downloading errors)" @@ -366,8 +334,6 @@ fun! getscript#GetLatestVimScripts() let &hls = hlskeep let &acd = acdkeep setlocal nolz -" call Dredir("BUFFER TEST (GetLatestVimScripts 2)","ls!") -" call Dret("GetLatestVimScripts : did ".s:downloads." downloads") endfun " --------------------------------------------------------------------- @@ -376,8 +342,6 @@ endfun " ScriptID, SourceID, and Filename. " It downloads any scripts that have newer versions from vim.sourceforge.net. fun! s:GetOneScript(...) -" call Dfunc("GetOneScript()") - " set options to allow progress to be shown on screen let rega= @a let t_ti= &t_ti @@ -403,13 +367,9 @@ fun! s:GetOneScript(...) let srcid = a:2 let fname = a:3 let cmmnt = "" -" call Decho("scriptid<".scriptid.">") -" call Decho("srcid <".srcid.">") -" call Decho("fname <".fname.">") else let curline = getline(".") if curline =~ '^\s*#' -" call Dret("GetOneScript : skipping a pure comment line") return endif let parsepat = '^\s*\(\d\+\)\s\+\(\d\+\)\s\+\(.\{-}\)\(\s*#.*\)\=$' @@ -433,36 +393,26 @@ fun! s:GetOneScript(...) catch /^Vim\%((\a\+)\)\=:E486/ let cmmnt= "" endtry -" call Decho("curline <".curline.">") -" call Decho("parsepat<".parsepat.">") -" call Decho("scriptid<".scriptid.">") -" call Decho("srcid <".srcid.">") -" call Decho("fname <".fname.">") endif " plugin author protection from downloading his/her own scripts atop their latest work + " When looking for :AutoInstall: lines, skip scripts that have 0 0 scriptname if scriptid == 0 || srcid == 0 - " When looking for :AutoInstall: lines, skip scripts that have 0 0 scriptname -" call Dret("GetOneScript : skipping a scriptid==srcid==0 line") return endif let doautoinstall= 0 if fname =~ ":AutoInstall:" -" call Decho("case AutoInstall: fname<".fname.">") let aicmmnt= substitute(fname,'\s\+:AutoInstall:\s\+',' ','') -" call Decho("aicmmnt<".aicmmnt."> s:autoinstall=".s:autoinstall) if s:autoinstall != "" let doautoinstall = g:GetLatestVimScripts_allowautoinstall endif else let aicmmnt= fname endif -" call Decho("aicmmnt<".aicmmnt.">: doautoinstall=".doautoinstall) exe "norm z\" redraw! -" call Decho('considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid) echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid " grab a copy of the plugin's vim.sourceforge.net webpage @@ -470,15 +420,17 @@ fun! s:GetOneScript(...) let tmpfile = tempname() let v:errmsg = "" + " Check if URLs are reachable + if !CheckVimScriptURL(scriptid, srcid) + return + endif + " make up to three tries at downloading the description let itry= 1 while itry <= 3 -" call Decho(".try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr) if has("win32") || has("win16") || has("win95") -" call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)."|bw!") new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)|bw! else -" call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr)) exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr) endif if itry == 1 @@ -496,7 +448,6 @@ fun! s:GetOneScript(...) endif let itry= itry + 1 endwhile -" call Decho(" --- end downloading tries while loop --- itry=".itry) " testing: did finding "Click on the package..." fail? if findpkg == 0 || itry >= 4 @@ -507,12 +458,9 @@ fun! s:GetOneScript(...) let &t_te = t_te let &rs = rs let s:downerrors = s:downerrors + 1 -" call Decho("***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">") echomsg "***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">" -" call Dret("GetOneScript : srch for /Click on the package/ failed") return endif -" call Decho('found "Click on the package to download"') let findsrcid= search('src_id=','W') if findsrcid == 0 @@ -523,28 +471,22 @@ fun! s:GetOneScript(...) let &t_te = t_te let &rs = rs let s:downerrors = s:downerrors + 1 -" call Decho("***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">") echomsg "***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">" -" call Dret("GetOneScript : srch for /src_id/ failed") return endif -" call Decho('found "src_id=" in description page') let srcidpat = '^\s*\([^<]\+\)<.*$' let latestsrcid= substitute(getline("."),srcidpat,'\1','') let sname = substitute(getline("."),srcidpat,'\2','') " script name actually downloaded -" call Decho("srcidpat<".srcidpat."> latestsrcid<".latestsrcid."> sname<".sname.">") silent q! call delete(tmpfile) " convert the strings-of-numbers into numbers let srcid = srcid + 0 let latestsrcid = latestsrcid + 0 -" call Decho("srcid=".srcid." latestsrcid=".latestsrcid." sname<".sname.">") " has the plugin's most-recent srcid increased, which indicates that it has been updated if latestsrcid > srcid -" call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."]: need to update <".sname.">") let s:downloads= s:downloads + 1 if sname == bufname("%") @@ -555,20 +497,16 @@ fun! s:GetOneScript(...) " ----------------------------------------------------------------------------- " the plugin has been updated since we last obtained it, so download a new copy " ----------------------------------------------------------------------------- -" call Decho(".downloading new <".sname.">") echomsg ".downloading new <".sname.">" if has("win32") || has("win16") || has("win95") -" call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)."|bw!") new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid)|bw! else -" call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid) exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape(g:GetLatestVimScripts_downloadaddr.latestsrcid) endif " -------------------------------------------------------------------------- " AutoInstall: only if doautoinstall has been requested by the plugin itself " -------------------------------------------------------------------------- -" call Decho("checking if plugin requested autoinstall: doautoinstall=".doautoinstall) if doautoinstall if filereadable(sname) exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall) @@ -602,7 +540,6 @@ fun! s:GetOneScript(...) exe "sil !".g:GetLatestVimScripts_unxz." ".shellescape(sname) let sname= substitute(sname,'\.xz$','','') else -" call Decho("no decompression needed") endif " distribute archive(.zip, .tar, .vba, .vmb, ...) contents @@ -632,8 +569,6 @@ fun! s:GetOneScript(...) else unlet g:vimball_home endif - else -" call Decho("no dearchiving needed") endif " --------------------------------------------- @@ -665,9 +600,59 @@ fun! s:GetOneScript(...) " update the data in the file call setline(line("."),modline) endif - endfun +" CheckVimScriptURL: Check Network Connection {{{1 +" Check status code of scriptaddr and downloadaddr +" return v:true if the script is downloadable or v:false in case of errors +fun CheckVimScriptURL(script_id, src_id) + if !executable('curl') + return v:true + endif + let output = has("win32") ? ' -o NUL ' : ' -o /dev/null ' + + " Handle PowerShell differently + if &shell =~? '\\|\' + " For PowerShell, use direct command output + let script_url = g:GetLatestVimScripts_scriptaddr . a:script_id + let script_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(script_url) + let script_status = system(script_cmd) + let script_status = substitute(script_status, '\n$', '', '') + + let download_url = g:GetLatestVimScripts_downloadaddr . a:src_id + let download_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(download_url) + let download_status = system(download_cmd) + let download_status = substitute(download_status, '\n$', '', '') + else + " For other shells, use temporary files + let temp_script = tempname() + let temp_download = tempname() + + let script_url = g:GetLatestVimScripts_scriptaddr . a:script_id + let script_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(script_url) . ' >' . shellescape(temp_script) + call system(script_cmd) + let script_status = readfile(temp_script, 'b')[0] + call delete(temp_script) + + let download_url = g:GetLatestVimScripts_downloadaddr . a:src_id + let download_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(download_url) . ' >' . shellescape(temp_download) + call system(download_cmd) + let download_status = readfile(temp_download, 'b')[0] + call delete(temp_download) + endif + + if script_status !=# '200' + let s:message += [ printf('Error: Failed to reach script: %s', a:script_id) ] + return v:false + endif + + if download_status !=# '200' + let s:message += [ printf('Error: Failed to download script %s', a:script_id) ] + return v:false + endif + return v:true +endfunction + " --------------------------------------------------------------------- " Restore Options: {{{1 let &cpo= s:keepcpo From 411730e277c408f89c82ae7dbb1ebfa71ec0f4e5 Mon Sep 17 00:00:00 2001 From: "Philip H." <47042125+pheiduck@users.noreply.github.com> Date: Sun, 11 May 2025 15:01:31 +0200 Subject: [PATCH 243/633] patch 9.1.1382: if_ruby: unused compiler warnings from ruby internals Problem: if_ruby: unused compiler warnings from ruby internals Solution: disable -Wunused-parameter for if_ruby internal code (Philip H.) closes: #17297 Signed-off-by: Philip H. <47042125+pheiduck@users.noreply.github.com> Signed-off-by: Christian Brabandt --- src/if_ruby.c | 3 +++ src/version.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/if_ruby.c b/src/if_ruby.c index 52f54f3df6..b769adfa2f 100644 --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -107,7 +107,10 @@ # undef SIZEOF_TIME_T #endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include +#pragma GCC diagnostic pop #include // See above. diff --git a/src/version.c b/src/version.c index 449a358b6b..816ce5c15a 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1382, /**/ 1381, /**/ From e62244f22dc81b86f76c6cf2f10a6aa3c8f1dd00 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sun, 11 May 2025 18:30:24 +0200 Subject: [PATCH 244/633] runtime(getscript): CI: failure on powershell Problem: The CheckVimScriptURL() function does not work properly on pwershell. Most likely this is because curl is aliased to Invoke-WebRequest on Powershell and redirection seems to work slightly different Solution: Disable CheckVimScriptURL() on Powershell and then simplify the curl download logic Signed-off-by: Christian Brabandt --- runtime/autoload/getscript.vim | 46 +++++++++++----------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/runtime/autoload/getscript.vim b/runtime/autoload/getscript.vim index 88d7a3a0e6..1e3b5b39d6 100644 --- a/runtime/autoload/getscript.vim +++ b/runtime/autoload/getscript.vim @@ -606,40 +606,24 @@ endfun " Check status code of scriptaddr and downloadaddr " return v:true if the script is downloadable or v:false in case of errors fun CheckVimScriptURL(script_id, src_id) - if !executable('curl') + " doesn't work with powershell + if !executable('curl') || &shell =~? 'pwsh\|powershell' return v:true endif let output = has("win32") ? ' -o NUL ' : ' -o /dev/null ' - " Handle PowerShell differently - if &shell =~? '\\|\' - " For PowerShell, use direct command output - let script_url = g:GetLatestVimScripts_scriptaddr . a:script_id - let script_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(script_url) - let script_status = system(script_cmd) - let script_status = substitute(script_status, '\n$', '', '') - - let download_url = g:GetLatestVimScripts_downloadaddr . a:src_id - let download_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(download_url) - let download_status = system(download_cmd) - let download_status = substitute(download_status, '\n$', '', '') - else - " For other shells, use temporary files - let temp_script = tempname() - let temp_download = tempname() - - let script_url = g:GetLatestVimScripts_scriptaddr . a:script_id - let script_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(script_url) . ' >' . shellescape(temp_script) - call system(script_cmd) - let script_status = readfile(temp_script, 'b')[0] - call delete(temp_script) - - let download_url = g:GetLatestVimScripts_downloadaddr . a:src_id - let download_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(download_url) . ' >' . shellescape(temp_download) - call system(download_cmd) - let download_status = readfile(temp_download, 'b')[0] - call delete(temp_download) - endif + let temp = tempname() + defer delete(temp) + let script_url = g:GetLatestVimScripts_scriptaddr . a:script_id + let download_url = g:GetLatestVimScripts_downloadaddr . a:src_id + + let script_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(script_url) . ' >' . shellescape(temp) + call system(script_cmd) + let script_status = readfile(temp, 'b')[0] + + let download_cmd = 'curl -s -I -w "%{http_code}"' . output . shellescape(download_url) . ' >' . shellescape(temp) + call system(download_cmd) + let download_status = readfile(temp, 'b')[0] if script_status !=# '200' let s:message += [ printf('Error: Failed to reach script: %s', a:script_id) ] @@ -651,7 +635,7 @@ fun CheckVimScriptURL(script_id, src_id) return v:false endif return v:true -endfunction +endfun " --------------------------------------------------------------------- " Restore Options: {{{1 From 8d0e42b71023144e6db17534da41ffecbd0b655f Mon Sep 17 00:00:00 2001 From: glepnir Date: Mon, 12 May 2025 20:28:28 +0200 Subject: [PATCH 245/633] patch 9.1.1383: completion: 'isexpand' option does not handle space char correct Problem: When a space character is used as a trigger in 'isexpand' option it doesn't get recognized because skip_to_option_part() skips spaces after a comma, treating them as option separators rather than option value (after v9.1.1341) Solution: manually set the part to a space character (glepnir). closes: #17305 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/insexpand.c | 10 +++++++++- src/testdir/test_ins_complete.vim | 4 ++++ src/version.c | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/insexpand.c b/src/insexpand.c index bb280fa465..5f5a5b9057 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -3665,7 +3665,15 @@ f_complete_match(typval_T *argvars, typval_T *rettv) while (*p != NUL) { - int len = copy_option_part(&p, part, MAXPATHL, ","); + int len = 0; + if (*p == ',' && *(p+1) == ' ' && (*(p+2) == ',' || *(p+2) == NUL)) + { + part[0] = ' '; + len = 1; + p++; + } + else + len = copy_option_part(&p, part, MAXPATHL, ","); if (len > 0 && len <= col) { diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index f7292ea34c..741cc9d9c9 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -4504,6 +4504,10 @@ func Test_complete_match() call feedkeys("Sabc, \:let g:result=complete_match()\", 'tx') call assert_equal([[4, ',']], g:result) + set ise=\ ,= + call feedkeys("Sif true \:let g:result=complete_match()\", 'tx') + call assert_equal([[8, ' ']], g:result) + bw! unlet g:result set isexpand& diff --git a/src/version.c b/src/version.c index 816ce5c15a..4a9ad83dd9 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1383, /**/ 1382, /**/ From 13bea589a25707c8f9e29b2920410bdcccd79bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20B=C3=ACnh=20An?= Date: Mon, 12 May 2025 20:39:24 +0200 Subject: [PATCH 246/633] patch 9.1.1384: still some problem with the new tutors filetype plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: still some problem with the new tutors filetype plugin Solution: refactor code to enable/disable tutor mode into tutor#EnableInteractive() function, include a test (Phạm Bình An) I find it annoying that Tutor's interactive mode is always on (or debug mode is off) even when I open a tutor file with :edit command. I think it makes more sense to make this "interactive mode": - Always on when it is opened with :Tutor command - Off otherwise For more references, see `:help` feature, it is a much better than :Tutor, since I don't have to run `:let g:help_debug = 1` just to be able to edit and save a help file Therefore, I remove `g:tutor_debug` closes: #17299 Signed-off-by: Phạm Bình An Signed-off-by: Christian Brabandt --- runtime/autoload/tutor.vim | 22 ++++++++++++++++++++++ runtime/ftplugin/tutor.vim | 21 +++------------------ runtime/plugin/tutor.vim | 7 +------ runtime/tutor/tutor.tutor | 11 ++--------- src/testdir/Make_all.mak | 2 ++ src/testdir/test_plugin_tutor.vim | 16 ++++++++++++++++ src/version.c | 2 ++ 7 files changed, 48 insertions(+), 33 deletions(-) create mode 100644 src/testdir/test_plugin_tutor.vim diff --git a/runtime/autoload/tutor.vim b/runtime/autoload/tutor.vim index 3265fdde36..6ab796020d 100644 --- a/runtime/autoload/tutor.vim +++ b/runtime/autoload/tutor.vim @@ -210,6 +210,7 @@ function! tutor#TutorCmd(tutor_name) call tutor#SetupVim() exe "edit ".l:to_open + call tutor#EnableInteractive(v:true) endfunction function! tutor#TutorCmdComplete(lead,line,pos) @@ -217,3 +218,24 @@ function! tutor#TutorCmdComplete(lead,line,pos) let l:names = uniq(sort(map(l:tutors, 'fnamemodify(v:val, ":t:r")'), 's:Sort')) return join(l:names, "\n") endfunction + +" Enables/disables interactive mode. +function! tutor#EnableInteractive(enable) + let enable = a:enable + if enable + setlocal buftype=nofile + setlocal concealcursor+=inv + setlocal conceallevel=2 + call tutor#ApplyMarks() + augroup tutor_interactive + autocmd! TextChanged,TextChangedI call tutor#ApplyMarksOnChanged() + augroup END + else + setlocal buftype< + setlocal concealcursor< + setlocal conceallevel< + if exists('#tutor_interactive') + autocmd! tutor_interactive * + endif + endif +endfunction diff --git a/runtime/ftplugin/tutor.vim b/runtime/ftplugin/tutor.vim index 5660cbf649..92bca8d198 100644 --- a/runtime/ftplugin/tutor.vim +++ b/runtime/ftplugin/tutor.vim @@ -6,21 +6,13 @@ " Original Author: Felipe Morales " Last Change: " 2025 May 10 set b:undo_ftplugin +" 2025 May 12 update b:undo_ftplugin " Base: {{{1 call tutor#SetupVim() " Buffer Settings: {{{1 setlocal noreadonly -if !exists('g:tutor_debug') || g:tutor_debug == 0 - setlocal buftype=nofile - setlocal concealcursor+=inv - setlocal conceallevel=2 -else - setlocal buftype= - setlocal concealcursor& - setlocal conceallevel=0 -endif setlocal noundofile setlocal keywordprg=:help @@ -46,14 +38,7 @@ call tutor#SetNormalMappings() sign define tutorok text=✓ texthl=tutorOK sign define tutorbad text=✗ texthl=tutorX -if !exists('g:tutor_debug') || g:tutor_debug == 0 - call tutor#ApplyMarks() - autocmd! TextChanged,TextChangedI call tutor#ApplyMarksOnChanged() -endif - -let b:undo_ftplugin = 'unlet! g:tutor_debug |' -let b:undo_ftplugin ..= 'setl concealcursor< conceallevel< |' -let b:undo_ftplugin ..= 'setl foldmethod< foldexpr< foldlevel< |' -let b:undo_ftplugin ..= 'setl buftype< undofile< keywordprg< iskeyword< |' +let b:undo_ftplugin = "setl foldmethod< foldexpr< foldlevel< undofile< keywordprg< iskeyword< |" + \ . "call tutor#EnableInteractive(v:false) |" " vim: fdm=marker diff --git a/runtime/plugin/tutor.vim b/runtime/plugin/tutor.vim index b79ba93093..495f31704c 100644 --- a/runtime/plugin/tutor.vim +++ b/runtime/plugin/tutor.vim @@ -2,16 +2,11 @@ " Maintainer: This runtime file is looking for a new maintainer. " Contributors: Phạm Bình An " Original Author: Felipe Morales -" Date: 2025 May 10 +" Date: 2025 May 12 if exists('g:loaded_tutor_mode_plugin') || &compatible finish endif let g:loaded_tutor_mode_plugin = 1 -" Define this variable so that users get cmdline completion. -if !exists('g:tutor_debug') - let g:tutor_debug = 0 -endif - command! -nargs=? -complete=custom,tutor#TutorCmdComplete Tutor call tutor#TutorCmd() diff --git a/runtime/tutor/tutor.tutor b/runtime/tutor/tutor.tutor index b46fcc4836..cdef5d55ce 100644 --- a/runtime/tutor/tutor.tutor +++ b/runtime/tutor/tutor.tutor @@ -17,15 +17,8 @@ Table of contents: ## SETTING UP *setting-up* -First, you'll need to enable "debug" mode -~~~ cmd - :let g:tutor_debug = 1 -~~~ -This will allow saving changes to the tutor files and will disable conceals, so -you can more easily check your changes. - -After this, create a new .tutor file (we will be practicing on this very file, so you -don't need to do this now): +Create a new .tutor file (we will be practicing on this very file, so you don't +need to do this now): ~~~ cmd :e new-tutorial.tutor ~~~ diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index de4e30f754..88bf5c3de0 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -245,6 +245,7 @@ NEW_TESTS = \ test_plugin_matchparen \ test_plugin_termdebug \ test_plugin_tohtml \ + test_plugin_tutor \ test_plugin_zip \ test_plus_arg_edit \ test_popup \ @@ -511,6 +512,7 @@ NEW_TESTS_RES = \ test_plugin_matchparen.res \ test_plugin_termdebug.res \ test_plugin_tohtml.res \ + test_plugin_tutor.res \ test_plugin_zip.res \ test_plus_arg_edit.res \ test_popup.res \ diff --git a/src/testdir/test_plugin_tutor.vim b/src/testdir/test_plugin_tutor.vim new file mode 100644 index 0000000000..61cea3faff --- /dev/null +++ b/src/testdir/test_plugin_tutor.vim @@ -0,0 +1,16 @@ +" Test for the new-tutor plugin + +func SetUp() + set nocompatible + runtime plugin/tutor.vim +endfunc + +func Test_auto_enable_interactive() + Tutor + call assert_equal('nofile', &buftype) + call assert_match('tutor#EnableInteractive', b:undo_ftplugin) + + edit Xtutor/Xtest.tutor + call assert_true(empty(&buftype)) + call assert_match('tutor#EnableInteractive', b:undo_ftplugin) +endfunc diff --git a/src/version.c b/src/version.c index 4a9ad83dd9..55860d2d60 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1384, /**/ 1383, /**/ From acf0ebe8a8f4dd389a8fe8cea52ff43bc8bfe1be Mon Sep 17 00:00:00 2001 From: Luuk van Baal Date: Mon, 12 May 2025 20:45:41 +0200 Subject: [PATCH 247/633] patch 9.1.1385: inefficient loop for 'nosmoothscroll' scrolling Problem: Loop that ensures "w_skipcol" is zero with 'nosmoothscroll' for (half)-page scrolling is inefficient. Solution: Calculate the required "count" instead of looping until "w_skipcol" is zero (Luuk van Baal). fixes: #17301 closes: #17306 Signed-off-by: Luuk van Baal Signed-off-by: Christian Brabandt --- src/move.c | 15 +++++++++------ src/testdir/test_normal.vim | 9 +++++++++ src/version.c | 2 ++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/move.c b/src/move.c index f4bce40d7b..1c1eddeef5 100644 --- a/src/move.c +++ b/src/move.c @@ -3212,12 +3212,15 @@ static int scroll_with_sms(int dir, long count, long *curscount) // extra for scrolling backward so that consuming skipcol is symmetric. if (labs(curwin->w_topline - prev_topline) > (dir == BACKWARD)) fixdir = dir * -1; - while (curwin->w_skipcol > 0 - && curwin->w_topline < curbuf->b_ml.ml_line_count) - { - scroll_redraw(fixdir == FORWARD, 1); - *curscount += (fixdir == dir ? 1 : -1); - } + + int width1 = curwin->w_width - curwin_col_off(); + int width2 = width1 + curwin_col_off2(); + count = 1 + (curwin->w_skipcol - width1) / width2; + if (fixdir == FORWARD) + count = 2 + (linetabsize_eol(curwin, curwin->w_topline) + - curwin->w_skipcol - width1) / width2; + scroll_redraw(fixdir == FORWARD, count); + *curscount += count * (fixdir == dir ? 1 : -1); } curwin->w_p_sms = prev_sms; diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index aa24bceda5..7f4f909645 100644 --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -4345,4 +4345,13 @@ func Test_scroll_longline_scrolloff() bwipe! endfunc +" Benchmark test for Ctrl-F with 'nosmoothscroll' +func Test_scroll_longline_benchmark() + call setline(1, ['foo'->repeat(20000)] + ['']) + let start = reltime() + exe "normal! \" + call assert_inrange(0, 0.1, reltimefloat(reltime(start))) + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable diff --git a/src/version.c b/src/version.c index 55860d2d60..a2cfb00f32 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1385, /**/ 1384, /**/ From c952fd1b24fed70093009dbf53214431149a6d53 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 14 May 2025 20:14:30 +0200 Subject: [PATCH 248/633] patch 9.1.1386: MS-Windows: some minor problems building on AARCH64 Problem: MS-Windows: some minor problems building on AARCH64 Solution: Update Make_cyg_ming with aarch64 specific changes, document how to build on aarch64 using msys2 packages closes: #17048 Signed-off-by: Christian Brabandt --- src/INSTALLpc.txt | 81 +++++++++++++++++++++++++++++++++++++++---- src/Make_cyg_ming.mak | 21 +++++++++-- src/version.c | 2 ++ 3 files changed, 95 insertions(+), 9 deletions(-) diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt index c1099295fb..24bbe04f33 100644 --- a/src/INSTALLpc.txt +++ b/src/INSTALLpc.txt @@ -1,4 +1,4 @@ -INSTALLpc.txt - Installation of Vim on PC - Last Update: 2024 Dec 27 +INSTALLpc.txt - Installation of Vim on PC - Last Update: 2025 May 14 This file contains instructions for compiling Vim. If you already have an executable version of Vim, you don't need this. @@ -183,7 +183,9 @@ src/INSTALLpc.txt file for instructions. 2. MSYS2 with MinGW =================== -2.1. Setup the basic msys2 environment +2.1 Buidling x86 32bit or 64bit versions. + +2.1.1. Setup the basic msys2 environment Go to the official page of MSYS2: https://www.msys2.org Download an installer: @@ -208,7 +210,7 @@ If pacman complains that `catgets` and `libcatgets` conflict with another package, select `y` to remove them. -2.2. Install additional packages for building Vim +2.1.2. Install additional packages for building Vim The following package groups are required for building Vim: @@ -230,7 +232,7 @@ Or you can use the `pacboy` command to avoid long package names: The suffix ":" means that it disables the package name translation. The suffix ":m" means both i686 and x86_64. You can also use the ":i" suffix -to install only i686, and the ":x" suffix to install only x86_64. +to install only i686, the ":x" suffix for x86_64 and ":a" for "aarch64". (See `pacboy help` for the help.) See also the pacman page in ArchWiki for the general usage of pacman: @@ -241,7 +243,7 @@ MSYS2 has its own git package, and you can also install it via pacman: $ pacman -S git -2.3. Keep the build environment up-to-date +2.1.3. Keep the build environment up-to-date After you have installed the build environment, you may want to keep it up-to-date (E.g. always use the latest GCC). @@ -249,7 +251,7 @@ In that case, you just need to execute the command: $ pacman -Syu -2.4. Build Vim +2.1.4. Build Vim Select one of the following icon from the Start Menu: @@ -276,7 +278,7 @@ This command is in msys32.bat. Or for the 64 bit compiler use msys64.bat: If you have msys64 in another location you will need to adjust the paths for that. -2.5. Build Vim with Clang +2.1.5. Build Vim with Clang The following package group is required for building Vim with Clang: @@ -301,6 +303,71 @@ To build Vim with the address sanitizer (ASAN), execute the following command: CXX=clang++ make -f Make_ming.mak DEBUG=yes ASAN=yes +2.2 Buidling an Arch64 version of Vim + +2.2.1. Setup the basic msys2 environment + +See also https://www.msys2.org/wiki/arm64/ +Go to the official page of MSYS2: https://www.msys2.org + +Download the self-extracting archive: + +* msys2-base-x86_64-latest.sfx.exe + +Execute the self-extracting archive into a folder of your choice. +In the extracted folder, run clangarm64.exe +This will open a MSYS2 terminal window for you. + +Execute: + $ pacman -Syu + +And restart MSYS2 console. Then execute: + $ pacman -Su + + +2.2.2. Install additional packages for building Vim + + $ pacman -S mingw-w64-clang-aarch64-clang mingw-w64-clang-aarch64-toolchain base-devel git + +Or you can use the `pacboy` command to avoid long package names: + + $ pacboy -S base-devel: toolchain:a + +The suffix ":" means that it disables the package name translation. +The suffix ":m" means both i686 and x86_64. You can also use the ":i" suffix +to install only i686, the ":x" suffix for x86_64 and ":a" for "aarch64". +(See `pacboy help` for the help.) + +See also the pacman page in ArchWiki for the general usage of pacman: + https://wiki.archlinux.org/index.php/pacman + +2.2.3. Keep the build environment up-to-date + +After you have installed the build environment, you may want to keep it +up-to-date (E.g. always use the latest GCC). +In that case, you just need to execute the command: + $ pacman -Syu + + +2.2.4. Build Vim + +Before building look through notes for MinGW in part 3 below. + +Go to the source directory of Vim, then execute the make command. E.g.: + + CC=clang + CXX=clang++ + make -f Make_ming.mak + make -f Make_ming.mak GUI=yes + make -f Make_ming.mak GUI=no DEBUG=yes + +NOTE: you can't execute vim.exe in the MSYS2 console, open a normal Windows +console for that. + +To build Vim with the address sanitizer (ASAN), execute the following command: + + make -f Make_ming.mak DEBUG=yes ASAN=yes + 3. MinGW ======== diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak index c8d2707a9f..ab9c3b1e03 100644 --- a/src/Make_cyg_ming.mak +++ b/src/Make_cyg_ming.mak @@ -25,7 +25,7 @@ # http://www.matcode.com/mpress.htm # # Maintained by Ron Aaron et al. -# Updated 2014 Oct 13. +# Last Update: 2025 May 14. #>>>>> choose options: # FEATURES=[TINY | NORMAL | HUGE] @@ -58,6 +58,7 @@ GUI=yes # Set to no if you do not want to use DirectWrite (DirectX). # MinGW-w64 is needed, and ARCH should be set to i686 or x86-64. +# Note: Does not work with AARCH64 DIRECTX=yes # Disable Color emoji support @@ -66,6 +67,7 @@ DIRECTX=yes # Set to one of i386, i486, i586, i686 as the minimum target processor. # For amd64/x64 architecture set ARCH=x86-64 . +# For AARCH64, set to native # If not set, it will be automatically detected. (Normally i686 or x86-64.) #ARCH=i686 # Set to yes to cross-compile from unix; no=native Windows (and Cygwin). @@ -221,9 +223,14 @@ MKDIR = mkdir DIRSLASH = \\ endif endif + +# for AARCH64, set to clang +# CC := clang # set $CC to "gcc" unless it matches "clang" ifeq ($(findstring clang,$(CC)),) CC := $(CROSS_COMPILE)gcc +else ifeq ($(findstring clang,$(CXX)),) +CXX := clang++ endif # set $CXX to "g++" unless it matches "clang" ifeq ($(findstring clang,$(CXX)),) @@ -238,8 +245,15 @@ WINDRES := llvm-windres endif # Get the default ARCH. +# clang on AARCH64 does not like the native arch64-w64-windows-gnu +# so set to native instead ifndef ARCH +ARCH := $(shell $(CC) -dumpmachine) + ifeq ($(ARCH), aarch64-w64-windows-gnu) +ARCH := native + else ARCH := $(shell $(CC) -dumpmachine | sed -e "s/-.*//" -e "s/_/-/" -e "s/^mingw32$$/i686/") + endif endif @@ -718,6 +732,9 @@ XPM = xpm/x86 ifeq ($(ARCH),x86-64) XPM = xpm/x64 endif + ifeq ($(ARCH),native) +XPM = no + endif endif ifdef XPM ifneq ($(XPM),no) @@ -1186,7 +1203,7 @@ tee/tee.exe: tee/tee.c $(MAKE) -C tee -f Make_ming.mak CC='$(CC)' GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h - $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE) CXX='$(CXX)' STATIC_STDCPLUS=$(STATIC_STDCPLUS) + $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE) CXX=$(CXX) STATIC_STDCPLUS=$(STATIC_STDCPLUS) tags: notags $(CTAGS) $(TAGS_FILES) diff --git a/src/version.c b/src/version.c index a2cfb00f32..78a6e7b7c0 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1386, /**/ 1385, /**/ From 0077282c8209e5a3893d74a0176ab21895c5de4e Mon Sep 17 00:00:00 2001 From: Sean Dewar <6256228+seandewar@users.noreply.github.com> Date: Wed, 14 May 2025 20:16:52 +0200 Subject: [PATCH 249/633] patch 9.1.1387: memory leak when buflist_new() fails to reuse curbuf Problem: buflist_new() leaks ffname and fails to reuse curbuf when autocommands from buf_freeall change curbuf. Plus, a new buffer is not allocated in this case, despite what the comment above claims. Solution: Remove the condition so ffname is not leaked and so a new buffer is allocated like before v8.2.4791. It should not be possible for undo_ftplugin or buf_freeall autocommands to delete the buffer as they set b_locked, but to stay consistent with other uses of buf_freeall, guard against that anyway (Sean Dewar). Note that buf is set to NULL if it was deleted to guard against the (rare) possibility of messing up the "buf != curbuf" condition below if a new buffer happens to be allocated at the same address. closes: #17319 Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com> Signed-off-by: Christian Brabandt --- src/buffer.c | 7 +++++-- src/testdir/test_autocmd.vim | 25 +++++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index b4481b2f13..49ec77c7b1 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -2220,13 +2220,14 @@ buflist_new( buf = NULL; if ((flags & BLN_CURBUF) && curbuf_reusable()) { + bufref_T bufref; + buf = curbuf; + set_bufref(&bufref, buf); trigger_undo_ftplugin(buf, curwin); // It's like this buffer is deleted. Watch out for autocommands that // change curbuf! If that happens, allocate a new buffer anyway. buf_freeall(buf, BFA_WIPE | BFA_DEL); - if (buf != curbuf) // autocommands deleted the buffer! - return NULL; #ifdef FEAT_EVAL if (aborting()) // autocmds may abort script processing { @@ -2234,6 +2235,8 @@ buflist_new( return NULL; } #endif + if (!bufref_valid(&bufref)) + buf = NULL; // buf was deleted; allocate a new buffer } if (buf != curbuf || curbuf == NULL) { diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index db5558304d..26f7145652 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -5390,4 +5390,29 @@ func Test_eventignorewin_non_current() %bw! endfunc +func Test_reuse_curbuf_leak() + new bar + let s:bar_buf = bufnr() + augroup testing + autocmd! + autocmd BufDelete * ++once let s:triggered = 1 | execute s:bar_buf 'buffer' + augroup END + enew + let empty_buf = bufnr() + + " Old curbuf should be reused, firing BufDelete. As BufDelete changes curbuf, + " reusing the buffer would fail and leak the ffname. + edit foo + call assert_equal(1, s:triggered) + " Wasn't reused because the buffer changed, but buffer "foo" is still created. + call assert_equal(1, bufexists(empty_buf)) + call assert_notequal(empty_buf, bufnr()) + call assert_equal('foo', bufname()) + call assert_equal('bar', bufname(s:bar_buf)) + + unlet! s:bar_buf s:triggered + call CleanUpTestAuGroup() + %bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 78a6e7b7c0..7e6e862de6 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1387, /**/ 1386, /**/ From c6c72d165c90e94eee1d9107d82fb180ed138190 Mon Sep 17 00:00:00 2001 From: Luuk van Baal Date: Wed, 14 May 2025 20:21:55 +0200 Subject: [PATCH 250/633] patch 9.1.1388: Scrolling one line too far with 'nosmoothscroll' page scrolling Problem: One-off error in "count" to make "w_skipcol" zero with 'nosmoothscroll' page scrolling when last virtual line in a buffer line is exactly the entire window width. (Hirohito Higashi) Solution: Properly compute the smallest integer value necessary to make "w_skipcol" zero (Luuk van Baal) fixes: #17317 closes: #17318 Signed-off-by: Luuk van Baal Signed-off-by: Christian Brabandt --- src/move.c | 6 +++--- src/testdir/test_normal.vim | 17 +++++++++++++++++ src/version.c | 2 ++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/move.c b/src/move.c index 1c1eddeef5..e3771a5e26 100644 --- a/src/move.c +++ b/src/move.c @@ -3215,10 +3215,10 @@ static int scroll_with_sms(int dir, long count, long *curscount) int width1 = curwin->w_width - curwin_col_off(); int width2 = width1 + curwin_col_off2(); - count = 1 + (curwin->w_skipcol - width1) / width2; + count = 1 + (curwin->w_skipcol - width1 - 1) / width2; if (fixdir == FORWARD) - count = 2 + (linetabsize_eol(curwin, curwin->w_topline) - - curwin->w_skipcol - width1) / width2; + count = 1 + (linetabsize_eol(curwin, curwin->w_topline) + - curwin->w_skipcol - width1 + width2 - 1) / width2; scroll_redraw(fixdir == FORWARD, count); *curscount += count * (fixdir == dir ? 1 : -1); } diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index 7f4f909645..069651f6bc 100644 --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -4354,4 +4354,21 @@ func Test_scroll_longline_benchmark() bwipe! endfunc +" Test Ctrl-B with 'nosmoothscroll' not stuck with line exactly window width. +func Test_scroll_longline_winwidth() + 10new + call setline(1, ['']->repeat(20) + ['A'->repeat(20 * winwidth(0))] + ['']->repeat(20)) + exe "normal! G3\" + call assert_equal(22, line('w0')) + exe "normal! \" + call assert_equal(21, line('w0')) + exe "normal! \" + call assert_equal(11, line('w0')) + exe "normal! \" + call assert_equal(3, line('w0')) + exe "normal! \" + call assert_equal(1, line('w0')) + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable diff --git a/src/version.c b/src/version.c index 7e6e862de6..89c9fb0f3f 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1388, /**/ 1387, /**/ From 08db2f4f287722d8fcdc00ab6ca9a1b07ec5faaa Mon Sep 17 00:00:00 2001 From: glepnir Date: Wed, 14 May 2025 20:26:19 +0200 Subject: [PATCH 251/633] patch 9.1.1389: completion: still some issue when 'isexpand' contains a space Problem: Cannot get completion startcol when space is not the first trigger character (after v9.1.1383) Solution: Detect the next comma followed by a space in the option string and use in next compare loop (glepnir) closes: #17311 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/insexpand.c | 18 +++++++++++++----- src/testdir/test_ins_complete.vim | 7 +++++++ src/version.c | 2 ++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 5f5a5b9057..76fb8f3506 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -3660,20 +3660,28 @@ f_complete_match(typval_T *argvars, typval_T *rettv) } else { - char_u *p = ise; + char_u *p = ise; + char_u *p_space = NULL; + cur_end = before_cursor + (int)STRLEN(before_cursor); while (*p != NUL) { int len = 0; - if (*p == ',' && *(p+1) == ' ' && (*(p+2) == ',' || *(p+2) == NUL)) + if (p_space) { - part[0] = ' '; - len = 1; - p++; + len = p - p_space - 1; + memcpy(part, p_space + 1, len); + p_space = NULL; } else + { + char_u *next_comma = vim_strchr((*p == ',') ? p + 1 : p, ','); + if (next_comma && *(next_comma + 1) == ' ') + p_space = next_comma; + len = copy_option_part(&p, part, MAXPATHL, ","); + } if (len > 0 && len <= col) { diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 741cc9d9c9..8bce0e4573 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -4507,6 +4507,13 @@ func Test_complete_match() set ise=\ ,= call feedkeys("Sif true \:let g:result=complete_match()\", 'tx') call assert_equal([[8, ' ']], g:result) + call feedkeys("Slet a = \:let g:result=complete_match()\", 'tx') + call assert_equal([[7, '=']], g:result) + set ise={,\ ,= + call feedkeys("Sif true \:let g:result=complete_match()\", 'tx') + call assert_equal([[8, ' ']], g:result) + call feedkeys("S{ \:let g:result=complete_match()\", 'tx') + call assert_equal([[1, '{']], g:result) bw! unlet g:result diff --git a/src/version.c b/src/version.c index 89c9fb0f3f..98663991c4 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1389, /**/ 1388, /**/ From e89aef3f65388a8b627c77f250525f2a264716c5 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Wed, 14 May 2025 20:31:55 +0200 Subject: [PATCH 252/633] patch 9.1.1390: style: more wrong indentation Problem: style: more wrong indentation Solution: reformat a few more places (Yegappan Lakshmanan) closes: #17309 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/cmdexpand.c | 6 +++--- src/debugger.c | 4 ++-- src/diff.c | 6 +++--- src/dosinst.c | 4 ++-- src/evalwindow.c | 4 ++-- src/ex_docmd.c | 46 ++++++++++++++++++++++++---------------------- src/ex_getln.c | 2 +- src/findfile.c | 26 +++++++++++++------------- src/getchar.c | 2 +- src/gui_motif.c | 2 +- src/gui_xim.c | 2 +- src/gui_xmebw.c | 14 +++++++------- src/message.c | 6 +++--- src/move.c | 2 +- src/normal.c | 2 +- src/optionstr.c | 2 +- src/os_unix.c | 10 +++++----- src/os_vms.c | 6 +++--- src/os_win32.c | 4 ++-- src/quickfix.c | 2 +- src/regexp.c | 24 ++++++++++++------------ src/screen.c | 6 +++--- src/sha256.c | 2 +- src/strings.c | 16 ++++++++-------- src/structs.h | 6 +++--- src/term.c | 14 +++++++------- src/userfunc.c | 2 +- src/version.c | 6 ++++-- src/viminfo.c | 2 +- 29 files changed, 117 insertions(+), 113 deletions(-) diff --git a/src/cmdexpand.c b/src/cmdexpand.c index f7d3ac8c98..a6d8c8539b 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -4386,10 +4386,10 @@ f_getcompletion(typval_T *argvars, typval_T *rettv) } if (cmdline_fuzzy_completion_supported(&xpc)) - // when fuzzy matching, don't modify the search string - pat = vim_strsave(xpc.xp_pattern); + // when fuzzy matching, don't modify the search string + pat = vim_strsave(xpc.xp_pattern); else - pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context); + pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context); if (rettv_list_alloc(rettv) == OK && pat != NULL) { diff --git a/src/debugger.c b/src/debugger.c index 5508ea33fc..cb0b86f76d 100644 --- a/src/debugger.c +++ b/src/debugger.c @@ -395,9 +395,9 @@ do_showbacktrace(char_u *cmd) } if (SOURCING_LNUM != 0) - smsg(_("line %ld: %s"), (long)SOURCING_LNUM, cmd); + smsg(_("line %ld: %s"), (long)SOURCING_LNUM, cmd); else - smsg(_("cmd: %s"), cmd); + smsg(_("cmd: %s"), cmd); } /* diff --git a/src/diff.c b/src/diff.c index ec108e985e..171bffba35 100644 --- a/src/diff.c +++ b/src/diff.c @@ -781,7 +781,7 @@ diff_write_buffer(buf_T *buf, diffin_T *din, linenr_T start, linenr_T end) char_u *ptr; if (end < 0) - end = buf->b_ml.ml_line_count; + end = buf->b_ml.ml_line_count; if (buf->b_ml.ml_flags & ML_EMPTY) { @@ -2395,10 +2395,10 @@ diff_check_with_linestatus(win_T *wp, linenr_T lnum, int *linestatus) if (lnum >= wp->w_topline && lnum < wp->w_botline && !dp->is_linematched && diff_linematch(dp) && diff_check_sanity(curtab, dp)) - run_linematch_algorithm(dp); + run_linematch_algorithm(dp); if (dp->is_linematched) - return linematched_filler_lines(dp, idx, lnum, linestatus); + return linematched_filler_lines(dp, idx, lnum, linestatus); if (lnum < dp->df_lnum[idx] + dp->df_count[idx]) { diff --git a/src/dosinst.c b/src/dosinst.c index 116cc8fa40..3c2dc15720 100644 --- a/src/dosinst.c +++ b/src/dosinst.c @@ -2695,8 +2695,8 @@ request_choice(void) printf("\n\nInstall will do for you:\n"); for (i = 0; i < choice_count; ++i) - if (choices[i].active) - printf("%2d %s\n", i + 1, choices[i].text); + if (choices[i].active) + printf("%2d %s\n", i + 1, choices[i].text); printf("To change an item, enter its number\n\n"); printf("Enter item number, h (help), d (do it) or q (quit): "); } diff --git a/src/evalwindow.c b/src/evalwindow.c index f8b903d505..613df0f251 100644 --- a/src/evalwindow.c +++ b/src/evalwindow.c @@ -106,8 +106,8 @@ win_id2wp_tp(int id, tabpage_T **tpp) } #ifdef FEAT_PROP_POPUP // popup windows are in separate lists - FOR_ALL_TABPAGES(tp) - FOR_ALL_POPUPWINS_IN_TAB(tp, wp) + FOR_ALL_TABPAGES(tp) + FOR_ALL_POPUPWINS_IN_TAB(tp, wp) if (wp->w_id == id) { if (tpp != NULL) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 0dad7b1399..b87e3c76ea 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -467,36 +467,38 @@ restore_dbg_stuff(struct dbg_stuff *dsp) /* * Check if ffname differs from fnum. - * fnum is a buffer number. 0 == current buffer, 1-or-more must be a valid buffer ID. + * fnum is a buffer number. 0 == current buffer, 1-or-more must be a valid + * buffer ID. * ffname is a full path to where a buffer lives on-disk or would live on-disk. * */ static int is_other_file(int fnum, char_u *ffname) { - if (fnum != 0) - { - if (fnum == curbuf->b_fnum) - return FALSE; + if (fnum != 0) + { + if (fnum == curbuf->b_fnum) + return FALSE; - return TRUE; - } + return TRUE; + } - if (ffname == NULL) - return TRUE; + if (ffname == NULL) + return TRUE; - if (*ffname == NUL) - return FALSE; + if (*ffname == NUL) + return FALSE; - // TODO: Need a reliable way to know whether a buffer is meant to live on-disk - // !curbuf->b_dev_valid is not always available (example: missing on Windows) - if (curbuf->b_sfname != NULL - && *curbuf->b_sfname != NUL) - // This occurs with unsaved buffers. In which case `ffname` - // actually corresponds to curbuf->b_sfname - return fnamecmp(ffname, curbuf->b_sfname) != 0; + // TODO: Need a reliable way to know whether a buffer is meant to live + // on-disk !curbuf->b_dev_valid is not always available (example: missing + // on Windows) + if (curbuf->b_sfname != NULL + && *curbuf->b_sfname != NUL) + // This occurs with unsaved buffers. In which case `ffname` actually + // corresponds to curbuf->b_sfname + return fnamecmp(ffname, curbuf->b_sfname) != 0; - return otherfile(ffname); + return otherfile(ffname); } /* @@ -2715,7 +2717,7 @@ static char ex_error_buf[MSG_BUF_LEN]; * Uses a static buffer, only the last error will be kept. * "msg" will be translated, caller should use N_(). */ - char * + char * ex_errmsg(char *msg, char_u *arg) { vim_snprintf(ex_error_buf, MSG_BUF_LEN, _(msg), arg); @@ -9330,7 +9332,7 @@ ex_stopinsert(exarg_T *eap UNUSED) // when called from remote_expr in insert mode, make sure insert mode is // ended by adding K_NOP to the typeahead buffer if (vgetc_busy) - ins_char_typebuf(K_NOP, 0); + ins_char_typebuf(K_NOP, 0); #endif clearmode(); } @@ -10375,5 +10377,5 @@ get_pressedreturn(void) void set_pressedreturn(int val) { - ex_pressedreturn = val; + ex_pressedreturn = val; } diff --git a/src/ex_getln.c b/src/ex_getln.c index bbfe1e593e..a956023503 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -103,7 +103,7 @@ empty_pattern_magic(char_u *p, size_t len, magic_T magic_val) // remove trailing \v and the like while (len >= 2 && p[len - 2] == '\\' && vim_strchr((char_u *)"mMvVcCZ", p[len - 1]) != NULL) - len -= 2; + len -= 2; // true, if the pattern is empty, or the pattern ends with \| and magic is // set (or it ends with '|' and very magic is set) diff --git a/src/findfile.c b/src/findfile.c index fd2d69f298..49def2fe01 100644 --- a/src/findfile.c +++ b/src/findfile.c @@ -162,19 +162,19 @@ typedef struct ff_visited_list_hdr */ typedef struct ff_search_ctx_T { - ff_stack_T *ffsc_stack_ptr; - ff_visited_list_hdr_T *ffsc_visited_list; - ff_visited_list_hdr_T *ffsc_dir_visited_list; - ff_visited_list_hdr_T *ffsc_visited_lists_list; - ff_visited_list_hdr_T *ffsc_dir_visited_lists_list; - string_T ffsc_file_to_search; - string_T ffsc_start_dir; - string_T ffsc_fix_path; - string_T ffsc_wc_path; - int ffsc_level; - string_T *ffsc_stopdirs_v; - int ffsc_find_what; - int ffsc_tagfile; + ff_stack_T *ffsc_stack_ptr; + ff_visited_list_hdr_T *ffsc_visited_list; + ff_visited_list_hdr_T *ffsc_dir_visited_list; + ff_visited_list_hdr_T *ffsc_visited_lists_list; + ff_visited_list_hdr_T *ffsc_dir_visited_lists_list; + string_T ffsc_file_to_search; + string_T ffsc_start_dir; + string_T ffsc_fix_path; + string_T ffsc_wc_path; + int ffsc_level; + string_T *ffsc_stopdirs_v; + int ffsc_find_what; + int ffsc_tagfile; } ff_search_ctx_T; // locally needed functions diff --git a/src/getchar.c b/src/getchar.c index c26b4427a9..0d1bd8a281 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -2604,7 +2604,7 @@ parse_queued_messages(void) // If memory allocation fails during startup we'll exit but curbuf or // curwin could be NULL. if (curbuf == NULL || curwin == NULL) - return; + return; old_curbuf_fnum = curbuf->b_fnum; old_curwin_id = curwin->w_id; diff --git a/src/gui_motif.c b/src/gui_motif.c index ed721b52d0..94633b1878 100644 --- a/src/gui_motif.c +++ b/src/gui_motif.c @@ -1377,7 +1377,7 @@ gui_motif_update_mousemodel(vimmenu_T *menu) // When GUI hasn't started the menus have not been created. if (!gui.in_use) - return; + return; while (menu) { diff --git a/src/gui_xim.c b/src/gui_xim.c index 345b3a493f..7703bb789f 100644 --- a/src/gui_xim.c +++ b/src/gui_xim.c @@ -272,7 +272,7 @@ im_add_to_input(char_u *str, int len) gui_mch_mousehide(TRUE); } - static void + static void im_preedit_window_set_position(void) { int x, y, width, height; diff --git a/src/gui_xmebw.c b/src/gui_xmebw.c index 3d9519eeb0..440c1b96ad 100644 --- a/src/gui_xmebw.c +++ b/src/gui_xmebw.c @@ -505,7 +505,7 @@ draw_shadows(XmEnhancedButtonWidget eb) Boolean etched_in; if (!eb->primitive.shadow_thickness) - return; + return; if ((eb->core.width <= 2 * eb->primitive.highlight_thickness) || (eb->core.height <= 2 * eb->primitive.highlight_thickness)) @@ -748,9 +748,9 @@ draw_label(XmEnhancedButtonWidget eb, XEvent *event, Region region) static void Enter(Widget wid, - XEvent *event, - String *params UNUSED, - Cardinal *num_params UNUSED) + XEvent *event, + String *params UNUSED, + Cardinal *num_params UNUSED) { XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) wid; XmPushButtonCallbackStruct call_value; @@ -837,9 +837,9 @@ Enter(Widget wid, static void Leave(Widget wid, - XEvent *event, - String *params UNUSED, - Cardinal *num_params UNUSED) + XEvent *event, + String *params UNUSED, + Cardinal *num_params UNUSED) { XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)wid; XmPushButtonCallbackStruct call_value; diff --git a/src/message.c b/src/message.c index 376119e102..0f799b8f1b 100644 --- a/src/message.c +++ b/src/message.c @@ -4172,11 +4172,11 @@ msg_warn_missing_clipboard(void) if (!global_busy && !did_warn_clipboard) { #ifdef FEAT_CLIPBOARD - msg(_("W23: Clipboard register not available, using register 0")); + msg(_("W23: Clipboard register not available, using register 0")); #else - msg(_("W24: Clipboard register not available. See :h W24")); + msg(_("W24: Clipboard register not available. See :h W24")); #endif - did_warn_clipboard = TRUE; + did_warn_clipboard = TRUE; } } diff --git a/src/move.c b/src/move.c index e3771a5e26..d27114f13c 100644 --- a/src/move.c +++ b/src/move.c @@ -201,7 +201,7 @@ redraw_for_cursorcolumn(win_T *wp) * Returns the number of columns of overlap with buffer text, excluding the * extra padding on the ledge. */ - int + int sms_marker_overlap(win_T *wp, int extra2) { if (extra2 == -1) diff --git a/src/normal.c b/src/normal.c index 9231a4c239..c631651a03 100644 --- a/src/normal.c +++ b/src/normal.c @@ -4059,7 +4059,7 @@ nv_gotofile(cmdarg_T *cap) #endif if (!check_can_set_curbuf_disabled()) - return; + return; ptr = grab_file_name(cap->count1, &lnum); diff --git a/src/optionstr.c b/src/optionstr.c index f60957eb23..ce57cb4cec 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -1864,7 +1864,7 @@ did_set_cryptkey(optset_T *args) } # ifdef FEAT_SODIUM if (crypt_method_is_sodium(crypt_get_method_nr(curbuf))) - crypt_sodium_lock_key(args->os_newval.string); + crypt_sodium_lock_key(args->os_newval.string); # endif return NULL; diff --git a/src/os_unix.c b/src/os_unix.c index 714f203dfb..f5dea37f99 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4396,9 +4396,9 @@ mch_calc_cell_size(struct cellsize *cs_out) if (retval == -1 || ws.ws_col == 0 || ws.ws_row == 0) { - cs_out->cs_xpixel = -1; - cs_out->cs_ypixel = -1; - return; + cs_out->cs_xpixel = -1; + cs_out->cs_ypixel = -1; + return; } // calculate parent tty's pixel per cell. @@ -6969,9 +6969,9 @@ mch_expand_wildcards( } if (shell_style == STYLE_ECHO) { - if (strstr((char *)gettail(p_sh), "bash") != NULL) + if (strstr((char *)gettail(p_sh), "bash") != NULL) shell_style = STYLE_GLOBSTAR; - else if (strstr((char *)gettail(p_sh), "sh") != NULL) + else if (strstr((char *)gettail(p_sh), "sh") != NULL) shell_style = STYLE_VIMGLOB; } diff --git a/src/os_vms.c b/src/os_vms.c index 23854dd3f0..0a67a6b75d 100644 --- a/src/os_vms.c +++ b/src/os_vms.c @@ -686,9 +686,9 @@ vms_fixfilename(void *instring) } #ifdef DEBUG - char *tmpbuf = NULL; - tmpbuf = ALLOC_MULT(char, buflen); - strcpy(tmpbuf, instring); + char *tmpbuf = NULL; + tmpbuf = ALLOC_MULT(char, buflen); + strcpy(tmpbuf, instring); #endif Fspec_Rms = buf; // for decc$to_vms diff --git a/src/os_win32.c b/src/os_win32.c index 0b6fecd7e8..740c35a0ab 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -5089,8 +5089,8 @@ mch_system_piped(char *cmd, int options) // About "Inherit handles" being TRUE: this command can be litigious, // handle inheritance was deactivated for pending temp file, but, if we // deactivate it, the pipes don't work for some reason. - vim_create_process(p, TRUE, CREATE_DEFAULT_ERROR_MODE, - &si, &pi, NULL, NULL); + vim_create_process(p, TRUE, CREATE_DEFAULT_ERROR_MODE, + &si, &pi, NULL, NULL); if (p != cmd) vim_free(p); diff --git a/src/quickfix.c b/src/quickfix.c index 9c5ad9381a..d012ea0d72 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -4759,7 +4759,7 @@ ex_cbottom(exarg_T *eap) * Return the number of the current entry (line number in the quickfix * window). */ - linenr_T + linenr_T qf_current_entry(win_T *wp) { qf_info_T *qi = ql_info; diff --git a/src/regexp.c b/src/regexp.c index 32a721f9f3..e37dd3c5bd 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -410,15 +410,15 @@ static int nextchr; // used for ungetchr() typedef struct { - char_u *regparse; - int prevchr_len; - int curchr; - int prevchr; - int prevprevchr; - int nextchr; - int at_start; - int prev_at_start; - int regnpar; + char_u *regparse; + int prevchr_len; + int curchr; + int prevchr; + int prevprevchr; + int nextchr; + int at_start; + int prev_at_start; + int regnpar; } parse_state_T; static void initchr(char_u *); @@ -1641,9 +1641,9 @@ re_mult_next(char *what) { if (re_multi_type(peekchr()) == MULTI_MULT) { - semsg(_(e_nfa_regexp_cannot_repeat_str), what); - rc_did_emsg = TRUE; - return FAIL; + semsg(_(e_nfa_regexp_cannot_repeat_str), what); + rc_did_emsg = TRUE; + return FAIL; } return OK; } diff --git a/src/screen.c b/src/screen.c index ab37e1d61f..4fcd9d3daa 100644 --- a/src/screen.c +++ b/src/screen.c @@ -1580,7 +1580,7 @@ end_search_hl(void) } #endif - static void + static void screen_start_highlight(int attr) { attrentry_T *aep = NULL; @@ -1738,7 +1738,7 @@ screen_start_highlight(int attr) } } - void + void screen_stop_highlight(void) { int do_ME = FALSE; // output T_ME code @@ -3544,7 +3544,7 @@ screen_ins_lines( * - redrawing for a callback and there is a modeless selection * - there is a popup window */ - if (!screen_valid(TRUE) + if (!screen_valid(TRUE) || line_count <= 0 || line_count > p_ttyscroll || end > Rows #ifdef FEAT_CLIPBOARD diff --git a/src/sha256.c b/src/sha256.c index 9c79e0df1e..6a73a1ce43 100644 --- a/src/sha256.c +++ b/src/sha256.c @@ -40,7 +40,7 @@ (b)[(i) + 3] = (char_u)((n) ); \ } - void + void sha256_start(context_sha256_T *ctx) { ctx->total[0] = 0; diff --git a/src/strings.c b/src/strings.c index 16a09f8307..c356c36665 100644 --- a/src/strings.c +++ b/src/strings.c @@ -601,14 +601,14 @@ vim_strnicmp_asc(char *s1, char *s2, size_t len) while (len > 0) { - i = TOLOWER_ASC(*s1) - TOLOWER_ASC(*s2); - if (i != 0) - break; // this character is different - if (*s1 == NUL) - break; // strings match until NUL - ++s1; - ++s2; - --len; + i = TOLOWER_ASC(*s1) - TOLOWER_ASC(*s2); + if (i != 0) + break; // this character is different + if (*s1 == NUL) + break; // strings match until NUL + ++s1; + ++s2; + --len; } return i; } diff --git a/src/structs.h b/src/structs.h index caf61eda8b..1cb70b80f7 100644 --- a/src/structs.h +++ b/src/structs.h @@ -4579,9 +4579,9 @@ typedef struct } tagname_T; typedef struct { - UINT32_T total[2]; - UINT32_T state[8]; - char_u buffer[64]; + UINT32_T total[2]; + UINT32_T state[8]; + char_u buffer[64]; } context_sha256_T; /* diff --git a/src/term.c b/src/term.c index 5c030ed20a..03bad0d6a9 100644 --- a/src/term.c +++ b/src/term.c @@ -7302,13 +7302,13 @@ update_tcap(int attr) return; while (p->bt_string != NULL) { - if (p->bt_entry == (int)KS_ME) - p->bt_string = &ksme_str[0]; - else if (p->bt_entry == (int)KS_MR) - p->bt_string = &ksmr_str[0]; - else if (p->bt_entry == (int)KS_MD) - p->bt_string = &ksmd_str[0]; - ++p; + if (p->bt_entry == (int)KS_ME) + p->bt_string = &ksme_str[0]; + else if (p->bt_entry == (int)KS_MR) + p->bt_string = &ksmr_str[0]; + else if (p->bt_entry == (int)KS_MD) + p->bt_string = &ksmd_str[0]; + ++p; } } diff --git a/src/userfunc.c b/src/userfunc.c index 76cfd4413f..b9093a0d29 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -7247,7 +7247,7 @@ find_hi_in_scoped_ht(char_u *name, hashtab_T **pht) char_u *varname; if (current_funccal == NULL || current_funccal->fc_func->uf_scoped == NULL) - return NULL; + return NULL; // Search in parent scope, which can be referenced from a lambda. current_funccal = current_funccal->fc_func->uf_scoped; diff --git a/src/version.c b/src/version.c index 98663991c4..5475e0ad1a 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1390, /**/ 1389, /**/ @@ -3815,9 +3817,9 @@ list_version(void) # if defined(USE_GTK3) msg_puts(_("with GTK3 GUI.")); # elif defined(FEAT_GUI_GNOME) - msg_puts(_("with GTK2-GNOME GUI.")); + msg_puts(_("with GTK2-GNOME GUI.")); # else - msg_puts(_("with GTK2 GUI.")); + msg_puts(_("with GTK2 GUI.")); # endif #elif defined(FEAT_GUI_MOTIF) msg_puts(_("with X11-Motif GUI.")); diff --git a/src/viminfo.c b/src/viminfo.c index f1e1fc372b..5e4caf81cd 100644 --- a/src/viminfo.c +++ b/src/viminfo.c @@ -1606,7 +1606,7 @@ static yankreg_T *y_read_regs = NULL; static void prepare_viminfo_registers(void) { - y_read_regs = ALLOC_CLEAR_MULT(yankreg_T, NUM_REGISTERS); + y_read_regs = ALLOC_CLEAR_MULT(yankreg_T, NUM_REGISTERS); } static void From 7200eae2126afd4518244c2d70638a7d8d64b26f Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 14 May 2025 21:03:39 +0200 Subject: [PATCH 253/633] git: git: ignore more style changes from v9.1.1390 Signed-off-by: Christian Brabandt --- .git-blame-ignore-revs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 5f3160d6d8..bae6b6c6f5 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -23,3 +23,5 @@ c2a9000bc1b4a2cbcfeef55450c184b16906d910 19e1dd6b6aeb96d64122332a8c3d17b9d5ca007b # Patch v9.1.1372 a4a00a7ad0cfa26685c057c11a09bec2c962346a +# Patch v9.1.1390 +e89aef3f65388a8b627c77f250525f2a264716c5 From be5bd4d6292fddcc103091407792730aaa48cc48 Mon Sep 17 00:00:00 2001 From: Naruhiko Nishino Date: Wed, 14 May 2025 21:20:28 +0200 Subject: [PATCH 254/633] patch 9.1.1391: Vim does not have a vertical tabpanel Problem: Vim does not have a tabpanel Solution: include the tabpanel feature (Naruhiko Nishino, thinca) closes: #17263 Co-authored-by: thinca Signed-off-by: Naruhiko Nishino Signed-off-by: Christian Brabandt --- Filelist | 2 + runtime/doc/builtin.txt | 4 +- runtime/doc/index.txt | 3 +- runtime/doc/options.txt | 84 ++- runtime/doc/syntax.txt | 8 +- runtime/doc/tabpage.txt | 78 ++- runtime/doc/tags | 16 + runtime/doc/various.txt | 9 +- runtime/doc/version9.txt | 12 +- runtime/optwin.vim | 7 +- runtime/syntax/vim.vim | 25 +- src/Make_ami.mak | 1 + src/Make_cyg_ming.mak | 1 + src/Make_mvc.mak | 4 + src/Make_vms.mms | 6 + src/Makefile | 11 + src/change.c | 6 + src/clipboard.c | 2 +- src/drawline.c | 14 +- src/drawscreen.c | 62 +- src/edit.c | 4 +- src/errors.h | 2 + src/evalfunc.c | 7 + src/ex_cmdidxs.h | 20 +- src/ex_cmds.c | 6 + src/ex_cmds.h | 3 + src/ex_docmd.c | 26 +- src/feature.h | 7 + src/fileio.c | 3 + src/globals.h | 4 + src/gui.c | 5 + src/highlight.c | 3 + src/misc2.c | 3 + src/mouse.c | 93 ++- src/netbeans.c | 3 + src/option.c | 15 + src/option.h | 8 + src/optiondefs.h | 17 +- src/optionstr.c | 30 + src/popupmenu.c | 57 +- src/popupwin.c | 14 +- src/proto.h | 3 + src/proto/option.pro | 1 + src/proto/optionstr.pro | 2 + src/proto/tabpanel.pro | 7 + src/screen.c | 120 ++-- src/structs.h | 3 + src/tabpanel.c | 660 ++++++++++++++++++ src/term.c | 9 +- src/terminal.c | 9 +- src/testdir/Make_all.mak | 2 + .../dumps/Test_tabpanel_commandline_0.dump | 10 + .../dumps/Test_tabpanel_commandline_1.dump | 10 + ...abpanel_dont_overflow_into_tabpanel_0.dump | 10 + .../dumps/Test_tabpanel_drawing_00.dump | 6 + .../dumps/Test_tabpanel_drawing_01.dump | 6 + .../dumps/Test_tabpanel_drawing_02.dump | 6 + .../dumps/Test_tabpanel_drawing_03.dump | 6 + .../dumps/Test_tabpanel_drawing_04.dump | 6 + .../dumps/Test_tabpanel_drawing_05.dump | 6 + .../dumps/Test_tabpanel_drawing_06.dump | 6 + .../dumps/Test_tabpanel_drawing_07.dump | 6 + .../dumps/Test_tabpanel_drawing_08.dump | 6 + .../Test_tabpanel_drawing_fill_tailing_0.dump | 10 + .../dumps/Test_tabpanel_drawing_pum_0.dump | 10 + .../dumps/Test_tabpanel_drawing_pum_1.dump | 10 + .../Test_tabpanel_drawing_scrolling_0.dump | 10 + .../Test_tabpanel_drawing_scrolling_1.dump | 10 + .../Test_tabpanel_drawing_scrolling_2.dump | 10 + .../Test_tabpanel_drawing_scrolling_3.dump | 10 + ...Test_tabpanel_drawing_with_popupwin_0.dump | 10 + ...el_eval_tabpanel_statusline_tabline_0.dump | 10 + ...el_eval_tabpanel_statusline_tabline_1.dump | 10 + ...panel_eval_tabpanel_with_linebreaks_0.dump | 10 + ...panel_eval_tabpanel_with_linebreaks_1.dump | 10 + .../dumps/Test_tabpanel_many_tabpages_0.dump | 10 + .../dumps/Test_tabpanel_many_tabpages_1.dump | 10 + .../dumps/Test_tabpanel_many_tabpages_2.dump | 10 + .../dumps/Test_tabpanel_many_tabpages_3.dump | 10 + .../dumps/Test_tabpanel_many_tabpages_4.dump | 10 + ..._noeval_tabpanel_statusline_tabline_0.dump | 10 + ..._noeval_tabpanel_statusline_tabline_1.dump | 10 + .../Test_tabpanel_tabline_and_tabpanel_0.dump | 10 + ...st_tabpanel_vert_is_multibytes_left_0.dump | 10 + ...st_tabpanel_vert_is_multibytes_left_1.dump | 10 + ...st_tabpanel_vert_is_multibytes_left_2.dump | 10 + ...st_tabpanel_vert_is_multibytes_left_3.dump | 10 + ...t_tabpanel_vert_is_multibytes_right_0.dump | 10 + ...t_tabpanel_vert_is_multibytes_right_1.dump | 10 + ...t_tabpanel_vert_is_multibytes_right_2.dump | 10 + ...t_tabpanel_vert_is_multibytes_right_3.dump | 10 + src/testdir/dumps/Test_tabpanel_visual_0.dump | 10 + src/testdir/dumps/Test_tabpanel_visual_1.dump | 10 + src/testdir/dumps/Test_tabpanel_visual_2.dump | 10 + src/testdir/gen_opt_test.vim | 24 +- src/testdir/test_cmdline.vim | 5 + src/testdir/test_tabpanel.vim | 480 +++++++++++++ src/version.c | 17 +- src/vim.h | 15 +- src/window.c | 42 +- 100 files changed, 2314 insertions(+), 164 deletions(-) create mode 100644 src/proto/tabpanel.pro create mode 100644 src/tabpanel.c create mode 100644 src/testdir/dumps/Test_tabpanel_commandline_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_commandline_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_00.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_01.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_02.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_03.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_04.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_05.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_06.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_07.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_08.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_scrolling_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_scrolling_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_scrolling_2.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_scrolling_3.dump create mode 100644 src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump create mode 100644 src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump create mode 100644 src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump create mode 100644 src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump create mode 100644 src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump create mode 100644 src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_2.dump create mode 100644 src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_3.dump create mode 100644 src/testdir/dumps/Test_tabpanel_visual_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_visual_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_visual_2.dump create mode 100644 src/testdir/test_tabpanel.vim diff --git a/Filelist b/Filelist index 85e4d329f1..df10c6d0e9 100644 --- a/Filelist +++ b/Filelist @@ -151,6 +151,7 @@ SRC_ALL = \ src/strings.c \ src/structs.h \ src/syntax.c \ + src/tabpanel.c \ src/tag.c \ src/term.c \ src/terminal.c \ @@ -335,6 +336,7 @@ SRC_ALL = \ src/proto/spellsuggest.pro \ src/proto/strings.pro \ src/proto/syntax.pro \ + src/proto/tabpanel.pro \ src/proto/tag.pro \ src/proto/term.pro \ src/proto/terminal.pro \ diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index b9d0719a16..717f13a6ff 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -1,4 +1,4 @@ -*builtin.txt* For Vim version 9.1. Last change: 2025 May 09 +*builtin.txt* For Vim version 9.1. Last change: 2025 May 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -4730,6 +4730,8 @@ getmousepos() *getmousepos()* If not over a window, e.g. when in the command line, then only "screenrow" and "screencol" are valid, the others are zero. + When on the |tabpanel|, "wincol" value is zero. + When on the status line below a window or the vertical separator right of a window, the "line" and "column" values are zero. diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt index 024102cdda..00a09ae145 100644 --- a/runtime/doc/index.txt +++ b/runtime/doc/index.txt @@ -1,4 +1,4 @@ -*index.txt* For Vim version 9.1. Last change: 2025 Mar 18 +*index.txt* For Vim version 9.1. Last change: 2025 May 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1583,6 +1583,7 @@ tag command action ~ |:redraw| :redr[aw] force a redraw of the display |:redrawstatus| :redraws[tatus] force a redraw of the status line(s) |:redrawtabline| :redrawt[abline] force a redraw of the tabline +|:redrawtabpanel| :redrawtabp[anel] force a redraw of the tabpanel |:registers| :reg[isters] display the contents of registers |:resize| :res[ize] change current window height |:retab| :ret[ab] change tab size diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 5563a05243..274d56e196 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 May 10 +*options.txt* For Vim version 9.1. Last change: 2025 May 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -3657,11 +3657,12 @@ A jump table for the options with a short description can be found at |Q_op|. trunc '>' truncated text in the |ins-completion-menu|. truncrl '<' same as "trunc" in 'rightleft' mode + tpl_vert '|' vertical separators of 'tabpanel' Any one that is omitted will fall back to the default. Example: > - :set fillchars=stl:\ ,stlnc:\ ,vert:\|,fold:-,diff:- + :set fillchars=stl:\ ,stlnc:\ ,vert:\|,fold:-,diff:-,tpl_vert:\| < All items support single-byte and multibyte characters. But double-width characters are not supported. |E1512| @@ -7689,6 +7690,20 @@ A jump table for the options with a short description can be found at |Q_op|. line. See |tab-page| for more information about tab pages. + *'showtabpanel'* *'stpl'* +'showtabpanel' 'stpl' number (default 0) + global + {not in Vi} + {not available when compiled without the |+tabpanel| + feature} + The value of this option specifies when the |tabpanel| with tab page + labels will be displayed: + 0: never + 1: only if there are at least two tab pages + 2: always + This is for the non-GUI implementation of the tabpanel only. + See |tab-page| for more information about tab page labels. + *'sidescroll'* *'ss'* 'sidescroll' 'ss' number (default 0) global @@ -8408,6 +8423,71 @@ A jump table for the options with a short description can be found at |Q_op|. Maximum number of tab pages to be opened by the |-p| command line argument or the ":tab all" command. |tabpage| + *'tabpanel'* *'tpl'* *g:actual_curtabpage* +'tabpanel' 'tpl' string (default empty) + global + {not in Vi} + When non empty, this option determines the content of the |tabpanel|. + The option consists of printf style '%' items interspersed with + normal text, similar to the 'statusline' or 'tabline'. + + When changing something that is used in 'tabpanel' that does not + trigger it to be updated, use |:redrawtabpanel|. + This option cannot be set in a modeline when 'modelineexpr' is off. + + You can use |g:actual_curtabpage| within a function assigned to + tabpanel. |g:actual_curtabpage| represents current tab's label number. + This option can contain line breaks: +> + set tabpanel=%!TabPanel() + function! TabPanel() abort + return printf("(%2d)\n %%f", g:actual_curtabpage) + endfunction +< + The result is: +> + +-----------+--------------------------------- + |(1) | + | ~/aaa.txt| + |(2) | + | ~/.vimrc | + | | + | | + | | +< + + *'tabpanelopt'* *'tplo'* +'tabpanelopt' 'tplo' string (default "") + global + {not in Vi} + Optional settings for the |tabpanel|, It can consist of the following + items. Items must be separated by a comma. + + align:{text} Specified the position of tabpanel. + Currently supported positions are: + + left left-aligned + right right-aligned + + (default "left") + + columns:{n} Use the size (in char) of tabpanel. + The tabpanel is never shown when using zero + or less than the size of Vim window. + (default 20) + + vert Use a vertical separator for tabpanel. + This vertical separator is used "tpl_vert" of + 'fillchars'. + (default off) + + Examples: > + :set tabpanelopt=columns:16,align:right + :set tabpanelopt= + :set tabpanelopt=vert,align:right + :set tabpanelopt=columns:16 +< + *'tabstop'* *'ts'* 'tabstop' 'ts' number (default 8) local to buffer diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index ed72830126..c33b356c3e 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2025 Apr 28 +*syntax.txt* For Vim version 9.1. Last change: 2025 May 10 VIM REFERENCE MANUAL by Bram Moolenaar @@ -5991,6 +5991,12 @@ TabLine Tab pages line, not active tab page label. TabLineFill Tab pages line, where there are no labels. *hl-TabLineSel* TabLineSel Tab pages line, active tab page label. + *hl-TabPanel* +TabPanel TabPanel, not active tab page label. + *hl-TabPanelFill* +TabPanelFill TabPanel, where there are no labels. + *hl-TabPanelSel* +TabPanelSel TabPanel, active tab page label. *hl-Terminal* Terminal |terminal| window (see |terminal-size-color|). *hl-Title* diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt index afc2512509..e17d53326b 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 Jul 12 +*tabpage.txt* For Vim version 9.1. Last change: 2025 May 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -14,7 +14,8 @@ when used in combination with more than one tab page. 2. Commands |tab-page-commands| 3. Other items |tab-page-other| 4. Setting 'tabline' |setting-tabline| -5. Setting 'guitablabel' |setting-guitablabel| +5. Setting 'tabpanel' |setting-tabpanel| +6. Setting 'guitablabel' |setting-guitablabel| {not able to use multiple tab pages when the |+windows| feature was disabled at compile time} @@ -364,8 +365,8 @@ The 'tabline' option allows you to define your preferred way to tab pages labels. This isn't easy, thus an example will be given here. For basics see the 'statusline' option. The same items can be used in the -'tabline' option. Additionally, the |tabpagebuflist()|, |tabpagenr()| and -|tabpagewinnr()| functions are useful. +'tabline' and 'tabpanel' option. Additionally, the |tabpagebuflist()|, +|tabpagenr()| and |tabpagewinnr()| functions are useful. Since the number of tab labels will vary, you need to use an expression for the whole option. Something like: > @@ -418,7 +419,74 @@ clever way when there is not enough room. Check the 'columns' option for the space available. ============================================================================== -5. Setting 'guitablabel' *setting-guitablabel* +5. Setting 'tabpanel' *tabpanel* *setting-tabpanel* + +The tabpanel is a vertical sidebar that displays tab page labels along the +side of the window. It looks like this: +> + +-----------+---------------------------------- + |(1) |text text text text text text text + | ~/aaa.txt|text text text text text text text + |(2) |text text text text text text text + | ~/.vimrc |text text text text text text text + |(3) |text text text text text text text + | ~/bbb.js |text text text text text text text + | ~/ccc.css|text text text text text text text + | |text text text text text text text + | |text text text text text text text + | |text text text text text text text +< +To configure the tabpanel, use following options: 'tabpanel', +'showtabpanel', 'tabpanelopt'. +The 'tabpanel' and 'showtabpanel' options are function similar to the +'statusline' or 'tabline'. + +The "columns:" of 'tabpanelopt' option specifies the width of the tabpanel: +> + +------ This width + | + <----+-----> + +-----------+---------------------------------- + |(1) |text text text text text text text + | ~/aaa.txt|text text text text text text text + |(2) |text text text text text text text +< +The "align:" of 'tabpanelopt' option determines whether the tabpanel is +displayed on the right side of the window: +> + +----------------------------------+----------- + |text text text text text text text|(1) + |text text text text text text text| ~/aaa.txt + |text text text text text text text|(2) +< +The "wrap" of 'tabpanelopt' option controls whether lines in tabpanel are +wraped: +> + +-----------+---------------------------------- + |(1) |text text text text text text text + | ~/long_lo|text text text text text text text + |ng_file_nam|text text text text text text text + |e.txt |text text text text text text text + |(2) |text text text text text text text + +The "vert" of 'tabpanelopt' option defines whether a vertical separator is +displayed between the tabpanel and the main window: +> + +------ This is + | + v + +-----------+---------------------------------- + |(1) |text text text text text text text + | ~/aaa.txt|text text text text text text text + |(2) |text text text text text text text +< +The vertical separator is used "tpl_vert" of 'fillchars'. + +You can customize the appearance of the tab page labels using the highlight +groups: |hl-TabPanel| |hl-TabPanelSel| |hl-TabPanelFill| + +============================================================================== +6. Setting 'guitablabel' *setting-guitablabel* When the GUI tab pages line is displayed, 'guitablabel' can be used to specify the label to display for each tab page. Unlike 'tabline', which diff --git a/runtime/doc/tags b/runtime/doc/tags index b820c9607f..e58621298a 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -959,6 +959,7 @@ $quote eval.txt /*$quote* 'showmatch' options.txt /*'showmatch'* 'showmode' options.txt /*'showmode'* 'showtabline' options.txt /*'showtabline'* +'showtabpanel' options.txt /*'showtabpanel'* 'shq' options.txt /*'shq'* 'si' options.txt /*'si'* 'sidescroll' options.txt /*'sidescroll'* @@ -1012,6 +1013,7 @@ $quote eval.txt /*$quote* 'statusline' options.txt /*'statusline'* 'stl' options.txt /*'stl'* 'stmp' options.txt /*'stmp'* +'stpl' options.txt /*'stpl'* 'sts' options.txt /*'sts'* 'su' options.txt /*'su'* 'sua' options.txt /*'sua'* @@ -1183,6 +1185,8 @@ $quote eval.txt /*$quote* 'tabclose' options.txt /*'tabclose'* 'tabline' options.txt /*'tabline'* 'tabpagemax' options.txt /*'tabpagemax'* +'tabpanel' options.txt /*'tabpanel'* +'tabpanelopt' options.txt /*'tabpanelopt'* 'tabstop' options.txt /*'tabstop'* 'tag' options.txt /*'tag'* 'tagbsearch' options.txt /*'tagbsearch'* @@ -1233,6 +1237,8 @@ $quote eval.txt /*$quote* 'toolbar' options.txt /*'toolbar'* 'toolbariconsize' options.txt /*'toolbariconsize'* 'top' options.txt /*'top'* +'tpl' options.txt /*'tpl'* +'tplo' options.txt /*'tplo'* 'tpm' options.txt /*'tpm'* 'tr' options.txt /*'tr'* 'ts' options.txt /*'ts'* @@ -1478,6 +1484,7 @@ $quote eval.txt /*$quote* +sun_workshop various.txt /*+sun_workshop* +syntax various.txt /*+syntax* +system() various.txt /*+system()* ++tabpanel various.txt /*+tabpanel* +tag_any_white various.txt /*+tag_any_white* +tag_binary various.txt /*+tag_binary* +tag_old_static various.txt /*+tag_old_static* @@ -3141,6 +3148,8 @@ $quote eval.txt /*$quote* :redrawstatus various.txt /*:redrawstatus* :redrawt various.txt /*:redrawt* :redrawtabline various.txt /*:redrawtabline* +:redrawtabp various.txt /*:redrawtabp* +:redrawtabpanel various.txt /*:redrawtabpanel* :reg change.txt /*:reg* :registers change.txt /*:registers* :res windows.txt /*:res* @@ -4630,6 +4639,7 @@ E1539 vim9.txt /*E1539* E154 helphelp.txt /*E154* E1540 eval.txt /*E1540* E1541 vi_diff.txt /*E1541* +E1547 various.txt /*E1547* E155 sign.txt /*E155* E156 sign.txt /*E156* E157 sign.txt /*E157* @@ -7589,6 +7599,7 @@ g:Netrw_corehandler pi_netrw.txt /*g:Netrw_corehandler* g:Netrw_funcref pi_netrw.txt /*g:Netrw_funcref* g:Openprg eval.txt /*g:Openprg* g:actual_curbuf options.txt /*g:actual_curbuf* +g:actual_curtabpage options.txt /*g:actual_curtabpage* g:actual_curwin options.txt /*g:actual_curwin* g:ada#Comment ft_ada.txt /*g:ada#Comment* g:ada#Ctags_Kinds ft_ada.txt /*g:ada#Ctags_Kinds* @@ -8272,6 +8283,9 @@ hl-TOhtmlProgress syntax.txt /*hl-TOhtmlProgress* hl-TabLine syntax.txt /*hl-TabLine* hl-TabLineFill syntax.txt /*hl-TabLineFill* hl-TabLineSel syntax.txt /*hl-TabLineSel* +hl-TabPanel syntax.txt /*hl-TabPanel* +hl-TabPanelFill syntax.txt /*hl-TabPanelFill* +hl-TabPanelSel syntax.txt /*hl-TabPanelSel* hl-Terminal syntax.txt /*hl-Terminal* hl-Title syntax.txt /*hl-Title* hl-ToolbarButton gui.txt /*hl-ToolbarButton* @@ -10063,6 +10077,7 @@ settagstack() builtin.txt /*settagstack()* setting-guifont gui.txt /*setting-guifont* setting-guitablabel tabpage.txt /*setting-guitablabel* setting-tabline tabpage.txt /*setting-tabline* +setting-tabpanel tabpage.txt /*setting-tabpanel* setuid change.txt /*setuid* setwinvar() builtin.txt /*setwinvar()* sftp pi_netrw.txt /*sftp* @@ -10653,6 +10668,7 @@ tabpage.txt tabpage.txt /*tabpage.txt* tabpagebuflist() builtin.txt /*tabpagebuflist()* tabpagenr() builtin.txt /*tabpagenr()* tabpagewinnr() builtin.txt /*tabpagewinnr()* +tabpanel tabpage.txt /*tabpanel* tag tagsrch.txt /*tag* tag-! tagsrch.txt /*tag-!* tag-binary-search tagsrch.txt /*tag-binary-search* diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt index b68c336f3f..00b79f41fa 100644 --- a/runtime/doc/various.txt +++ b/runtime/doc/various.txt @@ -1,4 +1,4 @@ -*various.txt* For Vim version 9.1. Last change: 2025 Apr 21 +*various.txt* For Vim version 9.1. Last change: 2025 May 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -36,6 +36,12 @@ CTRL-L Clear and redraw the screen. The redraw may happen 'tabline' includes an item that doesn't trigger automatic updating. + *E1547* *:redrawtabp* *:redrawtabpanel* +:redrawtabp[anel] Redraw the tabline. Useful to update the tabpanel + when 'tabpanel' includes an item that doesn't trigger + automatic updating. + + *N* When entering a number: Remove the last digit. Note: if you like to use for this, add this @@ -491,6 +497,7 @@ N *+statusline* Options 'statusline', 'rulerformat' and special - *+sun_workshop* Removed: |workshop| N *+syntax* Syntax highlighting |syntax| *+system()* Unix only: opposite of |+fork| +H *+tabpanel* Support for |tabpanel| T *+tag_binary* binary searching in tags file |tag-binary-search| - *+tag_old_static* Removed; method for static tags |tag-old-static| - *+tag_any_white* Removed; was to allow any white space in tags files diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 371e4b314b..52428428e4 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 May 08 +*version9.txt* For Vim version 9.1. Last change: 2025 May 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41584,6 +41584,8 @@ completion and command-line completion in |ins-completion-menu|, see Support for the |Tuple| data type in Vim script and Vim9 script. +Support for a vertical |tabpanel| window similar to the 'tabline'. + *changed-9.2* Changed~ ------- @@ -41732,6 +41734,9 @@ Highlighting: ~ |hl-PmenuMatch| Popup menu: highlighting of matched text |hl-PmenuMatchSel| Popup menu: highlighting of matched text in selected line +|hl-TabPanel| |tabpanel|: not active tab page label +|hl-TabPanelFill| |tabpanel|: filler space +|hl-TabPanelSel| |tabpanel|: active tab page label Commands: ~ @@ -41742,6 +41747,7 @@ Ex-Commands: ~ |:iput| like |:put| but adjust indent |:pbuffer| Edit buffer [N] from the buffer list in the preview window +|:redrawtabpanel| Force updating the 'tabpanel'. Options: ~ @@ -41757,7 +41763,11 @@ Options: ~ 'lhistory' Size of the location list stack |quickfix-stack|. 'messagesopt' configure |:messages| and |hit-enter| prompt 'pummaxwidth' maximum width for the completion popup menu +'showtabpanel' When to show the |tabpanel| 'tabclose' Which tab page to focus after closing a tab page +'tabpanel' Optional vertical panel for displaying tabpages + |tabpanel| +'tabpanelopt' Optional settings for the |tabpanel| 't_xo' Terminal uses XON/XOFF handshaking (e.g. vt420) 't_CF' Support for alternate font highlighting terminal code 'winfixbuf' Keep buffer focused in a window diff --git a/runtime/optwin.vim b/runtime/optwin.vim index 941a63c40f..2f17839b62 100644 --- a/runtime/optwin.vim +++ b/runtime/optwin.vim @@ -1,7 +1,7 @@ " These commands create the option window. " " Maintainer: The Vim Project -" Last Change: 2025 Apr 24 +" Last Change: 2025 May 14 " Former Maintainer: Bram Moolenaar " If there already is an option window, jump to that one. @@ -1454,6 +1454,11 @@ if exists("&mzschemedll") call AddOption("mzschemegcdll", gettext("name of the MzScheme GC dynamic library")) call OptionG("mzschemegcdll", &mzschemegcdll) endif +if has("tabpanel") + call AddOption("showtabpanel", gettext("0, 1 or 2; when to use a tab pages in tabpanel")) + call AddOption("tabpanel", gettext("custom tab pages in tabpanel")) + call AddOption("tabpanelopt", gettext("options for using tabpanel")) +endif set cpo&vim diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index e144a9f261..9512ccc836 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 May 04 +" Last Change: 2025 May 14 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -36,9 +36,9 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell syn keyword vimCommand contained abo[veleft] 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] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler] con[tinue] conf[irm] nextgroup=vimBang syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] 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] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] imp[ort] int[ro] ip[ut] is[earch] isp[lit] j[oin] ju[mps] k kee[pmarks] keepj[umps] keepp[atterns] nextgroup=vimBang syn keyword vimCommand contained 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] 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] lw[indow] ls m[ove] ma[rk] marks 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] nextgroup=vimBang -syn keyword vimCommand contained p[rint] pa[ckadd] packl[oadall] pb[uffer] 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] 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] redr[aw] redraws[tatus] redrawt[abline] reg[isters] res[ize] ret[ab] 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] scr[iptnames] scripte[ncoding] scriptv[ersion] nextgroup=vimBang -syn keyword vimCommand contained scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] uns[ilent] nextgroup=vimBang -syn keyword vimCommand contained up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] 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 nextgroup=vimBang +syn keyword vimCommand contained p[rint] pa[ckadd] packl[oadall] pb[uffer] 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] 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] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] 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] scr[iptnames] scripte[ncoding] nextgroup=vimBang +syn keyword vimCommand contained scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] nextgroup=vimBang +syn keyword vimCommand contained uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] 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 nextgroup=vimBang " Lower priority for _new_ to distinguish constructors from the command. syn match vimCommand contained "\(\@!" @@ -52,10 +52,10 @@ syn keyword vimOption contained cfc completefuzzycollect cia completeitemalign c syn keyword vimOption contained fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc 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 skipwhite nextgroup=vimSetEqual,vimSetMod syn keyword vimOption contained imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode ise isexpand 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 lhi lhistory 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 mopt messagesopt skipwhite nextgroup=vimSetEqual,vimSetMod syn keyword vimOption contained msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus 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 pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions 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 skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang 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 skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype 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 skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained xtermcodes skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions 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 stpl showtabpanel ss sidescroll siso sidescrolloff skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang 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 tpl tabpanel tplo tabpanelopt 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 skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained 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 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 skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained 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='' @@ -92,9 +92,9 @@ syn keyword vimOptionVarName contained ex exrc fenc fileencoding fencs fileencod syn keyword vimOptionVarName contained imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode ise isexpand 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 lhi lhistory 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 syn keyword vimOptionVarName contained mmt maxmemtot mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus 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 pmw pummaxwidth pw pumwidth syn keyword vimOptionVarName contained pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions 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 -syn keyword vimOptionVarName contained 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 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 -syn keyword vimOptionVarName contained 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 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 -syn keyword vimOptionVarName contained ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes +syn keyword vimOptionVarName contained stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang 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 tpl tabpanel tplo tabpanelopt 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 +syn keyword vimOptionVarName contained 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 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 +syn keyword vimOptionVarName contained winptydll wiw winwidth wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes " GEN_SYN_VIM: vimOption term output code variable, START_STR='syn keyword vimOptionVarName contained', END_STR='' syn keyword vimOptionVarName 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 syn keyword vimOptionVarName 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 @@ -128,7 +128,8 @@ syn keyword vimGroup contained Comment Constant String Character Number Boolean " Default highlighting groups {{{2 " GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR='' -syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit VisualNOS DiffText DiffTextAdd PmenuSbar TabLineSel TabLineFill Cursor lCursor QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuMatch PmenuMatchSel PmenuExtra PmenuExtraSel PopupSelected MessageWindow PopupNotification Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn MatchParen StatusLineTerm StatusLineTermNC ToolbarLine ToolbarButton Menu Tooltip Scrollbar CursorIM LineNrAbove LineNrBelow +syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit VisualNOS DiffText DiffTextAdd PmenuSbar TabLineSel TabLineFill TabPanel TabPanelSel TabPanelFill Cursor lCursor QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuMatch PmenuMatchSel PmenuExtra PmenuExtraSel PopupSelected MessageWindow PopupNotification Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn MatchParen StatusLineTerm StatusLineTermNC ToolbarLine ToolbarButton Menu Tooltip Scrollbar CursorIM +syn keyword vimHLGroup contained LineNrAbove LineNrBelow syn match vimHLGroup contained "\" syn case match diff --git a/src/Make_ami.mak b/src/Make_ami.mak index 4dc86ddc6c..bd8b525a83 100644 --- a/src/Make_ami.mak +++ b/src/Make_ami.mak @@ -162,6 +162,7 @@ SRC += \ strings.c \ syntax.c \ tag.c \ + tabpanel.c \ term.c \ termlib.c \ testing.c \ diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak index ab9c3b1e03..37f9f6c407 100644 --- a/src/Make_cyg_ming.mak +++ b/src/Make_cyg_ming.mak @@ -875,6 +875,7 @@ OBJ = \ $(OUTDIR)/spellsuggest.o \ $(OUTDIR)/strings.o \ $(OUTDIR)/syntax.o \ + $(OUTDIR)/tabpanel.o \ $(OUTDIR)/tag.o \ $(OUTDIR)/term.o \ $(OUTDIR)/testing.o \ diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index d6dbd2b7a2..08016d423e 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -779,6 +779,7 @@ OBJ = \ $(OUTDIR)\spellsuggest.obj \ $(OUTDIR)\strings.obj \ $(OUTDIR)\syntax.obj \ + $(OUTDIR)\tabpanel.obj \ $(OUTDIR)\tag.obj \ $(OUTDIR)\term.obj \ $(OUTDIR)\testing.obj \ @@ -1778,6 +1779,8 @@ $(OUTDIR)/strings.obj: $(OUTDIR) strings.c $(INCL) $(OUTDIR)/syntax.obj: $(OUTDIR) syntax.c $(INCL) +$(OUTDIR)/tabpanel.obj: $(OUTDIR) tabpanel.c $(INCL) + $(OUTDIR)/tag.obj: $(OUTDIR) tag.c $(INCL) $(OUTDIR)/term.obj: $(OUTDIR) term.c $(INCL) @@ -2001,6 +2004,7 @@ proto.h: \ proto/spellsuggest.pro \ proto/strings.pro \ proto/syntax.pro \ + proto/tabpanel.pro \ proto/tag.pro \ proto/term.pro \ proto/testing.pro \ diff --git a/src/Make_vms.mms b/src/Make_vms.mms index a30ed653e4..9dce2b5ed2 100644 --- a/src/Make_vms.mms +++ b/src/Make_vms.mms @@ -424,6 +424,7 @@ SRC = \ spellsuggest.c \ strings.c \ syntax.c \ + tabpanel.c \ tag.c \ term.c \ terminal.c \ @@ -559,6 +560,7 @@ OBJ = \ spellsuggest.obj \ strings.obj \ syntax.obj \ + tabpanel.obj \ tag.obj \ term.obj \ terminal.obj \ @@ -1146,6 +1148,10 @@ syntax.obj : syntax.c vim.h [.auto]config.h feature.h os_unix.h \ ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \ gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ errors.h globals.h +tabpanel.obj : tabpanel.c vim.h [.auto]config.h feature.h os_unix.h \ + ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \ + gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \ + errors.h globals.h tag.obj : tag.c vim.h [.auto]config.h feature.h os_unix.h \ ascii.h keymap.h termdefs.h macros.h structs.h regexp.h gui.h beval.h \ [.proto]gui_beval.pro option.h ex_cmds.h proto.h errors.h globals.h diff --git a/src/Makefile b/src/Makefile index 962e47b0e1..9a1a1ccf9f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1576,6 +1576,7 @@ BASIC_SRC = \ spellsuggest.c \ strings.c \ syntax.c \ + tabpanel.c \ tag.c \ term.c \ terminal.c \ @@ -1737,6 +1738,7 @@ OBJ_COMMON = \ objects/spellsuggest.o \ objects/strings.o \ objects/syntax.o \ + objects/tabpanel.o \ objects/tag.o \ objects/term.o \ objects/terminal.o \ @@ -1930,6 +1932,7 @@ PRO_AUTO = \ spellsuggest.pro \ strings.pro \ syntax.pro \ + tabpanel.pro \ tag.pro \ term.pro \ terminal.pro \ @@ -3547,6 +3550,9 @@ objects/strings.o: strings.c objects/syntax.o: syntax.c $(CCC) -o $@ syntax.c +objects/tabpanel.o: tabpanel.c + $(CCC) -o $@ tabpanel.c + objects/tag.o: tag.c $(CCC) -o $@ tag.c @@ -4214,6 +4220,11 @@ objects/syntax.o: syntax.c vim.h protodef.h auto/config.h feature.h os_unix.h \ proto/gui_beval.pro structs.h regexp.h gui.h libvterm/include/vterm.h \ libvterm/include/vterm_keycodes.h alloc.h ex_cmds.h spell.h proto.h \ globals.h errors.h +objects/tabpanel.o: tabpanel.c vim.h protodef.h auto/config.h feature.h os_unix.h \ + auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \ + proto/gui_beval.pro structs.h regexp.h gui.h \ + libvterm/include/vterm_keycodes.h alloc.h ex_cmds.h spell.h proto.h \ + globals.h errors.h objects/tag.o: tag.c vim.h protodef.h auto/config.h feature.h os_unix.h \ auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \ proto/gui_beval.pro structs.h regexp.h gui.h libvterm/include/vterm.h \ diff --git a/src/change.c b/src/change.c index c48d254915..438bbda18b 100644 --- a/src/change.c +++ b/src/change.c @@ -142,6 +142,9 @@ changed_internal(void) ml_setflags(curbuf); check_status(curbuf); redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif need_maketitle = TRUE; // set window title later } @@ -917,6 +920,9 @@ unchanged(buf_T *buf, int ff, int always_inc_changedtick) save_file_ff(buf); check_status(buf); redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif need_maketitle = TRUE; // set window title later ++CHANGEDTICK(buf); } diff --git a/src/clipboard.c b/src/clipboard.c index fb967dc400..d0feb2ff17 100644 --- a/src/clipboard.c +++ b/src/clipboard.c @@ -404,7 +404,7 @@ clip_invert_rectangle( gui_mch_invert_rectangle(row, col, height, width); else #endif - screen_draw_rectangle(row, col, height, width, invert); + screen_draw_rectangle(row, col + TPL_LCOL(NULL), height, width, invert); #ifdef FEAT_PROP_POPUP screen_zindex = 0; #endif diff --git a/src/drawline.c b/src/drawline.c index 57ee9a5fda..3be9a3a4da 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -875,7 +875,7 @@ wlv_screen_line(win_T *wp, winlinevars_T *wlv, int clear_end) } } - screen_line(wp, wlv->screen_row, wp->w_wincol, wlv->col, + screen_line(wp, wlv->screen_row, wp->w_wincol + TPL_LCOL(wp), wlv->col, clear_end ? wp->w_width : -wp->w_width, wlv->vcol - 1, wlv->screen_line_flags); } @@ -4355,7 +4355,7 @@ win_line( #ifdef FEAT_PROP_POPUP && !text_prop_above && !text_prop_follows #endif - && wp->w_width == Columns) + && wp->w_width == COLUMNS_WITHOUT_TPL()) { // Remember that the line wraps, used for modeless copy. LineWraps[wlv.screen_row - 1] = TRUE; @@ -4380,7 +4380,7 @@ win_line( == 2 || (*mb_off2cells)( LineOffset[wlv.screen_row - 1] - + (int)Columns - 2, + + (int)COLUMNS_WITHOUT_TPL() - 2, LineOffset[wlv.screen_row] + screen_Columns) == 2))) { @@ -4390,17 +4390,17 @@ win_line( // auto-wrap, we overwrite the character. if (screen_cur_col != wp->w_width) screen_char(LineOffset[wlv.screen_row - 1] - + (unsigned)Columns - 1, - wlv.screen_row - 1, (int)(Columns - 1)); + + (unsigned)COLUMNS_WITHOUT_TPL() - 1, + wlv.screen_row - 1, (int)(COLUMNS_WITHOUT_TPL() - 1)); // When there is a multi-byte character, just output a // space to keep it simple. if (has_mbyte && MB_BYTE2LEN(ScreenLines[LineOffset[ - wlv.screen_row - 1] + (Columns - 1)]) > 1) + wlv.screen_row - 1] + (COLUMNS_WITHOUT_TPL() - 1)]) > 1) out_char(' '); else out_char(ScreenLines[LineOffset[wlv.screen_row - 1] - + (Columns - 1)]); + + (COLUMNS_WITHOUT_TPL() - 1)]); // force a redraw of the first char on the next line ScreenAttrs[LineOffset[wlv.screen_row]] = (sattr_T)-1; screen_start(); // don't know where cursor is now diff --git a/src/drawscreen.c b/src/drawscreen.c index 4736bf1120..1e71caef1b 100644 --- a/src/drawscreen.c +++ b/src/drawscreen.c @@ -209,6 +209,9 @@ update_screen(int type_arg) redraw_cmdline = TRUE; redraw_tabline = TRUE; } +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif } msg_scrolled = 0; need_wait_return = FALSE; @@ -265,6 +268,11 @@ update_screen(int type_arg) if (redraw_tabline || type >= UPD_NOT_VALID) draw_tabline(); +#if defined(FEAT_TABPANEL) + if (redraw_tabpanel || type >= UPD_NOT_VALID) + draw_tabpanel(); +#endif + #ifdef FEAT_SYN_HL // Correct stored syntax highlighting info for changes in each displayed // buffer. Each buffer must only be done once. @@ -331,6 +339,10 @@ update_screen(int type_arg) win_redr_status(wp, TRUE); // any popup menu will be redrawn below } } +#if defined(FEAT_TABPANEL) + if (redraw_tabpanel) + draw_tabpanel(); +#endif #if defined(FEAT_SEARCH_EXTRA) end_search_hl(); #endif @@ -529,14 +541,13 @@ win_redr_status(win_T *wp, int ignore_pum UNUSED) plen = this_ru_col - 1; } - screen_puts(p, row, wp->w_wincol, attr); - screen_fill(row, row + 1, plen + wp->w_wincol, - this_ru_col + wp->w_wincol, fillchar, fillchar, attr); - + screen_puts(p, row, wp->w_wincol + TPL_LCOL(wp), attr); + screen_fill(row, row + 1, plen + wp->w_wincol + TPL_LCOL(wp), + this_ru_col + wp->w_wincol + TPL_LCOL(wp), fillchar, fillchar, attr); if ((NameBufflen = get_keymap_str(wp, (char_u *)"<%s>", NameBuff, MAXPATHL)) > 0 && (this_ru_col - plen) > (NameBufflen + 1)) screen_puts(NameBuff, row, (int)(this_ru_col - NameBufflen - - 1 + wp->w_wincol), attr); + - 1 + wp->w_wincol + TPL_LCOL(wp)), attr); win_redr_ruler(wp, TRUE, ignore_pum); @@ -561,7 +572,8 @@ win_redr_status(win_T *wp, int ignore_pum UNUSED) fillchar = fillchar_status(&attr, wp); else fillchar = fillchar_vsep(&attr, wp); - screen_putchar(fillchar, row, W_ENDCOL(wp), attr); + if (W_ENDCOL(wp) < COLUMNS_WITHOUT_TPL()) + screen_putchar(fillchar, row, W_ENDCOL(wp) + TPL_LCOL(wp), attr); } busy = FALSE; } @@ -620,6 +632,11 @@ showruler(int always) // Redraw the tab pages line if needed. if (redraw_tabline) draw_tabline(); + +#if defined(FEAT_TABPANEL) + if (redraw_tabpanel) + draw_tabpanel(); +#endif } void @@ -781,11 +798,11 @@ win_redr_ruler(win_T *wp, int always, int ignore_pum) buffer[bufferlen] = NUL; } - screen_puts(buffer, row, this_ru_col + off, attr); + screen_puts(buffer, row, this_ru_col + off + TPL_LCOL(wp), attr); n1 = redraw_cmdline; screen_fill(row, row + 1, - this_ru_col + off + bufferlen, - (off + width), + this_ru_col + off + bufferlen + TPL_LCOL(wp), + (off + width) + TPL_LCOL(wp), fillchar, fillchar, attr); // don't redraw the cmdline because of showing the ruler redraw_cmdline = n1; @@ -1026,8 +1043,8 @@ redraw_win_toolbar(win_T *wp) } wp->w_winbar_items[item_idx].wb_menu = NULL; // end marker - screen_line(wp, wp->w_winrow, wp->w_wincol, wp->w_width, wp->w_width, -1, - 0); + screen_line(wp, wp->w_winrow, wp->w_wincol + TPL_LCOL(wp), wp->w_width, + wp->w_width, -1, 0); } #endif @@ -1361,8 +1378,8 @@ fold_line( } #endif - screen_line(wp, row + W_WINROW(wp), wp->w_wincol, - wp->w_width, wp->w_width, -1, 0); + screen_line(wp, row + W_WINROW(wp), wp->w_wincol + TPL_LCOL(wp), + wp->w_width, wp->w_width, -1, 0); // Update w_cline_height and w_cline_folded if the cursor line was // updated (saves a call to plines() later). @@ -2672,8 +2689,8 @@ win_update(win_T *wp) // Last line isn't finished: Display "@@@" at the end. screen_fill(W_WINROW(wp) + wp->w_height - 1, W_WINROW(wp) + wp->w_height, - start_col < wp->w_wincol ? wp->w_wincol : start_col, - (int)W_ENDCOL(wp), + (start_col < wp->w_wincol ? wp->w_wincol : start_col) + TPL_LCOL(wp), + (int)W_ENDCOL(wp) + TPL_LCOL(wp), symbol, symbol, HL_ATTR(HLF_AT)); set_empty_rows(wp, srow); wp->w_botline = lnum; @@ -2898,6 +2915,11 @@ update_debug_sign(buf_T *buf, linenr_T lnum) win_redr_status(wp, FALSE); } +#if defined(FEAT_TABPANEL) + if (redraw_tabpanel) + draw_tabpanel(); +#endif + update_finish(); } #endif @@ -2930,6 +2952,11 @@ updateWindow(win_T *wp) if (redraw_tabline) draw_tabline(); +#if defined(FEAT_TABPANEL) + if (redraw_tabpanel) + draw_tabpanel(); +#endif + if (wp->w_redr_status || p_ru # ifdef FEAT_STL_OPT || *p_stl != NUL || *wp->w_p_stl != NUL @@ -3328,6 +3355,11 @@ redraw_statuslines(void) win_redr_status(wp, FALSE); if (redraw_tabline) draw_tabline(); + +#if defined(FEAT_TABPANEL) + if (redraw_tabpanel) + draw_tabpanel(); +#endif } /* diff --git a/src/edit.c b/src/edit.c index 3c98bb8bb1..4d45e8ef7c 100644 --- a/src/edit.c +++ b/src/edit.c @@ -1714,7 +1714,7 @@ edit_putchar(int c, int highlight) if (fix_col != pc_col) { - screen_putchar(' ', pc_row, fix_col, attr); + screen_putchar(' ', pc_row, fix_col + TPL_LCOL(NULL), attr); --curwin->w_wcol; pc_status = PC_STATUS_RIGHT; } @@ -1734,7 +1734,7 @@ edit_putchar(int c, int highlight) screen_getbytes(pc_row, pc_col, pc_bytes, &pc_attr); pc_status = PC_STATUS_SET; } - screen_putchar(c, pc_row, pc_col, attr); + screen_putchar(c, pc_row, pc_col + TPL_LCOL(NULL), attr); } #if defined(FEAT_JOB_CHANNEL) || defined(PROTO) diff --git a/src/errors.h b/src/errors.h index d718507e01..eddfc1b55a 100644 --- a/src/errors.h +++ b/src/errors.h @@ -3730,3 +3730,5 @@ EXTERN char e_no_quickfix_stack[] #endif EXTERN char e_cannot_switch_to_a_closing_buffer[] INIT(= N_("E1546: Cannot switch to a closing buffer")); +EXTERN char e_cannot_not_support_redrawtabpanel[] + INIT(= N_("E1547: This version of Vim does support :redrawtabpanel")); diff --git a/src/evalfunc.c b/src/evalfunc.c index 74afd9dcd1..76955a7ed0 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -7415,6 +7415,13 @@ f_has(typval_T *argvars, typval_T *rettv) 0 #endif }, + {"tabpanel", +#if defined(FEAT_TABPANEL) + 1, +#else + 0, +#endif + }, {"tag_binary", 1}, // graduated feature {"tcl", #if defined(FEAT_TCL) && !defined(DYNAMIC_TCL) diff --git a/src/ex_cmdidxs.h b/src/ex_cmdidxs.h index 609a81d398..1f01c2f3d8 100644 --- a/src/ex_cmdidxs.h +++ b/src/ex_cmdidxs.h @@ -23,14 +23,14 @@ static const unsigned short cmdidxs1[26] = /* p */ 341, /* q */ 382, /* r */ 385, - /* s */ 405, - /* t */ 475, - /* u */ 522, - /* v */ 533, - /* w */ 554, - /* x */ 568, - /* y */ 578, - /* z */ 579 + /* s */ 406, + /* t */ 476, + /* u */ 523, + /* v */ 534, + /* w */ 555, + /* x */ 569, + /* y */ 579, + /* z */ 580 }; /* @@ -58,7 +58,7 @@ static const unsigned char cmdidxs2[26][26] = /* o */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 0, 9, 0, 11, 0, 0, 0 }, /* p */ { 1, 3, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 10, 0, 0, 17, 18, 27, 0, 29, 0, 30, 0 }, /* q */ { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - /* r */ { 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 19, 0, 0, 0, 0 }, + /* r */ { 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 20, 0, 0, 0, 0 }, /* s */ { 2, 6, 15, 0, 19, 23, 0, 25, 26, 0, 0, 29, 31, 35, 39, 41, 0, 50, 0, 51, 0, 64, 65, 0, 66, 0 }, /* t */ { 2, 0, 19, 0, 24, 26, 0, 27, 0, 29, 0, 30, 34, 37, 39, 40, 0, 41, 43, 0, 44, 0, 0, 0, 46, 0 }, /* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -69,4 +69,4 @@ static const unsigned char cmdidxs2[26][26] = /* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; -static const int command_count = 596; +static const int command_count = 597; diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 4eb67e31fa..d3d757b4c2 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1854,6 +1854,9 @@ ex_file(exarg_T *eap) if (rename_buffer(eap->arg) == FAIL) return; redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif } // print file name if no argument or 'F' is not in 'shortmess' @@ -2100,6 +2103,9 @@ do_write(exarg_T *eap) { curbuf->b_p_ro = FALSE; redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif } } diff --git a/src/ex_cmds.h b/src/ex_cmds.h index 0659f87c27..fb8d62f608 100644 --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -1292,6 +1292,9 @@ EXCMD(CMD_redrawstatus, "redrawstatus", ex_redrawstatus, EXCMD(CMD_redrawtabline, "redrawtabline", ex_redrawtabline, EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), +EXCMD(CMD_redrawtabpanel, "redrawtabpanel", ex_redrawtabpanel, + EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, + ADDR_NONE), EXCMD(CMD_registers, "registers", ex_display, EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), diff --git a/src/ex_docmd.c b/src/ex_docmd.c index b87e3c76ea..a929465587 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -247,6 +247,7 @@ static void ex_later(exarg_T *eap); static void ex_redir(exarg_T *eap); static void ex_redrawstatus(exarg_T *eap); static void ex_redrawtabline(exarg_T *eap); +static void ex_redrawtabpanel(exarg_T *eap); static void close_redir(void); static void ex_mark(exarg_T *eap); static void ex_startinsert(exarg_T *eap); @@ -8233,7 +8234,7 @@ ex_sleep(exarg_T *eap) { n = W_WINROW(curwin) + curwin->w_wrow - msg_scrolled; if (n >= 0) - windgoto(n, curwin->w_wincol + curwin->w_wcol); + windgoto(n, curwin->w_wincol + curwin->w_wcol + TPL_LCOL(curwin)); } len = eap->line2; @@ -8992,6 +8993,29 @@ ex_redrawtabline(exarg_T *eap UNUSED) out_flush(); } +/* + * ":redrawtabpanel": force redraw of the tabpanel + */ + static void +ex_redrawtabpanel(exarg_T *eap UNUSED) +{ + int save_RedrawingDisabled = RedrawingDisabled; + RedrawingDisabled = 0; + + int save_p_lz = p_lz; + p_lz = FALSE; + +#if defined(FEAT_TABPANEL) + draw_tabpanel(); +#else + emsg(_(e_cannot_not_support_redrawtabpanel)); +#endif + + RedrawingDisabled = save_RedrawingDisabled; + p_lz = save_p_lz; + out_flush(); +} + static void close_redir(void) { diff --git a/src/feature.h b/src/feature.h index 703a72fc9e..56d19585c2 100644 --- a/src/feature.h +++ b/src/feature.h @@ -523,6 +523,13 @@ # define FEAT_GUI_TABLINE #endif +/* + * +tabpanel Tab SideBar + */ +#ifdef FEAT_HUGE +# define FEAT_TABPANEL +#endif + /* * +browse ":browse" command. * or just the ":browse" command modifier diff --git a/src/fileio.c b/src/fileio.c index f6e35ab7fe..2c6c40ed3d 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -3534,6 +3534,9 @@ shorten_fnames(int force) } status_redraw_all(); redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif #if defined(FEAT_PROP_POPUP) && defined(FEAT_QUICKFIX) popup_update_preview_title(); #endif diff --git a/src/globals.h b/src/globals.h index 7006364bd2..f143c8f905 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1056,6 +1056,10 @@ EXTERN tabpage_T *curtab; EXTERN tabpage_T *lastused_tabpage; EXTERN int redraw_tabline INIT(= FALSE); // need to redraw tabline +#if defined(FEAT_TABPANEL) +EXTERN int redraw_tabpanel INIT(= FALSE); // need to redraw tabpanel +#endif + /* * All buffers are linked in a list. 'firstbuf' points to the first entry, * 'lastbuf' to the last entry and 'curbuf' to the currently active buffer. diff --git a/src/gui.c b/src/gui.c index 7b613812b5..41647d61db 100644 --- a/src/gui.c +++ b/src/gui.c @@ -4906,6 +4906,9 @@ xy2win(int x, int y, mouse_find_T popup) row = Y_2_ROW(y); col = X_2_COL(x); + + col -= TPL_LCOL(NULL); + if (row < 0 || col < 0) // before first window return NULL; wp = mouse_find_win(&row, &col, popup); @@ -5376,6 +5379,8 @@ gui_wingoto_xy(int x, int y) int col = X_2_COL(x); win_T *wp; + col -= TPL_LCOL(NULL); + if (row < 0 || col < 0) return; diff --git a/src/highlight.c b/src/highlight.c index 65670350bd..807753a303 100644 --- a/src/highlight.c +++ b/src/highlight.c @@ -249,6 +249,9 @@ static char *(highlight_init_both[]) = { "TabLineSel term=bold cterm=bold gui=bold"), CENT("TabLineFill term=reverse cterm=reverse", "TabLineFill term=reverse cterm=reverse gui=reverse"), + "default link TabPanel TabLine", + "default link TabPanelSel TabLineSel", + "default link TabPanelFill TabLineFill", #ifdef FEAT_GUI "Cursor guibg=fg guifg=bg", "lCursor guibg=fg guifg=bg", // should be different, but what? diff --git a/src/misc2.c b/src/misc2.c index 909812caeb..79125771ed 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -1879,6 +1879,9 @@ set_fileformat( // This may cause the buffer to become (un)modified. check_status(curbuf); redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif need_maketitle = TRUE; // set window title later } diff --git a/src/mouse.c b/src/mouse.c index 4e10e723ed..65540e555a 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -232,6 +232,9 @@ do_mouse( int moved; // Has cursor moved? int in_status_line; // mouse in status line static int in_tab_line = FALSE; // mouse clicked in tab line +#if defined(FEAT_TABPANEL) + static int in_tabpanel = FALSE; // mouse clicked in tabpanel +#endif int in_sep_line; // mouse in vertical separator line int c1, c2; #if defined(FEAT_FOLDING) @@ -342,9 +345,16 @@ do_mouse( if (!is_drag) // release, reset got_click { got_click = FALSE; - if (in_tab_line) + if (in_tab_line +#if defined(FEAT_TABPANEL) + || in_tabpanel +#endif + ) { in_tab_line = FALSE; +#if defined(FEAT_TABPANEL) + in_tabpanel = FALSE; +#endif return FALSE; } } @@ -469,6 +479,78 @@ do_mouse( start_visual.lnum = 0; + // Check for clicking in the tab page line. +#if defined(FEAT_TABPANEL) + if (mouse_col < TPL_LCOL(NULL)) + { + if (is_drag) + { + if (in_tabpanel) + { + c1 = get_tabpagenr_on_tabpanel(); + tabpage_move(c1 <= 0 ? 9999 : c1 < tabpage_index(curtab) + ? c1 - 1 : c1); + } + return FALSE; + } + + // click in a tab selects that tab page + if (is_click +# ifdef FEAT_CMDWIN + && cmdwin_type == 0 +# endif + && mouse_col < Columns) + { + in_tabpanel = TRUE; + c1 = get_tabpagenr_on_tabpanel(); + if (c1 >= 0) + { + if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) + { + // double click opens new page + end_visual_mode(); + tabpage_new(); + tabpage_move(c1 == 0 ? 9999 : c1 - 1); + } + else + { + // Go to specified tab page, or next one if not clicking + // on a label. + goto_tabpage(c1); + + // It's like clicking on the status line of a window. + if (curwin != old_curwin) + end_visual_mode(); + } + } + else + { + tabpage_T *tp; + + // Close the current or specified tab page. + if (c1 == -999) + tp = curtab; + else + tp = find_tabpage(-c1); + if (tp == curtab) + { + if (first_tabpage->tp_next != NULL) + tabpage_close(FALSE); + } + else if (tp != NULL) + tabpage_close_other(tp, FALSE); + } + } + return TRUE; + } + else if (is_drag && in_tabpanel) + { + c1 = get_tabpagenr_on_tabpanel(); + tabpage_move(c1 <= 0 ? 9999 : c1 - 1); + return FALSE; + } +#endif + if (TabPageIdxs != NULL) // only when initialized { // Check for clicking in the tab page line. @@ -1643,6 +1725,10 @@ jump_to_mouse( int mouse_char = ' '; #endif + col -= TPL_LCOL(NULL); + if (col < 0) + return IN_TABPANEL; + mouse_past_bottom = FALSE; mouse_past_eol = FALSE; @@ -1727,7 +1813,7 @@ jump_to_mouse( if (!(flags & MOUSE_FOCUS)) { - if (row < 0 || col < 0) // check if it makes sense + if (row < 0 || col + TPL_LCOL(NULL) < 0) // check if it makes sense return IN_UNKNOWN; // find the window where the row is in and adjust "row" and "col" to be @@ -3247,6 +3333,9 @@ f_getmousepos(typval_T *argvars UNUSED, typval_T *rettv) winid = wp->w_id; winrow = row + 1; wincol = col + 1; + wincol -= TPL_LCOL(NULL); + if (wincol < 0) + wincol = 0; row -= top_off; col -= left_off; if (row >= 0 && row < wp->w_height && col >= 0 && col < wp->w_width) diff --git a/src/netbeans.c b/src/netbeans.c index 5cbbab78b7..4f53785123 100644 --- a/src/netbeans.c +++ b/src/netbeans.c @@ -1747,6 +1747,9 @@ nb_do_cmd( { check_status(buf->bufp); redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif maketitle(); update_screen(0); } diff --git a/src/option.c b/src/option.c index ab9ee66cf3..d6a009853d 100644 --- a/src/option.c +++ b/src/option.c @@ -3107,6 +3107,9 @@ redraw_titles(void) { need_maketitle = TRUE; redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif } /* @@ -8832,6 +8835,18 @@ option_set_callback_func(char_u *optval UNUSED, callback_T *optcb UNUSED) #endif } +#if defined(FEAT_TABPANEL) +/* + * Process the new 'showtabpanel' option value. + */ + char * +did_set_showtabpanel(optset_T *args) +{ + shell_new_columns(); + return NULL; +} +#endif + #if defined(FEAT_EVAL) || defined(PROTO) static void didset_options_sctx(int opt_flags, char **buf) diff --git a/src/option.h b/src/option.h index bb1226e44e..e78a7cb192 100644 --- a/src/option.h +++ b/src/option.h @@ -984,7 +984,15 @@ EXTERN unsigned swb_flags; #define SWB_NEWTAB 0x008 #define SWB_VSPLIT 0x010 #define SWB_USELAST 0x020 + EXTERN char_u *p_spk; // 'splitkeep' + +#if defined(FEAT_TABPANEL) +EXTERN char_u *p_tpl; // 'tabpanel' +EXTERN long p_stpl; // 'showtabpanel' +EXTERN char_u *p_tplo; // 'tabpanelopt' +#endif + #ifdef FEAT_SYN_HL EXTERN char_u *p_syn; // 'syntax' #endif diff --git a/src/optiondefs.h b/src/optiondefs.h index f035104406..d5094632a5 100644 --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -305,7 +305,7 @@ struct vimoption # define ISP_LATIN1 (char_u *)"@,161-255" #endif -# define HIGHLIGHT_INIT "8:SpecialKey,~:EndOfBuffer,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,y:CurSearch,m:MoreMsg,M:ModeMsg,n:LineNr,a:LineNrAbove,b:LineNrBelow,N:CursorLineNr,G:CursorLineSign,O:CursorLineFold,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,E:DiffTextAdd,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,k:PmenuMatch,<:PmenuMatchSel,[:PmenuKind,]:PmenuKindSel,{:PmenuExtra,}:PmenuExtraSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn,q:QuickFixLine,z:StatusLineTerm,Z:StatusLineTermNC,g:MsgArea,h:ComplMatchIns" +# define HIGHLIGHT_INIT "8:SpecialKey,~:EndOfBuffer,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,y:CurSearch,m:MoreMsg,M:ModeMsg,n:LineNr,a:LineNrAbove,b:LineNrBelow,N:CursorLineNr,G:CursorLineSign,O:CursorLineFold,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,E:DiffTextAdd,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,k:PmenuMatch,<:PmenuMatchSel,[:PmenuKind,]:PmenuKindSel,{:PmenuExtra,}:PmenuExtraSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn,q:QuickFixLine,z:StatusLineTerm,Z:StatusLineTermNC,g:MsgArea,h:ComplMatchIns,%:TabPanel,^:TabPanelSel,&:TabPanelFill" // Default python version for pyx* commands #if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3) @@ -2368,6 +2368,11 @@ static struct vimoption options[] = {"showtabline", "stal", P_NUM|P_VI_DEF|P_RALL, (char_u *)&p_stal, PV_NONE, did_set_showtabline, NULL, {(char_u *)1L, (char_u *)0L} SCTX_INIT}, +#if defined(FEAT_TABPANEL) + {"showtabpanel", "stpl", P_NUM|P_RALL, + (char_u *)&p_stpl, PV_NONE, did_set_showtabpanel, NULL, + {(char_u *)0L, (char_u *)0L} SCTX_INIT}, +#endif {"sidescroll", "ss", P_NUM|P_VI_DEF, (char_u *)&p_ss, PV_NONE, NULL, NULL, {(char_u *)0L, (char_u *)0L} SCTX_INIT}, @@ -2527,6 +2532,16 @@ static struct vimoption options[] = {"tabpagemax", "tpm", P_NUM|P_VI_DEF, (char_u *)&p_tpm, PV_NONE, NULL, NULL, {(char_u *)10L, (char_u *)0L} SCTX_INIT}, +#if defined(FEAT_TABPANEL) + {"tabpanel", "tpl", P_STRING|P_VI_DEF|P_RALL, + (char_u *)&p_tpl, PV_NONE, NULL, NULL, + {(char_u *)"", (char_u *)0L} SCTX_INIT}, + {"tabpanelopt","tplo", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP, + (char_u *)&p_tplo, PV_NONE, did_set_tabpanelopt, + expand_set_tabpanelopt, + {(char_u *)"", (char_u *)0L} + SCTX_INIT}, +#endif {"tabstop", "ts", P_NUM|P_VI_DEF|P_RBUF, (char_u *)&p_ts, PV_TS, did_set_shiftwidth_tabstop, NULL, diff --git a/src/optionstr.c b/src/optionstr.c index ce57cb4cec..8e233e86c3 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -28,6 +28,9 @@ static char *(p_bo_values[]) = {"all", "backspace", "cursor", "complete", // Note: Keep this in sync with briopt_check() static char *(p_briopt_values[]) = {"shift:", "min:", "sbr", "list:", "column:", NULL}; #endif +#if defined(FEAT_TABPANEL) +static char *(p_tpl_values[]) = {"wrap", "align:", "columns:", "vert:", NULL}; +#endif #if defined(FEAT_DIFF) // Note: Keep this in sync with diffopt_changed() static char *(p_dip_values[]) = {"filler", "context:", "iblank", "icase", "iwhite", "iwhiteall", "iwhiteeol", "horizontal", "vertical", "closeoff", "hiddenoff", "foldcolumn:", "followwrap", "internal", "indent-heuristic", "algorithm:", "inline:", "linematch:", NULL}; @@ -3547,6 +3550,33 @@ did_set_rulerformat(optset_T *args) } #endif +#if defined(FEAT_TABPANEL) +/* + * Process the new 'tabpanelopt' option value. + */ + char * +did_set_tabpanelopt(optset_T *args) +{ + if (tabpanelopt_changed() == FAIL) + return e_invalid_argument; + + shell_new_columns(); + + return NULL; +} + + int +expand_set_tabpanelopt(optexpand_T *args, int *numMatches, char_u ***matches) +{ + return expand_set_opt_string( + args, + p_tpl_values, + ARRAY_LENGTH(p_tpl_values) - 1, + numMatches, + matches); +} +#endif + /* * The 'scrollopt' option is changed. */ diff --git a/src/popupmenu.c b/src/popupmenu.c index 4aaddaf805..d629049483 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -656,22 +656,24 @@ pum_display_rtl_text( width = cells + over_cell + 1; rt = orig_rt; - screen_putchar(truncrl, row, col - width + 1, attr); + screen_putchar(truncrl, row, col - width + 1 + TPL_LCOL(NULL), attr); if (over_cell > 0) - screen_fill(row, row + 1, col - width + 2, - col - width + 2 + over_cell, ' ', ' ', attr); + screen_fill(row, row + 1, col - width + 2 + TPL_LCOL(NULL), + col - width + 2 + over_cell + TPL_LCOL(NULL), ' ', ' ', + attr); } if (attrs == NULL) - screen_puts_len(rt, (int)STRLEN(rt), row, col - cells + 1, attr); + screen_puts_len(rt, (int)STRLEN(rt), row, + col - cells + 1 + TPL_LCOL(NULL), attr); else - pum_screen_puts_with_attrs(row, col - cells + 1, cells, rt, - (int)STRLEN(rt), attrs); + pum_screen_puts_with_attrs(row, col - cells + 1 + TPL_LCOL(NULL), + cells, rt, (int)STRLEN(rt), attrs); vim_free(rt_start); VIM_CLEAR(st); - return col - width; + return col - width + TPL_LCOL(NULL); } #endif @@ -743,17 +745,18 @@ pum_display_ltr_text( } if (attrs == NULL) - screen_puts_len(st, size, row, col, attr); + screen_puts_len(st, size, row, col + TPL_LCOL(NULL), attr); else - pum_screen_puts_with_attrs(row, col, cells, st, size, attrs); + pum_screen_puts_with_attrs(row, col + TPL_LCOL(NULL), cells, st, size, + attrs); if (truncated) { if (over_cell > 0) - screen_fill(row, row + 1, col + cells, - col + cells + over_cell, ' ', ' ', attr); + screen_fill(row, row + 1, col + cells + TPL_LCOL(NULL), + col + cells + over_cell + TPL_LCOL(NULL), ' ', ' ', attr); - screen_putchar(trunc, row, col + cells + over_cell, attr); + screen_putchar(trunc, row, col + cells + over_cell + TPL_LCOL(NULL), attr); } VIM_CLEAR(st); @@ -863,10 +866,10 @@ pum_draw_scrollbar( #ifdef FEAT_RIGHTLEFT if (pum_rl) - screen_putchar(' ', row, pum_col - pum_width, attr); + screen_putchar(' ', row, pum_col - pum_width + TPL_LCOL(NULL), attr); else #endif - screen_putchar(' ', row, pum_col + pum_width, attr); + screen_putchar(' ', row, pum_col + pum_width + TPL_LCOL(NULL), attr); } /* @@ -949,12 +952,12 @@ pum_redraw(void) if (pum_rl) { if (pum_col < curwin->w_wincol + curwin->w_width - 1) - screen_putchar(' ', row, pum_col + 1, attr); + screen_putchar(' ', row, pum_col + 1 + TPL_LCOL(NULL), attr); } else #endif if (pum_col > 0) - screen_putchar(' ', row, pum_col - 1, attr); + screen_putchar(' ', row, pum_col - 1 + TPL_LCOL(NULL), attr); // Display each entry, use two spaces for a Tab. // Do this 3 times and order from p_cia @@ -995,15 +998,16 @@ pum_redraw(void) #ifdef FEAT_RIGHTLEFT if (pum_rl) { - screen_fill(row, row + 1, pum_col - basic_width - n + 1, - col + 1, ' ', ' ', orig_attr); + screen_fill(row, row + 1, pum_col - basic_width - n + 1 + TPL_LCOL(NULL), + col + 1 + TPL_LCOL(NULL), ' ', ' ', orig_attr); col = pum_col - basic_width - n; } else #endif { - screen_fill(row, row + 1, col, pum_col + basic_width + n, - ' ', ' ', orig_attr); + screen_fill(row, row + 1, col + TPL_LCOL(NULL), + pum_col + basic_width + n + TPL_LCOL(NULL), ' ', ' ', + orig_attr); col = pum_col + basic_width + n; } totwidth = basic_width + n; @@ -1011,12 +1015,14 @@ pum_redraw(void) #ifdef FEAT_RIGHTLEFT if (pum_rl) - screen_fill(row, row + 1, pum_col - pum_width + 1, col + 1, ' ', - ' ', orig_attr); + screen_fill(row, row + 1, + pum_col - pum_width + 1 + TPL_LCOL(NULL), + col + 1 + TPL_LCOL(NULL), ' ', ' ', orig_attr); else #endif - screen_fill(row, row + 1, col, pum_col + pum_width, ' ', ' ', - orig_attr); + screen_fill(row, row + 1, col + TPL_LCOL(NULL), + pum_col + pum_width + TPL_LCOL(NULL), + ' ', ' ', orig_attr); pum_draw_scrollbar(row, i, thumb_pos, thumb_height); ++row; @@ -1396,6 +1402,9 @@ pum_undisplay(void) pum_array = NULL; redraw_all_later(UPD_NOT_VALID); redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif if (pum_in_cmdline) { clear_cmdline = TRUE; diff --git a/src/popupwin.c b/src/popupwin.c index 60a54d782e..a9a2843772 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -86,7 +86,7 @@ popup_options_one(dict_T *dict, char_u *key) if (STRCMP(key, "line") == 0) n = screen_screenrow() + 1 + n; else // "col" - n = screen_screencol() + 1 + n; + n = screen_screencol() + 1 + n - TPL_LCOL(NULL); // Zero means "not set", use -1 instead. if (n == 0) @@ -1545,7 +1545,7 @@ popup_adjust_position(win_T *wp) } if (center_hor) { - wp->w_wincol = (Columns - wp->w_width - extra_width) / 2; + wp->w_wincol = (Columns - wp->w_width - extra_width - TPL_LCOL(NULL)) / 2; if (wp->w_wincol < 0) wp->w_wincol = 0; } @@ -4081,7 +4081,7 @@ update_popups(void (*win_update)(win_T *wp)) // win_update() doesn't handle them. top_off = popup_top_extra(wp); left_extra = wp->w_popup_padding[3] + wp->w_popup_border[3] - - wp->w_popup_leftoff; + + TPL_LCOL(NULL) - wp->w_popup_leftoff; if (wp->w_wincol + left_extra < 0) left_extra = -wp->w_wincol; wp->w_winrow += top_off; @@ -4163,7 +4163,7 @@ update_popups(void (*win_update)(win_T *wp)) } // Title goes on top of border or padding. - title_wincol = wp->w_wincol + 1; + title_wincol = wp->w_wincol + 1 + TPL_LCOL(NULL); if (wp->w_popup_title != NULL) { title_len = vim_strsize(wp->w_popup_title); @@ -4191,7 +4191,7 @@ update_popups(void (*win_update)(win_T *wp)) wp->w_popup_border[0] > 0 ? border_attr[0] : popup_attr); } - wincol = wp->w_wincol - wp->w_popup_leftoff; + wincol = wp->w_wincol - wp->w_popup_leftoff + TPL_LCOL(NULL); top_padding = wp->w_popup_padding[0]; if (wp->w_popup_border[0] > 0) { @@ -4229,7 +4229,7 @@ update_popups(void (*win_update)(win_T *wp)) { padcol = wincol + wp->w_popup_border[3]; padendcol = wp->w_wincol + total_width - wp->w_popup_border[1] - - wp->w_has_scrollbar; + + TPL_LCOL(NULL) - wp->w_has_scrollbar; if (padcol < 0) { padendcol += padcol; @@ -4327,7 +4327,7 @@ update_popups(void (*win_update)(win_T *wp)) if (wp->w_has_scrollbar) { int line = i - top_off; - int scroll_col = wp->w_wincol + total_width - 1 + int scroll_col = wp->w_wincol + total_width - 1 + TPL_LCOL(NULL) - wp->w_popup_border[1]; if (line >= 0 && line < wp->w_height) diff --git a/src/proto.h b/src/proto.h index a5ca9e4e29..8282dc3434 100644 --- a/src/proto.h +++ b/src/proto.h @@ -123,6 +123,9 @@ extern int _stricoll(char *a, char *b); # ifdef FEAT_VIMINFO # include "viminfo.pro" # endif +# ifdef FEAT_TABPANEL +# include "tabpanel.pro" +# endif // These prototypes cannot be produced automatically. int smsg(const char *, ...) ATTRIBUTE_COLD ATTRIBUTE_FORMAT_PRINTF(1, 2); diff --git a/src/proto/option.pro b/src/proto/option.pro index c6dfc1bd45..f9ae7c402b 100644 --- a/src/proto/option.pro +++ b/src/proto/option.pro @@ -1,4 +1,5 @@ /* option.c */ +char *did_set_showtabpanel(optset_T *args); void set_init_1(int clean_arg); void set_fencs_unicode(void); void set_string_default(char *name, char_u *val); diff --git a/src/proto/optionstr.pro b/src/proto/optionstr.pro index 4c4ec3e47c..84dd1fb8ff 100644 --- a/src/proto/optionstr.pro +++ b/src/proto/optionstr.pro @@ -1,4 +1,6 @@ /* optionstr.c */ +char *did_set_tabpanelopt(optset_T *args); +int expand_set_tabpanelopt(optexpand_T *args, int *numMatches, char_u ***matches); void didset_string_options(void); void trigger_optionset_string(int opt_idx, int opt_flags, char_u *oldval, char_u *oldval_l, char_u *oldval_g, char_u *newval); void check_buf_options(buf_T *buf); diff --git a/src/proto/tabpanel.pro b/src/proto/tabpanel.pro new file mode 100644 index 0000000000..3cbaa2fcf6 --- /dev/null +++ b/src/proto/tabpanel.pro @@ -0,0 +1,7 @@ +/* tabpanel.c */ +int tabpanel_width(void); +int tabpanel_leftcol(win_T *wp); +int tabpanelopt_changed(void); +void draw_tabpanel(void); +int get_tabpagenr_on_tabpanel(void); +/* vim: set ft=c : */ diff --git a/src/screen.c b/src/screen.c index 4fcd9d3daa..d8a060f0c2 100644 --- a/src/screen.c +++ b/src/screen.c @@ -156,13 +156,13 @@ screen_fill_end( if (wp->w_p_rl) { screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow, - W_ENDCOL(wp) - nn, (int)W_ENDCOL(wp) - off, + W_ENDCOL(wp) - nn + TPL_LCOL(wp), (int)W_ENDCOL(wp) - off + TPL_LCOL(wp), c1, c2, attr); } else #endif screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow, - wp->w_wincol + off, (int)wp->w_wincol + nn, + wp->w_wincol + off + TPL_LCOL(wp), (int)wp->w_wincol + nn + TPL_LCOL(wp), c1, c2, attr); return nn; } @@ -215,17 +215,17 @@ win_draw_end( if (wp->w_p_rl) { screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow, - wp->w_wincol, W_ENDCOL(wp) - 1 - n, - c2, c2, attr); + wp->w_wincol + TPL_LCOL(wp), W_ENDCOL(wp) - 1 - n + + TPL_LCOL(wp), c2, c2, attr); screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow, - W_ENDCOL(wp) - 1 - n, W_ENDCOL(wp) - n, - c1, c2, attr); + W_ENDCOL(wp) - 1 - n + TPL_LCOL(wp), W_ENDCOL(wp) - n + + TPL_LCOL(wp), c1, c2, attr); } else #endif { screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow, - wp->w_wincol + n, (int)W_ENDCOL(wp), + wp->w_wincol + n + TPL_LCOL(wp), (int)W_ENDCOL(wp) + TPL_LCOL(wp), c1, c2, attr); } @@ -395,7 +395,9 @@ blocked_by_popup(int row, int col) if (!popup_visible) return FALSE; - off = row * screen_Columns + col; + if (col < TPL_LCOL(NULL)) + return FALSE; + off = row * screen_Columns + col - TPL_LCOL(NULL); return popup_mask[off] > screen_zindex || popup_transparent[off]; } #endif @@ -855,7 +857,7 @@ screen_line( { // For a window that has a right neighbor, draw the separator char // right of the window contents. But not on top of a popup window. - if (coloff + col < Columns) + if (coloff + col < TPL_LCOL(NULL) + COLUMNS_WITHOUT_TPL()) { if (!skip_for_popup(row, col + coloff)) { @@ -920,10 +922,13 @@ draw_vsep_win(win_T *wp, int row) if (!wp->w_vsep_width) return; + if (COLUMNS_WITHOUT_TPL() <= W_ENDCOL(wp) + 1) + return; + // draw the vertical separator right of this window c = fillchar_vsep(&hl, wp); screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + wp->w_height, - W_ENDCOL(wp), W_ENDCOL(wp) + 1, + W_ENDCOL(wp) + TPL_LCOL(wp), W_ENDCOL(wp) + 1 + TPL_LCOL(wp), c, ' ', hl); } @@ -1053,7 +1058,7 @@ win_redr_custom( row = 0; fillchar = ' '; attr = HL_ATTR(HLF_TPF); - maxwidth = Columns; + maxwidth = COLUMNS_WITHOUT_TPL(); opt_name = (char_u *)"tabline"; } else @@ -1150,7 +1155,7 @@ win_redr_custom( for (n = 0; hltab[n].start != NULL; n++) { len = (int)(hltab[n].start - p); - screen_puts_len(p, len, row, col, curattr); + screen_puts_len(p, len, row, col + TPL_LCOL(wp), curattr); col += vim_strnsize(p, len); p = hltab[n].start; @@ -1171,7 +1176,7 @@ win_redr_custom( else curattr = highlight_user[hltab[n].userhl - 1]; } - screen_puts(p, row, col, curattr); + screen_puts(p, row, col + TPL_LCOL(wp), curattr); if (wp == NULL) { @@ -1188,7 +1193,7 @@ win_redr_custom( p = tabtab[n].start; fillchar = tabtab[n].userhl; } - while (col < Columns) + while (col < COLUMNS_WITHOUT_TPL()) TabPageIdxs[col++] = fillchar; } @@ -2128,14 +2133,14 @@ redraw_block(int row, int end, win_T *wp) if (wp == NULL) { col = 0; - width = Columns; + width = COLUMNS_WITHOUT_TPL(); } else { col = wp->w_wincol; width = wp->w_width; } - screen_draw_rectangle(row, col, end - row, width, FALSE); + screen_draw_rectangle(row, col + TPL_LCOL(wp), end - row, width, FALSE); } void @@ -2850,6 +2855,9 @@ screenclear2(int doclear) win_rest_invalid(firstwin); // redraw all regular windows redraw_cmdline = TRUE; redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif if (must_redraw == UPD_CLEAR) // no need to clear again must_redraw = UPD_NOT_VALID; msg_scrolled = 0; // compute_cmdrow() uses this @@ -2910,6 +2918,11 @@ linecopy(int to, int from, win_T *wp) unsigned off_to = LineOffset[to] + wp->w_wincol; unsigned off_from = LineOffset[from] + wp->w_wincol; +#if defined(FEAT_TABPANEL) + off_to += TPL_LCOL(wp); + off_from += TPL_LCOL(wp); +#endif + mch_memmove(ScreenLines + off_to, ScreenLines + off_from, wp->w_width * sizeof(schar_T)); if (enc_utf8) @@ -3243,7 +3256,7 @@ setcursor_mayforce(int force) && (*mb_ptr2cells)(ml_get_cursor()) == 2 && vim_isprintc(gchar_cursor())) ? 2 : 1)) : #endif - curwin->w_wcol)); + curwin->w_wcol) + TPL_LCOL(NULL)); } } @@ -3313,7 +3326,7 @@ win_ins_lines( if (lastrow > Rows) lastrow = Rows; screen_fill(nextrow - line_count, lastrow - line_count, - wp->w_wincol, (int)W_ENDCOL(wp), + wp->w_wincol + TPL_LCOL(wp), (int)W_ENDCOL(wp) + TPL_LCOL(wp), ' ', ' ', 0); } @@ -3411,7 +3424,8 @@ win_do_lines( return FAIL; // only a few lines left: redraw is faster - if (mayclear && Rows - line_count < 5 && wp->w_width == Columns) + if (mayclear && Rows - line_count < 5 + && wp->w_width == COLUMNS_WITHOUT_TPL()) { if (!no_win_do_lines_ins) screenclear(); // will set wp->w_lines_valid to 0 @@ -3428,7 +3442,7 @@ win_do_lines( if (row + line_count >= wp->w_height) { screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + wp->w_height, - wp->w_wincol, (int)W_ENDCOL(wp), + wp->w_wincol + TPL_LCOL(wp), (int)W_ENDCOL(wp) + TPL_LCOL(wp), ' ', ' ', 0); return OK; } @@ -3450,9 +3464,10 @@ win_do_lines( * a character in the lower right corner of the scroll region may cause a * scroll-up . */ - if (scroll_region || wp->w_width != Columns) + if (scroll_region || wp->w_width != COLUMNS_WITHOUT_TPL()) { - if (scroll_region && (wp->w_width == Columns || *T_CSV != NUL)) + if (scroll_region && (wp->w_width == COLUMNS_WITHOUT_TPL() + || *T_CSV != NUL)) scroll_region_set(wp, row); if (del) retval = screen_del_lines(W_WINROW(wp) + row, 0, line_count, @@ -3460,7 +3475,8 @@ win_do_lines( else retval = screen_ins_lines(W_WINROW(wp) + row, 0, line_count, wp->w_height - row, clear_attr, wp); - if (scroll_region && (wp->w_width == Columns || *T_CSV != NUL)) + if (scroll_region && (wp->w_width == COLUMNS_WITHOUT_TPL() + || *T_CSV != NUL)) scroll_region_reset(); return retval; } @@ -3583,7 +3599,7 @@ screen_ins_lines( * exists. */ result_empty = (row + line_count >= end); - if (wp != NULL && wp->w_width != Columns && *T_CSV == NUL) + if (wp != NULL && wp->w_width != COLUMNS_WITHOUT_TPL() && *T_CSV == NUL) { // Avoid that lines are first cleared here and then redrawn, which // results in many characters updated twice. This happens with CTRL-F @@ -3629,7 +3645,7 @@ screen_ins_lines( #ifdef FEAT_CLIPBOARD // Remove a modeless selection when inserting lines halfway the screen // or not the full width of the screen. - if (off + row > 0 || (wp != NULL && wp->w_width != Columns)) + if (off + row > 0 || (wp != NULL && wp->w_width != COLUMNS_WITHOUT_TPL())) clip_clear_selection(&clip_star); else clip_scroll_selection(-line_count); @@ -3661,7 +3677,7 @@ screen_ins_lines( end += off; for (i = 0; i < line_count; ++i) { - if (wp != NULL && wp->w_width != Columns) + if (wp != NULL && wp->w_width != COLUMNS_WITHOUT_TPL()) { // need to copy part of a line j = end - 1 - i; @@ -3669,10 +3685,11 @@ screen_ins_lines( linecopy(j + line_count, j, wp); j += line_count; if (can_clear((char_u *)" ")) - lineclear(LineOffset[j] + wp->w_wincol, wp->w_width, - clear_attr); + lineclear(LineOffset[j] + wp->w_wincol + TPL_LCOL(wp), + wp->w_width, clear_attr); else - lineinvalid(LineOffset[j] + wp->w_wincol, wp->w_width); + lineinvalid(LineOffset[j] + wp->w_wincol + TPL_LCOL(wp), + wp->w_width); LineWraps[j] = FALSE; } else @@ -3687,9 +3704,10 @@ screen_ins_lines( LineOffset[j + line_count] = temp; LineWraps[j + line_count] = FALSE; if (can_clear((char_u *)" ")) - lineclear(temp, (int)Columns, clear_attr); + lineclear(temp + TPL_LCOL(wp), COLUMNS_WITHOUT_TPL(), + clear_attr); else - lineinvalid(temp, (int)Columns); + lineinvalid(temp + TPL_LCOL(wp), COLUMNS_WITHOUT_TPL()); } } @@ -3740,6 +3758,10 @@ screen_ins_lines( } } +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif + #ifdef FEAT_GUI gui_can_update_cursor(); if (gui.in_use) @@ -3818,7 +3840,7 @@ screen_del_lines( * 5. Use T_DL (delete line) if it exists. * 6. redraw the characters from ScreenLines[]. */ - if (wp != NULL && wp->w_width != Columns && *T_CSV == NUL) + if (wp != NULL && wp->w_width != COLUMNS_WITHOUT_TPL() && *T_CSV == NUL) { // Avoid that lines are first cleared here and then redrawn, which // results in many characters updated twice. This happens with CTRL-F @@ -3841,7 +3863,7 @@ screen_del_lines( else if (*T_CDL != NUL && line_count > 1 && can_delete) type = USE_T_CDL; else if (can_clear(T_CE) && result_empty - && (wp == NULL || wp->w_width == Columns)) + && (wp == NULL || wp->w_width == COLUMNS_WITHOUT_TPL())) type = USE_T_CE; else if (*T_DL != NUL && can_delete) type = USE_T_DL; @@ -3853,7 +3875,7 @@ screen_del_lines( #ifdef FEAT_CLIPBOARD // Remove a modeless selection when deleting lines halfway the screen or // not the full width of the screen. - if (off + row > 0 || (wp != NULL && wp->w_width != Columns)) + if (off + row > 0 || (wp != NULL && wp->w_width != COLUMNS_WITHOUT_TPL())) clip_clear_selection(&clip_star); else clip_scroll_selection(line_count); @@ -3892,7 +3914,7 @@ screen_del_lines( end += off; for (i = 0; i < line_count; ++i) { - if (wp != NULL && wp->w_width != Columns) + if (wp != NULL && wp->w_width != COLUMNS_WITHOUT_TPL()) { // need to copy part of a line j = row + i; @@ -3900,10 +3922,11 @@ screen_del_lines( linecopy(j - line_count, j, wp); j -= line_count; if (can_clear((char_u *)" ")) - lineclear(LineOffset[j] + wp->w_wincol, wp->w_width, - clear_attr); + lineclear(LineOffset[j] + wp->w_wincol + TPL_LCOL(wp), + wp->w_width, clear_attr); else - lineinvalid(LineOffset[j] + wp->w_wincol, wp->w_width); + lineinvalid(LineOffset[j] + wp->w_wincol + TPL_LCOL(wp), + wp->w_width); LineWraps[j] = FALSE; } else @@ -3919,9 +3942,10 @@ screen_del_lines( LineOffset[j - line_count] = temp; LineWraps[j - line_count] = FALSE; if (can_clear((char_u *)" ")) - lineclear(temp, (int)Columns, clear_attr); + lineclear(temp + TPL_LCOL(NULL), COLUMNS_WITHOUT_TPL(), + clear_attr); else - lineinvalid(temp, (int)Columns); + lineinvalid(temp + TPL_LCOL(NULL), COLUMNS_WITHOUT_TPL()); } } @@ -3992,6 +4016,10 @@ screen_del_lines( } } +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif + #ifdef FEAT_GUI gui_can_update_cursor(); if (gui.in_use) @@ -4304,6 +4332,10 @@ draw_tabline(void) #endif ); +#if defined(FEAT_TABPANEL) + col = TPL_LCOL(NULL); +#endif + if (ScreenLines == NULL) return; redraw_tabline = FALSE; @@ -4332,7 +4364,7 @@ draw_tabline(void) FOR_ALL_TABPAGES(tp) ++tabcount; - tabwidth = (Columns - 1 + tabcount / 2) / tabcount; + tabwidth = (COLUMNS_WITHOUT_TPL() - 1 + tabcount / 2) / tabcount; if (tabwidth < 6) tabwidth = 6; @@ -4713,6 +4745,9 @@ static struct charstab filltab[] = CHARSTAB_ENTRY(&fill_chars.diff, "diff"), CHARSTAB_ENTRY(&fill_chars.eob, "eob"), CHARSTAB_ENTRY(&fill_chars.lastline, "lastline"), +#if defined(FEAT_TABPANEL) + CHARSTAB_ENTRY(&fill_chars.tpl_vert, "tpl_vert"), +#endif CHARSTAB_ENTRY(&fill_chars.trunc, "trunc"), CHARSTAB_ENTRY(&fill_chars.truncrl, "truncrl"), }; @@ -4828,6 +4863,9 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, fill_chars.diff = '-'; fill_chars.eob = '~'; fill_chars.lastline = '@'; +#if defined(FEAT_TABPANEL) + fill_chars.tpl_vert = '|'; +#endif fill_chars.trunc = '>'; fill_chars.truncrl = '<'; } diff --git a/src/structs.h b/src/structs.h index 1cb70b80f7..cd7370d22c 100644 --- a/src/structs.h +++ b/src/structs.h @@ -3851,6 +3851,9 @@ typedef struct int diff; int eob; int lastline; +#if defined(FEAT_TABPANEL) + int tpl_vert; +#endif int trunc; int truncrl; } fill_chars_T; diff --git a/src/tabpanel.c b/src/tabpanel.c new file mode 100644 index 0000000000..f4bed4b7c3 --- /dev/null +++ b/src/tabpanel.c @@ -0,0 +1,660 @@ +/* vi:set ts=8 sts=4 sw=4 noet: + * + * VIM - Vi IMproved by Bram Moolenaar + * + * Do ":help uganda" in Vim to read copying and usage conditions. + * Do ":help credits" in Vim to see a list of people who contributed. + * See README.txt for an overview of the Vim source code. + */ + +/* + * tabpanel.c: + */ + +#include "vim.h" + +#if defined(FEAT_TABPANEL) || defined(PROTO) + +static void do_by_tplmode(int tplmode, int col_start, int col_end, + int* pcurtab_row, int* ptabpagenr); + +// set pcurtab_row. don't redraw tabpanel. +#define TPLMODE_GET_CURTAB_ROW 0 +// set ptabpagenr. don't redraw tabpanel. +#define TPLMODE_GET_TABPAGENR 1 +// redraw tabpanel. +#define TPLMODE_REDRAW 2 + +#define TPL_FILLCHAR ' ' + +#define VERT_LEN 1 + +// tpl_vert's values +#define VERT_OFF 0 +#define VERT_ON 1 + +// tpl_align's values +#define ALIGN_LEFT 0 +#define ALIGN_RIGHT 1 + +static char_u *opt_name = (char_u *)"tabpanel"; +static int opt_scope = OPT_LOCAL; +static int tpl_align = ALIGN_LEFT; +static int tpl_columns = 20; +static int tpl_vert = VERT_OFF; + +typedef struct { + win_T *wp; + win_T *cwp; + char_u *user_defined; + int maxrow; + int offsetrow; + int *prow; + int *pcol; + int attr; + int col_start; + int col_end; +} tabpanel_T; + + int +tabpanelopt_changed(void) +{ + char_u *p; + int new_align = ALIGN_LEFT; + int new_columns = 20; + int new_vert = VERT_OFF; + + p = p_tplo; + while (*p != NUL) + { + if (STRNCMP(p, "align:left", 10) == 0) + { + p += 10; + new_align = ALIGN_LEFT; + } + else if (STRNCMP(p, "align:right", 11) == 0) + { + p += 11; + new_align = ALIGN_RIGHT; + } + else if (STRNCMP(p, "columns:", 8) == 0 && VIM_ISDIGIT(p[8])) + { + p += 8; + new_columns = getdigits(&p); + } + else if (STRNCMP(p, "vert", 4) == 0) + { + p += 4; + new_vert = VERT_ON; + } + + if (*p != ',' && *p != NUL) + return FAIL; + if (*p == ',') + ++p; + } + + tpl_align = new_align; + tpl_columns = new_columns; + tpl_vert = new_vert; + + return OK; +} + +/* + * Return the width of tabpanel. + */ + int +tabpanel_width(void) +{ + if (msg_scrolled != 0) + return 0; + + switch (p_stpl) + { + case 0: + return 0; + case 1: + if (first_tabpage->tp_next == NULL) + return 0; + } + if (Columns < tpl_columns) + return 0; + else + return tpl_columns; +} + +/* + * Return the offset of a window considering the width of tabpanel. + */ + int +tabpanel_leftcol(win_T *wp) +{ + if (cmdline_pum_active()) + return 0; + else if (wp != NULL && WIN_IS_POPUP(wp)) + return 0; + else + return tpl_align == ALIGN_RIGHT ? 0 : tabpanel_width(); +} + +/* + * draw the tabpanel. + */ + void +draw_tabpanel(void) +{ + int saved_KeyTyped = KeyTyped; + int saved_got_int = got_int; + int maxwidth = tabpanel_width(); + int vs_attr = HL_ATTR(HLF_C); + int curtab_row = 0; +#ifndef MSWIN + int row = 0; + int off = 0; +#endif +int vsrow = 0; + int is_right = tpl_align == ALIGN_RIGHT; + + if (0 == maxwidth) + return; + +#ifndef MSWIN + // We need this section only for the Vim running on WSL. + for (row = 0; row < cmdline_row; row++) + { + if (is_right) + off = LineOffset[row] + Columns - maxwidth; + else + off = LineOffset[row]; + + vim_memset(ScreenLines + off, ' ', + (size_t)maxwidth * sizeof(schar_T)); + if (enc_utf8) + vim_memset(ScreenLinesUC + off, -1, + (size_t)maxwidth * sizeof(u8char_T)); + } +#endif + + // Reset got_int to avoid build_stl_str_hl() isn't evaluted. + got_int = FALSE; + + if (tpl_vert == VERT_ON) + { + if (is_right) + { + // draw main contents in tabpanel + do_by_tplmode(TPLMODE_GET_CURTAB_ROW, VERT_LEN, + maxwidth - VERT_LEN, &curtab_row, NULL); + do_by_tplmode(TPLMODE_REDRAW, VERT_LEN, maxwidth, &curtab_row, + NULL); + // clear for multi-byte vert separater + screen_fill(0, cmdline_row, COLUMNS_WITHOUT_TPL(), + COLUMNS_WITHOUT_TPL() + VERT_LEN, + TPL_FILLCHAR, TPL_FILLCHAR, vs_attr); + // draw vert separater in tabpanel + for (vsrow = 0; vsrow < cmdline_row; vsrow++) + screen_putchar(curwin->w_fill_chars.tpl_vert, vsrow, + COLUMNS_WITHOUT_TPL(), vs_attr); + } + else + { + // draw main contents in tabpanel + do_by_tplmode(TPLMODE_GET_CURTAB_ROW, 0, maxwidth - VERT_LEN, + &curtab_row, NULL); + do_by_tplmode(TPLMODE_REDRAW, 0, maxwidth - VERT_LEN, + &curtab_row, NULL); + // clear for multi-byte vert separater + screen_fill(0, cmdline_row, maxwidth - VERT_LEN, + maxwidth, TPL_FILLCHAR, TPL_FILLCHAR, vs_attr); + // draw vert separater in tabpanel + for (vsrow = 0; vsrow < cmdline_row; vsrow++) + screen_putchar(curwin->w_fill_chars.tpl_vert, vsrow, + maxwidth - VERT_LEN, vs_attr); + } + } + else + { + do_by_tplmode(TPLMODE_GET_CURTAB_ROW, 0, maxwidth, &curtab_row, NULL); + do_by_tplmode(TPLMODE_REDRAW, 0, maxwidth, &curtab_row, NULL); + } + + got_int |= saved_got_int; + + // A user function may reset KeyTyped, restore it. + KeyTyped = saved_KeyTyped; + + redraw_tabpanel = FALSE; +} + +/* + * Return tabpagenr when clicking and dragging in tabpanel. + */ + int +get_tabpagenr_on_tabpanel(void) +{ + int maxwidth = tabpanel_width(); + int curtab_row = 0; + int tabpagenr = 0; + + if (0 == maxwidth) + return -1; + + do_by_tplmode(TPLMODE_GET_CURTAB_ROW, 0, maxwidth, &curtab_row, NULL); + do_by_tplmode(TPLMODE_GET_TABPAGENR, 0, maxwidth, &curtab_row, + &tabpagenr); + + return tabpagenr; +} + +/* + * Fill tailing area between {start_row} and {end_row - 1}. + */ + static void +screen_fill_tailing_area( + int tplmode, + int row_start, + int row_end, + int col_start, + int col_end, + int attr) +{ + int is_right = tpl_align == ALIGN_RIGHT; + if (TPLMODE_REDRAW == tplmode) + screen_fill(row_start, row_end, + (is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_start, + (is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_end, + TPL_FILLCHAR, TPL_FILLCHAR, attr); +} + +/* + * screen_puts_len() for tabpanel. + */ + static void +screen_puts_len_for_tabpanel( + int tplmode, + char_u *p, + int len, + int attr, + tabpanel_T *pargs) +{ + int j, k; + int chlen; + int chcells; + char_u buf[IOSIZE]; + char_u* temp; + + for (j = 0; j < len;) + { + if ((TPLMODE_GET_CURTAB_ROW != tplmode) + && (pargs->maxrow <= (*pargs->prow - pargs->offsetrow))) + break; + + if ((p[j] == '\n') || (p[j] == '\r')) + { + // fill the tailing area of current row. + if (0 <= (*pargs->prow - pargs->offsetrow) + && (*pargs->prow - pargs->offsetrow) < pargs->maxrow) + screen_fill_tailing_area(tplmode, + *pargs->prow - pargs->offsetrow, + *pargs->prow - pargs->offsetrow + 1, + *pargs->pcol, pargs->col_end, attr); + (*pargs->prow)++; + *pargs->pcol = pargs->col_start; + j++; + } + else + { + if (has_mbyte) + chlen = (*mb_ptr2len)(p + j); + else + chlen = (int)STRLEN(p + j); + + for (k = 0; k < chlen; k++) + buf[k] = p[j + k]; + buf[chlen] = NUL; + j += chlen; + + // Make all characters printable. + temp = transstr(buf); + if (temp != NULL) + { + vim_strncpy(buf, temp, sizeof(buf) - 1); + vim_free(temp); + } + + if (has_mbyte) + chcells = (*mb_ptr2cells)(buf); + else + chcells = 1; + + if (pargs->col_end < (*pargs->pcol) + chcells) + { + // fill the tailing area of current row. + if (0 <= (*pargs->prow - pargs->offsetrow) + && (*pargs->prow - pargs->offsetrow) < pargs->maxrow) + screen_fill_tailing_area(tplmode, + *pargs->prow - pargs->offsetrow, + *pargs->prow - pargs->offsetrow + 1, + *pargs->pcol, pargs->col_end, attr); + *pargs->pcol = pargs->col_end; + + if (pargs->col_end < chcells) + break; + } + + if ((*pargs->pcol) + chcells <= pargs->col_end) + { + int off = (tpl_align == ALIGN_RIGHT) + ? COLUMNS_WITHOUT_TPL() + : 0; + if ((TPLMODE_REDRAW == tplmode) + && (0 <= (*pargs->prow - pargs->offsetrow) + && (*pargs->prow - pargs->offsetrow) < pargs->maxrow)) + screen_puts(buf, *pargs->prow - pargs->offsetrow, + *pargs->pcol + off, attr); + (*pargs->pcol) += chcells; + } + } + } +} + +/* + * default tabpanel drawing behavior if 'tabpanel' option is empty. + */ + static void +draw_tabpanel_default(int tplmode, tabpanel_T *pargs) +{ + int modified; + int wincount; + int len = 0; + char_u buf[2] = { NUL, NUL }; + + modified = FALSE; + for (wincount = 0; pargs->wp != NULL; + pargs->wp = pargs->wp->w_next, ++wincount) + if (bufIsChanged(pargs->wp->w_buffer)) + modified = TRUE; + + if (modified || 1 < wincount) + { + if (1 < wincount) + { + vim_snprintf((char *)NameBuff, MAXPATHL, "%d", wincount); + len = (int)STRLEN(NameBuff); + screen_puts_len_for_tabpanel(tplmode, NameBuff, len, +#if defined(FEAT_SYN_HL) + hl_combine_attr(pargs->attr, HL_ATTR(HLF_T)), +#else + pargs->attr, +#endif + pargs); + } + if (modified) + { + buf[0] = '+'; + screen_puts_len_for_tabpanel(tplmode, buf, 1, pargs->attr, pargs); + } + + buf[0] = TPL_FILLCHAR; + screen_puts_len_for_tabpanel(tplmode, buf, 1, pargs->attr, pargs); + } + + get_trans_bufname(pargs->cwp->w_buffer); + shorten_dir(NameBuff); + len = (int)STRLEN(NameBuff); + screen_puts_len_for_tabpanel(tplmode, NameBuff, len, pargs->attr, pargs); + + // fill the tailing area of current row. + if (0 <= (*pargs->prow - pargs->offsetrow) + && (*pargs->prow - pargs->offsetrow) < pargs->maxrow) + screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow, + *pargs->prow - pargs->offsetrow + 1, + *pargs->pcol, pargs->col_end, pargs->attr); + *pargs->pcol = pargs->col_end; +} + +/* + * default tabpanel drawing behavior if 'tabpanel' option is NOT empty. + */ + static void +draw_tabpanel_userdefined(int tplmode, tabpanel_T *pargs) +{ + char_u *p; + int p_crb_save; + char_u buf[IOSIZE]; + stl_hlrec_T *hltab; + stl_hlrec_T *tabtab; + int curattr; + int n; + + // Temporarily reset 'cursorbind', we don't want a side effect from moving + // the cursor away and back. + p_crb_save = pargs->cwp->w_p_crb; + pargs->cwp->w_p_crb = FALSE; + + // Make a copy, because the statusline may include a function call that + // might change the option value and free the memory. + p = vim_strsave(pargs->user_defined); + + build_stl_str_hl(pargs->cwp, buf, sizeof(buf), + p, opt_name, opt_scope, + TPL_FILLCHAR, pargs->col_end - pargs->col_start, &hltab, &tabtab); + + vim_free(p); + pargs->cwp->w_p_crb = p_crb_save; + + curattr = pargs->attr; + p = buf; + for (n = 0; hltab[n].start != NULL; n++) + { + screen_puts_len_for_tabpanel(tplmode, p, (int)(hltab[n].start - p), + curattr, pargs); + p = hltab[n].start; + if (hltab[n].userhl == 0) + curattr = pargs->attr; + else if (hltab[n].userhl < 0) + curattr = syn_id2attr(-hltab[n].userhl); +#ifdef FEAT_TERMINAL + else if (pargs->wp != NULL && pargs->wp != curwin + && bt_terminal(pargs->wp->w_buffer) + && pargs->wp->w_status_height != 0) + curattr = highlight_stltermnc[hltab[n].userhl - 1]; + else if (pargs->wp != NULL && bt_terminal(pargs->wp->w_buffer) + && pargs->wp->w_status_height != 0) + curattr = highlight_stlterm[hltab[n].userhl - 1]; +#endif + else if (pargs->wp != NULL && pargs->wp != curwin + && pargs->wp->w_status_height != 0) + curattr = highlight_stlnc[hltab[n].userhl - 1]; + else + curattr = highlight_user[hltab[n].userhl - 1]; + } + screen_puts_len_for_tabpanel(tplmode, p, (int)STRLEN(p), curattr, pargs); + + // fill the tailing area of current row. + if (0 <= (*pargs->prow - pargs->offsetrow) + && (*pargs->prow - pargs->offsetrow) < pargs->maxrow) + screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow, + *pargs->prow - pargs->offsetrow + 1, *pargs->pcol, + pargs->col_end, curattr); + *pargs->pcol = pargs->col_end; +} + + static char_u * +starts_with_percent_and_bang(tabpanel_T *pargs) +{ + int len = 0; + char_u *usefmt = p_tpl; + + if (usefmt == NULL) + return NULL; + + len = (int)STRLEN(usefmt); + + if (len == 0) + return NULL; + +#ifdef FEAT_EVAL + // if "fmt" was set insecurely it needs to be evaluated in the sandbox + int use_sandbox = was_set_insecurely(opt_name, opt_scope); + + // When the format starts with "%!" then evaluate it as an expression and + // use the result as the actual format string. + if (1 < len && usefmt[0] == '%' && usefmt[1] == '!') + { + typval_T tv; + char_u *p = NULL; + + tv.v_type = VAR_NUMBER; + tv.vval.v_number = pargs->cwp->w_id; + set_var((char_u *)"g:tabpanel_winid", &tv, FALSE); + + p = eval_to_string_safe(usefmt + 2, use_sandbox, FALSE, FALSE); + if (p != NULL) + usefmt = p; + + do_unlet((char_u *)"g:tabpanel_winid", TRUE); + } +#endif + + return usefmt; +} + +/* + * do something by tplmode for drawing tabpanel. + */ + static void +do_by_tplmode( + int tplmode, + int col_start, + int col_end, + int *pcurtab_row, + int *ptabpagenr) +{ + int attr_tplf = HL_ATTR(HLF_TPLF); + int attr_tpls = HL_ATTR(HLF_TPLS); + int attr_tpl = HL_ATTR(HLF_TPL); + int col = col_start; + int row = 0; + tabpage_T *tp = NULL; + typval_T v; + tabpanel_T args; + + args.maxrow = cmdline_row; + args.offsetrow = 0; + args.col_start = col_start; + args.col_end = col_end; + + if (TPLMODE_GET_CURTAB_ROW != tplmode) + if (0 < args.maxrow) + while (args.offsetrow + args.maxrow <= *pcurtab_row) + args.offsetrow += args.maxrow; + + tp = first_tabpage; + + for (row = 0; tp != NULL; row++) + { + if ((TPLMODE_GET_CURTAB_ROW != tplmode) + && (args.maxrow <= (row - args.offsetrow))) + break; + + col = col_start; + + v.v_type = VAR_NUMBER; + v.vval.v_number = tabpage_index(tp); + set_var((char_u *)"g:actual_curtabpage", &v, TRUE); + + if (tp->tp_topframe == topframe) + { + args.attr = attr_tpls; + if (TPLMODE_GET_CURTAB_ROW == tplmode) + { + *pcurtab_row = row; + break; + } + } + else + args.attr = attr_tpl; + + if (tp == curtab) + { + args.cwp = curwin; + args.wp = firstwin; + } + else + { + args.cwp = tp->tp_curwin; + args.wp = tp->tp_firstwin; + } + + char_u* usefmt = starts_with_percent_and_bang(&args); + if (usefmt != NULL) + { + char_u buf[IOSIZE]; + char_u *p = usefmt; + size_t i = 0; + + while (p[i] != '\0') + { + while ((p[i] == '\n') || (p[i] == '\r')) + { + // fill the tailing area of current row. + if (0 <= (row - args.offsetrow) + && (row - args.offsetrow) < args.maxrow) + screen_fill_tailing_area(tplmode, + row - args.offsetrow, + row - args.offsetrow + 1, + col, args.col_end, args.attr); + row++; + col = col_start; + p++; + } + + while ((p[i] != '\n') && (p[i] != '\r') + && (p[i] != '\0')) + { + if (i + 1 >= sizeof(buf)) + break; + buf[i] = p[i]; + i++; + } + buf[i] = '\0'; + + args.user_defined = buf; + args.prow = &row; + args.pcol = &col; + draw_tabpanel_userdefined(tplmode, &args); + + p += i; + i = 0; + } + if (usefmt != p_tpl) + VIM_CLEAR(usefmt); + } + else + { + args.user_defined = NULL; + args.prow = &row; + args.pcol = &col; + draw_tabpanel_default(tplmode, &args); + } + + do_unlet((char_u *)"g:actual_curtabpage", TRUE); + + tp = tp->tp_next; + + if ((TPLMODE_GET_TABPAGENR == tplmode) + && (mouse_row <= (row - args.offsetrow))) + { + *ptabpagenr = v.vval.v_number; + break; + } + } + + // fill the area of TabPanelFill. + screen_fill_tailing_area(tplmode, row - args.offsetrow, args.maxrow, + args.col_start, args.col_end, attr_tplf); +} + +#endif // FEAT_TABPANEL diff --git a/src/term.c b/src/term.c index 03bad0d6a9..2d2c94061d 100644 --- a/src/term.c +++ b/src/term.c @@ -4454,9 +4454,16 @@ scroll_region_set(win_T *wp, int off) { OUT_STR(tgoto((char *)T_CS, W_WINROW(wp) + wp->w_height - 1, W_WINROW(wp) + off)); +#if defined(FEAT_TABPANEL) + if (*T_CSV != NUL) + OUT_STR(tgoto((char *)T_CSV, + wp->w_wincol + wp->w_width - 1 + TPL_LCOL(NULL), + wp->w_wincol + TPL_LCOL(NULL))); +#else if (*T_CSV != NUL && wp->w_width != Columns) OUT_STR(tgoto((char *)T_CSV, wp->w_wincol + wp->w_width - 1, wp->w_wincol)); +#endif screen_start(); // don't know where cursor is now } @@ -4468,7 +4475,7 @@ scroll_region_reset(void) { OUT_STR(tgoto((char *)T_CS, (int)Rows - 1, 0)); if (*T_CSV != NUL) - OUT_STR(tgoto((char *)T_CSV, (int)Columns - 1, 0)); + OUT_STR(tgoto((char *)T_CSV, COLUMNS_WITHOUT_TPL() - 1, 0)); screen_start(); // don't know where cursor is now } diff --git a/src/terminal.c b/src/terminal.c index 9f94825705..a0758409ea 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -1351,7 +1351,7 @@ update_cursor(term_T *term, int redraw) // do not use the window cursor position position_cursor(curwin, &curbuf->b_term->tl_cursor_pos); windgoto(W_WINROW(curwin) + curwin->w_wrow, - curwin->w_wincol + curwin->w_wcol); + curwin->w_wincol + curwin->w_wcol + TPL_LCOL(NULL)); } if (redraw) { @@ -1430,6 +1430,10 @@ write_to_term(buf_T *buffer, char_u *msg, channel_T *channel) if (buffer == curbuf && (State & MODE_CMDLINE) == 0) { update_screen(UPD_VALID_NO_UPDATE); +#if defined(FEAT_TABPANEL) + if (redraw_tabpanel) + draw_tabpanel(); +#endif // update_screen() can be slow, check the terminal wasn't closed // already if (buffer == curbuf && curbuf->b_term != NULL) @@ -4116,7 +4120,8 @@ term_update_window(win_T *wp) #ifdef FEAT_MENU + winbar_height(wp) #endif - , wp->w_wincol, pos.col, wp->w_width, -1, + , wp->w_wincol + TPL_LCOL(wp), pos.col, + wp->w_width, -1, #ifdef FEAT_PROP_POPUP popup_is_popup(wp) ? SLF_POPUP : #endif diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 88bf5c3de0..ef86a7d6be 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -311,6 +311,7 @@ NEW_TESTS = \ test_tab \ test_tabline \ test_tabpage \ + test_tabpanel \ test_tagcase \ test_tagfunc \ test_tagjump \ @@ -567,6 +568,7 @@ NEW_TESTS_RES = \ test_system.res \ test_tab.res \ test_tabpage.res \ + test_tabpanel.res \ test_tagjump.res \ test_taglist.res \ test_tcl.res \ diff --git a/src/testdir/dumps/Test_tabpanel_commandline_0.dump b/src/testdir/dumps/Test_tabpanel_commandline_0.dump new file mode 100644 index 0000000000..5ed359c4bb --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_commandline_0.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| | +0#0000000#ffffff0@34 +|[+2&&|N|o| |N|a|m|e|]| |~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +|a+0#0000001#ffff4012|b@1|r|e|v|i|a|t|e| +3#0000000#ffffff0@1|a|b|c|l|e|a|r| @1|a|b|o|v|e|l|e|f|t| @1|a|b|s|t|r|a|c|t| @4 +|:+0&&|a|b@1|r|e|v|i|a|t|e> @33 diff --git a/src/testdir/dumps/Test_tabpanel_commandline_1.dump b/src/testdir/dumps/Test_tabpanel_commandline_1.dump new file mode 100644 index 0000000000..a44f54eed4 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_commandline_1.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| | +0#0000000#ffffff0@34 +|[+2&&|N|o| |N|a|m|e|]| |~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +0#0000001#e0e0e08|a|b@1|r|e|v|i|a|t|e| @4| +0#4040ff13#ffffff0@28 +| +0#0000001#ffd7ff255|a|b|c|l|e|a|r| @7| +0#4040ff13#ffffff0@28 +| +0#0000001#ffd7ff255|a|b|o|v|e|l|e|f|t| @5| +0#4040ff13#ffffff0@28 +| +0#0000001#ffd7ff255|a|b|s|t|r|a|c|t| @6| +0#4040ff13#ffffff0@28 +|:+0#0000000&|a|b@1|r|e|v|i|a|t|e> @33 diff --git a/src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump b/src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump new file mode 100644 index 0000000000..5fd8f9b118 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @1|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|+| |[|N|o| |N|a|m|e|]| | +1&&@9|X+8#0000001#e0e0e08 +|++2#0000000#ffffff0| |[|N|o| |N|a|m|e>x+0&&@34 +| +1&&@9|x+0&&@34 +| +1&&@9|x+0&&@29| @4 +| +1&&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +0#0000000&@36|1|,|1| @4 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_00.dump b/src/testdir/dumps/Test_tabpanel_drawing_00.dump new file mode 100644 index 0000000000..1491b66f0f --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_00.dump @@ -0,0 +1,6 @@ +> +0&#ffffff0@44 +|~+0#4040ff13&| @43 +|~| @43 +|~| @43 +|~| @43 +| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_drawing_01.dump b/src/testdir/dumps/Test_tabpanel_drawing_01.dump new file mode 100644 index 0000000000..860154222a --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_01.dump @@ -0,0 +1,6 @@ +|X+2&#ffffff0|t|a|b|p|a|n|e|l|1| @5> +0&&@28 +| +1&&@15|~+0#4040ff13&| @27 +| +1#0000000&@15|~+0#4040ff13&| @27 +| +1#0000000&@15|~+0#4040ff13&| @27 +| +1#0000000&@15|~+0#4040ff13&| @27 +| +0#0000000&@26|0|,|0|-|1| @8|A|l|0|, diff --git a/src/testdir/dumps/Test_tabpanel_drawing_02.dump b/src/testdir/dumps/Test_tabpanel_drawing_02.dump new file mode 100644 index 0000000000..f7567dc3b9 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_02.dump @@ -0,0 +1,6 @@ +|2+2#e000e06#ffffff0| +2#0000000&|X|t|a|b|p|a|n|e|l|1| @3> +0&&@19||+1&&| +0&&@7 +| +1&&@15|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6 +| +1#0000000&@15|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6 +| +1#0000000&@15|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6 +| +1#0000000&@15|<+3&&|a|b|p|a|n|e|l|1| |0|,|0|-|1| @1|A|l@1| |<+1&&|l|1| |0|,|0|- +| +0&&@44 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_03.dump b/src/testdir/dumps/Test_tabpanel_drawing_03.dump new file mode 100644 index 0000000000..cb67b9e9b3 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_03.dump @@ -0,0 +1,6 @@ +|2+2#e000e06#ffffff0|++2#0000000&| |X|t|a|b|p|a|n|e|l|1| @2>a+0&&| @18||+1&&|a+0&&| @6 +| +1&&@15|b+0&&| @18||+1&&|b+0&&| @6 +| +1&&@15|c+0&&| @18||+1&&|c+0&&| @6 +| +1&&@15|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6 +| +1#0000000&@15|<+3&&|n|e|l|1| |[|+|]| |1|,|1| @3|A|l@1| |<+1&&|+|]| |1|,|1| +| +0&&@44 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_04.dump b/src/testdir/dumps/Test_tabpanel_drawing_04.dump new file mode 100644 index 0000000000..61b759e67d --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_04.dump @@ -0,0 +1,6 @@ +|2+8#e000e06#e0e0e08|++8#0000001&| |X|t|a|b|p|a|n|e|l|1| @2>d+0#0000000#ffffff0| @27 +|++2&&| |X|t|a|b|p|a|n|e|l|2| @3|e+0&&| @27 +| +1&&@15|f+0&&| @27 +| +1&&@15|~+0#4040ff13&| @27 +| +1#0000000&@15|~+0#4040ff13&| @27 +| +0#0000000&@42|1|, diff --git a/src/testdir/dumps/Test_tabpanel_drawing_05.dump b/src/testdir/dumps/Test_tabpanel_drawing_05.dump new file mode 100644 index 0000000000..e9ea7cbdba --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_05.dump @@ -0,0 +1,6 @@ +| +8#0000001#e0e0e08@15>d+0#0000000#ffffff0| @27 +|1+8#0000001#e0e0e08|:|X+2#4040ff13#ffffff0|t|a|b|p|a|n|e|l|1| +8#0000001#e0e0e08@3|e+0#0000000#ffffff0| @27 +| +2&&@15|f+0&&| @27 +|2+2&&|:|X+0#4040ff13&|t|a|b|p|a|n|e|l|2| +2#0000000&@3|~+0#4040ff13&| @27 +| +1#0000000&@15|~+0#4040ff13&| @27 +| +0#0000000&@42|1|, diff --git a/src/testdir/dumps/Test_tabpanel_drawing_06.dump b/src/testdir/dumps/Test_tabpanel_drawing_06.dump new file mode 100644 index 0000000000..b5935d37c3 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_06.dump @@ -0,0 +1,6 @@ +>d+0&#ffffff0| @27| +8#0000001#e0e0e08@15 +|e+0#0000000#ffffff0| @27|1+8#0000001#e0e0e08|:|X+2#4040ff13#ffffff0|t|a|b|p|a|n|e|l|1| +8#0000001#e0e0e08@3 +|f+0#0000000#ffffff0| @27| +2&&@15 +|~+0#4040ff13&| @27|2+2#0000000&|:|X+0#4040ff13&|t|a|b|p|a|n|e|l|2| +2#0000000&@3 +|~+0#4040ff13&| @27| +1#0000000&@15 +| +0&&@26|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_drawing_07.dump b/src/testdir/dumps/Test_tabpanel_drawing_07.dump new file mode 100644 index 0000000000..440988b6ea --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_07.dump @@ -0,0 +1,6 @@ +> +0&#ffffff0@28| +8#0000001#e0e0e08@15 +|~+0#4040ff13#ffffff0| @27|1+8#0000001#e0e0e08|:|X+2#4040ff13#ffffff0|t|a|b|p|a|n|e|l|1| +8#0000001#e0e0e08@3 +|~+0#4040ff13#ffffff0| @27| +8#0000001#e0e0e08@15 +|~+0#4040ff13#ffffff0| @27|2+8#0000001#e0e0e08|:|X+0#4040ff13#ffffff0|t|a|b|p|a|n|e|l|2| +8#0000001#e0e0e08@3 +|~+0#4040ff13#ffffff0| @27| +2#0000000&@15 +| +0&&@26|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_drawing_08.dump b/src/testdir/dumps/Test_tabpanel_drawing_08.dump new file mode 100644 index 0000000000..57bbf923eb --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_08.dump @@ -0,0 +1,6 @@ +>a+0&#ffffff0| @18||+1&&|a+0&&| @6| +2&&@15 +|b+0&&| @18||+1&&|b+0&&| @6|1+2&&|:|X+0#4040ff13&|t|a|b|p|a|n|e|l|1| +2#0000000&@3 +|c+0&&| @18||+1&&|c+0&&| @6| +1&&@15 +|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6| +1#0000000&@15 +|<+3&&|n|e|l|1| |[|+|]| |1|,|1| @3|A|l@1| |<+1&&|+|]| |1|,|1| @16 +| +0&&@26|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump new file mode 100644 index 0000000000..40e3bd74c8 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08@19> +0#0000000#ffffff0@24 +|T+8#0000001#e0e0e08|O|P| @16|~+0#4040ff13#ffffff0| @23 +|a+8#0000001#e0e0e08@2|.|t|x|t| @12|~+0#4040ff13#ffffff0| @23 +|B+8#0000001#e0e0e08|O|T@1|O|M| @13|~+0#4040ff13#ffffff0| @23 +| +2#0000000&@19|~+0#4040ff13&| @23 +|T+2#0000000&|O|P| @16|~+0#4040ff13&| @23 +|b+2#0000000&@2|.|t|x|t| @12|~+0#4040ff13&| @23 +|B+2#0000000&|O|T@1|O|M| @13|~+0#4040ff13&| @23 +| +1#0000000&@19|~+0#4040ff13&| @23 +| +0#0000000&@44 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump new file mode 100644 index 0000000000..190e5d99fe --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump @@ -0,0 +1,10 @@ +|a+8#0000001#e0e0e08@2|.|t|x|t| @12|!+0#0000000#ffffff0> @23 +|b+2&&@2|.|t|x|t| @12|!+0#0000001#e0e0e08| @14| +0#0000000#0000001| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|#+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|&+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|*+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|++0#0000001#ffd7ff255@1| @13| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|-+0#0000001#ffd7ff255@1| @13| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|<+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|=+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7 +|-+2#0000000&@1| |m+0#00e0003&|a|t|c|h| |1| |o|f| |5|9|6| +0#0000000&@27 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump b/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump new file mode 100644 index 0000000000..9888bc0cc0 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump @@ -0,0 +1,10 @@ +|a+8#0000001#e0e0e08@2|.|t|x|t| @12|!+0#0000000#ffffff0| @23 +|++2&&| |b@2|.|t|x|t| @10| +0&&@1|a|b@1|r|e|v|i|a|t|e> @12 +| +1&&@19|~+0#4040ff13&| +0#0000001#e0e0e08|a|b@1|r|e|v|i|a|t|e| @4| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|~+0#4040ff13&| +0#0000001#ffd7ff255|a|b|c|l|e|a|r| @7| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|~+0#4040ff13&| +0#0000001#ffd7ff255|a|b|o|v|e|l|e|f|t| @5| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|~+0#4040ff13&| +0#0000001#ffd7ff255|a|b|s|t|r|a|c|t| @6| +0#4040ff13#ffffff0@7 +| +1#0000000&@19|~+0#4040ff13&| @23 +| +1#0000000&@19|~+0#4040ff13&| @23 +| +1#0000000&@19|~+0#4040ff13&| @23 +|-+2#0000000&@1| |m+0#00e0003&|a|t|c|h| |1| |o|f| |4| +0#0000000&@29 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_scrolling_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_0.dump new file mode 100644 index 0000000000..fa1947eb47 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_0.dump @@ -0,0 +1,10 @@ +|a+8#0000001#e0e0e08@2|.|t|x|t| @12| +0#af5f00255#ffffff0@1|9| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|1| +|2+2#e000e06&|++2#0000000&| |b@2|.|t|x|t| @9| +0#af5f00255&|1|0| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|2| +| +1#0000000&@19| +0#af5f00255&|1@1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|3| +| +1#0000000&@19| +0#af5f00255&|1|2| >@+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|4| +| +1#0000000&@19| +0#af5f00255&|1|3| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|5| +| +1#0000000&@19| +0#af5f00255&|1|4| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|6| +| +1#0000000&@19| +0#af5f00255&|1|5| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|7| +| +1#0000000&@19| +0#af5f00255&|1|6| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|8| +| +1#0000000&@19|<+3&&|.|t|x|t| |[|+|]| |1|2|,|1| @3|8|%| |<+1&&| |1|, +| +0&&@44 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_scrolling_1.dump b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_1.dump new file mode 100644 index 0000000000..6370449b63 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_1.dump @@ -0,0 +1,10 @@ +|a+8#0000001#e0e0e08@2|.|t|x|t| @12| +0#af5f00255#ffffff0@1|1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +|2+2#e000e06&|++2#0000000&| |b@2|.|t|x|t| @9| +0#af5f00255&@1|2| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19| +0#af5f00255&@1|3| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19|b@2|.|t|x|t| |[|+|]| @1|1|,|1| @5|T|o|p +| @19| +0#af5f00255&|1|5| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19| +0#af5f00255&|1|6| >@+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19| +0#af5f00255&|1|7| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19| +0#af5f00255&|1|8| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19|b+3&&@2|.|t|x|t| |[|+|]| @1|1|6|,|1| @4|1|4|% +| +0&&@44 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_scrolling_2.dump b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_2.dump new file mode 100644 index 0000000000..50b55ea419 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_2.dump @@ -0,0 +1,10 @@ +|a+8#0000001#e0e0e08@2|.|t|x|t| @12| +0#af5f00255#ffffff0|1|9| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +|2+2#e000e06&|++2#0000000&| |b@2|.|t|x|t| @9| +0#af5f00255&|2|0| >@+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19| +0#af5f00255&|2|1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19| +0#af5f00255&|2@1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19|b+3&&@2|.|t|x|t| |[|+|]| @1|2|0|,|1| @4|1|8|% +| +1&&@19| +0#af5f00255&@1|1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19| +0#af5f00255&@1|2| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19| +0#af5f00255&@1|3| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1 +| +1&&@19|b@2|.|t|x|t| |[|+|]| @1|1|,|1| @5|T|o|p +| +0&&@44 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_scrolling_3.dump b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_3.dump new file mode 100644 index 0000000000..fdde1ab7c7 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_3.dump @@ -0,0 +1,10 @@ +|a+8#0000001#e0e0e08@2|.|t|x|t| @12| +0#af5f00255#ffffff0@1|1| ||+1#0000000&| +0#af5f00255&|2|5| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t +|2+2#e000e06&|++2#0000000&| |b@2|.|t|x|t| @9| +0#af5f00255&@1|2| ||+1#0000000&| +0#af5f00255&|2|6| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t +| +1&&@19| +0#af5f00255&@1|3| ||+1#0000000&| +0#af5f00255&|2|7| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t +| +1&&@19| +0#af5f00255&@1|4| ||+1#0000000&| +0#af5f00255&|2|8| >@+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t +| +1&&@19| +0#af5f00255&@1|5| ||+1#0000000&| +0#af5f00255&|2|9| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t +| +1&&@19| +0#af5f00255&@1|6| ||+1#0000000&| +0#af5f00255&|3|0| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t +| +1&&@19| +0#af5f00255&@1|7| ||+1#0000000&| +0#af5f00255&|3|1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t +| +1&&@19| +0#af5f00255&@1|8| ||+1#0000000&| +0#af5f00255&|3|2| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t +| +1&&@19|<| |1|,| |<+3&&|.|t|x|t| |[|+|]| |2|8|,|1| @2|2|6|% +| +0&&@44 diff --git a/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump new file mode 100644 index 0000000000..080fa27884 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10|╔+0#0000000#ffffff0|═|╗|.@18|╔|═|╗ +|[+2&&|S|c|r|a|t|c|h|]| @10|║+0&&|@|║|.@18|║|@|║ +| +1&&@19|╚+0&&|═|╝|.@5|a|t|c|u|r|s|o|r|.@4|╚|═|╝ +| +1&&@19|.+0&&@8>.@15 +| +1&&@19|.+0&&@24 +| +1&&@19|╔+0&&|═|╗|.@18|╔|═|╗ +| +1&&@19|║+0&&|@|║|.@18|║|@|║ +| +1&&@19|╚+0&&|═|╝|.@18|╚|═|╝ +| +1&&@19|.+0&&@24 +| @44 diff --git a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump new file mode 100644 index 0000000000..9214434ece --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump @@ -0,0 +1,10 @@ +|$+8#0000001#e0e0e08| |[|a@2|]| |$|│+1#0000000#ffffff0|$| @13|[|c@2|]| @13|$ +|$+8#0000001#e0e0e08| |[|b@2|]| |$|│+1#0000000#ffffff0> +0&&@34 +|$+2&&| |[|c@2|]| |$|│+1&&|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|$+3&&| @13|[|c@2|]| @13|$ +|"+0&&|c@2|"| |[|N|e|w|]| @33 diff --git a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump new file mode 100644 index 0000000000..dae0d0b054 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump @@ -0,0 +1,10 @@ +|$+1&#ffffff0| @13|[|c@2|]| @13|$|│|$+8#0000001#e0e0e08| |[|a@2|]| |$ +> +0#0000000#ffffff0@34|│+1&&|$+8#0000001#e0e0e08| |[|b@2|]| |$ +|~+0#4040ff13#ffffff0| @33|│+1#0000000&|$+2&&| |[|c@2|]| |$ +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|$+3&&| @13|[|c@2|]| @13|$|│+1&&| @8 +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|+|=|a|l|i|g|n|:|r|i|g|h|t| @15 diff --git a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump new file mode 100644 index 0000000000..dd55218ada --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump @@ -0,0 +1,10 @@ +|t+8#0000001#e0e0e08|o|p| @7|a@2| @1|b@2| | +2#0000000#ffffff0|c@2| | +1&&@18|X+8#0000001#e0e0e08 +|$| |[|a@2|]| @1|$> +0#0000000#ffffff0@34 +|b+8#0000001#e0e0e08|o|t@1|o|m| @3|~+0#4040ff13#ffffff0| @33 +|t+8#0000001#e0e0e08|o|p| @6|~+0#4040ff13#ffffff0| @33 +|$+8#0000001#e0e0e08| |[|b@2|]| @1|$|~+0#4040ff13#ffffff0| @33 +|b+8#0000001#e0e0e08|o|t@1|o|m| @3|~+0#4040ff13#ffffff0| @33 +|t+2#0000000&|o|p| @6|~+0#4040ff13&| @33 +|$+2#0000000&| |[|c@2|]| @1|$|~+0#4040ff13&| @33 +|b+2#0000000&|o|t@1|o|m| @3|~+0#4040ff13&| @33 +|"+0#0000000&|c@2|"| |[|N|e|w|]| @25|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump new file mode 100644 index 0000000000..84bf683e20 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08|a@2| @1|b@2| | +2#0000000#ffffff0|c@2| | +1&&@19|t+8#0000001#e0e0e08|o|p| @6 +> +0#0000000#ffffff0@34|$+8#0000001#e0e0e08| |[|a@2|]| @1|$ +|~+0#4040ff13#ffffff0| @33|b+8#0000001#e0e0e08|o|t@1|o|m| @3 +|~+0#4040ff13#ffffff0| @33|t+8#0000001#e0e0e08|o|p| @6 +|~+0#4040ff13#ffffff0| @33|$+8#0000001#e0e0e08| |[|b@2|]| @1|$ +|~+0#4040ff13#ffffff0| @33|b+8#0000001#e0e0e08|o|t@1|o|m| @3 +|~+0#4040ff13#ffffff0| @33|t+2#0000000&|o|p| @6 +|~+0#4040ff13&| @33|$+2#0000000&| |[|c@2|]| @1|$ +|~+0#4040ff13&| @33|b+2#0000000&|o|t@1|o|m| @3 +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|+|=|a|l|i|g|n|:|r|i|g|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump new file mode 100644 index 0000000000..e974381753 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump @@ -0,0 +1,10 @@ +|1+2&#ffffff0|:|t|a|b| @4> +0&&@34 +|2+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|3+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|4+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|5+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|6+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|7+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|8+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|9+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +| +0#0000000&@36|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump new file mode 100644 index 0000000000..3ac3dde143 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump @@ -0,0 +1,10 @@ +|1+8#0000001#e0e0e08|:|t|a|b| @4> +0#0000000#ffffff0@34 +|2+2&&|:|t|a|b| @4|~+0#4040ff13&| @33 +|3+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|4+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|5+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|6+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|7+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|8+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|9+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +| +0#0000000&@36|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump new file mode 100644 index 0000000000..7b980e6e89 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump @@ -0,0 +1,10 @@ +|1+8#0000001#e0e0e08|:|t|a|b| @4> +0#0000000#ffffff0@34 +|2+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|3+2#0000000&|:|t|a|b| @4|~+0#4040ff13&| @33 +|4+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|5+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|6+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|7+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|8+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|9+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +| +0#0000000&@36|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump new file mode 100644 index 0000000000..fa3c09c413 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump @@ -0,0 +1,10 @@ +|1+8#0000001#e0e0e08|:|t|a|b| @4> +0#0000000#ffffff0@34 +|2+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|3+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|4+2#0000000&|:|t|a|b| @4|~+0#4040ff13&| @33 +|5+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|6+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|7+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|8+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +|9+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33 +| +0#0000000&@36|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump new file mode 100644 index 0000000000..07ff180c05 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump @@ -0,0 +1,10 @@ +|1+8#0000001#e0e0e08|0|:|t|a|b| @3> +0#0000000#ffffff0@34 +|1+2&&@1|:|t|a|b| @3|~+0#4040ff13&| @33 +|1+8#0000001#e0e0e08|2|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33 +|1+8#0000001#e0e0e08|3|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33 +|1+8#0000001#e0e0e08|4|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33 +|1+8#0000001#e0e0e08|5|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33 +|1+8#0000001#e0e0e08|6|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33 +|1+8#0000001#e0e0e08|7|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33 +|1+8#0000001#e0e0e08|8|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33 +|:+0#0000000&|t|a|b|n|e|x|t| |-|3| @25|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump new file mode 100644 index 0000000000..9214434ece --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump @@ -0,0 +1,10 @@ +|$+8#0000001#e0e0e08| |[|a@2|]| |$|│+1#0000000#ffffff0|$| @13|[|c@2|]| @13|$ +|$+8#0000001#e0e0e08| |[|b@2|]| |$|│+1#0000000#ffffff0> +0&&@34 +|$+2&&| |[|c@2|]| |$|│+1&&|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|$+3&&| @13|[|c@2|]| @13|$ +|"+0&&|c@2|"| |[|N|e|w|]| @33 diff --git a/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump new file mode 100644 index 0000000000..dae0d0b054 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump @@ -0,0 +1,10 @@ +|$+1&#ffffff0| @13|[|c@2|]| @13|$|│|$+8#0000001#e0e0e08| |[|a@2|]| |$ +> +0#0000000#ffffff0@34|│+1&&|$+8#0000001#e0e0e08| |[|b@2|]| |$ +|~+0#4040ff13#ffffff0| @33|│+1#0000000&|$+2&&| |[|c@2|]| |$ +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|$+3&&| @13|[|c@2|]| @13|$|│+1&&| @8 +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|+|=|a|l|i|g|n|:|r|i|g|h|t| @15 diff --git a/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump b/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump new file mode 100644 index 0000000000..fdca7f100e --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump @@ -0,0 +1,10 @@ +|a+8#0000001#e0e0e08@2|.|t|x|t| @1|│+1#0000000#ffffff0| +8#0000001#e0e0e08|a@2|.|t|x|t| @1|b@2|.|t|x|t| | +2#0000000#ffffff0|c@2|.|t|x|t| | +1&&@6|X+8#0000001#e0e0e08 +|b@2|.|t|x|t| @1|│+1#0000000#ffffff0> +0&&@34 +|c+2&&@2|.|t|x|t| @1|│+1&&|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +|"+0#0000000&|c@2|.|t|x|t|"| |[|N|e|w|]| @21|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump new file mode 100644 index 0000000000..a50355f1e3 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]|│+1#0000000#ffffff0| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@11|X+8#0000001#e0e0e08 +|[+2#0000000#ffffff0|N|o| |N|a|m|e|]|│+1&&> +0&&@34 +| +1&&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +0#0000000&@36|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump new file mode 100644 index 0000000000..e347c7e522 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump @@ -0,0 +1,10 @@ +|│+1&#ffffff0| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@20|X+8#0000001#e0e0e08 +|│+1#0000000#ffffff0> +0&&@43 +|│+1&&|~+0#4040ff13&| @42 +|│+1#0000000&|~+0#4040ff13&| @42 +|│+1#0000000&|~+0#4040ff13&| @42 +|│+1#0000000&|~+0#4040ff13&| @42 +|│+1#0000000&|~+0#4040ff13&| @42 +|│+1#0000000&|~+0#4040ff13&| @42 +|│+1#0000000&|~+0#4040ff13&| @42 +|:+0#0000000&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|1|,|v|0|,|0|-|1| @8|A|l@1 diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump new file mode 100644 index 0000000000..d1c5b92413 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]|│+1#0000000#ffffff0| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@11|X+8#0000001#e0e0e08 +|[+2#0000000#ffffff0|N|o| |N|a|m|e|]|│+1&&> +0&&@34 +| +1&&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +| +1#0000000&@8|│|~+0#4040ff13&| @33 +|:+0#0000000&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|1|0|,|v|e|r|t| @4|0|,|0|-|1| @2 diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump new file mode 100644 index 0000000000..fc84c0bb5d --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|│+1#0000000#ffffff0| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@19|X+8#0000001#e0e0e08 +|[+2#0000000#ffffff0|│+1&&> +0&&@42 +| +1&&|│|~+0#4040ff13&| @41 +| +1#0000000&|│|~+0#4040ff13&| @41 +| +1#0000000&|│|~+0#4040ff13&| @41 +| +1#0000000&|│|~+0#4040ff13&| @41 +| +1#0000000&|│|~+0#4040ff13&| @41 +| +1#0000000&|│|~+0#4040ff13&| @41 +| +1#0000000&|│|~+0#4040ff13&| @41 +|:+0#0000000&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|2|,|v|e|0|,|0|-|1| @8|A|l diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_0.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_0.dump new file mode 100644 index 0000000000..02aa10989c --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_0.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@12|│|[+8#0000001#e0e0e08|N|o| |N|a|m|e|] +> +0#0000000#ffffff0@34|│+1&&|[+2&&|N|o| |N|a|m|e|] +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +| +0&&@26|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_1.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_1.dump new file mode 100644 index 0000000000..8e97a7e21c --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_1.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@21|│ +> +0&&@43|│+1&& +|~+0#4040ff13&| @42|│+1#0000000& +|~+0#4040ff13&| @42|│+1#0000000& +|~+0#4040ff13&| @42|│+1#0000000& +|~+0#4040ff13&| @42|│+1#0000000& +|~+0#4040ff13&| @42|│+1#0000000& +|~+0#4040ff13&| @42|│+1#0000000& +|~+0#4040ff13&| @42|│+1#0000000& +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|a|l|i|g|n|:|r|i|g|h|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_2.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_2.dump new file mode 100644 index 0000000000..6e33239942 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_2.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@12|│|[+8#0000001#e0e0e08|N|o| |N|a|m|e|] +> +0#0000000#ffffff0@34|│+1&&|[+2&&|N|o| |N|a|m|e|] +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|~+0#4040ff13&| @33|│+1#0000000&| @8 +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|a|l|i|g|n|:|r|i|g|h|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_3.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_3.dump new file mode 100644 index 0000000000..1f9255baac --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_3.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@20|│|[+8#0000001#e0e0e08 +> +0#0000000#ffffff0@42|│+1&&|[+2&& +|~+0#4040ff13&| @41|│+1#0000000&| +|~+0#4040ff13&| @41|│+1#0000000&| +|~+0#4040ff13&| @41|│+1#0000000&| +|~+0#4040ff13&| @41|│+1#0000000&| +|~+0#4040ff13&| @41|│+1#0000000&| +|~+0#4040ff13&| @41|│+1#0000000&| +|~+0#4040ff13&| @41|│+1#0000000&| +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|a|l|i|g|n|:|r|i|g|h|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/dumps/Test_tabpanel_visual_0.dump b/src/testdir/dumps/Test_tabpanel_visual_0.dump new file mode 100644 index 0000000000..af7ba65c99 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_visual_0.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| |a+0&#a8a8a8255@2|1| |b@2|1| >c+0#0000000#ffffff0@2|1| |d@2|1| @15 +|++2&&| |[|N|o| |N|a|m|e|a+0&&@2|2| |b@2|2| |c@2|2| |d@2|2| @15 +| +1&&@9|a+0&&@2|3| |b@2|3| |c@2|3| |d@2|3| @15 +| +1&&@9|a+0&&@2|4| |b@2|4| |c@2|4| |d@2|4| @15 +| +1&&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@4|1@1| @17|1|,|1@1| @3 diff --git a/src/testdir/dumps/Test_tabpanel_visual_1.dump b/src/testdir/dumps/Test_tabpanel_visual_1.dump new file mode 100644 index 0000000000..0cdc5f2a6d --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_visual_1.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| |a+0#0000000#ffffff0@2|1| |b@2|1| |c@2|1| |d@2|1| @15 +|++2&&| |[|N|o| |N|a|m|e|a+0&&@2|2| |b+0#0000001#a8a8a8255@2|2| |c@2>2+0#0000000#ffffff0| |d@2|2| @15 +| +1&&@9|a+0&&@2|3| |b@2|3| |c@2|3| |d@2|3| @15 +| +1&&@9|a+0&&@2|4| |b@2|4| |c@2|4| |d@2|4| @15 +| +1&&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@4|9| @18|2|,|1|4| @3 diff --git a/src/testdir/dumps/Test_tabpanel_visual_2.dump b/src/testdir/dumps/Test_tabpanel_visual_2.dump new file mode 100644 index 0000000000..9a307c18e4 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_visual_2.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| |a+0#0000000#ffffff0@2|1| |b@2|1| |c@2|1| |d@2|1| @15 +|++2&&| |[|N|o| |N|a|m|e|a+0&&@2|2| >b@2|2| |c@2|2| |d@2|2| @15 +| +1&&@9|a+0&&@2|3| |b@2|3| |c@2|3| |d@2|3| @15 +| +1&&@9|a+0&&@2|4| |b@2|4| |c@2|4| |d@2|4| @15 +| +1&&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +| +1#0000000&@9|~+0#4040ff13&| @33 +|b+0#0000000&@2|2| |c@2|2| @27|2|,|6| @4 diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim index 3d798e9f86..1f1545382f 100644 --- a/src/testdir/gen_opt_test.vim +++ b/src/testdir/gen_opt_test.vim @@ -94,6 +94,7 @@ let test_values = { \ 'scrolljump': [[-100, -1, 0, 1, 2, 15], [-101, 999]], \ 'scrolloff': [[0, 1, 8, 999], [-1]], \ 'shiftwidth': [[0, 1, 8, 999], [-1]], + \ 'showtabpanel': [[0, 1, 2], []], \ 'sidescroll': [[0, 1, 8, 999], [-1]], \ 'sidescrolloff': [[0, 1, 8, 999], [-1]], \ 'tabstop': [[1, 4, 8, 12, 9999], [-1, 0, 10000]], @@ -301,6 +302,11 @@ let test_values = { \ ['xxx']], \ 'tabclose': [['', 'left', 'uselast', 'left,uselast'], ['xxx']], \ 'tabline': [['', 'xxx'], ['%$', '%{', '%{%', '%{%}', '%(', '%)']], + \ 'tabpanel': [['', 'aaa', 'bbb'], []], + \ 'tabpanelopt': [['', 'align:left', 'align:right', 'vert', 'columns:0', + \ 'columns:20', 'columns:999'], + \ ['xxx', 'align:', 'align:middle', 'colomns:', 'cols:10', + \ 'cols:-1']], \ 'tagcase': [['followic', 'followscs', 'ignore', 'match', 'smart'], \ ['', 'xxx', 'smart,match']], \ 'termencoding': [has('gui_gtk') ? [] : ['', 'utf-8'], ['xxx']], @@ -373,8 +379,17 @@ let test_prepost = { \ 'verbosefile': [[], ['call delete("Xfile")']], \} -const invalid_options = test_values->keys() +let invalid_options = test_values->keys() \->filter({-> v:val !~# '^other' && !exists($"&{v:val}")}) +for s:skip_option in [ + \ [!has('tabpanel'), 'tabpanel'], + \ [!has('tabpanel'), 'tabpanelopt'], + \ [!has('tabpanel'), 'showtabpanel'], + \ ] + if s:skip_option[0] + call remove(invalid_options, s:skip_option[1]) + endif +endfor if !empty(invalid_options) throw $"Invalid option name in test_values: '{invalid_options->join("', '")}'" endif @@ -406,6 +421,8 @@ while 1 let [pre_processing, post_processing] = get(test_prepost, fullname, [[], []]) let script += pre_processing + " Setting an option can only fail when it's implemented. + call add(script, $"if exists('+{fullname}')") if line =~ 'P_BOOL' for opt in [fullname, shortname] for cmd in ['set', 'setlocal', 'setglobal'] @@ -439,8 +456,6 @@ while 1 endfor " Failure tests - " Setting an option can only fail when it's implemented. - call add(script, $"if exists('+{fullname}')") for opt in [fullname, shortname] for cmd in ['set', 'setlocal', 'setglobal'] for val in invalid_values @@ -464,7 +479,6 @@ while 1 endfor endfor endfor - call add(script, "endif") endif " Cannot change 'termencoding' in GTK @@ -476,6 +490,8 @@ while 1 call add(script, 'endif') endif + call add(script, "endif") + let script += post_processing call add(script, 'endfunc') endwhile diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 68933a3c7b..9a3fe20dfa 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -4345,4 +4345,9 @@ func Test_cmdcomplete_info() set wildoptions& endfunc +func Test_redrawtabpanel_error() + CheckNotFeature tabpanel + call assert_fails(':redrawtabpanel', 'E1547:') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim new file mode 100644 index 0000000000..630226f05b --- /dev/null +++ b/src/testdir/test_tabpanel.vim @@ -0,0 +1,480 @@ +" Tests for tabpanel + +source check.vim +source screendump.vim +CheckFeature tabpanel + +function! s:reset() + set tabpanel& + set tabpanelopt& + set showtabpanel& +endfunc + +function! Test_tabpanel_mouse() + let save_showtabline = &showtabline + let save_mouse = &mouse + set showtabline=0 mouse=a + + tabnew + tabnew + + call test_setmouse(1, 1) + call feedkeys("\", 'xt') + call assert_equal(3, tabpagenr()) + + set showtabpanel=2 tabpanelopt=columns:10 + + call test_setmouse(1, 1) + call feedkeys("\", 'xt') + call assert_equal(1, tabpagenr()) + call test_setmouse(2, 1) + call feedkeys("\", 'xt') + call assert_equal(2, tabpagenr()) + call test_setmouse(3, 1) + call feedkeys("\", 'xt') + call assert_equal(3, tabpagenr()) + + call feedkeys("\", 'xt') + call test_setmouse(2, 3) + let pos = getmousepos() + call assert_equal(2, pos['winrow']) + call assert_equal(0, pos['wincol']) + call assert_equal(2, pos['screenrow']) + call assert_equal(3, pos['screencol']) + + call test_setmouse(1, 11) + call feedkeys("\", 'xt') + let pos = getmousepos() + call assert_equal(1, pos['winrow']) + call assert_equal(1, pos['wincol']) + call assert_equal(1, pos['screenrow']) + call assert_equal(11, pos['screencol']) + + new + wincmd x + + call test_setmouse(10, 11) + call feedkeys("\", 'xt') + let pos = getmousepos() + call assert_equal(10, pos['winrow']) + call assert_equal(1, pos['wincol']) + call assert_equal(10, pos['screenrow']) + call assert_equal(11, pos['screencol']) + + tabonly! + call s:reset() + let &mouse = save_mouse + let &showtabline = save_showtabline +endfunc + +function! Test_tabpanel_drawing() + CheckScreendump + + let lines =<< trim END + function! MyTabPanel() + let n = g:actual_curtabpage + let hi = n == tabpagenr() ? 'TabLineSel' : 'TabLine' + let label = printf("\n%%#%sTabNumber#%d:%%#%s#", hi, n, hi) + let label ..= '%1*%f%*' + return label + endfunction + hi User1 ctermfg=12 + + set showtabline=0 + set showtabpanel=0 + set tabpanelopt=columns:16 + set tabpanel= + silent edit Xtabpanel1 + + nnoremap \01 set showtabpanel=2 + nnoremap \02 v + nnoremap \03 call setline(1, ['a', 'b', 'c']) + nnoremap \04 silent tabnew Xtabpanel2call setline(1, ['d', 'e', 'f']) + nnoremap \05 set tabpanel=%!MyTabPanel() + nnoremap \06 set tabpanelopt+=align:right + nnoremap \07 tab terminal NONEN + nnoremap \08 tabclose!tabclose! + END + call writefile(lines, 'XTest_tabpanel', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel', {'rows': 6, 'cols': 45}) + + call VerifyScreenDump(buf, 'Test_tabpanel_drawing_00', {}) + + for i in range(1, 8) + let n = printf('%02d', i) + call term_sendkeys(buf, '\' .. n) + call VerifyScreenDump(buf, 'Test_tabpanel_drawing_' .. n, {}) + endfor + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_drawing_with_popupwin() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:20 + set showtabline=0 + tabnew + setlocal buftype=nofile + call setbufline(bufnr(), 1, repeat([repeat('.', &columns - 20)], &lines)) + highlight TestingForTabPanelPopupwin guibg=#7777ff guifg=#000000 + for line in [1, &lines] + for col in [1, &columns - 20 - 2] + call popup_create([ + \ '@', + \ ], { + \ 'line': line, + \ 'col': col, + \ 'border': [], + \ 'highlight': 'TestingForTabPanelPopupwin', + \ }) + endfor + endfor + call cursor(4, 10) + call popup_atcursor('atcursor', { + \ 'highlight': 'TestingForTabPanelPopupwin', + \ }) + END + call writefile(lines, 'XTest_tabpanel_with_popupwin', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_with_popupwin', {'rows': 10, 'cols': 45}) + + call VerifyScreenDump(buf, 'Test_tabpanel_drawing_with_popupwin_0', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_drawing_fill_tailing() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:20 + set showtabline=0 + e aaa.txt + tabnew + e bbb.txt + let &tabpanel = "abc" + redraw! + " Check whether "abc" is cleared + let &tabpanel = "\nTOP\n%f\nBOTTOM" + END + call writefile(lines, 'XTest_tabpanel_fill_tailing', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_fill_tailing', {'rows': 10, 'cols': 45}) + + call VerifyScreenDump(buf, 'Test_tabpanel_drawing_fill_tailing_0', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_drawing_pum() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:20 + set showtabline=0 + e aaa.txt + tabnew + e bbb.txt + END + call writefile(lines, 'XTest_tabpanel_pum', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_pum', {'rows': 10, 'cols': 45}) + + call term_sendkeys(buf, "i\\") + call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_0', {}) + + call term_sendkeys(buf, "\ ab\\") + call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_1', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_scrolling() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:20 + set showtabline=0 + set nowrap + set number + e aaa.txt + tabnew + e bbb.txt + vsplit + call setbufline(bufnr(), 1, repeat(['text text text text'], 100)) + wincmd = + END + call writefile(lines, 'XTest_tabpanel_scrolling', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_scrolling', {'rows': 10, 'cols': 45}) + let n = 0 + for c in ['H', 'J', 'K', 'L'] + call term_sendkeys(buf, ":wincmd " .. c .. "\") + call term_sendkeys(buf, "\\") + call term_sendkeys(buf, "r@") + call VerifyScreenDump(buf, 'Test_tabpanel_drawing_scrolling_' .. n, {}) + let n += 1 + endfor + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_many_tabpages() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:10 + set showtabline=0 + set tabpanel=%{g:actual_curtabpage}:tab + execute join(repeat(['tabnew'], 20), ' | ') + END + call writefile(lines, 'XTest_tabpanel_many_tabpages', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_many_tabpages', {'rows': 10, 'cols': 45}) + for n in range(0, 3) + call term_sendkeys(buf, "gt") + call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_' .. n, {}) + endfor + call term_sendkeys(buf, ":tabnext +10\") + call term_sendkeys(buf, ":tabnext -3\") + call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_4', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_visual() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:10 + set showtabline=0 + tabnew + call setbufline(bufnr(), 1, ['aaa1 bbb1 ccc1 ddd1', 'aaa2 bbb2 ccc2 ddd2', 'aaa3 bbb3 ccc3 ddd3', 'aaa4 bbb4 ccc4 ddd4']) + END + call writefile(lines, 'XTest_tabpanel_visual', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_visual', {'rows': 10, 'cols': 45}) + call term_sendkeys(buf, "v2w") + call VerifyScreenDump(buf, 'Test_tabpanel_visual_0', {}) + call term_sendkeys(buf, "\0jw") + call term_sendkeys(buf, "v2wge") + call VerifyScreenDump(buf, 'Test_tabpanel_visual_1', {}) + call term_sendkeys(buf, "y:echo @\"\") + call VerifyScreenDump(buf, 'Test_tabpanel_visual_2', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_commandline() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:10 + set showtabline=0 + tabnew + END + call writefile(lines, 'XTest_tabpanel_commandline', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_commandline', {'rows': 10, 'cols': 45}) + call term_sendkeys(buf, ":ab\") + call VerifyScreenDump(buf, 'Test_tabpanel_commandline_0', {}) + + call term_sendkeys(buf, "\") + call term_sendkeys(buf, ":set wildoptions=pum\") + call term_sendkeys(buf, ":ab\") + call VerifyScreenDump(buf, 'Test_tabpanel_commandline_1', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_tabline_and_tabpanel() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:10,vert + set fillchars=tpl_vert:│ + set showtabline=2 + e aaa.txt + tabnew + e bbb.txt + tabnew + e ccc.txt + END + call writefile(lines, 'XTest_tabpanel_tabline_and_tabpanel', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_tabline_and_tabpanel', {'rows': 10, 'cols': 45}) + call VerifyScreenDump(buf, 'Test_tabpanel_tabline_and_tabpanel_0', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_dont_overflow_into_tabpanel() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:10 + set showtabline=2 + tabnew + call setline(1, repeat('x', 100)) + set wrap + END + call writefile(lines, 'XTest_tabpanel_dont_overflow_into_tabpanel', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_dont_overflow_into_tabpanel', {'rows': 10, 'cols': 45}) + call VerifyScreenDump(buf, 'Test_tabpanel_dont_overflow_into_tabpanel_0', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_dont_vert_is_multibytes_left() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=columns:10,vert + set fillchars=tpl_vert:│ + set showtabline=2 + tabnew + END + call writefile(lines, 'XTest_tabpanel_vert_is_multibyte_lefts', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibyte_lefts', {'rows': 10, 'cols': 45}) + call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_0', {}) + + call term_sendkeys(buf, ":set tabpanelopt=columns:1,vert\") + call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_1', {}) + + call term_sendkeys(buf, ":set tabpanelopt=columns:10,vert\") + call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_2', {}) + + call term_sendkeys(buf, ":set tabpanelopt=columns:2,vert\") + call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_3', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_dont_vert_is_multibytes_right() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set tabpanelopt=align:right,columns:10,vert + set fillchars=tpl_vert:│ + set showtabline=2 + tabnew + END + call writefile(lines, 'XTest_tabpanel_vert_is_multibytes_right', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibytes_right', {'rows': 10, 'cols': 45}) + call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_0', {}) + + call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:1,vert\") + call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_1', {}) + + call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:10,vert\") + call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_2', {}) + + call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:2,vert\") + call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_3', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_eval_tabpanel_statusline_tabline() + CheckScreendump + + let lines =<< trim END + function! Expr() + return "$%=[%f]%=$" + endfunction + set laststatus=2 + set showtabline=2 + set showtabpanel=2 + set statusline=%!Expr() + set tabline=%!Expr() + set tabpanel=%!Expr() + set tabpanelopt=columns:10,vert + set fillchars=tpl_vert:│ + e aaa + tabnew + e bbb + tabnew + e ccc + END + call writefile(lines, 'XTest_tabpanel_eval_tabpanel_statusline_tabline', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45}) + call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_0', {}) + call term_sendkeys(buf, ":set tabpanelopt+=align:right\") + call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_1', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_noeval_tabpanel_statusline_tabline() + CheckScreendump + + let lines =<< trim END + set laststatus=2 + set showtabline=2 + set showtabpanel=2 + set statusline=$%=[%f]%=$ + set tabline=$%=[%f]%=$ + set tabpanel=$%=[%f]%=$ + set tabpanelopt=columns:10,vert + set fillchars=tpl_vert:│ + e aaa + tabnew + e bbb + tabnew + e ccc + END + call writefile(lines, 'XTest_tabpanel_noeval_tabpanel_statusline_tabline', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_noeval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45}) + call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_0', {}) + call term_sendkeys(buf, ":set tabpanelopt+=align:right\") + call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_1', {}) + + call StopVimInTerminal(buf) +endfunc + +function! Test_tabpanel_eval_tabpanel_with_linebreaks() + CheckScreendump + + let lines =<< trim END + function! Expr() + return "top\n$%=[%f]%=$\nbottom" + endfunction + set showtabpanel=2 + set tabpanel=%!Expr() + set tabpanelopt=columns:10 + e aaa + tabnew + e bbb + tabnew + e ccc + END + call writefile(lines, 'XTest_tabpanel_eval_tabpanel_with_linebreaks', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_with_linebreaks', {'rows': 10, 'cols': 45}) + call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_0', {}) + call term_sendkeys(buf, ":set tabpanelopt+=align:right\") + call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_1', {}) + + call StopVimInTerminal(buf) +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 5475e0ad1a..88653f803f 100644 --- a/src/version.c +++ b/src/version.c @@ -554,6 +554,11 @@ static char *(features[]) = // only interesting on Unix systems #if defined(USE_SYSTEM) && defined(UNIX) "+system()", +#endif +#if defined(FEAT_TABPANEL) + "+tabpanel", +#else + "-tabpanel", #endif "+tag_binary", "-tag_old_static", @@ -4037,7 +4042,7 @@ intro_message( // start displaying the message lines after half of the blank lines row = blanklines / 2; - if ((row >= 2 && Columns >= 50) || colon) + if ((row >= 2 && COLUMNS_WITHOUT_TPL() >= 50) || colon) { for (i = 0; i < (int)ARRAY_LENGTH(lines); ++i) { @@ -4120,7 +4125,7 @@ do_intro_line( } col += (int)STRLEN(vers); } - col = (Columns - col) / 2; + col = (COLUMNS_WITHOUT_TPL() - col) / 2; if (col < 0) col = 0; @@ -4139,13 +4144,14 @@ do_intro_line( else clen += byte2cells(p[l]); } - screen_puts_len(p, l, row, col, *p == '<' ? HL_ATTR(HLF_8) : attr); + screen_puts_len(p, l, row, col + TPL_LCOL(NULL), + *p == '<' ? HL_ATTR(HLF_8) : attr); col += clen; } // Add the version number to the version line. if (add_version) - screen_puts(vers, row, col, 0); + screen_puts(vers, row, col + TPL_LCOL(NULL), 0); } /* @@ -4155,6 +4161,9 @@ do_intro_line( ex_intro(exarg_T *eap UNUSED) { screenclear(); +#if defined(FEAT_TABPANEL) + draw_tabpanel(); +#endif intro_message(TRUE); wait_return(TRUE); } diff --git a/src/vim.h b/src/vim.h index fbe5c34195..26adc18170 100644 --- a/src/vim.h +++ b/src/vim.h @@ -919,6 +919,14 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring); #define FINDFILE_DIR 1 // only directories #define FINDFILE_BOTH 2 // files and directories +#if defined(FEAT_TABPANEL) +# define COLUMNS_WITHOUT_TPL() (Columns - tabpanel_width()) +# define TPL_LCOL(W) tabpanel_leftcol(W) +#else +# define COLUMNS_WITHOUT_TPL() Columns +# define TPL_LCOL(W) 0 +#endif + #define W_ENDCOL(wp) ((wp)->w_wincol + (wp)->w_width) #ifdef FEAT_MENU # define W_WINROW(wp) ((wp)->w_winrow + (wp)->w_winbar_height) @@ -1547,6 +1555,9 @@ typedef enum , HLF_ST // status lines of terminal windows , HLF_STNC // status lines of not-current terminal windows , HLF_MSG // message area + , HLF_TPL // tabpanel + , HLF_TPLS // tabpanel selected + , HLF_TPLF // tabpanel filler , HLF_COUNT // MUST be the last one } hlf_T; @@ -1558,7 +1569,8 @@ typedef enum 'B', 'P', 'R', 'L', \ '+', '=', 'k', '<','[', ']', '{', '}', 'x', 'X', \ '*', '#', '_', '!', '.', 'o', 'q', \ - 'z', 'Z', 'g'} + 'z', 'Z', 'g', \ + '%', '^', '&' } /* * Values for behaviour in spell_move_to @@ -2077,6 +2089,7 @@ typedef int sock_T; #define IN_STATUS_LINE 2 // on status or command line #define IN_SEP_LINE 4 // on vertical separator line #define IN_OTHER_WIN 8 // in other window but can't go there +#define IN_TABPANEL 16 // in tabpanel #define CURSOR_MOVED 0x100 #define MOUSE_FOLD_CLOSE 0x200 // clicked on '-' in fold column #define MOUSE_FOLD_OPEN 0x400 // clicked on '+' in fold column diff --git a/src/window.c b/src/window.c index 1eb32bc3ac..c7fea12474 100644 --- a/src/window.c +++ b/src/window.c @@ -1386,7 +1386,7 @@ win_split_ins( if (flags & (WSP_TOP | WSP_BOT)) { wp->w_wincol = 0; - win_new_width(wp, Columns); + win_new_width(wp, COLUMNS_WITHOUT_TPL()); wp->w_vsep_width = 0; } else @@ -2086,7 +2086,7 @@ win_equal( dir = *p_ead; win_equal_rec(next_curwin == NULL ? curwin : next_curwin, current, topframe, dir, 0, tabline_height(), - (int)Columns, topframe->fr_height); + (int)COLUMNS_WITHOUT_TPL(), topframe->fr_height); if (!is_aucmd_win(next_curwin)) win_fix_scroll(TRUE); } @@ -2144,7 +2144,7 @@ win_equal_rec( // frame. n = frame_minwidth(topfr, NOWIN); // add one for the rightmost window, it doesn't have a separator - if (col + width == Columns) + if (col + width == COLUMNS_WITHOUT_TPL()) extra_sep = 1; else extra_sep = 0; @@ -2623,6 +2623,10 @@ close_last_window_tabpage( apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf); if (old_curbuf != curbuf) apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf); +#if defined(FEAT_TABPANEL) + if (p_stpl > 0) + shell_new_columns(); +#endif return TRUE; } @@ -4558,7 +4562,7 @@ win_alloc_firstwin(win_T *oldwin) if (curwin->w_frame == NULL) return FAIL; topframe = curwin->w_frame; - topframe->fr_width = Columns; + topframe->fr_width = COLUMNS_WITHOUT_TPL(); topframe->fr_height = Rows - p_ch; return OK; @@ -4588,8 +4592,8 @@ win_init_size(void) firstwin->w_height = ROWS_AVAIL; firstwin->w_prev_height = ROWS_AVAIL; topframe->fr_height = ROWS_AVAIL; - firstwin->w_width = Columns; - topframe->fr_width = Columns; + firstwin->w_width = COLUMNS_WITHOUT_TPL(); + topframe->fr_width = COLUMNS_WITHOUT_TPL(); } /* @@ -4963,7 +4967,7 @@ leave_tabpage( tp->tp_lastwin = lastwin; tp->tp_old_Rows = Rows; if (tp->tp_old_Columns != -1) - tp->tp_old_Columns = Columns; + tp->tp_old_Columns = COLUMNS_WITHOUT_TPL(); firstwin = NULL; lastwin = NULL; return OK; @@ -5026,12 +5030,12 @@ enter_tabpage( #endif )) shell_new_rows(); - if (curtab->tp_old_Columns != Columns) + if (curtab->tp_old_Columns != COLUMNS_WITHOUT_TPL()) { if (starting == 0) { shell_new_columns(); // update window widths - curtab->tp_old_Columns = Columns; + curtab->tp_old_Columns = COLUMNS_WITHOUT_TPL(); } else curtab->tp_old_Columns = -1; // update window widths later @@ -5244,6 +5248,9 @@ tabpage_move(int nr) // Need to redraw the tabline. Tab page contents doesn't change. redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif } @@ -5667,6 +5674,9 @@ win_enter_ext(win_T *wp, int flags) redraw_mode = TRUE; #endif redraw_tabline = TRUE; +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif if (restart_edit) redraw_later(UPD_VALID); // causes status line redraw @@ -5792,7 +5802,7 @@ win_alloc(win_T *after, int hidden) if (!hidden) win_append(after, new_wp); new_wp->w_wincol = 0; - new_wp->w_width = Columns; + new_wp->w_width = COLUMNS_WITHOUT_TPL(); // position the display and the cursor at the top of the file. new_wp->w_topline = 1; @@ -6181,9 +6191,9 @@ shell_new_columns(void) // First try setting the widths of windows with 'winfixwidth'. If that // doesn't result in the right width, forget about that option. - frame_new_width(topframe, (int)Columns, FALSE, TRUE); - if (!frame_check_width(topframe, Columns)) - frame_new_width(topframe, (int)Columns, FALSE, FALSE); + frame_new_width(topframe, COLUMNS_WITHOUT_TPL(), FALSE, TRUE); + if (!frame_check_width(topframe, COLUMNS_WITHOUT_TPL())) + frame_new_width(topframe, COLUMNS_WITHOUT_TPL(), FALSE, FALSE); (void)win_comp_pos(); // recompute w_winrow and w_wincol #if 0 @@ -6425,7 +6435,7 @@ frame_setheight(frame_T *curfrp, int height) if (frp != curfrp) room -= frame_minheight(frp, NULL); } - if (curfrp->fr_width != Columns) + if (curfrp->fr_width != COLUMNS_WITHOUT_TPL()) room_cmdline = 0; else { @@ -6438,7 +6448,7 @@ frame_setheight(frame_T *curfrp, int height) if (height <= room + room_cmdline) break; - if (run == 2 || curfrp->fr_width == Columns) + if (run == 2 || curfrp->fr_width == COLUMNS_WITHOUT_TPL()) { height = room + room_cmdline; break; @@ -7333,7 +7343,7 @@ command_height(void) // Find bottom frame with width of screen. frame_T *frp = lastwin->w_frame; - while (frp->fr_width != Columns && frp->fr_parent != NULL) + while (frp->fr_width != COLUMNS_WITHOUT_TPL() && frp->fr_parent != NULL) frp = frp->fr_parent; // Avoid changing the height of a window with 'winfixheight' set. From c49cb93a86216eb3a9e5816227e242d54b72bdf8 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 14 May 2025 23:32:13 +0200 Subject: [PATCH 255/633] patch 9.1.1392: missing patch number Problem: missing patch number (Tony Mechelynck) Solution: add missing patche number Signed-off-by: Christian Brabandt --- src/version.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/version.c b/src/version.c index 88653f803f..e4651653ba 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,10 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1392, +/**/ + 1391, /**/ 1390, /**/ From 31be82e66d412000f1d964a36bb8a03d40eaaeac Mon Sep 17 00:00:00 2001 From: Sean Dewar <6256228+seandewar@users.noreply.github.com> Date: Thu, 15 May 2025 19:59:37 +0200 Subject: [PATCH 256/633] patch 9.1.1393: missing test for switching buffers and reusing curbuf Problem: The check in buf_freeall that restores curwin subtly prevents leaving an unloaded buffer in a window when reusing curbuf, if autocommands switch to a different buffer. Solution: Add a test case that covers this. Also ensure splitting isn't possible, as that could do the same (Sean Dewar) closes: #17325 Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com> Signed-off-by: Christian Brabandt --- src/buffer.c | 2 +- src/testdir/test_autocmd.vim | 27 +++++++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/buffer.c b/src/buffer.c index 49ec77c7b1..48e8cb63bc 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -909,7 +909,7 @@ buf_freeall(buf_T *buf, int flags) // If the buffer was in curwin and the window has changed, go back to that // window, if it still exists. This avoids that ":edit x" triggering a // "tabnext" BufUnload autocmd leaves a window behind without a buffer. - if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin)) + if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin)) { block_autocmds(); goto_tabpage_win(the_curtab, the_curwin); diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index 26f7145652..1988807f75 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -5415,4 +5415,31 @@ func Test_reuse_curbuf_leak() %bw! endfunc +func Test_reuse_curbuf_switch() + edit asdf + let s:asdf_win = win_getid() + new + let other_buf = bufnr() + let other_win = win_getid() + augroup testing + autocmd! + autocmd BufUnload * ++once let s:triggered = 1 + \| call assert_fails('split', 'E1159:') + \| call win_gotoid(s:asdf_win) + augroup END + + " Check BufUnload changing curbuf does not cause buflist_new to create a new + " buffer while leaving "other_buf" unloaded in a window. + enew + call assert_equal(1, s:triggered) + call assert_equal(other_buf, bufnr()) + call assert_equal(other_win, win_getid()) + call assert_equal(1, win_findbuf(other_buf)->len()) + call assert_equal(1, bufloaded(other_buf)) + + unlet! s:asdf_win s:triggered + call CleanUpTestAuGroup() + %bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index e4651653ba..ffcfccb2dc 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1393, /**/ 1392, /**/ From 1aa68dffbf2a80d143ee0e659289dbbc430606af Mon Sep 17 00:00:00 2001 From: Alexander Abrosimov Date: Thu, 15 May 2025 20:06:29 +0200 Subject: [PATCH 257/633] runtime(pandoc): update YAML metadata block parsing in compiler runtime Previously the incorrect regexp forced title to be a single letter because of using '+' instead of the '\+' regexp modifier. closes: #17321 Signed-off-by: Alexander Abrosimov Signed-off-by: Christian Brabandt --- runtime/compiler/pandoc.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runtime/compiler/pandoc.vim b/runtime/compiler/pandoc.vim index 5d90a518c9..40d2d02633 100644 --- a/runtime/compiler/pandoc.vim +++ b/runtime/compiler/pandoc.vim @@ -2,6 +2,7 @@ " Compiler: Pandoc " Maintainer: Konfekt " Last Change: 2024 Nov 19 +" 2025 May 15 Update the title regex for CompilerSet #17321 " " Expects output file extension, say `:make html` or `:make pdf`. " Passes additional arguments to pandoc, say `:make html --self-contained`. @@ -51,7 +52,7 @@ endfunction execute 'CompilerSet makeprg=pandoc'..escape( \ ' --standalone'.. - \ (s:PandocFiletype(&filetype) ==# 'markdown' && (getline(1) =~# '^%\s\+\S\+' || (search('^title:\s+\S+', 'cnw') > 0)) ? + \ (s:PandocFiletype(&filetype) ==# 'markdown' && (getline(1) =~# '^%\s\+\S\+' || (search('^title:\s\+\S\+', 'cnw') > 0)) ? \ '' : ' --metadata title=%:t:r:S').. \ ' '..s:PandocLang().. \ ' --from='..s:PandocFiletype(&filetype).. From 6451e5f51763db085a784925a4a4f7b92e70b7cf Mon Sep 17 00:00:00 2001 From: Kat <65649991+00-kat@users.noreply.github.com> Date: Thu, 15 May 2025 20:10:48 +0200 Subject: [PATCH 258/633] runtime(gleam): add @Spell clusters to syntax script closes: #17324 Signed-off-by: Kat <65649991+00-kat@users.noreply.github.com> Signed-off-by: Kirill Morozov Signed-off-by: Christian Brabandt --- runtime/syntax/gleam.vim | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/runtime/syntax/gleam.vim b/runtime/syntax/gleam.vim index 6c2bab7bad..e89ab564e9 100644 --- a/runtime/syntax/gleam.vim +++ b/runtime/syntax/gleam.vim @@ -3,6 +3,7 @@ " Maintainer: Kirill Morozov " Based On: https://github.com/gleam-lang/gleam.vim " Last Change: 2025 Apr 20 +" 2025 May 15 Add @Spell clusters #17324 if exists("b:current_syntax") finish @@ -38,7 +39,7 @@ syntax match gleamNumber "\<-\=0[xX]_\?\%(\x\|\x_\x\)\+\>" syntax match gleamFloat "\(0*[1-9][0-9_]*\|0\)\.\(0*[1-9][0-9_]*\|0\)\(e-\=0*[1-9][0-9_]*\)\=" " String -syntax region gleamString start=/"/ end=/"/ contains=gleamSpecial +syntax region gleamString start=/"/ end=/"/ contains=gleamSpecial,@Spell syntax match gleamSpecial '\\.' contained " Operators @@ -58,19 +59,19 @@ syntax match gleamOperator "[<>]=\=\.\=\|[=!]=" syntax match gleamOperator "\.\.\|<>\||" " Type -syntax match gleamIdentifier "\<[A-Z][a-zA-Z0-9]*\>" +syntax match gleamIdentifier "\<[A-Z][a-zA-Z0-9]*\>" contains=@NoSpell " Attribute -syntax match gleamPreProc "@[a-z][a-z_]*" +syntax match gleamPreProc "@[a-z][a-z_]*" contains=@NoSpell " Function definition syntax keyword gleamKeyword fn nextgroup=gleamFunction skipwhite skipempty -syntax match gleamFunction "[a-z][a-z0-9_]*\ze\s*(" skipwhite skipnl +syntax match gleamFunction "[a-z][a-z0-9_]*\ze\s*(" skipwhite skipnl contains=@NoSpell " Comments -syntax region gleamComment start="//" end="$" contains=gleamTodo -syntax region gleamSpecialComment start="///" end="$" -syntax region gleamSpecialComment start="////" end="$" +syntax region gleamComment start="//" end="$" contains=gleamTodo,@Spell +syntax region gleamSpecialComment start="///" end="$" contains=@Spell +syntax region gleamSpecialComment start="////" end="$" contains=@Spell syntax keyword gleamTodo contained TODO FIXME XXX NB NOTE " Highlight groups From ba19b658998e5bfa9456fde00ae98759af6dde6d Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Thu, 15 May 2025 20:16:04 +0200 Subject: [PATCH 259/633] runtime(doc): fix typo in description of :redrawtabpanel Signed-off-by: Christian Brabandt --- runtime/doc/various.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt index 00b79f41fa..8416a17e71 100644 --- a/runtime/doc/various.txt +++ b/runtime/doc/various.txt @@ -1,4 +1,4 @@ -*various.txt* For Vim version 9.1. Last change: 2025 May 14 +*various.txt* For Vim version 9.1. Last change: 2025 May 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -37,7 +37,7 @@ CTRL-L Clear and redraw the screen. The redraw may happen automatic updating. *E1547* *:redrawtabp* *:redrawtabpanel* -:redrawtabp[anel] Redraw the tabline. Useful to update the tabpanel +:redrawtabp[anel] Redraw the tabpanel Useful to update the tabpanel when 'tabpanel' includes an item that doesn't trigger automatic updating. From c659e4a51663db6955dd5f690dff536576430374 Mon Sep 17 00:00:00 2001 From: Hirohito Higashi Date: Fri, 16 May 2025 19:34:34 +0200 Subject: [PATCH 260/633] patch 9.1.1394: tabpanel not correctly redrawn on tabonly Problem: tabpanel not correctly redrawn on tabonly (Maxim Kim, after v9.1.1391) Solution: force redraw of the tabpanel, tweak style (Hirohito Higashi) fixes: #17322 closes: #17330 Signed-off-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- src/proto/tabpanel.pro | 2 +- src/tabpanel.c | 101 +++++++++----------- src/testdir/dumps/Test_tabpanel_only_0.dump | 10 ++ src/testdir/dumps/Test_tabpanel_only_1.dump | 10 ++ src/testdir/test_tabpanel.vim | 97 +++++++++++-------- src/version.c | 2 + src/window.c | 6 +- 7 files changed, 132 insertions(+), 96 deletions(-) create mode 100644 src/testdir/dumps/Test_tabpanel_only_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_only_1.dump diff --git a/src/proto/tabpanel.pro b/src/proto/tabpanel.pro index 3cbaa2fcf6..34c3e527af 100644 --- a/src/proto/tabpanel.pro +++ b/src/proto/tabpanel.pro @@ -1,6 +1,6 @@ /* tabpanel.c */ int tabpanel_width(void); -int tabpanel_leftcol(win_T *wp); +int tabpanel_leftcol(win_T *wp); int tabpanelopt_changed(void); void draw_tabpanel(void); int get_tabpagenr_on_tabpanel(void); diff --git a/src/tabpanel.c b/src/tabpanel.c index f4bed4b7c3..0472e6b4be 100644 --- a/src/tabpanel.c +++ b/src/tabpanel.c @@ -16,7 +16,7 @@ #if defined(FEAT_TABPANEL) || defined(PROTO) static void do_by_tplmode(int tplmode, int col_start, int col_end, - int* pcurtab_row, int* ptabpagenr); + int *pcurtab_row, int *ptabpagenr); // set pcurtab_row. don't redraw tabpanel. #define TPLMODE_GET_CURTAB_ROW 0 @@ -29,10 +29,6 @@ static void do_by_tplmode(int tplmode, int col_start, int col_end, #define VERT_LEN 1 -// tpl_vert's values -#define VERT_OFF 0 -#define VERT_ON 1 - // tpl_align's values #define ALIGN_LEFT 0 #define ALIGN_RIGHT 1 @@ -41,7 +37,7 @@ static char_u *opt_name = (char_u *)"tabpanel"; static int opt_scope = OPT_LOCAL; static int tpl_align = ALIGN_LEFT; static int tpl_columns = 20; -static int tpl_vert = VERT_OFF; +static int tpl_is_vert = FALSE; typedef struct { win_T *wp; @@ -62,7 +58,7 @@ tabpanelopt_changed(void) char_u *p; int new_align = ALIGN_LEFT; int new_columns = 20; - int new_vert = VERT_OFF; + int new_is_vert = FALSE; p = p_tplo; while (*p != NUL) @@ -85,7 +81,7 @@ tabpanelopt_changed(void) else if (STRNCMP(p, "vert", 4) == 0) { p += 4; - new_vert = VERT_ON; + new_is_vert = TRUE; } if (*p != ',' && *p != NUL) @@ -96,7 +92,7 @@ tabpanelopt_changed(void) tpl_align = new_align; tpl_columns = new_columns; - tpl_vert = new_vert; + tpl_is_vert = new_is_vert; return OK; } @@ -130,9 +126,7 @@ tabpanel_width(void) int tabpanel_leftcol(win_T *wp) { - if (cmdline_pum_active()) - return 0; - else if (wp != NULL && WIN_IS_POPUP(wp)) + if (cmdline_pum_active() || (wp != NULL && WIN_IS_POPUP(wp))) return 0; else return tpl_align == ALIGN_RIGHT ? 0 : tabpanel_width(); @@ -156,7 +150,7 @@ draw_tabpanel(void) int vsrow = 0; int is_right = tpl_align == ALIGN_RIGHT; - if (0 == maxwidth) + if (maxwidth == 0) return; #ifndef MSWIN @@ -168,8 +162,7 @@ int vsrow = 0; else off = LineOffset[row]; - vim_memset(ScreenLines + off, ' ', - (size_t)maxwidth * sizeof(schar_T)); + vim_memset(ScreenLines + off, ' ', (size_t)maxwidth * sizeof(schar_T)); if (enc_utf8) vim_memset(ScreenLinesUC + off, -1, (size_t)maxwidth * sizeof(u8char_T)); @@ -179,7 +172,7 @@ int vsrow = 0; // Reset got_int to avoid build_stl_str_hl() isn't evaluted. got_int = FALSE; - if (tpl_vert == VERT_ON) + if (tpl_is_vert) { if (is_right) { @@ -237,7 +230,7 @@ get_tabpagenr_on_tabpanel(void) int curtab_row = 0; int tabpagenr = 0; - if (0 == maxwidth) + if (maxwidth == 0) return -1; do_by_tplmode(TPLMODE_GET_CURTAB_ROW, 0, maxwidth, &curtab_row, NULL); @@ -260,7 +253,7 @@ screen_fill_tailing_area( int attr) { int is_right = tpl_align == ALIGN_RIGHT; - if (TPLMODE_REDRAW == tplmode) + if (tplmode == TPLMODE_REDRAW) screen_fill(row_start, row_end, (is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_start, (is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_end, @@ -282,19 +275,19 @@ screen_puts_len_for_tabpanel( int chlen; int chcells; char_u buf[IOSIZE]; - char_u* temp; + char_u *temp; for (j = 0; j < len;) { - if ((TPLMODE_GET_CURTAB_ROW != tplmode) - && (pargs->maxrow <= (*pargs->prow - pargs->offsetrow))) + if (tplmode != TPLMODE_GET_CURTAB_ROW + && pargs->maxrow <= *pargs->prow - pargs->offsetrow) break; - if ((p[j] == '\n') || (p[j] == '\r')) + if (p[j] == '\n' || p[j] == '\r') { // fill the tailing area of current row. - if (0 <= (*pargs->prow - pargs->offsetrow) - && (*pargs->prow - pargs->offsetrow) < pargs->maxrow) + if (*pargs->prow - pargs->offsetrow >= 0 + && *pargs->prow - pargs->offsetrow < pargs->maxrow) screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow, *pargs->prow - pargs->offsetrow + 1, @@ -331,8 +324,8 @@ screen_puts_len_for_tabpanel( if (pargs->col_end < (*pargs->pcol) + chcells) { // fill the tailing area of current row. - if (0 <= (*pargs->prow - pargs->offsetrow) - && (*pargs->prow - pargs->offsetrow) < pargs->maxrow) + if (*pargs->prow - pargs->offsetrow >= 0 + && *pargs->prow - pargs->offsetrow < pargs->maxrow) screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow, *pargs->prow - pargs->offsetrow + 1, @@ -343,17 +336,17 @@ screen_puts_len_for_tabpanel( break; } - if ((*pargs->pcol) + chcells <= pargs->col_end) + if (*pargs->pcol + chcells <= pargs->col_end) { int off = (tpl_align == ALIGN_RIGHT) ? COLUMNS_WITHOUT_TPL() : 0; - if ((TPLMODE_REDRAW == tplmode) - && (0 <= (*pargs->prow - pargs->offsetrow) - && (*pargs->prow - pargs->offsetrow) < pargs->maxrow)) + if (TPLMODE_REDRAW == tplmode + && (*pargs->prow - pargs->offsetrow >= 0 + && *pargs->prow - pargs->offsetrow < pargs->maxrow)) screen_puts(buf, *pargs->prow - pargs->offsetrow, *pargs->pcol + off, attr); - (*pargs->pcol) += chcells; + *pargs->pcol += chcells; } } } @@ -376,9 +369,9 @@ draw_tabpanel_default(int tplmode, tabpanel_T *pargs) if (bufIsChanged(pargs->wp->w_buffer)) modified = TRUE; - if (modified || 1 < wincount) + if (modified || wincount > 1) { - if (1 < wincount) + if (wincount > 1) { vim_snprintf((char *)NameBuff, MAXPATHL, "%d", wincount); len = (int)STRLEN(NameBuff); @@ -406,8 +399,8 @@ draw_tabpanel_default(int tplmode, tabpanel_T *pargs) screen_puts_len_for_tabpanel(tplmode, NameBuff, len, pargs->attr, pargs); // fill the tailing area of current row. - if (0 <= (*pargs->prow - pargs->offsetrow) - && (*pargs->prow - pargs->offsetrow) < pargs->maxrow) + if (*pargs->prow - pargs->offsetrow >= 0 + && *pargs->prow - pargs->offsetrow < pargs->maxrow) screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow, *pargs->prow - pargs->offsetrow + 1, *pargs->pcol, pargs->col_end, pargs->attr); @@ -473,8 +466,8 @@ draw_tabpanel_userdefined(int tplmode, tabpanel_T *pargs) screen_puts_len_for_tabpanel(tplmode, p, (int)STRLEN(p), curattr, pargs); // fill the tailing area of current row. - if (0 <= (*pargs->prow - pargs->offsetrow) - && (*pargs->prow - pargs->offsetrow) < pargs->maxrow) + if (*pargs->prow - pargs->offsetrow >= 0 + && *pargs->prow - pargs->offsetrow < pargs->maxrow) screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow, *pargs->prow - pargs->offsetrow + 1, *pargs->pcol, pargs->col_end, curattr); @@ -501,7 +494,7 @@ starts_with_percent_and_bang(tabpanel_T *pargs) // When the format starts with "%!" then evaluate it as an expression and // use the result as the actual format string. - if (1 < len && usefmt[0] == '%' && usefmt[1] == '!') + if (len > 1 && usefmt[0] == '%' && usefmt[1] == '!') { typval_T tv; char_u *p = NULL; @@ -539,24 +532,23 @@ do_by_tplmode( int row = 0; tabpage_T *tp = NULL; typval_T v; - tabpanel_T args; + tabpanel_T args; args.maxrow = cmdline_row; args.offsetrow = 0; args.col_start = col_start; args.col_end = col_end; - if (TPLMODE_GET_CURTAB_ROW != tplmode) - if (0 < args.maxrow) - while (args.offsetrow + args.maxrow <= *pcurtab_row) - args.offsetrow += args.maxrow; + if (tplmode != TPLMODE_GET_CURTAB_ROW && args.maxrow > 0) + while (args.offsetrow + args.maxrow <= *pcurtab_row) + args.offsetrow += args.maxrow; tp = first_tabpage; for (row = 0; tp != NULL; row++) { - if ((TPLMODE_GET_CURTAB_ROW != tplmode) - && (args.maxrow <= (row - args.offsetrow))) + if (tplmode != TPLMODE_GET_CURTAB_ROW + && args.maxrow <= row - args.offsetrow) break; col = col_start; @@ -568,7 +560,7 @@ do_by_tplmode( if (tp->tp_topframe == topframe) { args.attr = attr_tpls; - if (TPLMODE_GET_CURTAB_ROW == tplmode) + if (tplmode == TPLMODE_GET_CURTAB_ROW) { *pcurtab_row = row; break; @@ -588,20 +580,20 @@ do_by_tplmode( args.wp = tp->tp_firstwin; } - char_u* usefmt = starts_with_percent_and_bang(&args); + char_u *usefmt = starts_with_percent_and_bang(&args); if (usefmt != NULL) { char_u buf[IOSIZE]; char_u *p = usefmt; size_t i = 0; - while (p[i] != '\0') + while (p[i] != NUL) { - while ((p[i] == '\n') || (p[i] == '\r')) + while (p[i] == '\n' || p[i] == '\r') { // fill the tailing area of current row. - if (0 <= (row - args.offsetrow) - && (row - args.offsetrow) < args.maxrow) + if (row - args.offsetrow >= 0 + && row - args.offsetrow < args.maxrow) screen_fill_tailing_area(tplmode, row - args.offsetrow, row - args.offsetrow + 1, @@ -611,15 +603,14 @@ do_by_tplmode( p++; } - while ((p[i] != '\n') && (p[i] != '\r') - && (p[i] != '\0')) + while (p[i] != '\n' && p[i] != '\r' && (p[i] != NUL)) { if (i + 1 >= sizeof(buf)) break; buf[i] = p[i]; i++; } - buf[i] = '\0'; + buf[i] = NUL; args.user_defined = buf; args.prow = &row; @@ -644,7 +635,7 @@ do_by_tplmode( tp = tp->tp_next; - if ((TPLMODE_GET_TABPAGENR == tplmode) + if ((tplmode == TPLMODE_GET_TABPAGENR) && (mouse_row <= (row - args.offsetrow))) { *ptabpagenr = v.vval.v_number; diff --git a/src/testdir/dumps/Test_tabpanel_only_0.dump b/src/testdir/dumps/Test_tabpanel_only_0.dump new file mode 100644 index 0000000000..3d54f949ae --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_only_0.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @11|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|2+2#e000e06&|++2#0000000&| |[|N|o| |N|a|m|e|]| | +1&&@31|X+8#0000001#e0e0e08 +|2+2#e000e06#ffffff0|++2#0000000&| |[|N|o| |N|a|m|e|]| @7|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 +| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 +| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 +| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 +| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 +| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 +| +1&&@19|a+0&&|s|d>f| @25||+1&&|a+0&&|s|d|f| @22 +| +1&&@19|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|0|1|,|4| @6|B|o|t| |<+1&&|N|o| |N|a|m|e|]| |[|+|]| |1|0|1|,|4| @4|B|o|t +| +0&&@77 diff --git a/src/testdir/dumps/Test_tabpanel_only_1.dump b/src/testdir/dumps/Test_tabpanel_only_1.dump new file mode 100644 index 0000000000..94879c0181 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_only_1.dump @@ -0,0 +1,10 @@ +|a+0&#ffffff0|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 +|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 +|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 +|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 +|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 +|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 +|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 +|a|s|d>f| @25||+1&&|a+0&&|s|d|f| @42 +|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|0|1|,|4| @6|B|o|t| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @15|1|0|1|,|4| @9|B|o|t +|:+0&&|t|a|b|o|n|l|y| @69 diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim index 630226f05b..cb3c42fedf 100644 --- a/src/testdir/test_tabpanel.vim +++ b/src/testdir/test_tabpanel.vim @@ -4,13 +4,13 @@ source check.vim source screendump.vim CheckFeature tabpanel -function! s:reset() +function s:reset() set tabpanel& set tabpanelopt& set showtabpanel& endfunc -function! Test_tabpanel_mouse() +function Test_tabpanel_mouse() let save_showtabline = &showtabline let save_mouse = &mouse set showtabline=0 mouse=a @@ -67,11 +67,11 @@ function! Test_tabpanel_mouse() let &showtabline = save_showtabline endfunc -function! Test_tabpanel_drawing() +function Test_tabpanel_drawing() CheckScreendump let lines =<< trim END - function! MyTabPanel() + function MyTabPanel() let n = g:actual_curtabpage let hi = n == tabpagenr() ? 'TabLineSel' : 'TabLine' let label = printf("\n%%#%sTabNumber#%d:%%#%s#", hi, n, hi) @@ -110,7 +110,7 @@ function! Test_tabpanel_drawing() call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_drawing_with_popupwin() +function Test_tabpanel_drawing_with_popupwin() CheckScreendump let lines =<< trim END @@ -147,7 +147,7 @@ function! Test_tabpanel_drawing_with_popupwin() call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_drawing_fill_tailing() +function Test_tabpanel_drawing_fill_tailing() CheckScreendump let lines =<< trim END @@ -171,7 +171,7 @@ function! Test_tabpanel_drawing_fill_tailing() call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_drawing_pum() +function Test_tabpanel_drawing_pum() CheckScreendump let lines =<< trim END @@ -189,13 +189,13 @@ function! Test_tabpanel_drawing_pum() call term_sendkeys(buf, "i\\") call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_0', {}) - call term_sendkeys(buf, "\ ab\\") + call term_sendkeys(buf, "\ ab\\") call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_1', {}) call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_scrolling() +function Test_tabpanel_scrolling() CheckScreendump let lines =<< trim END @@ -216,7 +216,7 @@ function! Test_tabpanel_scrolling() let buf = RunVimInTerminal('-S XTest_tabpanel_scrolling', {'rows': 10, 'cols': 45}) let n = 0 for c in ['H', 'J', 'K', 'L'] - call term_sendkeys(buf, ":wincmd " .. c .. "\") + call term_sendkeys(buf, ":wincmd " .. c .. "\") call term_sendkeys(buf, "\\") call term_sendkeys(buf, "r@") call VerifyScreenDump(buf, 'Test_tabpanel_drawing_scrolling_' .. n, {}) @@ -226,7 +226,7 @@ function! Test_tabpanel_scrolling() call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_many_tabpages() +function Test_tabpanel_many_tabpages() CheckScreendump let lines =<< trim END @@ -243,14 +243,14 @@ function! Test_tabpanel_many_tabpages() call term_sendkeys(buf, "gt") call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_' .. n, {}) endfor - call term_sendkeys(buf, ":tabnext +10\") - call term_sendkeys(buf, ":tabnext -3\") + call term_sendkeys(buf, ":tabnext +10\") + call term_sendkeys(buf, ":tabnext -3\") call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_4', {}) call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_visual() +function Test_tabpanel_visual() CheckScreendump let lines =<< trim END @@ -265,16 +265,16 @@ function! Test_tabpanel_visual() let buf = RunVimInTerminal('-S XTest_tabpanel_visual', {'rows': 10, 'cols': 45}) call term_sendkeys(buf, "v2w") call VerifyScreenDump(buf, 'Test_tabpanel_visual_0', {}) - call term_sendkeys(buf, "\0jw") + call term_sendkeys(buf, "\0jw") call term_sendkeys(buf, "v2wge") call VerifyScreenDump(buf, 'Test_tabpanel_visual_1', {}) - call term_sendkeys(buf, "y:echo @\"\") + call term_sendkeys(buf, "y:echo @\"\") call VerifyScreenDump(buf, 'Test_tabpanel_visual_2', {}) call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_commandline() +function Test_tabpanel_commandline() CheckScreendump let lines =<< trim END @@ -286,18 +286,18 @@ function! Test_tabpanel_commandline() call writefile(lines, 'XTest_tabpanel_commandline', 'D') let buf = RunVimInTerminal('-S XTest_tabpanel_commandline', {'rows': 10, 'cols': 45}) - call term_sendkeys(buf, ":ab\") + call term_sendkeys(buf, ":ab\") call VerifyScreenDump(buf, 'Test_tabpanel_commandline_0', {}) - call term_sendkeys(buf, "\") - call term_sendkeys(buf, ":set wildoptions=pum\") - call term_sendkeys(buf, ":ab\") + call term_sendkeys(buf, "\") + call term_sendkeys(buf, ":set wildoptions=pum\") + call term_sendkeys(buf, ":ab\") call VerifyScreenDump(buf, 'Test_tabpanel_commandline_1', {}) call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_tabline_and_tabpanel() +function Test_tabpanel_tabline_and_tabpanel() CheckScreendump let lines =<< trim END @@ -319,7 +319,7 @@ function! Test_tabpanel_tabline_and_tabpanel() call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_dont_overflow_into_tabpanel() +function Test_tabpanel_dont_overflow_into_tabpanel() CheckScreendump let lines =<< trim END @@ -338,7 +338,7 @@ function! Test_tabpanel_dont_overflow_into_tabpanel() call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_dont_vert_is_multibytes_left() +function Test_tabpanel_dont_vert_is_multibytes_left() CheckScreendump let lines =<< trim END @@ -353,19 +353,19 @@ function! Test_tabpanel_dont_vert_is_multibytes_left() let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibyte_lefts', {'rows': 10, 'cols': 45}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_0', {}) - call term_sendkeys(buf, ":set tabpanelopt=columns:1,vert\") + call term_sendkeys(buf, ":set tabpanelopt=columns:1,vert\") call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_1', {}) - call term_sendkeys(buf, ":set tabpanelopt=columns:10,vert\") + call term_sendkeys(buf, ":set tabpanelopt=columns:10,vert\") call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_2', {}) - call term_sendkeys(buf, ":set tabpanelopt=columns:2,vert\") + call term_sendkeys(buf, ":set tabpanelopt=columns:2,vert\") call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_3', {}) call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_dont_vert_is_multibytes_right() +function Test_tabpanel_dont_vert_is_multibytes_right() CheckScreendump let lines =<< trim END @@ -380,23 +380,23 @@ function! Test_tabpanel_dont_vert_is_multibytes_right() let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibytes_right', {'rows': 10, 'cols': 45}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_0', {}) - call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:1,vert\") + call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:1,vert\") call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_1', {}) - call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:10,vert\") + call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:10,vert\") call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_2', {}) - call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:2,vert\") + call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:2,vert\") call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_3', {}) call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_eval_tabpanel_statusline_tabline() +function Test_tabpanel_eval_tabpanel_statusline_tabline() CheckScreendump let lines =<< trim END - function! Expr() + function Expr() return "$%=[%f]%=$" endfunction set laststatus=2 @@ -417,13 +417,13 @@ function! Test_tabpanel_eval_tabpanel_statusline_tabline() let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45}) call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_0', {}) - call term_sendkeys(buf, ":set tabpanelopt+=align:right\") + call term_sendkeys(buf, ":set tabpanelopt+=align:right\") call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_1', {}) call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_noeval_tabpanel_statusline_tabline() +function Test_tabpanel_noeval_tabpanel_statusline_tabline() CheckScreendump let lines =<< trim END @@ -445,17 +445,17 @@ function! Test_tabpanel_noeval_tabpanel_statusline_tabline() let buf = RunVimInTerminal('-S XTest_tabpanel_noeval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45}) call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_0', {}) - call term_sendkeys(buf, ":set tabpanelopt+=align:right\") + call term_sendkeys(buf, ":set tabpanelopt+=align:right\") call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_1', {}) call StopVimInTerminal(buf) endfunc -function! Test_tabpanel_eval_tabpanel_with_linebreaks() +function Test_tabpanel_eval_tabpanel_with_linebreaks() CheckScreendump let lines =<< trim END - function! Expr() + function Expr() return "top\n$%=[%f]%=$\nbottom" endfunction set showtabpanel=2 @@ -471,10 +471,29 @@ function! Test_tabpanel_eval_tabpanel_with_linebreaks() let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_with_linebreaks', {'rows': 10, 'cols': 45}) call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_0', {}) - call term_sendkeys(buf, ":set tabpanelopt+=align:right\") + call term_sendkeys(buf, ":set tabpanelopt+=align:right\") call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_1', {}) call StopVimInTerminal(buf) endfunc +function Test_tabpanel_tabonly() + CheckScreendump + + let lines =<< trim END + tabnew + set showtabpanel=1 + norm 100oasdf + vsplit + END + call writefile(lines, 'XTest_tabpanel_tabonly', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_tabonly', {'rows': 10, 'cols': 80}) + call VerifyScreenDump(buf, 'Test_tabpanel_only_0', {}) + call term_sendkeys(buf, ":tabonly\") + call VerifyScreenDump(buf, 'Test_tabpanel_only_1', {}) + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index ffcfccb2dc..4e85670355 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1394, /**/ 1393, /**/ diff --git a/src/window.c b/src/window.c index c7fea12474..8543758a9b 100644 --- a/src/window.c +++ b/src/window.c @@ -2086,7 +2086,7 @@ win_equal( dir = *p_ead; win_equal_rec(next_curwin == NULL ? curwin : next_curwin, current, topframe, dir, 0, tabline_height(), - (int)COLUMNS_WITHOUT_TPL(), topframe->fr_height); + (int)COLUMNS_WITHOUT_TPL(), topframe->fr_height); if (!is_aucmd_win(next_curwin)) win_fix_scroll(TRUE); } @@ -3463,6 +3463,10 @@ win_close_othertab(win_T *win, int free_buf, tabpage_T *tp) redraw_tabline = TRUE; if (h != tabline_height()) shell_new_rows(); +#if defined(FEAT_TABPANEL) + redraw_tabpanel = TRUE; +#endif + shell_new_columns(); } // Free the memory used for the window. From 670d0c1468b7ece958acf3b03de9e202e612804a Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Fri, 16 May 2025 19:38:50 +0200 Subject: [PATCH 261/633] patch 9.1.1395: search_stat not reset when pattern differs in case Problem: search_stat not reset when pattern differs in case (tahzibijafar) Solution: use STRNCMP instead of MB_STRNICMP macro There was a long standing todo comment, that using MB_STRNICMP is wrong. So let's change it to STRNCMP() instead. Even if it not handle multi-byte characters correctly, then Vim will rather recompute the search stat, instead of re-using the old (and possibly wrong) value. fixes: #17312 closes: #17314 Signed-off-by: Christian Brabandt --- src/search.c | 5 +---- src/testdir/test_search_stat.vim | 19 +++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/search.c b/src/search.c index ea7e65492e..14990e2a21 100644 --- a/src/search.c +++ b/src/search.c @@ -3291,12 +3291,9 @@ update_search_stat( || (dirc == '/' && LT_POS(p, lastpos))); // If anything relevant changed the count has to be recomputed. - // MB_STRNICMP ignores case, but we should not ignore case. - // Unfortunately, there is no MB_STRNICMP function. - // XXX: above comment should be "no MB_STRCMP function" ? if (!(chgtick == CHANGEDTICK(curbuf) && (lastpat != NULL - && MB_STRNICMP(lastpat, spats[last_idx].pat, lastpatlen) == 0 + && STRNCMP(lastpat, spats[last_idx].pat, lastpatlen) == 0 && lastpatlen == spats[last_idx].patlen ) && EQUAL_POS(lastpos, *cursor_pos) diff --git a/src/testdir/test_search_stat.vim b/src/testdir/test_search_stat.vim index b57b7ba7b0..c8e055d7db 100644 --- a/src/testdir/test_search_stat.vim +++ b/src/testdir/test_search_stat.vim @@ -459,4 +459,23 @@ func Test_search_stat_backwards() call StopVimInTerminal(buf) endfunc +func Test_search_stat_smartcase_ignorecase() + CheckRunVimInTerminal + + let lines =<< trim END + set shm-=S ignorecase smartcase + call setline(1, [' MainmainmainmmmainmAin', '']) + END + call writefile(lines, 'Xsearchstat_ignorecase', '5') + + let buf = RunVimInTerminal('-S Xsearchstat_ignorecase', #{rows: 10}) + call term_sendkeys(buf, "/main\nnnn") + call WaitForAssert({-> assert_match('\[5\/5\]', term_getline(buf, 10))}, 1000) + + call term_sendkeys(buf, "/mAin\") + call WaitForAssert({-> assert_match('\[1\/1\]', term_getline(buf, 10))}, 1000) + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 4e85670355..e367036ea2 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1395, /**/ 1394, /**/ From 7b9eb6389d693dafcd502cda2ffc62564a2dbba9 Mon Sep 17 00:00:00 2001 From: glepnir Date: Fri, 16 May 2025 19:49:23 +0200 Subject: [PATCH 262/633] patch 9.1.1396: 'errorformat' is a global option Problem: The 'grepformat' option is global option, but it would be useful to have it buffer-local, similar to 'errorformat' and other quickfix related options (Dani Dickstein) Solution: Add the necessary code to support global-local 'grepformat', allowing different buffers to parse different grep output formats (glepnir) fixes: #17316 closes: #17315 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 4 ++-- runtime/doc/version9.txt | 16 +++++++++------- src/buffer.c | 1 + src/option.c | 7 +++++++ src/option.h | 1 + src/optiondefs.h | 3 ++- src/optionstr.c | 1 + src/quickfix.c | 2 +- src/structs.h | 1 + src/testdir/test_quickfix.vim | 19 +++++++++++++++++++ src/version.c | 2 ++ 11 files changed, 46 insertions(+), 11 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 274d56e196..e74c5e8a59 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 May 14 +*options.txt* For Vim version 9.1. Last change: 2025 May 16 VIM REFERENCE MANUAL by Bram Moolenaar @@ -4062,7 +4062,7 @@ A jump table for the options with a short description can be found at |Q_op|. *'grepformat'* *'gfm'* 'grepformat' 'gfm' string (default "%f:%l:%m,%f:%l%m,%f %l%m") - global + global or local to buffer |global-local| Format to recognize for the ":grep" command output. This is a scanf-like string that uses the same format as the 'errorformat' option: see |errorformat|. diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 52428428e4..e03deedb8d 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 May 14 +*version9.txt* For Vim version 9.1. Last change: 2025 May 16 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41634,17 +41634,19 @@ Options: ~ - the default for 'commentstring' contains whitespace padding to have automatic comments look nicer |comment-install| - 'completeopt' is now a |global-local| option. -- 'nrformats' accepts the new "blank" suboption, to determine a signed or - unsigned number based on whitespace in front of a minus sign. - add 'cpoptions' flag "z" |cpo-z|, to disable some (traditional) vi behaviour/inconsistency (see |d-special| and |cw|). -- 'rulerformat' now supports the |stl-%!| item -- use 'smoothscroll' logic for CTRL-F / CTRL-B for pagewise scrolling - and CTRL-D / CTRL-U for half-pagewise scrolling -- New option value for 'fillchars': +- new option values for 'fillchars': "trunc" - configure truncation indicator, 'pummaxwidth' "truncrl" - like "trunc" but in 'rl' mode, 'pummaxwidth' + "tpl_vert" - separators for the 'tabpanel' +- 'grepformat' is now a |global-local| option. - adjust for GTK3 dropping some mouse cursors 'mouseshape' +- 'nrformats' accepts the new "blank" suboption, to determine a signed or + unsigned number based on whitespace in front of a minus sign. +- 'rulerformat' now supports the |stl-%!| item +- use 'smoothscroll' logic for CTRL-F / CTRL-B for pagewise scrolling + and CTRL-D / CTRL-U for half-pagewise scrolling Ex commands: ~ - allow to specify a priority when defining a new sign |:sign-define| diff --git a/src/buffer.c b/src/buffer.c index 48e8cb63bc..fe19269a49 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -2508,6 +2508,7 @@ free_buf_options( free_callback(&buf->b_tsrfu_cb); #endif #ifdef FEAT_QUICKFIX + clear_string_option(&buf->b_p_gefm); clear_string_option(&buf->b_p_gp); clear_string_option(&buf->b_p_mp); clear_string_option(&buf->b_p_efm); diff --git a/src/option.c b/src/option.c index d6a009853d..85c3705536 100644 --- a/src/option.c +++ b/src/option.c @@ -6429,6 +6429,9 @@ unset_global_local_option(char_u *name, void *from) case PV_EFM: clear_string_option(&buf->b_p_efm); break; + case PV_GEFM: + clear_string_option(&buf->b_p_gefm); + break; case PV_GP: clear_string_option(&buf->b_p_gp); break; @@ -6508,6 +6511,7 @@ get_varp_scope(struct vimoption *p, int scope) #endif #ifdef FEAT_QUICKFIX case PV_EFM: return (char_u *)&(curbuf->b_p_efm); + case PV_GEFM: return (char_u *)&(curbuf->b_p_gefm); case PV_GP: return (char_u *)&(curbuf->b_p_gp); case PV_MP: return (char_u *)&(curbuf->b_p_mp); #endif @@ -6626,6 +6630,8 @@ get_varp(struct vimoption *p) #ifdef FEAT_QUICKFIX case PV_EFM: return *curbuf->b_p_efm != NUL ? (char_u *)&(curbuf->b_p_efm) : p->var; + case PV_GEFM: return *curbuf->b_p_gefm != NUL + ? (char_u *)&(curbuf->b_p_gefm) : p->var; case PV_GP: return *curbuf->b_p_gp != NUL ? (char_u *)&(curbuf->b_p_gp) : p->var; case PV_MP: return *curbuf->b_p_mp != NUL @@ -7415,6 +7421,7 @@ buf_copy_options(buf_T *buf, int flags) buf->b_p_bkc = empty_option; buf->b_bkc_flags = 0; #ifdef FEAT_QUICKFIX + buf->b_p_gefm = empty_option; buf->b_p_gp = empty_option; buf->b_p_mp = empty_option; buf->b_p_efm = empty_option; diff --git a/src/option.h b/src/option.h index e78a7cb192..740f6eed56 100644 --- a/src/option.h +++ b/src/option.h @@ -1157,6 +1157,7 @@ enum , BV_BT #ifdef FEAT_QUICKFIX , BV_EFM + , BV_GEFM , BV_GP , BV_MP #endif diff --git a/src/optiondefs.h b/src/optiondefs.h index d5094632a5..cb4376c716 100644 --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -33,6 +33,7 @@ #define PV_BT OPT_BUF(BV_BT) #ifdef FEAT_QUICKFIX # define PV_EFM OPT_BOTH(OPT_BUF(BV_EFM)) +# define PV_GEFM OPT_BOTH(OPT_BUF(BV_GEFM)) # define PV_GP OPT_BOTH(OPT_BUF(BV_GP)) # define PV_MP OPT_BOTH(OPT_BUF(BV_MP)) #endif @@ -1154,7 +1155,7 @@ static struct vimoption options[] = {(char_u *)FALSE, (char_u *)0L} SCTX_INIT}, {"grepformat", "gfm", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP, #ifdef FEAT_QUICKFIX - (char_u *)&p_gefm, PV_NONE, NULL, NULL, + (char_u *)&p_gefm, PV_GEFM, NULL, NULL, {(char_u *)DFLT_GREPFORMAT, (char_u *)0L} #else (char_u *)NULL, PV_NONE, NULL, NULL, diff --git a/src/optionstr.c b/src/optionstr.c index 8e233e86c3..7a1cd69e45 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -327,6 +327,7 @@ check_buf_options(buf_T *buf) check_string_option(&buf->b_p_keymap); #endif #ifdef FEAT_QUICKFIX + check_string_option(&buf->b_p_gefm); check_string_option(&buf->b_p_gp); check_string_option(&buf->b_p_mp); check_string_option(&buf->b_p_efm); diff --git a/src/quickfix.c b/src/quickfix.c index d012ea0d72..ab595d7bbc 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -5503,7 +5503,7 @@ ex_make(exarg_T *eap) incr_quickfix_busy(); if (eap->cmdidx != CMD_make && eap->cmdidx != CMD_lmake) - errorformat = p_gefm; + errorformat = *curbuf->b_p_gefm != NUL ? curbuf->b_p_gefm : p_gefm; if (eap->cmdidx == CMD_grepadd || eap->cmdidx == CMD_lgrepadd) newlist = FALSE; diff --git a/src/structs.h b/src/structs.h index cd7370d22c..00b0746438 100644 --- a/src/structs.h +++ b/src/structs.h @@ -3371,6 +3371,7 @@ struct file_buffer * local values for options which are normally global */ #ifdef FEAT_QUICKFIX + char_u *b_p_gefm; // 'grepformat' local value char_u *b_p_gp; // 'grepprg' local value char_u *b_p_mp; // 'makeprg' local value char_u *b_p_efm; // 'errorformat' local value diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index fe85887e59..dc2a2a4c5c 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -2379,6 +2379,25 @@ func Test_grep() call s:test_xgrep('l') endfunc +func Test_local_grepformat() + let save_grepformat = &grepformat + set grepformat=%f:%l:%m + " The following line are used for the local grep test. Don't remove. + " UNIQUEPREFIX:2:3: Local grepformat test + new + setlocal grepformat=UNIQUEPREFIX:%c:%n:%m + call assert_equal('UNIQUEPREFIX:%c:%n:%m', &l:grepformat) + call assert_equal('%f:%l:%m', &g:grepformat) + + set grepprg=internal + silent grep "^[[:space:]]*\" UNIQUEPREFIX:" test_quickfix.vim + call assert_equal(1, len(getqflist())) + set grepprg&vim + + bwipe! + let &grepformat = save_grepformat +endfunc + func Test_two_windows() " Use one 'errorformat' for two windows. Add an expression to each of them, " make sure they each keep their own state. diff --git a/src/version.c b/src/version.c index e367036ea2..f282c1f328 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1396, /**/ 1395, /**/ From 2a1e253e266b62445e0087508109c41c41052a87 Mon Sep 17 00:00:00 2001 From: Naruhiko Nishino Date: Sat, 17 May 2025 16:19:24 +0200 Subject: [PATCH 263/633] patch 9.1.1397: tabpanel not correctly updated on :tabonly Problem: tabpanel not correctly updated on :tabonly (Maxim Kim) Solution: force a redraw, take 'equalalways' into account (Naruhiko Nishino) related: https://github.com/vim/vim/pull/17330#issuecomment-2888146370 closes: #17337 Signed-off-by: Naruhiko Nishino Signed-off-by: Christian Brabandt --- src/optionstr.c | 2 -- src/tabpanel.c | 11 ++++++++ .../dumps/Test_tabpanel_equalalways_0.dump | 10 ++++++++ .../dumps/Test_tabpanel_equalalways_1.dump | 10 ++++++++ .../dumps/Test_tabpanel_equalalways_2.dump | 10 ++++++++ .../dumps/Test_tabpanel_equalalways_3.dump | 10 ++++++++ src/testdir/test_tabpanel.vim | 25 +++++++++++++++++++ src/version.c | 2 ++ 8 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 src/testdir/dumps/Test_tabpanel_equalalways_0.dump create mode 100644 src/testdir/dumps/Test_tabpanel_equalalways_1.dump create mode 100644 src/testdir/dumps/Test_tabpanel_equalalways_2.dump create mode 100644 src/testdir/dumps/Test_tabpanel_equalalways_3.dump diff --git a/src/optionstr.c b/src/optionstr.c index 7a1cd69e45..553b55f687 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -3561,8 +3561,6 @@ did_set_tabpanelopt(optset_T *args) if (tabpanelopt_changed() == FAIL) return e_invalid_argument; - shell_new_columns(); - return NULL; } diff --git a/src/tabpanel.c b/src/tabpanel.c index 0472e6b4be..fb5a957a3e 100644 --- a/src/tabpanel.c +++ b/src/tabpanel.c @@ -59,6 +59,7 @@ tabpanelopt_changed(void) int new_align = ALIGN_LEFT; int new_columns = 20; int new_is_vert = FALSE; + int do_equal = 0; p = p_tplo; while (*p != NUL) @@ -90,10 +91,20 @@ tabpanelopt_changed(void) ++p; } + // Whether all the windows are automatically made the same size + // when tabpanel size is changed. + do_equal = p_ea && tpl_columns != new_columns; + tpl_align = new_align; tpl_columns = new_columns; tpl_is_vert = new_is_vert; + shell_new_columns(); + redraw_tabpanel = TRUE; + + if (do_equal) + win_equal(curwin, FALSE, 0); + return OK; } diff --git a/src/testdir/dumps/Test_tabpanel_equalalways_0.dump b/src/testdir/dumps/Test_tabpanel_equalalways_0.dump new file mode 100644 index 0000000000..62a9b40162 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_equalalways_0.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @11|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|3+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| | +1&&@32|X+8#0000001#e0e0e08 +|3+2#e000e06#ffffff0| +2#0000000&|[|N|o| |N|a|m|e|]| @8> +0&&@28||+1&&| +0&&@27 +| +1&&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26 +| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26 +| +1#0000000&@19|[+3&&|N|o| |N|a|m|e|]| @5|0|,|0|-|1| @5|A|l@1| |[+1&&|N|o| |N|a|m|e|]| @4|0|,|0|-|1| @5|A|l@1 +| @19| +0&&@57 +| +1&&@19|~+0#4040ff13&| @56 +| +1#0000000&@19|~+0#4040ff13&| @56 +| +1#0000000&@19|[|N|o| |N|a|m|e|]| @30|0|,|0|-|1| @9|A|l@1 +| +0&&@77 diff --git a/src/testdir/dumps/Test_tabpanel_equalalways_1.dump b/src/testdir/dumps/Test_tabpanel_equalalways_1.dump new file mode 100644 index 0000000000..2ebcacee9c --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_equalalways_1.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @1|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|3+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| | +1&&@42|X+8#0000001#e0e0e08 +|3+2#e000e06#ffffff0| +2#0000000&|[|N|o| |N|a|m|e> +0&&@33||+1&&| +0&&@32 +| +1&&@9|~+0#4040ff13&| @32||+1#0000000&|~+0#4040ff13&| @31 +| +1#0000000&@9|~+0#4040ff13&| @32||+1#0000000&|~+0#4040ff13&| @31 +| +1#0000000&@9|[+3&&|N|o| |N|a|m|e|]| @7|0|,|0|-|1| @8|A|l@1| |[+1&&|N|o| |N|a|m|e|]| @7|0|,|0|-|1| @7|A|l@1 +| @9| +0&&@67 +| +1&&@9|~+0#4040ff13&| @66 +| +1#0000000&@9|~+0#4040ff13&| @66 +| +1#0000000&@9|[|N|o| |N|a|m|e|]| @40|0|,|0|-|1| @9|A|l@1 +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|1|0| @50 diff --git a/src/testdir/dumps/Test_tabpanel_equalalways_2.dump b/src/testdir/dumps/Test_tabpanel_equalalways_2.dump new file mode 100644 index 0000000000..baf8239377 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_equalalways_2.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @21|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|3+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| | +1&&@22|X+8#0000001#e0e0e08 +|3+2#e000e06#ffffff0| +2#0000000&|[|N|o| |N|a|m|e|]| @18> +0&&@23||+1&&| +0&&@22 +| +1&&@29|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @21 +| +1#0000000&@29|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @21 +| +1#0000000&@29|[+3&&|N|o| |N|a|m|e|]| @2|0|,|0|-|1| @3|A|l@1| |[+1&&|N|o| |N|a|m|e|]| @2|0|,|0|-|1| @2|A|l@1 +| @29| +0&&@47 +| +1&&@29|~+0#4040ff13&| @46 +| +1#0000000&@29|~+0#4040ff13&| @46 +| +1#0000000&@29|[|N|o| |N|a|m|e|]| @20|0|,|0|-|1| @9|A|l@1 +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|3|0| @50 diff --git a/src/testdir/dumps/Test_tabpanel_equalalways_3.dump b/src/testdir/dumps/Test_tabpanel_equalalways_3.dump new file mode 100644 index 0000000000..c7f5f4ce74 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_equalalways_3.dump @@ -0,0 +1,10 @@ +|[+8#0000001#e0e0e08|N|o| |N| |[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|3+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| | +1&&@47|X+8#0000001#e0e0e08 +|3+2#e000e06#ffffff0| +2#0000000&|[|N|o> +0&&@35||+1&&| +0&&@35 +| +1&&@4|~+0#4040ff13&| @34||+1#0000000&|~+0#4040ff13&| @34 +| +1#0000000&@4|~+0#4040ff13&| @34||+1#0000000&|~+0#4040ff13&| @34 +| +1#0000000&@4|[+3&&|N|o| |N|a|m|e|]| @8|0|,|0|-|1| @9|A|l@1| |[+1&&|N|o| |N|a|m|e|]| @8|0|,|0|-|1| @9|A|l@1 +| @4| +0&&@72 +| +1&&@4|~+0#4040ff13&| @71 +| +1#0000000&@4|~+0#4040ff13&| @71 +| +1#0000000&@4|[|N|o| |N|a|m|e|]| @45|0|,|0|-|1| @9|A|l@1 +|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|5| @51 diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim index cb3c42fedf..c67166e1cb 100644 --- a/src/testdir/test_tabpanel.vim +++ b/src/testdir/test_tabpanel.vim @@ -496,4 +496,29 @@ function Test_tabpanel_tabonly() call StopVimInTerminal(buf) endfunc +function Test_tabpanel_equalalways() + CheckScreendump + + let lines =<< trim END + tabnew + set showtabpanel=1 + set tabpanelopt=columns:20 + set equalalways + split + vsplit + END + call writefile(lines, 'XTest_tabpanel_equalalways', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_equalalways', {'rows': 10, 'cols': 78}) + call VerifyScreenDump(buf, 'Test_tabpanel_equalalways_0', {}) + call term_sendkeys(buf, ":set tabpanelopt=columns:10\") + call VerifyScreenDump(buf, 'Test_tabpanel_equalalways_1', {}) + call term_sendkeys(buf, ":set tabpanelopt=columns:30\") + call VerifyScreenDump(buf, 'Test_tabpanel_equalalways_2', {}) + call term_sendkeys(buf, ":set tabpanelopt=columns:5\") + call VerifyScreenDump(buf, 'Test_tabpanel_equalalways_3', {}) + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index f282c1f328..6e5b00c54d 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1397, /**/ 1396, /**/ From a577e4289c3177309880592b85f225e487552f17 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Sat, 17 May 2025 16:29:13 +0200 Subject: [PATCH 264/633] runtime(vim): Update base-syntax, improve script-interface command highlighting - Normalise interface heredoc highlighting with that used for :let-heredocs. - Remove interface feature testing. The Lua and Python interface command scripts are now highlighted by default. Loading all syntax files incurs an undesirable load-time burden so highlighting of the less popular MzScheme, Perl, Ruby and Tcl interfaces is disabled by default. g:vimsyn_embed can still be used to customise the supported interfaces. - Always highlight interface ex-commands as valid commands, even when the corresponding command-script highlighting is disabled. - Highlight simple command-script statements as well as heredocs. - Remove error highlighting of heredoc and statement command-script regions when an interface is disabled. These are now highlighted as plain text. - Allow indented heredoc end tokens when "trim" is specified. - Match interface heredocs in :def functions. - Fix runaway vimEmbedError regions. These regions have been removed. - Use python2 syntax for :python, and :pythonx when 'pyxversion' is appropriately set. closes: #15522 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/doc/syntax.txt | 24 +- runtime/syntax/generator/gen_syntax_vim.vim | 27 +- runtime/syntax/generator/vim.vim.base | 573 ++++++++++------- .../syntax/testdir/dumps/vim_ex_lua_00.dump | 20 + .../syntax/testdir/dumps/vim_ex_lua_01.dump | 20 + .../syntax/testdir/dumps/vim_ex_lua_02.dump | 20 + .../syntax/testdir/dumps/vim_ex_lua_03.dump | 20 + .../syntax/testdir/dumps/vim_ex_lua_04.dump | 20 + .../syntax/testdir/dumps/vim_ex_lua_05.dump | 20 + .../syntax/testdir/dumps/vim_ex_lua_06.dump | 20 + .../syntax/testdir/dumps/vim_ex_lua_07.dump | 20 + .../syntax/testdir/dumps/vim_ex_lua_08.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_00.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_01.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_02.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_03.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_04.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_05.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_06.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_07.dump | 20 + .../testdir/dumps/vim_ex_mzscheme_08.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_00.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_01.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_02.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_03.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_04.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_05.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_06.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_07.dump | 20 + .../syntax/testdir/dumps/vim_ex_perl_08.dump | 20 + .../testdir/dumps/vim_ex_python3_00.dump | 20 + .../testdir/dumps/vim_ex_python3_01.dump | 20 + .../testdir/dumps/vim_ex_python3_02.dump | 20 + .../testdir/dumps/vim_ex_python3_03.dump | 20 + .../testdir/dumps/vim_ex_python3_04.dump | 20 + .../testdir/dumps/vim_ex_python3_05.dump | 20 + .../testdir/dumps/vim_ex_python3_06.dump | 20 + .../testdir/dumps/vim_ex_python3_07.dump | 20 + .../testdir/dumps/vim_ex_python_00.dump | 20 + .../testdir/dumps/vim_ex_python_01.dump | 20 + .../testdir/dumps/vim_ex_python_02.dump | 20 + .../testdir/dumps/vim_ex_python_03.dump | 20 + .../testdir/dumps/vim_ex_python_04.dump | 20 + .../testdir/dumps/vim_ex_python_05.dump | 20 + .../testdir/dumps/vim_ex_python_06.dump | 20 + .../testdir/dumps/vim_ex_python_07.dump | 20 + .../testdir/dumps/vim_ex_python_08.dump | 20 + .../testdir/dumps/vim_ex_python_09.dump | 20 + .../testdir/dumps/vim_ex_pythonx_00.dump | 20 + .../testdir/dumps/vim_ex_pythonx_01.dump | 20 + .../testdir/dumps/vim_ex_pythonx_02.dump | 20 + .../testdir/dumps/vim_ex_pythonx_03.dump | 20 + .../testdir/dumps/vim_ex_pythonx_04.dump | 20 + .../testdir/dumps/vim_ex_pythonx_05.dump | 20 + .../testdir/dumps/vim_ex_pythonx_06.dump | 20 + .../testdir/dumps/vim_ex_pythonx_07.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_00.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_01.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_02.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_03.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_04.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_05.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_06.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_07.dump | 20 + .../syntax/testdir/dumps/vim_ex_ruby_08.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_00.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_01.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_02.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_03.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_04.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_05.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_06.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_07.dump | 20 + .../syntax/testdir/dumps/vim_ex_tcl_08.dump | 20 + runtime/syntax/testdir/input/vim_ex_lua.vim | 157 +++++ .../syntax/testdir/input/vim_ex_mzscheme.vim | 157 +++++ runtime/syntax/testdir/input/vim_ex_perl.vim | 157 +++++ .../syntax/testdir/input/vim_ex_python.vim | 159 +++++ runtime/syntax/testdir/input/vim_ex_ruby.vim | 157 +++++ runtime/syntax/testdir/input/vim_ex_tcl.vim | 157 +++++ runtime/syntax/vim.vim | 581 +++++++++++------- 81 files changed, 3126 insertions(+), 443 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_lua_08.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_mzscheme_08.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_perl_08.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python3_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python3_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python3_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python3_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python3_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python3_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python3_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python3_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_08.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_python_09.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_pythonx_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_pythonx_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_pythonx_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_pythonx_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_pythonx_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_pythonx_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_pythonx_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_pythonx_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_ruby_08.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_tcl_08.dump create mode 100644 runtime/syntax/testdir/input/vim_ex_lua.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_mzscheme.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_perl.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_python.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_ruby.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_tcl.vim diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index c33b356c3e..f2c03c4676 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2025 May 10 +*syntax.txt* For Vim version 9.1. Last change: 2025 May 17 VIM REFERENCE MANUAL by Bram Moolenaar @@ -3996,6 +3996,7 @@ names whose syntax definitions will be included in Typst files. Example: > VIM *vim.vim* *ft-vim-syntax* *g:vimsyn_minlines* *g:vimsyn_maxlines* + There is a trade-off between more accurate syntax highlighting versus screen updating speed. To improve accuracy, you may wish to increase the g:vimsyn_minlines variable. The g:vimsyn_maxlines variable may be used to @@ -4019,10 +4020,9 @@ embedded script highlighting they wish to have. > g:vimsyn_embed =~ 'r' : support embedded Ruby g:vimsyn_embed =~ 't' : support embedded Tcl < -By default, g:vimsyn_embed is a string supporting interpreters that your vim -itself supports. Concatenate the indicated characters to support multiple -types of embedded interpreters (e.g., g:vimsyn_embed = "mp" supports embedded -mzscheme and embedded perl). +By default, g:vimsyn_embed is unset, and the Lua and Python script interfaces +are supported. + *g:vimsyn_folding* Some folding is now supported with when 'foldmethod' is set to "syntax": > @@ -4031,15 +4031,15 @@ Some folding is now supported with when 'foldmethod' is set to "syntax": > g:vimsyn_folding =~ 'c' : fold Vim9 classes g:vimsyn_folding =~ 'e' : fold Vim9 enums g:vimsyn_folding =~ 'f' : fold functions - g:vimsyn_folding =~ 'h' : fold heredocs + g:vimsyn_folding =~ 'h' : fold let heredocs g:vimsyn_folding =~ 'i' : fold Vim9 interfaces g:vimsyn_folding =~ 'H' : fold Vim9 legacy headers - g:vimsyn_folding =~ 'l' : fold Lua script - g:vimsyn_folding =~ 'm' : fold MzScheme script - g:vimsyn_folding =~ 'p' : fold Perl script - g:vimsyn_folding =~ 'P' : fold Python script - g:vimsyn_folding =~ 'r' : fold Ruby script - g:vimsyn_folding =~ 't' : fold Tcl script + g:vimsyn_folding =~ 'l' : fold Lua heredocs + g:vimsyn_folding =~ 'm' : fold MzScheme heredocs + g:vimsyn_folding =~ 'p' : fold Perl heredocs + g:vimsyn_folding =~ 'P' : fold Python heredocs + g:vimsyn_folding =~ 'r' : fold Ruby heredocs + g:vimsyn_folding =~ 't' : fold Tcl heredocs < By default, g:vimsyn_folding is unset. Concatenate the indicated characters diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim index 07db6fee32..f37f0467bc 100644 --- a/runtime/syntax/generator/gen_syntax_vim.vim +++ b/runtime/syntax/generator/gen_syntax_vim.vim @@ -1,7 +1,7 @@ " Vim syntax file generator -" Language: Vim script -" Maintainer: Hirohito Higashi (h_east) -" Last Change: 2025 Apr 27 +" Language: Vim script +" Maintainer: Hirohito Higashi (h_east) +" Last Change: 2025 May 16 let s:keepcpo= &cpo set cpo&vim @@ -301,14 +301,32 @@ function s:get_vim_command_type(cmd_name) lvimgrep lvimgrepadd make + lua + luado + luafile map mapclear match + mzscheme + mzfile noremap new normal + perl + perldo popup public + python + pyfile + pydo + python3 + py3 + py3do + py3file + pythonx + pyx + pyxdo + pyxfile redir return set @@ -321,6 +339,9 @@ function s:get_vim_command_type(cmd_name) static substitute syntax + tcl + tcldo + tclfile this throw type diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 7acda408db..4ab45b923e 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 May 04 +" Last Change: 2025 May 16 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -233,7 +233,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vi syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1\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 +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,vimOper +syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHeredoc,vimOper syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable " Lockvar and Unlockvar: {{{2 @@ -1488,6 +1488,345 @@ syn region vimHiLink contained matchgroup=Type start="\%(\:p:h")."/lua.vim") -if !filereadable(s:luapath) - for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n") - if filereadable(fnameescape(s:luapath)) - let s:luapath= fnameescape(s:luapath) - break - endif - endfor -endif -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=+^\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=+^\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 - -" [-- perl --] {{{3 -let s:perlpath= fnameescape(expand(":p:h")."/perl.vim") -if !filereadable(s:perlpath) - for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n") - if filereadable(fnameescape(s:perlpath)) - let s:perlpath= fnameescape(s:perlpath) - break - endif - endfor -endif -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=+^\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=+^\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 - -" [-- ruby --] {{{3 -let s:rubypath= fnameescape(expand(":p:h")."/ruby.vim") -if !filereadable(s:rubypath) - for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n") - if filereadable(fnameescape(s:rubypath)) - let s:rubypath= fnameescape(s:rubypath) - break - endif - endfor -endif -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=+^\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=+^\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 - -" [-- python --] {{{3 -let s:pythonpath= fnameescape(expand(":p:h")."/python.vim") -if !filereadable(s:pythonpath) - for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n") - if filereadable(fnameescape(s:pythonpath)) - let s:pythonpath= fnameescape(s:pythonpath) - break - endif - endfor -endif -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=+^\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=+^\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 - -" [-- tcl --] {{{3 -if has("win32") || has("win95") || has("win64") || has("win16") - " apparently has("tcl") has been hanging vim on some windows systems with cygwin - let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\\%(\.exe\)\=$') -else - let s:trytcl= 1 -endif -if s:trytcl - let s:tclpath= fnameescape(expand(":p:h")."/tcl.vim") - if !filereadable(s:tclpath) - for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n") - if filereadable(fnameescape(s:tclpath)) - let s:tclpath= fnameescape(s:tclpath) - break - endif - endfor - endif - if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath) - unlet! b:current_syntax - syn cluster vimFuncBodyList add=vimTclRegion - exe "syn include @vimTclScript ".s:tclpath - 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=+^\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=+^\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 - -" [-- mzscheme --] {{{3 -let s:mzschemepath= fnameescape(expand(":p:h")."/scheme.vim") -if !filereadable(s:mzschemepath) - for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n") - if filereadable(fnameescape(s:mzschemepath)) - let s:mzschemepath= fnameescape(s:mzschemepath) - break - endif - endfor -endif -if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath) - unlet! b:current_syntax - let s:iskKeep= &isk - syn cluster vimFuncBodyList add=vimMzSchemeRegion - exe "syn include @vimMzSchemeScript ".s:mzschemepath - let &isk= s:iskKeep - unlet s:iskKeep - 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=+^\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 - " Synchronize (speed) {{{2 "============ if exists("g:vimsyn_minlines") @@ -1753,7 +1892,6 @@ if !exists("skip_vim_syntax_inits") hi def link vimBehaveError vimError hi def link vimCollClassErr vimError hi def link vimErrSetting vimError - hi def link vimEmbedError vimError hi def link vimFTError vimError hi def link vimFunctionError vimError hi def link vimFunc vimError @@ -1882,11 +2020,12 @@ if !exists("skip_vim_syntax_inits") hi def link vimLambdaBrace Delimiter hi def link vimLambdaOperator vimOper hi def link vimLet vimCommand - hi def link vimLetHereDoc vimString - hi def link vimLetHereDocStart Special - hi def link vimLetHereDocStop Special + hi def link vimLetHeredoc vimString + hi def link vimLetHeredocStart Special + hi def link vimLetHeredocStop Special hi def link vimLetRegister vimRegister hi def link vimLineComment vimComment + hi def link vimLua vimCommand hi def link vimMake vimCommand hi def link vimMakeadd vimCommand hi def link vimMakeBang vimBang @@ -1912,6 +2051,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimMenutranslateComment vimComment hi def link vim9MethodName vimFuncName hi def link vimMtchComment vimComment + hi def link vimMzScheme vimCommand + hi def link vimNonText NonText hi def link vimNormal vimCommand hi def link vimNotation Special hi def link vimNotFunc vimCommand @@ -1931,8 +2072,12 @@ if !exists("skip_vim_syntax_inits") hi def link vimPatSepZone vimString hi def link vimPatSepZ vimPatSep hi def link vimPattern Type + hi def link vimPerl vimCommand hi def link vimPlainMark vimMark hi def link vimPlainRegister vimRegister + hi def link vimPython vimCommand + hi def link vimPython3 vimCommand + hi def link vimPythonX vimCommand hi def link vimQuoteEscape vimEscape hi def link vimRedir vimCommand hi def link vimRedirBang vimBang @@ -1942,7 +2087,10 @@ if !exists("skip_vim_syntax_inits") hi def link vimRedirEnd Special hi def link vimRedirRegister vimRegister hi def link vimRegister SpecialChar + hi def link vimRuby vimCommand hi def link vimScriptDelim Comment + hi def link vimScriptHeredocStart vimLetHeredocStart + hi def link vimScriptHeredocStop vimLetHeredocStop hi def link vimSearch vimString hi def link vimSearchDelim Delimiter hi def link vimSep Delimiter @@ -2007,6 +2155,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimSynSpell Type hi def link vimSyntax vimCommand hi def link vimSynType vimSpecial + hi def link vimTcl vimCommand hi def link vimThrow vimCommand hi def link vimTodo Todo hi def link vimType Type diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_00.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_00.dump new file mode 100644 index 0000000000..d2f0702e0f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_00.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|l|u|a|,| |:|l|u|a|d|o| |a|n|d| |:|l|u|a|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@32 +| +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|_|e|m|b|e|d| |=| |"+0#e000002&|l|"| +0#0000000&@31 +| +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&|f|l|"| +0#0000000&@28 +| +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|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @53 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @49 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @53 +||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_01.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_01.dump new file mode 100644 index 0000000000..6e9e4e85a3 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_01.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @53 +||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @49 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|.| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)+0#0000000&| @40 +|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)+0#0000000&| @41 +|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +@57|1|9|,|3| @10|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_02.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_02.dump new file mode 100644 index 0000000000..93e67aa4e5 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_02.dump @@ -0,0 +1,20 @@ +|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @46 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +@57|3|7|,|7| @9|2@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_03.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_03.dump new file mode 100644 index 0000000000..5c68059cc7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_03.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|5@1|,|0|-|1| @7|3|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_04.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_04.dump new file mode 100644 index 0000000000..2e8168ce91 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +@57|7|3|,|0|-|1| @7|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_05.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_05.dump new file mode 100644 index 0000000000..fe494cd543 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_05.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|9|1|,|1| @9|6|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_06.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_06.dump new file mode 100644 index 0000000000..b031e67ceb --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_06.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +@57|1|0|9|,|0|-|1| @6|7|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_07.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_07.dump new file mode 100644 index 0000000000..307376941f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_07.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|1|2|7|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_08.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_08.dump new file mode 100644 index 0000000000..7e70c985e7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_lua_08.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +| +0#0000000&@56|1|4|5|,|3| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_00.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_00.dump new file mode 100644 index 0000000000..736e6d8843 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_00.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@36 +| +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|_|e|m|b|e|d| |=| |"+0#e000002&|m|"| +0#0000000&@31 +| +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&|f|m|"| +0#0000000&@28 +| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_01.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_01.dump new file mode 100644 index 0000000000..900e1431da --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_01.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +@57|1|9|,|3| @10|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_02.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_02.dump new file mode 100644 index 0000000000..ee29fa2885 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_02.dump @@ -0,0 +1,20 @@ +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|(|d+0#00e0e07&|i|s|p|l|a|y| +0#0000000&|"+0#e000002&|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)+0#0000000&| @43 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +@57|3|7|,|7| @9|2@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_03.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_03.dump new file mode 100644 index 0000000000..403b9d355b --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_03.dump @@ -0,0 +1,20 @@ +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d+0#00e0e07&|i|s|p|l|a|y| +0#0000000&|"+0#e000002&|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d+0#00e0e07&|i|s|p|l|a|y| +0#0000000&|"+0#e000002&|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @28 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|5@1|,|0|-|1| @7|3|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_04.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_04.dump new file mode 100644 index 0000000000..2e8168ce91 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +@57|7|3|,|0|-|1| @7|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_05.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_05.dump new file mode 100644 index 0000000000..fe494cd543 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_05.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|9|1|,|1| @9|6|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_06.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_06.dump new file mode 100644 index 0000000000..b031e67ceb --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_06.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +@57|1|0|9|,|0|-|1| @6|7|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_07.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_07.dump new file mode 100644 index 0000000000..307376941f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_07.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|1|2|7|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_08.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_08.dump new file mode 100644 index 0000000000..7e70c985e7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_08.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +| +0#0000000&@56|1|4|5|,|3| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_00.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_00.dump new file mode 100644 index 0000000000..4af9df1ea3 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_00.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| |c|o|m@1|a|n|d|s| +0#0000000&@40 +| +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|_|e|m|b|e|d| |=| |"+0#e000002&|p|"| +0#0000000&@31 +| +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&|f|p|"| +0#0000000&@28 +| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_01.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_01.dump new file mode 100644 index 0000000000..900e1431da --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_01.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +@57|1|9|,|3| @10|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_02.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_02.dump new file mode 100644 index 0000000000..aa39d8f4a7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_02.dump @@ -0,0 +1,20 @@ +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +@57|3|7|,|7| @9|2@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_03.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_03.dump new file mode 100644 index 0000000000..7624326514 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_03.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|c|r|i|p|t|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&| @48 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|t|a|t|e|m|e|n|t|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|5@1|,|0|-|1| @7|3|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_04.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_04.dump new file mode 100644 index 0000000000..ce18b19807 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|t|a|t|e|m|e|n|t|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +@57|7|3|,|0|-|1| @7|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_05.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_05.dump new file mode 100644 index 0000000000..fe494cd543 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_05.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|9|1|,|1| @9|6|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_06.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_06.dump new file mode 100644 index 0000000000..b031e67ceb --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_06.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +@57|1|0|9|,|0|-|1| @6|7|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_07.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_07.dump new file mode 100644 index 0000000000..307376941f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_07.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|1|2|7|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_08.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_08.dump new file mode 100644 index 0000000000..7e70c985e7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_perl_08.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +| +0#0000000&@56|1|4|5|,|3| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_00.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_00.dump new file mode 100644 index 0000000000..a83df79d15 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python3_00.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o|,| |:|p|y|x|f|i|l|e| +0#0000000&@40 +| +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|_|e|m|b|e|d| |=| |"+0#e000002&|P|"| +0#0000000&@31 +| +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&|f|P|"| +0#0000000&@28 +| +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| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@58 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @49 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @45 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| +0#0000000&@62 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @49 +||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @45 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_01.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_01.dump new file mode 100644 index 0000000000..dfb52d4c30 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python3_01.dump @@ -0,0 +1,20 @@ +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| +0#0000000&@62 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @49 +||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @45 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|.| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51 +|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)+0#0000000&| @36 +|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51 +|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)+0#0000000&| @37 +|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +@57|1|9|,|5| @9|1@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_02.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_02.dump new file mode 100644 index 0000000000..29b34d55b4 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python3_02.dump @@ -0,0 +1,20 @@ +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p|y| +0#0000000&@58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| +0#0000000#ffffff0@51 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@46 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36 +@57|3|7|,|0|-|1| @7|2|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_03.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_03.dump new file mode 100644 index 0000000000..bd69d5baaa --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python3_03.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a|d|o| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@44 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a|f|i|l|e| |f|o@1|.|l|u|a| +0#0000000#ffffff0@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|s|c|h|e|m|e| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@51 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| +0#0000000#ffffff0@43 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|s|c|h|e|m|e| |(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@33 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@28 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|f|i|l|e| |f|o@1|.|r|k|t| +0#0000000#ffffff0@58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55 +@57|5@1|,|0|-|1| @7|4|2|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_04.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_04.dump new file mode 100644 index 0000000000..bd85be0126 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python3_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| +0#0000000#ffffff0@48 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| +0#0000000#ffffff0@41 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5>"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| +0#0000000#ffffff0@33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l|d|o| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| +0#0000000#ffffff0@39 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| +0#0000000#ffffff0@33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|c|r|i|p|t|"|)+0#0000000&| @48 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33 +@57|7|3|,|7| @9|5|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_05.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_05.dump new file mode 100644 index 0000000000..7242a31577 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python3_05.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @47 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32 +@57|9|1|,|0|-|1| @7|7|3|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_06.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_06.dump new file mode 100644 index 0000000000..32f27e04fe --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python3_06.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1>p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| +0#0000000#ffffff0@52 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@45 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y|d|o| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@43 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y|f|i|l|e| |f|o@1|.|r|b| +0#0000000#ffffff0@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56 +@57|1|0|9|,|3| @8|8@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_07.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_07.dump new file mode 100644 index 0000000000..dd5076e3a1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python3_07.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| +0#0000000#ffffff0@53 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@47 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5>"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l|d|o| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@45 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l|f|i|l|e| |f|o@1|.|t|c|l| +0#0000000#ffffff0@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|2|7|,|7| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_00.dump b/runtime/syntax/testdir/dumps/vim_ex_python_00.dump new file mode 100644 index 0000000000..181e58fa97 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_00.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@31 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@28 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@28 +| +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|_|e|m|b|e|d| |=| |"+0#e000002&|P|"| +0#0000000&@31 +| +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&|f|P|"| +0#0000000&@28 +| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_01.dump b/runtime/syntax/testdir/dumps/vim_ex_python_01.dump new file mode 100644 index 0000000000..0c1907885c --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_01.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1>.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +@57|1|9|,|1| @10|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_02.dump b/runtime/syntax/testdir/dumps/vim_ex_python_02.dump new file mode 100644 index 0000000000..d0df28fe25 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_02.dump @@ -0,0 +1,20 @@ +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52 +@57|3|7|,|1| @9|2@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_03.dump b/runtime/syntax/testdir/dumps/vim_ex_python_03.dump new file mode 100644 index 0000000000..6efefdaada --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_03.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +@57|5@1|,|7| @9|3|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_04.dump b/runtime/syntax/testdir/dumps/vim_ex_python_04.dump new file mode 100644 index 0000000000..e110c12368 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|c|r|i|p|t|"|)+0#0000000&| @48 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @41 +@57|7|3|,|7| @9|4|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_05.dump b/runtime/syntax/testdir/dumps/vim_ex_python_05.dump new file mode 100644 index 0000000000..d8a7ca0723 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_05.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @47 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +@57|9|1|,|0|-|1| @7|6|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_06.dump b/runtime/syntax/testdir/dumps/vim_ex_python_06.dump new file mode 100644 index 0000000000..4eb24b96b1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_06.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @47 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38 +@57|1|0|9|,|0|-|1| @6|7|3|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_07.dump b/runtime/syntax/testdir/dumps/vim_ex_python_07.dump new file mode 100644 index 0000000000..43d833f2d3 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_07.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|1|2|7|,|1| @8|8|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_08.dump b/runtime/syntax/testdir/dumps/vim_ex_python_08.dump new file mode 100644 index 0000000000..e181dd6eec --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_08.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57 +@57|1|4|5|,|0|-|1| @6|9@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_09.dump b/runtime/syntax/testdir/dumps/vim_ex_python_09.dump new file mode 100644 index 0000000000..4382132ac3 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_python_09.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|5|9|,|0|-|1| @6|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_00.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_00.dump new file mode 100644 index 0000000000..5c5ae9136b --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_00.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o|,| |:|p|y|x|f|i|l|e| +0#0000000&@40 +| +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|_|e|m|b|e|d| |=| |"+0#e000002&|P|"| +0#0000000&@31 +| +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&|f|P|"| +0#0000000&@28 +| +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| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@58 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @49 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @45 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| +0#0000000&@62 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @49 +||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @45 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_01.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_01.dump new file mode 100644 index 0000000000..aaaf6312aa --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_01.dump @@ -0,0 +1,20 @@ +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| +0#0000000&@62 +||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @49 +||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @45 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|.| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51 +|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)+0#0000000&| @36 +|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63 +|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51 +|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)+0#0000000&| @37 +|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +@57|1|9|,|5| @9|1@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_02.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_02.dump new file mode 100644 index 0000000000..e2b10d776d --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_02.dump @@ -0,0 +1,20 @@ +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p|y| +0#0000000&@58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| +0#0000000#ffffff0@51 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@46 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36 +@57|3|7|,|0|-|1| @7|2|6|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_03.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_03.dump new file mode 100644 index 0000000000..bd69d5baaa --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_03.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a|d|o| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@44 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a|f|i|l|e| |f|o@1|.|l|u|a| +0#0000000#ffffff0@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|s|c|h|e|m|e| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@51 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| +0#0000000#ffffff0@43 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|s|c|h|e|m|e| |(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@33 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@28 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|f|i|l|e| |f|o@1|.|r|k|t| +0#0000000#ffffff0@58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55 +@57|5@1|,|0|-|1| @7|4|2|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_04.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_04.dump new file mode 100644 index 0000000000..bd85be0126 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| +0#0000000#ffffff0@48 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| +0#0000000#ffffff0@41 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5>"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| +0#0000000#ffffff0@33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l|d|o| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| +0#0000000#ffffff0@39 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| +0#0000000#ffffff0@33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|c|r|i|p|t|"|)+0#0000000&| @48 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33 +@57|7|3|,|7| @9|5|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_05.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_05.dump new file mode 100644 index 0000000000..bf180f795e --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_05.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @47 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38 +@57|9|1|,|0|-|1| @7|7|3|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_06.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_06.dump new file mode 100644 index 0000000000..521c2aec08 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_06.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1>p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| +0#0000000#ffffff0@52 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@45 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y|d|o| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@43 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y|f|i|l|e| |f|o@1|.|r|b| +0#0000000#ffffff0@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56 +@57|1|0|9|,|3| @8|8@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_07.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_07.dump new file mode 100644 index 0000000000..dd5076e3a1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_07.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| +0#0000000#ffffff0@53 +| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@47 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5>"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l|d|o| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@45 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56 +| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l|f|i|l|e| |f|o@1|.|t|c|l| +0#0000000#ffffff0@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|2|7|,|7| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_00.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_00.dump new file mode 100644 index 0000000000..14dc87e54a --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_00.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@29 +| +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|_|e|m|b|e|d| |=| |"+0#e000002&|r|"| +0#0000000&@31 +| +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&|f|r|"| +0#0000000&@28 +| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_01.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_01.dump new file mode 100644 index 0000000000..900e1431da --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_01.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +@57|1|9|,|3| @10|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_02.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_02.dump new file mode 100644 index 0000000000..aa39d8f4a7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_02.dump @@ -0,0 +1,20 @@ +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +@57|3|7|,|7| @9|2@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_03.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_03.dump new file mode 100644 index 0000000000..5c68059cc7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_03.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|5@1|,|0|-|1| @7|3|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_04.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_04.dump new file mode 100644 index 0000000000..2e8168ce91 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +@57|7|3|,|0|-|1| @7|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_05.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_05.dump new file mode 100644 index 0000000000..fe494cd543 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_05.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|9|1|,|1| @9|6|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_06.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_06.dump new file mode 100644 index 0000000000..b031e67ceb --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_06.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +@57|1|0|9|,|0|-|1| @6|7|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_07.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_07.dump new file mode 100644 index 0000000000..2e87ddb22a --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_07.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| >r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|c|r|i|p|t|"+0#e000e06&| +0#0000000&@52 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|t|a|t|e|m|e|n|t|"+0#e000e06&|;+0#0000000&| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"+0#e000e06&| +0#0000000&@37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|t|a|t|e|m|e|n|t|"+0#e000e06&|;+0#0000000&| @43 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"+0#e000e06&| +0#0000000&@37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|1|2|7|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_08.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_08.dump new file mode 100644 index 0000000000..7e70c985e7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_08.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +| +0#0000000&@56|1|4|5|,|3| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_00.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_00.dump new file mode 100644 index 0000000000..958ae82dff --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_00.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@32 +| +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|_|e|m|b|e|d| |=| |"+0#e000002&|t|"| +0#0000000&@31 +| +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&|f|t|"| +0#0000000&@28 +| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_01.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_01.dump new file mode 100644 index 0000000000..900e1431da --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_01.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66 +| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53 +| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49 +| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41 +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +@57|1|9|,|3| @10|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_02.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_02.dump new file mode 100644 index 0000000000..aa39d8f4a7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_02.dump @@ -0,0 +1,20 @@ +||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67 +||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +@57|3|7|,|7| @9|2@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_03.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_03.dump new file mode 100644 index 0000000000..5c68059cc7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_03.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|5@1|,|0|-|1| @7|3|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_04.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_04.dump new file mode 100644 index 0000000000..2e8168ce91 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +@57|7|3|,|0|-|1| @7|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_05.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_05.dump new file mode 100644 index 0000000000..fe494cd543 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_05.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|9|1|,|1| @9|6|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_06.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_06.dump new file mode 100644 index 0000000000..b031e67ceb --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_06.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +@57|1|0|9|,|0|-|1| @6|7|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_07.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_07.dump new file mode 100644 index 0000000000..307376941f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_07.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1>r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52 +| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|1|2|7|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_08.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_08.dump new file mode 100644 index 0000000000..3a29c20b0b --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_08.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|c|r|i|p|t|"| +0#0000000&@53 +||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|t|a|t|e|m|e|n|t|"|;+0#0000000&| @47 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000&@38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|t|a|t|e|m|e|n|t|"|;+0#0000000&| @45 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000&@38 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +| +0#0000000&@56|1|4|5|,|3| @8|B|o|t| diff --git a/runtime/syntax/testdir/input/vim_ex_lua.vim b/runtime/syntax/testdir/input/vim_ex_lua.vim new file mode 100644 index 0000000000..55d151e463 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_lua.vim @@ -0,0 +1,157 @@ +" Vim :lua, :luado and :luafile commands +" VIM_TEST_SETUP let g:vimsyn_embed = "l" +" VIM_TEST_SETUP let g:vimsyn_folding = "fl" +" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax + + +lua << EOF +print("Lua script") +EOF + + lua << trim EOF + print("Lua script") + EOF + +lua << +print("Lua script") +. + + lua << trim + print("Lua script") + . + +function Foo() + lua << trim EOF + print("Lua script in :func") + EOF +endfunction | call Foo() + +def Bar() + lua << trim EOF + print("Lua script in :def") + EOF +enddef | call Bar() + +lua print("Lua statement") + "\ comment + \ print("Lua statement again") + +luado print("Lua statement") + "\ comment + \ print("Lua statement again") + +luafile foo.lua + + +" :mzscheme and :mzfile + +mzscheme << trim EOF + (display "MzScheme script") +EOF + +mzscheme (display "MzScheme statement") + "\ comment + \ (display "MzScheme statement again") + +mzfile foo.rkt + + +" :perl and :perldo + +perl << trim EOF + print("Perl script\n") +EOF + +perl print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + +perldo print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + + +" :python, :pydo and :pyfile + +python << trim EOF + print("Python script") +EOF + +python print("Python statement"); + "\ comment + \ print("Python statement again") + +pydo print("Python statement"); + "\ comment + \ print("Python statement again") + +pyfile foo.py + + +" :python3, :py3do and :py3file + +python3 << trim EOF + print("Python3 script") +EOF + +python3 print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3do print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3file foo.py + + +" :pythonx, :pyxdo and :pyxfile + +pythonx << trim EOF + print("PythonX script") +EOF + +pythonx print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxdo print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxfile foo.py + + +" :ruby, :rubydo and :rubyfile + +ruby << trim EOF + puts "Ruby script" +EOF + +ruby puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubydo puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubyfile foo.rb + + +" :tcl, :tcldo and :tclfile + +tcl << trim EOF + puts "TCL script" +EOF + +tcl puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tcldo puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tclfile foo.tcl + diff --git a/runtime/syntax/testdir/input/vim_ex_mzscheme.vim b/runtime/syntax/testdir/input/vim_ex_mzscheme.vim new file mode 100644 index 0000000000..6844c49f76 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_mzscheme.vim @@ -0,0 +1,157 @@ +" Vim :mzscheme and :mzfile commands +" VIM_TEST_SETUP let g:vimsyn_embed = "m" +" VIM_TEST_SETUP let g:vimsyn_folding = "fm" +" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax + + +lua << EOF +print("Lua script") +EOF + + lua << trim EOF + print("Lua script") + EOF + +lua << +print("Lua script") +. + + lua << trim + print("Lua script") + . + +function Foo() + lua << trim EOF + print("Lua script in :func") + EOF +endfunction | call Foo() + +def Bar() + lua << trim EOF + print("Lua script in :def") + EOF +enddef | call Bar() + +lua print("Lua statement") + "\ comment + \ print("Lua statement again") + +luado print("Lua statement") + "\ comment + \ print("Lua statement again") + +luafile foo.lua + + +" :mzscheme and :mzfile + +mzscheme << trim EOF + (display "MzScheme script") +EOF + +mzscheme (display "MzScheme statement") + "\ comment + \ (display "MzScheme statement again") + +mzfile foo.rkt + + +" :perl and :perldo + +perl << trim EOF + print("Perl script\n") +EOF + +perl print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + +perldo print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + + +" :python, :pydo and :pyfile + +python << trim EOF + print("Python script") +EOF + +python print("Python statement"); + "\ comment + \ print("Python statement again") + +pydo print("Python statement"); + "\ comment + \ print("Python statement again") + +pyfile foo.py + + +" :python3, :py3do and :py3file + +python3 << trim EOF + print("Python3 script") +EOF + +python3 print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3do print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3file foo.py + + +" :pythonx, :pyxdo and :pyxfile + +pythonx << trim EOF + print("PythonX script") +EOF + +pythonx print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxdo print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxfile foo.py + + +" :ruby, :rubydo and :rubyfile + +ruby << trim EOF + puts "Ruby script" +EOF + +ruby puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubydo puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubyfile foo.rb + + +" :tcl, :tcldo and :tclfile + +tcl << trim EOF + puts "TCL script" +EOF + +tcl puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tcldo puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tclfile foo.tcl + diff --git a/runtime/syntax/testdir/input/vim_ex_perl.vim b/runtime/syntax/testdir/input/vim_ex_perl.vim new file mode 100644 index 0000000000..cccab1892b --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_perl.vim @@ -0,0 +1,157 @@ +" Vim :perl and :perldo commands +" VIM_TEST_SETUP let g:vimsyn_embed = "p" +" VIM_TEST_SETUP let g:vimsyn_folding = "fp" +" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax + + +lua << EOF +print("Lua script") +EOF + + lua << trim EOF + print("Lua script") + EOF + +lua << +print("Lua script") +. + + lua << trim + print("Lua script") + . + +function Foo() + lua << trim EOF + print("Lua script in :func") + EOF +endfunction | call Foo() + +def Bar() + lua << trim EOF + print("Lua script in :def") + EOF +enddef | call Bar() + +lua print("Lua statement") + "\ comment + \ print("Lua statement again") + +luado print("Lua statement") + "\ comment + \ print("Lua statement again") + +luafile foo.lua + + +" :mzscheme and :mzfile + +mzscheme << trim EOF + (display "MzScheme script") +EOF + +mzscheme (display "MzScheme statement") + "\ comment + \ (display "MzScheme statement again") + +mzfile foo.rkt + + +" :perl and :perldo + +perl << trim EOF + print("Perl script\n") +EOF + +perl print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + +perldo print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + + +" :python, :pydo and :pyfile + +python << trim EOF + print("Python script") +EOF + +python print("Python statement"); + "\ comment + \ print("Python statement again") + +pydo print("Python statement"); + "\ comment + \ print("Python statement again") + +pyfile foo.py + + +" :python3, :py3do and :py3file + +python3 << trim EOF + print("Python3 script") +EOF + +python3 print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3do print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3file foo.py + + +" :pythonx, :pyxdo and :pyxfile + +pythonx << trim EOF + print("PythonX script") +EOF + +pythonx print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxdo print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxfile foo.py + + +" :ruby, :rubydo and :rubyfile + +ruby << trim EOF + puts "Ruby script" +EOF + +ruby puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubydo puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubyfile foo.rb + + +" :tcl, :tcldo and :tclfile + +tcl << trim EOF + puts "TCL script" +EOF + +tcl puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tcldo puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tclfile foo.tcl + diff --git a/runtime/syntax/testdir/input/vim_ex_python.vim b/runtime/syntax/testdir/input/vim_ex_python.vim new file mode 100644 index 0000000000..8adc0e7ea7 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_python.vim @@ -0,0 +1,159 @@ +" Vim :python, :pydo and :pyfile commands +" Vim :python3, :py3do and :py3file commands +" Vim :pythonx, :pyxdo and :pyxfile commands +" VIM_TEST_SETUP let g:vimsyn_embed = "P" +" VIM_TEST_SETUP let g:vimsyn_folding = "fP" +" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax + + +lua << EOF +print("Lua script") +EOF + + lua << trim EOF + print("Lua script") + EOF + +lua << +print("Lua script") +. + + lua << trim + print("Lua script") + . + +function Foo() + lua << trim EOF + print("Lua script in :func") + EOF +endfunction | call Foo() + +def Bar() + lua << trim EOF + print("Lua script in :def") + EOF +enddef | call Bar() + +lua print("Lua statement") + "\ comment + \ print("Lua statement again") + +luado print("Lua statement") + "\ comment + \ print("Lua statement again") + +luafile foo.lua + + +" :mzscheme and :mzfile + +mzscheme << trim EOF + (display "MzScheme script") +EOF + +mzscheme (display "MzScheme statement") + "\ comment + \ (display "MzScheme statement again") + +mzfile foo.rkt + + +" :perl and :perldo + +perl << trim EOF + print("Perl script\n") +EOF + +perl print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + +perldo print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + + +" :python, :pydo and :pyfile + +python << trim EOF + print("Python script") +EOF + +python print("Python statement"); + "\ comment + \ print("Python statement again") + +pydo print("Python statement"); + "\ comment + \ print("Python statement again") + +pyfile foo.py + + +" :python3, :py3do and :py3file + +python3 << trim EOF + print("Python3 script") +EOF + +python3 print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3do print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3file foo.py + + +" :pythonx, :pyxdo and :pyxfile + +pythonx << trim EOF + print("PythonX script") +EOF + +pythonx print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxdo print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxfile foo.py + + +" :ruby, :rubydo and :rubyfile + +ruby << trim EOF + puts "Ruby script" +EOF + +ruby puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubydo puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubyfile foo.rb + + +" :tcl, :tcldo and :tclfile + +tcl << trim EOF + puts "TCL script" +EOF + +tcl puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tcldo puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tclfile foo.tcl + diff --git a/runtime/syntax/testdir/input/vim_ex_ruby.vim b/runtime/syntax/testdir/input/vim_ex_ruby.vim new file mode 100644 index 0000000000..32a39de46b --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_ruby.vim @@ -0,0 +1,157 @@ +" Vim :ruby, :rubydo and :rubyfile commands +" VIM_TEST_SETUP let g:vimsyn_embed = "r" +" VIM_TEST_SETUP let g:vimsyn_folding = "fr" +" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax + + +lua << EOF +print("Lua script") +EOF + + lua << trim EOF + print("Lua script") + EOF + +lua << +print("Lua script") +. + + lua << trim + print("Lua script") + . + +function Foo() + lua << trim EOF + print("Lua script in :func") + EOF +endfunction | call Foo() + +def Bar() + lua << trim EOF + print("Lua script in :def") + EOF +enddef | call Bar() + +lua print("Lua statement") + "\ comment + \ print("Lua statement again") + +luado print("Lua statement") + "\ comment + \ print("Lua statement again") + +luafile foo.lua + + +" :mzscheme and :mzfile + +mzscheme << trim EOF + (display "MzScheme script") +EOF + +mzscheme (display "MzScheme statement") + "\ comment + \ (display "MzScheme statement again") + +mzfile foo.rkt + + +" :perl and :perldo + +perl << trim EOF + print("Perl script\n") +EOF + +perl print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + +perldo print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + + +" :python, :pydo and :pyfile + +python << trim EOF + print("Python script") +EOF + +python print("Python statement"); + "\ comment + \ print("Python statement again") + +pydo print("Python statement"); + "\ comment + \ print("Python statement again") + +pyfile foo.py + + +" :python3, :py3do and :py3file + +python3 << trim EOF + print("Python3 script") +EOF + +python3 print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3do print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3file foo.py + + +" :pythonx, :pyxdo and :pyxfile + +pythonx << trim EOF + print("PythonX script") +EOF + +pythonx print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxdo print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxfile foo.py + + +" :ruby, :rubydo and :rubyfile + +ruby << trim EOF + puts "Ruby script" +EOF + +ruby puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubydo puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubyfile foo.rb + + +" :tcl, :tcldo and :tclfile + +tcl << trim EOF + puts "TCL script" +EOF + +tcl puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tcldo puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tclfile foo.tcl + diff --git a/runtime/syntax/testdir/input/vim_ex_tcl.vim b/runtime/syntax/testdir/input/vim_ex_tcl.vim new file mode 100644 index 0000000000..2558bb8b97 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_tcl.vim @@ -0,0 +1,157 @@ +" Vim :tcl, :tcldo and :tclfile commands +" VIM_TEST_SETUP let g:vimsyn_embed = "t" +" VIM_TEST_SETUP let g:vimsyn_folding = "ft" +" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax + + +lua << EOF +print("Lua script") +EOF + + lua << trim EOF + print("Lua script") + EOF + +lua << +print("Lua script") +. + + lua << trim + print("Lua script") + . + +function Foo() + lua << trim EOF + print("Lua script in :func") + EOF +endfunction | call Foo() + +def Bar() + lua << trim EOF + print("Lua script in :def") + EOF +enddef | call Bar() + +lua print("Lua statement") + "\ comment + \ print("Lua statement again") + +luado print("Lua statement") + "\ comment + \ print("Lua statement again") + +luafile foo.lua + + +" :mzscheme and :mzfile + +mzscheme << trim EOF + (display "MzScheme script") +EOF + +mzscheme (display "MzScheme statement") + "\ comment + \ (display "MzScheme statement again") + +mzfile foo.rkt + + +" :perl and :perldo + +perl << trim EOF + print("Perl script\n") +EOF + +perl print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + +perldo print("Perl statement\n"); + "\ comment + \ print("Perl statement again\n") + + +" :python, :pydo and :pyfile + +python << trim EOF + print("Python script") +EOF + +python print("Python statement"); + "\ comment + \ print("Python statement again") + +pydo print("Python statement"); + "\ comment + \ print("Python statement again") + +pyfile foo.py + + +" :python3, :py3do and :py3file + +python3 << trim EOF + print("Python3 script") +EOF + +python3 print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3do print("Python3 statement"); + "\ comment + \ print("Python3 statement") + +py3file foo.py + + +" :pythonx, :pyxdo and :pyxfile + +pythonx << trim EOF + print("PythonX script") +EOF + +pythonx print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxdo print("PythonX statement"); + "\ comment + \ print("PythonX statement") + +pyxfile foo.py + + +" :ruby, :rubydo and :rubyfile + +ruby << trim EOF + puts "Ruby script" +EOF + +ruby puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubydo puts "Ruby statement"; + "\ comment + \ puts "Ruby statement again" + +rubyfile foo.rb + + +" :tcl, :tcldo and :tclfile + +tcl << trim EOF + puts "TCL script" +EOF + +tcl puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tcldo puts "TCL statement"; + "\ comment + \ puts "TCL statement again" + +tclfile foo.tcl + diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 9512ccc836..debed2bea8 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 May 14 +" Last Change: 2025 May 16 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -35,10 +35,10 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell " GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang' syn keyword vimCommand contained abo[veleft] 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] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler] con[tinue] conf[irm] nextgroup=vimBang syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] 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] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] imp[ort] int[ro] ip[ut] is[earch] isp[lit] j[oin] ju[mps] k kee[pmarks] keepj[umps] keepp[atterns] nextgroup=vimBang -syn keyword vimCommand contained 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] 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] lw[indow] ls m[ove] ma[rk] marks 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] nextgroup=vimBang -syn keyword vimCommand contained p[rint] pa[ckadd] packl[oadall] pb[uffer] 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] 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] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] 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] scr[iptnames] scripte[ncoding] nextgroup=vimBang -syn keyword vimCommand contained scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] nextgroup=vimBang -syn keyword vimCommand contained uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] 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 nextgroup=vimBang +syn keyword vimCommand contained 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] 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] lw[indow] ls m[ove] ma[rk] marks menut[ranslate] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] 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] pb[uffer] nextgroup=vimBang +syn keyword vimCommand contained pc[lose] 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] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] 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] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] nextgroup=vimBang +syn keyword vimCommand contained spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] 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] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] winc[md] wind[o] winp[os] nextgroup=vimBang +syn keyword vimCommand contained 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 nextgroup=vimBang " Lower priority for _new_ to distinguish constructors from the command. syn match vimCommand contained "\(\@!" @@ -286,7 +286,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vi syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1\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 +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,vimOper +syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHeredoc,vimOper syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable " Lockvar and Unlockvar: {{{2 @@ -1549,6 +1549,345 @@ syn region vimHiLink contained matchgroup=Type start="\%(\:p:h")."/lua.vim") -if !filereadable(s:luapath) - for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n") - if filereadable(fnameescape(s:luapath)) - let s:luapath= fnameescape(s:luapath) - break - endif - endfor -endif -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=+^\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=+^\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 - -" [-- perl --] {{{3 -let s:perlpath= fnameescape(expand(":p:h")."/perl.vim") -if !filereadable(s:perlpath) - for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n") - if filereadable(fnameescape(s:perlpath)) - let s:perlpath= fnameescape(s:perlpath) - break - endif - endfor -endif -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=+^\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=+^\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 - -" [-- ruby --] {{{3 -let s:rubypath= fnameescape(expand(":p:h")."/ruby.vim") -if !filereadable(s:rubypath) - for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n") - if filereadable(fnameescape(s:rubypath)) - let s:rubypath= fnameescape(s:rubypath) - break - endif - endfor -endif -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=+^\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=+^\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 - -" [-- python --] {{{3 -let s:pythonpath= fnameescape(expand(":p:h")."/python.vim") -if !filereadable(s:pythonpath) - for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n") - if filereadable(fnameescape(s:pythonpath)) - let s:pythonpath= fnameescape(s:pythonpath) - break - endif - endfor -endif -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=+^\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=+^\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 - -" [-- tcl --] {{{3 -if has("win32") || has("win95") || has("win64") || has("win16") - " apparently has("tcl") has been hanging vim on some windows systems with cygwin - let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\\%(\.exe\)\=$') -else - let s:trytcl= 1 -endif -if s:trytcl - let s:tclpath= fnameescape(expand(":p:h")."/tcl.vim") - if !filereadable(s:tclpath) - for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n") - if filereadable(fnameescape(s:tclpath)) - let s:tclpath= fnameescape(s:tclpath) - break - endif - endfor - endif - if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath) - unlet! b:current_syntax - syn cluster vimFuncBodyList add=vimTclRegion - exe "syn include @vimTclScript ".s:tclpath - 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=+^\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=+^\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 - -" [-- mzscheme --] {{{3 -let s:mzschemepath= fnameescape(expand(":p:h")."/scheme.vim") -if !filereadable(s:mzschemepath) - for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n") - if filereadable(fnameescape(s:mzschemepath)) - let s:mzschemepath= fnameescape(s:mzschemepath) - break - endif - endfor -endif -if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath) - unlet! b:current_syntax - let s:iskKeep= &isk - syn cluster vimFuncBodyList add=vimMzSchemeRegion - exe "syn include @vimMzSchemeScript ".s:mzschemepath - let &isk= s:iskKeep - unlet s:iskKeep - 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=+^\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 - " Synchronize (speed) {{{2 "============ if exists("g:vimsyn_minlines") @@ -1814,7 +1953,6 @@ if !exists("skip_vim_syntax_inits") hi def link vimBehaveError vimError hi def link vimCollClassErr vimError hi def link vimErrSetting vimError - hi def link vimEmbedError vimError hi def link vimFTError vimError hi def link vimFunctionError vimError hi def link vimFunc vimError @@ -1943,11 +2081,12 @@ if !exists("skip_vim_syntax_inits") hi def link vimLambdaBrace Delimiter hi def link vimLambdaOperator vimOper hi def link vimLet vimCommand - hi def link vimLetHereDoc vimString - hi def link vimLetHereDocStart Special - hi def link vimLetHereDocStop Special + hi def link vimLetHeredoc vimString + hi def link vimLetHeredocStart Special + hi def link vimLetHeredocStop Special hi def link vimLetRegister vimRegister hi def link vimLineComment vimComment + hi def link vimLua vimCommand hi def link vimMake vimCommand hi def link vimMakeadd vimCommand hi def link vimMakeBang vimBang @@ -1973,6 +2112,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimMenutranslateComment vimComment hi def link vim9MethodName vimFuncName hi def link vimMtchComment vimComment + hi def link vimMzScheme vimCommand + hi def link vimNonText NonText hi def link vimNormal vimCommand hi def link vimNotation Special hi def link vimNotFunc vimCommand @@ -1992,8 +2133,12 @@ if !exists("skip_vim_syntax_inits") hi def link vimPatSepZone vimString hi def link vimPatSepZ vimPatSep hi def link vimPattern Type + hi def link vimPerl vimCommand hi def link vimPlainMark vimMark hi def link vimPlainRegister vimRegister + hi def link vimPython vimCommand + hi def link vimPython3 vimCommand + hi def link vimPythonX vimCommand hi def link vimQuoteEscape vimEscape hi def link vimRedir vimCommand hi def link vimRedirBang vimBang @@ -2003,7 +2148,10 @@ if !exists("skip_vim_syntax_inits") hi def link vimRedirEnd Special hi def link vimRedirRegister vimRegister hi def link vimRegister SpecialChar + hi def link vimRuby vimCommand hi def link vimScriptDelim Comment + hi def link vimScriptHeredocStart vimLetHeredocStart + hi def link vimScriptHeredocStop vimLetHeredocStop hi def link vimSearch vimString hi def link vimSearchDelim Delimiter hi def link vimSep Delimiter @@ -2068,6 +2216,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimSynSpell Type hi def link vimSyntax vimCommand hi def link vimSynType vimSpecial + hi def link vimTcl vimCommand hi def link vimThrow vimCommand hi def link vimTodo Todo hi def link vimType Type From 0816f17e9a2ba2d1e132497b03905878c7340a78 Mon Sep 17 00:00:00 2001 From: glepnir Date: Sun, 18 May 2025 20:14:53 +0200 Subject: [PATCH 265/633] patch 9.1.1398: completion: trunc does not follow Pmenu highlighting attributes Problem: When items are combined with user-defined highlight attributes (e.g., strikethrough), trunc inherits these attributes, making the text difficult to read. Solution: trunc now uses the original Pmenu and PmenuSel highlight attributes (glepnir) closes: #17340 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/popupmenu.c | 33 +++++++++++++-------- src/testdir/dumps/Test_pum_maxwidth_23.dump | 8 +++++ src/testdir/test_popup.vim | 15 +++++++++- src/version.c | 2 ++ 4 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 src/testdir/dumps/Test_pum_maxwidth_23.dump diff --git a/src/popupmenu.c b/src/popupmenu.c index d629049483..6d91c33ee4 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -589,14 +589,16 @@ pum_display_rtl_text( int width, int width_limit, int totwidth, - int next_isempty) + int next_isempty, + int selected) { - char_u *rt; - int cells; + char_u *rt = NULL; + int cells = 0; int over_cell = 0; int truncated = FALSE; int pad = next_isempty ? 0 : 2; - int remaining; + int remaining = 0; + int trunc_attr = highlight_attr[selected ? HLF_PSI : HLF_PNI]; int truncrl = curwin->w_fill_chars.truncrl != NUL ? curwin->w_fill_chars.truncrl : '<'; @@ -656,7 +658,8 @@ pum_display_rtl_text( width = cells + over_cell + 1; rt = orig_rt; - screen_putchar(truncrl, row, col - width + 1 + TPL_LCOL(NULL), attr); + screen_putchar(truncrl, row, + col - width + 1 + TPL_LCOL(NULL), trunc_attr); if (over_cell > 0) screen_fill(row, row + 1, col - width + 2 + TPL_LCOL(NULL), @@ -691,15 +694,17 @@ pum_display_ltr_text( int width, // width already calculated in outer loop int width_limit, int totwidth, - int next_isempty) + int next_isempty, + int selected) { - int size; - int cells; + int size = 0; + int cells = 0; char_u *st_end = NULL; int over_cell = 0; int pad = next_isempty ? 0 : 2; - int truncated; - int remaining; + int truncated = FALSE; + int remaining = 0; + int trunc_attr = highlight_attr[selected ? HLF_PSI : HLF_PNI]; int trunc = curwin->w_fill_chars.trunc != NUL ? curwin->w_fill_chars.trunc : '>'; @@ -756,7 +761,8 @@ pum_display_ltr_text( screen_fill(row, row + 1, col + cells + TPL_LCOL(NULL), col + cells + over_cell + TPL_LCOL(NULL), ' ', ' ', attr); - screen_putchar(trunc, row, col + cells + over_cell + TPL_LCOL(NULL), attr); + screen_putchar(trunc, row, + col + cells + over_cell + TPL_LCOL(NULL), trunc_attr); } VIM_CLEAR(st); @@ -785,6 +791,7 @@ pum_process_item( char_u *p = pum_get_item(idx, item_type); int width = 0; // item width int w; // char width + int selected = idx == pum_selected; for ( ; ; MB_PTR_ADV(p)) { @@ -815,11 +822,11 @@ pum_process_item( #ifdef FEAT_RIGHTLEFT if (pum_rl) col = pum_display_rtl_text(row, col, st, attr, attrs, - width, pum_width, *totwidth_ptr, next_isempty); + width, pum_width, *totwidth_ptr, next_isempty, selected); else #endif col = pum_display_ltr_text(row, col, st, attr, attrs, - width, pum_width, *totwidth_ptr, next_isempty); + width, pum_width, *totwidth_ptr, next_isempty, selected); if (attrs != NULL) VIM_CLEAR(attrs); diff --git a/src/testdir/dumps/Test_pum_maxwidth_23.dump b/src/testdir/dumps/Test_pum_maxwidth_23.dump new file mode 100644 index 0000000000..aa8fafaa3e --- /dev/null +++ b/src/testdir/dumps/Test_pum_maxwidth_23.dump @@ -0,0 +1,8 @@ +|一*0&#ffffff0|二|三|四|五|六|七|八|九|十> +&@54 +|一*0#ff404010#e0e0e08|二|三|四|五|六|七| +&|>+0#0000001&| +0#4040ff13#ffffff0@58 +|1+0#ff404010#ffd7ff255|2|3|4|5|6|7|8|9|_|1|2|3|4|5|>+0#0000001&| +0#4040ff13#ffffff0@58 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index f1fc9600c1..1fd18ca4ee 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -2030,6 +2030,7 @@ func Test_pum_maxwidth_multibyte() CheckScreendump let lines =<< trim END + hi StrikeFake ctermfg=9 let g:change = 0 func Omni_test(findstart, base) if a:findstart @@ -2054,8 +2055,14 @@ func Test_pum_maxwidth_multibyte() \ #{word: "bar", menu: "fooMenu", kind: "一二三四"}, \ #{word: "一二三四五", kind: "multi"}, \ ] - else return [#{word: "bar", menu: "fooMenu", kind: "一二三"}] + elseif g:change == 3 + return [#{word: "bar", menu: "fooMenu", kind: "一二三"}] + else + return [ + \ #{word: "一二三四五六七八九十", abbr_hlgroup: "StrikeFake"}, + \ #{word: "123456789_123456789_123456789_", abbr_hlgroup: "StrikeFake"}, + \ ] endif endfunc set omnifunc=Omni_test @@ -2168,6 +2175,12 @@ func Test_pum_maxwidth_multibyte() call term_sendkeys(buf, "\:set norightleft\") endif + call term_sendkeys(buf, ":let g:change=4\") + call TermWait(buf, 50) + call term_sendkeys(buf, "S\\") + call VerifyScreenDump(buf, 'Test_pum_maxwidth_23', {'rows': 8}) + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) endfunc diff --git a/src/version.c b/src/version.c index 6e5b00c54d..a63fc09297 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1398, /**/ 1397, /**/ From 7b5550fac7d37f35285c78a8e74674817a7cfc99 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Sun, 18 May 2025 20:37:34 +0200 Subject: [PATCH 266/633] runtime(vim): Update base-syntax, improve :import highlighting - Match "autoload" as a keyword in :import commands. - Match an expression argument for the filename. closes: #15375 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/generator/gen_syntax_vim.vim | 3 +- runtime/syntax/generator/vim.vim.base | 50 +++++++- .../testdir/dumps/vim9_ex_import_00.dump | 20 +++ .../testdir/dumps/vim9_ex_import_01.dump | 20 +++ .../testdir/dumps/vim9_ex_import_02.dump | 20 +++ .../testdir/dumps/vim9_ex_import_03.dump | 20 +++ .../testdir/dumps/vim9_ex_import_04.dump | 20 +++ .../testdir/dumps/vim9_ex_import_05.dump | 20 +++ .../testdir/dumps/vim9_ex_import_06.dump | 20 +++ .../testdir/dumps/vim_ex_import_00.dump | 20 +++ .../testdir/dumps/vim_ex_import_01.dump | 20 +++ .../testdir/dumps/vim_ex_import_02.dump | 20 +++ .../testdir/dumps/vim_ex_import_03.dump | 20 +++ .../testdir/dumps/vim_ex_import_04.dump | 20 +++ .../testdir/dumps/vim_ex_import_05.dump | 20 +++ .../testdir/dumps/vim_ex_import_06.dump | 20 +++ .../testdir/input/setup/vim9_ex_import.vim | 1 + .../testdir/input/setup/vim_ex_import.vim | 1 + .../syntax/testdir/input/vim9_ex_import.vim | 120 ++++++++++++++++++ .../syntax/testdir/input/vim_ex_import.vim | 119 +++++++++++++++++ runtime/syntax/vim.vim | 52 +++++++- 21 files changed, 618 insertions(+), 8 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/vim9_ex_import_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_ex_import_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_ex_import_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_ex_import_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_ex_import_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_ex_import_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim9_ex_import_06.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_import_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_import_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_import_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_import_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_import_04.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_import_05.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_import_06.dump create mode 100644 runtime/syntax/testdir/input/setup/vim9_ex_import.vim create mode 100644 runtime/syntax/testdir/input/setup/vim_ex_import.vim create mode 100644 runtime/syntax/testdir/input/vim9_ex_import.vim create mode 100644 runtime/syntax/testdir/input/vim_ex_import.vim diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim index f37f0467bc..e3317fca7c 100644 --- a/runtime/syntax/generator/gen_syntax_vim.vim +++ b/runtime/syntax/generator/gen_syntax_vim.vim @@ -1,7 +1,7 @@ " Vim syntax file generator " Language: Vim script " Maintainer: Hirohito Higashi (h_east) -" Last Change: 2025 May 16 +" Last Change: 2025 May 17 let s:keepcpo= &cpo set cpo&vim @@ -293,6 +293,7 @@ function s:get_vim_command_type(cmd_name) grepadd helpgrep if + import interface insert let diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 4ab45b923e..99d0480dc9 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 May 16 +" Last Change: 2025 May 17 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -233,7 +233,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vi syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1" skipwhite nextgroup=@vimComment +syn match vimImport "\" skipwhite nextgroup=vimImportAutoload,vimImportFilename + " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking. syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue @@ -1880,7 +1921,7 @@ if exists("g:vimsyn_minlines") endif exe "syn sync maxlines=".s:vimsyn_maxlines syn sync linecont "^\s\+\\" -syn sync linebreaks=1 +syn sync linebreaks=2 syn sync match vimAugroupSyncA groupthere NONE "\\s\+[eE][nN][dD]" " ==================== @@ -2013,6 +2054,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimHiStartStop vimHiTerm hi def link vimHiTerm Type hi def link vimHLGroup vimGroup + hi def link vimImport vimCommand + hi def link vimImportAutoload Special + hi def link vimImportAs vimImport hi def link vimInsert vimString hi def link vim9KeymapLineComment vimKeymapLineComment hi def link vimKeymapLineComment vimComment diff --git a/runtime/syntax/testdir/dumps/vim9_ex_import_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_import_00.dump new file mode 100644 index 0000000000..b54d713038 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_ex_import_00.dump @@ -0,0 +1,20 @@ +>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64 +|#+0#0000e05&| |V|i|m|9| |:|i|m|p|o|r|t| |c|o|m@1|a|n|d| +0#0000000&@52 +|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|I|m|p|o|r|t|N|a|m|e| |T|o|d|o| +0#0000000&@31 +@75 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@58 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@39 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@61 +@2|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@2|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@63 +@2|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim9_ex_import_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_import_01.dump new file mode 100644 index 0000000000..51f8ba9e57 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_ex_import_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2>"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|r| +0#0000000#ffffff0@51 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@32 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@61 +@57|1|9|,|3| @9|1|2|%| diff --git a/runtime/syntax/testdir/dumps/vim9_ex_import_02.dump b/runtime/syntax/testdir/dumps/vim9_ex_import_02.dump new file mode 100644 index 0000000000..0fc54ef3ca --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_ex_import_02.dump @@ -0,0 +1,20 @@ +|i+0#af5f00255#ffffff0|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@61 +@2|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@2|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@2|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@66 +@75 +>i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@63 +@2|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +@2|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@66 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@66 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +@57|3|7|,|1| @9|3|0|%| diff --git a/runtime/syntax/testdir/dumps/vim9_ex_import_03.dump b/runtime/syntax/testdir/dumps/vim9_ex_import_03.dump new file mode 100644 index 0000000000..efbc9203d9 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_ex_import_03.dump @@ -0,0 +1,20 @@ +|i+0#af5f00255#ffffff0|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +@2>#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@66 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |i+0#af5f00255&|m|p|o|r|t| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@45 +@75 +@75 +|#+0#0000e05&| |a|u|t|o|l|o|a|d| +0#0000000&@64 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@49 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@30 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@52 +@2|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@2|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@57|5@1|,|3| @9|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim9_ex_import_04.dump b/runtime/syntax/testdir/dumps/vim9_ex_import_04.dump new file mode 100644 index 0000000000..d1e55258a6 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_ex_import_04.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@54 +@2|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +> @74 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@42 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@44 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|r| +0#0000000#ffffff0@42 +@57|7|3|,|0|-|1| @7|6@1|%| diff --git a/runtime/syntax/testdir/dumps/vim9_ex_import_05.dump b/runtime/syntax/testdir/dumps/vim9_ex_import_05.dump new file mode 100644 index 0000000000..7d5e19fdae --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_ex_import_05.dump @@ -0,0 +1,20 @@ +|i+0#af5f00255#ffffff0|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|r| +0#0000000#ffffff0@42 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@23 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@52 +@2|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@2>"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@2|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@66 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@54 +@2|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +@2|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@66 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@42 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@63 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@57|9|1|,|3| @9|8|4|%| diff --git a/runtime/syntax/testdir/dumps/vim9_ex_import_06.dump b/runtime/syntax/testdir/dumps/vim9_ex_import_06.dump new file mode 100644 index 0000000000..28c5926225 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_ex_import_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@66 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@44 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| | +0#0000000&@62 +@2>?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@61 +@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63 +@2|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@66 +@75 +@75 +|#+0#0000e05&| |"+0#e000002&|a|s|"| +0#0000e05&|k|e|y|w|o|r|d| |i|n| |e|x|p|r| +0#0000000&@52 +@75 +|v+0#af5f00255&|a|r| +0#0000000&|a+0#00e0e07&|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|m|o|d|u|l|e|s|/|"| +0#0000000&@55 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|a+0#00e0e07&|s| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|a+0#00e0e07&|s| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|o+0#0000001#ffff4012|t|h|e|r| +0#0000000#ffffff0@18 +@75 +|~+0#4040ff13&| @73 +|~| @73 +| +0#0000000&@56|1|0|9|,|3| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_import_00.dump b/runtime/syntax/testdir/dumps/vim_ex_import_00.dump new file mode 100644 index 0000000000..8d1e40f005 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_import_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|i|m|p|o|r|t| |c|o|m@1|a|n|d| +0#0000000&@53 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|I|m|p|o|r|t|N|a|m|e| |T|o|d|o| +0#0000000&@31 +@75 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@58 +|i+0#af5f00255&|m|p|o|r| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@38 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@57 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&@61 +@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@59 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_import_01.dump b/runtime/syntax/testdir/dumps/vim_ex_import_01.dump new file mode 100644 index 0000000000..62070f9740 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_import_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@59 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@6>"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@57 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&@61 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| | +0#0000000&@57 +@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@55 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|r| +0#0000000#ffffff0@51 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@30 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@59 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@57|1|9|,|7| @9|1|3|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_import_02.dump b/runtime/syntax/testdir/dumps/vim_ex_import_02.dump new file mode 100644 index 0000000000..9fb21c2f41 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_import_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@57 +@6|\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&@61 +@6>\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@59 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@57 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&@61 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| | +0#0000000&@57 +@57|3|7|,|7| @9|3|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_import_03.dump b/runtime/syntax/testdir/dumps/vim_ex_import_03.dump new file mode 100644 index 0000000000..686b8bdf11 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_import_03.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| | +0#0000000&@57 +@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@55 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6>\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |i+0#af5f00255&|m|p|o|r|t| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@45 +@75 +@75 +|"+0#0000e05&| |a|u|t|o|l|o|a|d| +0#0000000&@64 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@49 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@28 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@50 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@57 +@75 +@57|5@1|,|7| @9|4|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_import_04.dump b/runtime/syntax/testdir/dumps/vim_ex_import_04.dump new file mode 100644 index 0000000000..957e4d9988 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_import_04.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&@52 +@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@75 +>i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@50 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +| +0#e000002&@5|\+0#e000e06&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@56 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@57 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&@52 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| | +0#0000000&@57 +@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@55 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|r| +0#0000000#ffffff0@42 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@21 +@57|7|3|,|1| @9|6|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_import_05.dump b/runtime/syntax/testdir/dumps/vim_ex_import_05.dump new file mode 100644 index 0000000000..151b5eb3e1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_import_05.dump @@ -0,0 +1,20 @@ +|i+0#af5f00255#ffffff0|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@21 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@50 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@57 +@6>\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&@52 +@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@6|\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&@50 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@55 +@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@57 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@57|9|1|,|7| @9|8|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_import_06.dump b/runtime/syntax/testdir/dumps/vim_ex_import_06.dump new file mode 100644 index 0000000000..7716921dd0 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_import_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@75 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|a+0#e000e06&|u|t|o|l|o|a|d| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&@52 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| | +0#0000000&@57 +@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&@55 +@6>"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&@55 +@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58 +@6|\+0#e000e06&| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|b+0#0000001#ffff4012|a|z| +0#0000000#ffffff0@60 +@75 +@75 +|"+0#0000e05&| |"+0#e000002&|a|s|"| +0#0000e05&|k|e|y|w|o|r|d| |i|n| |e|x|p|r| +0#0000000&@52 +@75 +|l+0#af5f00255&|e|t| +0#0000000&|a+0#00e0e07&|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|m|o|d|u|l|e|s|/|"| +0#0000000&@55 +|i+0#af5f00255&|m|p|o|r|t| +0#0000000&|v+0#00e0e07&|:|t|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|a+0#00e0e07&|s| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|"+0#e000002&|f|o@1|.|v|i|m|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|a+0#00e0e07&|s| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|"+0#e000002&|b|a|r|.|v|i|m|"| +0#0000000&|a+0#af5f00255&|s| +0#0000000&|o+0#0000001#ffff4012|t|h|e|r| +0#0000000#ffffff0@16 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|0|9|,|7| @8|B|o|t| diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_import.vim b/runtime/syntax/testdir/input/setup/vim9_ex_import.vim new file mode 100644 index 0000000000..ebd90ede92 --- /dev/null +++ b/runtime/syntax/testdir/input/setup/vim9_ex_import.vim @@ -0,0 +1 @@ +hi link vimVar Identifier diff --git a/runtime/syntax/testdir/input/setup/vim_ex_import.vim b/runtime/syntax/testdir/input/setup/vim_ex_import.vim new file mode 100644 index 0000000000..ebd90ede92 --- /dev/null +++ b/runtime/syntax/testdir/input/setup/vim_ex_import.vim @@ -0,0 +1 @@ +hi link vimVar Identifier diff --git a/runtime/syntax/testdir/input/vim9_ex_import.vim b/runtime/syntax/testdir/input/vim9_ex_import.vim new file mode 100644 index 0000000000..bedd5bbda7 --- /dev/null +++ b/runtime/syntax/testdir/input/vim9_ex_import.vim @@ -0,0 +1,120 @@ +vim9script +# Vim9 :import command +# VIM_TEST_SETUP hi link vimImportName Todo + + +import "foo.vim" +import true ? "foo.vim" : "bar.vim" + +import true ? + "foo.vim" : + "bar.vim" + +import true + ? "foo.vim" + : "bar.vim" + +import true ? # comment + # comment + "foo.vim" : + # comment + "bar.vim" + +import true # comment + # comment + ? "foo.vim" + # comment + : "bar.vim" + +import "foo.vim" as bar +import true ? "foo.vim" : "bar.vim" as baz + +import true ? + "foo.vim" : + "bar.vim" + as baz + +import true + ? "foo.vim" + : "bar.vim" + as baz + +import true ? # comment + # comment + "foo.vim" : + # comment + "bar.vim" + # comment + as baz + +import true # comment + # comment + ? "foo.vim" + # comment + : "bar.vim" + # comment + as baz + +echo "Foo" | import "foo.vim" + + +# autoload + +import autoload "foo.vim" +import autoload true ? "foo.vim" : "bar.vim" + +import autoload true ? + "foo.vim" : + "bar.vim" + +import autoload true + ? "foo.vim" + : "bar.vim" + +import autoload true ? # comment + # comment + "foo.vim" : + # comment + "bar.vim" + +import autoload true # comment + # comment + ? "foo.vim" + # comment + : "bar.vim" + +import autoload "foo.vim" as bar +import autoload true ? "foo.vim" : "bar.vim" as baz + +import autoload true ? + "foo.vim" : + "bar.vim" + as baz + +import autoload true + ? "foo.vim" + : "bar.vim" + as baz + +import autoload true ? # comment + # comment + "foo.vim" : + # comment + "bar.vim" + # comment + as baz + +import autoload true # comment + # comment + ? "foo.vim" + # comment + : "bar.vim" + # comment + as baz + + +# "as" keyword in expr + +var as = "modules/" +import true ? as .. "foo.vim" : as .. "bar.vim" as other + diff --git a/runtime/syntax/testdir/input/vim_ex_import.vim b/runtime/syntax/testdir/input/vim_ex_import.vim new file mode 100644 index 0000000000..07df827b9e --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_import.vim @@ -0,0 +1,119 @@ +" Vim :import command +" VIM_TEST_SETUP hi link vimImportName Todo + + +import "foo.vim" +impor v:true ? "foo.vim" : "bar.vim" + +import v:true ? + \ "foo.vim" : + \ "bar.vim" + +import v:true + \ ? "foo.vim" + \ : "bar.vim" + +import v:true ? + "\ comment + \ "foo.vim" : + "\ comment + \ "bar.vim" + +import v:true + "\ comment + \ ? "foo.vim" + "\ comment + \ : "bar.vim" + +import "foo.vim" as bar +import v:true ? "foo.vim" : "bar.vim" as baz + +import v:true ? + \ "foo.vim" : + \ "bar.vim" + \ as baz + +import v:true + \ ? "foo.vim" + \ : "bar.vim" + \ as baz + +import v:true ? + "\ comment + \ "foo.vim" : + "\ comment + \ "bar.vim" + "\ comment + \ as baz + +import v:true + "\ comment + \ ? "foo.vim" + "\ comment + \ : "bar.vim" + "\ comment + \ as baz + +echo "Foo" | import "foo.vim" + + +" autoload + +import autoload "foo.vim" +import autoload v:true ? "foo.vim" : "bar.vim" + +import autoload v:true ? + \ "foo.vim" : + \ "bar.vim" + +import autoload v:true + \ ? "foo.vim" + \ : "bar.vim" + +import autoload v:true ? + "\ comment + \"foo.vim" : + "\ comment + \ "bar.vim" + +import autoload v:true + "\ comment + \ ? "foo.vim" + "\ comment + \ : "bar.vim" + +import autoload "foo.vim" as bar +import autoload v:true ? "foo.vim" : "bar.vim" as baz + +import autoload v:true ? + \ "foo.vim" : + \ "bar.vim" + \ as baz + +import autoload v:true + \ ? "foo.vim" + \ : "bar.vim" + \ as baz + +import autoload v:true ? + "\ comment + \ "foo.vim" : + "\ comment + \ "bar.vim" + "\ comment + \ as baz + +import autoload v:true + "\ comment + \ ? "foo.vim" + "\ comment + \ : "bar.vim" + "\ comment + \ as baz + + +" "as" keyword in expr + +let as = "modules/" +import v:true ? as .. "foo.vim" : as .. "bar.vim" as other + diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index debed2bea8..d0f3202623 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 May 16 +" Last Change: 2025 May 17 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -34,7 +34,7 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell " regular vim commands {{{2 " GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang' syn keyword vimCommand contained abo[veleft] 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] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler] con[tinue] conf[irm] nextgroup=vimBang -syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] 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] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] imp[ort] int[ro] ip[ut] is[earch] isp[lit] j[oin] ju[mps] k kee[pmarks] keepj[umps] keepp[atterns] nextgroup=vimBang +syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] 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] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] int[ro] ip[ut] is[earch] isp[lit] j[oin] ju[mps] k kee[pmarks] keepj[umps] keepp[atterns] nextgroup=vimBang syn keyword vimCommand contained 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] 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] lw[indow] ls m[ove] ma[rk] marks menut[ranslate] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] 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] pb[uffer] nextgroup=vimBang syn keyword vimCommand contained pc[lose] 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] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] 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] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] nextgroup=vimBang syn keyword vimCommand contained spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] 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] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] 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] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] winc[md] wind[o] winp[os] nextgroup=vimBang @@ -286,7 +286,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vi syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1" skipwhite nextgroup=@vimComment +syn match vimImport "\" skipwhite nextgroup=vimImportAutoload,vimImportFilename + " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking. syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue @@ -1941,7 +1982,7 @@ if exists("g:vimsyn_minlines") endif exe "syn sync maxlines=".s:vimsyn_maxlines syn sync linecont "^\s\+\\" -syn sync linebreaks=1 +syn sync linebreaks=2 syn sync match vimAugroupSyncA groupthere NONE "\\s\+[eE][nN][dD]" " ==================== @@ -2074,6 +2115,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimHiStartStop vimHiTerm hi def link vimHiTerm Type hi def link vimHLGroup vimGroup + hi def link vimImport vimCommand + hi def link vimImportAutoload Special + hi def link vimImportAs vimImport hi def link vimInsert vimString hi def link vim9KeymapLineComment vimKeymapLineComment hi def link vimKeymapLineComment vimComment From 5ad53ca99f9575ba7f7f18d75d7527781f5b64cf Mon Sep 17 00:00:00 2001 From: Markus Heidelberg Date: Mon, 19 May 2025 19:31:23 +0200 Subject: [PATCH 267/633] runtime(muttrc): fix mangled keywords in syntax script Regression introduced in commit 10f23e10a9 ("Update syntax/muttrc.vim to latest mutt (#12797)", 2023-08-15) Affected keywords: invresume_draft_files invresume_edited_draft_files mailcap_path mark_macro_prefix closes: #17344 Signed-off-by: Markus Heidelberg Signed-off-by: Christian Brabandt --- runtime/syntax/muttrc.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/runtime/syntax/muttrc.vim b/runtime/syntax/muttrc.vim index bf53a42f94..34ebc4f110 100644 --- a/runtime/syntax/muttrc.vim +++ b/runtime/syntax/muttrc.vim @@ -3,6 +3,7 @@ " Original: Preben 'Peppe' Guldberg " Maintainer: Luna Celeste " Last Change: 14 Aug 2023 +" 2025 May 19 re-include missing mutt Keywords #17344 " This file covers mutt version 2.2.10 @@ -235,7 +236,7 @@ syn keyword muttrcVarBool skipwhite contained \ invpop_auth_try_all invpop_last invpostpone_encrypt invpostpone_encrypt_as \ invprint_decode invprint_decode_weed invprint_split invprompt_after invread_only \ invreflow_space_quotes invreflow_text invreflow_wrap invreply_self invresolve - \ invresume_draft_file sinvresume_edited_draft_files invreverse_alias + \ invresume_draft_files invresume_edited_draft_files invreverse_alias \ invreverse_name invreverse_realname invrfc2047_parameters invsave_address \ invsave_empty invsave_name invscore invsidebar_folder_indent \ invsidebar_new_mail_only invsidebar_next_new_wrap invsidebar_relative_shortpath_indent @@ -413,7 +414,7 @@ syn keyword muttrcVarStr contained skipwhite \ hdr_format header_cache header_cache_compress header_cache_pagesize history_file \ hostname imap_authenticators imap_delim_chars imap_headers imap_idle imap_login \ imap_oauth_refresh_command imap_pass imap_user indent_str indent_string ispell locale - \ mailcap_pat hmark_macro_prefix mask mbox mbox_type message_cachedir mh_seq_flagged + \ mailcap_path mark_macro_prefix mask mbox mbox_type message_cachedir mh_seq_flagged \ mh_seq_replied mh_seq_unseen mime_type_query_command mixmaster msg_format new_mail_command \ pager pgp_default_key pgp_decryption_okay pgp_good_sign pgp_mime_signature_description \ pgp_mime_signature_filename pgp_sign_as pgp_sort_keys pipe_sep pop_authenticators From 5a8f9958e23ef0636425c0845fb534cc5c5319f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20B=C3=ACnh=20An?= <111893501+brianhuster@users.noreply.github.com> Date: Mon, 19 May 2025 19:34:44 +0200 Subject: [PATCH 268/633] runtime(doc): remove outdated Contribution section in pi_tutor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: The Github repo link in the Contribution section has been archived for 5 years. So people who want to contribute to the tutor plugin should just send PR to Vim repo, similar to most other Vim features, so there is no need for a Contribution section in the plugin doc. Solution: Replace it with an Original Author note at the beginning of the help document. closes: #17341 Signed-off-by: Phạm Bình An <111893501+brianhuster@users.noreply.github.com> Signed-off-by: Christian Brabandt --- runtime/doc/pi_tutor.txt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/runtime/doc/pi_tutor.txt b/runtime/doc/pi_tutor.txt index 590d2e4b4b..9b1de1f702 100644 --- a/runtime/doc/pi_tutor.txt +++ b/runtime/doc/pi_tutor.txt @@ -1,10 +1,12 @@ -*pi_tutor.txt* For Vim version 9.1. Last change: 2024 Dec 17 +*pi_tutor.txt* For Vim version 9.1. Last change: 2025 May 19 INTERACTIVE TUTORIALS FOR VIM *vim-tutor-mode* vim-tutor-mode provides a system to follow and create interactive tutorials for vim and third party plugins. It replaces the venerable `vimtutor` system. +Original Author: Felipe Morales + ============================================================================= 1. Usage *vim-tutor-usage* @@ -47,13 +49,5 @@ to be detected by the :Tutor command. It is recommended to use a less formal style when writing tutorials than in regular documentation (unless the content requires it). -============================================================================= -3. Contributing - -Development of the plugin is done over at github [1]. Feel free to report -issues and make suggestions. - -[1]: https://github.com/fmoralesc/vim-tutor-mode - ============================================================================= vim:tw=78:ts=8:noet:ft=help:norl: From 719ec0fe154e321bf7cf2cb2f93e8aa30036b87e Mon Sep 17 00:00:00 2001 From: Michele Sorcinelli Date: Mon, 19 May 2025 19:45:32 +0200 Subject: [PATCH 269/633] runtime(tar): preserve pwd when reading and writing tar files While at it, use `:lcd` to temporarily set the window local directory instead of `:cd` for the global working directory. fixes: #17334 closes: #17339 Signed-off-by: Michele Sorcinelli Signed-off-by: Christian Brabandt --- runtime/autoload/tar.vim | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/runtime/autoload/tar.vim b/runtime/autoload/tar.vim index 499036ef9c..7c1cefa63e 100644 --- a/runtime/autoload/tar.vim +++ b/runtime/autoload/tar.vim @@ -15,6 +15,7 @@ " 2025 Mar 02 by Vim Project: determine the compression using readblob() " instead of shelling out to file(1) " 2025 Apr 16 by Vim Project: decouple from netrw by adding s:WinPath() +" 2025 May 19 by Vim Project: restore working directory after read/write " " Contains many ideas from Michael Toren's " @@ -306,10 +307,10 @@ fun! tar#Read(fname,mode) " attempt to change to the indicated directory try - exe "cd ".fnameescape(tmpdir) + exe "lcd ".fnameescape(tmpdir) catch /^Vim\%((\a\+)\)\=:E344/ redraw! - echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None + echohl Error | echo "***error*** (tar#Write) cannot lcd to temporary directory" | Echohl None let &report= repkeep return endtry @@ -319,7 +320,7 @@ fun! tar#Read(fname,mode) call s:Rmdir("_ZIPVIM_") endif call mkdir("_ZIPVIM_") - cd _ZIPVIM_ + lcd _ZIPVIM_ if has("win32unix") && executable("cygpath") " assuming cygwin @@ -413,9 +414,9 @@ fun! tar#Read(fname,mode) redraw! if v:shell_error != 0 - cd .. + lcd .. call s:Rmdir("_ZIPVIM_") - exe "cd ".fnameescape(curdir) + exe "lcd ".fnameescape(curdir) echohl Error | echo "***error*** (tar#Read) sorry, unable to open or extract ".tarfile." with ".fname | echohl None endif @@ -432,14 +433,16 @@ if v:shell_error != 0 set nomod let &report= repkeep + exe "lcd ".fnameescape(curdir) + silent exe "file tarfile::".escape_file endfun " --------------------------------------------------------------------- " tar#Write: {{{2 fun! tar#Write(fname) + let pwdkeep= getcwd() let repkeep= &report set report=10 - " temporary buffer variable workaround because too fucking tired. but it works now let curdir= b:curdir let tmpdir= b:tmpdir @@ -563,9 +566,9 @@ fun! tar#Write(fname) endif " cleanup and restore current directory - cd .. + lcd .. call s:Rmdir("_ZIPVIM_") - exe "cd ".fnameescape(curdir) + exe "lcd ".fnameescape(pwdkeep) setlocal nomod let &report= repkeep @@ -807,7 +810,7 @@ fun! tar#Vimuntar(...) if simplify(curdir) != simplify(vimhome) " copy (possibly compressed) tarball to .vim/vimfiles call system(s:WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome)) - exe "cd ".fnameescape(vimhome) + exe "lcd ".fnameescape(vimhome) endif " if necessary, decompress the tarball; then, extract it @@ -821,7 +824,7 @@ fun! tar#Vimuntar(...) if simplify(curdir) != simplify(tarhome) " remove decompressed tarball, restore directory call delete(tartail.".tar") - exe "cd ".fnameescape(curdir) + exe "lcd ".fnameescape(curdir) endif return endif @@ -839,7 +842,7 @@ fun! tar#Vimuntar(...) if simplify(tarhome) != simplify(vimhome) " remove decompressed tarball, restore directory call delete(vimhome."/".tarbase.".tar") - exe "cd ".fnameescape(curdir) + exe "lcd ".fnameescape(curdir) endif endfun From 681f1c914f8b4a1b53b838d5d6d8d0b931ea1ee0 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 21 May 2025 20:50:11 +0200 Subject: [PATCH 270/633] patch 9.1.1399: tests: test_codestyle fails for auto-generated files Problem: tests: test_codestyle fails for auto-generated files. While those files are already ignored in Test_source_Files(), the newly added Test_indent_of_source_files() does not filter those out and causes test failures on appveyor. Solution: factor out the generation of all c files into a common function and filter out auto-generated files if_ole.h, iid_ole.c and dlldata.c closes: #17352 Signed-off-by: Christian Brabandt --- src/testdir/test_codestyle.vim | 22 +++++++++++++--------- src/version.c | 2 ++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/testdir/test_codestyle.vim b/src/testdir/test_codestyle.vim index b7bbad3f9e..ea12b6c66d 100644 --- a/src/testdir/test_codestyle.vim +++ b/src/testdir/test_codestyle.vim @@ -1,5 +1,7 @@ " Test for checking the source code style. +let s:list_of_c_files = [] + def s:ReportError(fname: string, lnum: number, msg: string) if lnum > 0 assert_report(fname .. ' line ' .. lnum .. ': ' .. msg) @@ -22,19 +24,21 @@ def s:PerformCheck(fname: string, pattern: string, msg: string, skip: string) endwhile enddef +def s:Get_C_source_files(): list + if empty(list_of_c_files) + var list = glob('../*.[ch]', 0, 1) + ['../xxd/xxd.c'] + # Some files are auto-generated and may contain space errors, so skip those + list_of_c_files = filter(list, (i, v) => v !~ 'dlldata.c\|if_ole.h\|iid_ole.c') + endif + return list_of_c_files +enddef + def Test_source_files() - for fname in glob('../*.[ch]', 0, 1) + ['../xxd/xxd.c'] + for fname in Get_C_source_files() bwipe! 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', '') @@ -164,7 +168,7 @@ def Test_help_files() enddef def Test_indent_of_source_files() - for fname in glob('../*.[ch]', 0, 1) + ['../xxd/xxd.c'] + for fname in Get_C_source_files() execute 'tabnew ' .. fname if &expandtab continue diff --git a/src/version.c b/src/version.c index a63fc09297..570bfe4946 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1399, /**/ 1398, /**/ From 1307743697bbc46e1518abfea7f89caa95bcaf97 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Wed, 21 May 2025 20:52:44 +0200 Subject: [PATCH 271/633] patch 9.1.1400: [security]: use-after-free when evaluating tuple fails Problem: [security]: use-after-free when evaluating tuple fails Solution: return early in case of an error (Yegappan Lakshmanan) closes: #17351 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/eval.c | 2 ++ src/testdir/test_tuple.vim | 11 +++++++++++ src/version.c | 2 ++ 3 files changed, 15 insertions(+) diff --git a/src/eval.c b/src/eval.c index 530cc95fd3..bbfe566fa3 100644 --- a/src/eval.c +++ b/src/eval.c @@ -5000,6 +5000,8 @@ eval9_nested_expr( else { ret = eval1(arg, rettv, evalarg); // recursive! + if (ret != OK) + return ret; *arg = skipwhite_and_linebreak(*arg, evalarg); diff --git a/src/testdir/test_tuple.vim b/src/testdir/test_tuple.vim index 875031f2ca..e767851af2 100644 --- a/src/testdir/test_tuple.vim +++ b/src/testdir/test_tuple.vim @@ -1575,6 +1575,17 @@ func Test_try_finally_with_tuple_return() call v9.CheckSourceSuccess(lines) endfunc +" Test for evaluating a recursive tuple that results in an error +func Test_recursive_tuple_eval_fails() + let lines =<< trim END + call assert_fails(((((((((((((((('tag xyz', func2(pat, flags, infn) + END + call v9.CheckSourceLegacyAndVim9Failure(lines, [ + \ 'E121: Undefined variable: pat', + \ 'E1001: Variable not found: pat', + \ 'E121: Undefined variable: pat']) +endfunc + " Test for add() with a tuple func Test_tuple_add() let lines =<< trim END diff --git a/src/version.c b/src/version.c index 570bfe4946..a6c749dc05 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1400, /**/ 1399, /**/ From 56b1207e66d8db82dabf3f36aadf24caea61aa71 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Wed, 21 May 2025 21:01:40 +0200 Subject: [PATCH 272/633] patch 9.1.1401: list not materialized in prop_list() Problem: list not materialized in prop_list() (Nickwiz) Solution: materialize list before accessing it fixes: #17298 closes: #17349 Signed-off-by: Christian Brabandt --- src/testdir/test_textprop.vim | 25 +++++++++++++++++++++++++ src/textprop.c | 4 ++-- src/version.c | 2 ++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim index d26efa9489..bcf83cab8f 100644 --- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -4757,4 +4757,29 @@ func Test_textprop_with_wincolor() call StopVimInTerminal(buf) endfunc +func Test_textprop_materialize_list() + let ids = range(3) + call assert_equal([], prop_list(1, #{ids: ids})) + + let ids = range(3) + [] + call assert_equal([], prop_list(1, #{ids: ids})) + + let ids = range(3) + let ids[0] = ids[0] + call assert_equal([], prop_list(1, #{ids: ids})) + + let ids = range(3) + call assert_equal([], prop_list(1, #{ids: ids})) + + call assert_equal([], prop_list(1, #{ids: range(3) + [] })) + + let ids = range(3) + call assert_equal([], prop_list(1, #{ids: ids})) + + let ids = range(0, 3) + call assert_equal([], prop_list(1, #{ids: ids})) + + call assert_equal([], prop_list(1, #{ids: 3->range()})) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/textprop.c b/src/textprop.c index d16f8ecef3..a06605d3dd 100644 --- a/src/textprop.c +++ b/src/textprop.c @@ -1439,7 +1439,7 @@ get_prop_ids_from_list(list_T *l, int *num_ids) { int *prop_ids; listitem_T *li; - int i; + int i = 0; int id; int error; @@ -1449,7 +1449,7 @@ get_prop_ids_from_list(list_T *l, int *num_ids) if (prop_ids == NULL) return NULL; - i = 0; + CHECK_LIST_MATERIALIZE(l); FOR_ALL_LIST_ITEMS(l, li) { error = FALSE; diff --git a/src/version.c b/src/version.c index a6c749dc05..252c1437bf 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1401, /**/ 1400, /**/ From b0691b46bd684940efe2ebd56db0ca1c38b02a34 Mon Sep 17 00:00:00 2001 From: Johnothan King Date: Wed, 21 May 2025 21:21:14 +0200 Subject: [PATCH 273/633] runtime(sh): Fix various syntax highlighting problems in ksh93 scripts - Fixed syntax highlighting for ksh93 namespace variables starting with '${.' - Added support for the alarm, eloop, fds, mkservice, pids, poll and sha2sum builtins (which are indeed ksh93 builtins, albeit whether or not they are available depends on the ksh release and the compiled SHOPT options). - Added support for the many Unix commands provided by ksh93's libcmd as builtin commands (since these are general commands, scripts for other shells like bash will also highlight these). - The dumps for the sh_0{2,5,6,8,9}.sh were recreated due to this change affecting commands those scripts call (e.g. 'wc'). - Enabled ${parameter/pattern/string} and friends for ksh syntax. - Enabled case modification for ksh. See also: https://github.com/ksh93/ksh/commit/c1762e03 - Enabled ;;& support for ksh. See also: https://github.com/ksh93/ksh/commit/fc89d20a - Added many special ksh variables using 93u+m's data/variables.c as a reference. If vim can't figure out which ksh release is in play using e.g. the hashbang path, in such a case a generic default that enables everything and the kitchen sink will be used. Otherwise, features will be disabled if it's absolutely known a certain feature will not be present. Examples: - ERRNO is ksh88 specific, so that is locked to ksh88. - Only 93u+m (assumed for generic) has SRANDOM, and only 93u+m and 93v- have case modification support. - 93u+ and 93v- have VPATH and CSWIDTH variables (the latter is vestigal, but still present in the hardcoded variable table). - 93v- and ksh2020 have (buggy and near unusable) implementations of compgen and complete. - Only mksh provides function substitutions, i.e. ${|command;}. This took the better part of my day to implement. It seems to work well enough though. (Also had to regenerate the dumps again while testing it, as now there are dup scripts with mere hashbang differences, used solely for testing syntax highlighting differences.) closes: #17348 Signed-off-by: Johnothan King Signed-off-by: Christian Brabandt --- runtime/doc/syntax.txt | 6 +- runtime/syntax/sh.vim | 155 ++++++++++++++---- runtime/syntax/testdir/dumps/ksh2020_00.dump | 20 +++ runtime/syntax/testdir/dumps/ksh2020_01.dump | 20 +++ runtime/syntax/testdir/dumps/ksh2020_02.dump | 20 +++ runtime/syntax/testdir/dumps/ksh2020_03.dump | 20 +++ runtime/syntax/testdir/dumps/ksh2020_04.dump | 20 +++ runtime/syntax/testdir/dumps/ksh2020_05.dump | 20 +++ .../dumps/{sh_10_00.dump => ksh2020_06.dump} | 16 +- runtime/syntax/testdir/dumps/ksh2020_07.dump | 20 +++ runtime/syntax/testdir/dumps/ksh2020_08.dump | 20 +++ runtime/syntax/testdir/dumps/ksh2020_09.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_00.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_01.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_02.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_03.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_04.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_05.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_06.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_07.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_08.dump | 20 +++ runtime/syntax/testdir/dumps/ksh88_09.dump | 20 +++ .../testdir/dumps/ksh93_generic_00.dump | 20 +++ .../testdir/dumps/ksh93_generic_01.dump | 20 +++ .../testdir/dumps/ksh93_generic_02.dump | 20 +++ .../testdir/dumps/ksh93_generic_03.dump | 20 +++ .../testdir/dumps/ksh93_generic_04.dump | 20 +++ .../testdir/dumps/ksh93_generic_05.dump | 20 +++ .../testdir/dumps/ksh93_generic_06.dump | 20 +++ .../testdir/dumps/ksh93_generic_07.dump | 20 +++ .../testdir/dumps/ksh93_generic_08.dump | 20 +++ .../testdir/dumps/ksh93_generic_09.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_00.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_01.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_02.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_03.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_04.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_05.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_06.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_07.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_08.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93u_09.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_00.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_01.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_02.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_03.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_04.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_05.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_06.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_07.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_08.dump | 20 +++ runtime/syntax/testdir/dumps/ksh93v_09.dump | 20 +++ .../syntax/testdir/dumps/ksh_generic_00.dump | 20 +++ .../syntax/testdir/dumps/ksh_generic_01.dump | 20 +++ .../syntax/testdir/dumps/ksh_generic_02.dump | 20 +++ .../syntax/testdir/dumps/ksh_generic_03.dump | 20 +++ .../syntax/testdir/dumps/ksh_generic_04.dump | 20 +++ .../syntax/testdir/dumps/ksh_generic_05.dump | 20 +++ .../syntax/testdir/dumps/ksh_generic_06.dump | 20 +++ .../{sh_10_01.dump => ksh_generic_07.dump} | 22 +-- .../syntax/testdir/dumps/ksh_generic_08.dump | 20 +++ .../syntax/testdir/dumps/ksh_generic_09.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_00.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_01.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_02.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_03.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_04.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_05.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_06.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_07.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_08.dump | 20 +++ runtime/syntax/testdir/dumps/mksh_09.dump | 20 +++ runtime/syntax/testdir/dumps/sh_02_01.dump | 2 +- runtime/syntax/testdir/dumps/sh_05_00.dump | 2 +- runtime/syntax/testdir/dumps/sh_05_01.dump | 4 +- runtime/syntax/testdir/dumps/sh_05_02.dump | 4 +- runtime/syntax/testdir/dumps/sh_06_00.dump | 2 +- runtime/syntax/testdir/dumps/sh_08_00.dump | 4 +- runtime/syntax/testdir/dumps/sh_08_01.dump | 4 +- runtime/syntax/testdir/dumps/sh_08_02.dump | 4 +- runtime/syntax/testdir/dumps/sh_08_03.dump | 4 +- runtime/syntax/testdir/dumps/sh_09_00.dump | 28 ++-- runtime/syntax/testdir/dumps/sh_10_02.dump | 20 --- .../testdir/dumps/sh_bash_sundrous_00.dump | 20 +++ .../testdir/dumps/sh_bash_sundrous_01.dump | 20 +++ .../testdir/dumps/sh_bash_sundrous_02.dump | 20 +++ .../testdir/dumps/sh_bash_sundrous_03.dump | 20 +++ runtime/syntax/testdir/input/ksh2020.ksh | 146 +++++++++++++++++ runtime/syntax/testdir/input/ksh88.ksh | 146 +++++++++++++++++ .../syntax/testdir/input/ksh93_generic.ksh | 146 +++++++++++++++++ runtime/syntax/testdir/input/ksh93u.ksh | 146 +++++++++++++++++ runtime/syntax/testdir/input/ksh93v.ksh | 146 +++++++++++++++++ runtime/syntax/testdir/input/ksh_generic.ksh | 146 +++++++++++++++++ runtime/syntax/testdir/input/mksh.ksh | 146 +++++++++++++++++ runtime/syntax/testdir/input/sh_10.sh | 49 ------ .../testdir/input/sh_bash_sundrous.bash | 57 +++++++ 96 files changed, 2695 insertions(+), 150 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/ksh2020_00.dump create mode 100644 runtime/syntax/testdir/dumps/ksh2020_01.dump create mode 100644 runtime/syntax/testdir/dumps/ksh2020_02.dump create mode 100644 runtime/syntax/testdir/dumps/ksh2020_03.dump create mode 100644 runtime/syntax/testdir/dumps/ksh2020_04.dump create mode 100644 runtime/syntax/testdir/dumps/ksh2020_05.dump rename runtime/syntax/testdir/dumps/{sh_10_00.dump => ksh2020_06.dump} (64%) create mode 100644 runtime/syntax/testdir/dumps/ksh2020_07.dump create mode 100644 runtime/syntax/testdir/dumps/ksh2020_08.dump create mode 100644 runtime/syntax/testdir/dumps/ksh2020_09.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_00.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_01.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_02.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_03.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_04.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_05.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_06.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_07.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_08.dump create mode 100644 runtime/syntax/testdir/dumps/ksh88_09.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_00.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_01.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_02.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_03.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_04.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_05.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_06.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_07.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_08.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93_generic_09.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_00.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_01.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_02.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_03.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_04.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_05.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_06.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_07.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_08.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93u_09.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_00.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_01.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_02.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_03.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_04.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_05.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_06.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_07.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_08.dump create mode 100644 runtime/syntax/testdir/dumps/ksh93v_09.dump create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_00.dump create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_01.dump create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_02.dump create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_03.dump create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_04.dump create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_05.dump create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_06.dump rename runtime/syntax/testdir/dumps/{sh_10_01.dump => ksh_generic_07.dump} (53%) create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_08.dump create mode 100644 runtime/syntax/testdir/dumps/ksh_generic_09.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_00.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_01.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_02.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_03.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_04.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_05.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_06.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_07.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_08.dump create mode 100644 runtime/syntax/testdir/dumps/mksh_09.dump delete mode 100644 runtime/syntax/testdir/dumps/sh_10_02.dump create mode 100644 runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump create mode 100644 runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump create mode 100644 runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump create mode 100644 runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump create mode 100644 runtime/syntax/testdir/input/ksh2020.ksh create mode 100644 runtime/syntax/testdir/input/ksh88.ksh create mode 100644 runtime/syntax/testdir/input/ksh93_generic.ksh create mode 100644 runtime/syntax/testdir/input/ksh93u.ksh create mode 100644 runtime/syntax/testdir/input/ksh93v.ksh create mode 100644 runtime/syntax/testdir/input/ksh_generic.ksh create mode 100644 runtime/syntax/testdir/input/mksh.ksh delete mode 100644 runtime/syntax/testdir/input/sh_10.sh create mode 100644 runtime/syntax/testdir/input/sh_bash_sundrous.bash diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index f2c03c4676..513fdac7a5 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2025 May 17 +*syntax.txt* For Vim version 9.1. Last change: 2025 May 21 VIM REFERENCE MANUAL by Bram Moolenaar @@ -3553,6 +3553,10 @@ variables in your <.vimrc>: < sh: Bourne shell > let g:is_sh = 1 +Specific shell features are automatically enabled based on the shell detected +from the shebang line ("#! ..."). For KornShell Vim detects different shell +features for mksh, ksh88, ksh93, ksh93u, ksh93v, and ksh2020. + If there's no "#! ..." line, and the user hasn't availed himself/herself of a default sh.vim syntax setting as just shown, then syntax/sh.vim will assume the POSIX shell syntax. No need to quote RFCs or market penetration diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim index b0e02b9813..68d43a3118 100644 --- a/runtime/syntax/sh.vim +++ b/runtime/syntax/sh.vim @@ -14,6 +14,7 @@ " 2025 May 06 improve single-quote string matching in parameter expansions " 2025 May 06 match KornShell compound arrays " 2025 May 10 improve wildcard character class lists +" 2025 May 21 improve supported KornShell features " Version: 208 " Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH " For options and settings, please use: :help ft-sh-syntax @@ -31,7 +32,32 @@ let b:is_sh = 1 let s:shebang = getline(1) if s:shebang =~ '^#!.\{-2,}\' + " The binary is too ambiguous (i.e. '/bin/ksh' or some such). let b:is_kornshell = 1 + let b:generic_korn = 1 +elseif s:shebang =~ '^#!.\{-2,}\' + " ksh93u+ (or 93u-) release (still much too common to encounter) + let b:is_kornshell = 1 + let b:is_ksh93u = 1 +elseif s:shebang =~ '^#!.\{-2,}\' + " ksh93v- alpha or beta + let b:is_kornshell = 1 + let b:is_ksh93v = 1 +elseif s:shebang =~ '^#!.\{-2,}\' + " Could be any ksh93 release + let b:is_kornshell = 1 + let b:is_ksh93 = 1 +elseif s:shebang =~ '^#!.\{-2,}\' + let b:is_kornshell = 1 + let b:is_ksh2020 = 1 +elseif s:shebang =~ '^#!.\{-2,}\' + " The actual AT&T ksh88 and its feature set is assumed. + let b:is_kornshell = 1 + let b:is_ksh88 = 1 +elseif s:shebang =~ '^#!.\{-2,}\' + " MirBSD Korn Shell + let b:is_kornshell = 1 + let b:is_mksh = 1 elseif s:shebang =~ '^#!.\{-2,}\' let b:is_bash = 1 elseif s:shebang =~ '^#!.\{-2,}\' @@ -46,6 +72,7 @@ elseif s:shebang =~ '^#!.\{-2,}\' elseif !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_posix") && !exists("b:is_dash") if exists("g:is_kornshell") let b:is_kornshell= 1 + let b:generic_korn = 1 elseif exists("g:is_bash") let b:is_bash= 1 elseif exists("g:is_dash") @@ -64,8 +91,33 @@ elseif !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_posix" elseif executable("/usr/bin/sh") let s:shell = resolve("/usr/bin/sh") endif - if s:shell =~ '\' - let b:is_kornshell= 1 + if s:shell =~ '\' + " The binary is too ambiguous (i.e. '/bin/ksh' or some such). + let b:is_kornshell = 1 + let b:generic_korn = 1 + elseif s:shell =~ '\' + " ksh93u+ (or 93u-) release (still much too common to encounter) + let b:is_kornshell = 1 + let b:is_ksh93u = 1 + elseif s:shell =~ '\' + " ksh93v- alpha or beta + let b:is_kornshell = 1 + let b:is_ksh93v = 1 + elseif s:shell =~ '\' + " Could be any ksh93 release + let b:is_kornshell = 1 + let b:is_ksh93 = 1 + elseif s:shebang =~ '\' + let b:is_kornshell = 1 + let b:is_ksh2020 = 1 + elseif s:shell =~ '\' + " The actual AT&T ksh88 and its feature set is assumed. + let b:is_kornshell = 1 + let b:is_ksh88 = 1 + elseif s:shell =~ '\' + " MirBSD Korn Shell + let b:is_kornshell = 1 + let b:is_mksh = 1 elseif s:shell =~ '\' let b:is_bash = 1 elseif s:shell =~ '\' @@ -234,7 +286,7 @@ syn cluster shForList contains=shTestOpr,shNumber,shDerefSimple,shDeref,shComman " Echo: {{{1 " ==== " This one is needed INSIDE a CommandSub, so that `echo bla` be correct -if exists("b:is_kornshell") +if (exists("b:is_kornshell") && !exists("b:is_ksh88")) syn region shEcho matchgroup=shStatement start="\" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`}]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 end="\ze[ \t\n;]}" contains=@shEchoList skipwhite nextgroup=shQuickComment syn region shEcho matchgroup=shStatement start="\" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`}]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 end="\ze[ \t\n;]}" contains=@shEchoList skipwhite nextgroup=shQuickComment else @@ -359,7 +411,7 @@ syn match shComma contained "," syn match shCaseBar contained skipwhite "\(^\|[^\\]\)\(\\\\\)*\zs|" nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote syn match shCaseStart contained skipwhite skipnl "(" nextgroup=shCase,shCaseBar syn match shCaseLabel contained skipwhite "\%(\\.\|[-a-zA-Z0-9_*.]\)\+" contains=shBracketExpr -if exists("b:is_bash") +if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_ksh93u") && !exists("b:is_ksh93v") && !exists("b:is_ksh2020")) ShFoldIfDoFor syn region shCase contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)" end=";;" end=";&" end=";;&" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment elseif exists("b:is_kornshell") ShFoldIfDoFor syn region shCase contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)" end=";;" end=";&" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment @@ -369,7 +421,7 @@ endif ShFoldIfDoFor syn region shCaseEsac matchgroup=shConditional start="\" end="\" contains=@shCaseEsacList syn keyword shCaseIn contained skipwhite skipnl in nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote -if exists("b:is_bash") || exists("b:is_kornshell") +if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88")) syn region shCaseExSingleQuote matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial,shSpecial skipwhite skipnl nextgroup=shCaseBar contained elseif !exists("g:sh_no_error") syn region shCaseExSingleQuote matchgroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial skipwhite skipnl nextgroup=shCaseBar contained @@ -403,8 +455,16 @@ syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' nextgroup=shComment if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix") syn region shCommandSub matchgroup=shCmdSubRegion start="\$((\@!" skip='\\\\\|\\.' end=")" contains=@shCommandSubList if exists("b:is_kornshell") - syn region shSubshare matchgroup=shCmdSubRegion start="\${\ze[ \t\n<]" skip='\\\\\|\\.' end="\zs[ \t\n;]}" contains=@shCommandSubList - syn region shValsub matchgroup=shCmdSubRegion start="\${|" skip='\\\\\|\\.' end="}" contains=@shCommandSubList + if !exists("b:is_ksh88") + if exists("b:is_mksh") + syn region shSubshare matchgroup=shCmdSubRegion start="\${\ze[ \t\n]" skip='\\\\\|\\.' end="\zs[ \t\n;]}" contains=@shCommandSubList + else + syn region shSubshare matchgroup=shCmdSubRegion start="\${\ze[ \t\n<]" skip='\\\\\|\\.' end="\zs[ \t\n;]}" contains=@shCommandSubList + endif + endif + if exists("b:is_mksh") || exists("b:generic_korn") + syn region shValsub matchgroup=shCmdSubRegion start="\${|" skip='\\\\\|\\.' end="}" contains=@shCommandSubList + endif endif syn region shArithmetic matchgroup=shArithRegion start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList syn region shArithmetic matchgroup=shArithRegion start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList @@ -419,17 +479,39 @@ if exists("b:is_bash") syn cluster shCommandSubList add=bashSpecialVariables,bashStatement syn cluster shCaseList add=bashAdminStatement,bashStatement syn keyword bashSpecialVariables contained auto_resume BASH BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_LINENO BASHOPTS BASHPID BASH_REMATCH BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD CDPATH COLUMNS COMP_CWORD COMP_KEY COMP_LINE COMP_POINT COMPREPLY COMP_TYPE COMP_WORDBREAKS COMP_WORDS COPROC COPROC_PID DIRSTACK EMACS ENV EUID FCEDIT FIGNORE FUNCNAME FUNCNEST GLOBIGNORE GROUPS histchars HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LINENO LINES MACHTYPE MAIL MAILCHECK MAILPATH MAPFILE OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS POSIXLY_CORRECT PPID PROMPT_COMMAND PS0 PS1 PS2 PS3 PS4 PWD RANDOM READLINE_LINE READLINE_POINT REPLY SECONDS SHELL SHELLOPTS SHLVL TIMEFORMAT TIMEOUT TMPDIR UID - syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep head less ls mkdir mv rm rmdir rpm sed sleep sort strip tail + syn keyword bashStatement basename cat chgrp chmod chown cksum clear cmp comm command compgen complete cp cut date dirname du egrep expr fgrep find fmt fold getconf gnufind gnugrep grep head iconv id join less ln logname ls md5sum mkdir mkfifo mknod mktemp mv od paste pathchk readlink realpath rev rm rmdir rpm sed sha1sum sha224sum sha256sum sha384sum sha512sum sleep sort strip stty sum sync tail tee tr tty uname uniq wc which xargs xgrep syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop - syn keyword bashStatement command compgen endif if exists("b:is_kornshell") || exists("b:is_posix") syn cluster shCommandSubList add=kshSpecialVariables,kshStatement syn cluster shCaseList add=kshStatement - syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV ERRNO FCEDIT FPATH HISTFILE HISTSIZE HOME IFS LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL TMOUT VISUAL - syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep head killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail tput - syn keyword kshStatement command setgroups setsenv + syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV FCEDIT FIGNORE FPATH HISTCMD HISTEDIT HISTFILE HISTSIZE HOME IFS JOBMAX KSH_VERSION LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_TIME LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL SHLVL TMOUT VISUAL + syn keyword kshStatement basename cat chgrp chmod chown cksum clear cmp comm command cp cut date dirname du egrep expr fgrep find fmt fold grep head iconv id join killall less ln logname ls md5sum mkdir mknod mkfifo mktemp mv nice od paste pathchk printenv readlink realpath rev rm rmdir sed setgroups setsenv sha1sum sha224sum sha256sum sha384sum sha512sum sort strip stty sum sync tail tee tput tr tty uname uniq wc which xargs xgrep + if exists("b:is_ksh88") + syn keyword kshSpecialVariables contained ERRNO + elseif exists("b:is_mksh") + syn keyword kshSpecialVariables contained BASHPID EPOCHREALTIME EXECSHELL KSHEGID KSHGID KSHUID KSH_MATCH PATHSEP PGRP PIPESTATUS TMPDIR USER_ID + syn keyword kshStatement bind rename + elseif exists("b:is_ksh93v") || exists("b:is_ksh2020") + syn keyword kshSpecialVariables contained SH_OPTIONS COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS COMP_KEY COMPREPLY COMP_WORDBREAKS COMP_TYPE + syn keyword kshStatement compgen complete + if exists("b:is_ksh93v") + syn keyword kshSpecialVariables contained VPATH CSWIDTH + syn keyword kshStatement vmstate alarm fds pids poll sha2sum + endif + elseif exists("b:is_ksh93u") + " ksh93u+ + syn keyword kshSpecialVariables contained VPATH CSWIDTH + syn keyword kshStatement alarm fds pids vmstate + else + " 'ksh' is ambiguous; include everything + syn keyword kshSpecialVariables contained BASHPID EPOCHREALTIME EXECSHELL KSHEGID KSHGID KSHUID KSH_MATCH PATHSEP PGRP PIPESTATUS TMPDIR USER_ID SH_OPTIONS COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS COMP_KEY COMPREPLY COMP_WORDBREAKS COMP_TYPE VPATH SRANDOM CSWIDTH + if !exists("b:is_ksh93") + syn keyword kshSpecialVariables contained ERRNO + endif + syn keyword kshStatement vmstate alarm fds pids poll sha2sum alarm eloop fds mkservice pids compgen complete bind rename + endif endif syn match shSource "^\.\s" @@ -504,8 +586,8 @@ ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc16 start="<<-\s*\\\_$\_s* " Here Strings: {{{1 " ============= -" available for: bash; ksh (really should be ksh93 only) but not if its a posix -if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_posix")) +" available for: bash and ksh (except ksh88) but not if its a posix +if exists("b:is_bash") || ((exists("b:is_kornshell") && !exists("b:is_ksh88")) && !exists("b:is_posix")) syn match shHereString "<<<" skipwhite nextgroup=shCmdParenRegion endif @@ -518,7 +600,7 @@ if exists("b:is_bash") syn region shArrayValue contained start="\[\%(..\{-}\]=\)\@=" end="\]=\@=" contains=@shArrayValueList nextgroup=shVarAssign syn cluster shArrayValueList contains=shArithmetic,shArithParen,shCommandSub,shDeref,shDerefSimple,shExpr,shNumber,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shSpecial,shParen,bashSpecialVariables,shParenError syn region shArrayRegion contained matchgroup=shShellVariables start="(" skip='\\\\\|\\.' end=")" contains=@shArrayValueList,shArrayValue,shComment -elseif exists("b:is_kornshell") +elseif (exists("b:is_kornshell") && !exists("b:is_ksh88")) " The subscript form for array values, e.g. "foo=([2]=10 [4]=100)". syn region shArrayValue contained start="\[\%(..\{-}\]=\)\@=" end="\]=\@=" contains=@shArrayValueList nextgroup=shVarAssign syn cluster shArrayValueList contains=shArithmetic,shArithParen,shCommandSub,shDeref,shDerefSimple,shExpr,shNumber,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shSpecial,shParen,kshSpecialVariables,shParenError @@ -548,7 +630,7 @@ else endif " KornShell namespace: {{{1 -if exists("b:is_kornshell") +if exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh") syn keyword shFunctionKey namespace skipwhite skipnl nextgroup=shFunctionTwo endif @@ -578,8 +660,14 @@ if !exists("g:sh_no_error") syn match shDerefWordError "[^}$[~]" contained endif syn match shDerefSimple "\$\%(\h\w*\|\d\)" nextgroup=@shNoZSList -if exists("b:is_kornshell") - syn region shDeref matchgroup=PreProc start="\${\ze[^ \t\n<|]" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart +if exists("b:is_kornshell") && !exists("b:is_ksh88") + if exists("b:is_mksh") + syn region shDeref matchgroup=PreProc start="\${\ze[^ \t\n|]" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart + elseif exists("b:generic_korn") + syn region shDeref matchgroup=PreProc start="\${\ze[^ \t\n<|]" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart + else + syn region shDeref matchgroup=PreProc start="\${\ze[^ \t\n<]" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart + endif else syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart endif @@ -593,13 +681,14 @@ endif " ksh: ${.sh.*} variables: {{{1 " ======================================== -if exists("b:is_kornshell") +if exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh") syn match shDerefVar contained "\.\+" nextgroup=@shDerefVarList + syn region shDeref matchgroup=PreProc start="\${\ze[\.]" end="}" contains=@shDerefVarList,shDerefPSR,shDerefPPS endif " ksh: ${!var[*]} array index list syntax: {{{1 " ======================================== -if exists("b:is_kornshell") || exists("b:is_posix") +if (exists("b:is_kornshell") && !exists("b:is_ksh88")) || exists("b:is_posix") syn region shDeref matchgroup=PreProc start="\${!" end="}" contains=@shDerefVarArray endif @@ -609,7 +698,7 @@ if exists("b:is_bash") syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOffset syn match shDerefVar contained "{\@<=!\h\w*" nextgroup=@shDerefVarList endif -if exists("b:is_kornshell") +if (exists("b:is_kornshell") && !exists("b:is_ksh88")) syn match shDerefVar contained "{\@<=!\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList endif @@ -633,10 +722,10 @@ syn region shDerefVarArray contained matchgroup=shDeref start="\[" end="]" co " ksh bash : ${parameter##pattern} remove large left pattern " ksh bash : ${parameter%pattern} remove small right pattern " ksh bash : ${parameter%%pattern} remove large right pattern -" bash : ${parameter^pattern} Case modification -" bash : ${parameter^^pattern} Case modification -" bash : ${parameter,pattern} Case modification -" bash : ${parameter,,pattern} Case modification +" ksh bash : ${parameter^pattern} Case modification +" ksh bash : ${parameter^^pattern} Case modification +" ksh bash : ${parameter,pattern} Case modification +" ksh bash : ${parameter,,pattern} Case modification " bash : ${@:start:qty} display command line arguments from start to start+qty-1 (inferred) " bash : ${parameter@operator} transforms parameter (operator∈[uULqEPARa]) syn cluster shDerefPatternList contains=shDerefPattern,shDerefString @@ -655,15 +744,17 @@ if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix") call s:GenerateBracketExpressionItems({'itemGroup': 'shDerefPattern', 'bracketGroup': 'shBracketExprDelim', 'extraArgs': 'contained nextgroup=shDerefPattern'}) syn match shDerefEscape contained '\%(\\\\\)*\\.' endif -if exists("b:is_bash") +if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh") && !exists("b:is_ksh93u") && !exists("b:is_ksh2020")) syn match shDerefOp contained "[,^]\{1,2}" nextgroup=@shDerefPatternList +endif +if exists("b:is_bash") syn match shDerefOp contained "@[uULQEPAKa]" endif syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\\)\@#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|2|0|2|0| +0#0000000&@60 +@75 +|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|} +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255& +@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o +|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^@1|}| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,@1|}| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 +|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh2020_01.dump b/runtime/syntax/testdir/dumps/ksh2020_01.dump new file mode 100644 index 0000000000..1490d8bd30 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh2020_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^@1|}| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,@1|}| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 +>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n +|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e +|n|t|,| +0#0000000&@71 +|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a +|t|i|o|n| +0#0000000&@70 +|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46 +|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24 +|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f|d|s| |p|i|d|s| @58 +|f|d|s|;| |p|i|d|s| @65 +@75 +|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7 +|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66 +@57|1|4|,|1| @10|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh2020_02.dump b/runtime/syntax/testdir/dumps/ksh2020_02.dump new file mode 100644 index 0000000000..d8825d327c --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh2020_02.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66 +|c+0#af5f00255&|a|t| +0#0000000&@71 +|c+0#af5f00255&|h|g|r|p| +0#0000000&@69 +|c+0#af5f00255&|h|m|o|d| +0#0000000&@69 +|c+0#af5f00255&|h|o|w|n| +0#0000000&@69 +>c+0#af5f00255&|k|s|u|m| +0#0000000&@69 +|c+0#af5f00255&|m|p| +0#0000000&@71 +|c+0#af5f00255&|o|m@1| +0#0000000&@70 +|c+0#af5f00255&|p| +0#0000000&@72 +|c+0#af5f00255&|u|t| +0#0000000&@71 +|d+0#af5f00255&|a|t|e| +0#0000000&@70 +|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67 +|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|g+0#af5f00255&|r|e|p| +0#0000000&@70 +@57|2|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh2020_03.dump b/runtime/syntax/testdir/dumps/ksh2020_03.dump new file mode 100644 index 0000000000..f166483c49 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh2020_03.dump @@ -0,0 +1,20 @@ +|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70 +|h+0#af5f00255&|e|a|d| +0#0000000&@70 +|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|i+0#af5f00255&|d| +0#0000000&@72 +|j+0#af5f00255&|o|i|n| +0#0000000&@70 +>l+0#af5f00255&|n| +0#0000000&@72 +|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67 +|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68 +|m+0#af5f00255&|k|d|i|r| +0#0000000&@69 +|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68 +|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68 +|m+0#af5f00255&|v| +0#0000000&@72 +|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|p+0#af5f00255&|a|s|t|e| +0#0000000&@69 +|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67 +|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|v| +0#0000000&@71 +@57|4|7|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/ksh2020_04.dump b/runtime/syntax/testdir/dumps/ksh2020_04.dump new file mode 100644 index 0000000000..4dd849b940 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh2020_04.dump @@ -0,0 +1,20 @@ +|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71 +|r+0#af5f00255&|m| +0#0000000&@72 +|r+0#af5f00255&|m|d|i|r| +0#0000000&@69 +|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +>s|h|a|2|s|u|m| @8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|t@1|y| +0#0000000&@70 +|s+0#af5f00255&|u|m| +0#0000000&@71 +|s+0#af5f00255&|y|n|c| +0#0000000&@70 +|t+0#af5f00255&|a|i|l| +0#0000000&@70 +|t+0#af5f00255&|e@1| +0#0000000&@71 +|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|t+0#af5f00255&@1|y| +0#0000000&@71 +|u+0#af5f00255&|n|a|m|e| +0#0000000&@69 +|u+0#af5f00255&|n|i|q| +0#0000000&@70 +|v|m|s|t|a|t|e| @8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11 +|w+0#af5f00255&|c| +0#0000000&@72 +@57|6|5|,|1| @9|4|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh2020_05.dump b/runtime/syntax/testdir/dumps/ksh2020_05.dump new file mode 100644 index 0000000000..ba9f354d57 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh2020_05.dump @@ -0,0 +1,20 @@ +|w+0#af5f00255#ffffff0|c| +0#0000000&@72 +|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +@75 +|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000& +>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65 +@75 +|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53 +|p|o|l@1| |-+0#e000e06&@1|m|a|n| +0#0000000&@64 +@75 +|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9 +|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45 +@75 +|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54 +|b|i|n|d|;| |r|e|n|a|m|e| @62 +@75 +|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43 +|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65 +@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@57|8|3|,|1| @9|6|0|%| diff --git a/runtime/syntax/testdir/dumps/sh_10_00.dump b/runtime/syntax/testdir/dumps/ksh2020_06.dump similarity index 64% rename from runtime/syntax/testdir/dumps/sh_10_00.dump rename to runtime/syntax/testdir/dumps/ksh2020_06.dump index b0c98eab4c..65bd846477 100644 --- a/runtime/syntax/testdir/dumps/sh_10_00.dump +++ b/runtime/syntax/testdir/dumps/ksh2020_06.dump @@ -1,11 +1,9 @@ ->#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64 +| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&+0#0000000&| @42 +@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48 +|e+0#af5f00255&|s|a|c| +0#0000000&@70 @75 -|#+0#0000e05&| |T|h|i|s| |s|c|r|i|p|t| |i|s| |a| |t|e|s|t| |f|i|l|e| |f|o|r| |k|s|h|9|3| |s|h|a|r|e|d|-|s|t|a|t|e| +0#0000000&@23 -|#+0#0000e05&| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|s|u|b|s|h|a|r|e|s|)| |a|n|d| |m|k|s|h| |v|a|l|u|e| +0#0000000&@24 -|#+0#0000e05&| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|v|a|l|s|u|b|s|)|.| +0#0000000&@48 -@75 -|#+0#0000e05&| |=@5| +0#0000000&@66 -|#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14 +>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14 |p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55 |p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50 |}+0#e000e06&| +0#0000000&@73 @@ -17,4 +15,6 @@ |}+0#e000e06&| +0#0000000&@73 |p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41 |e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49 -|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p| +|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52 +@75 +@57|1|0|1|,|1| @8|7|4|%| diff --git a/runtime/syntax/testdir/dumps/ksh2020_07.dump b/runtime/syntax/testdir/dumps/ksh2020_07.dump new file mode 100644 index 0000000000..f4c2f4d0fb --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh2020_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20 +|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43 +|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9 +| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52 +@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50 +@8|}+0#00e0e07&| +0#0000000&@65 +@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43 +@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36 +@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24 +@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@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&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +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&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54 +@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55 +|}+0#e000e06&| +0#0000000&@73 +|f+0#af5f00255&|i| +0#0000000&@72 +@75 +@57|1@1|9|,|3|-|1|7| @5|8@1|%| diff --git a/runtime/syntax/testdir/dumps/ksh2020_08.dump b/runtime/syntax/testdir/dumps/ksh2020_08.dump new file mode 100644 index 0000000000..cdb01e16be --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh2020_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+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 +|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|R|A|N|D|O|M|=+0#0000000&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_ +|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N +|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06& +|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C +|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M +|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|@+0#4040ff13&@2 +| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh2020_09.dump b/runtime/syntax/testdir/dumps/ksh2020_09.dump new file mode 100644 index 0000000000..98e266ce7f --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh2020_09.dump @@ -0,0 +1,20 @@ +|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M +|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|B +|R|E|A|K|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|g|e|n|)+0#e000e06&| +0#0000000&@48 +>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B+0#00e0e07&|A|S|H|P|I|D|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|P|O|C|H|R|E|A|L|T|I|M|E|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|X|E|C|S|H|E|L@1|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|E|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|U|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|_|M|A|T +|C|H|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|A|T|H|S|E|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|G|R|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|I|P|E|S|T|A|T|U|S|=+0#0000000&| +0#e000e06&|T+0#00e0e07&|M|P|D|I|R|=+0#0000000&| +0#e000e06&|U+0#00e0e07&|S|E|R|_|I|D|=+0#0000000&| +0#e000e06&|V+0#00e0e07&|P|A|T|H|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|S|W|I|D|T|H|=+0#0000000&| +0#e000e06&|c+0#af5f00255&|o|m|p|l|e|t|e|)+0#e000e06&| +0#0000000&@1 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|4|6|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/ksh88_00.dump b/runtime/syntax/testdir/dumps/ksh88_00.dump new file mode 100644 index 0000000000..ad36df0588 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|8@1| +0#0000000&@62 +@75 +|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|} +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|[+0#e000e06#ffffff0|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|# +@1|b|a|z|}+0#e000e06#ffffff0| +0#0000000&@69 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#ffffff16#ff404010|V|/|b|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o +|n|/|V|/|b|}+0#e000e06#ffffff0| +0#0000000&@68 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|%|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|#|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#ffffff16#ff404010|%|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#ffffff16#ff404010|#|b|a|r|/ +|f|o@1|}+0#e000e06#ffffff0| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|/|%|b|a|r|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|/|#|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|b|a|r|.|f|o@1|/|%|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|b|a|r|/|#|b|a|r|/ +|f|o@1|}+0#e000e06#ffffff0| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|%|b|a|r|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#ffffff16#ff404010@1|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#ffffff16#ff404010|#|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|^@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|,@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 +|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh88_01.dump b/runtime/syntax/testdir/dumps/ksh88_01.dump new file mode 100644 index 0000000000..2691a5ae15 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|%|b|a|r|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#ffffff16#ff404010@1|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#ffffff16#ff404010|#|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|^@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|,@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 +>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n +|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e +|n|t|,| +0#0000000&@71 +|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a +|t|i|o|n| +0#0000000&@70 +|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46 +|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24 +|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f|d|s| |p|i|d|s| @58 +|f|d|s|;| |p|i|d|s| @65 +@75 +|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7 +|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66 +@57|1|4|,|1| @10|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh88_02.dump b/runtime/syntax/testdir/dumps/ksh88_02.dump new file mode 100644 index 0000000000..d8825d327c --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_02.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66 +|c+0#af5f00255&|a|t| +0#0000000&@71 +|c+0#af5f00255&|h|g|r|p| +0#0000000&@69 +|c+0#af5f00255&|h|m|o|d| +0#0000000&@69 +|c+0#af5f00255&|h|o|w|n| +0#0000000&@69 +>c+0#af5f00255&|k|s|u|m| +0#0000000&@69 +|c+0#af5f00255&|m|p| +0#0000000&@71 +|c+0#af5f00255&|o|m@1| +0#0000000&@70 +|c+0#af5f00255&|p| +0#0000000&@72 +|c+0#af5f00255&|u|t| +0#0000000&@71 +|d+0#af5f00255&|a|t|e| +0#0000000&@70 +|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67 +|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|g+0#af5f00255&|r|e|p| +0#0000000&@70 +@57|2|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh88_03.dump b/runtime/syntax/testdir/dumps/ksh88_03.dump new file mode 100644 index 0000000000..f166483c49 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_03.dump @@ -0,0 +1,20 @@ +|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70 +|h+0#af5f00255&|e|a|d| +0#0000000&@70 +|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|i+0#af5f00255&|d| +0#0000000&@72 +|j+0#af5f00255&|o|i|n| +0#0000000&@70 +>l+0#af5f00255&|n| +0#0000000&@72 +|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67 +|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68 +|m+0#af5f00255&|k|d|i|r| +0#0000000&@69 +|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68 +|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68 +|m+0#af5f00255&|v| +0#0000000&@72 +|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|p+0#af5f00255&|a|s|t|e| +0#0000000&@69 +|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67 +|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|v| +0#0000000&@71 +@57|4|7|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/ksh88_04.dump b/runtime/syntax/testdir/dumps/ksh88_04.dump new file mode 100644 index 0000000000..4dd849b940 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_04.dump @@ -0,0 +1,20 @@ +|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71 +|r+0#af5f00255&|m| +0#0000000&@72 +|r+0#af5f00255&|m|d|i|r| +0#0000000&@69 +|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +>s|h|a|2|s|u|m| @8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|t@1|y| +0#0000000&@70 +|s+0#af5f00255&|u|m| +0#0000000&@71 +|s+0#af5f00255&|y|n|c| +0#0000000&@70 +|t+0#af5f00255&|a|i|l| +0#0000000&@70 +|t+0#af5f00255&|e@1| +0#0000000&@71 +|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|t+0#af5f00255&@1|y| +0#0000000&@71 +|u+0#af5f00255&|n|a|m|e| +0#0000000&@69 +|u+0#af5f00255&|n|i|q| +0#0000000&@70 +|v|m|s|t|a|t|e| @8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11 +|w+0#af5f00255&|c| +0#0000000&@72 +@57|6|5|,|1| @9|4|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh88_05.dump b/runtime/syntax/testdir/dumps/ksh88_05.dump new file mode 100644 index 0000000000..95bea149ca --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_05.dump @@ -0,0 +1,20 @@ +|w+0#af5f00255#ffffff0|c| +0#0000000&@72 +|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +@75 +|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000& +>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65 +@75 +|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53 +|p|o|l@1| |-+0#e000e06&@1|m|a|n| +0#0000000&@64 +@75 +|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9 +|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45 +@75 +|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54 +|b|i|n|d|;| |r|e|n|a|m|e| @62 +@75 +|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43 +|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65 +@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#ffffff16#ff404010|1+0#e000e06#ffffff0|}| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@57|8|3|,|1| @9|6|0|%| diff --git a/runtime/syntax/testdir/dumps/ksh88_06.dump b/runtime/syntax/testdir/dumps/ksh88_06.dump new file mode 100644 index 0000000000..efb51995c0 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#ffffff16#ff404010|1+0#e000e06#ffffff0|}| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#ffffff16#ff404010|0+0#e000e06#ffffff0|:+0#ffffff16#ff404010|0+0#e000e06#ffffff0|}| +0#0000000&|;+0#af5f00255&@1|&+0#0000000&| @42 +@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48 +|e+0#af5f00255&|s|a|c| +0#0000000&@70 +@75 +>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|e|c|h|o| |o|n|e| |}+0#e000e06#ffffff0| +0#0000000&@55 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010@7|e|c|h|o| |t|w|o| +0#0000000#ffffff0@50 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#0000000&@66 +|e+0#ffffff16#ff404010|c|h|o| |t|h|r|e@1| @5|}+0#e000e06#ffffff0| +0#0000000&@57 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|e|c|h|o| |'|f|o|u|r|'|;| |}+0#e000e06#ffffff0| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|e|c|h|o| |'|f|i|v|e|'| |;|}+0#e000e06#ffffff0| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|e|c|h|o| |'|s|i|x|'| +0#0000000#ffffff0@55 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010@7|e|c|h|o| |'|s|e|v|e|n|'| @3|}+0#e000e06#ffffff0| +0#0000000&@41 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|p|r|i|n|t| |'|e|i|g|h|t|'| @2|}+0#e000e06#ffffff0| +0#0000000&@49 +|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| +0#ffffff16#ff404010|p|w|d|;| |}+0#e000e06#ffffff0| +0#0000000&@52 +@75 +@57|1|0|1|,|1| @8|7|4|%| diff --git a/runtime/syntax/testdir/dumps/ksh88_07.dump b/runtime/syntax/testdir/dumps/ksh88_07.dump new file mode 100644 index 0000000000..f4c2f4d0fb --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20 +|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43 +|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9 +| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52 +@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50 +@8|}+0#00e0e07&| +0#0000000&@65 +@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43 +@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36 +@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24 +@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@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&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +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&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54 +@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55 +|}+0#e000e06&| +0#0000000&@73 +|f+0#af5f00255&|i| +0#0000000&@72 +@75 +@57|1@1|9|,|3|-|1|7| @5|8@1|%| diff --git a/runtime/syntax/testdir/dumps/ksh88_08.dump b/runtime/syntax/testdir/dumps/ksh88_08.dump new file mode 100644 index 0000000000..db8f7489da --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+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#ffffff16#ff404010@7>p|r|i|n|t|f| |%|s| |s|t|r| +0#0000000#ffffff0@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#ffffff16#ff404010|/|t|m|p|/|s|t|r|f|i|l|e|;|}+0#e000e06#ffffff0| +0#0000000&@52 +@75 +|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68 +|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|R|A|N|D|O|M|=| |S|R|A|N|D|O|M|=| |S|H|L|V|L|=| |J|O|B|M|A|X|=| |K|S|H|_|V|E|R|S|I|O|N|=| |F|I|G|N|O|R|E|=| |L|C|_|T|I|M|E|=| |L|C|_ +|N|U|M|E|R|I|C|=| |L|C|_|M|E|S@1|A|G|E|S|=| |L|C|_|C|T|Y|P|E|=| |L|C|_|C|O|L@1|A|T|E|=| |L|C|_|A|L@1|=| |L|A|N|G|=| |F|P|A|T|H|=| |P|S|4+0#e000e06#ffffff0|=+0#af5f00255&| +0#0000000&|O|P|T|I|N +|D|=| |O|P|T|A|R|G|=| |t|r|u|e| |;|}+0#e000e06&| +0#0000000&@56 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06& +|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C +|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E|R@1|N|O|=+0#af5f00255&| +0#e000e06&|C+0#00e0e07&|O|M +|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|@+0#4040ff13&@2 +| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh88_09.dump b/runtime/syntax/testdir/dumps/ksh88_09.dump new file mode 100644 index 0000000000..3906242de0 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh88_09.dump @@ -0,0 +1,20 @@ +|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E|R@1|N|O|=+0#af5f00255&| +0#e000e06&|C+0#00e0e07&|O|M +|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|B +|R|E|A|K|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|T|Y|P|E|=+0#0000000&| +0#e000e06&|c|o|m|p|g|e|n|)| +0#0000000&@48 +>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B+0#00e0e07&|A|S|H|P|I|D|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|P|O|C|H|R|E|A|L|T|I|M|E|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|X|E|C|S|H|E|L@1|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|E|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|U|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|_|M|A|T +|C|H|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|A|T|H|S|E|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|G|R|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|I|P|E|S|T|A|T|U|S|=+0#0000000&| +0#e000e06&|T+0#00e0e07&|M|P|D|I|R|=+0#0000000&| +0#e000e06&|U+0#00e0e07&|S|E|R|_|I|D|=+0#0000000&| +0#e000e06&|V+0#00e0e07&|P|A|T|H|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|S|W|I|D|T|H|=+0#0000000&| +0#e000e06&|c|o|m|p|l|e|t|e|)| +0#0000000&@1 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|4|6|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_00.dump b/runtime/syntax/testdir/dumps/ksh93_generic_00.dump new file mode 100644 index 0000000000..a1a110b9d7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|9|3| +0#0000000&@62 +@75 +|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|} +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255& +@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o +|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 +|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_01.dump b/runtime/syntax/testdir/dumps/ksh93_generic_01.dump new file mode 100644 index 0000000000..53c0db0781 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 +>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n +|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e +|n|t|,| +0#0000000&@71 +|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a +|t|i|o|n| +0#0000000&@70 +|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46 +|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24 +|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f+0#af5f00255&|d|s| +0#0000000&|p+0#af5f00255&|i|d|s| +0#0000000&@58 +|f+0#af5f00255&|d|s|;+0#0000000&| |p+0#af5f00255&|i|d|s| +0#0000000&@65 +@75 +|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7 +|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66 +@57|1|4|,|1| @10|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_02.dump b/runtime/syntax/testdir/dumps/ksh93_generic_02.dump new file mode 100644 index 0000000000..d8825d327c --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_02.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66 +|c+0#af5f00255&|a|t| +0#0000000&@71 +|c+0#af5f00255&|h|g|r|p| +0#0000000&@69 +|c+0#af5f00255&|h|m|o|d| +0#0000000&@69 +|c+0#af5f00255&|h|o|w|n| +0#0000000&@69 +>c+0#af5f00255&|k|s|u|m| +0#0000000&@69 +|c+0#af5f00255&|m|p| +0#0000000&@71 +|c+0#af5f00255&|o|m@1| +0#0000000&@70 +|c+0#af5f00255&|p| +0#0000000&@72 +|c+0#af5f00255&|u|t| +0#0000000&@71 +|d+0#af5f00255&|a|t|e| +0#0000000&@70 +|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67 +|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|g+0#af5f00255&|r|e|p| +0#0000000&@70 +@57|2|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_03.dump b/runtime/syntax/testdir/dumps/ksh93_generic_03.dump new file mode 100644 index 0000000000..f166483c49 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_03.dump @@ -0,0 +1,20 @@ +|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70 +|h+0#af5f00255&|e|a|d| +0#0000000&@70 +|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|i+0#af5f00255&|d| +0#0000000&@72 +|j+0#af5f00255&|o|i|n| +0#0000000&@70 +>l+0#af5f00255&|n| +0#0000000&@72 +|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67 +|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68 +|m+0#af5f00255&|k|d|i|r| +0#0000000&@69 +|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68 +|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68 +|m+0#af5f00255&|v| +0#0000000&@72 +|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|p+0#af5f00255&|a|s|t|e| +0#0000000&@69 +|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67 +|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|v| +0#0000000&@71 +@57|4|7|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_04.dump b/runtime/syntax/testdir/dumps/ksh93_generic_04.dump new file mode 100644 index 0000000000..8ac496abb7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_04.dump @@ -0,0 +1,20 @@ +|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71 +|r+0#af5f00255&|m| +0#0000000&@72 +|r+0#af5f00255&|m|d|i|r| +0#0000000&@69 +|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +>s+0#af5f00255&|h|a|2|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|t@1|y| +0#0000000&@70 +|s+0#af5f00255&|u|m| +0#0000000&@71 +|s+0#af5f00255&|y|n|c| +0#0000000&@70 +|t+0#af5f00255&|a|i|l| +0#0000000&@70 +|t+0#af5f00255&|e@1| +0#0000000&@71 +|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|t+0#af5f00255&@1|y| +0#0000000&@71 +|u+0#af5f00255&|n|a|m|e| +0#0000000&@69 +|u+0#af5f00255&|n|i|q| +0#0000000&@70 +|v+0#af5f00255&|m|s|t|a|t|e| +0#0000000&@8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11 +|w+0#af5f00255&|c| +0#0000000&@72 +@57|6|5|,|1| @9|4|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_05.dump b/runtime/syntax/testdir/dumps/ksh93_generic_05.dump new file mode 100644 index 0000000000..4f4d4c8641 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_05.dump @@ -0,0 +1,20 @@ +|w+0#af5f00255#ffffff0|c| +0#0000000&@72 +|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +@75 +|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000& +>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65 +@75 +|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53 +|p+0#af5f00255&|o|l@1| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@64 +@75 +|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9 +|m+0#af5f00255&|k|s|e|r|v|i|c|e| +0#0000000&|-+0#e000e06&@1|m|a|n|;+0#0000000&| |e+0#af5f00255&|l|o@1|p| +0#0000000&|-+0#e000e06&@1|h|e|l|p| +0#0000000&@45 +@75 +|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54 +|b+0#af5f00255&|i|n|d|;+0#0000000&| |r+0#af5f00255&|e|n|a|m|e| +0#0000000&@62 +@75 +|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43 +|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65 +@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@57|8|3|,|1| @9|6|0|%| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_06.dump b/runtime/syntax/testdir/dumps/ksh93_generic_06.dump new file mode 100644 index 0000000000..31f0b125e8 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&| +0#0000000&@42 +@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48 +|e+0#af5f00255&|s|a|c| +0#0000000&@70 +@75 +>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#0000000&@66 +|e+0#af5f00255&|c|h|o| +0#e000002&|t|h|r|e@1| +0#e000e06&@5|}| +0#0000000&@57 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|o|u|r|'+0#af5f00255&|;| +0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|i|v|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|i|x|'+0#af5f00255&| +0#0000000&@55 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49 +|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52 +@75 +@57|1|0|1|,|1| @8|7|4|%| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_07.dump b/runtime/syntax/testdir/dumps/ksh93_generic_07.dump new file mode 100644 index 0000000000..f4c2f4d0fb --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20 +|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43 +|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9 +| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52 +@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50 +@8|}+0#00e0e07&| +0#0000000&@65 +@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43 +@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36 +@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24 +@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@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&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +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&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54 +@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55 +|}+0#e000e06&| +0#0000000&@73 +|f+0#af5f00255&|i| +0#0000000&@72 +@75 +@57|1@1|9|,|3|-|1|7| @5|8@1|%| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_08.dump b/runtime/syntax/testdir/dumps/ksh93_generic_08.dump new file mode 100644 index 0000000000..057e10d16f --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+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 +|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S|R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_ +|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N +|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06& +|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C +|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M +|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|@+0#4040ff13&@2 +| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_09.dump b/runtime/syntax/testdir/dumps/ksh93_generic_09.dump new file mode 100644 index 0000000000..c457cc0cb9 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93_generic_09.dump @@ -0,0 +1,20 @@ +|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M +|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|B +|R|E|A|K|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|g|e|n|)+0#e000e06&| +0#0000000&@48 +>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B|A|S|H|P|I|D|=+0#af5f00255&| +0#e000e06&|E|P|O|C|H|R|E|A|L|T|I|M|E|=+0#af5f00255&| +0#e000e06&|E|X|E|C|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|K|S|H|E|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|U|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|_|M|A|T +|C|H|=+0#af5f00255&| +0#e000e06&|P|A|T|H|S|E|P|=+0#af5f00255&| +0#e000e06&|P|G|R|P|=+0#af5f00255&| +0#e000e06&|P|I|P|E|S|T|A|T|U|S|=+0#af5f00255&| +0#e000e06&|T|M|P|D|I|R|=+0#af5f00255&| +0#e000e06&|U|S|E|R|_|I|D|=+0#af5f00255&| +0#e000e06&|V|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|S|W|I|D|T|H|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|l|e|t|e|)+0#e000e06&| +0#0000000&@1 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|4|6|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/ksh93u_00.dump b/runtime/syntax/testdir/dumps/ksh93u_00.dump new file mode 100644 index 0000000000..47b1b69c37 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|9|3|u|+| +0#0000000&@60 +@75 +|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|} +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255& +@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o +|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^@1|}| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,@1|}| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 +|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh93u_01.dump b/runtime/syntax/testdir/dumps/ksh93u_01.dump new file mode 100644 index 0000000000..a0e8c19903 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^@1|}| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,@1|}| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 +>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n +|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e +|n|t|,| +0#0000000&@71 +|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a +|t|i|o|n| +0#0000000&@70 +|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46 +|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24 +|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f+0#af5f00255&|d|s| +0#0000000&|p+0#af5f00255&|i|d|s| +0#0000000&@58 +|f+0#af5f00255&|d|s|;+0#0000000&| |p+0#af5f00255&|i|d|s| +0#0000000&@65 +@75 +|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7 +|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66 +@57|1|4|,|1| @10|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh93u_02.dump b/runtime/syntax/testdir/dumps/ksh93u_02.dump new file mode 100644 index 0000000000..d8825d327c --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_02.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66 +|c+0#af5f00255&|a|t| +0#0000000&@71 +|c+0#af5f00255&|h|g|r|p| +0#0000000&@69 +|c+0#af5f00255&|h|m|o|d| +0#0000000&@69 +|c+0#af5f00255&|h|o|w|n| +0#0000000&@69 +>c+0#af5f00255&|k|s|u|m| +0#0000000&@69 +|c+0#af5f00255&|m|p| +0#0000000&@71 +|c+0#af5f00255&|o|m@1| +0#0000000&@70 +|c+0#af5f00255&|p| +0#0000000&@72 +|c+0#af5f00255&|u|t| +0#0000000&@71 +|d+0#af5f00255&|a|t|e| +0#0000000&@70 +|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67 +|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|g+0#af5f00255&|r|e|p| +0#0000000&@70 +@57|2|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh93u_03.dump b/runtime/syntax/testdir/dumps/ksh93u_03.dump new file mode 100644 index 0000000000..f166483c49 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_03.dump @@ -0,0 +1,20 @@ +|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70 +|h+0#af5f00255&|e|a|d| +0#0000000&@70 +|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|i+0#af5f00255&|d| +0#0000000&@72 +|j+0#af5f00255&|o|i|n| +0#0000000&@70 +>l+0#af5f00255&|n| +0#0000000&@72 +|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67 +|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68 +|m+0#af5f00255&|k|d|i|r| +0#0000000&@69 +|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68 +|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68 +|m+0#af5f00255&|v| +0#0000000&@72 +|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|p+0#af5f00255&|a|s|t|e| +0#0000000&@69 +|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67 +|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|v| +0#0000000&@71 +@57|4|7|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/ksh93u_04.dump b/runtime/syntax/testdir/dumps/ksh93u_04.dump new file mode 100644 index 0000000000..62dc32864f --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_04.dump @@ -0,0 +1,20 @@ +|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71 +|r+0#af5f00255&|m| +0#0000000&@72 +|r+0#af5f00255&|m|d|i|r| +0#0000000&@69 +|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +>s|h|a|2|s|u|m| @8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|t@1|y| +0#0000000&@70 +|s+0#af5f00255&|u|m| +0#0000000&@71 +|s+0#af5f00255&|y|n|c| +0#0000000&@70 +|t+0#af5f00255&|a|i|l| +0#0000000&@70 +|t+0#af5f00255&|e@1| +0#0000000&@71 +|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|t+0#af5f00255&@1|y| +0#0000000&@71 +|u+0#af5f00255&|n|a|m|e| +0#0000000&@69 +|u+0#af5f00255&|n|i|q| +0#0000000&@70 +|v+0#af5f00255&|m|s|t|a|t|e| +0#0000000&@8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11 +|w+0#af5f00255&|c| +0#0000000&@72 +@57|6|5|,|1| @9|4|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh93u_05.dump b/runtime/syntax/testdir/dumps/ksh93u_05.dump new file mode 100644 index 0000000000..ba9f354d57 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_05.dump @@ -0,0 +1,20 @@ +|w+0#af5f00255#ffffff0|c| +0#0000000&@72 +|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +@75 +|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000& +>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65 +@75 +|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53 +|p|o|l@1| |-+0#e000e06&@1|m|a|n| +0#0000000&@64 +@75 +|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9 +|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45 +@75 +|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54 +|b|i|n|d|;| |r|e|n|a|m|e| @62 +@75 +|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43 +|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65 +@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@57|8|3|,|1| @9|6|0|%| diff --git a/runtime/syntax/testdir/dumps/ksh93u_06.dump b/runtime/syntax/testdir/dumps/ksh93u_06.dump new file mode 100644 index 0000000000..65bd846477 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&+0#0000000&| @42 +@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48 +|e+0#af5f00255&|s|a|c| +0#0000000&@70 +@75 +>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#0000000&@66 +|e+0#af5f00255&|c|h|o| +0#e000002&|t|h|r|e@1| +0#e000e06&@5|}| +0#0000000&@57 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|o|u|r|'+0#af5f00255&|;| +0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|i|v|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|i|x|'+0#af5f00255&| +0#0000000&@55 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49 +|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52 +@75 +@57|1|0|1|,|1| @8|7|4|%| diff --git a/runtime/syntax/testdir/dumps/ksh93u_07.dump b/runtime/syntax/testdir/dumps/ksh93u_07.dump new file mode 100644 index 0000000000..f4c2f4d0fb --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20 +|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43 +|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9 +| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52 +@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50 +@8|}+0#00e0e07&| +0#0000000&@65 +@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43 +@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36 +@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24 +@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@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&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +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&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54 +@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55 +|}+0#e000e06&| +0#0000000&@73 +|f+0#af5f00255&|i| +0#0000000&@72 +@75 +@57|1@1|9|,|3|-|1|7| @5|8@1|%| diff --git a/runtime/syntax/testdir/dumps/ksh93u_08.dump b/runtime/syntax/testdir/dumps/ksh93u_08.dump new file mode 100644 index 0000000000..604607f067 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+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 +|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|R|A|N|D|O|M|=+0#0000000&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_ +|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N +|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06& +|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C +|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M +|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|@+0#4040ff13&@2 +| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh93u_09.dump b/runtime/syntax/testdir/dumps/ksh93u_09.dump new file mode 100644 index 0000000000..83d3a99ad1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93u_09.dump @@ -0,0 +1,20 @@ +|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M +|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|B +|R|E|A|K|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|T|Y|P|E|=+0#0000000&| +0#e000e06&|c|o|m|p|g|e|n|)| +0#0000000&@48 +>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B+0#00e0e07&|A|S|H|P|I|D|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|P|O|C|H|R|E|A|L|T|I|M|E|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|X|E|C|S|H|E|L@1|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|E|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|U|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|_|M|A|T +|C|H|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|A|T|H|S|E|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|G|R|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|I|P|E|S|T|A|T|U|S|=+0#0000000&| +0#e000e06&|T+0#00e0e07&|M|P|D|I|R|=+0#0000000&| +0#e000e06&|U+0#00e0e07&|S|E|R|_|I|D|=+0#0000000&| +0#e000e06&|V|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|S|W|I|D|T|H|=+0#af5f00255&| +0#e000e06&|c|o|m|p|l|e|t|e|)| +0#0000000&@1 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|4|6|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/ksh93v_00.dump b/runtime/syntax/testdir/dumps/ksh93v_00.dump new file mode 100644 index 0000000000..6c562c057b --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|9|3|v|-| +0#0000000&@60 +@75 +|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|} +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255& +@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o +|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 +|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh93v_01.dump b/runtime/syntax/testdir/dumps/ksh93v_01.dump new file mode 100644 index 0000000000..53c0db0781 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 +>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n +|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e +|n|t|,| +0#0000000&@71 +|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a +|t|i|o|n| +0#0000000&@70 +|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46 +|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24 +|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f+0#af5f00255&|d|s| +0#0000000&|p+0#af5f00255&|i|d|s| +0#0000000&@58 +|f+0#af5f00255&|d|s|;+0#0000000&| |p+0#af5f00255&|i|d|s| +0#0000000&@65 +@75 +|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7 +|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66 +@57|1|4|,|1| @10|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh93v_02.dump b/runtime/syntax/testdir/dumps/ksh93v_02.dump new file mode 100644 index 0000000000..d8825d327c --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_02.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66 +|c+0#af5f00255&|a|t| +0#0000000&@71 +|c+0#af5f00255&|h|g|r|p| +0#0000000&@69 +|c+0#af5f00255&|h|m|o|d| +0#0000000&@69 +|c+0#af5f00255&|h|o|w|n| +0#0000000&@69 +>c+0#af5f00255&|k|s|u|m| +0#0000000&@69 +|c+0#af5f00255&|m|p| +0#0000000&@71 +|c+0#af5f00255&|o|m@1| +0#0000000&@70 +|c+0#af5f00255&|p| +0#0000000&@72 +|c+0#af5f00255&|u|t| +0#0000000&@71 +|d+0#af5f00255&|a|t|e| +0#0000000&@70 +|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67 +|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|g+0#af5f00255&|r|e|p| +0#0000000&@70 +@57|2|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh93v_03.dump b/runtime/syntax/testdir/dumps/ksh93v_03.dump new file mode 100644 index 0000000000..f166483c49 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_03.dump @@ -0,0 +1,20 @@ +|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70 +|h+0#af5f00255&|e|a|d| +0#0000000&@70 +|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|i+0#af5f00255&|d| +0#0000000&@72 +|j+0#af5f00255&|o|i|n| +0#0000000&@70 +>l+0#af5f00255&|n| +0#0000000&@72 +|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67 +|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68 +|m+0#af5f00255&|k|d|i|r| +0#0000000&@69 +|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68 +|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68 +|m+0#af5f00255&|v| +0#0000000&@72 +|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|p+0#af5f00255&|a|s|t|e| +0#0000000&@69 +|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67 +|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|v| +0#0000000&@71 +@57|4|7|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/ksh93v_04.dump b/runtime/syntax/testdir/dumps/ksh93v_04.dump new file mode 100644 index 0000000000..8ac496abb7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_04.dump @@ -0,0 +1,20 @@ +|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71 +|r+0#af5f00255&|m| +0#0000000&@72 +|r+0#af5f00255&|m|d|i|r| +0#0000000&@69 +|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +>s+0#af5f00255&|h|a|2|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|t@1|y| +0#0000000&@70 +|s+0#af5f00255&|u|m| +0#0000000&@71 +|s+0#af5f00255&|y|n|c| +0#0000000&@70 +|t+0#af5f00255&|a|i|l| +0#0000000&@70 +|t+0#af5f00255&|e@1| +0#0000000&@71 +|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|t+0#af5f00255&@1|y| +0#0000000&@71 +|u+0#af5f00255&|n|a|m|e| +0#0000000&@69 +|u+0#af5f00255&|n|i|q| +0#0000000&@70 +|v+0#af5f00255&|m|s|t|a|t|e| +0#0000000&@8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11 +|w+0#af5f00255&|c| +0#0000000&@72 +@57|6|5|,|1| @9|4|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh93v_05.dump b/runtime/syntax/testdir/dumps/ksh93v_05.dump new file mode 100644 index 0000000000..479efcf81f --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_05.dump @@ -0,0 +1,20 @@ +|w+0#af5f00255#ffffff0|c| +0#0000000&@72 +|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +@75 +|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000& +>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65 +@75 +|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53 +|p+0#af5f00255&|o|l@1| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@64 +@75 +|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9 +|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45 +@75 +|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54 +|b|i|n|d|;| |r|e|n|a|m|e| @62 +@75 +|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43 +|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65 +@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@57|8|3|,|1| @9|6|0|%| diff --git a/runtime/syntax/testdir/dumps/ksh93v_06.dump b/runtime/syntax/testdir/dumps/ksh93v_06.dump new file mode 100644 index 0000000000..65bd846477 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&+0#0000000&| @42 +@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48 +|e+0#af5f00255&|s|a|c| +0#0000000&@70 +@75 +>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#0000000&@66 +|e+0#af5f00255&|c|h|o| +0#e000002&|t|h|r|e@1| +0#e000e06&@5|}| +0#0000000&@57 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|o|u|r|'+0#af5f00255&|;| +0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|i|v|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|i|x|'+0#af5f00255&| +0#0000000&@55 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49 +|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52 +@75 +@57|1|0|1|,|1| @8|7|4|%| diff --git a/runtime/syntax/testdir/dumps/ksh93v_07.dump b/runtime/syntax/testdir/dumps/ksh93v_07.dump new file mode 100644 index 0000000000..f4c2f4d0fb --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20 +|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43 +|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9 +| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52 +@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50 +@8|}+0#00e0e07&| +0#0000000&@65 +@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43 +@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36 +@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24 +@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@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&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +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&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54 +@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55 +|}+0#e000e06&| +0#0000000&@73 +|f+0#af5f00255&|i| +0#0000000&@72 +@75 +@57|1@1|9|,|3|-|1|7| @5|8@1|%| diff --git a/runtime/syntax/testdir/dumps/ksh93v_08.dump b/runtime/syntax/testdir/dumps/ksh93v_08.dump new file mode 100644 index 0000000000..cdb01e16be --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+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 +|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|R|A|N|D|O|M|=+0#0000000&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_ +|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N +|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06& +|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C +|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M +|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|@+0#4040ff13&@2 +| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh93v_09.dump b/runtime/syntax/testdir/dumps/ksh93v_09.dump new file mode 100644 index 0000000000..6d21a0929d --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh93v_09.dump @@ -0,0 +1,20 @@ +|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M +|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|B +|R|E|A|K|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|g|e|n|)+0#e000e06&| +0#0000000&@48 +>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B+0#00e0e07&|A|S|H|P|I|D|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|P|O|C|H|R|E|A|L|T|I|M|E|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|X|E|C|S|H|E|L@1|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|E|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|U|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|_|M|A|T +|C|H|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|A|T|H|S|E|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|G|R|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|I|P|E|S|T|A|T|U|S|=+0#0000000&| +0#e000e06&|T+0#00e0e07&|M|P|D|I|R|=+0#0000000&| +0#e000e06&|U+0#00e0e07&|S|E|R|_|I|D|=+0#0000000&| +0#e000e06&|V|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|S|W|I|D|T|H|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|l|e|t|e|)+0#e000e06&| +0#0000000&@1 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|4|6|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_00.dump b/runtime/syntax/testdir/dumps/ksh_generic_00.dump new file mode 100644 index 0000000000..0ce212fea4 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64 +@75 +|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|} +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255& +@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o +|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 +|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_01.dump b/runtime/syntax/testdir/dumps/ksh_generic_01.dump new file mode 100644 index 0000000000..53c0db0781 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 +>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n +|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e +|n|t|,| +0#0000000&@71 +|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a +|t|i|o|n| +0#0000000&@70 +|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46 +|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24 +|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f+0#af5f00255&|d|s| +0#0000000&|p+0#af5f00255&|i|d|s| +0#0000000&@58 +|f+0#af5f00255&|d|s|;+0#0000000&| |p+0#af5f00255&|i|d|s| +0#0000000&@65 +@75 +|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7 +|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66 +@57|1|4|,|1| @10|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_02.dump b/runtime/syntax/testdir/dumps/ksh_generic_02.dump new file mode 100644 index 0000000000..d8825d327c --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_02.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66 +|c+0#af5f00255&|a|t| +0#0000000&@71 +|c+0#af5f00255&|h|g|r|p| +0#0000000&@69 +|c+0#af5f00255&|h|m|o|d| +0#0000000&@69 +|c+0#af5f00255&|h|o|w|n| +0#0000000&@69 +>c+0#af5f00255&|k|s|u|m| +0#0000000&@69 +|c+0#af5f00255&|m|p| +0#0000000&@71 +|c+0#af5f00255&|o|m@1| +0#0000000&@70 +|c+0#af5f00255&|p| +0#0000000&@72 +|c+0#af5f00255&|u|t| +0#0000000&@71 +|d+0#af5f00255&|a|t|e| +0#0000000&@70 +|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67 +|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|g+0#af5f00255&|r|e|p| +0#0000000&@70 +@57|2|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_03.dump b/runtime/syntax/testdir/dumps/ksh_generic_03.dump new file mode 100644 index 0000000000..f166483c49 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_03.dump @@ -0,0 +1,20 @@ +|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70 +|h+0#af5f00255&|e|a|d| +0#0000000&@70 +|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|i+0#af5f00255&|d| +0#0000000&@72 +|j+0#af5f00255&|o|i|n| +0#0000000&@70 +>l+0#af5f00255&|n| +0#0000000&@72 +|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67 +|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68 +|m+0#af5f00255&|k|d|i|r| +0#0000000&@69 +|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68 +|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68 +|m+0#af5f00255&|v| +0#0000000&@72 +|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|p+0#af5f00255&|a|s|t|e| +0#0000000&@69 +|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67 +|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|v| +0#0000000&@71 +@57|4|7|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_04.dump b/runtime/syntax/testdir/dumps/ksh_generic_04.dump new file mode 100644 index 0000000000..8ac496abb7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_04.dump @@ -0,0 +1,20 @@ +|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71 +|r+0#af5f00255&|m| +0#0000000&@72 +|r+0#af5f00255&|m|d|i|r| +0#0000000&@69 +|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +>s+0#af5f00255&|h|a|2|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|t@1|y| +0#0000000&@70 +|s+0#af5f00255&|u|m| +0#0000000&@71 +|s+0#af5f00255&|y|n|c| +0#0000000&@70 +|t+0#af5f00255&|a|i|l| +0#0000000&@70 +|t+0#af5f00255&|e@1| +0#0000000&@71 +|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|t+0#af5f00255&@1|y| +0#0000000&@71 +|u+0#af5f00255&|n|a|m|e| +0#0000000&@69 +|u+0#af5f00255&|n|i|q| +0#0000000&@70 +|v+0#af5f00255&|m|s|t|a|t|e| +0#0000000&@8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11 +|w+0#af5f00255&|c| +0#0000000&@72 +@57|6|5|,|1| @9|4|6|%| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_05.dump b/runtime/syntax/testdir/dumps/ksh_generic_05.dump new file mode 100644 index 0000000000..4f4d4c8641 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_05.dump @@ -0,0 +1,20 @@ +|w+0#af5f00255#ffffff0|c| +0#0000000&@72 +|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +@75 +|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000& +>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65 +@75 +|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53 +|p+0#af5f00255&|o|l@1| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@64 +@75 +|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9 +|m+0#af5f00255&|k|s|e|r|v|i|c|e| +0#0000000&|-+0#e000e06&@1|m|a|n|;+0#0000000&| |e+0#af5f00255&|l|o@1|p| +0#0000000&|-+0#e000e06&@1|h|e|l|p| +0#0000000&@45 +@75 +|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54 +|b+0#af5f00255&|i|n|d|;+0#0000000&| |r+0#af5f00255&|e|n|a|m|e| +0#0000000&@62 +@75 +|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43 +|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65 +@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@57|8|3|,|1| @9|6|0|%| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_06.dump b/runtime/syntax/testdir/dumps/ksh_generic_06.dump new file mode 100644 index 0000000000..31f0b125e8 --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&| +0#0000000&@42 +@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48 +|e+0#af5f00255&|s|a|c| +0#0000000&@70 +@75 +>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#0000000&@66 +|e+0#af5f00255&|c|h|o| +0#e000002&|t|h|r|e@1| +0#e000e06&@5|}| +0#0000000&@57 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|o|u|r|'+0#af5f00255&|;| +0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|i|v|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|i|x|'+0#af5f00255&| +0#0000000&@55 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49 +|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52 +@75 +@57|1|0|1|,|1| @8|7|4|%| diff --git a/runtime/syntax/testdir/dumps/sh_10_01.dump b/runtime/syntax/testdir/dumps/ksh_generic_07.dump similarity index 53% rename from runtime/syntax/testdir/dumps/sh_10_01.dump rename to runtime/syntax/testdir/dumps/ksh_generic_07.dump index c1d3531a6e..3219c176c1 100644 --- a/runtime/syntax/testdir/dumps/sh_10_01.dump +++ b/runtime/syntax/testdir/dumps/ksh_generic_07.dump @@ -1,20 +1,20 @@ -|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|o|u|r|'+0#af5f00255&|;| +0#e000e06&|}| +0#0000000&@51 -|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|i|v|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&|}| +0#0000000&@51 -|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|i|x|'+0#af5f00255&| +0#0000000&@55 -|}+0#e000e06&| +0#0000000&@73 -|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41 ->e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49 -|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52 -@75 -|#+0#0000e05&| |=@5| +0#0000000&@66 +| +0&#ffffff0@74 |#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20 |#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43 |i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9 | +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52 -@16|R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50 +@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50 @8|}+0#00e0e07&| +0#0000000&@65 @8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|e|n|}| +0#0000000&@43 @8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;+0#af5f00255&|}+0#e000e06&|"+0#af5f00255&| +0#0000000&@36 @8|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 -@57|1|9|,|1| @9|4|3|%| +|}+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 +@57|1@1|9|,|3|-|1|7| @5|8@1|%| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_08.dump b/runtime/syntax/testdir/dumps/ksh_generic_08.dump new file mode 100644 index 0000000000..b507e1df4b --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+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 +|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S|R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_ +|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N +|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06& +|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C +|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E|R@1|N|O|=+0#af5f00255&| +0#e000e06&|C|O|M +|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|@+0#4040ff13&@2 +| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_09.dump b/runtime/syntax/testdir/dumps/ksh_generic_09.dump new file mode 100644 index 0000000000..69664b7f0c --- /dev/null +++ b/runtime/syntax/testdir/dumps/ksh_generic_09.dump @@ -0,0 +1,20 @@ +|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E|R@1|N|O|=+0#af5f00255&| +0#e000e06&|C|O|M +|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|B +|R|E|A|K|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|g|e|n|)+0#e000e06&| +0#0000000&@48 +>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B|A|S|H|P|I|D|=+0#af5f00255&| +0#e000e06&|E|P|O|C|H|R|E|A|L|T|I|M|E|=+0#af5f00255&| +0#e000e06&|E|X|E|C|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|K|S|H|E|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|U|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|_|M|A|T +|C|H|=+0#af5f00255&| +0#e000e06&|P|A|T|H|S|E|P|=+0#af5f00255&| +0#e000e06&|P|G|R|P|=+0#af5f00255&| +0#e000e06&|P|I|P|E|S|T|A|T|U|S|=+0#af5f00255&| +0#e000e06&|T|M|P|D|I|R|=+0#af5f00255&| +0#e000e06&|U|S|E|R|_|I|D|=+0#af5f00255&| +0#e000e06&|V|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|S|W|I|D|T|H|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|l|e|t|e|)+0#e000e06&| +0#0000000&@1 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|4|6|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/mksh_00.dump b/runtime/syntax/testdir/dumps/mksh_00.dump new file mode 100644 index 0000000000..fcf4c1016a --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0|!|/|b|i|n|/|m|k|s|h| +0#0000000&@63 +@75 +|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|} +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|[+0#e000e06#ffffff0|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|# +@1|b|a|z|}+0#e000e06#ffffff0| +0#0000000&@69 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o +|n|/+0#af5f00255#ffffff0|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|/+0#af5f00255#ffffff0|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|/+0#af5f00255#ffffff0|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|b|a|r|.|f|o@1|/+0#af5f00255#ffffff0|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|b|a|r|/+0#af5f00255#ffffff0|#|b+0#0000000&|a|r|/+0#af5f00255& +|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|^@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|,@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 +|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/mksh_01.dump b/runtime/syntax/testdir/dumps/mksh_01.dump new file mode 100644 index 0000000000..44f1ef19b0 --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|^@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|,@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4 +@75 +|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1 +|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 +>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 +|5|-|2@1| +0#0000000&@70 +|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n +|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e +|n|t|,| +0#0000000&@71 +|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a +|t|i|o|n| +0#0000000&@70 +|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46 +|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24 +|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f|d|s| |p|i|d|s| @58 +|f|d|s|;| |p|i|d|s| @65 +@75 +|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7 +|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66 +@57|1|4|,|1| @10|6|%| diff --git a/runtime/syntax/testdir/dumps/mksh_02.dump b/runtime/syntax/testdir/dumps/mksh_02.dump new file mode 100644 index 0000000000..d8825d327c --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_02.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66 +|c+0#af5f00255&|a|t| +0#0000000&@71 +|c+0#af5f00255&|h|g|r|p| +0#0000000&@69 +|c+0#af5f00255&|h|m|o|d| +0#0000000&@69 +|c+0#af5f00255&|h|o|w|n| +0#0000000&@69 +>c+0#af5f00255&|k|s|u|m| +0#0000000&@69 +|c+0#af5f00255&|m|p| +0#0000000&@71 +|c+0#af5f00255&|o|m@1| +0#0000000&@70 +|c+0#af5f00255&|p| +0#0000000&@72 +|c+0#af5f00255&|u|t| +0#0000000&@71 +|d+0#af5f00255&|a|t|e| +0#0000000&@70 +|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67 +|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|g+0#af5f00255&|r|e|p| +0#0000000&@70 +@57|2|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/mksh_03.dump b/runtime/syntax/testdir/dumps/mksh_03.dump new file mode 100644 index 0000000000..f166483c49 --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_03.dump @@ -0,0 +1,20 @@ +|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70 +|h+0#af5f00255&|e|a|d| +0#0000000&@70 +|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|i+0#af5f00255&|d| +0#0000000&@72 +|j+0#af5f00255&|o|i|n| +0#0000000&@70 +>l+0#af5f00255&|n| +0#0000000&@72 +|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67 +|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68 +|m+0#af5f00255&|k|d|i|r| +0#0000000&@69 +|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68 +|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68 +|m+0#af5f00255&|v| +0#0000000&@72 +|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|p+0#af5f00255&|a|s|t|e| +0#0000000&@69 +|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67 +|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|r+0#af5f00255&|e|v| +0#0000000&@71 +@57|4|7|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/mksh_04.dump b/runtime/syntax/testdir/dumps/mksh_04.dump new file mode 100644 index 0000000000..4dd849b940 --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_04.dump @@ -0,0 +1,20 @@ +|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71 +|r+0#af5f00255&|m| +0#0000000&@72 +|r+0#af5f00255&|m|d|i|r| +0#0000000&@69 +|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +>s|h|a|2|s|u|m| @8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|s+0#af5f00255&|t@1|y| +0#0000000&@70 +|s+0#af5f00255&|u|m| +0#0000000&@71 +|s+0#af5f00255&|y|n|c| +0#0000000&@70 +|t+0#af5f00255&|a|i|l| +0#0000000&@70 +|t+0#af5f00255&|e@1| +0#0000000&@71 +|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|t+0#af5f00255&@1|y| +0#0000000&@71 +|u+0#af5f00255&|n|a|m|e| +0#0000000&@69 +|u+0#af5f00255&|n|i|q| +0#0000000&@70 +|v|m|s|t|a|t|e| @8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11 +|w+0#af5f00255&|c| +0#0000000&@72 +@57|6|5|,|1| @9|4|6|%| diff --git a/runtime/syntax/testdir/dumps/mksh_05.dump b/runtime/syntax/testdir/dumps/mksh_05.dump new file mode 100644 index 0000000000..13afdbb248 --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_05.dump @@ -0,0 +1,20 @@ +|w+0#af5f00255#ffffff0|c| +0#0000000&@72 +|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52 +@75 +|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000& +>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65 +@75 +|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53 +|p|o|l@1| |-+0#e000e06&@1|m|a|n| +0#0000000&@64 +@75 +|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9 +|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45 +@75 +|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54 +|b+0#af5f00255&|i|n|d|;+0#0000000&| |r+0#af5f00255&|e|n|a|m|e| +0#0000000&@62 +@75 +|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43 +|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65 +@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@57|8|3|,|1| @9|6|0|%| diff --git a/runtime/syntax/testdir/dumps/mksh_06.dump b/runtime/syntax/testdir/dumps/mksh_06.dump new file mode 100644 index 0000000000..d6532e8668 --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44 +@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&| +0#0000000&@42 +@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|$|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@4|#+0#0000e05&| |9|3|v|-| +0#0000000&@36 +|e+0#af5f00255&|s|a|c| +0#0000000&@70 +@75 +>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#0000000&@66 +|e+0#af5f00255&|c|h|o| +0#e000002&|t|h|r|e@1| +0#e000e06&@5|}| +0#0000000&@57 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|o|u|r|'+0#af5f00255&|;| +0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|i|v|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&|}| +0#0000000&@51 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|i|x|'+0#af5f00255&| +0#0000000&@55 +|}+0#e000e06&| +0#0000000&@73 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49 +|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52 +@75 +@57|1|0|1|,|1| @8|7|4|%| diff --git a/runtime/syntax/testdir/dumps/mksh_07.dump b/runtime/syntax/testdir/dumps/mksh_07.dump new file mode 100644 index 0000000000..3219c176c1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20 +|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43 +|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9 +| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52 +@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50 +@8|}+0#00e0e07&| +0#0000000&@65 +@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|e|n|}| +0#0000000&@43 +@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;+0#af5f00255&|}+0#e000e06&|"+0#af5f00255&| +0#0000000&@36 +@8|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 +@57|1@1|9|,|3|-|1|7| @5|8@1|%| diff --git a/runtime/syntax/testdir/dumps/mksh_08.dump b/runtime/syntax/testdir/dumps/mksh_08.dump new file mode 100644 index 0000000000..8f629e6f0a --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+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#ffffff16#ff404010|/+0#af5f00255#ffffff0|t+0#0000000&|m|p|/+0#af5f00255&|s+0#0000000&|t|r|f|i|l|e|;|}+0#e000e06&| +0#0000000&@52 +@75 +|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68 +|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|R|A|N|D|O|M|=+0#0000000&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_ +|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N +|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06& +|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C +|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47 +|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M +|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|@+0#4040ff13&@2 +| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%| diff --git a/runtime/syntax/testdir/dumps/mksh_09.dump b/runtime/syntax/testdir/dumps/mksh_09.dump new file mode 100644 index 0000000000..1479af77b4 --- /dev/null +++ b/runtime/syntax/testdir/dumps/mksh_09.dump @@ -0,0 +1,20 @@ +|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M +|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|B +|R|E|A|K|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|T|Y|P|E|=+0#0000000&| +0#e000e06&|c|o|m|p|g|e|n|)| +0#0000000&@48 +>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B|A|S|H|P|I|D|=+0#af5f00255&| +0#e000e06&|E|P|O|C|H|R|E|A|L|T|I|M|E|=+0#af5f00255&| +0#e000e06&|E|X|E|C|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|K|S|H|E|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|U|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|_|M|A|T +|C|H|=+0#af5f00255&| +0#e000e06&|P|A|T|H|S|E|P|=+0#af5f00255&| +0#e000e06&|P|G|R|P|=+0#af5f00255&| +0#e000e06&|P|I|P|E|S|T|A|T|U|S|=+0#af5f00255&| +0#e000e06&|T|M|P|D|I|R|=+0#af5f00255&| +0#e000e06&|U|S|E|R|_|I|D|=+0#af5f00255&| +0#e000e06&|V+0#00e0e07&|P|A|T|H|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|S|W|I|D|T|H|=+0#0000000&| +0#e000e06&|c|o|m|p|l|e|t|e|)| +0#0000000&@1 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|4|6|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/sh_02_01.dump b/runtime/syntax/testdir/dumps/sh_02_01.dump index 2c0961563f..e4fb549f72 100644 --- a/runtime/syntax/testdir/dumps/sh_02_01.dump +++ b/runtime/syntax/testdir/dumps/sh_02_01.dump @@ -5,7 +5,7 @@ |#+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|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|u|t| +0#e000e06&|-|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 diff --git a/runtime/syntax/testdir/dumps/sh_05_00.dump b/runtime/syntax/testdir/dumps/sh_05_00.dump index 73164f0033..df5c3e5c52 100644 --- a/runtime/syntax/testdir/dumps/sh_05_00.dump +++ b/runtime/syntax/testdir/dumps/sh_05_00.dump @@ -6,7 +6,7 @@ @75 |#+0#0000e05&| |T|h|i|s| |a|l@1| |s|h|o|u|l|d| |b|e| |O|K| +0#0000000&@51 |#+0#0000e05&| |C|a|s|e| |0|a| +0#0000000&@65 -|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |d|a|t|e| @58 +|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |d+0#af5f00255&|a|t|e| +0#0000000&@58 |V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|v|a|l|u|e|1| @58 |V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|'+0#af5f00255&|v+0#e000002&|a|l|u|e|2|'+0#af5f00255&| +0#0000000&@56 |V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|"+0#af5f00255&|v+0#e000002&|a|l|u|e|3|"+0#af5f00255&| +0#0000000&@56 diff --git a/runtime/syntax/testdir/dumps/sh_05_01.dump b/runtime/syntax/testdir/dumps/sh_05_01.dump index 83500539aa..6b1c14f8b1 100644 --- a/runtime/syntax/testdir/dumps/sh_05_01.dump +++ b/runtime/syntax/testdir/dumps/sh_05_01.dump @@ -15,6 +15,6 @@ @75 |#+0#0000e05&| |C|a|s|e| |0|d| +0#0000000&@65 |[+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&|d|a|t|e|`| +0#0000000&@58 -|V+0#00e0e07&|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|1|=+0#0000000&|`+0#e000e06&|d+0#af5f00255&|a|t|e|`+0#e000e06&| +0#0000000&@58 +|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|`+0#e000e06&|i+0#af5f00255&|d| +0#e000e06&|-|n|g|`| +0#0000000&@56 @57|1|9|,|1| @10|3|%| diff --git a/runtime/syntax/testdir/dumps/sh_05_02.dump b/runtime/syntax/testdir/dumps/sh_05_02.dump index afcdd6f4aa..1de673713a 100644 --- a/runtime/syntax/testdir/dumps/sh_05_02.dump +++ b/runtime/syntax/testdir/dumps/sh_05_02.dump @@ -1,5 +1,5 @@ -|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 +|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|`+0#e000e06&|i+0#af5f00255&|d| +0#e000e06&|-|n|g|`| +0#0000000&@56 +|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|`+0#e000e06&|i+0#af5f00255&|d| +0#e000e06&|-|n|g| ||+0#af5f00255&| +0#e000e06&|w+0#af5f00255&|c| +0#e000e06&|-|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 diff --git a/runtime/syntax/testdir/dumps/sh_06_00.dump b/runtime/syntax/testdir/dumps/sh_06_00.dump index c037b751ee..5003c31b1f 100644 --- a/runtime/syntax/testdir/dumps/sh_06_00.dump +++ b/runtime/syntax/testdir/dumps/sh_06_00.dump @@ -4,7 +4,7 @@ |D+0#00e0e07&|e|b|u|g|S|c|r|i|p|t|=+0#0000000&|s|e|t| @59 @75 |#+0#0000e05&| |S|h|o|w| |t|h|a|t| |w|e| |a|r|e| |b|u|s|y|.| +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&|P+0#e000002&|l|e|a|s|e| |w|a|i|t| |.@2| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&|>+0#af5f00255&|`+0#e000e06&|t@1|y|`| +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&|P+0#e000002&|l|e|a|s|e| |w|a|i|t| |.@2| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&|>+0#af5f00255&|`+0#e000e06&|t+0#af5f00255&@1|y|`+0#e000e06&| +0#0000000&@30 @75 |#+0#0000e05&@74 @5| +0#0000000&@69 diff --git a/runtime/syntax/testdir/dumps/sh_08_00.dump b/runtime/syntax/testdir/dumps/sh_08_00.dump index 9be018a85d..7334018709 100644 --- a/runtime/syntax/testdir/dumps/sh_08_00.dump +++ b/runtime/syntax/testdir/dumps/sh_08_00.dump @@ -8,13 +8,13 @@ @75 |#+0#0000e05&| |S|e|v|e|r|a|l| |k|e|y|w|o|r|d|s| |w|i|t|h|o|u|t| |a|n|y| |q|u|o|t|e|s|!| +0#0000000&@36 |#+0#0000e05&| |C|a|s|e| |1|a|.| |S|e|v|e|r|a|l| |C|o|n|s|t|a|n|t|s| | +0#0000000&@45 -|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |d|a|t|e| @58 +|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |d+0#af5f00255&|a|t|e| +0#0000000&@58 |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&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@36 |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&|=|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +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&|?|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +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#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|b|.| |V|a|r|i|a|b|l|e| |a|n|d| |C|o|n|s|t|a|n|t| +0#0000000&@42 -|[+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#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#af5f00255&|a|t|e|`+0#e000e06&|"+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&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@30 |i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/sh_08_01.dump b/runtime/syntax/testdir/dumps/sh_08_01.dump index 45758ccc6e..40309b99c5 100644 --- a/runtime/syntax/testdir/dumps/sh_08_01.dump +++ b/runtime/syntax/testdir/dumps/sh_08_01.dump @@ -2,14 +2,14 @@ |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|b|.| |V|a|r|i|a|b|l|e| |a|n|d| |C|o|n|s|t|a|n|t| +0#0000000&@42 -|[+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#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#af5f00255&|a|t|e|`+0#e000e06&|"+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&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@30 |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&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@30 |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&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@30 |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|c|.| |C|o|n|s|t|a|n|t| |a|n|d| |V|a|r|i|a|b|l|e| +0#0000000&@42 -|[+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#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#af5f00255&|a|t|e|`+0#e000e06&|"+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&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +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&|=|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +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&|+|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@6|#+0#0000e05&|!| |:|+| |i|s| |b|a|s|h|-|o|n|l|y|,| |e diff --git a/runtime/syntax/testdir/dumps/sh_08_02.dump b/runtime/syntax/testdir/dumps/sh_08_02.dump index b57af0bd4b..ec9470de6c 100644 --- a/runtime/syntax/testdir/dumps/sh_08_02.dump +++ b/runtime/syntax/testdir/dumps/sh_08_02.dump @@ -2,7 +2,7 @@ |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 +|[+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#af5f00255&|a|t|e|`+0#e000e06&|"+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|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 @@ -10,7 +10,7 @@ |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|e|.| |M|o|r|e| |C|o|n|s|t|a|n|t|s| |a|n|d| |V|a|r|i|a|b|l|e|s|.| |S|t|a|r|t|i|n|g| |w|i|t|h| |a| |C|o|n|s|t|a|n|t|.| +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 +|[+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#af5f00255&|a|t|e|`+0#e000e06&|"+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&|-|"|T+0#e000002&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E| +0#e000002&|$+0#e000e06&|S|H|E|L@1|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@18 |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&|-|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 |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&|=|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 diff --git a/runtime/syntax/testdir/dumps/sh_08_03.dump b/runtime/syntax/testdir/dumps/sh_08_03.dump index 54261881a2..ef079981f4 100644 --- a/runtime/syntax/testdir/dumps/sh_08_03.dump +++ b/runtime/syntax/testdir/dumps/sh_08_03.dump @@ -1,6 +1,6 @@ | +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#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#af5f00255&|a|t|e|`+0#e000e06&|"+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 @@ -9,7 +9,7 @@ @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 |i|o|n| +0#0000000&@71 -|[+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#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#af5f00255&|a|t|e|`+0#e000e06&|"+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&@45 |:+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&@39 |:+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&@36 diff --git a/runtime/syntax/testdir/dumps/sh_09_00.dump b/runtime/syntax/testdir/dumps/sh_09_00.dump index 8a51f39460..58ab2022e0 100644 --- a/runtime/syntax/testdir/dumps/sh_09_00.dump +++ b/runtime/syntax/testdir/dumps/sh_09_00.dump @@ -1,20 +1,20 @@ >#+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&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+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+0#af5f00255&|c| +0#0000000&|-+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+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@48 +|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+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&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+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+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@45 +|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+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+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@45 +|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+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+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@45 +|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+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+0#af5f00255&|c| +0#0000000&|-+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+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@45 +|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|H|O|M|E|}| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+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 |i|s|_|d|a|s|h|:| |1|,| |i|s|_|p|o|s|i|x|:| |1|,| |i|s|_|s|h|:| |1|,| @22|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/dumps/sh_10_02.dump b/runtime/syntax/testdir/dumps/sh_10_02.dump deleted file mode 100644 index e03c3f8144..0000000000 --- a/runtime/syntax/testdir/dumps/sh_10_02.dump +++ /dev/null @@ -1,20 +0,0 @@ -| +0&#ffffff0@7|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 -|~+0#4040ff13&| @73 -| +0#0000000&@56|3|7|,|2|-|9| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump b/runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump new file mode 100644 index 0000000000..dcfb57cc78 --- /dev/null +++ b/runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0|!|/|b|i|n|/|b|a|s|h| +0#0000000&@63 +|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66 +|c+0#af5f00255&|a|t| +0#0000000&@71 +|c+0#af5f00255&|h|g|r|p| +0#0000000&@69 +|c+0#af5f00255&|h|m|o|d| +0#0000000&@69 +|c+0#af5f00255&|h|o|w|n| +0#0000000&@69 +|c+0#af5f00255&|k|s|u|m| +0#0000000&@69 +|c+0#af5f00255&|m|p| +0#0000000&@71 +|c+0#af5f00255&|o|m@1| +0#0000000&@70 +|c+0#af5f00255&|p| +0#0000000&@72 +|c+0#af5f00255&|u|t| +0#0000000&@71 +|d+0#af5f00255&|a|t|e| +0#0000000&@70 +|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67 +|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|i|s|_|b|a|s|h|:| |1|,| @45|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump b/runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump new file mode 100644 index 0000000000..ad3449dc62 --- /dev/null +++ b/runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|e+0#af5f00255&|x|p|r| +0#0000000&@70 +|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45 +|f+0#af5f00255&|m|t| +0#0000000&@71 +|f+0#af5f00255&|o|l|d| +0#0000000&@70 +>g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67 +|g+0#af5f00255&|r|e|p| +0#0000000&@70 +|h+0#af5f00255&|e|a|d| +0#0000000&@70 +|i+0#af5f00255&|c|o|n|v| +0#0000000&@69 +|i+0#af5f00255&|d| +0#0000000&@72 +|j+0#af5f00255&|o|i|n| +0#0000000&@70 +|l+0#af5f00255&|n| +0#0000000&@72 +|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67 +|l+0#af5f00255&|s| +0#0000000&@72 +|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68 +|m+0#af5f00255&|k|d|i|r| +0#0000000&@69 +|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68 +|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68 +|m+0#af5f00255&|v| +0#0000000&@72 +@57|1|9|,|1| @9|3|4|%| diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump b/runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump new file mode 100644 index 0000000000..073d29f279 --- /dev/null +++ b/runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump @@ -0,0 +1,20 @@ +|m+0#af5f00255#ffffff0|v| +0#0000000&@72 +|o+0#af5f00255&|d| +0#0000000&@72 +|p+0#af5f00255&|a|s|t|e| +0#0000000&@69 +|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67 +|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@66 +>r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@66 +|r+0#af5f00255&|e|v| +0#0000000&@71 +|r+0#af5f00255&|m| +0#0000000&@72 +|r+0#af5f00255&|m|d|i|r| +0#0000000&@69 +|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@67 +|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@65 +|s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65 +|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@65 +|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@65 +|s+0#af5f00255&|t@1|y| +0#0000000&@70 +|s+0#af5f00255&|u|m| +0#0000000&@71 +|s+0#af5f00255&|y|n|c| +0#0000000&@70 +|t+0#af5f00255&|a|i|l| +0#0000000&@70 +|t+0#af5f00255&|e@1| +0#0000000&@71 +@57|3|7|,|1| @9|8|1|%| diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump b/runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump new file mode 100644 index 0000000000..5a24b40d3b --- /dev/null +++ b/runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump @@ -0,0 +1,20 @@ +|t+0#af5f00255#ffffff0|e@1| +0#0000000&@71 +|t+0#af5f00255&|r| +0#0000000&@72 +|t+0#af5f00255&@1|y| +0#0000000&@71 +|u+0#af5f00255&|n|a|m|e| +0#0000000&@69 +|u+0#af5f00255&|n|i|q| +0#0000000&@70 +>w+0#af5f00255&|c| +0#0000000&@72 +|x+0#af5f00255&|a|r|g|s| +0#0000000&@69 +|x+0#af5f00255&|g|r|e|p| +0#0000000&@69 +|~+0#4040ff13&| @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/input/ksh2020.ksh b/runtime/syntax/testdir/input/ksh2020.ksh new file mode 100644 index 0000000000..edb1ab24bd --- /dev/null +++ b/runtime/syntax/testdir/input/ksh2020.ksh @@ -0,0 +1,146 @@ +#!/bin/ksh2020 + +# Rendering namespace variables +echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]} +echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz} +echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b} +echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo} +echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo} +echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo} +echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,} + +# 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch). +alarm --man +# The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22 +# and 2008-06-02, respectively. However, these were not readily enabled; in +# 93u+m these can be enabled with the builtin command if libcmd.so is present, +# either via 'builtin -f' or (in more recent commits) with a regular invocation +# of the 'builtin' built-in. +# cf. https://github.com/ksh93/ksh/commit/f15e2c41 +builtin fds pids +fds; pids + +# Unix commands which are provided by ksh as builtins via libcmd.so +basename +cat +chgrp +chmod +chown +cksum +cmp +comm +cp +cut +date +dirname +egrep # Obsolescent +expr +fgrep # Obsolescent +fmt +fold +getconf +grep +head +iconv # 93v- +id +join +ln +logname +ls # 93v- +md5sum +mkdir +mkfifo +mktemp +mv +od # 93v- +paste +pathchk +readlink # 93v- +realpath # 93v- +rev +rm +rmdir +sha1sum # 93v- +sha256sum # 93v- +sha2sum # 93v- +sha384sum # 93v- +sha512sum # 93v- +stty +sum +sync +tail +tee +tr # 93v- +tty +uname +uniq +vmstate # Obsolescent; only available in 93v- and older +wc +xargs # 93v- +xgrep # 93v- + +# SHA command not provided as a builtin but included here for completeness +sha224sum + +# poll builtin (93v-) +poll --man + +# mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE) +mkservice --man; eloop --help + +# some mksh builtins +bind; rename + +# ;& and ;;& in case statements +case x in + bar) false ${baz:1} ;& + foo) true ${foo:0:0} ;;& + *) print ${bar} ;; +esac + +# Below is subshare syntax supported by both ksh93 and mksh. +print ${ echo one } +print ${ echo two +} +print ${ +echo three } +print ${ echo 'four'; } +print ${ echo 'five' ;} +print ${ echo 'six' +} +print ${ echo 'seven' } +echo ${ print 'eight' } +typeset nine=${ pwd; } + +# Value substitutions of the form ${|command} are only +# supported by mksh, not ksh93. +if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then + valsubfunc() { + REPLY=$1 + } + echo ${|valsubfunc ten} + print "${|valsubfunc eleven;}" + printf '%s' "${|valsubfunc twelve }" + unlucky=${|valsubfunc thirteen +} + typeset notafloat=${|valsubfunc notanumber } + print $unlucky $notanumber + ${|echo foo} + ${|echo bar +} +fi + +# ====== +# Shared-state command substitutions using the syntax ${ /tmp/strfile +echo ${= 20070703))' 2>/dev/null; then + valsubfunc() { + REPLY=$1 + } + echo ${|valsubfunc ten} + print "${|valsubfunc eleven;}" + printf '%s' "${|valsubfunc twelve }" + unlucky=${|valsubfunc thirteen +} + typeset notafloat=${|valsubfunc notanumber } + print $unlucky $notanumber + ${|echo foo} + ${|echo bar +} +fi + +# ====== +# Shared-state command substitutions using the syntax ${ /tmp/strfile +echo ${= 20070703))' 2>/dev/null; then + valsubfunc() { + REPLY=$1 + } + echo ${|valsubfunc ten} + print "${|valsubfunc eleven;}" + printf '%s' "${|valsubfunc twelve }" + unlucky=${|valsubfunc thirteen +} + typeset notafloat=${|valsubfunc notanumber } + print $unlucky $notanumber + ${|echo foo} + ${|echo bar +} +fi + +# ====== +# Shared-state command substitutions using the syntax ${ /tmp/strfile +echo ${= 20070703))' 2>/dev/null; then + valsubfunc() { + REPLY=$1 + } + echo ${|valsubfunc ten} + print "${|valsubfunc eleven;}" + printf '%s' "${|valsubfunc twelve }" + unlucky=${|valsubfunc thirteen +} + typeset notafloat=${|valsubfunc notanumber } + print $unlucky $notanumber + ${|echo foo} + ${|echo bar +} +fi + +# ====== +# Shared-state command substitutions using the syntax ${ /tmp/strfile +echo ${= 20070703))' 2>/dev/null; then + valsubfunc() { + REPLY=$1 + } + echo ${|valsubfunc ten} + print "${|valsubfunc eleven;}" + printf '%s' "${|valsubfunc twelve }" + unlucky=${|valsubfunc thirteen +} + typeset notafloat=${|valsubfunc notanumber } + print $unlucky $notanumber + ${|echo foo} + ${|echo bar +} +fi + +# ====== +# Shared-state command substitutions using the syntax ${ /tmp/strfile +echo ${= 20070703))' 2>/dev/null; then + valsubfunc() { + REPLY=$1 + } + echo ${|valsubfunc ten} + print "${|valsubfunc eleven;}" + printf '%s' "${|valsubfunc twelve }" + unlucky=${|valsubfunc thirteen +} + typeset notafloat=${|valsubfunc notanumber } + print $unlucky $notanumber + ${|echo foo} + ${|echo bar +} +fi + +# ====== +# Shared-state command substitutions using the syntax ${ /tmp/strfile +echo ${= 20070703))' 2>/dev/null; then + valsubfunc() { + REPLY=$1 + } + echo ${|valsubfunc ten} + print "${|valsubfunc eleven;}" + printf '%s' "${|valsubfunc twelve }" + unlucky=${|valsubfunc thirteen +} + typeset notafloat=${|valsubfunc notanumber } + print $unlucky $notanumber + ${|echo foo} + ${|echo bar +} +fi + +# ====== +# Shared-state command substitutions using the syntax ${ /tmp/strfile +echo ${= 20070703))' 2>/dev/null; then - valsubfunc() { - REPLY=$1 - } - echo ${|valsubfunc ten} - print "${|valsubfunc eleven;}" - printf '%s' "${|valsubfunc twelve }" - unlucky=${|valsubfunc thirteen -} - typeset notafloat=${|valsubfunc notanumber } - print $unlucky $notanumber - ${|echo foo} - ${|echo bar -} -fi - -# ====== -# Shared-state command substitutions using the syntax ${ /tmp/strfile -echo ${ Date: Thu, 22 May 2025 21:55:58 +0200 Subject: [PATCH 274/633] runtime(syntax-tests): rename kornshell syntax tests and regenerate 00 dumps related: #17348 Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt --- .../testdir/dumps/{ksh_generic_00.dump => sh_generic_00.dump} | 2 +- .../testdir/dumps/{ksh93_generic_01.dump => sh_generic_01.dump} | 0 .../testdir/dumps/{ksh2020_02.dump => sh_generic_02.dump} | 0 .../testdir/dumps/{ksh2020_03.dump => sh_generic_03.dump} | 0 .../testdir/dumps/{ksh93_generic_04.dump => sh_generic_04.dump} | 0 .../testdir/dumps/{ksh93_generic_05.dump => sh_generic_05.dump} | 0 .../testdir/dumps/{ksh93_generic_06.dump => sh_generic_06.dump} | 0 .../testdir/dumps/{ksh_generic_07.dump => sh_generic_07.dump} | 0 .../testdir/dumps/{ksh_generic_08.dump => sh_generic_08.dump} | 0 .../testdir/dumps/{ksh_generic_09.dump => sh_generic_09.dump} | 0 .../testdir/dumps/{ksh2020_00.dump => sh_ksh2020_00.dump} | 2 +- .../testdir/dumps/{ksh2020_01.dump => sh_ksh2020_01.dump} | 0 .../syntax/testdir/dumps/{ksh88_02.dump => sh_ksh2020_02.dump} | 0 .../syntax/testdir/dumps/{ksh88_03.dump => sh_ksh2020_03.dump} | 0 .../testdir/dumps/{ksh2020_04.dump => sh_ksh2020_04.dump} | 0 .../testdir/dumps/{ksh2020_05.dump => sh_ksh2020_05.dump} | 0 .../testdir/dumps/{ksh2020_06.dump => sh_ksh2020_06.dump} | 0 .../testdir/dumps/{ksh2020_07.dump => sh_ksh2020_07.dump} | 0 .../testdir/dumps/{ksh2020_08.dump => sh_ksh2020_08.dump} | 0 .../testdir/dumps/{ksh2020_09.dump => sh_ksh2020_09.dump} | 0 .../syntax/testdir/dumps/{ksh88_00.dump => sh_ksh88_00.dump} | 2 +- .../syntax/testdir/dumps/{ksh88_01.dump => sh_ksh88_01.dump} | 0 .../testdir/dumps/{ksh93_generic_02.dump => sh_ksh88_02.dump} | 0 .../testdir/dumps/{ksh93_generic_03.dump => sh_ksh88_03.dump} | 0 .../syntax/testdir/dumps/{ksh88_04.dump => sh_ksh88_04.dump} | 0 .../syntax/testdir/dumps/{ksh88_05.dump => sh_ksh88_05.dump} | 0 .../syntax/testdir/dumps/{ksh88_06.dump => sh_ksh88_06.dump} | 0 .../syntax/testdir/dumps/{ksh88_07.dump => sh_ksh88_07.dump} | 0 .../syntax/testdir/dumps/{ksh88_08.dump => sh_ksh88_08.dump} | 0 .../syntax/testdir/dumps/{ksh88_09.dump => sh_ksh88_09.dump} | 0 .../dumps/{ksh93_generic_00.dump => sh_ksh93_generic_00.dump} | 2 +- .../testdir/dumps/{ksh93v_01.dump => sh_ksh93_generic_01.dump} | 0 .../testdir/dumps/{ksh93u_02.dump => sh_ksh93_generic_02.dump} | 0 .../testdir/dumps/{ksh93u_03.dump => sh_ksh93_generic_03.dump} | 0 .../testdir/dumps/{ksh93v_04.dump => sh_ksh93_generic_04.dump} | 0 .../dumps/{ksh_generic_05.dump => sh_ksh93_generic_05.dump} | 0 .../dumps/{ksh_generic_06.dump => sh_ksh93_generic_06.dump} | 0 .../dumps/{ksh93_generic_07.dump => sh_ksh93_generic_07.dump} | 0 .../dumps/{ksh93_generic_08.dump => sh_ksh93_generic_08.dump} | 0 .../dumps/{ksh93_generic_09.dump => sh_ksh93_generic_09.dump} | 0 .../syntax/testdir/dumps/{ksh93u_00.dump => sh_ksh93u_00.dump} | 2 +- .../syntax/testdir/dumps/{ksh93u_01.dump => sh_ksh93u_01.dump} | 0 .../syntax/testdir/dumps/{ksh93v_02.dump => sh_ksh93u_02.dump} | 0 .../syntax/testdir/dumps/{ksh93v_03.dump => sh_ksh93u_03.dump} | 0 .../syntax/testdir/dumps/{ksh93u_04.dump => sh_ksh93u_04.dump} | 0 .../syntax/testdir/dumps/{ksh93u_05.dump => sh_ksh93u_05.dump} | 0 .../syntax/testdir/dumps/{ksh93u_06.dump => sh_ksh93u_06.dump} | 0 .../syntax/testdir/dumps/{ksh93u_07.dump => sh_ksh93u_07.dump} | 0 .../syntax/testdir/dumps/{ksh93u_08.dump => sh_ksh93u_08.dump} | 0 .../syntax/testdir/dumps/{ksh93u_09.dump => sh_ksh93u_09.dump} | 0 .../syntax/testdir/dumps/{ksh93v_00.dump => sh_ksh93v_00.dump} | 2 +- .../testdir/dumps/{ksh_generic_01.dump => sh_ksh93v_01.dump} | 0 .../testdir/dumps/{ksh_generic_02.dump => sh_ksh93v_02.dump} | 0 .../testdir/dumps/{ksh_generic_03.dump => sh_ksh93v_03.dump} | 0 .../testdir/dumps/{ksh_generic_04.dump => sh_ksh93v_04.dump} | 0 .../syntax/testdir/dumps/{ksh93v_05.dump => sh_ksh93v_05.dump} | 0 .../syntax/testdir/dumps/{ksh93v_06.dump => sh_ksh93v_06.dump} | 0 .../syntax/testdir/dumps/{ksh93v_07.dump => sh_ksh93v_07.dump} | 0 .../syntax/testdir/dumps/{ksh93v_08.dump => sh_ksh93v_08.dump} | 0 .../syntax/testdir/dumps/{ksh93v_09.dump => sh_ksh93v_09.dump} | 0 runtime/syntax/testdir/dumps/{mksh_00.dump => sh_mksh_00.dump} | 2 +- runtime/syntax/testdir/dumps/{mksh_01.dump => sh_mksh_01.dump} | 0 runtime/syntax/testdir/dumps/{mksh_02.dump => sh_mksh_02.dump} | 0 runtime/syntax/testdir/dumps/{mksh_03.dump => sh_mksh_03.dump} | 0 runtime/syntax/testdir/dumps/{mksh_04.dump => sh_mksh_04.dump} | 0 runtime/syntax/testdir/dumps/{mksh_05.dump => sh_mksh_05.dump} | 0 runtime/syntax/testdir/dumps/{mksh_06.dump => sh_mksh_06.dump} | 0 runtime/syntax/testdir/dumps/{mksh_07.dump => sh_mksh_07.dump} | 0 runtime/syntax/testdir/dumps/{mksh_08.dump => sh_mksh_08.dump} | 0 runtime/syntax/testdir/dumps/{mksh_09.dump => sh_mksh_09.dump} | 0 .../dumps/{sh_bash_sundrous_00.dump => sh_sundrous_00.dump} | 0 .../dumps/{sh_bash_sundrous_01.dump => sh_sundrous_01.dump} | 0 .../dumps/{sh_bash_sundrous_02.dump => sh_sundrous_02.dump} | 0 .../dumps/{sh_bash_sundrous_03.dump => sh_sundrous_03.dump} | 0 .../syntax/testdir/input/{ksh_generic.ksh => sh_generic.ksh} | 0 runtime/syntax/testdir/input/{ksh2020.ksh => sh_ksh2020.ksh} | 0 runtime/syntax/testdir/input/{ksh88.ksh => sh_ksh88.ksh} | 0 .../testdir/input/{ksh93_generic.ksh => sh_ksh93_generic.ksh} | 0 runtime/syntax/testdir/input/{ksh93u.ksh => sh_ksh93u.ksh} | 0 runtime/syntax/testdir/input/{ksh93v.ksh => sh_ksh93v.ksh} | 0 runtime/syntax/testdir/input/{mksh.ksh => sh_mksh.ksh} | 0 .../testdir/input/{sh_bash_sundrous.bash => sh_sundrous.bash} | 0 82 files changed, 7 insertions(+), 7 deletions(-) rename runtime/syntax/testdir/dumps/{ksh_generic_00.dump => sh_generic_00.dump} (98%) rename runtime/syntax/testdir/dumps/{ksh93_generic_01.dump => sh_generic_01.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_02.dump => sh_generic_02.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_03.dump => sh_generic_03.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_04.dump => sh_generic_04.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_05.dump => sh_generic_05.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_06.dump => sh_generic_06.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh_generic_07.dump => sh_generic_07.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh_generic_08.dump => sh_generic_08.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh_generic_09.dump => sh_generic_09.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_00.dump => sh_ksh2020_00.dump} (97%) rename runtime/syntax/testdir/dumps/{ksh2020_01.dump => sh_ksh2020_01.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_02.dump => sh_ksh2020_02.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_03.dump => sh_ksh2020_03.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_04.dump => sh_ksh2020_04.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_05.dump => sh_ksh2020_05.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_06.dump => sh_ksh2020_06.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_07.dump => sh_ksh2020_07.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_08.dump => sh_ksh2020_08.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh2020_09.dump => sh_ksh2020_09.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_00.dump => sh_ksh88_00.dump} (97%) rename runtime/syntax/testdir/dumps/{ksh88_01.dump => sh_ksh88_01.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_02.dump => sh_ksh88_02.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_03.dump => sh_ksh88_03.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_04.dump => sh_ksh88_04.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_05.dump => sh_ksh88_05.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_06.dump => sh_ksh88_06.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_07.dump => sh_ksh88_07.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_08.dump => sh_ksh88_08.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh88_09.dump => sh_ksh88_09.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_00.dump => sh_ksh93_generic_00.dump} (97%) rename runtime/syntax/testdir/dumps/{ksh93v_01.dump => sh_ksh93_generic_01.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_02.dump => sh_ksh93_generic_02.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_03.dump => sh_ksh93_generic_03.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_04.dump => sh_ksh93_generic_04.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh_generic_05.dump => sh_ksh93_generic_05.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh_generic_06.dump => sh_ksh93_generic_06.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_07.dump => sh_ksh93_generic_07.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_08.dump => sh_ksh93_generic_08.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93_generic_09.dump => sh_ksh93_generic_09.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_00.dump => sh_ksh93u_00.dump} (97%) rename runtime/syntax/testdir/dumps/{ksh93u_01.dump => sh_ksh93u_01.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_02.dump => sh_ksh93u_02.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_03.dump => sh_ksh93u_03.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_04.dump => sh_ksh93u_04.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_05.dump => sh_ksh93u_05.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_06.dump => sh_ksh93u_06.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_07.dump => sh_ksh93u_07.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_08.dump => sh_ksh93u_08.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93u_09.dump => sh_ksh93u_09.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_00.dump => sh_ksh93v_00.dump} (97%) rename runtime/syntax/testdir/dumps/{ksh_generic_01.dump => sh_ksh93v_01.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh_generic_02.dump => sh_ksh93v_02.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh_generic_03.dump => sh_ksh93v_03.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh_generic_04.dump => sh_ksh93v_04.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_05.dump => sh_ksh93v_05.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_06.dump => sh_ksh93v_06.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_07.dump => sh_ksh93v_07.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_08.dump => sh_ksh93v_08.dump} (100%) rename runtime/syntax/testdir/dumps/{ksh93v_09.dump => sh_ksh93v_09.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_00.dump => sh_mksh_00.dump} (98%) rename runtime/syntax/testdir/dumps/{mksh_01.dump => sh_mksh_01.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_02.dump => sh_mksh_02.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_03.dump => sh_mksh_03.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_04.dump => sh_mksh_04.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_05.dump => sh_mksh_05.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_06.dump => sh_mksh_06.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_07.dump => sh_mksh_07.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_08.dump => sh_mksh_08.dump} (100%) rename runtime/syntax/testdir/dumps/{mksh_09.dump => sh_mksh_09.dump} (100%) rename runtime/syntax/testdir/dumps/{sh_bash_sundrous_00.dump => sh_sundrous_00.dump} (100%) rename runtime/syntax/testdir/dumps/{sh_bash_sundrous_01.dump => sh_sundrous_01.dump} (100%) rename runtime/syntax/testdir/dumps/{sh_bash_sundrous_02.dump => sh_sundrous_02.dump} (100%) rename runtime/syntax/testdir/dumps/{sh_bash_sundrous_03.dump => sh_sundrous_03.dump} (100%) rename runtime/syntax/testdir/input/{ksh_generic.ksh => sh_generic.ksh} (100%) rename runtime/syntax/testdir/input/{ksh2020.ksh => sh_ksh2020.ksh} (100%) rename runtime/syntax/testdir/input/{ksh88.ksh => sh_ksh88.ksh} (100%) rename runtime/syntax/testdir/input/{ksh93_generic.ksh => sh_ksh93_generic.ksh} (100%) rename runtime/syntax/testdir/input/{ksh93u.ksh => sh_ksh93u.ksh} (100%) rename runtime/syntax/testdir/input/{ksh93v.ksh => sh_ksh93v.ksh} (100%) rename runtime/syntax/testdir/input/{mksh.ksh => sh_mksh.ksh} (100%) rename runtime/syntax/testdir/input/{sh_bash_sundrous.bash => sh_sundrous.bash} (100%) diff --git a/runtime/syntax/testdir/dumps/ksh_generic_00.dump b/runtime/syntax/testdir/dumps/sh_generic_00.dump similarity index 98% rename from runtime/syntax/testdir/dumps/ksh_generic_00.dump rename to runtime/syntax/testdir/dumps/sh_generic_00.dump index 0ce212fea4..26b29c8c40 100644 --- a/runtime/syntax/testdir/dumps/ksh_generic_00.dump +++ b/runtime/syntax/testdir/dumps/sh_generic_00.dump @@ -17,4 +17,4 @@ |a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 |#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 |5|-|2@1| +0#0000000&@70 -@57|1|,|1| @10|T|o|p| +|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_01.dump b/runtime/syntax/testdir/dumps/sh_generic_01.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_01.dump rename to runtime/syntax/testdir/dumps/sh_generic_01.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_02.dump b/runtime/syntax/testdir/dumps/sh_generic_02.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_02.dump rename to runtime/syntax/testdir/dumps/sh_generic_02.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_03.dump b/runtime/syntax/testdir/dumps/sh_generic_03.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_03.dump rename to runtime/syntax/testdir/dumps/sh_generic_03.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_04.dump b/runtime/syntax/testdir/dumps/sh_generic_04.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_04.dump rename to runtime/syntax/testdir/dumps/sh_generic_04.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_05.dump b/runtime/syntax/testdir/dumps/sh_generic_05.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_05.dump rename to runtime/syntax/testdir/dumps/sh_generic_05.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_06.dump b/runtime/syntax/testdir/dumps/sh_generic_06.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_06.dump rename to runtime/syntax/testdir/dumps/sh_generic_06.dump diff --git a/runtime/syntax/testdir/dumps/ksh_generic_07.dump b/runtime/syntax/testdir/dumps/sh_generic_07.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_07.dump rename to runtime/syntax/testdir/dumps/sh_generic_07.dump diff --git a/runtime/syntax/testdir/dumps/ksh_generic_08.dump b/runtime/syntax/testdir/dumps/sh_generic_08.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_08.dump rename to runtime/syntax/testdir/dumps/sh_generic_08.dump diff --git a/runtime/syntax/testdir/dumps/ksh_generic_09.dump b/runtime/syntax/testdir/dumps/sh_generic_09.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_09.dump rename to runtime/syntax/testdir/dumps/sh_generic_09.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_00.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_00.dump similarity index 97% rename from runtime/syntax/testdir/dumps/ksh2020_00.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_00.dump index 6f7e69e25f..316046e8b2 100644 --- a/runtime/syntax/testdir/dumps/ksh2020_00.dump +++ b/runtime/syntax/testdir/dumps/sh_ksh2020_00.dump @@ -17,4 +17,4 @@ |a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 |#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 |5|-|2@1| +0#0000000&@70 -@57|1|,|1| @10|T|o|p| +|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| |i|s|_|k|s|h|2|0|2|0|:| |1|,| @25|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh2020_01.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_01.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_01.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_01.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_02.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_02.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_02.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_02.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_03.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_03.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_03.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_03.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_04.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_04.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_04.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_04.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_05.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_05.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_05.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_05.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_06.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_06.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_06.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_06.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_07.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_07.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_07.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_07.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_08.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_08.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_08.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_08.dump diff --git a/runtime/syntax/testdir/dumps/ksh2020_09.dump b/runtime/syntax/testdir/dumps/sh_ksh2020_09.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh2020_09.dump rename to runtime/syntax/testdir/dumps/sh_ksh2020_09.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_00.dump b/runtime/syntax/testdir/dumps/sh_ksh88_00.dump similarity index 97% rename from runtime/syntax/testdir/dumps/ksh88_00.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_00.dump index ad36df0588..9712553c84 100644 --- a/runtime/syntax/testdir/dumps/ksh88_00.dump +++ b/runtime/syntax/testdir/dumps/sh_ksh88_00.dump @@ -17,4 +17,4 @@ |a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 |#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 |5|-|2@1| +0#0000000&@70 -@57|1|,|1| @10|T|o|p| +|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| |i|s|_|k|s|h|8@1|:| |1|,| @27|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh88_01.dump b/runtime/syntax/testdir/dumps/sh_ksh88_01.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_01.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_01.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_02.dump b/runtime/syntax/testdir/dumps/sh_ksh88_02.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_02.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_02.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_03.dump b/runtime/syntax/testdir/dumps/sh_ksh88_03.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_03.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_03.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_04.dump b/runtime/syntax/testdir/dumps/sh_ksh88_04.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_04.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_04.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_05.dump b/runtime/syntax/testdir/dumps/sh_ksh88_05.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_05.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_05.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_06.dump b/runtime/syntax/testdir/dumps/sh_ksh88_06.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_06.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_06.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_07.dump b/runtime/syntax/testdir/dumps/sh_ksh88_07.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_07.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_07.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_08.dump b/runtime/syntax/testdir/dumps/sh_ksh88_08.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_08.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_08.dump diff --git a/runtime/syntax/testdir/dumps/ksh88_09.dump b/runtime/syntax/testdir/dumps/sh_ksh88_09.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh88_09.dump rename to runtime/syntax/testdir/dumps/sh_ksh88_09.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_00.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_00.dump similarity index 97% rename from runtime/syntax/testdir/dumps/ksh93_generic_00.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_00.dump index a1a110b9d7..f4e40e3a98 100644 --- a/runtime/syntax/testdir/dumps/ksh93_generic_00.dump +++ b/runtime/syntax/testdir/dumps/sh_ksh93_generic_00.dump @@ -17,4 +17,4 @@ |a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 |#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 |5|-|2@1| +0#0000000&@70 -@57|1|,|1| @10|T|o|p| +|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| |i|s|_|k|s|h|9|3|:| |1|,| @27|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh93v_01.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_01.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_01.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_01.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_02.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_02.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_02.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_02.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_03.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_03.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_03.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_03.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_04.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_04.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_04.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_04.dump diff --git a/runtime/syntax/testdir/dumps/ksh_generic_05.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_05.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_05.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_05.dump diff --git a/runtime/syntax/testdir/dumps/ksh_generic_06.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_06.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_06.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_06.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_07.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_07.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_07.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_07.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_08.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_08.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_08.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_08.dump diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_09.dump b/runtime/syntax/testdir/dumps/sh_ksh93_generic_09.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93_generic_09.dump rename to runtime/syntax/testdir/dumps/sh_ksh93_generic_09.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_00.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_00.dump similarity index 97% rename from runtime/syntax/testdir/dumps/ksh93u_00.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_00.dump index 47b1b69c37..f06047b11b 100644 --- a/runtime/syntax/testdir/dumps/ksh93u_00.dump +++ b/runtime/syntax/testdir/dumps/sh_ksh93u_00.dump @@ -17,4 +17,4 @@ |a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 |#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 |5|-|2@1| +0#0000000&@70 -@57|1|,|1| @10|T|o|p| +|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| |i|s|_|k|s|h|9|3|u|:| |1|,| @26|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh93u_01.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_01.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_01.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_01.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_02.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_02.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_02.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_02.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_03.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_03.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_03.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_03.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_04.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_04.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_04.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_04.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_05.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_05.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_05.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_05.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_06.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_06.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_06.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_06.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_07.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_07.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_07.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_07.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_08.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_08.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_08.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_08.dump diff --git a/runtime/syntax/testdir/dumps/ksh93u_09.dump b/runtime/syntax/testdir/dumps/sh_ksh93u_09.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93u_09.dump rename to runtime/syntax/testdir/dumps/sh_ksh93u_09.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_00.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_00.dump similarity index 97% rename from runtime/syntax/testdir/dumps/ksh93v_00.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_00.dump index 6c562c057b..e54735ae78 100644 --- a/runtime/syntax/testdir/dumps/ksh93v_00.dump +++ b/runtime/syntax/testdir/dumps/sh_ksh93v_00.dump @@ -17,4 +17,4 @@ |a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63 |#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 |5|-|2@1| +0#0000000&@70 -@57|1|,|1| @10|T|o|p| +|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| |i|s|_|k|s|h|9|3|v|:| |1|,| @26|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/ksh_generic_01.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_01.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_01.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_01.dump diff --git a/runtime/syntax/testdir/dumps/ksh_generic_02.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_02.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_02.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_02.dump diff --git a/runtime/syntax/testdir/dumps/ksh_generic_03.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_03.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_03.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_03.dump diff --git a/runtime/syntax/testdir/dumps/ksh_generic_04.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_04.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh_generic_04.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_04.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_05.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_05.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_05.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_05.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_06.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_06.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_06.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_06.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_07.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_07.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_07.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_07.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_08.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_08.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_08.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_08.dump diff --git a/runtime/syntax/testdir/dumps/ksh93v_09.dump b/runtime/syntax/testdir/dumps/sh_ksh93v_09.dump similarity index 100% rename from runtime/syntax/testdir/dumps/ksh93v_09.dump rename to runtime/syntax/testdir/dumps/sh_ksh93v_09.dump diff --git a/runtime/syntax/testdir/dumps/mksh_00.dump b/runtime/syntax/testdir/dumps/sh_mksh_00.dump similarity index 98% rename from runtime/syntax/testdir/dumps/mksh_00.dump rename to runtime/syntax/testdir/dumps/sh_mksh_00.dump index fcf4c1016a..fb65723ecc 100644 --- a/runtime/syntax/testdir/dumps/mksh_00.dump +++ b/runtime/syntax/testdir/dumps/sh_mksh_00.dump @@ -17,4 +17,4 @@ |a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63 |#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0 |5|-|2@1| +0#0000000&@70 -@57|1|,|1| @10|T|o|p| +|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| |i|s|_|m|k|s|h|:| |1|,| @28|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/mksh_01.dump b/runtime/syntax/testdir/dumps/sh_mksh_01.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_01.dump rename to runtime/syntax/testdir/dumps/sh_mksh_01.dump diff --git a/runtime/syntax/testdir/dumps/mksh_02.dump b/runtime/syntax/testdir/dumps/sh_mksh_02.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_02.dump rename to runtime/syntax/testdir/dumps/sh_mksh_02.dump diff --git a/runtime/syntax/testdir/dumps/mksh_03.dump b/runtime/syntax/testdir/dumps/sh_mksh_03.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_03.dump rename to runtime/syntax/testdir/dumps/sh_mksh_03.dump diff --git a/runtime/syntax/testdir/dumps/mksh_04.dump b/runtime/syntax/testdir/dumps/sh_mksh_04.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_04.dump rename to runtime/syntax/testdir/dumps/sh_mksh_04.dump diff --git a/runtime/syntax/testdir/dumps/mksh_05.dump b/runtime/syntax/testdir/dumps/sh_mksh_05.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_05.dump rename to runtime/syntax/testdir/dumps/sh_mksh_05.dump diff --git a/runtime/syntax/testdir/dumps/mksh_06.dump b/runtime/syntax/testdir/dumps/sh_mksh_06.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_06.dump rename to runtime/syntax/testdir/dumps/sh_mksh_06.dump diff --git a/runtime/syntax/testdir/dumps/mksh_07.dump b/runtime/syntax/testdir/dumps/sh_mksh_07.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_07.dump rename to runtime/syntax/testdir/dumps/sh_mksh_07.dump diff --git a/runtime/syntax/testdir/dumps/mksh_08.dump b/runtime/syntax/testdir/dumps/sh_mksh_08.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_08.dump rename to runtime/syntax/testdir/dumps/sh_mksh_08.dump diff --git a/runtime/syntax/testdir/dumps/mksh_09.dump b/runtime/syntax/testdir/dumps/sh_mksh_09.dump similarity index 100% rename from runtime/syntax/testdir/dumps/mksh_09.dump rename to runtime/syntax/testdir/dumps/sh_mksh_09.dump diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump b/runtime/syntax/testdir/dumps/sh_sundrous_00.dump similarity index 100% rename from runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump rename to runtime/syntax/testdir/dumps/sh_sundrous_00.dump diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump b/runtime/syntax/testdir/dumps/sh_sundrous_01.dump similarity index 100% rename from runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump rename to runtime/syntax/testdir/dumps/sh_sundrous_01.dump diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump b/runtime/syntax/testdir/dumps/sh_sundrous_02.dump similarity index 100% rename from runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump rename to runtime/syntax/testdir/dumps/sh_sundrous_02.dump diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump b/runtime/syntax/testdir/dumps/sh_sundrous_03.dump similarity index 100% rename from runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump rename to runtime/syntax/testdir/dumps/sh_sundrous_03.dump diff --git a/runtime/syntax/testdir/input/ksh_generic.ksh b/runtime/syntax/testdir/input/sh_generic.ksh similarity index 100% rename from runtime/syntax/testdir/input/ksh_generic.ksh rename to runtime/syntax/testdir/input/sh_generic.ksh diff --git a/runtime/syntax/testdir/input/ksh2020.ksh b/runtime/syntax/testdir/input/sh_ksh2020.ksh similarity index 100% rename from runtime/syntax/testdir/input/ksh2020.ksh rename to runtime/syntax/testdir/input/sh_ksh2020.ksh diff --git a/runtime/syntax/testdir/input/ksh88.ksh b/runtime/syntax/testdir/input/sh_ksh88.ksh similarity index 100% rename from runtime/syntax/testdir/input/ksh88.ksh rename to runtime/syntax/testdir/input/sh_ksh88.ksh diff --git a/runtime/syntax/testdir/input/ksh93_generic.ksh b/runtime/syntax/testdir/input/sh_ksh93_generic.ksh similarity index 100% rename from runtime/syntax/testdir/input/ksh93_generic.ksh rename to runtime/syntax/testdir/input/sh_ksh93_generic.ksh diff --git a/runtime/syntax/testdir/input/ksh93u.ksh b/runtime/syntax/testdir/input/sh_ksh93u.ksh similarity index 100% rename from runtime/syntax/testdir/input/ksh93u.ksh rename to runtime/syntax/testdir/input/sh_ksh93u.ksh diff --git a/runtime/syntax/testdir/input/ksh93v.ksh b/runtime/syntax/testdir/input/sh_ksh93v.ksh similarity index 100% rename from runtime/syntax/testdir/input/ksh93v.ksh rename to runtime/syntax/testdir/input/sh_ksh93v.ksh diff --git a/runtime/syntax/testdir/input/mksh.ksh b/runtime/syntax/testdir/input/sh_mksh.ksh similarity index 100% rename from runtime/syntax/testdir/input/mksh.ksh rename to runtime/syntax/testdir/input/sh_mksh.ksh diff --git a/runtime/syntax/testdir/input/sh_bash_sundrous.bash b/runtime/syntax/testdir/input/sh_sundrous.bash similarity index 100% rename from runtime/syntax/testdir/input/sh_bash_sundrous.bash rename to runtime/syntax/testdir/input/sh_sundrous.bash From 5b07aff2f665f290f2ec4a5e6bcf9873a178149a Mon Sep 17 00:00:00 2001 From: GuyBrush Date: Thu, 22 May 2025 22:19:25 +0200 Subject: [PATCH 275/633] patch 9.1.1402: multi-byte mappings not properly stored in session file Problem: multi-byte mappings not properly stored in session file Solution: unescape the mapping before writing out the mapping, prefer single-byte mapping name if possible (Miguel Barro) closes: #17355 Signed-off-by: GuyBrush Signed-off-by: Christian Brabandt --- src/map.c | 13 +++++++++++- src/misc2.c | 9 +++++---- src/testdir/test_mksession_utf8.vim | 31 +++++++++++++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/map.c b/src/map.c index 209d9d237f..2d378b55c2 100644 --- a/src/map.c +++ b/src/map.c @@ -2180,7 +2180,18 @@ put_escstr(FILE *fd, char_u *strstart, int what) { modifiers = str[2]; str += 3; - c = *str; + + // Modifiers can be applied too to multi-byte characters. + p = mb_unescape(&str); + + if (p == NULL) + c = *str; + else + { + // retrieve codepoint (character number) from unescaped string + c = (*mb_ptr2char)(p); + --str; + } } if (c == K_SPECIAL) { diff --git a/src/misc2.c b/src/misc2.c index 79125771ed..11eb51bcf1 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -1213,7 +1213,7 @@ handle_x_keys(int key) get_special_key_name(int c, int modifiers) { static char_u string[MAX_KEY_NAME_LEN + 1]; - int i, idx; + int i, idx, len; int table_idx; string[0] = '<'; @@ -1286,10 +1286,11 @@ get_special_key_name(int c, int modifiers) // Not a special key, only modifiers, output directly else { - if (has_mbyte && (*mb_char2len)(c) > 1) - idx += (*mb_char2bytes)(c, string + idx); - else if (vim_isprintc(c)) + len = (*mb_char2len)(c); + if (len == 1 && vim_isprintc(c)) string[idx++] = c; + else if (has_mbyte && len > 1) + idx += (*mb_char2bytes)(c, string + idx); else { char_u *s = transchar(c); diff --git a/src/testdir/test_mksession_utf8.vim b/src/testdir/test_mksession_utf8.vim index 4e593cc21a..36cb38bea7 100644 --- a/src/testdir/test_mksession_utf8.vim +++ b/src/testdir/test_mksession_utf8.vim @@ -102,4 +102,35 @@ func Test_mksession_utf8() set sessionoptions& splitbelow& fileencoding& endfunc +func Test_session_multibyte_mappings() + + " some characters readily available on european keyboards + let entries = [ + \ ['n', '', ''], + \ ['n', '', ''], + \ ['n', '', ''], + \ ] + for entry in entries + exe entry[0] .. 'map ' .. entry[1] .. ' ' .. entry[2] + endfor + + mkvimrc Xtestvimrc + + nmapclear + + for entry in entries + call assert_equal('', maparg(entry[1], entry[0])) + endfor + + source Xtestvimrc + + for entry in entries + call assert_equal(entry[2], maparg(entry[1], entry[0])) + endfor + + nmapclear + + call delete('Xtestvimrc') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 252c1437bf..1f5cd0222e 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1402, /**/ 1401, /**/ From 598bbb194163931914c45ae1fa4268e589ef3763 Mon Sep 17 00:00:00 2001 From: Hirohito Higashi Date: Thu, 22 May 2025 22:41:05 +0200 Subject: [PATCH 276/633] patch 9.1.1403: expansion of 'tabpanelopt' value adds wrong values Problem: expansion of 'tabpanelopt' value adds wrong values (Shane-XB-Qian, after v9.1.1391) Solution: update tabpanelopt expansion function and expand only valid values (Hirohito Higashi) related: #17263 closes: #17359 Signed-off-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- src/optiondefs.h | 3 ++- src/optionstr.c | 27 ++++++++++++++++++++++++--- src/tabpanel.c | 22 ++++++++++++++-------- src/version.c | 2 ++ 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/optiondefs.h b/src/optiondefs.h index cb4376c716..5d9f388aa2 100644 --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -2537,7 +2537,8 @@ static struct vimoption options[] = {"tabpanel", "tpl", P_STRING|P_VI_DEF|P_RALL, (char_u *)&p_tpl, PV_NONE, NULL, NULL, {(char_u *)"", (char_u *)0L} SCTX_INIT}, - {"tabpanelopt","tplo", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP, + {"tabpanelopt","tplo", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_COLON + |P_NODUP, (char_u *)&p_tplo, PV_NONE, did_set_tabpanelopt, expand_set_tabpanelopt, {(char_u *)"", (char_u *)0L} diff --git a/src/optionstr.c b/src/optionstr.c index 553b55f687..b286767e3f 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -29,7 +29,9 @@ static char *(p_bo_values[]) = {"all", "backspace", "cursor", "complete", static char *(p_briopt_values[]) = {"shift:", "min:", "sbr", "list:", "column:", NULL}; #endif #if defined(FEAT_TABPANEL) -static char *(p_tpl_values[]) = {"wrap", "align:", "columns:", "vert:", NULL}; +// Note: Keep this in sync with tabpanelopt_changed() +static char *(p_tplo_values[]) = {"align:", "columns:", "vert", NULL}; +static char *(p_tplo_align_values[]) = {"left", "right", NULL}; #endif #if defined(FEAT_DIFF) // Note: Keep this in sync with diffopt_changed() @@ -3567,10 +3569,29 @@ did_set_tabpanelopt(optset_T *args) int expand_set_tabpanelopt(optexpand_T *args, int *numMatches, char_u ***matches) { + expand_T *xp = args->oe_xp; + + if (xp->xp_pattern > args->oe_set_arg && *(xp->xp_pattern-1) == ':') + { + // Within "align:", we have a subgroup of possible options. + int align_len = (int)STRLEN("align:"); + if (xp->xp_pattern - args->oe_set_arg >= align_len && + STRNCMP(xp->xp_pattern - align_len, "align:", align_len) == 0) + { + return expand_set_opt_string( + args, + p_tplo_align_values, + ARRAY_LENGTH(p_tplo_align_values) - 1, + numMatches, + matches); + } + return FAIL; + } + return expand_set_opt_string( args, - p_tpl_values, - ARRAY_LENGTH(p_tpl_values) - 1, + p_tplo_values, + ARRAY_LENGTH(p_tplo_values) - 1, numMatches, matches); } diff --git a/src/tabpanel.c b/src/tabpanel.c index fb5a957a3e..81e2c0c079 100644 --- a/src/tabpanel.c +++ b/src/tabpanel.c @@ -64,15 +64,21 @@ tabpanelopt_changed(void) p = p_tplo; while (*p != NUL) { - if (STRNCMP(p, "align:left", 10) == 0) + if (STRNCMP(p, "align:", 6) == 0) { - p += 10; - new_align = ALIGN_LEFT; - } - else if (STRNCMP(p, "align:right", 11) == 0) - { - p += 11; - new_align = ALIGN_RIGHT; + p += 6; + if (STRNCMP(p, "left", 4) == 0) + { + p += 4; + new_align = ALIGN_LEFT; + } + else if (STRNCMP(p, "right", 5) == 0) + { + p += 5; + new_align = ALIGN_RIGHT; + } + else + return FAIL; } else if (STRNCMP(p, "columns:", 8) == 0 && VIM_ISDIGIT(p[8])) { diff --git a/src/version.c b/src/version.c index 1f5cd0222e..f94dbe3e43 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1403, /**/ 1402, /**/ From f4b2fce71c3b5a4f1cada0e852393efbd493e331 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Thu, 22 May 2025 22:48:11 +0200 Subject: [PATCH 277/633] runtime(vim): Update base-syntax, fix missing luaParenError error We shouldn't assume that the luaParenError syntax group is present in the, possibly custom, included file or that it hasn't already been removed. However, issue #11277 has been fixed so it no longer needs to be cleared. Fixes comment https://github.com/vim/vim/pull/15375#issuecomment-2899791944 related: #15375 closes: #17357 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/generator/vim.vim.base | 3 +-- runtime/syntax/vim.vim | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 99d0480dc9..7ee8e71aa9 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 May 17 +" Last Change: 2025 May 22 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -1551,7 +1551,6 @@ let s:interfaces = get(g:, "vimsyn_embed", "lP") if s:interfaces =~# 'l' syn include @vimLuaScript syntax/lua.vim unlet b:current_syntax - syn clear luaParenError " See issue #11277 endif syn keyword vimLua lua skipwhite nextgroup=vimLuaHeredoc,vimLuaStatement diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index d0f3202623..0181a9027e 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 May 17 +" Last Change: 2025 May 22 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -1612,7 +1612,6 @@ let s:interfaces = get(g:, "vimsyn_embed", "lP") if s:interfaces =~# 'l' syn include @vimLuaScript syntax/lua.vim unlet b:current_syntax - syn clear luaParenError " See issue #11277 endif syn keyword vimLua lua skipwhite nextgroup=vimLuaHeredoc,vimLuaStatement From e8302da74aee55fe8f6496b5b711fed7d92318c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20B=C3=ACnh=20An?= <111893501+brianhuster@users.noreply.github.com> Date: Thu, 22 May 2025 22:53:28 +0200 Subject: [PATCH 278/633] patch 9.1.1404: wrong link to Chapter 2 in new-tutor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: wrong link to Chapter 2 in vim-01-beginner.tutor Solution: Fix the link to Chapter 2, add test for links in tutor files (Phạm Bình An) In order to write the test, I expose the function `s:GlobTutorials` as `tutor#GlobTutorials` and make it also accept a `locale` argument. closes: #17356 Signed-off-by: Phạm Bình An <111893501+brianhuster@users.noreply.github.com> Signed-off-by: Christian Brabandt --- runtime/autoload/tutor.vim | 10 ++++++---- runtime/tutor/en/vim-01-beginner.tutor | 2 +- src/testdir/test_plugin_tutor.vim | 18 ++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/runtime/autoload/tutor.vim b/runtime/autoload/tutor.vim index 6ab796020d..b21e20f814 100644 --- a/runtime/autoload/tutor.vim +++ b/runtime/autoload/tutor.vim @@ -157,12 +157,14 @@ function! s:Sort(a, b) return retval endfunction -function! s:GlobTutorials(name) +" returns a list of all tutor files matching the given name +function! tutor#GlobTutorials(name, locale) + let locale = a:locale " search for tutorials: " 1. non-localized let l:tutors = s:GlobPath(&rtp, 'tutor/'.a:name.'.tutor') " 2. localized for current locale - let l:locale_tutors = s:GlobPath(&rtp, 'tutor/'.s:Locale()[0].'/'.a:name.'.tutor') + let l:locale_tutors = s:GlobPath(&rtp, 'tutor/'.locale.'/'.a:name.'.tutor') " 3. fallback to 'en' if len(l:locale_tutors) == 0 let l:locale_tutors = s:GlobPath(&rtp, 'tutor/en/'.a:name.'.tutor') @@ -187,7 +189,7 @@ function! tutor#TutorCmd(tutor_name) let l:tutor_name = fnamemodify(l:tutor_name, ':r') endif - let l:tutors = s:GlobTutorials(l:tutor_name) + let l:tutors = tutor#GlobTutorials(l:tutor_name, s:Locale()[0]) if len(l:tutors) == 0 echom "No tutorial with that name found" @@ -214,7 +216,7 @@ function! tutor#TutorCmd(tutor_name) endfunction function! tutor#TutorCmdComplete(lead,line,pos) - let l:tutors = s:GlobTutorials('*') + let l:tutors = tutor#GlobTutorials('*', s:Locale()[0]) let l:names = uniq(sort(map(l:tutors, 'fnamemodify(v:val, ":t:r")'), 's:Sort')) return join(l:names, "\n") endfunction diff --git a/runtime/tutor/en/vim-01-beginner.tutor b/runtime/tutor/en/vim-01-beginner.tutor index 86efa78561..8af5d465cf 100644 --- a/runtime/tutor/en/vim-01-beginner.tutor +++ b/runtime/tutor/en/vim-01-beginner.tutor @@ -970,7 +970,7 @@ NOTE: Completion works for many commands. It is especially useful for # CONCLUSION This concludes Chapter 1 of the Vim Tutor. Consider continuing with -[Chapter 2](@tutor:tutor:vim-02-beginner). +[Chapter 2](@tutor:vim-02-beginner). This was intended to give a brief overview of the Vim editor, just enough to allow you to use the editor fairly easily. It is far from complete as Vim has diff --git a/src/testdir/test_plugin_tutor.vim b/src/testdir/test_plugin_tutor.vim index 61cea3faff..3dc46fd16e 100644 --- a/src/testdir/test_plugin_tutor.vim +++ b/src/testdir/test_plugin_tutor.vim @@ -14,3 +14,21 @@ func Test_auto_enable_interactive() call assert_true(empty(&buftype)) call assert_match('tutor#EnableInteractive', b:undo_ftplugin) endfunc + +func Test_tutor_link() + let tutor_files = globpath($VIMRUNTIME, 'tutor/**/*.tutor', 0, 1) + let pattern = '\[.\{-}@tutor:\zs[^)\]]*\ze[)\]]' + + for tutor_file in tutor_files + let lang = fnamemodify(tutor_file, ':h:t') + if lang == 'tutor' + let lang = 'en' + endif + + let text = readfile(tutor_file) + let links = matchstrlist(text, pattern)->map({_, v -> v.text}) + for link in links + call assert_true(tutor#GlobTutorials(link, lang)->len() > 0) + endfor + endfor +endfunc diff --git a/src/version.c b/src/version.c index f94dbe3e43..9cecc0be8b 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1404, /**/ 1403, /**/ From 9ff1e598e8ee373b5623219ed38ad49470ec7938 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 23 May 2025 17:16:17 +0200 Subject: [PATCH 279/633] patch 9.1.1405: tests: no test for mapping with special keys in session file Problem: tests: no test for mapping with special keys in session file. Solution: Add a special keys to an existing test. Also test with UTF-8 characters containing 0x80 or 0x9b bytes (zeertzjq). closes: #17360 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/testdir/test_mksession.vim | 8 ++++---- src/testdir/test_mksession_utf8.vim | 11 +++++++++-- src/version.c | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/testdir/test_mksession.vim b/src/testdir/test_mksession.vim index 72a9376c3e..bbb42f94ce 100644 --- a/src/testdir/test_mksession.vim +++ b/src/testdir/test_mksession.vim @@ -1153,10 +1153,10 @@ endfunc func Test_mkvimrc() let entries = [ \ ['', 'nothing', ''], - \ ['n', 'normal', 'NORMAL'], - \ ['v', 'visual', 'VISUAL'], - \ ['s', 'select', 'SELECT'], - \ ['x', 'visualonly', 'VISUALONLY'], + \ ['n', 'normal', 'NORMAL'], + \ ['v', 'visual', 'VISUAL'], + \ ['s', 'select', 'SELECT'], + \ ['x', 'visualonly', 'VISUALONLY'], \ ['o', 'operator', 'OPERATOR'], \ ['i', 'insert', 'INSERT'], \ ['l', 'lang', 'LANG'], diff --git a/src/testdir/test_mksession_utf8.vim b/src/testdir/test_mksession_utf8.vim index 36cb38bea7..387d128f6e 100644 --- a/src/testdir/test_mksession_utf8.vim +++ b/src/testdir/test_mksession_utf8.vim @@ -103,12 +103,19 @@ func Test_mksession_utf8() endfunc func Test_session_multibyte_mappings() - - " some characters readily available on european keyboards + " some characters readily available on european keyboards, + " as well as characters containing 0x80 or 0x9b bytes let entries = [ + \ ['n', 'ç', 'ç'], + \ ['n', 'º', 'º'], + \ ['n', '¡', '¡'], \ ['n', '', ''], \ ['n', '', ''], \ ['n', '', ''], + \ ['n', '…', 'ě'], + \ ['n', 'ě', '…'], + \ ['n', '', ''], + \ ['n', '', ''], \ ] for entry in entries exe entry[0] .. 'map ' .. entry[1] .. ' ' .. entry[2] diff --git a/src/version.c b/src/version.c index 9cecc0be8b..c45c65e7b7 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1405, /**/ 1404, /**/ From 9772025d24e939fd84b85748ce35c26874c05775 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Fri, 23 May 2025 17:39:44 +0200 Subject: [PATCH 280/633] patch 9.1.1406: crash when importing invalid tuple Problem: crash when importing invalid tuple (Yang LUO, Yanju Chen) Solution: set type to VAR_UNKNOWN, so that it isn't freed (Yegappan Lakshmanan) closes: #17362 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- src/testdir/test_tuple.vim | 11 +++++++++++ src/tuple.c | 3 +++ src/version.c | 2 ++ 3 files changed, 16 insertions(+) diff --git a/src/testdir/test_tuple.vim b/src/testdir/test_tuple.vim index e767851af2..45f730d86b 100644 --- a/src/testdir/test_tuple.vim +++ b/src/testdir/test_tuple.vim @@ -1586,6 +1586,17 @@ func Test_recursive_tuple_eval_fails() \ 'E121: Undefined variable: pat']) endfunc +" The following used to crash Vim +func Test_import_invalid_tuple() + let lines =<< trim END + imp(",G0}11*f[+\x","#| + END + new + call setline(1, lines) + call assert_fails('source', 'E114: Missing double quote: "#|') + bw! +endfunc + " Test for add() with a tuple func Test_tuple_add() let lines =<< trim END diff --git a/src/tuple.c b/src/tuple.c index eff4bdccc4..9ca1f34092 100644 --- a/src/tuple.c +++ b/src/tuple.c @@ -518,6 +518,9 @@ eval_tuple(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int do_error) // Add the first item to the tuple from "rettv" if (tuple_append_tv(tuple, rettv) == FAIL) return FAIL; + // The first item in "rettv" is added to the tuple. Set the rettv + // type to unknown, so that the caller doesn't free it. + rettv->v_type = VAR_UNKNOWN; } } diff --git a/src/version.c b/src/version.c index c45c65e7b7..b9af08a7de 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1406, /**/ 1405, /**/ From 5717ee33db0048a496e8bed0b0cb20133b3f76ca Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sun, 25 May 2025 16:59:50 +0200 Subject: [PATCH 281/633] patch 9.1.1407: Can't use getpos('v') in OptionSet when using setbufvar() Problem: Can't use getpos('v') in OptionSet when using setbufvar(). Solution: Don't reset Visual selection when switching to the same buffer (zeertzjq). closes: #17373 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/autocmd.c | 8 +++++--- src/testdir/test_autocmd.vim | 21 +++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/autocmd.c b/src/autocmd.c index 3d21a937bc..6a5f035d2e 100644 --- a/src/autocmd.c +++ b/src/autocmd.c @@ -1585,9 +1585,10 @@ aucmd_prepbuf( #ifdef FEAT_AUTOCHDIR int save_acd; #endif + int same_buffer = buf == curbuf; // Find a window that is for the new buffer - if (buf == curbuf) // be quick when buf is curbuf + if (same_buffer) // be quick when buf is curbuf win = curwin; else FOR_ALL_WINDOWS(win) @@ -1677,9 +1678,10 @@ aucmd_prepbuf( aco->new_curwin_id = curwin->w_id; set_bufref(&aco->new_curbuf, curbuf); - // disable the Visual area, the position may be invalid in another buffer aco->save_VIsual_active = VIsual_active; - VIsual_active = FALSE; + if (!same_buffer) + // disable the Visual area, position may be invalid in another buffer + VIsual_active = FALSE; } /* diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index 1988807f75..dfeb93f06d 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -3761,6 +3761,27 @@ func Test_Visual_doautoall_redraw() %bwipe! endfunc +func Test_get_Visual_selection_in_curbuf_autocmd() + call test_override('starting', 1) + new + autocmd OptionSet list let b:text = getregion(getpos('.'), getpos('v')) + call setline(1, 'foo bar baz') + + normal! gg0fbvtb + setlocal list + call assert_equal(['bar '], b:text) + exe "normal! \" + + normal! v0 + call setbufvar('%', '&list', v:false) + call assert_equal(['foo bar '], b:text) + exe "normal! \" + + autocmd! OptionSet list + bwipe! + call test_override('starting', 0) +endfunc + " This was using freed memory. func Test_BufNew_arglocal() arglocal diff --git a/src/version.c b/src/version.c index b9af08a7de..637f178a03 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1407, /**/ 1406, /**/ From c8b7e6129a057fbcbff0d9e73dd8a476fd97a813 Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Sun, 25 May 2025 17:01:45 +0200 Subject: [PATCH 282/633] runtime: Add license information for HCL and Terraform runtime files fixes: #17372 closes: #17377 Signed-off-by: Gregory Anders Signed-off-by: Christian Brabandt --- runtime/autoload/hcl.vim | 15 +++++++++++++++ runtime/ftplugin/hcl.vim | 6 +++--- runtime/indent/hcl.vim | 15 +++++++++++++++ runtime/syntax/hcl.vim | 15 +++++++++++++++ runtime/syntax/terraform.vim | 15 +++++++++++++++ 5 files changed, 63 insertions(+), 3 deletions(-) diff --git a/runtime/autoload/hcl.vim b/runtime/autoload/hcl.vim index 2215fc8f27..e45a4e31ba 100644 --- a/runtime/autoload/hcl.vim +++ b/runtime/autoload/hcl.vim @@ -2,6 +2,21 @@ " Maintainer: Gregory Anders " Last Change: 2024-09-03 " Based on: https://github.com/hashivim/vim-terraform +" License: ISC +" +" Copyright (c) 2014-2016 Mark Cornick +" +" Permission to use, copy, modify, and/or distribute this software for any purpose +" with or without fee is hereby granted, provided that the above copyright notice +" and this permission notice appear in all copies. +" +" THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +" FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +" OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +" THIS SOFTWARE. function! hcl#indentexpr(lnum) " Beginning of the file should have no indent diff --git a/runtime/ftplugin/hcl.vim b/runtime/ftplugin/hcl.vim index c47a0378d0..57578c0e17 100644 --- a/runtime/ftplugin/hcl.vim +++ b/runtime/ftplugin/hcl.vim @@ -1,7 +1,7 @@ " Vim filetype plugin -" Language: HCL -" Maintainer: Gregory Anders -" Last Change: 2024-09-03 +" Language: HCL +" Maintainer: Gregory Anders +" Last Change: 2024-09-03 if exists('b:did_ftplugin') finish diff --git a/runtime/indent/hcl.vim b/runtime/indent/hcl.vim index b13d2c5649..d6b8b1ad8a 100644 --- a/runtime/indent/hcl.vim +++ b/runtime/indent/hcl.vim @@ -2,7 +2,22 @@ " Language: HCL " Maintainer: Gregory Anders " Upstream: https://github.com/hashivim/vim-terraform +" License: ISC " Last Change: 2024-09-03 +" +" Copyright (c) 2014-2016 Mark Cornick +" +" Permission to use, copy, modify, and/or distribute this software for any purpose +" with or without fee is hereby granted, provided that the above copyright notice +" and this permission notice appear in all copies. +" +" THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +" FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +" OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +" THIS SOFTWARE. if exists('b:did_indent') finish diff --git a/runtime/syntax/hcl.vim b/runtime/syntax/hcl.vim index 5e9349ab38..fc1fc5ae37 100644 --- a/runtime/syntax/hcl.vim +++ b/runtime/syntax/hcl.vim @@ -3,6 +3,21 @@ " Maintainer: Gregory Anders " Upstream: https://github.com/hashivim/vim-terraform " Last Change: 2024-09-03 +" License: ISC +" +" Copyright (c) 2014-2016 Mark Cornick +" +" Permission to use, copy, modify, and/or distribute this software for any purpose +" with or without fee is hereby granted, provided that the above copyright notice +" and this permission notice appear in all copies. +" +" THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +" FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +" OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +" THIS SOFTWARE. if exists('b:current_syntax') finish diff --git a/runtime/syntax/terraform.vim b/runtime/syntax/terraform.vim index 559dc79568..1be5698d59 100644 --- a/runtime/syntax/terraform.vim +++ b/runtime/syntax/terraform.vim @@ -3,6 +3,21 @@ " Maintainer: Gregory Anders " Upstream: https://github.com/hashivim/vim-terraform " Last Change: 2024-09-03 +" License: ISC +" +" Copyright (c) 2014-2016 Mark Cornick +" +" Permission to use, copy, modify, and/or distribute this software for any purpose +" with or without fee is hereby granted, provided that the above copyright notice +" and this permission notice appear in all copies. +" +" THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +" FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +" OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +" THIS SOFTWARE. if exists('b:current_syntax') finish From 69c3493adc4db162447893ca5b7f224f9432a19a Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sun, 25 May 2025 17:07:51 +0200 Subject: [PATCH 283/633] runtime(doc): clarify license conditions for distributed runtime files related: #17372 Signed-off-by: Christian Brabandt --- runtime/doc/uganda.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/runtime/doc/uganda.txt b/runtime/doc/uganda.txt index 17590e5cb1..7f7a6660da 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 Aug 14 +*uganda.txt* For Vim version 9.1. Last change: 2025 May 25 VIM REFERENCE MANUAL by Bram Moolenaar @@ -127,6 +127,9 @@ Note: contact information with the "--with-modified-by" configure argument or the MODIFIED_BY define. +- This license applies to the source code of Vim. However, different license + conditions may apply to some runtime files included with Vim; these will be + specified in the header of each respective file. ============================================================================== Kibaale Children's Centre *kcc* *Kibaale* *charity* From 0546068aaef2b1a40faa2945ef7eba249739f219 Mon Sep 17 00:00:00 2001 From: glepnir Date: Mon, 26 May 2025 18:23:27 +0200 Subject: [PATCH 284/633] patch 9.1.1408: not easily possible to complete from register content Problem: not easily possible to complete from register content Solution: add register-completion submode using i_CTRL-X_CTRL-R (glepnir) closes: #17354 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- runtime/doc/index.txt | 3 +- runtime/doc/insert.txt | 18 ++++- runtime/doc/options.txt | 5 +- runtime/doc/tags | 2 + runtime/doc/todo.txt | 3 +- runtime/doc/usr_24.txt | 1 + runtime/doc/version9.txt | 5 +- runtime/doc/vi_diff.txt | 1 + src/edit.c | 2 + src/insexpand.c | 107 ++++++++++++++++++++++++++++-- src/proto/insexpand.pro | 1 + src/testdir/test_ins_complete.vim | 81 ++++++++++++++++++++++ src/version.c | 2 + 13 files changed, 218 insertions(+), 13 deletions(-) diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt index 00a09ae145..d03d81effa 100644 --- a/runtime/doc/index.txt +++ b/runtime/doc/index.txt @@ -1,4 +1,4 @@ -*index.txt* For Vim version 9.1. Last change: 2025 May 14 +*index.txt* For Vim version 9.1. Last change: 2025 May 26 VIM REFERENCE MANUAL by Bram Moolenaar @@ -163,6 +163,7 @@ commands in CTRL-X submode *i_CTRL-X_index* |i_CTRL-X_CTRL-N| CTRL-X CTRL-N next completion |i_CTRL-X_CTRL-O| CTRL-X CTRL-O omni completion |i_CTRL-X_CTRL-P| CTRL-X CTRL-P previous completion +|i_CTRL-X_CTRL-R| CTRL-X CTRL-R complete words from registers |i_CTRL-X_CTRL-S| CTRL-X CTRL-S spelling suggestions |i_CTRL-X_CTRL-T| CTRL-X CTRL-T complete identifiers from thesaurus |i_CTRL-X_CTRL-Y| CTRL-X CTRL-Y scroll down diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt index f3d92b290b..553183d74d 100644 --- a/runtime/doc/insert.txt +++ b/runtime/doc/insert.txt @@ -1,4 +1,4 @@ -*insert.txt* For Vim version 9.1. Last change: 2025 May 08 +*insert.txt* For Vim version 9.1. Last change: 2025 May 26 VIM REFERENCE MANUAL by Bram Moolenaar @@ -649,6 +649,7 @@ Completion can be done for: 11. omni completion |i_CTRL-X_CTRL-O| 12. Spelling suggestions |i_CTRL-X_s| 13. keywords in 'complete' |i_CTRL-N| |i_CTRL-P| +14. words from registers |i_CTRL-X_CTRL-R| Additionally, |i_CTRL-X_CTRL-Z| stops completion without changing the text. @@ -1019,6 +1020,21 @@ CTRL-X CTRL-V Guess what kind of item is in front of the cursor and completion, for example: > :imap + +Completing words from registers *compl-register-words* + *i_CTRL-X_CTRL-R* +CTRL-X CTRL-R Guess what kind of item is in front of the cursor from + all registers and find the first match for it. + Further use of CTRL-R (without CTRL-X) will insert the + register content, see |i_CTRL-R|. + 'ignorecase' applies to the matching. + + CTRL-N Search forwards for next match. This match replaces + the previous one. + + CTRL-P Search backwards for previous match. This match + replaces the previous one. + User defined completion *compl-function* Completion is done by a function that can be defined by the user with the diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index e74c5e8a59..f0a7e9eefc 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 9.1. Last change: 2025 May 16 +*options.txt* For Vim version 9.1. Last change: 2025 May 26 VIM REFERENCE MANUAL by Bram Moolenaar @@ -4658,7 +4658,8 @@ A jump table for the options with a short description can be found at |Q_op|. 'ignorecase' 'ic' boolean (default off) global Ignore case in search patterns, |cmdline-completion|, when - searching in the tags file, and non-|Vim9| |expr-==|. + searching in the tags file, non-|Vim9| |expr-==| and for Insert-mode + completion |ins-completion|. Also see 'smartcase' and 'tagcase'. Can be overruled by using "\c" or "\C" in the pattern, see |/ignorecase|. diff --git a/runtime/doc/tags b/runtime/doc/tags index e58621298a..d3c77d17eb 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -6654,6 +6654,7 @@ compl-generic insert.txt /*compl-generic* compl-keyword insert.txt /*compl-keyword* compl-omni insert.txt /*compl-omni* compl-omni-filetypes insert.txt /*compl-omni-filetypes* +compl-register-words insert.txt /*compl-register-words* compl-spelling insert.txt /*compl-spelling* compl-states insert.txt /*compl-states* compl-stop insert.txt /*compl-stop* @@ -8425,6 +8426,7 @@ i_CTRL-X_CTRL-L insert.txt /*i_CTRL-X_CTRL-L* i_CTRL-X_CTRL-N insert.txt /*i_CTRL-X_CTRL-N* i_CTRL-X_CTRL-O insert.txt /*i_CTRL-X_CTRL-O* i_CTRL-X_CTRL-P insert.txt /*i_CTRL-X_CTRL-P* +i_CTRL-X_CTRL-R insert.txt /*i_CTRL-X_CTRL-R* i_CTRL-X_CTRL-S insert.txt /*i_CTRL-X_CTRL-S* i_CTRL-X_CTRL-T insert.txt /*i_CTRL-X_CTRL-T* i_CTRL-X_CTRL-U insert.txt /*i_CTRL-X_CTRL-U* diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index 5223687870..578f5e8fe6 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 9.1. Last change: 2025 Apr 24 +*todo.txt* For Vim version 9.1. Last change: 2025 May 26 VIM REFERENCE MANUAL by Bram Moolenaar @@ -4764,7 +4764,6 @@ Insert mode completion/expansion: 7 When expanding $HOME/dir with ^X^F keep the $HOME (with an option?). 7 Add CTRL-X command in Insert mode like CTRL-X CTRL-N, that completes WORDS instead of words. -8 Add CTRL-X CTRL-R: complete words from register contents. 8 Add completion of previously inserted texts (like what CTRL-A does). Requires remembering a number of insertions. 8 Add 'f' flag to 'complete': Expand file names. diff --git a/runtime/doc/usr_24.txt b/runtime/doc/usr_24.txt index 72f43f0681..250bd17ea6 100644 --- a/runtime/doc/usr_24.txt +++ b/runtime/doc/usr_24.txt @@ -187,6 +187,7 @@ with a certain type of item: CTRL-X CTRL-D macro definitions (also in included files) CTRL-X CTRL-I current and included files CTRL-X CTRL-K words from a dictionary + CTRL-X CTRL-R words from registers CTRL-X CTRL-T words from a thesaurus CTRL-X CTRL-] tags CTRL-X CTRL-V Vim command line diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index e03deedb8d..662cb17718 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 May 16 +*version9.txt* For Vim version 9.1. Last change: 2025 May 26 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41586,6 +41586,9 @@ Support for the |Tuple| data type in Vim script and Vim9 script. Support for a vertical |tabpanel| window similar to the 'tabline'. +New Insert-mode completion: |i_CTRL-X_CTRL-R| to complete words from +registers. + *changed-9.2* Changed~ ------- diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt index 46db57a458..ae14968bbe 100644 --- a/runtime/doc/vi_diff.txt +++ b/runtime/doc/vi_diff.txt @@ -338,6 +338,7 @@ Insert-mode completion. |ins-completion| |i_CTRL-X_CTRL-D| definitions or macros |i_CTRL-X_CTRL-O| Omni completion: clever completion specifically for a file type + |i_CTRL-X_CTRL-R| words from registers etc. Long line support. |'wrap'| |'linebreak'| diff --git a/src/edit.c b/src/edit.c index 4d45e8ef7c..366108883e 100644 --- a/src/edit.c +++ b/src/edit.c @@ -929,6 +929,8 @@ edit( break; case Ctrl_R: // insert the contents of a register + if (ctrl_x_mode_register() && !ins_compl_active()) + goto docomplete; ins_reg(); auto_format(FALSE, TRUE); inserted_space = FALSE; diff --git a/src/insexpand.c b/src/insexpand.c index 76fb8f3506..c7d6fd428c 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -38,6 +38,7 @@ # define CTRL_X_LOCAL_MSG 15 // only used in "ctrl_x_msgs" # define CTRL_X_EVAL 16 // for builtin function complete() # define CTRL_X_CMDLINE_CTRL_X 17 // CTRL-X typed in CTRL_X_CMDLINE +# define CTRL_X_REGISTER 18 // complete words from registers # define CTRL_X_MSG(i) ctrl_x_msgs[(i) & ~CTRL_X_WANT_IDENT] @@ -45,7 +46,7 @@ static char *ctrl_x_msgs[] = { N_(" Keyword completion (^N^P)"), // CTRL_X_NORMAL, ^P/^N compl. - N_(" ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"), + N_(" ^X mode (^]^D^E^F^I^K^L^N^O^P^Rs^U^V^Y)"), NULL, // CTRL_X_SCROLL: depends on state N_(" Whole line completion (^L^N^P)"), N_(" File name completion (^F^N^P)"), @@ -62,6 +63,7 @@ static char *ctrl_x_msgs[] = N_(" Keyword Local completion (^N^P)"), NULL, // CTRL_X_EVAL doesn't use msg. N_(" Command-line completion (^V^N^P)"), + N_(" Register completion (^N^P)"), }; #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL) @@ -84,6 +86,7 @@ static char *ctrl_x_mode_names[] = { NULL, // CTRL_X_LOCAL_MSG only used in "ctrl_x_msgs" "eval", "cmdline", + "register", }; #endif @@ -330,6 +333,8 @@ static int ctrl_x_mode_eval(void) { return ctrl_x_mode == CTRL_X_EVAL; } int ctrl_x_mode_line_or_eval(void) { return ctrl_x_mode == CTRL_X_WHOLE_LINE || ctrl_x_mode == CTRL_X_EVAL; } +int ctrl_x_mode_register(void) + { return ctrl_x_mode == CTRL_X_REGISTER; } /* * Whether other than default completion has been selected. @@ -460,7 +465,7 @@ has_compl_option(int dict_opt) vim_is_ctrl_x_key(int c) { // Always allow ^R - let its results then be checked - if (c == Ctrl_R) + if (c == Ctrl_R && ctrl_x_mode != CTRL_X_REGISTER) return TRUE; // Accept and if the popup menu is visible. @@ -479,7 +484,7 @@ vim_is_ctrl_x_key(int c) || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O || c == Ctrl_S || c == Ctrl_K || c == 's' - || c == Ctrl_Z); + || c == Ctrl_Z || c == Ctrl_R); case CTRL_X_SCROLL: return (c == Ctrl_Y || c == Ctrl_E); case CTRL_X_WHOLE_LINE: @@ -511,6 +516,8 @@ vim_is_ctrl_x_key(int c) return (c == Ctrl_S || c == Ctrl_P || c == Ctrl_N); case CTRL_X_EVAL: return (c == Ctrl_P || c == Ctrl_N); + case CTRL_X_REGISTER: + return (c == Ctrl_R || c == Ctrl_P || c == Ctrl_N); } internal_error("vim_is_ctrl_x_key()"); return FALSE; @@ -2535,7 +2542,7 @@ ins_compl_addfrommatch(void) static int set_ctrl_x_mode(int c) { - int retval = FALSE; + int retval = FALSE; switch (c) { @@ -2563,8 +2570,11 @@ set_ctrl_x_mode(int c) ctrl_x_mode = CTRL_X_DICTIONARY; break; case Ctrl_R: - // Register insertion without exiting CTRL-X mode - // Simply allow ^R to happen without affecting ^X mode + // When CTRL-R is followed by '=', don't trigger register completion + // This allows expressions like =func() to work normally + if (vpeekc() == '=') + break; + ctrl_x_mode = CTRL_X_REGISTER; break; case Ctrl_T: // complete words from a thesaurus @@ -4783,6 +4793,83 @@ expand_cpt_function(callback_T *cb) } #endif +/* + * Get completion matches from register contents. + * Extracts words from all available registers and adds them to the completion list. + */ + static void +get_register_completion(void) +{ + int dir = compl_direction; + yankreg_T *reg = NULL; + void *reg_ptr = NULL; + + for (int i = 0; i < NUM_REGISTERS; i++) + { + int regname = 0; + + if (i == 0) + regname = '"'; // unnamed register + else if (i < 10) + regname = '0' + i; + else if (i == DELETION_REGISTER) + regname = '-'; +#ifdef FEAT_CLIPBOARD + else if (i == STAR_REGISTER) + regname = '*'; + else if (i == PLUS_REGISTER) + regname = '+'; +#endif + else + regname = 'a' + i - 10; + + // Skip invalid or black hole register + if (!valid_yank_reg(regname, FALSE) || regname == '_') + continue; + + reg_ptr = get_register(regname, FALSE); + if (reg_ptr == NULL) + continue; + + reg = (yankreg_T *)reg_ptr; + + for (int j = 0; j < reg->y_size; j++) + { + char_u *str = reg->y_array[j].string; + if (str == NULL) + continue; + + char_u *p = str; + while (*p != NUL) + { + p = find_word_start(p); + if (*p == NUL) + break; + + char_u *word_end = find_word_end(p); + + // Add the word to the completion list + int len = (int)(word_end - p); + if (len > 0 && (!compl_orig_text.string + || (p_ic ? STRNICMP(p, compl_orig_text.string, + compl_orig_text.length) == 0 + : STRNCMP(p, compl_orig_text.string, + compl_orig_text.length) == 0))) + { + if (ins_compl_add_infercase(p, len, p_ic, NULL, + dir, FALSE, 0) == OK) + dir = FORWARD; + } + + p = word_end; + } + } + + // Free the register copy + put_register(regname, reg_ptr); + } +} + /* * get the next set of completion matches for "type". * Returns TRUE if a new match is found. Otherwise returns FALSE. @@ -4838,6 +4925,10 @@ get_next_completion_match(int type, ins_compl_next_state_T *st, pos_T *ini) get_next_spell_completion(st->first_match_pos.lnum); break; + case CTRL_X_REGISTER: + get_register_completion(); + break; + default: // normal ^P/^N and ^X^L found_new_match = get_next_default_completion(st, ini); if (found_new_match == FAIL && st->ins_buf == curbuf) @@ -6125,6 +6216,10 @@ compl_get_info(char_u *line, int startcol, colnr_T curs_col, int *line_invalid) return FAIL; *line_invalid = TRUE; // "line" may have become invalid } + else if (ctrl_x_mode_register()) + { + return get_normal_compl_info(line, startcol, curs_col); + } else { internal_error("ins_complete()"); diff --git a/src/proto/insexpand.pro b/src/proto/insexpand.pro index e9ff62661b..8965aca4c7 100644 --- a/src/proto/insexpand.pro +++ b/src/proto/insexpand.pro @@ -17,6 +17,7 @@ int ctrl_x_mode_spell(void); int ctrl_x_mode_line_or_eval(void); int ctrl_x_mode_not_default(void); int ctrl_x_mode_not_defined_yet(void); +int ctrl_x_mode_register(void); int compl_status_adding(void); int compl_status_sol(void); int compl_status_local(void); diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 8bce0e4573..2a2df51770 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -4521,4 +4521,85 @@ func Test_complete_match() delfunc TestComplete endfunc +func Test_register_completion() + let @a = "completion test apple application" + let @b = "banana behavior better best" + let @c = "complete completion compliment computer" + let g:save_reg = '' + func GetItems() + let g:result = complete_info(['pum_visible']) + endfunc + + new + call setline(1, "comp") + call cursor(1, 4) + call feedkeys("a\\\\\", 'tx') + call assert_equal("compliment", getline(1)) + + inoremap =GetItems() + call feedkeys("S\\\\", 'tx') + call assert_equal(1, g:result['pum_visible']) + + call setline(1, "app") + call cursor(1, 3) + call feedkeys("a\\\\", 'tx') + call assert_equal("application", getline(1)) + + " Test completion with case differences + set ignorecase + let @e = "TestCase UPPERCASE lowercase" + call setline(1, "testc") + call cursor(1, 5) + call feedkeys("a\\\", 'tx') + call assert_equal("TestCase", getline(1)) + + " Test clipboard registers if available + if has('clipboard_working') + let g:save_reg = getreg('*') + call setreg('*', "clipboard selection unique words") + call setline(1, "uni") + call cursor(1, 3) + call feedkeys("a\\\", 'tx') + call assert_equal("unique", getline(1)) + call setreg('*', g:save_reg) + + let g:save_reg = getreg('+') + call setreg('+', "system clipboard special content") + call setline(1, "spe") + call cursor(1, 3) + call feedkeys("a\\\", 'tx') + call assert_equal("special", getline(1)) + call setreg('+', g:save_reg) + + call setreg('*', g:save_reg) + call setreg('a', "normal register") + call setreg('*', "clipboard mixed content") + call setline(1, "mix") + call cursor(1, 3) + call feedkeys("a\\\", 'tx') + call assert_equal("mixed", getline(1)) + call setreg('*', g:save_reg) + endif + + " Test black hole register should be skipped + let @_ = "blackhole content should not appear" + call setline(1, "black") + call cursor(1, 5) + call feedkeys("a\\\", 'tx') + call assert_equal("black", getline(1)) + + let @1 = "recent yank zero" + call setline(1, "ze") + call cursor(1, 2) + call feedkeys("a\\\", 'tx') + call assert_equal("zero", getline(1)) + + " Clean up + bwipe! + delfunc GetItems + unlet g:result + unlet g:save_reg + set ignorecase& +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable diff --git a/src/version.c b/src/version.c index 637f178a03..ceedc5f7e3 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1408, /**/ 1407, /**/ From 14f6da5ba8d602263fc7bf6cb899c8520f4c3060 Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Mon, 26 May 2025 19:04:25 +0200 Subject: [PATCH 285/633] patch 9.1.1409: using f-flag in 'complete' conflicts with Neovim Problem: using f-flag in 'complete' conflicts with Neovims filename completion (glepnir, after v9.1.1301). Solution: use upper-case "F" flag for completion functions (Girish Palya). fixes: #17347 closes: #17378 Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 6 +- runtime/doc/version9.txt | 4 +- src/insexpand.c | 4 +- src/optionstr.c | 6 +- src/testdir/test_ins_complete.vim | 94 +++++++++++++++---------------- src/testdir/test_options.vim | 10 ++-- src/version.c | 2 + 7 files changed, 64 insertions(+), 62 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index f0a7e9eefc..b1f3e1506b 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -2085,7 +2085,7 @@ A jump table for the options with a short description can be found at |Q_op|. |i_CTRL-X_CTRL-D| ] tag completion t same as "]" - f{func} call the function {func}. Multiple "f" flags may be specified. + F{func} call the function {func}. Multiple "F" flags may be specified. Refer to |complete-functions| for details on how the function is invoked and what it should return. The value can be the name of a function or a |Funcref|. For |Funcref| values, @@ -2103,9 +2103,9 @@ A jump table for the options with a short description can be found at |Q_op|. If generating matches is potentially slow, |complete_check()| should be used to avoid blocking and preserve editor responsiveness. - f equivalent to using "f{func}", where the function is taken from + F equivalent to using "F{func}", where the function is taken from the 'completefunc' option. - o equivalent to using "f{func}", where the function is taken from + o equivalent to using "F{func}", where the function is taken from the 'omnifunc' option. Unloaded buffers are not loaded, thus their autocmds |:autocmd| are diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 662cb17718..5cffb63515 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -41624,8 +41624,8 @@ Completion: ~ - New option value for 'wildmode': "noselect" - do not auto select an entry in the wildmenu - New flags for 'complete': - "f{func}" - complete using given function - "f" - complete using 'completefunc' + "F{func}" - complete using given function + "F" - complete using 'completefunc' "o" - complete using 'omnifunc' - allow to limit matches for the 'complete' sources by using the "{flag}^" notation diff --git a/src/insexpand.c b/src/insexpand.c index c7d6fd428c..700f734cba 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -4091,7 +4091,7 @@ process_next_cpt_value( } } #ifdef FEAT_COMPL_FUNC - else if (*st->e_cpt == 'f' || *st->e_cpt == 'o') + else if (*st->e_cpt == 'F' || *st->e_cpt == 'o') { compl_type = CTRL_X_FUNCTION; if (*st->e_cpt == 'o') @@ -6916,7 +6916,7 @@ cpt_compl_refresh(void) { if (*p == 'o') cb = &curbuf->b_ofu_cb; - else if (*p == 'f') + else if (*p == 'F') cb = (*(p + 1) != ',' && *(p + 1) != NUL) ? get_cpt_func_callback(p + 1) : &curbuf->b_cfu_cb; if (cb) diff --git a/src/optionstr.c b/src/optionstr.c index b286767e3f..603d0f4251 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -1594,10 +1594,10 @@ did_set_complete(optset_T *args) } *buf_ptr = NUL; - if (vim_strchr((char_u *)".wbuksid]tUfo", *buffer) == NULL) + if (vim_strchr((char_u *)".wbuksid]tUFo", *buffer) == NULL) return illegal_char(args->os_errbuf, args->os_errbuflen, *buffer); - if (vim_strchr((char_u *)"ksf", *buffer) == NULL && *(buffer + 1) != NUL + if (vim_strchr((char_u *)"ksF", *buffer) == NULL && *(buffer + 1) != NUL && *(buffer + 1) != '^') char_before = *buffer; else @@ -1642,7 +1642,7 @@ did_set_complete(optset_T *args) expand_set_complete(optexpand_T *args, int *numMatches, char_u ***matches) { static char *(p_cpt_values[]) = { - ".", "w", "b", "u", "k", "kspell", "s", "i", "d", "]", "t", "U", "f", "o", + ".", "w", "b", "u", "k", "kspell", "s", "i", "d", "]", "t", "U", "F", "o", NULL}; return expand_set_opt_string( args, diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 2a2df51770..06ab6cfa9a 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -225,7 +225,7 @@ func Test_completefunc_args() call assert_equal(0, s:args[1][0]) set omnifunc= - set complete=fCompleteFunc + set complete=FCompleteFunc call feedkeys("i\\", 'x') call assert_equal([1, 1], s:args[0]) call assert_equal(0, s:args[1][0]) @@ -299,7 +299,7 @@ func Test_CompleteDoneNone() call assert_equal(oldline, newline) let s:called_completedone = 0 - set complete=fCompleteDone_CompleteFuncNone + set complete=FCompleteDone_CompleteFuncNone execute "normal a\\" set complete& let newline = join(map(range(&columns), 'nr2char(screenchar(&lines-1, v:val+1))'), '') @@ -326,7 +326,7 @@ func Test_CompleteDone_vevent_keys() endfunc set omnifunc=CompleteFunc set completefunc=CompleteFunc - set complete=.,fCompleteFunc + set complete=.,FCompleteFunc set completeopt+=menuone new @@ -418,7 +418,7 @@ func Test_CompleteDoneDict() au CompleteDonePre * :call CompleteDone_CheckCompletedItemDict(2) au CompleteDone * :call CompleteDone_CheckCompletedItemDict(0) - set complete=.,fCompleteDone_CompleteFuncDict + set complete=.,FCompleteDone_CompleteFuncDict execute "normal a\\" set complete& @@ -471,7 +471,7 @@ func Test_CompleteDoneDictNoUserData() let s:called_completedone = 0 - set complete=.,fCompleteDone_CompleteFuncDictNoUserData + set complete=.,FCompleteDone_CompleteFuncDictNoUserData execute "normal a\\" set complete& @@ -513,7 +513,7 @@ func Test_CompleteDoneList() let s:called_completedone = 0 - set complete=.,fCompleteDone_CompleteFuncList + set complete=.,FCompleteDone_CompleteFuncList execute "normal a\\" set complete& @@ -522,7 +522,7 @@ func Test_CompleteDoneList() let s:called_completedone = 0 - set complete=.,f + set complete=.,F execute "normal a\\" set complete& @@ -573,11 +573,11 @@ func Test_completefunc_info() call feedkeys("i\\\\=string(complete_info())\\", "tx") call assert_equal("matched{'pum_visible': 1, 'mode': 'function', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1)) %d - set complete=.,fCompleteTest + set complete=.,FCompleteTest call feedkeys("i\\\=string(complete_info())\\", "tx") call assert_equal("matched{'pum_visible': 1, 'mode': 'keyword', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1)) %d - set complete=.,f + set complete=.,F call feedkeys("i\\\=string(complete_info())\\", "tx") call assert_equal("matched{'pum_visible': 1, 'mode': 'keyword', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1)) set completeopt& @@ -597,7 +597,7 @@ func Test_cpt_func_cursorcol() return v:none endfunc - set complete=fCptColTest + set complete=FCptColTest new call feedkeys("ifoo bar\", "tx") bwipe! @@ -689,12 +689,12 @@ func CompleteInfoTestUserDefinedFn(mvmt, idx, noselect) let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : '' call assert_equal(completed. "{'pum_visible': 1, 'mode': 'function', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1)) %d - set complete=.,fCompleteInfoUserDefinedFn + set complete=.,FCompleteInfoUserDefinedFn call feedkeys("i\" . a:mvmt . "\\=string(complete_info())\\", "tx") let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : '' call assert_equal(completed. "{'pum_visible': 1, 'mode': 'keyword', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1)) %d - set complete=.,f + set complete=.,F call feedkeys("i\" . a:mvmt . "\\=string(complete_info())\\", "tx") let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : '' call assert_equal(completed. "{'pum_visible': 1, 'mode': 'keyword', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1)) @@ -969,9 +969,9 @@ func Test_completefunc_error() set completefunc=CompleteFunc call setline(1, ['', 'abcd', '']) call assert_fails('exe "normal 2G$a\\"', 'E565:') - set complete=fCompleteFunc + set complete=FCompleteFunc call assert_fails('exe "normal 2G$a\"', 'E565:') - set complete=f + set complete=F call assert_fails('exe "normal 2G$a\"', 'E565:') " delete text when called for the second time @@ -985,9 +985,9 @@ func Test_completefunc_error() set completefunc=CompleteFunc2 call setline(1, ['', 'abcd', '']) call assert_fails('exe "normal 2G$a\\"', 'E565:') - set complete=fCompleteFunc2 + set complete=FCompleteFunc2 call assert_fails('exe "normal 2G$a\"', 'E565:') - set complete=f + set complete=F call assert_fails('exe "normal 2G$a\"', 'E565:') " Jump to a different window from the complete function @@ -1002,10 +1002,10 @@ func Test_completefunc_error() new call assert_fails('exe "normal a\\"', 'E565:') %d - set complete=fCompleteFunc3 + set complete=FCompleteFunc3 call assert_fails('exe "normal a\"', 'E565:') %d - set complete=f + set complete=F call assert_fails('exe "normal a\"', 'E565:') close! @@ -1029,11 +1029,11 @@ func Test_completefunc_invalid_data() exe "normal i\\" call assert_equal('moon', getline(1)) %d - set complete=fCompleteFunc + set complete=FCompleteFunc exe "normal i\" call assert_equal('moon', getline(1)) %d - set complete=f + set complete=F exe "normal i\" call assert_equal('moon', getline(1)) set completefunc& complete& @@ -1717,13 +1717,13 @@ func Test_complete_item_refresh_always() call assert_equal(6, g:CallCount) %d let g:CallCount = 0 - set complete=fTcomplete + set complete=FTcomplete exe "normal! iup\\\\\\" call assert_equal('up', getline(1)) call assert_equal(6, g:CallCount) %d let g:CallCount = 0 - set complete=f + set complete=F exe "normal! iup\\\\\\" call assert_equal('up', getline(1)) call assert_equal(6, g:CallCount) @@ -1750,10 +1750,10 @@ func Test_cpt_func_refresh_always_fail() call assert_equal(-999, a:findstart) " Should not reach here endfunc new - set complete=ffunction('CompleteFail'\\,\ [-2]) + set complete=Ffunction('CompleteFail'\\,\ [-2]) exe "normal! ia\" %d - set complete=ffunction('CompleteFail'\\,\ [-3]) + set complete=Ffunction('CompleteFail'\\,\ [-3]) exe "normal! ia\" bw! @@ -1771,7 +1771,7 @@ func Test_cpt_func_refresh_always_fail() endfunc new set completeopt=menuone,noselect - set complete=ffunction('CompleteFailIntermittent'\\,\ [-2]) + set complete=Ffunction('CompleteFailIntermittent'\\,\ [-2]) let g:CallCount = 0 exe "normal! if\\=complete_info([\"items\"])\" call assert_match('''word'': ''foo''.*''word'': ''fbar''', getline(1)) @@ -1782,13 +1782,13 @@ func Test_cpt_func_refresh_always_fail() call assert_match('''selected'': -1.*''word'': ''foo1''.*''word'': ''foo2''', getline(1)) call assert_equal(2, g:CallCount) %d - set complete=ffunction('CompleteFailIntermittent'\\,\ [-3]) + set complete=Ffunction('CompleteFailIntermittent'\\,\ [-3]) let g:CallCount = 0 exe "normal! if\o\=complete_info([\"items\", \"selected\"])\" call assert_match('''selected'': -1.*''word'': ''foo1''.*''word'': ''foo2''', getline(1)) call assert_equal(2, g:CallCount) %d - set complete=ffunction('CompleteFailIntermittent'\\,\ [-2]) + set complete=Ffunction('CompleteFailIntermittent'\\,\ [-2]) " completion mode is dismissed when there are no matches in list let g:CallCount = 0 exe "normal! if\oo\=complete_info([\"items\"])\" @@ -1801,7 +1801,7 @@ func Test_cpt_func_refresh_always_fail() call assert_equal(3, g:CallCount) %d " completion mode continues when matches from other sources present - set complete=.,ffunction('CompleteFailIntermittent'\\,\ [-2]) + set complete=.,Ffunction('CompleteFailIntermittent'\\,\ [-2]) call setline(1, 'fooo1') let g:CallCount = 0 exe "normal! Gof\oo\=complete_info([\"items\", \"selected\"])\" @@ -1817,7 +1817,7 @@ func Test_cpt_func_refresh_always_fail() call assert_equal(4, g:CallCount) %d " refresh will stop when -3 is returned - set complete=.,,\ ffunction('CompleteFailIntermittent'\\,\ [-3]) + set complete=.,,\ Ffunction('CompleteFailIntermittent'\\,\ [-3]) call setline(1, 'fooo1') let g:CallCount = 0 exe "normal! Gof\o\\=complete_info([\"items\", \"selected\"])\" @@ -1862,7 +1862,7 @@ func Test_cpt_select_item_refresh_always() endfunc new - set complete=.,ffunction('CompleteItemsSelect'\\,\ [[]]) + set complete=.,Ffunction('CompleteItemsSelect'\\,\ [[]]) call setline(1, "foobarbar") let g:CallCount = 0 exe "normal! Gof\\\=CompleteMenuWords()\" @@ -1894,7 +1894,7 @@ func Test_cpt_select_item_refresh_always() call assert_equal(2, g:CallCount) %d - set complete=.,ffunction('CompleteItemsSelect'\\,\ [['foonext']]) + set complete=.,Ffunction('CompleteItemsSelect'\\,\ [['foonext']]) call setline(1, "foobarbar") let g:CallCount = 0 exe "normal! Gof\\\\=CompleteMenuWords()\" @@ -1934,7 +1934,7 @@ func Test_cpt_select_item_refresh_always() call assert_equal(3, g:CallCount) %d - set complete=.,ffunction('CompleteItemsSelect'\\,\ [['fo'\\,\ 'foonext']]) + set complete=.,Ffunction('CompleteItemsSelect'\\,\ [['fo'\\,\ 'foonext']]) call setline(1, "foobarbar") let g:CallCount = 0 exe "normal! Gof\\\\=CompleteMenuWords()\" @@ -1986,7 +1986,7 @@ func Test_cpt_multi_func_refresh_always() call assert_equal("f\x0e" . '{''matches'': [], ''selected'': -1}', getline(1)) set completeopt=menuone,noselect - set complete=fCompleteItems1,fCompleteItems2 + set complete=FCompleteItems1,FCompleteItems2 new let g:CallCount1 = 0 @@ -2118,7 +2118,7 @@ func Test_cpt_func_callback() let lines =<< trim END #" Test for using a global function name - set complete=fg:CompleteFunc2 + set complete=Fg:CompleteFunc2 new call setline(1, 'global') LET g:CompleteFunc2Args = [] @@ -2128,7 +2128,7 @@ func Test_cpt_func_callback() bw! #" Test for using a function() - set complete=ffunction('g:CompleteFunc1'\\,\ [10]) + set complete=Ffunction('g:CompleteFunc1'\\,\ [10]) new call setline(1, 'one') LET g:CompleteFunc1Args = [] @@ -2138,7 +2138,7 @@ func Test_cpt_func_callback() bw! #" Using a funcref variable - set complete=ffuncref('g:CompleteFunc1'\\,\ [11]) + set complete=Ffuncref('g:CompleteFunc1'\\,\ [11]) new call setline(1, 'two') LET g:CompleteFunc1Args = [] @@ -2155,7 +2155,7 @@ func Test_cpt_func_callback() call add(g:CompleteFunc3Args, [a:findstart, a:base]) return a:findstart ? 0 : [] endfunc - set complete=fs:CompleteFunc3 + set complete=Fs:CompleteFunc3 new call setline(1, 'script1') let g:CompleteFunc3Args = [] @@ -2164,7 +2164,7 @@ func Test_cpt_func_callback() set complete& bw! - let &complete = 'fs:CompleteFunc3' + let &complete = 'Fs:CompleteFunc3' new call setline(1, 'script2') let g:CompleteFunc3Args = [] @@ -2182,7 +2182,7 @@ func Test_cpt_func_callback() add(CompleteFunc4Args, [findstart, base]) return findstart ? 0 : [] enddef - set complete=fCompleteFunc4 + set complete=FCompleteFunc4 new setline(1, 'script1') feedkeys("A\\", 'x') @@ -2202,7 +2202,7 @@ func Test_cpt_func_callback() enddef # Test for using a def function with completefunc - set complete=ffunction('Vim9CompleteFunc'\\,\ [60]) + set complete=Ffunction('Vim9CompleteFunc'\\,\ [60]) new | only setline(1, 'one') g:Vim9completeFuncArgs = [] @@ -2211,7 +2211,7 @@ func Test_cpt_func_callback() bw! # Test for using a global function name - &complete = 'fg:CompleteFunc2' + &complete = 'Fg:CompleteFunc2' new | only setline(1, 'two') g:CompleteFunc2Args = [] @@ -2224,7 +2224,7 @@ func Test_cpt_func_callback() add(g:LocalCompleteFuncArgs, [findstart, base]) return findstart ? 0 : [] enddef - &complete = 'fLocalCompleteFunc' + &complete = 'FLocalCompleteFunc' new | only setline(1, 'three') g:LocalCompleteFuncArgs = [] @@ -3122,12 +3122,12 @@ func Test_complete_smartindent() let result = getline(1,'$') call assert_equal(['', '{','}',''], result) %d - setlocal complete=fFooBarComplete + setlocal complete=FFooBarComplete exe "norm! o{\\\}\\" let result = getline(1,'$') call assert_equal(['', '{','}',''], result) %d - setlocal complete=f + setlocal complete=F exe "norm! o{\\\}\\" let result = getline(1,'$') call assert_equal(['', '{','}',''], result) @@ -4121,7 +4121,7 @@ func Test_complete_match_count() %d set completefunc=ComplFunc - set cpt=.^1,f^2 + set cpt=.^1,F^2 call setline(1, ["fo", "foo", "foobar", "fobarbaz"]) exe "normal! Gof\\=PrintMenuWords()\" call assert_equal('fo{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 0}', getline(5)) @@ -4156,7 +4156,7 @@ func Test_complete_match_count() %d call setline(1, ["foo"]) - set cpt=fComplFunc^2,. + set cpt=FComplFunc^2,. exe "normal! Gof\\=PrintMenuWords()\" call assert_equal('foo1{''matches'': [''foo1'', ''foo2'', ''foo''], ''selected'': 0}', getline(2)) bw! @@ -4173,7 +4173,7 @@ func Test_complete_match_count() endfunc new - set complete=.,ffunction('CompleteItemsSelect')^2 + set complete=.,Ffunction('CompleteItemsSelect')^2 call setline(1, "foobarbar") let g:CallCount = 0 exe "normal! Gof\\\=PrintMenuWords()\" diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim index 1f71e1f5d0..867919872f 100644 --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -274,7 +274,7 @@ func Test_complete() call assert_fails('set complete=ix', 'E535:') call assert_fails('set complete=x', 'E539:') call assert_fails('set complete=..', 'E535:') - set complete=.,w,b,u,k,\ s,i,d,],t,U,f,o + set complete=.,w,b,u,k,\ s,i,d,],t,U,F,o call assert_fails('set complete=i^-10', 'E535:') call assert_fails('set complete=i^x', 'E535:') call assert_fails('set complete=k^2,t^-1,s^', 'E535:') @@ -282,13 +282,13 @@ func Test_complete() call assert_fails('set complete=kfoo^foo2', 'E535:') call assert_fails('set complete=kfoo^', 'E535:') call assert_fails('set complete=.^', 'E535:') - set complete=.,w,b,u,k,s,i,d,],t,U,f,o + set complete=.,w,b,u,k,s,i,d,],t,U,F,o set complete=. set complete=.^10,t^0 - set complete+=ffuncref('foo'\\,\ [10]) - set complete=ffuncref('foo'\\,\ [10])^10 + set complete+=Ffuncref('foo'\\,\ [10]) + set complete=Ffuncref('foo'\\,\ [10])^10 set complete& - set complete+=ffunction('g:foo'\\,\ [10\\,\ 20]) + set complete+=Ffunction('g:foo'\\,\ [10\\,\ 20]) set complete& endfun diff --git a/src/version.c b/src/version.c index ceedc5f7e3..a9d95e3fe4 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1409, /**/ 1408, /**/ From 7c621052c3f180c1ef70fb7abfdad18245f47fcc Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Mon, 26 May 2025 19:41:59 +0200 Subject: [PATCH 286/633] patch 9.1.1410: out-of-bounds access with 'completefunc' Problem: out-of-bounds access with 'completefunc' (csetc) Solution: check if it is safe to advance cpt_sources_index (Girish Palya) fixes: #17363 closes: #17374 Co-authored-by: @csetc Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- src/insexpand.c | 57 ++++++++++++++++++++++++++----- src/testdir/test_ins_complete.vim | 44 +++++++++++++++++++++++- src/version.c | 2 ++ 3 files changed, 93 insertions(+), 10 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 700f734cba..3592fdcaf2 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -227,7 +227,7 @@ typedef struct cpt_source_T static cpt_source_T *cpt_sources_array; // Pointer to the array of completion sources static int cpt_sources_count; // Total number of completion sources specified in the 'cpt' option -static int cpt_sources_index; // Index of the current completion source being expanded +static int cpt_sources_index = -1; // Index of the current completion source being expanded // "compl_match_array" points the currently displayed list of entries in the // popup menu. It is NULL when there is no popup menu. @@ -3949,6 +3949,19 @@ thesaurus_func_complete(int type UNUSED) #endif } +/* + * Check if 'cpt' list index can be advanced to the next completion source. + */ + static int +may_advance_cpt_index(char_u *cpt) +{ + char_u *p = cpt; + + while (*p == ',' || *p == ' ') // Skip delimiters + p++; + return (*p != NUL); +} + /* * Return value of process_next_cpt_value() */ @@ -4004,12 +4017,14 @@ process_next_cpt_value( ins_compl_next_state_T *st, int *compl_type_arg, pos_T *start_match_pos, - int fuzzy_collect) + int fuzzy_collect, + int *advance_cpt_idx) { int compl_type = -1; int status = INS_COMPL_CPT_OK; st->found_all = FALSE; + *advance_cpt_idx = FALSE; while (*st->e_cpt == ',' || *st->e_cpt == ' ') st->e_cpt++; @@ -4124,6 +4139,7 @@ process_next_cpt_value( // in any case e_cpt is advanced to the next entry (void)copy_option_part(&st->e_cpt, IObuff, IOSIZE, ","); + *advance_cpt_idx = may_advance_cpt_index(st->e_cpt); st->found_all = TRUE; if (compl_type == -1) @@ -4976,6 +4992,23 @@ strip_caret_numbers_in_place(char_u *str) *write = '\0'; } +/* + * Safely advance the cpt_sources_index by one. + */ + static int +advance_cpt_sources_index_safe(void) +{ + if (cpt_sources_index < cpt_sources_count - 1) + { + cpt_sources_index++; + return OK; + } +#ifdef FEAT_EVAL + semsg(_(e_list_index_out_of_range_nr), cpt_sources_index + 1); +#endif + return FAIL; +} + /* * Get the next expansion(s), using "compl_pattern". * The search starts at position "ini" in curbuf and in the direction @@ -4993,6 +5026,7 @@ ins_compl_get_exp(pos_T *ini) int i; int found_new_match; int type = ctrl_x_mode; + int may_advance_cpt_idx = FALSE; if (!compl_started) { @@ -5027,7 +5061,8 @@ ins_compl_get_exp(pos_T *ini) ? &st.last_match_pos : &st.first_match_pos; // For ^N/^P loop over all the flags/windows/buffers in 'complete'. - for (cpt_sources_index = 0;;) + cpt_sources_index = 0; + for (;;) { found_new_match = FAIL; st.set_match_pos = FALSE; @@ -5038,13 +5073,15 @@ 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, cfc_has_mode()); + int status = process_next_cpt_value(&st, &type, ini, + cfc_has_mode(), &may_advance_cpt_idx); if (status == INS_COMPL_CPT_END) break; if (status == INS_COMPL_CPT_CONT) { - cpt_sources_index++; + if (may_advance_cpt_idx && !advance_cpt_sources_index_safe()) + break; continue; } } @@ -5057,8 +5094,8 @@ ins_compl_get_exp(pos_T *ini) // get the next set of completion matches found_new_match = get_next_completion_match(type, &st, ini); - if (type > 0) - cpt_sources_index++; + if (may_advance_cpt_idx && !advance_cpt_sources_index_safe()) + break; // break the loop for specialized modes (use 'complete' just for the // generic ctrl_x_mode == CTRL_X_NORMAL) or when we've found a new @@ -6907,7 +6944,7 @@ cpt_compl_refresh(void) strip_caret_numbers_in_place(cpt); cpt_sources_index = 0; - for (p = cpt; *p; cpt_sources_index++) + for (p = cpt; *p;) { while (*p == ',' || *p == ' ') // Skip delimiters p++; @@ -6926,7 +6963,9 @@ cpt_compl_refresh(void) } } - copy_option_part(&p, IObuff, IOSIZE, ","); // Advance p + (void)copy_option_part(&p, IObuff, IOSIZE, ","); // Advance p + if (may_advance_cpt_index(p)) + (void)advance_cpt_sources_index_safe(); } cpt_sources_index = -1; diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 06ab6cfa9a..ffe549ab5c 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -1037,7 +1037,7 @@ func Test_completefunc_invalid_data() exe "normal i\" call assert_equal('moon', getline(1)) set completefunc& complete& - close! + bw! endfunc " Test for errors in using complete() function @@ -4126,6 +4126,11 @@ func Test_complete_match_count() exe "normal! Gof\\=PrintMenuWords()\" call assert_equal('fo{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 0}', getline(5)) 5d + set cpt=.^1,,,F^2,,, + call setline(1, ["fo", "foo", "foobar", "fobarbaz"]) + exe "normal! Gof\\=PrintMenuWords()\" + call assert_equal('fo{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 0}', getline(5)) + 5d exe "normal! Gof\\\=PrintMenuWords()\" call assert_equal('foo1{''matches'': [''fo'', ''foo1'', ''foo2''], ''selected'': 1}', getline(5)) 5d @@ -4602,4 +4607,41 @@ func Test_register_completion() set ignorecase& endfunc +" Test refresh:always with unloaded buffers (issue #17363) +func Test_complete_unloaded_buf_refresh_always() + func TestComplete(findstart, base) + if a:findstart + let line = getline('.') + let start = col('.') - 1 + while start > 0 && line[start - 1] =~ '\a' + let start -= 1 + endwhile + return start + else + let g:CallCount += 1 + let res = ["update1", "update12", "update123"] + return #{words: res, refresh: 'always'} + endif + endfunc + + let g:CallCount = 0 + set completeopt=menu,longest + set completefunc=TestComplete + set complete=b,u,t,i,F + badd foo1 + badd foo2 + new + exe "normal! iup\\\\\\" + call assert_equal('up', getline(1)) + call assert_equal(6, g:CallCount) + + bd! foo1 + bd! foo2 + bw! + set completeopt& + set complete& + set completefunc& + delfunc TestComplete +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable diff --git a/src/version.c b/src/version.c index a9d95e3fe4..33b08bb3aa 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1410, /**/ 1409, /**/ From a88c5bdcce2a3b603018149f02af94e392d2924f Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Mon, 26 May 2025 19:51:03 +0200 Subject: [PATCH 287/633] patch 9.1.1411: crash when calling non-existing function for tabpanel Problem: crash when calling non-existing function for tabpanel (Yamagi, after v9.1.1391) Solution: check if there was an error and if there was, set tabpanel option to empty to prevent showing errors on every redraw fixes: #17364 closes: #17375 closes: #17371 Signed-off-by: Christian Brabandt --- src/tabpanel.c | 8 ++++++++ src/testdir/test_tabpanel.vim | 12 ++++++++++++ src/version.c | 2 ++ 3 files changed, 22 insertions(+) diff --git a/src/tabpanel.c b/src/tabpanel.c index 81e2c0c079..bb7a8742b2 100644 --- a/src/tabpanel.c +++ b/src/tabpanel.c @@ -496,6 +496,7 @@ starts_with_percent_and_bang(tabpanel_T *pargs) { int len = 0; char_u *usefmt = p_tpl; + int did_emsg_before = did_emsg; if (usefmt == NULL) return NULL; @@ -525,6 +526,13 @@ starts_with_percent_and_bang(tabpanel_T *pargs) usefmt = p; do_unlet((char_u *)"g:tabpanel_winid", TRUE); + + if (did_emsg > did_emsg_before) + { + usefmt = NULL; + set_string_option_direct((char_u *)"tabpanel", -1, (char_u *)"", + OPT_FREE | OPT_GLOBAL, SID_ERROR); + } } #endif diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim index c67166e1cb..6aaae63ac3 100644 --- a/src/testdir/test_tabpanel.vim +++ b/src/testdir/test_tabpanel.vim @@ -521,4 +521,16 @@ function Test_tabpanel_equalalways() call StopVimInTerminal(buf) endfunc +function Test_tabpanel_error() + set tabpanel=%!NonExistingFunc() + try + set showtabpanel=2 + redraw! + catch /^Vim\%((\a\+)\)\=:E117:/ + endtry + call assert_true(empty(&tabpanel)) + set tabpanel&vim + set showtabpanel&vim +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 33b08bb3aa..67ac9fbfcb 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1411, /**/ 1410, /**/ From a004e5108c5620e9f831f96d2c584ba4d675b22b Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Mon, 26 May 2025 19:54:07 +0200 Subject: [PATCH 288/633] patch 9.1.1412: tests: Test_tabpanel_tabonly() fails on larger screens Problem: tests: Test_tabpanel_tabonly() fails on larger screens Solution: re-generate screendump file for 78 column large terminal closes: #17376 Signed-off-by: Christian Brabandt --- src/testdir/dumps/Test_tabpanel_only_0.dump | 16 ++++++++-------- src/testdir/dumps/Test_tabpanel_only_1.dump | 18 +++++++++--------- src/testdir/test_tabpanel.vim | 2 +- src/version.c | 2 ++ 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/testdir/dumps/Test_tabpanel_only_0.dump b/src/testdir/dumps/Test_tabpanel_only_0.dump index 3d54f949ae..b0e0bbe890 100644 --- a/src/testdir/dumps/Test_tabpanel_only_0.dump +++ b/src/testdir/dumps/Test_tabpanel_only_0.dump @@ -1,10 +1,10 @@ |[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @11|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|2+2#e000e06&|++2#0000000&| |[|N|o| |N|a|m|e|]| | +1&&@31|X+8#0000001#e0e0e08 -|2+2#e000e06#ffffff0|++2#0000000&| |[|N|o| |N|a|m|e|]| @7|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 -| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 -| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 -| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 -| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 -| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22 -| +1&&@19|a+0&&|s|d>f| @25||+1&&|a+0&&|s|d|f| @22 -| +1&&@19|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|0|1|,|4| @6|B|o|t| |<+1&&|N|o| |N|a|m|e|]| |[|+|]| |1|0|1|,|4| @4|B|o|t +|2+2#e000e06#ffffff0|++2#0000000&| |[|N|o| |N|a|m|e|]| @7|a+0&&|s|d|f| @24||+1&&|a+0&&|s|d|f| @23 +| +1&&@19|a+0&&|s|d|f| @24||+1&&|a+0&&|s|d|f| @23 +| +1&&@19|a+0&&|s|d|f| @24||+1&&|a+0&&|s|d|f| @23 +| +1&&@19|a+0&&|s|d|f| @24||+1&&|a+0&&|s|d|f| @23 +| +1&&@19|a+0&&|s|d|f| @24||+1&&|a+0&&|s|d|f| @23 +| +1&&@19|a+0&&|s|d|f| @24||+1&&|a+0&&|s|d|f| @23 +| +1&&@19|a+0&&|s|d>f| @24||+1&&|a+0&&|s|d|f| @23 +| +1&&@19|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|0|1|,|4| @5|B|o|t| |<+1&&|N|o| |N|a|m|e|]| |[|+|]| |1|0|1|,|4| @5|B|o|t | +0&&@77 diff --git a/src/testdir/dumps/Test_tabpanel_only_1.dump b/src/testdir/dumps/Test_tabpanel_only_1.dump index 94879c0181..19e85b8d13 100644 --- a/src/testdir/dumps/Test_tabpanel_only_1.dump +++ b/src/testdir/dumps/Test_tabpanel_only_1.dump @@ -1,10 +1,10 @@ -|a+0&#ffffff0|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 -|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 -|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 -|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 -|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 -|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 -|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42 -|a|s|d>f| @25||+1&&|a+0&&|s|d|f| @42 -|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|0|1|,|4| @6|B|o|t| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @15|1|0|1|,|4| @9|B|o|t +|a+0&#ffffff0|s|d|f| @24||+1&&|a+0&&|s|d|f| @43 +|a|s|d|f| @24||+1&&|a+0&&|s|d|f| @43 +|a|s|d|f| @24||+1&&|a+0&&|s|d|f| @43 +|a|s|d|f| @24||+1&&|a+0&&|s|d|f| @43 +|a|s|d|f| @24||+1&&|a+0&&|s|d|f| @43 +|a|s|d|f| @24||+1&&|a+0&&|s|d|f| @43 +|a|s|d|f| @24||+1&&|a+0&&|s|d|f| @43 +|a|s|d>f| @24||+1&&|a+0&&|s|d|f| @43 +|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|0|1|,|4| @5|B|o|t| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @16|1|0|1|,|4| @9|B|o|t |:+0&&|t|a|b|o|n|l|y| @69 diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim index 6aaae63ac3..46ebe3b623 100644 --- a/src/testdir/test_tabpanel.vim +++ b/src/testdir/test_tabpanel.vim @@ -488,7 +488,7 @@ function Test_tabpanel_tabonly() END call writefile(lines, 'XTest_tabpanel_tabonly', 'D') - let buf = RunVimInTerminal('-S XTest_tabpanel_tabonly', {'rows': 10, 'cols': 80}) + let buf = RunVimInTerminal('-S XTest_tabpanel_tabonly', {'rows': 10, 'cols': 78}) call VerifyScreenDump(buf, 'Test_tabpanel_only_0', {}) call term_sendkeys(buf, ":tabonly\") call VerifyScreenDump(buf, 'Test_tabpanel_only_1', {}) diff --git a/src/version.c b/src/version.c index 67ac9fbfcb..ef919bdd8b 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1412, /**/ 1411, /**/ From 318ff9c3627f595905064d11b0d66b63bfe89ff1 Mon Sep 17 00:00:00 2001 From: Gary Johnson Date: Mon, 26 May 2025 20:10:25 +0200 Subject: [PATCH 289/633] patch 9.1.1413: spurious CursorHold triggered in GUI on startup Problem: spurious CursorHold triggered in GUI on startup Solution: init global did_cursorhold flag to true (Gary Johnson) When Vim is started in GUI mode, the CursorHold autocommand event is triggered 'updatetime' milliseconds later, even when the user has not pressed a key. This is different from the behavior of Vim in terminal mode, which does not trigger a CursorHold autocommand event at startup, and contradicts the description of the CursorHold event in ":help CursorHold", which states that the event is "[n]ot triggered until the user has pressed a key". The fix is to change the initial value of did_cursorhold from FALSE to TRUE. While it is true that the CursorDone event has not been done yet at startup, it should appear to have been done until the user presses a key. fixes #17350 closes: #17382 Signed-off-by: Gary Johnson Signed-off-by: Christian Brabandt --- src/globals.h | 2 +- src/testdir/test_gui.vim | 22 ++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/globals.h b/src/globals.h index f143c8f905..38e9b8bbf5 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1614,7 +1614,7 @@ EXTERN int autocmd_bufnr INIT(= 0); // fnum for on cmdline EXTERN char_u *autocmd_match INIT(= NULL); // name for on cmdline EXTERN int aucmd_cmdline_changed_count INIT(= 0); -EXTERN int did_cursorhold INIT(= FALSE); // set when CursorHold t'gerd +EXTERN int did_cursorhold INIT(= TRUE); // set when CursorHold t'gerd EXTERN pos_T last_cursormoved // for CursorMoved event # ifdef DO_INIT = {0, 0, 0} diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim index 9d319960bf..fc23db50f0 100644 --- a/src/testdir/test_gui.vim +++ b/src/testdir/test_gui.vim @@ -1747,4 +1747,26 @@ func Test_gui_csi_keytrans() call assert_equal('', keytrans("\x9b\xfc\x04D")) endfunc +" Test that CursorHold is NOT triggered at startup before a keypress +func Test_CursorHold_not_triggered_at_startup() + defer delete('Xcursorhold.log') + defer delete('Xcursorhold_test.vim') + call writefile([ + \ 'set updatetime=300', + \ 'let g:cursorhold_triggered = 0', + \ 'autocmd CursorHold * let g:cursorhold_triggered += 1 | call writefile(["CursorHold triggered"], "Xcursorhold.log", "a")', + \ 'call timer_start(400, {-> execute(''call writefile(["g:cursorhold_triggered=" . g:cursorhold_triggered], "Xcursorhold.log", "a") | qa!'')})', + \ ], 'Xcursorhold_test.vim') + + let vimcmd = v:progpath . ' -g -f -N -u NONE -i NONE -S Xcursorhold_test.vim' + call system(vimcmd) + + let lines = filereadable('Xcursorhold.log') ? readfile('Xcursorhold.log') : [] + + " Assert that CursorHold did NOT trigger at startup + call assert_false(index(lines, 'CursorHold triggered') != -1) + let found = filter(copy(lines), 'v:val =~ "^g:cursorhold_triggered="') + call assert_equal(['g:cursorhold_triggered=0'], found) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index ef919bdd8b..adb5654bcd 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1413, /**/ 1412, /**/ From 2c7ccaab87279b3f1a53b00fe64c3eed9fa89804 Mon Sep 17 00:00:00 2001 From: John Marriott Date: Mon, 26 May 2025 20:25:38 +0200 Subject: [PATCH 290/633] patch 9.1.1414: MS-Windows: compile warnings in os_win32.c Problem: MS-Windows: compile warnings in os_win32.c Solution: update function declarations, correctly access param arg in set_flag() using (sig_atomic_t) cast (John Marriott) closes: #17368 Co-authored-by: Hirohito Higashi Signed-off-by: John Marriott Signed-off-by: Christian Brabandt --- src/os_win32.c | 10 ++++------ src/version.c | 2 ++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/os_win32.c b/src/os_win32.c index 740c35a0ab..10bbb6c8df 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -175,12 +175,12 @@ static int conpty_working = 0; static int conpty_type = 0; static int conpty_stable = 0; static int conpty_fix_type = 0; -static void vtp_flag_init(); +static void vtp_flag_init(void); #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) static int vtp_working = 0; -static void vtp_init(); -static void vtp_exit(); +static void vtp_init(void); +static void vtp_exit(void); static void vtp_sgr_bulk(int arg); static void vtp_sgr_bulks(int argc, int *argv); @@ -8994,9 +8994,7 @@ static sig_atomic_t *timeout_flag = &timeout_flags[0]; static void CALLBACK set_flag(void *param, BOOLEAN unused2 UNUSED) { - int *timeout_flag = (int *)param; - - *timeout_flag = TRUE; + *(sig_atomic_t *)param = TRUE; } /* diff --git a/src/version.c b/src/version.c index adb5654bcd..5366f3f2ee 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1414, /**/ 1413, /**/ From a6172f8c5ce136d877965bf49881fc6e71ea4edf Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Mon, 26 May 2025 20:32:35 +0200 Subject: [PATCH 291/633] runtime(doc): Correct allowed characters at :help 'filetype' closes: #17366 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/doc/options.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index b1f3e1506b..38eb31d33f 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -3633,7 +3633,8 @@ A jump table for the options with a short description can be found at |Q_op|. one dot may appear. This option is not copied to another buffer, independent of the 's' or 'S' flag in 'cpoptions'. - Only alphanumeric characters, '-' and '_' can be used. + Only alphanumeric characters, '-' and '_' can be used (and a '.' is + allowed as delimiter when combining different filetypes). *'fillchars'* *'fcs'* 'fillchars' 'fcs' string (default "vert:|,fold:-,eob:~,lastline:@") From e99987d3c0628ed7e5b74828d0fce70a0fbb2431 Mon Sep 17 00:00:00 2001 From: Gagik Hakobyan Date: Mon, 26 May 2025 21:11:51 +0200 Subject: [PATCH 292/633] translation(hy): renamed am.po -> hy.po for armenian lang translations According to ISO-639, the correct 2 letter language code is HY not AM, so let's rename am.po. Also, add hy.po to the CHECKFILES Make target and convert the file to Unix lineformat. closes: #17380 Signed-off-by: Gagik Hakobyan Signed-off-by: Christian Brabandt --- .github/MAINTAINERS | 2 +- src/po/Make_all.mak | 7 +- src/po/{am.po => hy.po} | 22174 +++++++++++++++++++------------------- 3 files changed, 11092 insertions(+), 11091 deletions(-) rename src/po/{am.po => hy.po} (97%) diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index b5e2bc6910..322f23cbf1 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -681,7 +681,6 @@ runtime/tutor/tutor.ru.cp1251 @RestorerZ runtime/tutor/tutor.ru.utf-8 @RestorerZ src/iscygpty.* @k-takata src/libvterm/ @leonerd -src/po/am.po @gagikh src/po/ca.po @nfdisco src/po/de.po @chrisbra src/po/eo.po @dpelle @@ -689,6 +688,7 @@ src/po/es.po @victorhck src/po/fi.po @flammie src/po/fr.po @dpelle src/po/ga.po @kscanne +src/po/hy.po @gagikh src/po/it.po @azc100 src/po/ja.po @k-takata src/po/ru.po @RestorerZ diff --git a/src/po/Make_all.mak b/src/po/Make_all.mak index 7f7453b4fc..96bac21e06 100644 --- a/src/po/Make_all.mak +++ b/src/po/Make_all.mak @@ -4,7 +4,6 @@ LANGUAGES = \ af \ - am \ ca \ cs \ cs.cp1250 \ @@ -17,6 +16,7 @@ LANGUAGES = \ fr \ ga \ hu \ + hy \ it \ ja \ ja.euc-jp \ @@ -50,7 +50,6 @@ LANGUAGES = \ POFILES = \ af.po \ - am.po \ ca.po \ cs.po \ cs.cp1250.po \ @@ -63,6 +62,7 @@ POFILES = \ fr.po \ ga.po \ hu.po \ + hy.po \ it.po \ ja.po \ ja.euc-jp.po \ @@ -96,7 +96,6 @@ POFILES = \ MOFILES = \ af.mo \ - am.mo \ ca.mo \ cs.mo \ da.mo \ @@ -108,6 +107,7 @@ MOFILES = \ fr.mo \ ga.mo \ hu.mo \ + hy.mo \ it.mo \ ja.mo \ ko.UTF-8.mo \ @@ -157,6 +157,7 @@ CHECKFILES = \ fr.ck \ ga.ck \ hu.ck \ + hy.ck \ it.ck \ ja.ck \ ja.euc-jp.ck \ diff --git a/src/po/am.po b/src/po/hy.po similarity index 97% rename from src/po/am.po rename to src/po/hy.po index cefabd3a9c..bf6d225b46 100644 --- a/src/po/am.po +++ b/src/po/hy.po @@ -1,11087 +1,11087 @@ -# Armenian translation for Vim vim:set foldmethod=marker: -# -# Do ":help uganda" in Vim to read copying and usage conditions. -# Do ":help credits" in Vim to see a list of people who contributed. -# -# Gagik Hakobyan 2015 -# option - կարգանշան -# unload - բեռնաթափել -# load - բեռնել -# loop - շրջակցում -# prefix - նախածանց -# nested - ներդրված -# flag - դրոշմանիշ -# compound - պարփակ -# region - -# include - կցաֆայլ -# cluster - hամակարգ -# highlight - գունանշում -# attribute - բնորոշիչ -# garbage - աղբ -# shell - terminal -# combine - միավորում -# search - որոնում -# patch - նմանակում -# extra - հավելյալ -# feature - հատկություն -# ignore - անտեսել -# replace - փոխարինում -# pattern - նմուշ -# delimiter - բաժանիչ -# equal - համարժեք -# settings - կարգաբերում -# duplicate - կրկնակի -# find - -# found - հայտնաբերված -# support - աջակցում -# class - դաս -# fold - փաթաթ -# soundfold - ձայնափաթաթ -# swap - -# menu - -# undo - չեղարկում -# overwrite - -# skipp - -# owner - -# failed - -# list -# match - համընկնում -# autocommand - -# case - depq, -# fatal - օրհասական -# mark - նշակ -# key - banali -# character - ?? -# demage - վնասված -# abort -# event - -# read-only -# option -# preview - Նախադիտում -# spell - ուղղագրում -# directory - թղթապանակ -msgid "" -msgstr "" -"Project-Id-Version: vim_9.1_am\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-24 21:58+0300\n" -"PO-Revision-Date: 2024-10-11 11:18+0000\n" -"Last-Translator: Gagik Hakobyan \n" -"Language-Team: Armenian\n" -"Language: hy\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Loco-Source-Locale: en_AM\n" -"X-Generator: Loco https://localise.biz/\n" -"X-Poedit-KeywordsList: փաթաթ;միջակայք\n" -"X-Loco-Parser: loco_parse_po" - -msgid "ERROR: " -msgstr "ՍԽԱԼ: " - -#, c-format -msgid "--Deleted--" -msgstr "--Ջնջված է--" - -#, c-format -msgid "auto-removing autocommand: %s " -msgstr "ինքնա֊ջնջող ինքնահրաման: %s <բուֆեր=%d>" - -msgid "W19: Deleting augroup that is still in use" -msgstr "W19: Օգտագործվող ինքնախմբի ջնջում" - -#, c-format -msgid "No matching autocommands: %s" -msgstr "Չկան համապատասխան ինքնահրամաններ: %s" - -#, c-format -msgid "%s Autocommands for \"%s\"" -msgstr "%s Ինքնահրամաններ \"%s\"-ի համար" - -#, c-format -msgid "Executing %s" -msgstr "Կատարվում է %s" - -#, c-format -msgid "autocommand %s" -msgstr "ինքնահրաման %s" - -msgid "add() argument" -msgstr "add() արգումենտ" - -msgid "insert() argument" -msgstr "insert() արգումենտ" - -msgid "[Location List]" -msgstr "[Տեղորոշման ցանկ]" - -msgid "[Quickfix List]" -msgstr "[Արագ կարգավորման ցանկ]" - -#, c-format -msgid "%d buffer unloaded" -msgid_plural "%d buffers unloaded" -msgstr[0] "%d բուֆեր բեռնաթափվել է" -msgstr[1] "%d բուֆերներ բեռնաթափվել են" - -#, c-format -msgid "%d buffer deleted" -msgid_plural "%d buffers deleted" -msgstr[0] "%d բուֆեր ջնջվել է" -msgstr[1] "%d բուֆերներ ջնջվել են" - -#, c-format -msgid "%d buffer wiped out" -msgid_plural "%d buffers wiped out" -msgstr[0] "%d բուֆեր մաքրվել է" -msgstr[1] "%d բուֆերներ մաքրվել են" - -msgid "W14: Warning: List of file names overflow" -msgstr "W14: Զգուշացում: ֆայլերի ցանկը հատել է սահմանաչափը" - -#, c-format -msgid "line %ld" -msgstr "տող %ld" - -msgid " [Modified]" -msgstr " [Փոփոխված]" - -msgid "[Not edited]" -msgstr "[Չխմբագրված]" - -msgid "[Read errors]" -msgstr "[Կարդալու սխալներ]" - -msgid "[RO]" -msgstr "[ՄԿ]" - -msgid "[readonly]" -msgstr "[Միայն կարդալու համար]" - -#, c-format -msgid "%ld line --%d%%--" -msgid_plural "%ld lines --%d%%--" -msgstr[0] "%ld տող --%d%%--" -msgstr[1] "%ld տողեր --%d%%--" - -#, c-format -msgid "line %ld of %ld --%d%%-- col " -msgstr "տող. %ld - %ld --%d%%-- քան. " - -msgid "[No Name]" -msgstr "[Անանուն]" - -msgid "help" -msgstr "օգնություն" - -msgid "[Help]" -msgstr "[օգնություն]" - -msgid "[Preview]" -msgstr "[Նախադիտում]" - -msgid "All" -msgstr "Ամբողջը" - -msgid "Bot" -msgstr "Ներքևում" - -msgid "Top" -msgstr "Վերևում" - -#, c-format -msgid "%d%%" -msgstr "%d%%" - -#, c-format -msgid " (%d of %d)" -msgstr " (%d %d-ից)" - -#, c-format -msgid " ((%d) of %d)" -msgstr " ((%d) %d-ից)" - -#, c-format -msgid " (file %d of %d)" -msgstr " (Ֆայլ %d %d-ից)" - -#, c-format -msgid " (file (%d) of %d)" -msgstr " (Ֆայլ (%d) %d-ից)" - -msgid "[Command Line]" -msgstr "[Հրամանյին տող]" - -msgid "[Prompt]" -msgstr "[Հուշում]" - -msgid "[Popup]" -msgstr "[Սահապատ]" - -msgid "[Scratch]" -msgstr "[Ժամանակավոր]" - -msgid "WARNING: The file has been changed since reading it!!!" -msgstr "Զգուշացում: ֆայլը փոփոխվել է դեռ չկարդացված !!!" - -msgid "Do you really want to write to it" -msgstr "Իրո՞ք ուզում եք գրել" - -msgid "[New]" -msgstr "[Նոր]" - -msgid "[New File]" -msgstr "[Նոր ֆայլ]" - -msgid " CONVERSION ERROR" -msgstr " ՓՈԽԱԿԵՐՊՄԱՆ ՍԽԱԼ" - -#, c-format -msgid " in line %ld;" -msgstr " %ld տողում;" - -msgid "[NOT converted]" -msgstr "[ՉԻ փոխակերպվել]" - -msgid "[converted]" -msgstr "[փոխակերպվել է]" - -msgid "[Device]" -msgstr "[Սարք]" - -msgid " [a]" -msgstr " [a]" - -msgid " appended" -msgstr " կից" - -msgid " [w]" -msgstr " [w]" - -msgid " written" -msgstr " ամրագրված է" - -msgid "" -"\n" -"WARNING: Original file may be lost or damaged\n" -msgstr "" -"\n" -"Զգուշացում: նախնական ֆայլը հնարավոր է վնասված է\n" - -msgid "don't quit the editor until the file is successfully written!" -msgstr "մի փակեք խմբագիրը քանի դեռ ֆայլը հաջողությամբ կգրվի!" - -msgid "W10: Warning: Changing a readonly file" -msgstr "W10: Զգուշացում: Փոփոխվում է կարդալու թուլտվությամբ ֆայլ" - -msgid "No display" -msgstr "Էկրան չկա" - -msgid "" -": Send failed.\n" -msgstr "" -": Հնարավոր չեղավ ուղարկել.\n" - -msgid "" -": Send failed. Trying to execute locally\n" -msgstr "" -": Հնարավոր չեղավ ուղարկել. Լոկալ կատարման փորձ\n" - -#, c-format -msgid "%d of %d edited" -msgstr "%d֊ը %d֊ից խմբագրվել է" - -msgid "" -"No display: Send expression failed.\n" -msgstr "" -"Էկրան չկա: Հնարավոր չեղավ ուղարկել արտահայտությունը.\n" - -msgid "" -": Send expression failed.\n" -msgstr "" -": Հնարավոր չեղավ ուղարկել արտահայտությունը.\n" - -msgid "Used CUT_BUFFER0 instead of empty selection" -msgstr "Օգտագործվել է CUT_BUFFER0 դատարկ ընտրության փոխարեն" - -msgid "tagname" -msgstr "պիտակի անուն" - -msgid "" -" kind file\n" -msgstr "" -" ֆայլի տիպ\n" - -msgid "'history' option is zero" -msgstr "'history' կարգանշանը դատարկ է" - -msgid "Warning: Using a weak encryption method; see :help 'cm'" -msgstr "Զգուշացում։ Օգտագործվում է թույլ կոդավորման մեթոդ, տես․ :help 'cm'" - -msgid "Note: Encryption of swapfile not supported, disabling swap file" -msgstr "" -"Նշում․ փոխանակման ֆայլի կոդավորումը չի աջակցվում, ապաակտիվացվում է " -"փոխանակման ֆայլը" - -msgid "Enter encryption key: " -msgstr "Կոդավորման համար մուտթագրեք գաղտնաբառը: " - -msgid "Enter same key again: " -msgstr "Կրկնեք գաղտնաբառը: " - -msgid "Keys don't match!" -msgstr "Բանալիները տարբեր են!" - -msgid "[crypted]" -msgstr "[կոդավորված]" - -#, c-format -msgid "xchacha20v2: using custom opslimit \"%llu\" for Key derivation." -msgstr "" -"xchacha20v2: օգտագործելով \"%llu\" մաքսային սահմանաչափը բանալիների ածանցման " -"համար:" - -#, c-format -msgid "xchacha20v2: using default opslimit \"%llu\" for Key derivation." -msgstr "" -"xchacha20v2: օգտագործելով լռելյայն \"%llu\" opslimit բանալի ածանցման համար:" - -#, c-format -msgid "xchacha20v2: using custom memlimit \"%lu\" for Key derivation." -msgstr "" -"xchacha20v2: օգտագործելով հատուկ memlimit \"%lu\" հիմնական ածանցման համար:" - -#, c-format -msgid "xchacha20v2: using default memlimit \"%lu\" for Key derivation." -msgstr "" -"xchacha20v2: օգտագործելով լռելյայն memlimit \"%lu\" հիմնական ածանցման համար:" - -#, c-format -msgid "xchacha20v2: using custom algorithm \"%d\" for Key derivation." -msgstr "" -"xchacha20v2: օգտագործելով \"%d\" հատուկ ալգորիթմը բանալիների ածանցման համար:" - -#, c-format -msgid "xchacha20v2: using default algorithm \"%d\" for Key derivation." -msgstr "" -"xchacha20v2: օգտագործելով \"%d\" լռելյայն ալգորիթմը բանալիների ածանցման " -"համար:" - -msgid "Entering Debug mode. Type \"cont\" to continue." -msgstr "Մուտք կոդի զննման ռեժիմ. Շարունակելու համար կատարել \"cont\" հրամանը." - -#, c-format -msgid "Oldval = \"%s\"" -msgstr "Օլդվալ = \"%s\"" - -#, c-format -msgid "Newval = \"%s\"" -msgstr "Newval = \"%s\"" - -#, c-format -msgid "line %ld: %s" -msgstr "տող %ld: %s" - -#, c-format -msgid "cmd: %s" -msgstr "հրաման: %s" - -#| msgid "E726: Stride is zero" -msgid "frame is zero" -msgstr "շրջանակը զրո է" - -#, c-format -msgid "frame at highest level: %d" -msgstr "շրջանակ ամենաբարձր մակարդակում՝ %d" - -#, c-format -msgid "Breakpoint in \"%s%s\" line %ld" -msgstr "Վերադարձի կետը՝ \"%s%s\" տող %ld" - -msgid "No breakpoints defined" -msgstr "Վերադարձի կետեր չեն սահամանվել" - -#, c-format -msgid "%3d %s %s line %ld" -msgstr "%3d %s %s տող %ld" - -#, c-format -msgid "%3d expr %s" -msgstr "%3d expr %s" - -msgid "extend() argument" -msgstr "extend() արգումենտ" - -#, c-format -msgid "Not enough memory to use internal diff for buffer \"%s\"" -msgstr "" -"Հիշողությունը բավարար չէ \"%s\" բուֆերի համար ներքին տարբերություն " -"օգտագործելու համար" - -msgid "Patch file" -msgstr "Նմանակման ֆայլ" - -msgid "Custom" -msgstr "Հարմարեցված" - -msgid "Latin supplement" -msgstr "Լատինական հավելում" - -msgid "Greek and Coptic" -msgstr "Հունական և Ղպտիական" - -msgid "Cyrillic" -msgstr "Կիրիլիցա" - -msgid "Hebrew" -msgstr "Եբրայական" - -msgid "Arabic" -msgstr "Արաբական" - -msgid "Latin extended" -msgstr "Լատինական ընդարձակ" - -msgid "Greek extended" -msgstr "Հունարեն երկարաձգված" - -msgid "Punctuation" -msgstr "Կետադրական նշան" - -msgid "Super- and subscripts" -msgstr "Սուպեր- և բաժանորդներ" - -msgid "Currency" -msgstr "Արժույթ" - -msgid "Other" -msgstr "Այլ" - -msgid "Roman numbers" -msgstr "Հռոմեական թվեր" - -msgid "Arrows" -msgstr "Ռադիո" - -msgid "Mathematical operators" -msgstr "Մաթեմատիկական օպերատորներ" - -msgid "Technical" -msgstr "Տեխնիկական" - -msgid "Box drawing" -msgstr "Տուփի նկարչություն" - -msgid "Block elements" -msgstr "Արգելափակման տարրեր" - -msgid "Geometric shapes" -msgstr "Երկրաչափական պատկերներ" - -msgid "Symbols" -msgstr "Խորհրդանիշներ" - -msgid "Dingbats" -msgstr "Դինգբատներ" - -msgid "CJK symbols and punctuation" -msgstr "CJK նշաններ և կետադրական նշաններ" - -msgid "Hiragana" -msgstr "Հիրագանա" - -msgid "Katakana" -msgstr "Կատականա" - -msgid "Bopomofo" -msgstr "Բոպոմոֆո" - -msgid "" -"\n" -"\tLast set from " -msgstr "" -"\n" -"\tՎերջին փոփոխումը " - -msgid "&Ok" -msgstr "&Լավ" - -msgid "" -"&OK\n" -"&Cancel" -msgstr "" -"&Լավ\n" -"&Չեղարկել" - -msgid "called inputrestore() more often than inputsave()" -msgstr "inputrestore() կանչվել է ավելի շատ քան inputsave() ֆունկցիան" - -#, c-format -msgid "<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s" -msgstr "<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s" - -#, c-format -msgid "<%s>%s%s %d, Hex %02x, Octal %03o" -msgstr "<%s>%s%s %d, Hexa %02x, Octal %03o" - -#, c-format -msgid "> %d, Hex %04x, Oct %o, Digr %s" -msgstr "> %d, Հեքս %04x, Հոկտ %o, Դիգ %s" - -#, c-format -msgid "> %d, Hex %08x, Oct %o, Digr %s" -msgstr "> %d, Հեքս %08x, Հոկտ %o, Դիգ %s" - -#, c-format -msgid "> %d, Hex %04x, Octal %o" -msgstr "> %d, Hexa %04x, Octal %o" - -#, c-format -msgid "> %d, Hex %08x, Octal %o" -msgstr "> %d, Hexa %08x, Octal %o" - -#, c-format -msgid "%ld line moved" -msgid_plural "%ld lines moved" -msgstr[0] "%ld տող տեղափոխվել է" -msgstr[1] "%ld տողեր տեղափոխվել են" - -#, c-format -msgid "%ld lines filtered" -msgstr "%ld տողեր ֆիլտրվել են" - -msgid "" -"[No write since last change]\n" -msgstr "" -"[Փոփոխությունները պահպանված չեն]\n" - -msgid "Save As" -msgstr "Պահպանել որպես" - -msgid "Write partial file?" -msgstr "Պահպանե՞լ մաս-մաս?" - -#, c-format -msgid "Overwrite existing file \"%s\"?" -msgstr "Վերագրում գոյություն ունեցող ֆայլում\"%s\"?" - -#, c-format -msgid "Swap file \"%s\" exists, overwrite anyway?" -msgstr "Սվեփ ֆայլը գոյություն ունի \"%s\", վերագրել?" - -#, c-format -msgid "" -"'readonly' option is set for \"%s\".\n" -"Do you wish to write anyway?" -msgstr "" -"\"%s\"-ի համար 'readonly' կարգանշումը միացված է.\n" -"Պահպանել?" - -#, c-format -msgid "" -"File permissions of \"%s\" are read-only.\n" -"It may still be possible to write it.\n" -"Do you wish to try?" -msgstr "" -"\"%s\" ֆայլն ունի միայն կարդալու հնարավորություն.\n" -"Հնարավոր է, որ այն կարելի է ամրագրել.\n" -"Ու՞զում եք փորձել?" - -msgid "Edit File" -msgstr "Խմբագրել ֆայլը" - -#, c-format -msgid "replace with %s (y/n/a/q/l/^E/^Y)?" -msgstr "փոխարինել %s արժեքո՞վ (y/n/a/q/l/^E/^Y)" - -msgid "(Interrupted) " -msgstr "(Ընդհատված) " - -#, c-format -msgid "%ld match on %ld line" -msgid_plural "%ld matches on %ld line" -msgstr[0] "%ld համընկնում %ld տողում" -msgstr[1] "%ld համընկնումներ %ld տողում" - -#, c-format -msgid "%ld substitution on %ld line" -msgid_plural "%ld substitutions on %ld line" -msgstr[0] "%ld հատ փոխարինումներ %ld տողում" -msgstr[1] "%ld հատ փոխարինումներ %ld տողում" - -#, c-format -msgid "%ld match on %ld lines" -msgid_plural "%ld matches on %ld lines" -msgstr[0] "%ld համընկնում %ld տողերում" -msgstr[1] "%ld համընկնումներ %ld տողերում" - -#, c-format -msgid "%ld substitution on %ld lines" -msgid_plural "%ld substitutions on %ld lines" -msgstr[0] "%ld հատ փոխարինումներ %ld տեղերում" -msgstr[1] "%ld հատ փոխարինումներ %ld տեղերում" - -#, c-format -msgid "Pattern found in every line: %s" -msgstr "Ամեն տողում համապատասխանեցում է հայտնաբերվել: %s" - -#, c-format -msgid "Pattern not found: %s" -msgstr "Նմուշը չի հայտնաբերվել: %s" - -msgid "No old files" -msgstr "Չկան հին ֆայլեր" - -#, c-format -msgid "Save changes to \"%s\"?" -msgstr "Պահպանե՞լ փոփոխությունները \"%s\"?" - -msgid "Warning: Entered other buffer unexpectedly (check autocommands)" -msgstr "" -"Զգուշացում: Անսպասելու անցում է կատարվել դեպի այլ բուֆեր (ստուգեք " -"ինքնահրամանննրը)" - -#, c-format -msgid "W20: Required python version 2.x not supported, ignoring file: %s" -msgstr "W20: Պահանջվող python 2.x տարբերակը չի աջակցվում՝ %s ֆայլն անտեսվում է" - -#, c-format -msgid "W21: Required python version 3.x not supported, ignoring file: %s" -msgstr "" -"W21: Պահանջվող python 3.x տարբերակը չի աջակցվում, անտեսում ենք %s ֆայլը" - -msgid "Entering Ex mode. Type \"visual\" to go to Normal mode." -msgstr "" -"Մուտք Կատարման ռեժիմ. Նորմալ ռեժիմ անցնելու համար կատարել \"visual\" հրամանը." - -#, c-format -msgid "Executing: %s" -msgstr "Կատարվում է։ %s" - -msgid "End of sourced file" -msgstr "Կցված ֆայլի վերջում" - -msgid "End of function" -msgstr "Ֆունկցիայի վերջը" - -msgid "Backwards range given, OK to swap" -msgstr "Տրված է հակադարձ միջակայք, անցնել սվեփ" - -#, c-format -msgid "%d more file to edit. Quit anyway?" -msgid_plural "%d more files to edit. Quit anyway?" -msgstr[0] "%d֊ից շատ խմբագրվող ֆայլեր. Վերջացնե՞լ?" -msgstr[1] "%d֊ից շատ խմբագրվող ֆայլեր. Վերջացնե՞լ?" - -msgid "unknown" -msgstr "անծանոթ" - -msgid "Greetings, Vim user!" -msgstr "Ողջույն Vim-ի օգտատեր!" - -msgid "Already only one tab page" -msgstr "Մնացել է միայն մեկ բացված թաբի էջ" - -msgid "Edit File in new tab page" -msgstr "Խմբագրել ֆայլը նոր թաբի էջում" - -msgid "Edit File in new window" -msgstr "Խմբագրել ֆայլը նոր պատուհանում" - -#, c-format -msgid "Tab page %d" -msgstr "Թաբ էջ %d" - -msgid "No swap file" -msgstr "Առանց սվեփ ֆայլ" - -msgid "Append File" -msgstr "Կցել ֆայլին" - -#, c-format -msgid "Window position: X %d, Y %d" -msgstr "Նոր պատուհան: X %d, Y %d" - -msgid "Save Redirection" -msgstr "ՈՒղղղորդման պահպանում" - -msgid "Untitled" -msgstr "Անանուն" - -#, c-format -msgid "Exception thrown: %s" -msgstr "Բացառում է նետվել: %s" - -#, c-format -msgid "Exception finished: %s" -msgstr "Բացառումը ավարտվել է: %s" - -#, c-format -msgid "Exception discarded: %s" -msgstr "Բացառումը անտեսվել է: %s" - -#, c-format -msgid "%s, line %ld" -msgstr "%s, տող %ld" - -#, c-format -msgid "Exception caught: %s" -msgstr "Բացառում է առաջացել: %s" - -#, c-format -msgid "%s made pending" -msgstr "%s սպասում է" - -#, c-format -msgid "%s resumed" -msgstr "%s բաց է թողնված" - -#, c-format -msgid "%s discarded" -msgstr "%s անտեսված է" - -msgid "Exception" -msgstr "Բացառման իրավիճակ" - -msgid "Error and interrupt" -msgstr "Սխալ և ընդհատում" - -msgid "Error" -msgstr "Սխալ" - -msgid "Interrupt" -msgstr "Ընդհատում" - -msgid "is a directory" -msgstr "թղթապանակ է" - -msgid "Illegal file name" -msgstr "Չթույլատրված ֆայլի անուն" - -msgid "is not a file" -msgstr "ֆայլ չէ" - -msgid "is a device (disabled with 'opendevice' option)" -msgstr "սարք է ('opendevice' կարգանշանն անջատված է)" - -msgid "[New DIRECTORY]" -msgstr "[Նոր ցանկ]" - -msgid "[File too big]" -msgstr "[ֆայլը շատ մեծ է]" - -msgid "[Permission Denied]" -msgstr "[Թույլատրված չէ]" - -msgid "" -"Vim: Reading from stdin...\n" -msgstr "" -"Vim: Ընթերցում ստանդարտ մուտքից...\n" - -msgid "Reading from stdin..." -msgstr "Ընթերցում ստանդարտ մուտքից..." - -msgid "[fifo]" -msgstr "[ֆիֆո]" - -msgid "[socket]" -msgstr "[վարդակ]" - -msgid "[character special]" -msgstr "[նշանին հատուկ]" - -msgid "[CR missing]" -msgstr "[Բացակայող CR]" - -msgid "[long lines split]" -msgstr "[երկար տողերի բաժանում]" - -#, c-format -msgid "[CONVERSION ERROR in line %ld]" -msgstr "[ՓՈԽԱԿԵՐՊՄԱՆ ՍԽԱԼ %ld տողում]" - -#, c-format -msgid "[ILLEGAL BYTE in line %ld]" -msgstr "[ԱՆԹՈՒՅԼԱՏՐԵԼԻ ԲԱՅԹ %ld տողում]" - -msgid "[READ ERRORS]" -msgstr "[ԿԱՐԴԱԼՈՒ ՍԽԱԼ]" - -msgid "Can't find temp file for conversion" -msgstr "Փոխակերպման Ժամանակավոր ֆայլը չի գտնվել" - -msgid "Conversion with 'charconvert' failed" -msgstr "Փոխակերպումն անհաջող է ավարտվել'charconvert'-ի հետ" - -msgid "can't read output of 'charconvert'" -msgstr "անհնար է ընթերցել 'charconvert'-ի ելքը" - -msgid "[dos]" -msgstr "[դոս]" - -msgid "[dos format]" -msgstr "[format dos]" - -msgid "[mac]" -msgstr "[mac]" - -msgid "[mac format]" -msgstr "[format mac]" - -msgid "[unix]" -msgstr "[յունիքս]" - -msgid "[unix format]" -msgstr "[format unix]" - -#, c-format -msgid "%ld line, " -msgid_plural "%ld lines, " -msgstr[0] "տող: %ld, " -msgstr[1] "տողեր: %ld, " - -#, c-format -msgid "%lld byte" -msgid_plural "%lld bytes" -msgstr[0] "%lld բայթ" -msgstr[1] "%lld բայթեր" - -msgid "[noeol]" -msgstr "[նոոլ]" - -msgid "[Incomplete last line]" -msgstr "[Չվերջացած վերջին տող]" - -#, c-format -msgid "" -"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as " -"well" -msgstr "W12: Զգուշացում: \"%s\" ֆայլն ու բուֆերը փոփոխվել են միմյանցից անկախ" - -msgid "See \":help W12\" for more info." -msgstr "Տես. \":help W12\" հավելյալ տեղեկատվության համար." - -#, c-format -msgid "W11: Warning: File \"%s\" has changed since editing started" -msgstr "W11: Զգուշացում: \"%s\" ֆայլը փոփոխվել է խմբագրման սկսվելու ժամանակ" - -msgid "See \":help W11\" for more info." -msgstr "Տես. \":help W11\" հավելյալ տեղեկատվությոան համար." - -#, c-format -msgid "W16: Warning: Mode of file \"%s\" has changed since editing started" -msgstr "" -"W16: Զգուշացում: \"%s\" ֆայլին դիմելու մոդը փոփոխվել է խմբագրման սկսվելու " -"ժամանակредактирования" - -msgid "See \":help W16\" for more info." -msgstr "Տես. \":help W16\" հավելյալ տեղեկատվության համար." - -#, c-format -msgid "W13: Warning: File \"%s\" has been created after editing started" -msgstr "W13: Զգուշացում: \"%s\" ֆայլը ստեղծել է խմբագրման սկսվելուց հետո" - -msgid "Warning" -msgstr "Զգուշացում" - -msgid "" -"&OK\n" -"&Load File\n" -"Load File &and Options" -msgstr "" -"&Լավ\n" -"&Բեռնել ֆայլը\n" -"Բեռնել ֆայլը և ընտրանքները" - -msgid "" -msgstr "<դատարկ>" - -msgid "writefile() first argument must be a List or a Blob" -msgstr "writefile()-ի առաջին պարամետրը պետք է լինի Cանկ" - -msgid "Select Directory dialog" -msgstr "Նշել թղթապանակը" - -msgid "Save File dialog" -msgstr "Ֆայլ պահպանելու դիալոգ" - -msgid "Open File dialog" -msgstr "Ֆայլ բացելու դիալոգ" - -msgid "no matches" -msgstr "չկան համընկնումներ" - -#, c-format -msgid "+--%3ld line folded " -msgid_plural "+--%3ld lines folded " -msgstr[0] "+--%3ld տող փաթաթվել է " -msgstr[1] "+--%3ld տողեր փաթաթվել են " - -#, c-format -msgid "+-%s%3ld line: " -msgid_plural "+-%s%3ld lines: " -msgstr[0] "+-%s%3ld տող: " -msgstr[1] "+-%s%3ld տողեր: " - -msgid "Not enough memory to set references, garbage collection aborted!" -msgstr "" -"Հիշողությունը բավարար չէ հղումներ սահմանելու համար, աղբահանությունն " -"ընդհատվել է!" - -msgid "No match at cursor, finding next" -msgstr "Կուրսորի դիրքում չկա համընկնում, հաջորդի որոնում" - -msgid "_Save" -msgstr "_Պահպանել" - -msgid "_Open" -msgstr "_Բացել" - -msgid "_Cancel" -msgstr "_Չեղարկել" - -msgid "_OK" -msgstr "_Այո" - -msgid "" -"&Yes\n" -"&No\n" -"&Cancel" -msgstr "" -"&Այո\n" -"&Ոչ\n" -"&Թողնել" - -msgid "OK" -msgstr "Այո" - -msgid "Yes" -msgstr "Այո" - -msgid "No" -msgstr "Ոչ" - -msgid "Cancel" -msgstr "Չեղարկել" - -msgid "Input _Methods" -msgstr "Զետեղման եղանակ" - -msgid "VIM - Search and Replace..." -msgstr "VIM - Որոնում և փոխարինում..." - -msgid "VIM - Search..." -msgstr "VIM - Որոնում..." - -msgid "Find what:" -msgstr "Ինչ փնտրել:" - -msgid "Replace with:" -msgstr "Փոխարինել:" - -msgid "Match whole word only" -msgstr "Համապատասխանեցնել միայն ամբողջ բառը" - -msgid "Match case" -msgstr "Համընկնման դեպք" - -msgid "Direction" -msgstr "Ուղղություն" - -msgid "Up" -msgstr "Վերև" - -msgid "Down" -msgstr "Ներքև" - -msgid "Find Next" -msgstr "Փնտրել հաջորդը" - -msgid "Replace" -msgstr "Փոխարինում" - -msgid "Replace All" -msgstr "Փոխարինել բոլորը" - -msgid "_Close" -msgstr "_Փակել" - -msgid "" -"Vim: Received \"die\" request from session manager\n" -msgstr "" -"Vim: Սեսսիայի զեկավարությունից ստացվել է մահվան պահանջ\n" - -msgid "Close tab" -msgstr "Փակել թաբը" - -msgid "New tab" -msgstr "Նոր թաբ" - -msgid "Open Tab..." -msgstr "Բացել թաբ..." - -msgid "" -"Vim: Main window unexpectedly destroyed\n" -msgstr "" -"Vim: Գլխավոր պատուհանն անսպասելի ավերվել է\n" - -msgid "&Filter" -msgstr "&Ֆիլտր" - -msgid "&Cancel" -msgstr "&Թողնել" - -msgid "Directories" -msgstr "Թղթապանակ" - -msgid "Filter" -msgstr "Ֆիլտր" - -msgid "&Help" -msgstr "&Օգնություն" - -msgid "Files" -msgstr "Ֆայլեր" - -msgid "&OK" -msgstr "&Այո" - -msgid "Selection" -msgstr "Նշել" - -msgid "Vim dialog" -msgstr "Vim դիալոգ" - -msgid "Find &Next" -msgstr "Փնտրել հաջորդը" - -msgid "&Replace" -msgstr "Փոխարինել" - -msgid "Replace &All" -msgstr "Փոխարինել &բոլորը" - -msgid "&Undo" -msgstr "Չեղարկել" - -msgid "Open tab..." -msgstr "Բացել թաբը..." - -msgid "Find string" -msgstr "Փնտրել տողը" - -msgid "Find & Replace" -msgstr "Փնտրել և Փոխարինել" - -msgid "Not Used" -msgstr "Օգտագործված չէ" - -msgid "" -"Directory\t*.nothing\n" -msgstr "" -"Թղթապանակ\t*.ոչինչ\n" - -#, c-format -msgid "Font0: %s" -msgstr "Ֆոնտ0: %s" - -#, c-format -msgid "Font%d: %s" -msgstr "Ֆոնտ%d: %s" - -#, c-format -msgid "Font%d width is not twice that of font0" -msgstr "Font%d-ի երկարությունը font0 ֆոնտի երկարության կրկնակին չէ" - -#, c-format -msgid "Font0 width: %d" -msgstr "Font0-ի երկարությունը: %d" - -#, c-format -msgid "Font%d width: %d" -msgstr "Font%d-ի երկարությունը: %d" - -msgid "Invalid font specification" -msgstr "Անվավեր տառատեսակ" - -msgid "&Dismiss" -msgstr "Թաքցնել" - -msgid "no specific match" -msgstr "հատուկ համընկնում չկա" - -msgid "Vim - Font Selector" -msgstr "Vim - տառատեսակի ընտրող" - -msgid "Name:" -msgstr "Անվանում:" - -msgid "Show size in Points" -msgstr "Ցուդադրել կետային չափը" - -msgid "Encoding:" -msgstr "Կոդավորում:" - -msgid "Font:" -msgstr "Տառատեսակ:" - -msgid "Style:" -msgstr "Ստիլ:" - -msgid "Size:" -msgstr "Չափ:" - -#, c-format -msgid "Page %d" -msgstr "Էջ %d" - -msgid "No text to be printed" -msgstr "Արտածվելիք տեքստ չկա" - -#, c-format -msgid "Printing page %d (%d%%)" -msgstr "Էջի տպագրում։ %d (%d%%)" - -#, c-format -msgid " Copy %d of %d" -msgstr " Պատճենել %d-ը %d֊ից" - -#, c-format -msgid "Printed: %s" -msgstr "Պատճենված: %s" - -msgid "Printing aborted" -msgstr "Պատճենումը ընդհատված է" - -msgid "Sending to printer..." -msgstr "Ուղարկվում է պատճենահանողին..." - -msgid "Print job sent." -msgstr "Պատճենման հրամանն ուղարկվել է." - -#, c-format -msgid "Sorry, help file \"%s\" not found" -msgstr "Ներողություն, '%s' օգնության էջը չի հայտնաբերվել" - -msgid "W18: Invalid character in group name" -msgstr "W18: Անվավեր նշան՝ խմբի անվանման մեջ" - -msgid "Add a new database" -msgstr "Ավելացնել նոր տվյալների բազա" - -msgid "Query for a pattern" -msgstr "Հարցում նմուշի համար" - -msgid "Show this message" -msgstr "Ցուցադրել այս հաղորդագրությունը" - -msgid "Kill a connection" -msgstr "Վթարել կապը" - -msgid "Reinit all connections" -msgstr "Վերանախապատրաստել կապերը" - -msgid "Show connections" -msgstr "Ցուցադրել կապերը" - -msgid "" -"This cscope command does not support splitting the window.\n" -msgstr "" -"Այս cscope հրամանը պատուհանի բաժանմանը չի աջակցում.\n" - -#, c-format -msgid "Added cscope database %s" -msgstr "Ավելացվել է %s cscope տվյալների բազան" - -msgid "cs_create_connection setpgid failed" -msgstr "cs_create_connection: setpgid֊ն հնարավոր չի եղել կատարել" - -msgid "cs_create_connection exec failed" -msgstr "cs_create_connection: exec֊ն հնարավոր չի եղել կատարել" - -msgid "cs_create_connection: fdopen for to_fp failed" -msgstr "cs_create_connection: fdopen֊ն հնարավոր չի կատարել to_fp֊ի համար" - -msgid "cs_create_connection: fdopen for fr_fp failed" -msgstr "cs_create_connection: հնարավոր չի կատարել fr_fp֊ի համար" - -msgid "" -"cscope commands:\n" -msgstr "" -"cscope հրամանները:\n" - -#, c-format -msgid "%-5s: %s%*s (Usage: %s)" -msgstr "%-5s: %s%*s (Օգտագործում: %s)" - -msgid "" -"\n" -" a: Find assignments to this symbol\n" -" c: Find functions calling this function\n" -" d: Find functions called by this function\n" -" e: Find this egrep pattern\n" -" f: Find this file\n" -" g: Find this definition\n" -" i: Find files #including this file\n" -" s: Find this C symbol\n" -" t: Find this text string\n" -msgstr "" -"\n" -" a: Փնտրել այս նշանի վերագրումները\n" -" c: Փնտրել այս ֆունկցիան կանչող ֆունկցիանները\n" -" d: Փնտրել այս ֆունկցիայից կանչվող ֆունկցիաները\n" -" e: Փնտրել այս egrep նմուշը\n" -" f: Փնտրել այս ֆայլը\n" -" g: Փնտրել այս սահմանումը\n" -" s: Փնտրելայս C-նշանը\n" -" t: Փնտրել այս տեքստը\n" - -#, c-format -msgid "cscope connection %s closed" -msgstr "cscope %s կապը չի փակվել է" - -#, c-format -msgid "Cscope tag: %s" -msgstr "Cscope պիտակ: %s" - -msgid "" -"\n" -" # line" -msgstr "" -"\n" -" # տող" - -msgid "" -"filename / context / line\n" -msgstr "" -"ֆայլի անուն / կոնտեքստ / տող\n" - -msgid "All cscope databases reset" -msgstr "Ողջ cscope տվյալների բազաների վերաբեռնում" - -msgid "" -"no cscope connections\n" -msgstr "" -"չկան cscope կապեր\n" - -msgid "" -" # pid database name prepend path\n" -msgstr "" -" # pid տվյալների բազայի անվանումը prepend path\n" - -msgid "Lua library cannot be loaded." -msgstr "Հնարավոր չէ բեռնել Lua գրադարանը." - -msgid "cannot save undo information" -msgstr "հնարավոր չէ պահպանել չեղարկման տեղեկատվությոանը" - -msgid "invalid expression" -msgstr "անվավեր արտահայտություն" - -msgid "expressions disabled at compile time" -msgstr "արտահայտոթյուններն անջատված են կառուցման ժամանակ" - -msgid "hidden option" -msgstr "թաքցված կարգանշան" - -msgid "unknown option" -msgstr "անծանոթ կարգանշան" - -msgid "window index is out of range" -msgstr "պատուհանի համարն միջակայքից դուրս է եկել" - -msgid "couldn't open buffer" -msgstr "հնարավոր չէ բացել բուֆերը" - -msgid "cannot delete line" -msgstr "հնարավոր չէ ջնջել տողը" - -msgid "cannot replace line" -msgstr "հնարավոր չէ փոխարինել տողը" - -msgid "cannot insert line" -msgstr "հնարավոր չէ զետեղել տողը" - -msgid "string cannot contain newlines" -msgstr "տողը չի կարող պարունակել տողանցումներ" - -msgid "error converting Scheme values to Vim" -msgstr "scheme արժեքների փոխակերպման սխալ" - -msgid "Vim error: ~a" -msgstr "Vim սխալ: ~a" - -msgid "Vim error" -msgstr "Vim սխալ" - -msgid "buffer is invalid" -msgstr "բուֆերն անվավեր է" - -msgid "window is invalid" -msgstr "պատուհանն անվավեր է" - -msgid "linenr out of range" -msgstr "տողի համարը միջակայքից դուրս է եկել" - -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 "անվավեր բուֆերի համար" - -msgid "not implemented yet" -msgstr "իրականացված չէ դեռևս" - -msgid "cannot set line(s)" -msgstr "հնարավոր չէ նշանակել տողը(երը)" - -msgid "invalid mark name" -msgstr "անվավեր նշակման անուն" - -msgid "mark not set" -msgstr "նշակումը սահմանած չէ" - -#, c-format -msgid "row %d column %d" -msgstr "տող %d սյուն %d" - -msgid "cannot insert/append line" -msgstr "հնարավոր չէ զետեղել/կցել տողը" - -msgid "line number out of range" -msgstr "տողի համարը միջակայքից անցել է" - -msgid "unknown flag: " -msgstr "անծանոթ դրոշմանիշ: " - -msgid "unknown vimOption" -msgstr "անծանոթ vimOption" - -msgid "keyboard interrupt" -msgstr "ստեղնաշարային ընդհատում" - -msgid "cannot create buffer/window command: object is being deleted" -msgstr "հնարավորչէ կատարել բուֆերի/պատուհանի հարամանը: օբյեկտը ջնջվում է" - -msgid "" -"cannot register callback command: buffer/window is already being deleted" -msgstr "հնարավորչէ ռեգիստրացնել մշակման հրամանը․ բուֆերը/պատուհանը ջնջվում է" - -msgid "cannot register callback command: buffer/window reference not found" -msgstr "" -"հնարավորչէ ռեգիստրացնել մշակման հրամանը․ բուֆերի/պատուհանի հղումը չի " -"հայտնաբերվել" - -msgid "cannot get line" -msgstr "հանրավոր չէ ստանալ տողը" - -msgid "Unable to register a command server name" -msgstr "Հնարավոր չէ ռեգիստրացնել server name հրամանը" - -#, c-format -msgid "%ld lines to indent... " -msgstr "%ld տողեր խորացման համար․.. " - -#, c-format -msgid "%ld line indented " -msgid_plural "%ld lines indented " -msgstr[0] "%ld տող խորացվել է " -msgstr[1] "%ld տողեր խորացվել են " - -msgid " Keyword completion (^N^P)" -msgstr "Հիմնաբառերի ավտոմատ լրացում (^N^P)" - -msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" -msgstr " ^X ավտոմատ լրացման ռեժիմ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" - -msgid " Whole line completion (^L^N^P)" -msgstr " Տողի ամբողջական լրացում (^L^N^P)" - -msgid " File name completion (^F^N^P)" -msgstr " Ֆայլի անունի ավոտմատ լրացում (^F^N^P)" - -msgid " Tag completion (^]^N^P)" -msgstr " Պիտակի ավտոմատ լրացում (^]^N^P)" - -msgid " Path pattern completion (^N^P)" -msgstr " Ճանապարհի ավոտմատ լրացում (^N^P)" - -msgid " Definition completion (^D^N^P)" -msgstr " Սահմանման ավտոմատ լրացում (^D^N^P)" - -msgid " Dictionary completion (^K^N^P)" -msgstr " Բառարանի ավտոմատ լրացում (^K^N^P)" - -msgid " Thesaurus completion (^T^N^P)" -msgstr " Հոմանիշների ավտոմատ լրացում (^T^N^P)" - -msgid " Command-line completion (^V^N^P)" -msgstr " Հրամանի տողի ավտոմատ լրացում (^V^N^P)" - -msgid " User defined completion (^U^N^P)" -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 " Keyword Local completion (^N^P)" -msgstr "Հիմնաբառերի ավտոմատ լրացում (^N^P)" - -msgid "'dictionary' option is empty" -msgstr "'dictionary' կարգանշանը դատարկ է" - -msgid "'thesaurus' option is empty" -msgstr "'thesaurus' կարգանշանը դատարկ է" - -#, c-format -msgid "Scanning dictionary: %s" -msgstr "Բառարանի ընթերցում: %s" - -msgid " (insert) Scroll (^E/^Y)" -msgstr " (զետեղել) Փաթաթ (^E/^Y)" - -msgid " (replace) Scroll (^E/^Y)" -msgstr " (փոխարինել) Փաթաթ (^E/^Y)" - -#, c-format -msgid "Scanning: %s" -msgstr "Ընթերցում: %s" - -msgid "Scanning tags." -msgstr "Կատարվում է պիտակների ընթերցում." - -msgid "match in file" -msgstr "համընկնում ֆայլում" - -msgid " Adding" -msgstr " Ավելացում" - -msgid "-- Searching..." -msgstr "-- Որոնում..." - -msgid "Hit end of paragraph" -msgstr "Պարագրաֆի վերջը" - -msgid "Pattern not found" -msgstr "Նմուշը չի հայտնաբերվել" - -msgid "Back at original" -msgstr "Վերադարձ նախնական վիճակին" - -msgid "Word from other line" -msgstr "Այլ տողի բառ" - -msgid "The only match" -msgstr "Միակ համընկնումը" - -#, c-format -msgid "match %d of %d" -msgstr "%d համընկնում %d հնարավորից" - -#, c-format -msgid "match %d" -msgstr "համընկնում %d" - -msgid "flatten() argument" -msgstr "flatten() արգումենտ" - -msgid "sort() argument" -msgstr "sort() արգումենտ" - -msgid "uniq() argument" -msgstr "uniq() արգումենտ" - -msgid "map() argument" -msgstr "map() արգումենտ" - -msgid "mapnew() argument" -msgstr "mapnew() արգումենտ" - -msgid "filter() argument" -msgstr "filter() արգումենտ" - -msgid "foreach() argument" -msgstr "foreach() արգումենտ" - -msgid "extendnew() argument" -msgstr "extendnew() արգումենտ" - -msgid "remove() argument" -msgstr "remove() արգումենտ" - -msgid "reverse() argument" -msgstr "reverse() արգումենտ" - -#, c-format -msgid "Current %slanguage: \"%s\"" -msgstr "Օգտագործվող %sլեզուն: \"%s\"" - -msgid "Unknown option argument" -msgstr "Անծանոթ կարգանշման արգումենտ" - -msgid "Too many edit arguments" -msgstr "Աննախադեպ շատ խմբագրման արգումենտներ" - -msgid "Argument missing after" -msgstr "Արգումենտը տրված չէ" - -msgid "Garbage after option argument" -msgstr "Աղբ, կարգանշման արգումենտից հետո" - -msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments" -msgstr "Աննախադեպ շատ \"+command\", \"-c command\" կամ \"--cmd command\"" - -msgid "Invalid argument for" -msgstr "Անվավեր արգումենտ" - -#, c-format -msgid "" -"%d files to edit\n" -msgstr "" -"խմագրվելիք ֆայլերի քանակը: %d\n" - -msgid "" -"netbeans is not supported with this GUI\n" -msgstr "" -"netbeans-ը չի աջակցվում այս գրաֆիկական ինտերֆեյսի հետ\n" - -msgid "" -"'-nb' cannot be used: not enabled at compile time\n" -msgstr "" -"'-nb'֊ն չի կարող օգտագործվել: չի միացվել կառուցման ժամանակ\n" - -msgid "This Vim was not compiled with the diff feature." -msgstr "Այս Vim-ը չի կառուցվել diff հատկությամբ." - -msgid "Attempt to open script file again: \"" -msgstr "Սկրիտպային ֆայլի կրկնակի բացման փորձ։ \"" - -msgid "Cannot open for reading: \"" -msgstr "Հնարավոր չէ բացել ընթերցման համար: \"" - -msgid "Cannot open for script output: \"" -msgstr "Հնարավոր չէ բացել սկրիպտի ելքի համար : \"" - -msgid "" -"Vim: Error: Failure to start gvim from NetBeans\n" -msgstr "" -"Vim: Սխալ: հնարավոր չէ բացել gvim֊ը NetBeans֊ից\n" - -msgid "" -"Vim: Error: This version of Vim does not run in a Cygwin terminal\n" -msgstr "" -"Vim. Սխալ. Vim-ի այս տարբերակը չի աշխատում Cygwin տերմինալում\n" - -msgid "" -"Vim: Warning: Output is not to a terminal\n" -msgstr "" -"Vim: Զգուշացում: Ելքը տերմինալ չէ\n" - -msgid "" -"Vim: Warning: Input is not from a terminal\n" -msgstr "" -"Vim: Զգուշացում: Մուտքը տերմինալից չէ\n" - -msgid "pre-vimrc command line" -msgstr "pre-vimrc հրամանային տող" - -msgid "" -"\n" -"More info with: \"vim -h\"\n" -msgstr "" -"\n" -"Հավելյալ տեղեկատվություն: \"vim -h\"\n" - -msgid "[file ..] edit specified file(s)" -msgstr "[ֆայլ ..] խմբագրել նշված ֆայլերը" - -msgid "- read text from stdin" -msgstr "- տեքստի ընթերցում stdin֊ից" - -msgid "-t tag edit file where tag is defined" -msgstr "-t պիտակ խմբագրել ֆայլը որտեղ սահմանված է պիտակը" - -msgid "-q [errorfile] edit file with first error" -msgstr "" -"-q [ֆայլ֊սխալ]\n" -"\t\t\t\t ֆայլի խմբագրում առաջին սխալով" - -msgid "" -"\n" -"\n" -"Usage:" -msgstr "" -"\n" -"\n" -"Օգտագործում:" - -msgid " vim [arguments] " -msgstr " vim [արգումնետներ] " - -msgid "" -"\n" -" or:" -msgstr "" -"\n" -" կամ:" - -msgid "" -"\n" -"Where case is ignored prepend / to make flag upper case" -msgstr "" -"\n" -"Where դեպքն անտեսվել է, ավելացրեք ՛/՛՝ դրոշմանիշը մեծատառ դարձնելու համար" - -msgid "" -"\n" -"\n" -"Arguments:\n" -msgstr "" -"\n" -"\n" -"Արգումենտներ:\n" - -msgid "--\t\t\tOnly file names after this" -msgstr "--\t\t\tԱյնուհետև նշվում են ֆայլի անունները" - -msgid "--literal\t\tDon't expand wildcards" -msgstr "--literal\t\tՉբացել wildcard-ները" - -msgid "-register\t\tRegister this gvim for OLE" -msgstr "-register\t\tՌեգիստրացնել այս gvim֊ը OLE֊ի համար" - -msgid "-unregister\t\tUnregister gvim for OLE" -msgstr "-unregister\t\tանռեգիստրացնել այս gvim֊ը OLE֊ի համար" - -msgid "-g\t\t\tRun using GUI (like \"gvim\")" -msgstr "-g\t\t\tԿատարել գրաֆիկական ինտերֆեյսով (ինչպես \"gvim\")" - -msgid "-f or --nofork\tForeground: Don't fork when starting GUI" -msgstr "-f կամ --nofork\tԱկտիվ: Չկատարել fork֊ը GUI֊ն սկսելու ժամանակ" - -msgid "-v\t\t\tVi mode (like \"vi\")" -msgstr "-v\t\t\tVi ռեժիմ (ինչպես \"vi\")" - -msgid "-e\t\t\tEx mode (like \"ex\")" -msgstr "-e\t\t\tEx ռեժիմ (ինչպես \"ex\")" - -msgid "-E\t\t\tImproved Ex mode" -msgstr "-E\t\t\tԿատաելագործված Ex ռեժիմ" - -msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")" -msgstr "-s\t\t\tԼուռ (ծրարված) ռեժիմ (միայն \"ex\"-ի համար)" - -msgid "-d\t\t\tDiff mode (like \"vimdiff\")" -msgstr "-d\t\t\tDiff ռեժիմ (ինչպես \"vimdiff\")" - -msgid "-y\t\t\tEasy mode (like \"evim\", modeless)" -msgstr "-y\t\t\tEasy ռեժիմ (ինչպես \"evim\", modeless)" - -msgid "-R\t\t\tReadonly mode (like \"view\")" -msgstr "-R\t\t\tReadonly ռեժիմ (ինչպես \"view\")" - -msgid "-Z\t\t\tRestricted mode (like \"rvim\")" -msgstr "-Z\t\t\tՍահմանափակված ռեժիմ (ինչպես \"rvim\")" - -msgid "-m\t\t\tModifications (writing files) not allowed" -msgstr "-m\t\t\tՓոփոխումները թույլատրված չեն (ֆայլում պահպանելը)" - -msgid "-M\t\t\tModifications in text not allowed" -msgstr "-M\t\t\tՏողում փոփոխումները թույլատրված չեն" - -msgid "-b\t\t\tBinary mode" -msgstr "-b\t\t\tԵրկուական չեժիմ" - -msgid "-l\t\t\tLisp mode" -msgstr "-l\t\t\tLisp Ռեժիմ" - -msgid "-C\t\t\tCompatible with Vi: 'compatible'" -msgstr "-C\t\t\tVi համապատասխանեցված: 'compatible'" - -msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'" -msgstr "-N\t\t\tVi մասնակի համապատասխանեցված: 'nocompatible'" - -msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]" -msgstr "" -"-V[N][ֆայլ]\t\tԱրտածել լրացուցիչ հաղորդագրություններ\n" -"\t\t\t\t[կարգ N] [արտածել ֆայլում]" - -msgid "-D\t\t\tDebugging mode" -msgstr "-D\t\t\tԶննման ռեժիմ" - -msgid "-n\t\t\tNo swap file, use memory only" -msgstr "-n\t\t\tԱռանց սվեփ ֆայլի, օգտագործել միայն հիշողությունը" - -msgid "-r\t\t\tList swap files and exit" -msgstr "-r\t\t\tՑուցադրել սվեփ ֆայլերն ու ավարտել" - -msgid "-r (with file name)\tRecover crashed session" -msgstr "-r (ֆայլի անուն)\tՎերկանգնել վթարված սեսիան" - -msgid "-L\t\t\tSame as -r" -msgstr "-L\t\t\tՆույնն է ինչպես -r֊ը" - -msgid "-f\t\t\tDon't use newcli to open window" -msgstr "-f\t\t\tՉօգտագօրծել newcli֊ը պատուհան բացելու համար" - -msgid "-dev \t\tUse for I/O" -msgstr "-dev <սարք>\t\tՕգտագործեք <սարք>֊ը ներմուծման/արտածման համար" - -msgid "-A\t\t\tStart in Arabic mode" -msgstr "-A\t\t\tԱրաբական ռեժիմով սկսում" - -msgid "-H\t\t\tStart in Hebrew mode" -msgstr "-H\t\t\tHebrew ռեժիմով սկսում" - -msgid "-T \tSet terminal type to " -msgstr "-T <տերմինալ>\tՏերմինալի տիպը դնել <տերմինալ>" - -msgid "--not-a-term\t\tSkip warning for input/output not being a terminal" -msgstr "" -"--ոչ մի ժամկետ Բաց թողնել նախազգուշացումը մուտքի/ելքի տերմինալ չլինելու համար" - -msgid "--gui-dialog-file {fname} For testing: write dialog text" -msgstr "--gui-dialog-file {fname} Փորձարկման համար գրեք երկխոսության տեքստ" - -msgid "--ttyfail\t\tExit if input or output is not a terminal" -msgstr "--ttyfail Ելք, եթե մուտքը կամ ելքը տերմինալ չէ" - -msgid "-u \t\tUse instead of any .vimrc" -msgstr "-u \t\tՕգտագործեկ ֊ն ցանկացած ․vimrc֊ու փոխարեն" - -msgid "-U \t\tUse instead of any .gvimrc" -msgstr "-U \t\tՕգտագործեկ ֊ն ցանկացած ․gvimrc֊ու փոխարեն" - -msgid "--noplugin\t\tDon't load plugin scripts" -msgstr "--noplugin\t\tՉբեռնել կցման մոդուլները" - -msgid "-p[N]\t\tOpen N tab pages (default: one for each file)" -msgstr "" -"-p[N]\t\tԲացել N թաբեր (լռելիությամբ: ամեն մեկում\n" -"\t\t\t\tմեկ ֆայլ)" - -msgid "-o[N]\t\tOpen N windows (default: one for each file)" -msgstr "" -"-o[N]\t\tԲացել N պատուհաններ (լռելիությամբ: ամեն մեկում\n" -"\t\t\t\tմեկ ֆայլ)" - -msgid "-O[N]\t\tLike -o but split vertically" -msgstr "-O[N]\t\tԻնչպես -o, բայց բայց բաժանել ուղղահայաց" - -msgid "+\t\t\tStart at end of file" -msgstr "+\t\t\tՖայլի վերջից սկսում" - -msgid "+\t\tStart at line " -msgstr "+\t\t-ի տողից սկսում" - -msgid "--cmd \tExecute before loading any vimrc file" -msgstr "" -"--cmd <հրաման>\tԿատարել <հրաման>֊ը նախքան ցանկացախ vimrc ֆայլի բեռնումը" - -msgid "-c \t\tExecute after loading the first file" -msgstr "-c <հրաման>\t\tԿատարել <հրաման>֊ը առաջին ֆայլի բեռնումից հետո" - -msgid "-S \t\tSource file after loading the first file" -msgstr "-S \t\tԿարդալ ֆայլն առաջին ֆայլի բեռնումից հետո" - -msgid "-s \tRead Normal mode commands from file " -msgstr "-s \tԿարդալ Normal ռեժիմի հրամանները ֆայլից" - -msgid "-w \tAppend all typed commands to file " -msgstr "-w \tԿցել բոլոր հրամանները ֆայլին" - -msgid "-W \tWrite all typed commands to file " -msgstr "-W \tԳրել բոլոր հրամանները ֆայլում" - -msgid "-x\t\t\tEdit encrypted files" -msgstr "-x\t\t\tԽմբագրել կոդավորված ֆայլերը" - -msgid "-display \tConnect Vim to this particular X-server" -msgstr "-display <էկրան>\tԿպցել Vim-ն այս X-server-ին" - -msgid "-X\t\t\tDo not connect to X server" -msgstr "-X\t\t\tՉկպցնել X-server֊ին" - -msgid "--remote \tEdit in a Vim server if possible" -msgstr "--remote <ֆայլեր>\tԽմբագրել <ֆայլեր>֊ը Vim server֊ում, եթե հնարավոր է" - -msgid "--remote-silent Same, don't complain if there is no server" -msgstr "--remote-silent <ֆայլեր> Նույնն ինչպես, չբողոքել եթե սերվեր չկա" - -msgid "" -"--remote-wait As --remote but wait for files to have been edited" -msgstr "--remote-wait Նույնն ինչպես --remote, բայց ավրտման սպասումով" - -msgid "" -"--remote-wait-silent Same, don't complain if there is no server" -msgstr "--remote-wait-silent Նույնն ինչպես, չբողոքել եթե սերվեր չկա" - -msgid "" -"--remote-tab[-wait][-silent] As --remote but use tab page per file" -msgstr "" -"--remote-tab[-wait][-silent] Նույնն ինչպես --remote, բայց օգտագործել " -"թաբ ամեն մի ֆայլի համար" - -msgid "--remote-send \tSend to a Vim server and exit" -msgstr "--remote-send <տառեր>\tՈւղարկել <տառեր>֊ը Vim server֊ին և ավարտել" - -msgid "--remote-expr \tEvaluate in a Vim server and print result" -msgstr "" -"--remote-expr <արտահայտոթյուն>\tՀաշվել <արտահայտոթյուն>֊ը Vim server֊ում և " -"արտածել արդյունքը" - -msgid "--serverlist\t\tList available Vim server names and exit" -msgstr "" -"--serverlist\t\tՑուցադրել հասանելի Vim server֊ների անուններն ու ավարտել" - -msgid "--servername \tSend to/become the Vim server " -msgstr "--servername <անուն>\tՈւղարկել/լինել <անուն>֊ով Vim server" - -msgid "--startuptime \tWrite startup timing messages to " -msgstr "" -"--startuptime <ֆայլ>\tԳրել սկսման ժամանակային հաղորդագրությունները <ֆայլ>֊ում" - -msgid "--log \t\tStart logging to early" -msgstr "--log Սկսեք մուտք գործել վաղ" - -msgid "-i \t\tUse instead of .viminfo" -msgstr "-i \t\tՕգտագործել , ․viminfo փոխարեն" - -msgid "--clean\t\t'nocompatible', Vim defaults, no plugins, no viminfo" -msgstr "" -"--clean\t\t'nocompatible', Vim լռելյայն, առանց պլագինների, առանց viminfo-ի" - -msgid "-h or --help\tPrint Help (this message) and exit" -msgstr "-h կամ --help\tԱրտածել Օգնություն (այս հաղորդագրությունը) և ավարտել" - -msgid "--version\t\tPrint version information and exit" -msgstr "--version\t\tԱրտածել տարբերակի մասին հաղորդագրություն և ավարտել" - -msgid "" -"\n" -"Arguments recognised by gvim (Motif version):\n" -msgstr "" -"\n" -"gvim-ի կողմից ճանաչված արգումենտներ (Motif տարբերակ):\n" - -msgid "-display \tRun Vim on " -msgstr "-display <էկրան>\tԲացել Vim-ը <էկրան>-ի վրա" - -msgid "-iconic\t\tStart Vim iconified" -msgstr "-iconic\t\tՍկսել Vim-ը նկարով" - -msgid "-background \tUse for the background (also: -bg)" -msgstr "-background <գույն>\tՕգտագործել <գույն>֊ը ներքին ֆոնում (նաև: -bg)" - -msgid "-foreground \tUse for normal text (also: -fg)" -msgstr "" -"-foreground <գույն>\tՕգտագործել <գույն>֊ը նորմալ տեքստերի համար (նաև: -fg)" - -msgid "-font \t\tUse for normal text (also: -fn)" -msgstr "" -"-font <տառատեսակ>\t\tՕգտագործել <տառատեսակ>֊ը նորմալ տեքստերի համար (նաև: -" -"fn)" - -msgid "-boldfont \tUse for bold text" -msgstr "-boldfont <տառատեսակ>\tՕգտագործել <տառատեսակ>֊ը չաղ տեքստերի համար" - -msgid "-italicfont \tUse for italic text" -msgstr "-italicfont <տառատեսակ>\tՕգտագործել <տառատեսակ>֊ը թեք տեքստերի համար" - -msgid "-geometry \tUse for initial geometry (also: -geom)" -msgstr "-geometry \tՕգտագործել նախնական չափերի համար (նաև: -geom)" - -msgid "-borderwidth \tUse a border width of (also: -bw)" -msgstr "-borderwidth <երկարություն>\tՕգտագործել <երկարություն> եզր (նաև: -bw)" - -msgid "-scrollbarwidth Use a scrollbar width of (also: -sw)" -msgstr "" -"-scrollbarwidth <երկարություն> Օգտագործել երկարությամբ փաթաթ (նաև: -sw)" - -msgid "-reverse\t\tUse reverse video (also: -rv)" -msgstr "-reverse\t\tՕգտագործել հակադարձված վիդեո ռեժիմ (նաև: -rv)" - -msgid "+reverse\t\tDon't use reverse video (also: +rv)" -msgstr "+reverse\t\tՉօգտագործել հակադարձված վիդեո ռեժիմ (նաև: +rv)" - -msgid "-xrm \tSet the specified resource" -msgstr "-xrm <ռեսուրս>\tԿարգավորել տրված <ռեսուրս>֊ը" - -msgid "" -"\n" -"Arguments recognised by gvim (GTK+ version):\n" -msgstr "" -"\n" -"Ճանաչելի արգումենտներ՝ gvim-ի համար (GTK+ տարբերակ):\n" - -msgid "-display \tRun Vim on (also: --display)" -msgstr "-display <էկրան>\tԲացել Vim-ը <էկրան>֊ում (Նաև։ --display)" - -msgid "--role \tSet a unique role to identify the main window" -msgstr "--role <դեր>\tԳլխավոր պատուհանի ճանաչման համար վերագրել միարժեք <դեր>" - -msgid "--socketid \tOpen Vim inside another GTK widget" -msgstr "--socketid \tԲացել Vim֊ը ուրիշ GTK֊ի ներսում" - -msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout" -msgstr "" -"--echo-wid\t\tԹույլատրել gvim֊ին արտածել պատուհանի համարը ստանդարտ ելքում" - -msgid "-P \tOpen Vim inside parent application" -msgstr "-P <ծնողի անուն>\tԲացել Vim֊ը ծնող ծրագրի ներսում" - -msgid "--windowid \tOpen Vim inside another win32 widget" -msgstr "--windowid \tԲացել Vim֊ը այլ win32 ծրագրի ներսում" - -msgid "" -"Seen modifyOtherKeys: true\n" -msgstr "" -"Տեսել է modifyOtherKeys՝ ճշմարիտ\n" - -msgid "Unknown" -msgstr "Անծանոթ" - -msgid "Off" -msgstr "Անջատել" - -msgid "On" -msgstr "Միացնել" - -msgid "Disabled" -msgstr "Ապաակտիվացված" - -msgid "Cleared" -msgstr "Մաքրված" - -#, c-format -msgid "" -"modifyOtherKeys detected: %s\n" -msgstr "" -"modifyOtherKeys-ը հայտնաբերվեց՝ %s\n" - -#, c-format -msgid "" -"Kitty keyboard protocol: %s\n" -msgstr "" -"Kitty ստեղնաշարի արձանագրություն՝ %s\n" - -msgid "No abbreviation found" -msgstr "Հապավումը չի հայտնաբերվել" - -msgid "No mapping found" -msgstr "Համապատասխանեցումը չի հայտնաբերվել" - -msgid "No marks set" -msgstr "Նշակներ չկան" - -msgid "" -"\n" -"mark line col file/text" -msgstr "" -"\n" -"նշում տող սյուն ֆայլ/տեքստ" - -msgid "" -"\n" -" jump line col file/text" -msgstr "" -"\n" -"ցատկ տող սյուն ֆայլ/տեքստ" - -msgid "" -"\n" -"change line col text" -msgstr "" -"\n" -"փոփոխել տող սյուն տեքստ" - -msgid "Enter number of swap file to use (0 to quit): " -msgstr "Տալ սվեփ ֆայլերի քանակությունը (0 - ավարտելու դեպքում): " - -msgid "Unable to read block 0 from " -msgstr "Հնարավոր չէ կարդալ 0 բլոկը " - -msgid "" -"\n" -"Maybe no changes were made or Vim did not update the swap file." -msgstr "" -"\n" -"Փոփոխություններ չկան, կամ Vim-ը չի թարմացրել սվեփ ֆայլը." - -msgid "" -" cannot be used with this version of Vim.\n" -msgstr "" -" հնարավոր չէ օգտագործել այս տարբերակի Vim-ի հետ.\n" - -msgid "" -"Use Vim version 3.0.\n" -msgstr "" -"Օգտագերծել 3.0 Vim տարբերակը.\n" - -msgid "" -" cannot be used on this computer.\n" -msgstr "" -" հնարավոր չէ օգտագործել այս համակարգչում.\n" - -msgid "The file was created on " -msgstr "Ֆայլը ստեղծվել է " - -msgid "" -",\n" -"or the file has been damaged." -msgstr "" -",\n" -"կամ ֆայլը վնասված է." - -msgid "" -" has been damaged (page size is smaller than minimum value).\n" -msgstr "" -" վնասված է (էջի չափը ավելի փոքր է քան մինիմում արժեքը).\n" - -#, c-format -msgid "Using swap file \"%s\"" -msgstr "Օգտագործվում է սվեփ ֆայլ - \"%s\"" - -#, c-format -msgid "Original file \"%s\"" -msgstr "Իրական ֆայլ \"%s\"" - -#, c-format -msgid "Swap file is encrypted: \"%s\"" -msgstr "Սվեփ ֆայլը կոդավորված է: \"%s\"" - -msgid "" -"\n" -"If you entered a new crypt key but did not write the text file," -msgstr "" -"\n" -"եթե ներկայացրեք եք նոր բանալի, բայց չեք գրել ֆայլում," - -msgid "" -"\n" -"enter the new crypt key." -msgstr "" -"\n" -"ավելացրեք նոր կոդավորման բանալին." - -msgid "" -"\n" -"If you wrote the text file after changing the crypt key press enter" -msgstr "" -"\n" -"Եթե գրում եք ֆայլում կոդավորման բանալու փոփոխումից հետ, ապա սեղմեք նոր տող" - -msgid "" -"\n" -"to use the same key for text file and swap file" -msgstr "" -"\n" -"նույն բանալին տեքստային և սվեփ ֆայլի համար" - -msgid "???MANY LINES MISSING" -msgstr "???ՇԱՏ ՏՈՂԵՐ ԲԱՑԱԿԱՅՈՒՄ ԵՆ" - -msgid "???LINE COUNT WRONG" -msgstr "???ՏՈՂԵՐԻ ՀԱՇՎԻՉԻ ՍԽԱԼ ԱՐԺԵՔ" - -msgid "???EMPTY BLOCK" -msgstr "???ԴԱՏԱՐԿ ԲԼՈԿ" - -msgid "???LINES MISSING" -msgstr "???ՏՈՂԵՐ ԵՆ ԲԱՑԱԿԱՅՈՒՄ" - -msgid "???BLOCK MISSING" -msgstr "???ԲԱՑԱԿԱՅՈՂ ԲԼՈԿ" - -msgid "??? from here until ???END lines may be messed up" -msgstr "???այստեղից մինչև վերջ??? տողեր են պակասում" - -msgid "??? from here until ???END lines may have been inserted/deleted" -msgstr "???այստեղից մինչև վերջ??? տողեր են ավելացվել/ջնջվել" - -msgid "??? lines may be missing" -msgstr "??? տողերը կարող են բացակայել" - -msgid "???END" -msgstr "???ՎԵՐՋ" - -msgid "See \":help E312\" for more information." -msgstr "Տես. \":help E312\" հավելյալ տեղեկատվության համար." - -msgid "Recovery completed. You should check if everything is OK." -msgstr "Վերականգնումն ավարտված է. Ստուգեք արդյո՞ք ամեն ինչ կարգին է." - -msgid "" -"\n" -"(You might want to write out this file under another name\n" -msgstr "" -"\n" -"(Կարող եք ֆայլն ամրագրել այլ անունով\n" - -msgid "and run diff with the original file to check for changes)" -msgstr "կատարել diff֊ը սկզբնական ֆայլի հետ՝ փոփխությունները ստուգելու համար)" - -msgid "Recovery completed. Buffer contents equals file contents." -msgstr "" -"Վերականգնումն ավարտված է. Ֆայլի պարունակությունն ու բուֆերը համարժեք են." - -msgid "" -"\n" -"You may want to delete the .swp file now." -msgstr "" -"\n" -"Միգուցե ցանկանաք ջնջել .swp. ֆայլը." - -msgid "" -"\n" -"Note: process STILL RUNNING: " -msgstr "" -"\n" -"Նշում. գործընթացը ԴԵՌ ԿԱՏԱՐՎՈՒՄ Է. " - -msgid "" -"Using crypt key from swap file for the text file.\n" -msgstr "" -"Տեքստ ֆայլի համար օգտագործվում է կոդավորման բանալի սվեփ ֆայլից.\n" - -msgid "Swap files found:" -msgstr "Հայտնավերված սվեփ ֆայլեր:" - -msgid "" -" In current directory:\n" -msgstr "" -" Այս թղթապանակում:\n" - -msgid "" -" Using specified name:\n" -msgstr "" -" Տրված անվանմամբ:\n" - -msgid " In directory " -msgstr " Թղթապանակ " - -msgid "" -" -- none --\n" -msgstr "" -" -- ոչ --\n" - -msgid " owned by: " -msgstr " պատկանելիություն: " - -msgid " dated: " -msgstr " ամսաթիվ: " - -msgid " dated: " -msgstr " ամսաթիվ: " - -msgid " [from Vim version 3.0]" -msgstr " [3.0 Vim տարբերակից]" - -msgid " [does not look like a Vim swap file]" -msgstr " [Vim-ի սվեփ ֆայլ չէ]" - -msgid " file name: " -msgstr " ֆայլի անուն: " - -msgid "" -"\n" -" modified: " -msgstr "" -"\n" -" փոփոխված: " - -msgid "YES" -msgstr "ԱՅՈ" - -msgid "no" -msgstr "ոչ" - -msgid "" -"\n" -" user name: " -msgstr "" -"\n" -" օգտատեր: " - -msgid " host name: " -msgstr " հոսթ: " - -msgid "" -"\n" -" host name: " -msgstr "" -"\n" -" հոսթ: " - -msgid "" -"\n" -" process ID: " -msgstr "" -"\n" -" պրոցես: " - -msgid " (STILL RUNNING)" -msgstr " (ԴԵՌ ԿԱՏԱՐՎՈՒՄ Է)" - -msgid "" -"\n" -" [not usable with this version of Vim]" -msgstr "" -"\n" -" [օգտագործելի չէ այս տարբերակի Vim-ի հետ]" - -msgid "" -"\n" -" [not usable on this computer]" -msgstr "" -"\n" -" [օգտագործելի չէ այս համակարգչում]" - -msgid " [cannot be read]" -msgstr " [չի կարող ըթերցվել]" - -msgid " [cannot be opened]" -msgstr " [չի կարող բացվել]" - -msgid "File preserved" -msgstr "Սվեփ ֆայլը թարմացվել է" - -msgid "stack_idx should be 0" -msgstr "stack_idx արժեքը պետք է 0 լինի" - -msgid "deleted block 1?" -msgstr "բլոկ 1-ը ջնջվել է?" - -msgid "pe_line_count is zero" -msgstr "pe_line_count֊ի արժեքը 0 է" - -msgid "Stack size increases" -msgstr "Ստեկի չափը մեծանում է" - -msgid "" -"\n" -"Found a swap file by the name \"" -msgstr "" -"\n" -"Հայտնաբերվել է սվեփ ֆայլ \"" - -msgid "While opening file \"" -msgstr "Ֆայլը բացելու դեպքում \"" - -msgid " CANNOT BE FOUND" -msgstr " ՀԱՅՏՆԱԲԵՐՎԱԾ ՉԷ" - -msgid "" -" NEWER than swap file!\n" -msgstr "" -" Ավելի ՆՈՐ, քան սվեփ ֆայլը!\n" - -msgid "" -"\n" -"(1) Another program may be editing the same file. If this is the case,\n" -" be careful not to end up with two different instances of the same\n" -" file when making changes. Quit, or continue with caution.\n" -msgstr "" -"\n" -"(1) Հնարավոր է, որ մեկ այլ ծրագիր խմբագրում է այս ֆայլը․ Եթե այդպես է,\n" -" ապա հոգ տարեք որ խմբագրելուց հետո չունենաք նույն ֆայլի երկու տարբեր\n" -" խմբագրված օրինակներ.\n" - -msgid "" -"(2) An edit session for this file crashed.\n" -msgstr "" -"(2) Այս ֆայլի խմբագրման սեանսը ավարտվել է անհաջողությամբ.\n" - -msgid " If this is the case, use \":recover\" or \"vim -r " -msgstr "" -" Եթե այդպես է, ապա կատարել հետևյալ հրամանները - \":recover\" կամ \"vim -r " - -msgid "" -"\"\n" -" to recover the changes (see \":help recovery\").\n" -msgstr "" -"\"\n" -" փոփոխությունները վերականգնելու համար (կատարել \":help recovery\").\n" - -msgid " If you did this already, delete the swap file \"" -msgstr " Եթե սա արդեն կատարել եք, ապա ջնջեք սվեփ ֆայլը \"" - -msgid "" -"\"\n" -" to avoid this message.\n" -msgstr "" -"\"\n" -" այս հաղորդագրությունը հետագայում չստանալու համար.\n" - -msgid "Found a swap file that is not useful, deleting it" -msgstr "Գտնվել է փոխանակման ֆայլ, որն օգտակար չէ, ջնջում ենք այն" - -msgid "Swap file \"" -msgstr "Սվեփ ֆայլ \"" - -msgid "\" already exists!" -msgstr "\" արդեն գոյություն ունի!" - -msgid "VIM - ATTENTION" -msgstr "VIM - ՈՒՇԱԴՐՈՒԹՅՈՒՆ" - -msgid "Swap file already exists!" -msgstr "Սվեփ ֆայլն արդեն գոյություն ունի!" - -msgid "" -"&Open Read-Only\n" -"&Edit anyway\n" -"&Recover\n" -"&Quit\n" -"&Abort" -msgstr "" -"&Բացել միայն կարդալու համար\n" -"&Խմբագրել\n" -"&Վերականգնել\n" -"&Դուրս գալ\n" -"&Ընդհատել" - -msgid "" -"&Open Read-Only\n" -"&Edit anyway\n" -"&Recover\n" -"&Delete it\n" -"&Quit\n" -"&Abort" -msgstr "" -"&OԲացել միայն կարդալու համար\n" -"&E Խմբագրել\n" -"&R Վերականգնել\n" -"&D Ջնջել\n" -"&Q Դուրս գալ\n" -"&A Ընդհատել" - -msgid "" -"\n" -"--- Menus ---" -msgstr "" -"\n" -"--- Ցանկ ---" - -msgid "Tear off this menu" -msgstr "Անջատել այս մենյուն" - -#, c-format -msgid "Error detected while compiling %s:" -msgstr "Հայտնաբերվել է սխալ մշակման ժամանակ: %s:" - -#, c-format -msgid "Error detected while processing %s:" -msgstr "Հայտնաբերվել է սխալ %s մշակման ժամանակ:" - -#, c-format -msgid "line %4ld:" -msgstr "տող %4ld:" - -msgid "Messages maintainer: The Vim Project" -msgstr "Հայերեն թարգմանության հեղինակ։ Գագիկ Հակոբյան" - -msgid "Interrupt: " -msgstr "Ընդհատում: " - -msgid "Press ENTER or type command to continue" -msgstr "Շարունակելու համար սեղմել ENTER կամ տալ որևէ այլ հրաման" - -#, c-format -msgid "%s line %ld" -msgstr "%s տող %ld" - -msgid "-- More --" -msgstr "-- Տեսնել ավելին --" - -msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit " -msgstr " SPACE/d/j: էկրան/էջ/տողը ներքևից, b/u/k: վերև, q: ելք " - -msgid "Question" -msgstr "Հարց" - -msgid "" -"&Yes\n" -"&No" -msgstr "" -"&Այո\n" -"&Ոչ" - -msgid "" -"&Yes\n" -"&No\n" -"Save &All\n" -"&Discard All\n" -"&Cancel" -msgstr "" -"&Այո\n" -"&Ոչ\n" -"&Պահպանել բոլորը\n" -"&Կորցնել բոլորը\n" -"&Ընդհատել" - -msgid "Type number and or click with the mouse (q or empty cancels): " -msgstr "" -"Մուտքագրել թիվ և կամ կտտացնել մկնիկով (q կամ դատարկ՝ չեղարկման համար)" -": " - -msgid "Type number and (q or empty cancels): " -msgstr "Մուտքագրել թիվ և (դատարկ՝ չեղարկման համար): " - -#, c-format -msgid "%ld more line" -msgid_plural "%ld more lines" -msgstr[0] "ավելացված տողերի քանակը: %ld" -msgstr[1] "ավելացված տողերի քանակը: %ld" - -#, c-format -msgid "%ld line less" -msgid_plural "%ld fewer lines" -msgstr[0] "մեկ տող ջնջվել է" -msgstr[1] "%ld տողեր ջնջվել են" - -msgid " (Interrupted)" -msgstr " (Ընդհատված)" - -msgid "Beep!" -msgstr "Ազդանշան!" - -#, c-format -msgid "Calling shell to execute: \"%s\"" -msgstr "Հրամանի կատարման համար կանչվում է տերմինալը: \"%s\"" - -msgid "Warning: terminal cannot highlight" -msgstr "Զգուշացում: տերմինալը չի կարող գունանշել" - -msgid "Type :qa! and press to abandon all changes and exit Vim" -msgstr "Vim-ն ընդհատելու համար մուտքագրել :qa! հրամանը" - -msgid "Type :qa and press to exit Vim" -msgstr "Vim-ն ընդհատելու համար մուտքագրել :qa հրամանը" - -#, c-format -msgid "%ld line %sed %d time" -msgid_plural "%ld line %sed %d times" -msgstr[0] "%ld տող %sed %d անգամ" -msgstr[1] "%ld տողեր %sed %d անգամ" - -#, c-format -msgid "%ld lines %sed %d time" -msgid_plural "%ld lines %sed %d times" -msgstr[0] "%ld տող %sed %d անգամ" -msgstr[1] "%ld տողեր %sed %d անգամ" - -msgid "cannot yank; delete anyway" -msgstr "պատճենել հնարավոր չէ, ամեն դեպքում ջնջել" - -#, c-format -msgid "%ld line changed" -msgid_plural "%ld lines changed" -msgstr[0] "փոփոխվել է %ld հատ տող" -msgstr[1] "փոփոխվել են %ld հատ տողեր" - -#, c-format -msgid "%d line changed" -msgid_plural "%d lines changed" -msgstr[0] "փոփոխվել է %d հատ տող" -msgstr[1] "փոփոխվել են %d հատ տողեր" - -#, c-format -msgid "%ld Cols; " -msgstr "Սյուն: %ld; " - -#, c-format -msgid "Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Bytes" -msgstr "Նշված է %s%ld %ld տողերից; %lld %lld բառերից; %lld %lld բայթերից" - -#, c-format -msgid "" -"Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Chars; %lld of " -"%lld Bytes" -msgstr "" -"Նշված %s%ld-ից %ld տողեր; %lld %lld բառեր; %lld %lld տառեր; %lld %lld բայթեր" - -#, c-format -msgid "Col %s of %s; Line %ld of %ld; Word %lld of %lld; Byte %lld of %lld" -msgstr "Սյուն %s %s֊ից; Տող %ld %ld-ից; Բառեր %lld %lld֊ից; Բայթ %lld %lld-ից" - -#, c-format -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-ից" - -#, c-format -msgid "(+%lld for BOM)" -msgstr "(+%lld BOM-ի համար)" - -msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" -msgstr "" -"W17: Արաբերենը պահանջում է UTF-8, կատարել ':set encoding=UTF-8' հրամանը" - -msgid "" -"\n" -"--- Terminal codes ---" -msgstr "" -"\n" -"--- Տերմինալային կոդեր ---" - -msgid "" -"\n" -"--- Global option values ---" -msgstr "" -"\n" -"--- Գլոբալ կարգանշման արժեքները ---" - -msgid "" -"\n" -"--- Local option values ---" -msgstr "" -"\n" -"--- Լոկալ կարգանշման արժեքները ---" - -msgid "" -"\n" -"--- Options ---" -msgstr "" -"\n" -"--- Կարգանշաններ ---" - -msgid "cannot open " -msgstr "չի կարող բացվել " - -msgid "" -"VIM: Can't open window!\n" -msgstr "" -"VIM: Հնարավոր չէ բացել պատուհանը!\n" - -msgid "" -"Need Amigados version 2.04 or later\n" -msgstr "" -"Պետք է Amigados տարբերակ 2.04 կամ ավելի նոր տարբերակ\n" - -#, c-format -msgid "" -"Need %s version %ld\n" -msgstr "" -"Անհրաժեշտ է %s տարբերակ %ld\n" - -msgid "" -"Cannot open NIL:\n" -msgstr "" -"Անհնար է բացել NIL:\n" - -msgid "Cannot create " -msgstr "Անհնար է ստեղծել " - -#, c-format -msgid "" -"Vim exiting with %d\n" -msgstr "" -"Vim-ը ավարտվում է %d-ով\n" - -msgid "" -"cannot change console mode ?!\n" -msgstr "" -"չեք կարող փոխել վահանակի ռեժիմը ?!\n" - -msgid "" -"mch_get_shellsize: not a console??\n" -msgstr "" -"mch_get_shellsize: не в консоли??\n" - -msgid "Cannot execute " -msgstr "Անհնար է կատարել " - -msgid "shell " -msgstr "տերմինալ " - -msgid "" -" returned\n" -msgstr "" -" ավարտել է\n" - -msgid "ANCHOR_BUF_SIZE too small." -msgstr "ANCHOR_BUF_SIZE չափազանց փոքր է:" - -msgid "I/O ERROR" -msgstr "I/O ՍԽԱԼ" - -msgid "Message" -msgstr "Հաղորդում" - -#, c-format -msgid "to %s on %s" -msgstr "to %s on %s" - -#, c-format -msgid "Printing '%s'" -msgstr "'%s'-ի տպում" - -msgid "DefaultFontNameForWindows" -msgstr "DefaultFontNameForWindows" - -#, c-format -msgid "Opening the X display took %ld msec" -msgstr "X էկրանը բացելը տևեց %ld վրկ" - -msgid "" -"\n" -"Vim: Got X error\n" -msgstr "" -"\n" -"Vim: X-ի սխալ\n" - -#| msgid "Testing the X display failed" -msgid "restoring display %s" -msgstr "էկրանի վերականգնում %s" - -msgid "Testing the X display failed" -msgstr "X էկրանի փորձարկումը ձախողվեց" - -msgid "Opening the X display timed out" -msgstr "X էկրանը բացելու ժամանակը սպառվել է" - -msgid "" -"\n" -"Could not get security context for " -msgstr "" -"\n" -"Հնարավոր չէ ստանալ գաղտնի կոտնտեքստ " - -msgid "" -"\n" -"Could not set security context for " -msgstr "" -"\n" -"Հնարավոր չէ կարգավորել գաղտնի կոտնտեքստ " - -#| msgid "" -#| "\n" -#| "Could not set security context for " -msgid "Could not set security context %s for %s" -msgstr "Հնարավոր չէ %s-ի համար կարգավորել գաղտնի կոնտեքստ %s-ը" - -#| msgid "" -#| "\n" -#| "Could not get security context for " -msgid "Could not get security context %s for %s. Removing it!" -msgstr "" -"Չհաջողվեց ստանալ անվտանգության համատեքստ %s %s-ի համար: Հեռացնում ենք այն!" - -msgid "" -"\n" -"Cannot execute shell sh\n" -msgstr "" -"\n" -"Հնարավոր չէ կատարել sh տերմինալը\n" - -msgid "" -"\n" -"shell returned " -msgstr "" -"\n" -"տերմինալը վերադարձրել է " - -msgid "" -"\n" -"Cannot create pipes\n" -msgstr "" -"\n" -"Հնարավոր չէ ստեղծէլ սրնգափող\n" - -msgid "" -"\n" -"Cannot fork\n" -msgstr "" -"\n" -"Հնարավոր չէ կատարել fork()\n" - -msgid "" -"\n" -"Cannot execute shell " -msgstr "" -"\n" -"Հնարավոր չէ կատարել տերմինալը " - -msgid "" -"\n" -"Command terminated\n" -msgstr "" -"\n" -"Հրամանն ընդհատված է\n" - -msgid "XSMP lost ICE connection" -msgstr "XSMP ICE կապակցման կորուստ" - -#, c-format -msgid "Could not load gpm library: %s" -msgstr "Հնարավոր չէր բեռնել %s գրադարանը" - -#, c-format -msgid "dlerror = \"%s\"" -msgstr "dlerror = \"%s\"" - -msgid "Opening the X display failed" -msgstr "X էկրանի բացումը ձախողվեց" - -msgid "XSMP handling save-yourself request" -msgstr "XSMP կատարում է ինքնապահպանում" - -msgid "XSMP opening connection" -msgstr "XSMP֊ն կապակցում է բացում" - -msgid "XSMP ICE connection watch failed" -msgstr "XSMP ICE կապակցման դիտարկումն անհաջող է ավարտվել" - -#, c-format -msgid "XSMP SmcOpenConnection failed: %s" -msgstr "XSMP SmcOpenConnection անհաջող է ավարտվել: %s" - -msgid "At line" -msgstr "Տողում" - -#, c-format -msgid "" -"Vim: Caught %s event\n" -msgstr "" -"Vim: Բռնվել է %s բացառումը\n" - -msgid "close" -msgstr "փակել" - -msgid "logoff" -msgstr "անջատում" - -msgid "shutdown" -msgstr "ելք" - -msgid "" -"VIMRUN.EXE not found in your $PATH.\n" -"External commands will not pause after completion.\n" -"See :help win32-vimrun for more information." -msgstr "" -"VIMRUN.EXE֊ն չի հայտնաբերվել $PATH ճանապարհներում.\n" -"Արտաքին հրամանները կանգ չեն առնի ավարտից հետո.\n" -"Հավելյալ տեղեկատվության համար տես :help win32-vimrun." - -msgid "Vim Warning" -msgstr "Vim Զգուշացում" - -#, c-format -msgid "shell returned %d" -msgstr "shell վերադարձել է %d" - -#, c-format -msgid "(%d of %d)%s%s: " -msgstr "(%d %d֊ից)%s%s: " - -msgid " (line deleted)" -msgstr " (տողը ջնջվել է)" - -#, c-format -msgid "%serror list %d of %d; %d errors " -msgstr "%sսխալների ցանկ %d %d-ից; %d սխալներ " - -msgid "No entries" -msgstr "Գրառումներ չկան" - -msgid "Error file" -msgstr "Ֆայլի սխալ" - -#, c-format -msgid "Cannot open file \"%s\"" -msgstr "Հնարավոր չէ բացել \"%s\" ֆայլը" - -msgid "cannot have both a list and a \"what\" argument" -msgstr "չի կարող ունենալ և՛ ցուցակ, և՛ \"what\" փաստարկ" - -msgid "Switching to backtracking RE engine for pattern: " -msgstr "Նախշի համար անցում կատարվող RE շարժիչին. " - -msgid "" -"External submatches:\n" -msgstr "" -"Արտաքին ենթահամընկնում:\n" - -msgid "Could not open temporary log file for writing, displaying on stderr... " -msgstr "" -"Չհաջողվեց բացել ժամանակավոր գրանցամատյանի ֆայլը գրելու համար, որը " -"ցուցադրվում է stderr... " - -#, c-format -msgid " into \"%c" -msgstr " մեջ \"%c\"" - -#, c-format -msgid "block of %ld line yanked%s" -msgid_plural "block of %ld lines yanked%s" -msgstr[0] "պատճենվել է %ld տողանոց բլոկ%s" -msgstr[1] "պատճենվել է %ld տողանոց բլոկ%s" - -#, c-format -msgid "%ld line yanked%s" -msgid_plural "%ld lines yanked%s" -msgstr[0] "%ld տող պատճենվել է%s" -msgstr[1] "%ld տողեր պատճենվել են%s" - -msgid "" -"\n" -"Type Name Content" -msgstr "" -"\n" -"Տիպ Անուն Պարունակություն" - -msgid " VREPLACE" -msgstr " ԶՆՆԱԿԱՆ ՓՈԽԱՐԻՆՈՒՄ" - -msgid " REPLACE" -msgstr " ՓՈԽԱՐԻՆՈՒՄ" - -msgid " REVERSE" -msgstr " ՀԱԿԱԴԱՐՁ" - -msgid " INSERT" -msgstr " ԶԵՏԵՂՈՒՄ" - -msgid " (insert)" -msgstr " (զետեղում)" - -msgid " (replace)" -msgstr " (փոխարինում)" - -msgid " (vreplace)" -msgstr " (զննական փոխարինում)" - -msgid " Hebrew" -msgstr " Եբրայական" - -msgid " Arabic" -msgstr " Արաբական" - -msgid " (paste)" -msgstr " (փակցնել)" - -msgid " VISUAL" -msgstr " ԶՆՆԱԿԱՆ ՌԵԺԻՄ" - -msgid " VISUAL LINE" -msgstr " ԶՆՆԱԿԱՆ ՏՈՂ" - -msgid " VISUAL BLOCK" -msgstr " ԶՆՆԱԿԱՆ ԲԼՈԿ" - -msgid " SELECT" -msgstr " ՆՇՄԱՆ ՌԵԺԻՄ" - -msgid " SELECT LINE" -msgstr " ՆՇՄԱՆ ՏԵՂ" - -msgid " SELECT BLOCK" -msgstr " ՆՇՄԱՆ ԲԼՈԿ" - -msgid "recording" -msgstr "գրառում" - -#, c-format -msgid "Searching for \"%s\" under \"%s\" in \"%s\"" -msgstr "Որոնում \"%s\" \"%s\"֊ում \"%s\"-ի մեջ" - -#, c-format -msgid "Searching for \"%s\" in \"%s\"" -msgstr "Որոնում \"%s\" \"%s\"֊ում" - -#, c-format -msgid "Searching for \"%s\"" -msgstr "Որոնում \"%s\"" - -#, c-format -msgid "not found in '%s': \"%s\"" -msgstr "չի հայտնաբերվել: '%s': \"%s\"" - -msgid "Source Vim script" -msgstr "Կցել Vim սկրիպտ" - -#, c-format -msgid "Cannot source a directory: \"%s\"" -msgstr "Անհնար է կցել թղթապանակ: \"%s\"" - -#, c-format -msgid "could not source \"%s\"" -msgstr "անհնար է կցել \"%s\"" - -#, c-format -msgid "line %ld: could not source \"%s\"" -msgstr "տող %ld: Անհնար է կցել \"%s\"" - -#, c-format -msgid "sourcing \"%s\"" -msgstr "\"%s\"-ի կցում" - -#, c-format -msgid "line %ld: sourcing \"%s\"" -msgstr "տող %ld: \"%s\"-ի կցում" - -#, c-format -msgid "finished sourcing %s" -msgstr "%s֊ի կցումն ավարտվել է" - -#, c-format -msgid "continuing in %s" -msgstr "շարունակվում է %s" - -msgid "modeline" -msgstr "տողային ռեժիմ" - -msgid "--cmd argument" -msgstr "--cmd արգումենտ" - -msgid "-c argument" -msgstr "-c արգումենտ" - -msgid "environment variable" -msgstr "շրջապատման արգումենտ" - -msgid "error handler" -msgstr "սխալի մշակիչ" - -msgid "changed window size" -msgstr "պատուհանի չափը փոխվել է" - -msgid "W15: Warning: Wrong line separator, ^M may be missing" -msgstr "" -"W15: Զգուշացում: Սխալ տրված տողի բաժանիչ. Հնարավոր է ^M֊ը բաց է թողնված" - -msgid " (includes previously listed match)" -msgstr " (ընդգրկում է նախկինում ցուցադրված համընկնումը)" - -msgid "--- Included files " -msgstr "--- Կցաֆայլեր " - -msgid "not found " -msgstr "չի հայտնաբերվել " - -msgid "" -"in path ---\n" -msgstr "" -"ճանապարհում ---\n" - -msgid " (Already listed)" -msgstr " (Արդեն ցուցադրված է)" - -msgid " NOT FOUND" -msgstr " ՀԱՅՏՆԱԲԵՐՎԱԾ ՉԷ" - -#, c-format -msgid "Scanning included file: %s" -msgstr "Կցվաֆայլերի ցուցադրում: %s" - -#, c-format -msgid "Searching included file %s" -msgstr "%s կցաֆայլի որոնում" - -msgid "All included files were found" -msgstr "Բոլոր կցաֆայլերն հայտնաբերվել են" - -msgid "No included files" -msgstr "Կցաֆայլեր չկան" - -msgid "Save View" -msgstr "Դիտման պահպանում" - -msgid "Save Session" -msgstr "Սեսսիայի պահպանում" - -msgid "Save Setup" -msgstr "Կարգավորման պահպանում" - -msgid "[Deleted]" -msgstr "[Ջնջված է]" - -msgid "" -"\n" -"--- Signs ---" -msgstr "" -"\n" -"--- Նշաններ ---" - -#, c-format -msgid "Signs for %s:" -msgstr "%s-ի նշաններ:" - -#, c-format -msgid " group=%s" -msgstr " group=%s" - -#, c-format -msgid " line=%ld id=%d%s name=%s priority=%d" -msgstr " տող=%ld համար=%d%s անուն=%s կարգ=%d" - -msgid " (NOT FOUND)" -msgstr " (ՉԻ ՀԱՅՏՆԱԲԵՐՎԵԼ)" - -msgid " (not supported)" -msgstr " (չի աջակցվում)" - -#, c-format -msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\"" -msgstr "" -"Զգուշացում. հնարավոր չէ գտնել \"%s_%s.spl\" կամ \"%s_ascii.spl\" բառերի ցանկը" - -#, c-format -msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\"" -msgstr "" -"Զգուշացում. հնարավոր չէ գտնել \"%s.%s.spl\" կամ \"%s.ascii.spl\" բառերի " -"ցանկը:" - -#, c-format -msgid "Warning: region %s not supported" -msgstr "Զգուշացում. ռեգիոնը %s չի աջակցվում" - -#, c-format -msgid "Trailing text in %s line %d: %s" -msgstr "Հետևյալ տեքստ %s տողում %d՝ %s" - -#, c-format -msgid "Affix name too long in %s line %d: %s" -msgstr "Անունը չափազանց երկար դրեք %s տողում %d՝ %s" - -msgid "Compressing word tree..." -msgstr "Բառի ծառի սեղմում..." - -#, c-format -msgid "Reading spell file \"%s\"" -msgstr "\"%s\" ուղղագրման ֆայլի ընթերցում" - -#| msgid "Reading undo file: %s" -msgid "Reading affix file %s..." -msgstr "Կարդում է կցված ֆայլը %s..." - -#, c-format -msgid "Conversion failure for word in %s line %d: %s" -msgstr "%s տող %d բառի փոխակերպման ձախողում. %s" - -#, c-format -msgid "Conversion in %s not supported: from %s to %s" -msgstr "Փոխակերպումը %s-ում չի աջակցվում՝ %s-ից %s" - -#, c-format -msgid "Invalid value for FLAG in %s line %d: %s" -msgstr "ԴՐՈՇՄԱՆԻՇԻ անվավեր արժեք %s֊ում, տող %d: %s" - -#, c-format -msgid "FLAG after using flags in %s line %d: %s" -msgstr "ԴՐՈՇՄԱՆԻՇ դրոշմանիշի օգտագործումից հետո, %s, տող %d: %s" - -#, c-format -msgid "" -"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line " -"%d" -msgstr "" -"PFX կետից հետո COMPOUNDFORBIDFLAG սահմանելը կարող է սխալ արդյունքներ տալ %s " -"տող %d-ում" - -#, c-format -msgid "" -"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line " -"%d" -msgstr "" -"PFX կետից հետո COMPOUNDPERMITFLAG սահմանելը կարող է սխալ արդյունքներ տալ %s " -"տող %d-ում" - -#, c-format -msgid "Wrong COMPOUNDRULES value in %s line %d: %s" -msgstr "Սխալ COMPOUNDRULES արժեքը %s տողում %d՝ %s" - -#, c-format -msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s" -msgstr "Սխալ COMPOUNDWORDMAX արժեք %s տող %d-ում՝ %s" - -#, c-format -msgid "Wrong COMPOUNDMIN value in %s line %d: %s" -msgstr "Սխալ COMPOUNDMIN արժեք %s տող %d-ում՝ %s" - -#, c-format -msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s" -msgstr "Սխալ COMPOUNDSYLMAX արժեք %s տող %d. %s" - -#, c-format -msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s" -msgstr "Սխալ CHECKCOMPOUNDPATTERN արժեքը %s տողում %d՝ %s" - -#, c-format -msgid "Different combining flag in continued affix block in %s line %d: %s" -msgstr "" -"Տարբեր միավորման դրոշմանիշեր շարունակական affix բլոկում, %s, տող %d: %s" - -#, c-format -msgid "Duplicate affix in %s line %d: %s" -msgstr "Կրկնակի affix %s֊ում, տող %d: %s" - -#, c-format -msgid "" -"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s " -"line %d: %s" -msgstr "" -"Affix֊ը օգտագործվել է նաև " -"BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST֊ի համար՝ %s֊ում, տող %d: " -"%s" - -#, c-format -msgid "Expected Y or N in %s line %d: %s" -msgstr "Ակնկալվում է Y կամ N %s տողում %d՝ %s" - -#, c-format -msgid "Broken condition in %s line %d: %s" -msgstr "Կոտրված վիճակ %s տող %d. %s" - -#, c-format -msgid "Expected REP(SAL) count in %s line %d" -msgstr "Սպասվող REP(SAL) քանակը %s տողում %d" - -#, c-format -msgid "Expected MAP count in %s line %d" -msgstr "Սպասվող ՔԱՐՏԵԶԻ հաշվարկ %s տողում %d" - -#, c-format -msgid "Duplicate character in MAP in %s line %d" -msgstr "Կրկնակի տառ MAP֊ում, %s, տող %d" - -#, c-format -msgid "Unrecognized or duplicate item in %s line %d: %s" -msgstr "Անծանոթ կամ կրկնակի էլեմենտ %s֊ում, տող %d: %s" - -#, c-format -msgid "Missing FOL/LOW/UPP line in %s" -msgstr "%s-ում բացակայում է FOL/LOW/UPP տողը" - -msgid "COMPOUNDSYLMAX used without SYLLABLE" -msgstr "COMPOUNDSYLMAX֊ն օգտագործվում է առանց SYLLABLE" - -msgid "Too many postponed prefixes" -msgstr "Աննախադեպ շատ հետաձգված նախածանցներ" - -msgid "Too many compound flags" -msgstr "Աննախադեպ շատ պարփակման դրոշմանիշեր" - -msgid "Too many postponed prefixes and/or compound flags" -msgstr "Աննախադեպ շատ հետաձգված նախածանցներ կամ պարփակման դրոշմանիշեր" - -#, c-format -msgid "Missing SOFO%s line in %s" -msgstr "Բացակայում է SOFO%s տողը %s-ում" - -#, c-format -msgid "Both SAL and SOFO lines in %s" -msgstr "SAL և SOFO գծերը %s-ում" - -#, c-format -msgid "Flag is not a number in %s line %d: %s" -msgstr "Դրոշմանիշը թիվ չէ, %s, տող %d: %s" - -#, c-format -msgid "Illegal flag in %s line %d: %s" -msgstr "Չթույլատրված դրոշմանիշ, %s տող %d: %s" - -#, c-format -msgid "%s value differs from what is used in another .aff file" -msgstr "%s արժեքը տարբերէ այլ .aff ֆայլում օգտագործված արժեքից" - -#| msgid "Reading undo file: %s" -msgid "Reading dictionary file %s..." -msgstr "Բառարանի ֆայլի ընթերցում %s..." - -#| msgid "line %ld: %s" -msgid "line %6d, word %6ld - %s" -msgstr "տող %6d, բառ %6ld - %s" - -#, c-format -msgid "Duplicate word in %s line %d: %s" -msgstr "Կրկնակի բառ %s֊ում, տող %d: %s" - -#, c-format -msgid "First duplicate word in %s line %d: %s" -msgstr "Առաջին կրկնված բառը %s֊ում, տող %d: %s" - -#, c-format -msgid "%d duplicate word(s) in %s" -msgstr "%d կրկնվող բառեր՝ %s֊ում" - -#, c-format -msgid "Ignored %d word(s) with non-ASCII characters in %s" -msgstr "Անտեսված %d բառեր՝ ոչ ASCII նշաններով, %s" - -#| msgid "Reading undo file: %s" -msgid "Reading word file %s..." -msgstr "Word ֆայլի ընթերցում %s..." - -#| msgid "Conversion failure for word in %s line %d: %s" -msgid "Conversion failure for word in %s line %ld: %s" -msgstr "%s տող %ld բառի փոխակերպման ձախողում. %s" - -#| msgid "Duplicate /regions= line ignored in %s line %ld: %s" -msgid "Duplicate /encoding= line ignored in %s line %ld: %s" -msgstr "Կրկնվող /encoding= տողը անտեսվել է %s տողում %ld՝ %s" - -#, c-format -msgid "/encoding= line after word ignored in %s line %ld: %s" -msgstr "/encoding= տողն անտեսված է %s֊ում, տող %ld: %s" - -#, c-format -msgid "Duplicate /regions= line ignored in %s line %ld: %s" -msgstr "Կրկնակի /regions= տողն անտեսված է %s֊ում, տող %ld: %s" - -#, c-format -msgid "Too many regions in %s line %ld: %s" -msgstr "Աննախադեպ շատ ռեգիոններ %s֊ում, տող %ld: %s" - -#, c-format -msgid "/ line ignored in %s line %ld: %s" -msgstr "/ տեղն անտեսվել է %s֊ում, տող %ld: %s" - -#, c-format -msgid "Invalid region nr in %s line %ld: %s" -msgstr "Անվավեր տարածաշրջանի թիվ %s տողում %ld՝ %s" - -#, c-format -msgid "Unrecognized flags in %s line %ld: %s" -msgstr "Անծանոթ դրոշմանիշ, %s, տող %ld: %s" - -#, c-format -msgid "Ignored %d words with non-ASCII characters" -msgstr "Անտեսված %d բառեր՝ ոչ ASCII նշաններով" - -#, c-format -msgid "Compressed %s: %ld of %ld nodes; %ld (%ld%%) remaining" -msgstr "Սեղմված են %s. %ld %ld հանգույցներ; մնացել է %ld (%ld%%)" - -msgid "Reading back spell file..." -msgstr "Ուղղագրման ֆայլի վերականգնում..." - -msgid "Performing soundfolding..." -msgstr "Կատարվում է ձայնափաթաթ..." - -#, c-format -msgid "Number of words after soundfolding: %ld" -msgstr "Բառերի քանակը՝ ձայնափաթաթից հետո: %ld" - -#, c-format -msgid "Total number of words: %d" -msgstr "Բառերի ընդհանուր քանակը՝ %d" - -#| msgid "Writing spell file %s..." -msgid "Writing suggestion file %s..." -msgstr "Առաջարկի ֆայլը գրուվում է %s..." - -#, c-format -msgid "Estimated runtime memory use: %d bytes" -msgstr "Գործարկման հիշողության գնահատված օգտագործումը՝ %d բայթ" - -msgid "Warning: both compounding and NOBREAK specified" -msgstr "Զգուշացում: պարփակումն ու NOBREAK֊ը միաժամանակ են տրված" - -#, c-format -msgid "Writing spell file %s..." -msgstr "ՈՒղղագրման ֆայլի պահպանում %s..." - -msgid "Done!" -msgstr "Ավարտված է!" - -#, c-format -msgid "Word '%.*s' removed from %s" -msgstr "'%.*s' բառը հեռացվել է %s-ից" - -#| msgid "E294: Seek error in swap file read" -msgid "Seek error in spellfile" -msgstr "Սխալ փնտրեք spellfile-ում" - -#, c-format -msgid "Word '%.*s' added to %s" -msgstr "'%.*s' բառն ավելացվել է %s-ին" - -msgid "Sorry, no suggestions" -msgstr "Կներեք, առաջարկներ չկան" - -#, c-format -msgid "Sorry, only %ld suggestions" -msgstr "Ներողություն, միայն %ld առաջարկ" - -#, c-format -msgid "Change \"%.*s\" to:" -msgstr "Փոխել \"%.*s\"-ը հետևյալին:" - -#, c-format -msgid " < \"%.*s\"" -msgstr " < \"%.*s\"" - -msgid "No Syntax items defined for this buffer" -msgstr "Այս բուֆերի համար ուղղագրական տարրեր սահմանված չեն" - -msgid "'redrawtime' exceeded, syntax highlighting disabled" -msgstr "'redrawtime'-ը գերազանցվել է, ուղղագրական գունանշումն անջատված է" - -msgid "syntax iskeyword not set" -msgstr "ուղղագրական iskeyword-ը սահմանված չէ" - -#| msgid "" -#| "\n" -#| "syncing on items" -msgid "syncing on C-style comments" -msgstr "C-style մեկնաբանությունների համաժամանակեցում" - -msgid "no syncing" -msgstr "առանց սինխրոնիզացման" - -#| msgid "syncing starts " -msgid "syncing starts at the first line" -msgstr "համաժամացումը սկսվում է առաջին տողից" - -msgid "syncing starts " -msgstr "համաժամանակեցումն սկսվում է " - -msgid " lines before top line" -msgstr " տողեր՝ վերևի տողից առաջ" - -msgid "" -"\n" -"--- Syntax sync items ---" -msgstr "" -"\n" -"--- Ուղղագրական համապատասխանեցման էլեմենտներ ---" - -msgid "" -"\n" -"syncing on items" -msgstr "" -"\n" -"էլեմենտների համաժամանակեցում" - -msgid "" -"\n" -"--- Syntax items ---" -msgstr "" -"\n" -"--- Ուղղագրական էլեմենտներ ---" - -#| msgid "Word from other line" -msgid "from the first line" -msgstr "առաջին տողից" - -msgid "minimal " -msgstr "նվազագույն " - -msgid "maximal " -msgstr "առավելագույնը " - -msgid "; match " -msgstr "; համընկնում " - -msgid " line breaks" -msgstr " տողի ընդհատում" - -msgid "" -" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN" -msgstr "" -" ԱՄԲՈՂՋ ՔԱՆԱԿ ՀԱՄԸՆԿՆՈՒՄ ՄՆԱՑՅԱԼ ՄԻՋԻՆ ԱՆՈՒՆ " -"ՕՐԻՆԱԿ" - -#, c-format -msgid "File \"%s\" does not exist" -msgstr "\"%s\" Ֆայլը գոյություն չունի" - -#, c-format -msgid "tag %d of %d%s" -msgstr "պիտակ %d %d%s-ի" - -msgid " or more" -msgstr " կամ ավելին" - -msgid " Using tag with different case!" -msgstr " Օգտագործելով տարբեր գործերով պիտակ!" - -msgid " # pri kind tag" -msgstr " #pri kind պիտակ" - -msgid "" -"file\n" -msgstr "" -"ֆայլ\n" - -msgid "" -"\n" -" # TO tag FROM line in file/text" -msgstr "" -"\n" -" # TO պիտակել FROM տողում ֆայլում/տեքստում" - -msgid "Ignoring long line in tags file" -msgstr "Անտեսելով երկար տողը պիտակների ֆայլում" - -#, c-format -msgid "Before byte %ld" -msgstr "Նախքան բայթը %ld" - -#, c-format -msgid "Searching tags file %s" -msgstr "Որոնում %s պիտակների ֆայլում" - -#, c-format -msgid "Duplicate field name: %s" -msgstr "Կրկնակի դաշտի անուն: %s" - -msgid "' not known. Available builtin terminals are:" -msgstr "' անծանոթ է. Գոյություն ունեցող ներդրված տերմինալներն հետևյալն են:" - -msgid "defaulting to '" -msgstr "կանխադրվում է '" - -msgid "" -"\n" -"--- Terminal keys ---" -msgstr "" -"\n" -"--- Տերմինալի ստեղներ ---" - -#, c-format -msgid "Kill job in \"%s\"?" -msgstr "Վթարել աշխատանքը \"%s\"?" - -msgid "Terminal" -msgstr "Տերմինալ" - -#| msgid "finished" -msgid "Terminal-finished" -msgstr "Տերմինալը ավարտված է" - -msgid "active" -msgstr "ակտիվ" - -msgid "running" -msgstr "կատարվում է" - -msgid "finished" -msgstr "ավարտվել է" - -msgid "(Invalid)" -msgstr "(Անվավեր )" - -#, no-c-format -msgid "%a %b %d %H:%M:%S %Y" -msgstr "%a %b %d %H:%M:%S %Y" - -#, c-format -msgid "%ld second ago" -msgid_plural "%ld seconds ago" -msgstr[0] "%ld վայրկյան առաջ" -msgstr[1] "%ld վայրկյաններ առաջ" - -msgid "" -"new shell started\n" -msgstr "" -"սկսվեց նոր կեղևը\n" - -msgid "" -"Vim: Error reading input, exiting...\n" -msgstr "" -"Vim: Մուքի ընթերցման սխալ, ավարտում...\n" - -msgid "No undo possible; continue anyway" -msgstr "Չեղարկումն անհնար է; այնուամենայնիվ շարունակել" - -msgid "Cannot write undo file in any directory in 'undodir'" -msgstr "Հնարավոր չէ ամրագրել չեղրկման ֆայլը՝ 'undodir'-ի որևԷ ենթաթղթապանակում" - -#, c-format -msgid "Will not overwrite with undo file, cannot read: %s" -msgstr "Չեղարկման ֆայլը չի պահպանվելու, անհնար է ընթերցել: %s" - -#, c-format -msgid "Will not overwrite, this is not an undo file: %s" -msgstr "Չի պահպանվելու, սա չեղարկման ֆայլ չէ: %s" - -msgid "Skipping undo file write, nothing to undo" -msgstr "Չեղարկման ֆայլի ամրագրումն անտեսվում է, չեղարկումներ չկան" - -#, c-format -msgid "Writing undo file: %s" -msgstr "Չեղարկման ֆայլի պահպանում: %s" - -#, c-format -msgid "Not reading undo file, owner differs: %s" -msgstr "Չեղարկման ֆայլը չի ընթերցվելու, այն պատկանում է մեկ այլ օգտատիրոջը: %s" - -#, c-format -msgid "Reading undo file: %s" -msgstr "Չեղարկման ֆայլի ընթերցում: %s" - -msgid "File contents changed, cannot use undo info" -msgstr "" -"Ֆայլի պարունակությունը փոփոխվել է, հնարավոր չէ օգտագործել չեղարկման " -"տեղեկատվությունը" - -#, c-format -msgid "Finished reading undo file %s" -msgstr "Չեղարկման ֆայլի ընթերցումն ավարտվել է: %s" - -msgid "Already at oldest change" -msgstr "Արդեն հին փոփոխությունն է" - -msgid "Already at newest change" -msgstr "Արդեն նոր փոփոխությունն է" - -msgid "more line" -msgstr "տողեր ավելացել են" - -msgid "more lines" -msgstr "տողեր ավելացել են" - -msgid "line less" -msgstr "տողեր ջնջվել են" - -msgid "fewer lines" -msgstr "տողեր ջնջվել են" - -msgid "change" -msgstr "փոփոխել" - -msgid "changes" -msgstr "փոփոխություններ" - -#, c-format -msgid "%ld %s; %s #%ld %s" -msgstr "%ld %s; %s #%ld %s" - -msgid "before" -msgstr "առաջ" - -msgid "after" -msgstr "հետո" - -msgid "Nothing to undo" -msgstr "Չեղարկում չկա" - -msgid "number changes when saved" -msgstr "թվերը փոփոխվում են երբ պահպանված է" - -msgid "" -"\n" -" Name Args Address Complete Definition" -msgstr "" -"\n" -" Անուն Արգումենտներ Հասցե Վերջացնել Սահմանում" - -msgid "No user-defined commands found" -msgstr "Օգտատիրոջ սահմանած հրամաններ չեն հայտնաբերվել" - -#| msgid "E123: Undefined function: %s" -msgid "W22: Text found after :endfunction: %s" -msgstr "W22: Տեքստը գտնվել է :endfunction-ից հետո՝ %s" - -#, c-format -msgid "calling %s" -msgstr "կանչվում է %s" - -#, c-format -msgid "%s aborted" -msgstr "%s ընդհատված է" - -#, c-format -msgid "%s returning #%ld" -msgstr "%s վերադարձնում է #%ld" - -#, c-format -msgid "%s returning %s" -msgstr "%s վերադարձնում է %s" - -#| msgid "function %s does not exist" -msgid "Function %s%s%s does not need compiling" -msgstr "%s%s%s ֆունկցիան չի պահանջում կամպիլիացիա" - -#, c-format -msgid "%s (%s, compiled %s)" -msgstr "%s (%s, կազմվել է %s)" - -msgid "" -"\n" -"MS-Windows 64-bit GUI/console version" -msgstr "" -"\n" -"MS-Windows 64 բիթանոց կոնսոլ տարբերակ" - -msgid "" -"\n" -"MS-Windows 32-bit GUI/console version" -msgstr "" -"\n" -"MS-Windows 32 բիթանոց կոնսոլ տարբերակ" - -msgid "" -"\n" -"MS-Windows 64-bit GUI version" -msgstr "" -"\n" -"MS-Windows 64 բիթանոց գրաֆիկական ինտերֆեյս" - -msgid "" -"\n" -"MS-Windows 32-bit GUI version" -msgstr "" -"\n" -"MS-Windows 32 բիթանոց գրաֆիկական ինտերֆեյս" - -msgid " with OLE support" -msgstr " OLE աջակցումով" - -msgid "" -"\n" -"MS-Windows 64-bit console version" -msgstr "" -"\n" -"MS-Windows 64 բիթանոց կոսոլ տարբերակ" - -msgid "" -"\n" -"MS-Windows 32-bit console version" -msgstr "" -"\n" -"MS-Windows 32 բիթանոց կոնսոլ տարբերակ" - -msgid "" -"\n" -"macOS version" -msgstr "" -"\n" -"տարբերակ՝ macOS-ի համար" - -#| msgid "" -#| "\n" -#| "macOS version" -msgid "" -"\n" -"macOS version w/o darwin feat." -msgstr "" -"\n" -"macOS տարբերակ առանց darwin feat-ի:" - -msgid "" -"\n" -"OpenVMS version" -msgstr "" -"\n" -"Տարբերակ՝ OpenVMS-ի համար" - -msgid "" -"\n" -"Included patches: " -msgstr "" -"\n" -"կցված նմանակման ֆայլեր: " - -msgid "" -"\n" -"Extra patches: " -msgstr "" -"\n" -"Հավելյալ նմանակման ֆայլեր: " - -msgid "Modified by " -msgstr "Փոփոխված է " - -msgid "" -"\n" -"Compiled " -msgstr "" -"\n" -"Կառուցված է " - -msgid "by " -msgstr "հետ " - -msgid "" -"\n" -"Huge version " -msgstr "" -"\n" -"Մեծ տարբերակ " - -msgid "" -"\n" -"Normal version " -msgstr "" -"\n" -"Նորմալ տարբերակ " - -msgid "" -"\n" -"Tiny version " -msgstr "" -"\n" -"Փոքր տարբերակ\" " - -msgid "without GUI." -msgstr "առանց գրաֆիկական ինտերֆեյսի." - -#| msgid "with GTK2 GUI." -msgid "with GTK3 GUI." -msgstr "GTK3 GUI-ով:" - -msgid "with GTK2-GNOME GUI." -msgstr "GTK2-GNOME GUI-ով:" - -msgid "with GTK2 GUI." -msgstr "GTK2 GUI-ով:" - -msgid "with X11-Motif GUI." -msgstr "X11-Motif GUI-ով:" - -#| msgid "with GUI." -msgid "with Haiku GUI." -msgstr "Haiku GUI-ի հետ:" - -msgid "with Photon GUI." -msgstr "Photon GUI-ով:" - -msgid "with GUI." -msgstr "GUI-ով:" - -msgid "" -" Features included (+) or not (-):\n" -msgstr "" -" Առանձնահատկությունների միացում (+) և անջաատում (-):\n" - -msgid " system vimrc file: \"" -msgstr " համակարգային vimrc: \"" - -msgid " user vimrc file: \"" -msgstr " օգտատիրոջ ֆայլ vimrc: \"" - -msgid " 2nd user vimrc file: \"" -msgstr " օգտատիրոջ երկրորդ ֆայլ vimrc: \"" - -msgid " 3rd user vimrc file: \"" -msgstr " օգտատիրոջ երրորդ ֆայլ vimrc: \"" - -msgid " 4th user vimrc file: \"" -msgstr " օգտատիրոջ 4-րդ vimrc ֆայլ : \"" - -msgid " user exrc file: \"" -msgstr " օգտատիրոջ ֆայլ exrc: \"" - -msgid " 2nd user exrc file: \"" -msgstr " օգտատիրոջ երկրորդ ֆայլ exrc: \"" - -msgid " system gvimrc file: \"" -msgstr " համակարգային gvimrc: \"" - -msgid " user gvimrc file: \"" -msgstr " օգտատիրոջ ֆայլ gvimrc: \"" - -msgid "2nd user gvimrc file: \"" -msgstr "օգտատիրոջ երկրորդ ֆայլ gvimrc: \"" - -msgid "3rd user gvimrc file: \"" -msgstr "օգտատիրոջ երրորդ ֆայլ gvimrc: \"" - -#| msgid " user exrc file: \"" -msgid " defaults file: \"" -msgstr " լռելյայն ֆայլ." - -msgid " system menu file: \"" -msgstr " համակարգային մենյու ֆայլ: \"" - -msgid " fall-back for $VIM: \"" -msgstr " վերադարձ $VIM֊ին: \"" - -msgid " f-b for $VIMRUNTIME: \"" -msgstr " $VIMRUNTIME՝ ըստ լռելիության: \"" - -msgid "Compilation: " -msgstr "Կառուցման պարամետրեր: " - -msgid "Compiler: " -msgstr "Կառուցող: " - -msgid "Linking: " -msgstr "Կցագրում: " - -msgid " DEBUG BUILD" -msgstr " ԶՆՆՄԱՆ ԿԱՌՈՒՑՈՒՄ" - -msgid "VIM - Vi IMproved" -msgstr "VIM - Vi IMproved (բարելավված Vi)" - -msgid "version " -msgstr "տարբերակ " - -msgid "by Bram Moolenaar et al." -msgstr "այլք և Bram Moolenaar." - -msgid "Vim is open source and freely distributable" -msgstr "Vim֊ը բաց կոդով և ազատ տարածվող ծրագիր է" - -msgid "Help poor children in Uganda!" -msgstr "Օգնեցեք ՈՒգանդացի աղքատ երեխաներին!" - -msgid "type :help iccf for information " -msgstr "հավելյալ տեղեկատվության համար տալ :help iccf հրամանը " - -msgid "type :q to exit " -msgstr "ծրագրից դուրս գալու համար տալ :q հրամանը " - -msgid "type :help or for on-line help" -msgstr "օգնության համար տալ :help կամ հրամանը" - -msgid "type :help version9 for version info" -msgstr "այս տարբերակի մասին իմանալու համար տալ :help version9 հրամանը" - -msgid "Running in Vi compatible mode" -msgstr "Աշխատանք Vi հարմարեցված մոդում" - -#| msgid "type :help iccf for information " -msgid "type :set nocp for Vim defaults" -msgstr "տեսակ :set nocp Vim կանխադրվածների համար" - -msgid "type :help cp-default for info on this" -msgstr "հավելյալ տեղեկատվությոան համար տալ :help cp-default հրամանը" - -msgid "menu Help->Orphans for information " -msgstr "ինֆորմացիա ստանալու համար գնալ - Օգնություն->Որբեր " - -msgid "Running modeless, typed text is inserted" -msgstr "Անռեժիմ վիճակ, հավաքած տեքստի զետեղում" - -msgid "menu Edit->Global Settings->Toggle Insert Mode " -msgstr "մենյու Խմբագրել->Գլոբալ կարգավորումներ->Փոխարկել Տեղադրման ռեժիմը " - -msgid " for two modes " -msgstr " երկակի ռեժիմների համար " - -#| msgid "menu Edit->Global Settings->Toggle Insert Mode " -msgid "menu Edit->Global Settings->Toggle Vi Compatible" -msgstr "մենյու Խմբագրել->Գլոբալ կարգավորումներ->Փոխարկել Vi Compatible" - -msgid " for Vim defaults " -msgstr " Vim-ի լռելիությամբ արժեքների համար " - -msgid "Sponsor Vim development!" -msgstr "Օգնեցեք բարելավել Vim֊ը!" - -msgid "Become a registered Vim user!" -msgstr "Դարձեք Vim-ի ռեգիստրացված օգտատեր!" - -msgid "type :help sponsor for information " -msgstr "" -"հավելյալ տեղեկատվություն ստանալու համար տալ :help sponsor հրամանը " - -msgid "type :help register for information " -msgstr "" -"հավելյալ տեղեկատվություն ստանալու համար տալ :help register հրամանը " - -msgid "menu Help->Sponsor/Register for information " -msgstr "մենյու Օգնություն->Հովանավոր/Գրանցվել տեղեկությունների համար " - -msgid "global" -msgstr "գլոբալ" - -msgid "buffer" -msgstr "բուֆեր" - -msgid "window" -msgstr "պատուհան" - -msgid "tab" -msgstr "թաբ" - -msgid "[end of lines]" -msgstr "[տողի վերջ]" - -msgid "" -"\n" -"# Buffer list:\n" -msgstr "" -"\n" -"# Բուֆերային ցուցակ.\n" - -#, c-format -msgid "" -"\n" -"# %s History (newest to oldest):\n" -msgstr "" -"\n" -"# %s Պատմություն (նորագույնից ամենահին).\n" - -msgid "Command Line" -msgstr "Հրամանյին տող" - -msgid "Search String" -msgstr "Որոնման տող" - -msgid "Expression" -msgstr "Արտահայտություն" - -msgid "Input Line" -msgstr "Զետեղման տող" - -#| msgid "Input Line" -msgid "Debug Line" -msgstr "Վրիպազերծման գիծ" - -msgid "" -"\n" -"# Bar lines, copied verbatim:\n" -msgstr "" -"\n" -"# Բար տողեր, բառացի պատճենված.\n" - -#, c-format -msgid "%sviminfo: %s in line: " -msgstr "%sviminfo: %s տողում: " - -msgid "" -"\n" -"# global variables:\n" -msgstr "" -"\n" -"# գլոբալ փոփոխականներ.\n" - -msgid "" -"\n" -"# Last Substitute String:\n" -"$" -msgstr "" -"\n" -"# Վերջին փոխարինող տողը.\n" -"$" - -#, c-format -msgid "" -"\n" -"# Last %sSearch Pattern:\n" -"~" -msgstr "" -"\n" -"# Վերջին %sՈրոնման նմուշը.\n" -"~" - -msgid "Substitute " -msgstr "Փոխարինող " - -msgid "" -"\n" -"# Registers:\n" -msgstr "" -"\n" -"# Ռեգիստերներ:\n" - -msgid "" -"\n" -"# History of marks within files (newest to oldest):\n" -msgstr "" -"\n" -"# Ֆայլերի մեջ նշանների պատմություն (նորագույնից ամենահին).\n" - -msgid "" -"\n" -"# File marks:\n" -msgstr "" -"\n" -"# Ֆայլի նշաններ.\n" - -msgid "" -"\n" -"# Jumplist (newest first):\n" -msgstr "" -"\n" -"# Jumplist (սկզբում ամենանորը).\n" - -#, c-format -msgid "" -"# This viminfo file was generated by Vim %s.\n" -msgstr "" -"# Այս viminfo ֆայլը ստեղծվել է Vim %s-ի կողմից:\n" - -msgid "" -"# You may edit it if you're careful!\n" -"\n" -msgstr "" -"# Դուք կարող եք խմբագրել այն, եթե զգույշ լինեք:\n" -"\n" - -msgid "" -"# Value of 'encoding' when this file was written\n" -msgstr "" -"# 'encoding'-ի արժեքը, երբ այս ֆայլը գրվել է\n" - -#, c-format -msgid "Reading viminfo file \"%s\"%s%s%s%s" -msgstr "Կարդացվում է viminfo ֆայլը \"%s\"%s%s%s%s" - -msgid " info" -msgstr " տեղեկություն" - -msgid " marks" -msgstr " նշում" - -msgid " oldfiles" -msgstr " հին ֆայլեր" - -msgid " FAILED" -msgstr " ԱՆՀԱՋՈՂ" - -#, c-format -msgid "Writing viminfo file \"%s\"" -msgstr "Viminfo ֆայլի փոփոխում \"%s\"" - -msgid "Already only one window" -msgstr "Արդեն միայն մեկ պատուհան է" - -#| msgid "Edit File in new tab page" -msgid "Edit with Vim using &tabpages" -msgstr "Խմբագրել Vim-ի հետ՝ օգտագործելով &ներդիր էջերը" - -msgid "Edit with single &Vim" -msgstr "Խմբագրել մեկ &Vim-ով" - -msgid "Diff with Vim" -msgstr "Համեմատել &Vim-ի օգնությամբ" - -msgid "Edit with &Vim" -msgstr "Խմբագրել &Vim-ի օգնությամբ" - -msgid "Edit with existing Vim" -msgstr "Խմբագրել գոյություն ունեցող Vim-ի օգնությամբ" - -msgid "Edit with existing Vim - " -msgstr "Խմբագրել գոյություն ունեցող Vim-ի օգնությամբ - " - -msgid "Edits the selected file(s) with Vim" -msgstr "Խմբագրում է ընտրված ֆայլ(եր)ը Vim-ով" - -msgid "Error creating process: Check if gvim is in your path!" -msgstr "Պրոցեսի ստեղծման սխալ. Ստուգեք, արդյոք gvim-ը գտնվում է ճանապարհին!" - -msgid "gvimext.dll error" -msgstr "gvimext.dll֊ի սխալ" - -msgid "Interrupted" -msgstr "Ընդհատված" - -msgid "E10: \\ should be followed by /, ? or &" -msgstr "E10: \\֊ից հետո պետք է լինի /, ? կամ &" - -msgid "E11: Invalid in command-line window; :q closes the window" -msgstr "" -"E11: Հրամանային տողի պատուհանում թույլատրված չէ; :q փակում է պատուհանը" - -msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search" -msgstr "" -"E12: Հրամանն արգելված է կատարել exrc/vimrc֊ից, այս թղթապանակում կամ պիտակ " -"որոնման ժամանակ" - -msgid "E13: File exists (add ! to override)" -msgstr "E13: Ֆայլը գոյություն ունի (ամրագրելու համար ավելացրեք !)" - -#, c-format -msgid "E15: Invalid expression: \"%s\"" -msgstr "E15: Անվավեր արտահայտություն: %s" - -msgid "E16: Invalid range" -msgstr "E16: Անվավեր միջակայք" - -#, c-format -msgid "E17: \"%s\" is a directory" -msgstr "E17: \"%s\"-ը ֆայլերի պահոց է" - -msgid "E18: Unexpected characters in :let" -msgstr "E18: Չսպասված տառ :let հրամանում" - -msgid "E18: Unexpected characters in assignment" -msgstr "E18: Չսպասված տառ վերագրման ժամանակ" - -msgid "E19: Mark has invalid line number" -msgstr "E19: Նշումն ունի անվավեր տողի համար" - -msgid "E20: Mark not set" -msgstr "E20: Նշումը սահմանված չէ" - -msgid "E21: Cannot make changes, 'modifiable' is off" -msgstr "E21: Հնարավոր չէ փոփոխել, 'modifiable' հատկությունն անջատված է" - -msgid "E22: Scripts nested too deep" -msgstr "E22: Սկրիպտը շատ խորն է ներդրված" - -msgid "E23: No alternate file" -msgstr "E23: Այլընտրանքահին ֆայլ չկա" - -msgid "E24: No such abbreviation" -msgstr "E24: Նման հապավում չկա" - -msgid "E25: GUI cannot be used: Not enabled at compile time" -msgstr "E25: Գրաֆիկակակն ինտերֆեյսն անջատված է կառուցման ժամանակ" - -msgid "" -"E26: Hebrew cannot be used: Not enabled at compile time\n" -msgstr "" -"E26: Եբրայերենը հնարավոր չէ օգտագործել, այն անջատված է կառուցման ժամանակ\n" - -msgid "" -"E27: Farsi support has been removed\n" -msgstr "" -"E27: պարսկերենի աջակցությունը հանվել է\n" - -#, c-format -msgid "E28: No such highlight group name: %s" -msgstr "E28: Նման գունանշման խումբ չկա։ %s" - -msgid "E29: No inserted text yet" -msgstr "E29: Դեռևս չկա զետեղված տեքստ" - -msgid "E30: No previous command line" -msgstr "E30: Նախորդ հրամանային տողը չկա" - -msgid "E31: No such mapping" -msgstr "E31: Չկա նման համատեղում" - -msgid "E32: No file name" -msgstr "E32: Ֆայլն անվանված չէ" - -msgid "E33: No previous substitute regular expression" -msgstr "E33: Չկա նախօրոք տրված փոխարինման ռեգուլյար արտահայտություն" - -msgid "E34: No previous command" -msgstr "E34: Չկա նախորդող հրաման" - -msgid "E35: No previous regular expression" -msgstr "E35: Չկա նախօրոք տրված ռեգուլյար արտահայտություն" - -msgid "E36: Not enough room" -msgstr "E36: Անբավարար տարածություն" - -msgid "E37: No write since last change" -msgstr "E37: Պահված չէ վերջին փոփոխությունից հետո" - -msgid "E37: No write since last change (add ! to override)" -msgstr "E37: Փոփոխությունները պահպանված չեն (ամրագրելու համար ավելացրեք !)" - -msgid "E39: Number expected" -msgstr "E39: Սպասվում է թիվ" - -#, c-format -msgid "E40: Can't open errorfile %s" -msgstr "E40: Հնարավոր չէ բացել սխալների ֆայլը %s" - -msgid "E41: Out of memory!" -msgstr "E41: Հիշողությունը չի բավականացնում!" - -msgid "E42: No Errors" -msgstr "E42: Սխալներ չկան" - -msgid "E45: 'readonly' option is set (add ! to override)" -msgstr "E45: 'readonly' կարգանշանը միացված է (անցման համար ավելացնել !)" - -msgid "E46: Cannot change read-only variable" -msgstr "E46: Հնարավոր չէ փոփոխել միայն կարդալու համար տրված փոփոխականը" - -#, c-format -msgid "E46: Cannot change read-only variable \"%s\"" -msgstr "E46: Հնարավոր չէ փոփխել միայն կարդալու համար տրված փոփխականը \"%s\"" - -msgid "E47: Error while reading errorfile" -msgstr "E47: Սխալների ֆայլի ընթերցման սխալ" - -msgid "E48: Not allowed in sandbox" -msgstr "E48: Չի թույլատրվում sandbox֊ում" - -msgid "E49: Invalid scroll size" -msgstr "E49: Անվավեր սկքրոլ՞՞" - -msgid "E50: Too many \\z(" -msgstr "E50: Աննախադեպ շատ \\z(" - -#, c-format -msgid "E51: Too many %s(" -msgstr "E51:Աննախադեպ շատ %s(" - -msgid "E52: Unmatched \\z(" -msgstr "E52: Չհամընկնող \\z(" - -#, c-format -msgid "E53: Unmatched %s%%(" -msgstr "E53: Չհամընկնող %s%%(" - -#, c-format -msgid "E54: Unmatched %s(" -msgstr "E54: Չհամընկնող %s(" - -#, c-format -msgid "E55: Unmatched %s)" -msgstr "E55: Չհամընկնող %s)" - -#, c-format -msgid "E59: Invalid character after %s@" -msgstr "E59: Անվավեր նշան՝ %s@-ից հետո" - -#, c-format -msgid "E60: Too many complex %s{...}s" -msgstr "E60: Աննախադեպ շատ ներդրված կառուցվածքներ %s{...}" - -#, c-format -msgid "E61: Nested %s*" -msgstr "E61: Ներդրված %s*" - -#, c-format -msgid "E62: Nested %s%c" -msgstr "E62: Ներդրված %s%c" - -msgid "E63: Invalid use of \\_" -msgstr "E63: Չթույլատրված \\_ -ի օգտագործում" - -#, c-format -msgid "E64: %s%c follows nothing" -msgstr "E64: %s%c-ը հետևում է ոչնչի" - -msgid "E65: Illegal back reference" -msgstr "E65: Չույլատրված հակադարձ հղում" - -msgid "E66: \\z( not allowed here" -msgstr "E66: \\z(-ը չի կարող օգտագործվել այստեղ" - -msgid "E67: \\z1 - \\z9 not allowed here" -msgstr "E67: \\z1 - \\z9 աստեղ չեն թույլատրվում" - -msgid "E68: Invalid character after \\z" -msgstr "E68: Անվավեր նշան \\z֊ից հետո" - -#, c-format -msgid "E69: Missing ] after %s%%[" -msgstr "E69: Բացակայող ] %s%%[֊ից հետո" - -#, c-format -msgid "E70: Empty %s%%[]" -msgstr "E70: Դատարկ %s%%[]" - -#, c-format -msgid "E71: Invalid character after %s%%" -msgstr "E71: Անվավեր նշան %s%%֊ից հետո" - -msgid "E72: Close error on swap file" -msgstr "E72: Սվեփ ֆայլի փակման սխալ" - -msgid "E73: Tag stack empty" -msgstr "E73: Պիտակների ստեկը դատարկ է" - -msgid "E74: Command too complex" -msgstr "E74: Հրամանը մի քիչ բարդ է" - -msgid "E75: Name too long" -msgstr "E75: Անունը մի քիչ երկար է" - -msgid "E76: Too many [" -msgstr "E76: Աննախադեպ շատ [ նշաններ" - -msgid "E77: Too many file names" -msgstr "E77: Աննախադեպ շատ ֆայլերի անուններ" - -msgid "E78: Unknown mark" -msgstr "E78: Անծանոթ նշում" - -msgid "E79: Cannot expand wildcards" -msgstr "E79: Հնարավոր չէ արտածել" - -msgid "E80: Error while writing" -msgstr "E80: Սխալ գրելու ընթացում" - -msgid "E81: Using not in a script context" -msgstr "E81: -ն օգտագործվել է սկրիպտային կոնտեքստից դուրս" - -msgid "E82: Cannot allocate any buffer, exiting..." -msgstr "E82: Հնարավոր չէ առանձնացնել գոնե մեկ բուֆերի հիշողություն, ավարտ..." - -msgid "E83: Cannot allocate buffer, using other one..." -msgstr "" -"E83: Հնարավոր չէ առանձնացնել բուֆերի հիշողություն, ուրիշ մեկն է օգտագործվում." -".." - -msgid "E84: No modified buffer found" -msgstr "E84: Փոփոխված բուֆերներ չեն հայտնաբերվել" - -msgid "E85: There is no listed buffer" -msgstr "E85: Ցանկում ընդգրկված բուֆերներ չկան" - -#, c-format -msgid "E86: Buffer %ld does not exist" -msgstr "E86: %ld բուֆերը գոյություն չունի" - -msgid "E87: Cannot go beyond last buffer" -msgstr "E87: Սա վերջին բուֆերն է" - -msgid "E88: Cannot go before first buffer" -msgstr "E88: Սա առաջին բուֆերն է" - -#, c-format -msgid "E89: No write since last change for buffer %d (add ! to override)" -msgstr "" -"E89: %d բուֆերի փոփոխությունները չեն ամրագրվել, (ամրագրելու համար ավելացրեք !" -")" - -msgid "E90: Cannot unload last buffer" -msgstr "E90: Հնարավոր չէ բեռնաթափել վերջին բուֆերը" - -msgid "E91: 'shell' option is empty" -msgstr "E91: 'shell' կարգանշանը դատարկ է" - -#, c-format -msgid "E92: Buffer %d not found" -msgstr "E92: %d բուֆերը չի հայտնաբերվել" - -#, c-format -msgid "E93: More than one match for %s" -msgstr "E93: Մի քանի համընկնումներ %s-ի համար" - -#, c-format -msgid "E94: No matching buffer for %s" -msgstr "E94: Չկա համապատասխան բուֆեր %s-ի համար" - -msgid "E95: Buffer with this name already exists" -msgstr "E95: Նմանատիպ անունով բուֆեր արդեն գոյություն ունի" - -#, c-format -msgid "E96: Cannot diff more than %d buffers" -msgstr "E96: Հնարավոր չէ համեմատել %d-ից շատ բուֆերներ" - -msgid "E97: Cannot create diffs" -msgstr "E97: Հնարավոր չէ ստեղծել համեմատություններ" - -msgid "E98: Cannot read diff output" -msgstr "E98: Հնարավոր չէ կարդալ համեմատման ելքը" - -msgid "E99: Current buffer is not in diff mode" -msgstr "E99: Տվյալ բուֆերը չի գտվում համեմատման կարգավիճակում" - -msgid "E100: No other buffer in diff mode" -msgstr "E100: Համեմատման բուֆերներ այլևս չկան" - -msgid "E101: More than two buffers in diff mode, don't know which one to use" -msgstr "E101: Տրված են մի քանի համեմատման բուֆերներ, չգիտեմ որն օգտագործել" - -#, c-format -msgid "E102: Can't find buffer \"%s\"" -msgstr "E102: Հնարավոր չէ գտնել \"%s\" բուֆերը" - -#, c-format -msgid "E103: Buffer \"%s\" is not in diff mode" -msgstr "E103: \"%s\" բուֆերը չի գտնվում համեմատման ռեժիմում" - -msgid "E104: Escape not allowed in digraph" -msgstr "E104: Escape֊ը չի կարելի օգտագործել digraph֊ում" - -msgid "E105: Using :loadkeymap not in a sourced file" -msgstr "E105: loadkeymap հրամանի օգտագործում չկցված ֆայլից" - -#| msgid "E375: Unsupported %%%c in format string" -msgid "E106: Unsupported diff output format: %s" -msgstr "E106: Չաջակցվող տարբերության ելքային ձևաչափ՝ %s" - -#, c-format -msgid "E107: Missing parentheses: %s" -msgstr "E107: Բացակայող փակագծեր: %s" - -#, c-format -msgid "E108: No such variable: \"%s\"" -msgstr "E108: Չկա նման փոփոխական: \"%s\"" - -msgid "E109: Missing ':' after '?'" -msgstr "E109: Բացակայող ':' '?'֊ից հետո" - -msgid "E110: Missing ')'" -msgstr "E110: Բացակայող ')'" - -msgid "E111: Missing ']'" -msgstr "E111: Բացակայող ']'" - -#, c-format -msgid "E112: Option name missing: %s" -msgstr "E112: Կարգանշանի անունը տրված չէ: %s" - -#, c-format -msgid "E113: Unknown option: %s" -msgstr "E113: Անծանոթ կարգանշան: %s" - -#, c-format -msgid "E114: Missing double quote: %s" -msgstr "E114: Բացակայող չակերտ: %s" - -#, c-format -msgid "E115: Missing single quote: %s" -msgstr "E115: Բացակայող չակերտ: %s" - -#, c-format -msgid "E116: Invalid arguments for function %s" -msgstr "E116: %s ֆունկցիային տրված են անվավեր արգումենտներ" - -#, c-format -msgid "E117: Unknown function: %s" -msgstr "E117: Անծանոթ ֆունկցիա: %s" - -#, c-format -msgid "E118: Too many arguments for function: %s" -msgstr "E118: %s Տրված են աննախադեպ շատ Ֆունկցիային արգումենտներ" - -#, c-format -msgid "E119: Not enough arguments for function: %s" -msgstr "E119: Ոչ բավարար քանակությամբ արգումենտներ են տրված %s ֆունկցիային" - -#, c-format -msgid "E120: Using not in a script context: %s" -msgstr "E120: օգտագործվել է ոչ սկրիպտում: %s" - -#, c-format -msgid "E121: Undefined variable: %s" -msgstr "E121: Չսահմանված փոփոխական: %s" - -#, c-format -msgid "E121: Undefined variable: %c:%s" -msgstr "E121: Չսահմանված փոփոխական: %c:%s" - -#, c-format -msgid "E122: Function %s already exists, add ! to replace it" -msgstr "" -"E122: %s ֆունկցիան արդեն գոյություն ունի. Ավելացնել ! այն փոխարինելու համար" - -#, c-format -msgid "E123: Undefined function: %s" -msgstr "E123: Անծանոթ ֆունկցիա: %s" - -#, c-format -msgid "E124: Missing '(': %s" -msgstr "E124: Բացակայող '(': %s" - -#, c-format -msgid "E125: Illegal argument: %s" -msgstr "E125: Չթույլատրված արգումենտ: %s" - -msgid "E126: Missing :endfunction" -msgstr "E126: Բացակայող :endfunction" - -#, c-format -msgid "E127: Cannot redefine function %s: It is in use" -msgstr "E127: Հնարավոր չէ վերասահմանել %s ֆունկցիան, այն կատարման փուլում է" - -#, c-format -msgid "E128: Function name must start with a capital or \"s:\": %s" -msgstr "" -"E128: Ֆունկցիայի անունը պետք է սկսվի մեծատառով կամ պարունակի \"s:\": %s" - -msgid "E129: Function name required" -msgstr "E129: Ֆունկցիայի անունը պարտադիր է" - -#, c-format -msgid "E131: Cannot delete function %s: It is in use" -msgstr "E131: Հնարավոր չէ ջնջել %s ֆունկցիան, այն կատարման փուլում է" - -msgid "E132: Function call depth is higher than 'maxfuncdepth'" -msgstr "E132: ֆունկցիայի կանչի խորությունը մեծ է 'maxfuncdepth'֊ից" - -msgid "E133: :return not inside a function" -msgstr "E133: :return ոչ ֆունկցիայի ներսից" - -#| msgid "E164: Cannot go before first file" -msgid "E134: Cannot move a range of lines into itself" -msgstr "E134: Հնարավոր չէ տեղափոխել մի շարք տողեր իր մեջ" - -msgid "E135: *Filter* Autocommands must not change current buffer" -msgstr "E135: *Filter* Ինքնահրամանները չպետք է փոխեն տվյալ բուֆերը" - -msgid "E136: viminfo: Too many errors, skipping rest of file" -msgstr "" -"E136: viminfo: Աննախադեպ շատ սխալներ, ֆայլի մնացյալ մասը բաց է թողնվում" - -#, c-format -msgid "E137: Viminfo file is not writable: %s" -msgstr "E137: Viminfo ֆայլը փոփոխելի չէ: %s" - -#, c-format -msgid "E138: Can't write viminfo file %s!" -msgstr "E138: Անհնար է ամրագրել viminfo ֆայլը %s!" - -msgid "E139: File is loaded in another buffer" -msgstr "E139: Ֆայլը բեռնված է այլ բուֆերում" - -msgid "E140: Use ! to write partial buffer" -msgstr "E140: Օգտագործել ! բուֆերում մաս֊մաս գրելու համար" - -#, c-format -msgid "E141: No file name for buffer %ld" -msgstr "E141: %ld բուֆերի համար չկա ֆայլի անուն" - -msgid "E142: File not written: Writing is disabled by 'write' option" -msgstr "" -"E142: Ֆայլն ամրագրված չէ: ամրագրոըմն անջատված է 'write' կարգանշման միջոցով" - -#, c-format -msgid "E143: Autocommands unexpectedly deleted new buffer %s" -msgstr "E143:Ինքնահրամանը անսպասելի ջնջել է նոր բուֆերը։ %s" - -msgid "E144: Non-numeric argument to :z" -msgstr "E144: Ոչ թվային արգումենտ :z-ին" - -msgid "E145: Shell commands and some functionality not allowed in rvim" -msgstr "E145: rvim-ում չեն թույլատրվում վահանակի հրամաններ" - -msgid "E146: Regular expressions can't be delimited by letters" -msgstr "E146: Ռեգուլյար արտահայտությունները չեն կարող բաժանված լինել տառերով" - -msgid "E147: Cannot do :global recursive with a range" -msgstr "E147: global հրամանը չի կարող լինել ռեկուրսիվ" - -msgid "E148: Regular expression missing from :global" -msgstr "E148: Ռեգույլար արտահայտությունը բացակայում է :global-ից" - -#, c-format -msgid "E149: Sorry, no help for %s" -msgstr "E149: Ներողություն, '%s' մասին ոչինչ չկա" - -#, c-format -msgid "E150: Not a directory: %s" -msgstr "E150: %s֊ը թղթապանակ չէ" - -#, c-format -msgid "E151: No match: %s" -msgstr "E151: Համընկնում չկա: %s" - -#, c-format -msgid "E152: Cannot open %s for writing" -msgstr "E152: Հնարավոր չէ բացել %s֊ը գրելու համար" - -#, c-format -msgid "E153: Unable to open %s for reading" -msgstr "E153: Հնարավոր չէ բացել %s֊ը կարդալու համար" - -#, c-format -msgid "E154: Duplicate tag \"%s\" in file %s/%s" -msgstr "E154: Կրկնված պիտակ \"%s\" %s/%s֊ֆայլում" - -#, c-format -msgid "E155: Unknown sign: %s" -msgstr "E155: Անծանոթ նշան: %s" - -msgid "E156: Missing sign name" -msgstr "E156: Բացակայող նշանի անուն" - -#, c-format -msgid "E157: Invalid sign ID: %d" -msgstr "E157: Անվավեր նշանի համար: %d" - -#, c-format -msgid "E158: Invalid buffer name: %s" -msgstr "E158: Անվավեր բուֆերի անուն: %s" - -msgid "E159: Missing sign number" -msgstr "E159: Բացակայող թվի նշան" - -#, c-format -msgid "E160: Unknown sign command: %s" -msgstr "E160: Անծանոթ նշանի հրաման %s" - -#, c-format -msgid "E161: Breakpoint not found: %s" -msgstr "E161: Վերադարձի կետը չի հայտնաբերվել: %s" - -#, c-format -msgid "E162: No write since last change for buffer \"%s\"" -msgstr "E162: \"%s\" Բուֆերում կան չամրագրված փոփոխություններ" - -msgid "E163: There is only one file to edit" -msgstr "E163: Խմբագրելու համար կա միայն մեկ ֆայլ" - -msgid "E164: Cannot go before first file" -msgstr "E164: Անցումը հնարավոր չէ, սա առաջին ֆայլն է" - -msgid "E165: Cannot go beyond last file" -msgstr "E165: Անցումը հնարավոր չէ, սա վերջին ֆայլն է" - -msgid "E166: Can't open linked file for writing" -msgstr "E166: Գրելու համար հնարավոր չէ բացել կապված ֆայլը" - -msgid "E167: :scriptencoding used outside of a sourced file" -msgstr "E167: :scriptencoding հրամանը օգտագործվում է կցվող ֆայլից դուրս" - -msgid "E168: :finish used outside of a sourced file" -msgstr "E168: :finish հրամանը օգտագործվում է կցվող ֆայլից դուրս" - -msgid "E169: Command too recursive" -msgstr "E169: Հրամանը շատ ռեկուրսիվ է" - -#| msgid "E171: Missing :endif" -msgid "E170: Missing :endwhile" -msgstr "E170: Բացակայում է :endwhile" - -msgid "E170: Missing :endfor" -msgstr "E170: Հրամանը բացակայում է :endfor" - -msgid "E171: Missing :endif" -msgstr "E171: Հրամանը բացակայում է :endif" - -msgid "E172: Missing marker" -msgstr "E172: Բացակայում կարգանշում" - -#, c-format -msgid "E173: %d more file to edit" -msgid_plural "E173: %d more files to edit" -msgstr[0] "E173: %d-ից շատ խմբագրելի ֆայլ" -msgstr[1] "E173: %d֊ից շատ խմբագրելի ֆայլեր" - -#, c-format -msgid "E174: Command already exists: add ! to replace it: %s" -msgstr "E174: Հրամանն արդեն գոյություն ունի. Փոխարինման համար ավելացնել ! : %s" - -msgid "E175: No attribute specified" -msgstr "E175: բնորոշիչ տրված չէ" - -msgid "E176: Invalid number of arguments" -msgstr "E176: Արգումենտների սխալ քանակություն" - -msgid "E177: Count cannot be specified twice" -msgstr "E177: Քանակը չի կարելի տալ կրկնակի անգամ" - -msgid "E178: Invalid default value for count" -msgstr "E178: Քանակի անվավեր լռելիությամբ արժեք" - -#, c-format -msgid "E179: Argument required for %s" -msgstr "E179: %s հրամանի համար անհրաժեշտ է արգումենտ" - -#, c-format -msgid "E180: Invalid complete value: %s" -msgstr "E180: Անվավեր ավտոլրացման արժեք : %s" - -#, c-format -msgid "E180: Invalid address type value: %s" -msgstr "E180: Անվավեր հասցեյավորման արժեք : %s" - -#, c-format -msgid "E181: Invalid attribute: %s" -msgstr "E181: Անվավեր բնորոշիչ: %s" - -msgid "E182: Invalid command name" -msgstr "E182: Անվավեր հրամանի անուն" - -msgid "E183: User defined commands must start with an uppercase letter" -msgstr "E183: Օգտատիրոջ սահմանած ֆունկցիաները պետք է սկսվեն մեծատառով" - -#, c-format -msgid "E184: No such user-defined command: %s" -msgstr "E184: Չկա նման օգտատիրոջ սահմանած հրաման: %s" - -#, c-format -msgid "E185: Cannot find color scheme '%s'" -msgstr "E185: '%s' գունային սխեման չի գտնվել" - -msgid "E186: No previous directory" -msgstr "E186: Չկա նախկին թղթապանակ" - -msgid "E187: Directory unknown" -msgstr "E187: Անծանոթ բառարան" - -msgid "E188: Obtaining window position not implemented for this platform" -msgstr "E188: Պատուհանի չափեր վերցնելն իրականացված չէ այս պլատֆորմի համար" - -#, c-format -msgid "E189: \"%s\" exists (add ! to override)" -msgstr "E189: \"%s\" արդեն գոյություն ունի (անցման համար ավելացնել !)" - -#, c-format -msgid "E190: Cannot open \"%s\" for writing" -msgstr "E190: Հնարավոր չէ գրելու համար բացել \"%s\"֊ը" - -msgid "E191: Argument must be a letter or forward/backward quote" -msgstr "E191: արգումենտը պետք է լինի տառ կամ բացվող/փակվող չակերտ" - -msgid "E192: Recursive use of :normal too deep" -msgstr "E192: :normal հրամանի ռեկուրսիվ կանչը շատ խորն է" - -#, c-format -msgid "E193: %s not inside a function" -msgstr "E193: %s ոչ ֆունկցիայի ներսից" - -#| msgid "E498: No :source file name to substitute for \"\"" -msgid "E194: No alternate file name to substitute for '#'" -msgstr "E194: '#'-ը փոխարինող ֆայլի այլընտրանքային անուն չկա" - -msgid "E195: Cannot open viminfo file for reading" -msgstr "E195: Կարալու համար հնարավոր չ բացել viminfo ֆայլը" - -msgid "E196: No digraphs in this version" -msgstr "E196: Այս տարբերակում digraph֊ներ չկան" - -#, c-format -msgid "E197: Cannot set language to \"%s\"" -msgstr "E197: Հնարավոր չէ փոխել լեզուն \"%s\"" - -msgid "E199: Active window or buffer changed or deleted" -msgstr "E199: Ակտիվ պատուհանը կամ բուֆերը ջնջնվել կամ փոփոխվել է" - -msgid "E200: *ReadPre autocommands made the file unreadable" -msgstr "E200: *ReadPre ինքնահրամանները ֆայլը դարձրել են անընթեռնելի" - -msgid "E201: *ReadPre autocommands must not change current buffer" -msgstr "E201: ReadPre ինքնահրամանները չեն կարող փոխել տվյալ բուֆերը" - -msgid "E202: Conversion made file unreadable!" -msgstr "E202: Փոխակերպումը ֆայլը դարձրել է անընթեռնելի!" - -msgid "E203: Autocommands deleted or unloaded buffer to be written" -msgstr "E203: Բուֆերը կամ ջնջվել է կամ բեռնաթափվել է ինքնահրամանների միջոցով" - -msgid "E204: Autocommand changed number of lines in unexpected way" -msgstr "E204: Ինքնահրամանը անսպասելի փոխել է տողերը" - -msgid "E205: Patchmode: can't save original file" -msgstr "E205: Patchmode: հնարավոր չէ պահպանել նախնական ֆայլը" - -msgid "E206: Patchmode: can't touch empty original file" -msgstr "E206: Patchmode: հնարավոր չէ թարմացնել նախնական ֆայլը" - -msgid "E207: Can't delete backup file" -msgstr "E207: Հնարավոր չէ ջնջել պահպանման ֆայլը" - -#, c-format -msgid "E208: Error writing to \"%s\"" -msgstr "E208: Սխալ \"%s\" գրոլու ընթացքում" - -#, c-format -msgid "E209: Error closing \"%s\"" -msgstr "E209: Սխալ \"%s\" փակելու ընթացքում" - -#, c-format -msgid "E210: Error reading \"%s\"" -msgstr "E210: Սխալ \"%s\" կարդալու ընթացքում" - -#, c-format -msgid "E211: File \"%s\" no longer available" -msgstr "E211: \"%s\" ֆայլն արդեն հասնելի չէ" - -msgid "E212: Can't open file for writing" -msgstr "E212: Գրելու համար հնարավոր չէ բացել ֆայլը" - -msgid "E213: Cannot convert (add ! to write without conversion)" -msgstr "E213: Հնարավոր չէ փոխարկել (ամրագրելու համար ավելացրեք !)" - -msgid "E214: Can't find temp file for writing" -msgstr "E214: Ժամանակավոր ֆայլը չի գտնվել՝ գրելու համար" - -#, c-format -msgid "E215: Illegal character after *: %s" -msgstr "E215: Չթույլատրված նշան * նշանից հետո: %s" - -#, c-format -msgid "E216: No such event: %s" -msgstr "E216: Իրադարձությունը գոյություն չունի: %s" - -#, c-format -msgid "E216: No such group or event: %s" -msgstr "E216: Իրադարձությունը կամ խումբը գոյություն չունի: %s" - -msgid "E217: Can't execute autocommands for ALL events" -msgstr "" -"E217: Հնարավոր չէ կատարել ինքնահրամանները բոլոր իրադարձությունների համար" - -msgid "E218: Autocommand nesting too deep" -msgstr "E218: Ինքնահրամանը շատ է ներդրված" - -msgid "E219: Missing {." -msgstr "E219: Բացակայող {." - -msgid "E220: Missing }." -msgstr "E220: Բացակայող }." - -msgid "E221: Marker cannot start with lower case letter" -msgstr "E221: Կարգանշումը պետք է սկսվի մեծատառով" - -msgid "E223: Recursive mapping" -msgstr "E223: Ռեկուրսիվ համապատասխանեցում" - -#, c-format -msgid "E224: Global abbreviation already exists for %s" -msgstr "E224: Գլոբալ հապավումն արդեն գոյություն ունի %s-ի համար" - -#, c-format -msgid "E225: Global mapping already exists for %s" -msgstr "E225: Գլոբալ համապատասխանեցումն արդեն գոյություն ունի %s-ի համար" - -#, c-format -msgid "E226: Abbreviation already exists for %s" -msgstr "E226: Հապավումն արդեն գոյություն ունի %s-ի համար" - -#, c-format -msgid "E227: Mapping already exists for %s" -msgstr "E227: Համապատասխանեցումն արդեն գոյություն ունի %s-ի համար" - -msgid "E229: Cannot start the GUI" -msgstr "E229: Հնարավոր չէ սկսել գրաֆիկական ինտերֆեյսը" - -#, c-format -msgid "E230: Cannot read from \"%s\"" -msgstr "E230: Հնարավոր չէ կարդալ \"%s\"֊ից" - -msgid "E231: 'guifontwide' invalid" -msgstr "E231: 'guifontwide'-ի արժեքն անվավեր է" - -msgid "E233: Cannot open display" -msgstr "E233: Հնարավոր չէ բացել էկրանը" - -#, c-format -msgid "E234: Unknown fontset: %s" -msgstr "E234: Անծանոթ ֆոնտերի բաղմություն: %s" - -#, c-format -msgid "E235: Unknown font: %s" -msgstr "E235: Անհաըտ ֆոնտ: %s" - -#, c-format -msgid "E236: Font \"%s\" is not fixed-width" -msgstr "E236: \"%s\" տառատեսակը ֆիքսված երկարությամբ չէ" - -msgid "E237: Printer selection failed" -msgstr "E237: Տպիչի անհաջող ընտրում" - -#, c-format -msgid "E238: Print error: %s" -msgstr "E238: Տպագրման սխալ: %s" - -#, c-format -msgid "E239: Invalid sign text: %s" -msgstr "E239: Անվավեր տեքստային նշան: %s" - -msgid "E240: No connection to the X server" -msgstr "E240: X սերվերի հետ կապ չկա" - -#, c-format -msgid "E241: Unable to send to %s" -msgstr "E241: Անհնար է ուղարկել հաղորդագրությունը %s֊ին" - -#| msgid "E345: Can't find file \"%s\" in path" -msgid "E242: Can't split a window while closing another" -msgstr "E242: Չի կարելի պատուհանը բաժանել մյուսը փակելիս" - -#, c-format -msgid "E243: Argument not supported: \"-%s\"; Use the OLE version." -msgstr "E243: Արգումենտն իրականցաված չէ: \"-%s\"; Օգտագործել OLE տարբերակը." - -#, c-format -msgid "E244: Illegal %s name \"%s\" in font name \"%s\"" -msgstr "E244: %s չթույլատրված անուն \"%s\"՝ \"%s\" տառատեսակի անվանման մեջ" - -#, c-format -msgid "E245: Illegal char '%c' in font name \"%s\"" -msgstr "E245: Չթույլատրված '%c' նշան՝ \"%s\" տառատեսակի անվանման մեջ" - -msgid "E246: FileChangedShell autocommand deleted buffer" -msgstr "" -"E246: Բուֆերը ջնջվել է FileChangedShell ինքնահրամանի կատարման արդյունքում" - -#, c-format -msgid "E247: No registered server named \"%s\"" -msgstr "E247: \"%s\" սերվերը ռեգիստրացված չէ" - -msgid "E248: Failed to send command to the destination program" -msgstr "E248: Հարամանը չի հաջողվել ուղարկել նշանակման վայր" - -#| msgid "E881: Line count changed unexpectedly" -msgid "E249: Window layout changed unexpectedly" -msgstr "E249: Պատուհանի դասավորությունը անսպասելիորեն փոխվել է" - -#, c-format -msgid "E250: Fonts for the following charsets are missing in fontset %s:" -msgstr "" -"E250: Հետևյալ նշանների բազմությունը բացակայում է %s տառատեսակների բազմության " -"մեջ:" - -msgid "E251: VIM instance registry property is badly formed. Deleted!" -msgstr "E251: VIM registry ֆունկցիան սխալ է տրված. Ջնջված է!" - -#, c-format -msgid "E252: Fontset name: %s - Font '%s' is not fixed-width" -msgstr "E252: Տառատեսակ: %s - '%s' տառատեսակը ֆիքսված երկարությամբ չէ" - -#, c-format -msgid "E253: Fontset name: %s" -msgstr "E253: Տառատեսակների բազմության անունը: %s" - -#, c-format -msgid "E254: Cannot allocate color %s" -msgstr "E254: Հնարավոր չէ առաջացնել %s գույնը" - -msgid "E255: Couldn't read in sign data" -msgstr "E255: Հնարավոր չէ կարդալ նշանի տվյալներից" - -msgid "E257: cstag: Tag not found" -msgstr "E257: cstag: Նշումը չի հայտնաբերվել" - -msgid "E258: Unable to send to client" -msgstr "E258: Անհնար է ուղարկել ընդունողին" - -#, c-format -msgid "E259: No matches found for cscope query %s of %s" -msgstr "E259: cscope %s համընկնումներ չեն հայտնաբերվել %s-ի համար" - -msgid "E260: Missing name after ->" -msgstr "E260: Բացակայող անուն ->-ից հետո" - -#, c-format -msgid "E261: Cscope connection %s not found" -msgstr "E261: Cscope %s կապը չի հայտնաբերվել" - -#, c-format -msgid "E262: Error reading cscope connection %d" -msgstr "E262: %d cscope տվյալների բազայի կապի սխալ ընթերցում" - -msgid "" -"E263: Sorry, this command is disabled, the Python library could not be " -"loaded." -msgstr "" -"E263: Ներողություն, այս հրամանն անջատված է, Python գրադարանը հնարավոր չէ " -"բեռնել." - -msgid "E264: Python: Error initialising I/O objects" -msgstr "E264: Python: Օբյեկտի սկզբնարժեքավորման սխալ I/O" - -msgid "E265: $_ must be an instance of String" -msgstr "E265: $_ պետք է լին տող" - -msgid "" -"E266: Sorry, this command is disabled, the Ruby library could not be loaded." -msgstr "" -"E266: Ներողություն, այս հրամանն անջատված է, Ruby գրադարանը հնարավոր չէ " -"բեռնել." - -msgid "E267: Unexpected return" -msgstr "E267: Անսպասելի return" - -msgid "E268: Unexpected next" -msgstr "E268: Անսպասելի next" - -msgid "E269: Unexpected break" -msgstr "E269: Անսպասելի break" - -msgid "E270: Unexpected redo" -msgstr "E270: Անսպասելի redo" - -msgid "E271: Retry outside of rescue clause" -msgstr "E271: Retry rescue օպերատորից դուրս" - -msgid "E272: Unhandled exception" -msgstr "E272: Չմշակված բացառում" - -#, c-format -msgid "E273: Unknown longjmp status %d" -msgstr "E273: Անծանոթ longjmp ստատուս %d" - -msgid "E274: No white space allowed before parenthesis" -msgstr "E274: Փակագծերից առաջ տարածություն չի թույլատրվում" - -#| msgid "E87: Cannot go beyond last buffer" -msgid "E275: Cannot add text property to unloaded buffer" -msgstr "E275: Չի կարող տեքստային հատկություն ավելացնել բեռնաթափված բուֆերին" - -#| msgid "E1061: Cannot find function %s" -msgid "E276: Cannot use function as a method: %s" -msgstr "E276: Հնարավոր չէ օգտագործել ֆունկցիան որպես մեթոդ՝ %s" - -msgid "E277: Unable to read a server reply" -msgstr "E277: Սերվերը չի պատասխանում" - -msgid "E279: Sorry, ++shell is not supported on this system" -msgstr "E279: Ներեցեք, ++ shell-ը չի աջակցվում այս համակարգում" - -#, c-format -msgid "E282: Cannot read from \"%s\"" -msgstr "E282: Հնարավոր չէ կարդալ \"%s\"֊ից" - -#, c-format -msgid "E283: No marks matching \"%s\"" -msgstr "E283: Չկան համընկնող նշումներ \"%s\"" - -msgid "E284: Cannot set IC values" -msgstr "E284: Հնարավոր չէ վերագրել IC արժեքներ" - -msgid "E285: Failed to create input context" -msgstr "E285: Հնարավոր չէ ստեղծել մուտքային կոնտեքստ" - -msgid "E286: Failed to open input method" -msgstr "E286: Հնարավոր չէ բացել մուտքային մեթոսը" - -msgid "E287: Warning: Could not set destroy callback to IM" -msgstr "E287: Զգուշացում: հնարավոր չէ վերագրել IM֊ի ջնջման կանչըввода" - -msgid "E288: Input method doesn't support any style" -msgstr "E288: Մուտքային մեթոդը չի աջակցում ոչ մի ստիլ" - -msgid "E289: Input method doesn't support my preedit type" -msgstr "E289: Մուտքային մեթոդը չի աջակցում ոչ մի նախախմբագրման տիպ" - -#| msgid "E897: List or Blob required" -msgid "E290: List or number required" -msgstr "E290: Ցանկ կամ թիվ է պահանջվում" - -msgid "E294: Seek error in swap file read" -msgstr "E294: Ցուցչի տեղափոխման սխալ սվեփ ֆայլի ընթերցման ժամանակ" - -msgid "E295: Read error in swap file" -msgstr "E295: Սվեփ ֆայլի ընթերցման սխալ" - -msgid "E296: Seek error in swap file write" -msgstr "E296: Ցուցչի տեղափոխման սխալ սվեփ ֆայլի ամրագրման ժամանակ" - -msgid "E297: Write error in swap file" -msgstr "E297: Սվեփ ֆայլի ամրագրման սխալ" - -msgid "E299: Perl evaluation forbidden in sandbox without the Safe module" -msgstr "E299: Perl հաշվարկումն արգելված է առանց զգուշության մոդուլի" - -msgid "E300: Swap file already exists (symlink attack?)" -msgstr "E300: Սվեփ ֆայլն արդեն գոյություն ունի (հարձակու՞մ)" - -msgid "E301: Oops, lost the swap file!!!" -msgstr "E301: Վա՜յ, կորցրեցի սվեփ ֆայլը!!!" - -msgid "E302: Could not rename swap file" -msgstr "E302: Հնարավոր չէ վերանվանել սվեփ ֆայլը" - -#, c-format -msgid "E303: Unable to open swap file for \"%s\", recovery impossible" -msgstr "E303: Հնարավոր չէ բացել սվեփ ֆայլը \"%s\", վերականգնումն անհնար է" - -#, c-format -msgid "E305: No swap file found for %s" -msgstr "E305: Սվեփ ֆայլ չի հայտնաբերվել %s֊ի համար" - -#, c-format -msgid "E306: Cannot open %s" -msgstr "E306: Հնարավոր չէ բացել %s֊ը" - -#, c-format -msgid "E307: %s does not look like a Vim swap file" -msgstr "E307: %s սվեփ ֆայլ չէ" - -msgid "E308: Warning: Original file may have been changed" -msgstr "E308: Զգուշացում: Մուտքային ֆայլն հնարավոր է փոփոխվել է" - -#, c-format -msgid "E309: Unable to read block 1 from %s" -msgstr "E309: Հնարավոր չե կարդալ 1֊ին բլոկը %s֊ից" - -#, c-format -msgid "E310: Block 1 ID wrong (%s not a .swp file?)" -msgstr "E310: Սխալ բլոկի համար, 1, (%s֊ը .swp սվեփ ֆայլ չի՞)" - -msgid "E311: Recovery Interrupted" -msgstr "E311: Վերականգնումն ընդհատված է" - -msgid "" -"E312: Errors detected while recovering; look for lines starting with ???" -msgstr "" -"E312: Սխալներ են հայտնաբերվել վերականգնման ընթացքում, նայել այն տողերը, " -"որոնք սկսվում են ???" - -msgid "E313: Cannot preserve, there is no swap file" -msgstr "E313: Հնարավոր չէ թարմացնել սվեփ ֆայլը, այն չի գտնվել" - -msgid "E314: Preserve failed" -msgstr "E314: Սվեփ ֆայլի թարմացման անհաջող փորձ" - -msgid "E319: Sorry, the command is not available in this version" -msgstr "E319: Ներողություն, այս հրամանը թույլատրված չէ ներկա տարբերակում" - -#, c-format -msgid "E321: Could not reload \"%s\"" -msgstr "E321: Հնարավոր չէ վերաբեռնել \"%s\"" - -msgid "E324: Can't open PostScript output file" -msgstr "E324: Հնարավոր չէ բացել PostScript ելքային ֆայլը" - -msgid "E325: ATTENTION" -msgstr "E325: ՈՒՇԱԴՐՈՒԹՅՈՒՆ" - -msgid "E326: Too many swap files found" -msgstr "E326: Հայտնաբերվել են աննախադեպ շատ քանակությամբ սվեփ ֆայլեր" - -msgid "E327: Part of menu-item path is not sub-menu" -msgstr "E327: Մենյուի֊ի մասի ճանապարհը ենթամենյու չէ" - -msgid "E328: Menu only exists in another mode" -msgstr "E328: Այս ռեժիմում մենյու չկա" - -#, c-format -msgid "E329: No menu \"%s\"" -msgstr "E329: %s մենյուն չկա" - -msgid "E330: Menu path must not lead to a sub-menu" -msgstr "E330: Մենյուի ճանապարհը չի կարող լինել ենթամենյու" - -msgid "E331: Must not add menu items directly to menu bar" -msgstr "E331: Մենյույի էլեմենտները չեն կարող ավելցավել մենյու բարում" - -msgid "E332: Separator cannot be part of a menu path" -msgstr "E332: Բաժանիչը չի կարող լինել մենյույի ճանապարհի մաս" - -msgid "E333: Menu path must lead to a menu item" -msgstr "E333: Մենյույի ճանապարհը պետք է ներկայացնի մենյուի էլէմենտ" - -#, c-format -msgid "E334: Menu not found: %s" -msgstr "E334: Մենյուն չի հայտնաբերվել: %s" - -#, c-format -msgid "E335: Menu not defined for %s mode" -msgstr "E335: Մենյուն %s ռեժիմում սահմանված չէ" - -msgid "E336: Menu path must lead to a sub-menu" -msgstr "E336: Մենյուի ճանապարհը պետք հղվի ենթամենյույի" - -msgid "E337: Menu not found - check menu names" -msgstr "E337: Մենյուն չի հայտնաբերվել - ստուգել մենյույի անունները" - -msgid "E338: Sorry, no file browser in console mode" -msgstr "E338: Ներողություն, ֆայլի դիտարկիչ չկա տողային ռեժիմում" - -msgid "E339: Pattern too long" -msgstr "E339: Անսպասելի երկար նմուշ" - -msgid "E340: Internal error; if you can reproduce please report a bug" -msgstr "" -"E340: Ներքին սխալ; եթե կարող եք վերարտադրել, խնդրում ենք հայտնել սխալի մասին" - -#, c-format -msgid "E342: Out of memory! (allocating %lu bytes)" -msgstr "E342: Հիշողությունը չի բավականացնում! (առանձնացվել է %lu բայթ)" - -#, c-format -msgid "" -"E343: Invalid path: '**[number]' must be at the end of the path or be " -"followed by '%s'." -msgstr "" -"E343: Անվավեր ճանապարհ: '**[թիվ]'֊ը պետք է լինի ճանապարհի վերջում կամ " -"հաջորդի '%s'-ին." - -#, c-format -msgid "E344: Can't find directory \"%s\" in cdpath" -msgstr "E344: \"%s\" թղթապանակը չի գտնվել cdpath֊ում" - -#, c-format -msgid "E345: Can't find file \"%s\" in path" -msgstr "E345: Ֆայլը չի գտնվել \"%s\"-ում" - -#, c-format -msgid "E346: No more directory \"%s\" found in cdpath" -msgstr "E346: Այլ \"%s\" թղթապանակներ չեն հայտնաբերվել cdpath֊ում" - -#, c-format -msgid "E347: No more file \"%s\" found in path" -msgstr "E347: Այլ \"%s\" ֆայլեր չեն հայտնաբերվել" - -msgid "E348: No string under cursor" -msgstr "E348: Կուրսորի դիրքում տող չկա" - -msgid "E349: No identifier under cursor" -msgstr "E349: Կուրսորի դիրքում չկա փոփոխականի անուն" - -msgid "E350: Cannot create fold with current 'foldmethod'" -msgstr "E350: Հնարավոր չէ ստեղծել փաթաթ 'foldmethod'֊ով" - -msgid "E351: Cannot delete fold with current 'foldmethod'" -msgstr "E351: Հնարավոր չէ ջնջել փաթաթ 'foldmethod'֊ով" - -msgid "E352: Cannot erase folds with current 'foldmethod'" -msgstr "E352: Հնարավոր չէ մաքրել փաթաթը 'foldmethod'-ի տվյալ արժեքի դեպքում" - -#, c-format -msgid "E353: Nothing in register %s" -msgstr "E353: %s ռեգիստրը դատարկ է" - -#, c-format -msgid "E354: Invalid register name: '%s'" -msgstr "E354: Ռեգիստրի անվավեր անուն: '%s'" - -#, c-format -msgid "E355: Unknown option: %s" -msgstr "E355: Անծանոթ կարգանշան: %s" - -#, c-format -msgid "E357: 'langmap': Matching character missing for %s" -msgstr "E357: 'langmap': %s-ի համար չկա համընկնման նշան" - -#, c-format -msgid "E358: 'langmap': Extra characters after semicolon: %s" -msgstr "E358: 'langmap': Ստորակետից հետո տրված են հավելյալ նշաններ: %s" - -msgid "E359: Screen mode setting not supported" -msgstr "E359: Տրված էկրանի ռեժիմն աջակցված չէ" - -msgid "E360: Cannot execute shell with -f option" -msgstr "E360: Հնարավոր չէ կատարել shell-ը -f կարգանշմամբ" - -#| msgid "E891: Using a Funcref as a Float" -msgid "E362: Using a boolean value as a Float" -msgstr "E362: բուլյան արժեքի օգտագործումը որպես Float" - -msgid "E363: Pattern uses more memory than 'maxmempattern'" -msgstr "" -"E363: Օրինակն օգտագործում է ավելի շատ հիշողություն քան տրված է " -"'maxmempattern'-ով" - -#, c-format -msgid "E364: Library call failed for \"%s()\"" -msgstr "E364: Անհաջող կանչ \"%s()\"" - -msgid "E365: Failed to print PostScript file" -msgstr "E365: Հնարավոր չէ պատճենել PostScript ֆայլը" - -#| msgid "E788: Not allowed to edit another buffer now" -msgid "E366: Not allowed to enter a popup window" -msgstr "E366: Չի թույլատրվում մուտք գործել սահապատ" - -#, c-format -msgid "E367: No such group: \"%s\"" -msgstr "E367: Խումբը գոյություն չունի։ \"%s\"" - -#, c-format -msgid "E368: Got SIG%s in libcall()" -msgstr "E368: Got SIG%s in libcall()" - -#, c-format -msgid "E369: Invalid item in %s%%[]" -msgstr "E369: Անվավեր էլեմենտ %s%%[]-ում" - -#, c-format -msgid "E370: Could not load library %s: %s" -msgstr "E370: Հնարավոր չէր բեռնել %s: %s գրադարանը" - -msgid "E371: Command not found" -msgstr "E371: Հրամանը չի հայտնաբերվել" - -#, c-format -msgid "E372: Too many %%%c in format string" -msgstr "E372: Տողային ֆորմատին տրված են աննախադեպ շատ %%%c֊եր" - -#, c-format -msgid "E373: Unexpected %%%c in format string" -msgstr "E373: Անսպասելի էլեմենտ %%%c" - -msgid "E374: Missing ] in format string" -msgstr "E374: Բացակայող ]" - -#, c-format -msgid "E375: Unsupported %%%c in format string" -msgstr "E375: %%%c֊ն չի աջակցվում" - -#, c-format -msgid "E376: Invalid %%%c in format string prefix" -msgstr "E376: Անվավեր %%%c տողային ֆորմատի նախածանցում" - -#, c-format -msgid "E377: Invalid %%%c in format string" -msgstr "E377: Անվավեր %%%c" - -msgid "E378: 'errorformat' contains no pattern" -msgstr "E378: 'errorformat'-ը չի պարունակում նմուշներ" - -msgid "E379: Missing or empty directory name" -msgstr "E379: Գոյություն չունեցող կամ դատարկ թղթապանակ" - -msgid "E380: At bottom of quickfix stack" -msgstr "E380: quickfix ստեկի ներքևում" - -msgid "E381: At top of quickfix stack" -msgstr "E381: quickfix ստեկի վերևում" - -msgid "E382: Cannot write, 'buftype' option is set" -msgstr "E382: Պահպանումն անհնար է, 'buftype' կարգանշանը միացված է" - -#, c-format -msgid "E383: Invalid search string: %s" -msgstr "E383: Անվավեր որոնման բառ: %s" - -#, c-format -msgid "E384: Search hit TOP without match for: %s" -msgstr "E384: Որոնումն ավարտված է ֆայլի սկզբում; %s-ը չի գտնվել" - -#, c-format -msgid "E385: Search hit BOTTOM without match for: %s" -msgstr "E385: Որոնումն ավարտված է ֆայլի վերջում; %s-ը չի գտնվել" - -msgid "E386: Expected '?' or '/' after ';'" -msgstr "E386: ';'-ից հետո սպասվում '?' կամ '/'" - -msgid "E387: Match is on current line" -msgstr "E387: Համընկնումը հերթական տողում է" - -msgid "E388: Couldn't find definition" -msgstr "E388: Հնարավոր չէ գտնել սահմանումը" - -msgid "E389: Couldn't find pattern" -msgstr "E389: Նմուշը չի գտնվել" - -#, c-format -msgid "E390: Illegal argument: %s" -msgstr "E390: Չթույլատրված արգումենտ: %s" - -#, c-format -msgid "E391: No such syntax cluster: %s" -msgstr "E391: %s ուղղագրական համակարգը չի գտնվել" - -#, c-format -msgid "E392: No such syntax cluster: %s" -msgstr "E392: %s ուղղագրական համակարգը չի գտնվել" - -msgid "E393: group[t]here not accepted here" -msgstr "E393: group[t]֊ն չի թույլատրվում այստեղ" - -#, c-format -msgid "E394: Didn't find region item for %s" -msgstr "E394: %s֊ի ռեգիոն էլեմենտը չի գտնվել" - -msgid "E395: Contains argument not accepted here" -msgstr "E395: Contains արգումենտը չի թույլատրվում այստեղ" - -msgid "E397: Filename required" -msgstr "E397: Պահանջվում է ֆայլի անուն" - -#, c-format -msgid "E398: Missing '=': %s" -msgstr "E398: Բացակայող '=': %s" - -#, c-format -msgid "E399: Not enough arguments: syntax region %s" -msgstr "E399: Անբավարար քանակությամբ արգումենտներ։ syntax region %s" - -msgid "E400: No cluster specified" -msgstr "E400: Համակարգը տրված չէ" - -#, c-format -msgid "E401: Pattern delimiter not found: %s" -msgstr "E401: Նմուշի բացատանիշն հայտնաբերված չէ: %s" - -#, c-format -msgid "E402: Garbage after pattern: %s" -msgstr "E402: Աղբ՝ նմուշից հետո: %s" - -msgid "E403: syntax sync: Line continuations pattern specified twice" -msgstr "" -"E403: Ուղղագրման համաժամանակեցում, տողի համալրման նմուշը կրկնակի է տրված" - -#, c-format -msgid "E404: Illegal arguments: %s" -msgstr "E404: Չթույլատրված պարամետրեր: %s" - -#, c-format -msgid "E405: Missing equal sign: %s" -msgstr "E405: Բացակայող վերագրման նշան: %s" - -#, c-format -msgid "E406: Empty argument: %s" -msgstr "E406: Դատարկ պարամետեր: %s" - -#, c-format -msgid "E407: %s not allowed here" -msgstr "E407: %s֊ը չի թույլատրվում այստեղ" - -#, c-format -msgid "E408: %s must be first in contains list" -msgstr "E408: %s֊ը պետք է լինի contains ցուցակի սկզբում" - -#, c-format -msgid "E409: Unknown group name: %s" -msgstr "E409: Անծանոթ խումբ: %s" - -#, c-format -msgid "E410: Invalid :syntax subcommand: %s" -msgstr "E410: Անվավեր ենթահրաման :syntax: %s" - -#, c-format -msgid "E411: Highlight group not found: %s" -msgstr "E411: %s գունանշման խումբը չի հայտնաբերվել" - -#, c-format -msgid "E412: Not enough arguments: \":highlight link %s\"" -msgstr "E412: Անբավարար քանակությամբ պարամետրեր: \":highlight link %s\"" - -#, c-format -msgid "E413: Too many arguments: \":highlight link %s\"" -msgstr "E413: Շատ քանակությամ պարամետրեր: \":highlight link %s\"" - -msgid "E414: Group has settings, highlight link ignored" -msgstr "E414: Խումբն ունի կարգաբերումներ, գունանշման հղումն անտեսված է" - -#, c-format -msgid "E415: Unexpected equal sign: %s" -msgstr "E415: Չսպասված հավասարման նշան: %s" - -#, c-format -msgid "E416: Missing equal sign: %s" -msgstr "E416: Բացակայող հավասարման նշան: %s" - -#, c-format -msgid "E417: Missing argument: %s" -msgstr "E417: Բացակայող արգումենտ: %s" - -#, c-format -msgid "E418: Illegal value: %s" -msgstr "E418: Չթույլատրված արժեք: %s" - -msgid "E418: I'm a teapot" -msgstr "E418: Ես թեյնիկ եմ" - -msgid "E419: FG color unknown" -msgstr "E419: Տողի անծանոթ գույն" - -msgid "E420: BG color unknown" -msgstr "E420: ֆոնի անծանոթ գույն" - -#, c-format -msgid "E421: Color name or number not recognized: %s" -msgstr "E421: Անծանոթ գույնի անուն կամ համար։ %s" - -#| msgid "E1011: Name too long: %s" -msgid "E422: Terminal code too long: %s" -msgstr "E422: Տերմինալի կոդը չափազանց երկար է՝ %s" - -#, c-format -msgid "E423: Illegal argument: %s" -msgstr "E423: Չթույլատրված պարամետեր: %s" - -msgid "E424: Too many different highlighting attributes in use" -msgstr "E424: Աննախադեպ շատ գունանշման բնորոշիչներ են օգտագործվում" - -msgid "E425: Cannot go before first matching tag" -msgstr "E425: Հնարավոր չէ անցնել առաջին համընկնման պիտակին" - -#, c-format -msgid "E426: Tag not found: %s" -msgstr "E426: Պիտակը չի հայտնաբերվել: %s" - -msgid "E427: There is only one matching tag" -msgstr "E427: Կա միայն մեկ համընկնման պիտակ" - -msgid "E428: Cannot go beyond last matching tag" -msgstr "E428: Հնարավոր չէ անցնել վերջին գտնված համընկնման պիտակին" - -#, c-format -msgid "E429: File \"%s\" does not exist" -msgstr "E429: \"%s\" ֆայլը չի գտնվել" - -#, c-format -msgid "" -"E430: Tag file path truncated for %s\n" -msgstr "" -"E430: Նշումների ֆայլի ճանապարհը կարճվել է։ %s\n" - -#, c-format -msgid "E431: Format error in tags file \"%s\"" -msgstr "E431: Ֆորմատի սխալ \"%s\" նշումների ֆայլում" - -#, c-format -msgid "E432: Tags file not sorted: %s" -msgstr "E432: Նշումների ֆայլը դասակարգված չէ: %s" - -msgid "E433: No tags file" -msgstr "E433: Պիտակների ֆայլը չի գտնվել" - -msgid "E434: Can't find tag pattern" -msgstr "E434: Պիտակի նմուշը հնարավոր չէ գտնել" - -msgid "E435: Couldn't find tag, just guessing!" -msgstr "E435: Պիտակը չի գտնվել, փորձում եմ գուշակել!" - -#, c-format -msgid "E436: No \"%s\" entry in termcap" -msgstr "E436: \"%s\"֊ը termcap֊ում չկա" - -msgid "E437: Terminal capability \"cm\" required" -msgstr "E437: Պահանջվում է \"cm\" տերմինալի առկայություն" - -msgid "E441: There is no preview window" -msgstr "E441: Նախադիտման պատուհանը բացակայում է" - -msgid "E442: Can't split topleft and botright at the same time" -msgstr "E442: Հնարավոր չէ միաժամանակ կատարել վերևից ձախ և ներքևից աջ բաժանում" - -msgid "E443: Cannot rotate when another window is split" -msgstr "E443: Հնարավոր չէ տեղափոխել քանի դեռ մեկ այլ պատուհան բաժանված է" - -msgid "E444: Cannot close last window" -msgstr "E444: Հնարավոր չէ փակել պատուհանը" - -msgid "E445: Other window contains changes" -msgstr "E445: Մեկ այլ պատուհանում կան փոփոխություններ" - -msgid "E446: No file name under cursor" -msgstr "E446: Կուրսորի դիրքում չկա ֆայլի անուն" - -#, c-format -msgid "E447: Can't find file \"%s\" in path" -msgstr "E447: \"%s\" ֆայլը չի գտնվել" - -#, c-format -msgid "E448: Could not load library function %s" -msgstr "E448: Հնարավոր չէ բեռնել %s գրադարանային ֆունկցիան" - -msgid "E449: Invalid expression received" -msgstr "E449: Ստացվել է անվավեր արտահայտություն" - -msgid "E450: Buffer number, text or a list required" -msgstr "E450: Բուֆերի համար, տեքստ կամ ցանկ է անհրաժեշտ" - -#, c-format -msgid "E451: Expected }: %s" -msgstr "E451: Սպասվում է }: %s" - -msgid "E452: Double ; in list of variables" -msgstr "E452: Կրկնակի ՝;՝ փոփոխականների ցանկում" - -msgid "E453: UL color unknown" -msgstr "E453: Տողի անծանոթ գույն" - -msgid "E454: Function list was modified" -msgstr "E454: Ֆունկցիաների ցանկը փոփոխվել է" - -msgid "E455: Error writing to PostScript output file" -msgstr "E455: Գրելու սխալ PostScript֊ի ելքում" - -#, c-format -msgid "E456: Can't open file \"%s\"" -msgstr "E456: Հնարավոր չէ բացել \"%s\" ֆայլը" - -#, c-format -msgid "E456: Can't find PostScript resource file \"%s.ps\"" -msgstr "E456: PostScript֊ի \"%s.ps\" ռեսուրսային ֆայլը չի գտնվել" - -#, c-format -msgid "E457: Can't read PostScript resource file \"%s\"" -msgstr "E457: Հնարավոր չէ կարդալ \"%s\" PostScript֊ի ռեսուրս ֆայլը" - -msgid "E458: Cannot allocate colormap entry, some colors may be incorrect" -msgstr "" -"E458: Հնարավոր չէ ստեղծել colormap տիպի էլեմենտ, որոշ գույներ հնարավոր է " -"սխալ լինեն" - -msgid "E459: Cannot go back to previous directory" -msgstr "E459: Հնարավոր չէ վերադառնալ նախկին թղթապանակ" - -msgid "E460: Entries missing in mapset() dict argument" -msgstr "E460: Mapset()-ում բացակայում են գրառումները dict արգումենտում" - -#, c-format -msgid "E461: Illegal variable name: %s" -msgstr "E461: Չթույլատրված արժեք: %s" - -#, c-format -msgid "E462: Could not prepare for reloading \"%s\"" -msgstr "E462: Հնարավոր չէ պատրաստել \"%s\" վերաբեռնելու համար" - -msgid "E463: Region is guarded, cannot modify" -msgstr "E463: Ռեգիոնը պահպանվում է, հնարավոր չէ փոփոխել" - -msgid "E464: Ambiguous use of user-defined command" -msgstr "E464: Օգտատիրոջ սահմանած հրամաի սխալ օգտագործում" - -#, c-format -msgid "E464: Ambiguous use of user-defined command: %s" -msgstr "E464: Օգտատիրոջ սահմանած հրամանի սխալ օգտագործում։ %s" - -msgid "E465: :winsize requires two number arguments" -msgstr "E465: :winsize հրամանը պահանջում է արգումենտ" - -msgid "E466: :winpos requires two number arguments" -msgstr "E466: :winpos հրամանը պահանջում է երկու թվային արգումենտներ" - -msgid "E467: Custom completion requires a function argument" -msgstr "E467: սահմանած ավտոլրացումը պահանջում է ֆունկցիայի արգումենտ" - -msgid "E468: Completion argument only allowed for custom completion" -msgstr "" -"E468: Ավտոլրացման արգումեն թույլատրվում է միայն սհամանված ավտոլրացումների " -"համար" - -#, c-format -msgid "E469: Invalid cscopequickfix flag %c for %c" -msgstr "E469: Անվավեր cscopequickfix %c դրոշմանիշ %c-ի համար" - -msgid "E470: Command aborted" -msgstr "E470: Հրամանը ընդհատված է" - -msgid "E471: Argument required" -msgstr "E471: Անհրաժեշտ է արգումենտ" - -msgid "E472: Command failed" -msgstr "E472: Հրամանը ձախողվել է" - -msgid "E474: Invalid argument" -msgstr "E474: Անվավեր պարամետր" - -#, c-format -msgid "E475: Invalid argument: %s" -msgstr "E475: Անվավեր պարամետր: %s" - -#, c-format -msgid "E475: Invalid value for argument %s" -msgstr "E475: Անվավեր պարամետրի արժեք: %s" - -#, c-format -msgid "E475: Invalid value for argument %s: %s" -msgstr "E475: Անվավեր պարամետրի արժեք: %s: %s" - -msgid "E476: Invalid command" -msgstr "E476: Անվավեր հրաման" - -#, c-format -msgid "E476: Invalid command: %s" -msgstr "E476: Անվավեր հրաման։ %s" - -#, c-format -msgid "E476: Invalid command: %s, expected %s" -msgstr "E476: Անվավեր հրաման։ %s: սպասվում է %s" - -msgid "E477: No ! allowed" -msgstr "E477: !-ը թույլատրված չէ" - -msgid "E478: Don't panic!" -msgstr "E478: Մի անհանգստացեք, ամեն ինչ լավ է :)!" - -msgid "E479: No match" -msgstr "E479: Համընկնում չկա" - -#, c-format -msgid "E480: No match: %s" -msgstr "E480: Համընկնում չկա: %s" - -msgid "E481: No range allowed" -msgstr "E481: Չթույլատրված միջակայք" - -#, c-format -msgid "E482: Can't create file %s" -msgstr "E482: Հնարավոր չէ ստեղծել %s ֆայլը" - -msgid "E483: Can't get temp file name" -msgstr "E483: Հնարավոր չէ ստանալ ժամանակավոր ֆայլի անունը" - -#, c-format -msgid "E484: Can't open file %s" -msgstr "E484: Հնարավոր չէ բացել %s ֆայլը" - -#, c-format -msgid "E485: Can't read file %s" -msgstr "E485: Հնարավոր չէ կարդալ %s ֆայլը" - -msgid "E486: Pattern not found" -msgstr "E486: Նմուշը չի հայտնաբերվել" - -#, c-format -msgid "E486: Pattern not found: %s" -msgstr "E486: Նմուշը չի հայտնաբերվել: %s" - -msgid "E487: Argument must be positive" -msgstr "E487: Արգումենտը պետք է լինի դրականա ամբողջաթիվ" - -#, c-format -msgid "E487: Argument must be positive: %s" -msgstr "E487: Արգումենտը պետք է լինի դրական ամբողջաթիվ։ %s" - -msgid "E488: Trailing characters" -msgstr "E488: Ավելորդ նշաններ" - -#, c-format -msgid "E488: Trailing characters: %s" -msgstr "E488: Ավելորդ նշաններ։ %s" - -#| msgid "E498: No :source file name to substitute for \"\"" -msgid "E489: No call stack to substitute for \"\"" -msgstr "E489: Կանչերի կույտ չկա \"\"-ի համար" - -msgid "E490: No fold found" -msgstr "E490: Փաթաթը չի հայտնաբերվել" - -#| msgid "E1002: Syntax error at %s" -msgid "E491: JSON decode error at '%s'" -msgstr "E491: JSON վերծանման սխալ '%s'-ում" - -msgid "E492: Not an editor command" -msgstr "E492: Անծանոթ հրաման" - -msgid "E493: Backwards range given" -msgstr "E493: Տրված է հակադարձ միջակայք" - -msgid "E494: Use w or w>>" -msgstr "E494: Օգտագործել w կամ w>>" - -msgid "E495: No autocommand file name to substitute for \"\"" -msgstr "E495: փոխարինման համար չկա ֆայլի անունով ինքնահրաման \"\"" - -msgid "E496: No autocommand buffer number to substitute for \"\"" -msgstr "E496: փոխարինման համար չկա բուֆերի անունով ինքնահրաման \"\"" - -msgid "E497: No autocommand match name to substitute for \"\"" -msgstr "E497: փոխարինման համար չկա համընկնման անունով ինքնահրաման \"\"" - -msgid "E498: No :source file name to substitute for \"\"" -msgstr "" -"E498: փոխարինման համար չկա :source ֆայլի անունով ինքնահրաման \"\"" - -#, no-c-format -msgid "E499: Empty file name for '%' or '#', only works with \":p:h\"" -msgstr "E499: '%' կամ '#' ֆայլի դատարկ անուն, աշխատում է միայն \":p:h\"-ով:" - -msgid "E500: Evaluates to an empty string" -msgstr "E500: Արտահայտոթյան արժեքը դատարկ տող է" - -msgid "E501: At end-of-file" -msgstr "E501: Ֆայլի վերջում" - -msgid "is not a file or writable device" -msgstr "ֆայլ չէ կամ գրելի սարք" - -#, c-format -msgid "E503: \"%s\" is not a file or writable device" -msgstr "E503: \"%s\" ֆայլ չէ կամ գրելի սարք" - -#| msgid "E775: Eval feature not available" -msgid "E503: Coffee is currently not available" -msgstr "E503: Սուրճը ներկայումս հասանելի չէ" - -msgid "is read-only (cannot override: \"W\" in 'cpoptions')" -msgstr "միայն ընթերցելի է (\"W\" in 'cpoptions')" - -msgid "is read-only (add ! to override)" -msgstr "միայն ընթերցելի է (ամրագրելու համար ավելացրեք !)" - -#, c-format -msgid "E505: \"%s\" is read-only (add ! to override)" -msgstr "E505: \"%s\" միայն կարդալու համար է (ավելացնել !)" - -msgid "E506: Can't write to backup file (add ! to override)" -msgstr "" -"E506: Հնարավոր չէ ամրագրել պահպանման ֆայլում (ամրագրելու համար ավելացրեք !)" - -msgid "E507: Close error for backup file (add ! to write anyway)" -msgstr "E507: Պահպանման ֆայլի փակման սխալ (ամրագրելու համար ավելացրեք !)" - -msgid "E508: Can't read file for backup (add ! to write anyway)" -msgstr "" -"E508: Հնարավոր չէ պահպանման համար կարդալ ֆայլը (ամրագրելու համար ավելացրեք !)" - -msgid "E509: Cannot create backup file (add ! to override)" -msgstr "" -"E509: Հնարավոր չէ ստեղծել պահպանման ֆայլը (ամրագրելու համար ավելացրեք !)" - -msgid "E510: Can't make backup file (add ! to write anyway)" -msgstr "" -"E510: Հնարավոր չէ ստեղծել պահպանման ֆայլ (ամրագրելու համար ավելացրեք !)" - -msgid "E511: NetBeans already connected" -msgstr "E511: NetBeans-ն արդեն կապակցված է" - -msgid "E512: Close failed" -msgstr "E512: Փակումն անհաջող է ավարտվել" - -msgid "E513: Write error, conversion failed (make 'fenc' empty to override)" -msgstr "E513: Գրելու սխալ, փոխակերպումն անհաջող է ավարտվել (մաքրել 'fenc'-ը)" - -#, c-format -msgid "" -"E513: Write error, conversion failed in line %ld (make 'fenc' empty to " -"override)" -msgstr "" -"E513: Գրելու սխալ, փոխակերպումն անհաջող է ավարտվել %ld տողում (մաքրել 'fenc'-" -"ը)" - -msgid "E514: Write error (file system full?)" -msgstr "E514: Ամրագրման սխալ (ֆայլերի համակարգում գրելու տեղ չի՞ մնացել)" - -msgid "E515: No buffers were unloaded" -msgstr "E515: Ոչ մի բուֆեր չի բեռնաթափվել" - -msgid "E516: No buffers were deleted" -msgstr "E516: Ոչ մի բուֆեր չի ջնջվել" - -msgid "E517: No buffers were wiped out" -msgstr "E517: Ոչ մի բուֆեր չի մաքրվել" - -msgid "E518: Unknown option" -msgstr "E518: Անծանոթ կարգանշան" - -msgid "E519: Option not supported" -msgstr "E519: Կարգանշումը չի աջակցվում" - -msgid "E520: Not allowed in a modeline" -msgstr "E520: Չի թույլատրվում տողային ռեժիմում" - -msgid "E521: Number required after =" -msgstr "E521: =֊ից հետո անհրաժեշտ է թիվ" - -#, c-format -msgid "E521: Number required: &%s = '%s'" -msgstr "E521: Պահանջվում է թիվ: &%s = '%s'" - -msgid "E522: Not found in termcap" -msgstr "E522: termcap֊ում չի հայտնաբերվել" - -msgid "E523: Not allowed here" -msgstr "E523: Այստեղ չի թույլատրվում" - -msgid "E524: Missing colon" -msgstr "E524: Բացակայող վերջակետ" - -msgid "E525: Zero length string" -msgstr "E525: Դատարկ տող" - -#, c-format -msgid "E526: Missing number after <%s>" -msgstr "E526: Բացակայող թիվ՝ <%s>֊ից հետո" - -msgid "E527: Missing comma" -msgstr "E527: Բացակայող ստորակետ" - -msgid "E528: Must specify a ' value" -msgstr "E528: Անհրաժեշտ է '-ի համար տալ արժեք" - -msgid "E529: Cannot set 'term' to empty string" -msgstr "E529: Հնարավոր չէ 'term'-ին վերագրել դատարկ արժեք" - -msgid "E530: Cannot change 'term' in the GUI" -msgstr "E530: Գրաֆիկական ռեժիմում հնարավոր չէ փոխել տերմինալը" - -msgid "E531: Use \":gui\" to start the GUI" -msgstr "E531: Գրաֆիկական ինտերֆեյսին անցնելու համար կատարել \":gui\" հրամանը" - -#| msgid "E1249: Highlight group name too long" -msgid "E532: Highlighting color name too long in defineAnnoType" -msgstr "E532: Գունանշման անվան չափազանց երկար ընդգծում defineAnnoType-ում" - -msgid "E533: Can't select wide font" -msgstr "E533: Հնարավոր չէ նշել տառատեսակը" - -msgid "E534: Invalid wide font" -msgstr "E534: Անվավեր երկարությամբ տառատեսակ" - -#, c-format -msgid "E535: Illegal character after <%c>" -msgstr "E535: Սխալ նշան <%c>֊ից հետո" - -msgid "E536: Comma required" -msgstr "E536: Անհրաժեշտ է ստորակետ" - -#, c-format -msgid "E537: 'commentstring' must be empty or contain %s" -msgstr "E537: 'commentstring'֊ը պետք լինի դատարկ կամ պարունակի %s" - -#, c-format -msgid "E538: Pattern found in every line: %s" -msgstr "E538: Ամեն տողում նմուշ է հայտնաբերվել: %s" - -#, c-format -msgid "E539: Illegal character <%s>" -msgstr "E539: Չթույլատրված նշան <%s>" - -msgid "E540: Unclosed expression sequence" -msgstr "E540: Չփակված արտահայտությունների հաջորդականություն" - -msgid "E542: Unbalanced groups" -msgstr "E542: Չբալանսավորված խմբեր" - -msgid "E543: Not a valid codepage" -msgstr "E543: Չթույլատրված կոդավորման անուն" - -msgid "E544: Keymap file not found" -msgstr "E544: Բանալիային համապատասխանեցման ֆայլը չի հայտնաբերվել" - -msgid "E545: Missing colon" -msgstr "E545: Բացակայող վերջակետ" - -msgid "E546: Illegal mode" -msgstr "E546: Անծանոթ ռեժիմ" - -msgid "E547: Illegal mouseshape" -msgstr "E547: Կուրսորի անծանոթ տեսք" - -msgid "E548: Digit expected" -msgstr "E548: Սպասվում է թիվ" - -msgid "E549: Illegal percentage" -msgstr "E549: Տոկոսի անսպասելի արժեք" - -msgid "E550: Missing colon" -msgstr "E550: Բացակայող չակերտ" - -msgid "E551: Illegal component" -msgstr "E551: Սխալ բաղադրիչ" - -msgid "E552: Digit expected" -msgstr "E552: Սպասվում է թիվ" - -msgid "E553: No more items" -msgstr "E553: Այլևս էլեմենտներ չկան" - -#, c-format -msgid "E554: Syntax error in %s{...}" -msgstr "E554: Ուղղագրական սխալ %s{...}֊ում" - -msgid "E555: At bottom of tag stack" -msgstr "E555: Պիտակների ստեկի ներքևում" - -msgid "E556: At top of tag stack" -msgstr "E556: Պիտակների ստեկի վերևում" - -msgid "E557: Cannot open termcap file" -msgstr "E557: Անհնար է բացել termcap ֆայլը" - -msgid "E558: Terminal entry not found in terminfo" -msgstr "E558: Տերմինալի էլեմենտը չի հայտնաբերվել terminfo֊ում" - -msgid "E559: Terminal entry not found in termcap" -msgstr "E559: Տերմինալի էլեմենտը չի հայտնաբերվել termcap֊ում" - -#, c-format -msgid "E560: Usage: cs[cope] %s" -msgstr "E560: Օգտագործում: cs[cope] %s" - -msgid "E561: Unknown cscope search type" -msgstr "E561: Անծանոթ cscope֊ի որոնման տիպ" - -msgid "E562: Usage: cstag " -msgstr "E562: Օգտագործում: cstag <անուն>" - -#, c-format -msgid "E563: stat(%s) error: %d" -msgstr "E563: stat(%s) սխալ: %d" - -#, c-format -msgid "E564: %s is not a directory or a valid cscope database" -msgstr "E564: %s֊ը թղթապանակ կամ cscope֊ի տվյալների բազա չէ" - -#| msgid "E811: Not allowed to change buffer information now" -msgid "E565: Not allowed to change text or change window" -msgstr "E565: Չի թույլատրվում փոխել տեքստը կամ փոխել պատուհանը" - -msgid "E566: Could not create cscope pipes" -msgstr "E566: Հնարավոր չէ ստեղծել cscope֊ի սրնգակապերը" - -msgid "E567: No cscope connections" -msgstr "E567: cscope կապեր չկան" - -msgid "E568: Duplicate cscope database not added" -msgstr "E568: Գոյություն ունեցող cscope տվյալների բազան չի ավելացվել" - -msgid "" -"E571: Sorry, this command is disabled: the Tcl library could not be loaded." -msgstr "" -"E571: Ներողություն, այս հրամանն անջատված է․ Tcl գրադարանը չի կարող բեռնվել." - -#, c-format -msgid "E572: Exit code %d" -msgstr "E572: Ավարտման ստատուս %d" - -#, c-format -msgid "E573: Invalid server id used: %s" -msgstr "E573: Անվավեր սերվերի համար է օգտագործվել: %s" - -#, c-format -msgid "E574: Unknown register type %d" -msgstr "E574: Անծանոթ ռեգիստրի տիպ %d" - -msgid "Illegal starting char" -msgstr "Սխալ սկսելու տառ" - -msgid "Missing '>'" -msgstr "Բացակայող '>'" - -msgid "Illegal register name" -msgstr "Անծանոթ ռեգիստրի անուն" - -msgid "E579: :if nesting too deep" -msgstr "E579: :if֊ը շատ է ներդրված" - -msgid "E579: Block nesting too deep" -msgstr "E579: Բլոկը շատ է ներդրված" - -msgid "E580: :endif without :if" -msgstr "E580: :endif առանց :if" - -msgid "E581: :else without :if" -msgstr "E581: :else առանց :if" - -msgid "E582: :elseif without :if" -msgstr "E582: :elseif առանց :if" - -msgid "E583: Multiple :else" -msgstr "E583: Բազմակի :else" - -msgid "E584: :elseif after :else" -msgstr "E584: :elseif :else֊ից հետո" - -msgid "E585: :while/:for nesting too deep" -msgstr "E585: :while/:for֊ը շատ է ներդրված" - -msgid "E586: :continue without :while or :for" -msgstr "E586: :continue առանց :while կամ :for" - -msgid "E587: :break without :while or :for" -msgstr "E587: :break առանց :while կամ :for" - -msgid "E588: :endwhile without :while" -msgstr "E588: :endwhile հրամանը տրված է առանց :while հրամանի" - -msgid "E588: :endfor without :for" -msgstr "E588: :endfor առանց :for հրամանի" - -msgid "E589: 'backupext' and 'patchmode' are equal" -msgstr "E589: 'backupext'֊ը և 'patchmode'֊ը համարժեք են" - -msgid "E590: A preview window already exists" -msgstr "E590: Նախադիտման պատուհանն արդեն բացված է" - -msgid "E591: 'winheight' cannot be smaller than 'winminheight'" -msgstr "" -"E591: 'winheight'-ի արժեքը չի կարող լինել ավելի փոքր քան 'winminheight'-ի " -"արժեքը" - -msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'" -msgstr "" -"E592: 'winwidth'-ի արժեքը չի կարող լինել ավելի փոքր քան 'winminwidth'-ի " -"արժեքը" - -#, c-format -msgid "E593: Need at least %d lines" -msgstr "E593: Անհրաժեշտ են գոնե %d տողեր" - -#, c-format -msgid "E594: Need at least %d columns" -msgstr "E594: Անհրաժեշտ են գոնե %d սյուններ" - -msgid "E595: 'showbreak' contains unprintable or wide character" -msgstr "E595: 'showbreak'-ը պարունակում է չտպագրվող կամ երկար տառեր" - -msgid "E596: Invalid font(s)" -msgstr "E596: Անվավեր տառատեսակներ" - -msgid "E597: Can't select fontset" -msgstr "E597: Հնարավոր չէ նշել տառատեսակների խումբը" - -msgid "E598: Invalid fontset" -msgstr "E598: Անվավեր տառատեսակների խումբ" - -msgid "E599: Value of 'imactivatekey' is invalid" -msgstr "E599: 'imactivatekey'-ի արժեքն անվավեր է" - -msgid "E600: Missing :endtry" -msgstr "E600: Հրամանը բացակայում է :endtry" - -msgid "E601: :try nesting too deep" -msgstr "E601: :try֊ը շատ է ներդրված" - -msgid "E602: :endtry without :try" -msgstr "E602: :endtry առանց :try" - -msgid "E603: :catch without :try" -msgstr "E603: :catch առանց :try" - -msgid "E604: :catch after :finally" -msgstr "E604: :catch առանց :finally" - -#, c-format -msgid "E605: Exception not caught: %s" -msgstr "E605: Բացառման հրամանը չի բռնվել: %s" - -msgid "E606: :finally without :try" -msgstr "E606: :finally առանց :try" - -msgid "E607: Multiple :finally" -msgstr "E607: Բազմակի :finally" - -msgid "E608: Cannot :throw exceptions with 'Vim' prefix" -msgstr "E608: Անհնար է նետել :throw 'Vim' նախածանցով" - -#, c-format -msgid "E609: Cscope error: %s" -msgstr "E609: Cscope սխալ: %s" - -#| msgid "E1005: Too many argument types" -msgid "E610: No argument to delete" -msgstr "E610: Ջնջելու արգումենտ չկա" - -#| msgid "E1320: Using an Object as a Number" -msgid "E611: Using a Special as a Number" -msgstr "E611: Հատուկ համարի օգտագործումը" - -msgid "E612: Too many signs defined" -msgstr "E612: Սահմանվել են աննախադեպ շատ նշաններ" - -#, c-format -msgid "E613: Unknown printer font: %s" -msgstr "E613: Անծանոթ տպագրման տառատեսակ %s" - -#| msgid "E1210: Number required for argument %d" -msgid "E616: Object required for argument %d" -msgstr "E616: %d արգումենտի համար անհրաժեշտ է օբյեկտ" - -msgid "E617: Cannot be changed in the GTK GUI" -msgstr "E617: Չի կարող փոփոխվել GTK+ 2 գրաֆիկական ինտերֆեյսում" - -#, c-format -msgid "E618: File \"%s\" is not a PostScript resource file" -msgstr "E618: \"%s\" ֆայլը PostScript-ի ռեսուրս ֆայլ չի" - -#, c-format -msgid "E619: File \"%s\" is not a supported PostScript resource file" -msgstr "E619: \"%s\" ֆայլը PostScript֊ի աջակցող ռեսուրս ֆայլ չի" - -#, c-format -msgid "E620: Unable to convert to print encoding \"%s\"" -msgstr "E620: Հնարավոր չէ \"%s\"֊ը փթխակերպերլ պատճենման կոդավորման" - -#, c-format -msgid "E621: \"%s\" resource file has wrong version" -msgstr "E621: \"%s\" ռեսուրս ֆայլն ունի սխալ տարբերակ" - -msgid "E622: Could not fork for cscope" -msgstr "E622: Հնարավոր չէ եղանել cscope֊ի համար" - -msgid "E623: Could not spawn cscope process" -msgstr "E623: Հնարավոր չի ազատել cscope պրոցեսը" - -#, c-format -msgid "E624: Can't open file \"%s\"" -msgstr "E624: Հնարավոր չէ բացել ֆայլը \"%s\"" - -#, c-format -msgid "E625: Cannot open cscope database: %s" -msgstr "E625: Անհնար է բացել cscope տվյալների բազան: %s" - -msgid "E626: Cannot get cscope database information" -msgstr "E626: Անհնար է ստանալ cscope տվյալների բազայի մասին տեղեկատվություն" - -#, c-format -msgid "E627: Missing colon: %s" -msgstr "E627: Բացակայող վերջակետ։ %s" - -#, c-format -msgid "E628: Missing ! or / in: %s" -msgstr "E628: Բաց թողնված ! կամ /: %s" - -#| msgid "E631: %s(): Write failed" -msgid "E630: %s(): Write while not connected" -msgstr "E630: %s(): Գրեք, քանի դեռ միացված չեք" - -#, c-format -msgid "E631: %s(): Write failed" -msgstr "E631: %s(): թարմացման անհաջող փորձ" - -#| msgid "E652: Invalid buffer identifier in getAnno" -msgid "E632: Invalid buffer identifier in getLength" -msgstr "E632: Անվավեր բուֆերի նույնացուցիչ getLength-ում" - -#| msgid "E639: Invalid buffer identifier in setTitle" -msgid "E633: Invalid buffer identifier in getText" -msgstr "E633: Անվավեր բուֆերի նույնացուցիչ getText-ում" - -msgid "E634: Invalid buffer identifier in remove" -msgstr "E634: Անվավեր հեռացվող բուֆերի անուն" - -msgid "E635: Invalid buffer identifier in insert" -msgstr "E635: Անվավեր ավելացվող բուֆերի անուն" - -msgid "E636: Invalid buffer identifier in create" -msgstr "E636: Անվավեր ստեղծվող բուֆերի անուն" - -#| msgid "E639: Invalid buffer identifier in setTitle" -msgid "E637: Invalid buffer identifier in startDocumentListen" -msgstr "E637: Բուֆերի անվավեր նույնացուցիչ startDocumentListen-ում" - -#| msgid "E639: Invalid buffer identifier in setTitle" -msgid "E638: Invalid buffer identifier in stopDocumentListen" -msgstr "E638: Անվավեր բուֆերի նույնացուցիչ stopDocumentListen-ում" - -msgid "E639: Invalid buffer identifier in setTitle" -msgstr "E639: Անվավեր բուֆերի անուն setTitle-ում" - -#| msgid "E647: Invalid buffer identifier in setDot" -msgid "E640: Invalid buffer identifier in initDone" -msgstr "E640: initDone-ում բուֆերի անվավեր նույնացուցիչ" - -#| msgid "E645: Invalid buffer identifier in setVisible" -msgid "E641: Invalid buffer identifier in setBufferNumber" -msgstr "E641: բուֆերի անվավեր նույնացուցիչ setBufferNumber-ում" - -#, c-format -msgid "E642: File %s not found in setBufferNumber" -msgstr "E642: %s ֆայլը չի գտնվել setBufferNumber-ում" - -#| msgid "E639: Invalid buffer identifier in setTitle" -msgid "E643: Invalid buffer identifier in setFullName" -msgstr "E643: բուֆերի անվավեր նույնացուցիչ setFullName-ում" - -#| msgid "E645: Invalid buffer identifier in setVisible" -msgid "E644: Invalid buffer identifier in editFile" -msgstr "E644: editFile-ում բուֆերի անվավեր նույնացուցիչ" - -msgid "E645: Invalid buffer identifier in setVisible" -msgstr "E645: Անվավեր բուֆերի անուն setVisible-ում" - -#| msgid "E645: Invalid buffer identifier in setVisible" -msgid "E646: Invalid buffer identifier in setModified" -msgstr "E646: Բուֆերի անվավեր նույնացուցիչ setModified-ում" - -msgid "E647: Invalid buffer identifier in setDot" -msgstr "E647: Անվավեր բուֆերի անուն setDot-ում" - -msgid "E648: Invalid buffer identifier in close" -msgstr "E648: Անվավեր բուֆերի անուն close-ում" - -#| msgid "E651: Invalid buffer identifier in addAnno" -msgid "E650: Invalid buffer identifier in defineAnnoType" -msgstr "E650: Անվավեր բուֆերի նույնացուցիչ defineAnnoType-ում" - -msgid "E651: Invalid buffer identifier in addAnno" -msgstr "E651: Անվավեր բուֆերի անուն addAnno-ում" - -msgid "E652: Invalid buffer identifier in getAnno" -msgstr "E652: Անվավեր բուֆերի անուն getAnno-ում" - -#, c-format -msgid "E654: Missing delimiter after search pattern: %s" -msgstr "E654: Բացակայող բացատանիշ %s-ից հետո" - -msgid "E655: Too many symbolic links (cycle?)" -msgstr "E655: Աննախադեպ շատ խորհրդանշական հղումներ (ցի՞կլ)" - -msgid "NetBeans disallows writes of unmodified buffers" -msgstr "NetBeans֊ը չի թույլատրում գրել չփոփոխված բուֆերում" - -msgid "Partial writes disallowed for NetBeans buffers" -msgstr "Մասնակի արտագրումը չի թույլատրում NetBeans բուֆերների համար" - -#, c-format -msgid "E658: NetBeans connection lost for buffer %d" -msgstr "E658: NetBeans կապակցումն անհետացել է %d բուֆերի համար" - -msgid "E659: Cannot invoke Python recursively" -msgstr "E659: Հնարավոր չէ ռեկուրսիվ կանչել Python֊ը" - -#, c-format -msgid "E661: Sorry, no '%s' help for %s" -msgstr "E661: Ներողություն, '%s' օգնության էջը չկա %s֊համար" - -msgid "E662: At start of changelist" -msgstr "E662: Փոփոխուոթյունների ցանկի սկիզբը" - -msgid "E663: At end of changelist" -msgstr "E663: Փոփոխուոթյունների ցանկի վերջը" - -msgid "E664: Changelist is empty" -msgstr "E664: Փոփոխությունների ցանկը դատարկ է" - -msgid "E665: Cannot start GUI, no valid font found" -msgstr "" -"E665: Հնարավոր չէ սկսել գրաֆիկական ինտերֆեյսը, համապատասխան տառատեսակ չի " -"հայտնաբերվել" - -#, c-format -msgid "E666: Compiler not supported: %s" -msgstr "E666: Կազմարարը չի աջակցվում: %s" - -msgid "E667: Fsync failed" -msgstr "E667: Fsync-ն անհաջող է ավարտվել" - -#, c-format -msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\"" -msgstr "E668: NetBeans կապակցման տեղեկատվական ֆայլի սխալ ռեժիմ: \"%s\"" - -msgid "E669: Unprintable character in group name" -msgstr "E669: Չտպագրելի նշան՝ խմբի անվան մեջ" - -#, c-format -msgid "E670: Mix of help file encodings within a language: %s" -msgstr "" -"E670: Օգնական ֆայլը օգտագործում է տարբեր կոդավորումներ մի լեզվի համար: %s" - -#, c-format -msgid "E671: Cannot find window title \"%s\"" -msgstr "E671: Պատուհանի անունը չի գտնվել \"%s\"" - -msgid "E672: Unable to open window inside MDI application" -msgstr "E672: Հնարավոր չէ բացել պատուհանը MDI ծրագրում" - -msgid "E673: Incompatible multi-byte encoding and character set" -msgstr "E673: Անհամապատասխան բազմաբայթ կոդավորում և տառատեսակների բազմություն" - -msgid "E674: printmbcharset cannot be empty with multi-byte encoding." -msgstr "E674: printmbcharset֊ը չի կարող դատարկ լինել բազմաբայթ կոդավորման հետ." - -msgid "E675: No default font specified for multi-byte printing." -msgstr "" -"E675: բազմաբայթ կոդավորման հետ տրված չէ լռելիությամբ սահմանված տառատեսակը." - -#| msgid "No matching autocommands: %s" -msgid "E676: No matching autocommands for buftype=%s buffer" -msgstr "E676: Buftype=%s բուֆերի համար համապատասխան ավտոմատ հրամաններ չկան" - -msgid "E677: Error writing temp file" -msgstr "E677: Սխալ է տեղի ունեցել ժամանակավոր ֆայլում գրելու ընթացքում" - -#, c-format -msgid "E678: Invalid character after %s%%[dxouU]" -msgstr "E678: Անվավեր նշան՝ %s%%[dxouU]-ից հետո" - -msgid "E679: Recursive loop loading syncolor.vim" -msgstr "E679: Ռեկուրսիվ շրջակցային բեռնում syncolor.vim" - -#, c-format -msgid "E680: : invalid buffer number" -msgstr "E680: : անվավեր բուֆերի համար" - -msgid "E681: Buffer is not loaded" -msgstr "E681: Բուֆերը չի բեռնվել" - -msgid "E682: Invalid search pattern or delimiter" -msgstr "E682: Անվավեր որոնման նմուշ կամ բացատանիշ" - -msgid "E683: File name missing or invalid pattern" -msgstr "E683: Ֆայլի անունը տրված չէ կամ տրված է անվավեր նմուշ" - -#, c-format -msgid "E684: List index out of range: %ld" -msgstr "E684: Ցանկի ինդեքսն անցել է թույլատրելի միջակայքը: %ld" - -#, c-format -msgid "E685: Internal error: %s" -msgstr "E685: Ներքին համակարգային սխալ: %s" - -#, c-format -msgid "E686: Argument of %s must be a List" -msgstr "E686: %s պարամետրը պետք է լինի ցանկ" - -msgid "E687: Less targets than List items" -msgstr "E687: Ավելի քիչ նշաններ քան ցանկի էլեմենտները" - -msgid "E688: More targets than List items" -msgstr "E688: Ավելի շատ նշաններ քան ցանկի էլեմենտները" - -#| msgid "E790: undojoin is not allowed after undo" -msgid "E689: Index not allowed after a %s: %s" -msgstr "E689: ցուցիչը չի թույլատրվում %s-ից հետո՝ %s" - -msgid "E690: Missing \"in\" after :for" -msgstr "E690: Բացկայող \"in\":for֊ից հետո" - -msgid "E691: Can only compare List with List" -msgstr "E691: Ցանկը պետք է համեմատել միայն ցանկի հետ" - -msgid "E692: Invalid operation for List" -msgstr "E692: Ցանկի հետ չթույլատրված գործողություն" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E693: Class or class typealias required for argument %d" -msgstr "E693: %d արգումենտի համար պահանջվում են դասի կամ դասի տիպեր" - -msgid "E694: Invalid operation for Funcrefs" -msgstr "E694: Ֆունկցիայի հղման հետ չթույլատրված գործողություն" - -msgid "E695: Cannot index a Funcref" -msgstr "E695: Անհնար է Ինդեքսավորել ֆունկցիայի հղումը" - -#, c-format -msgid "E696: Missing comma in List: %s" -msgstr "E696: Ցանկում բաց թողնված ստորակետ: %s" - -#, c-format -msgid "E697: Missing end of List ']': %s" -msgstr "E697: Բացակայող ']'ցանկի վերջում: %s" - -msgid "E698: Variable nested too deep for making a copy" -msgstr "E698: Փոփոխականը շատ խորն է ներդրված պատճենելու համար" - -msgid "E699: Too many arguments" -msgstr "E699: Աննախադեպ շատ արգումենտներ" - -#, c-format -msgid "E700: Unknown function: %s" -msgstr "E700: Անծանոթ ֆունկցիա: %s" - -msgid "E701: Invalid type for len()" -msgstr "E701: Անվավեր տիպ len() ֆունկցիայի համար" - -msgid "E702: Sort compare function failed" -msgstr "E702: Անհաջող համեմատում դասավորման կանչի համար" - -msgid "E703: Using a Funcref as a Number" -msgstr "E703: ֆունկցիայի հղում է օգտագործվել ամբողջի փոխարեն" - -#, c-format -msgid "E704: Funcref variable name must start with a capital: %s" -msgstr "E704: Funcref փոփոխականը պետք է սկսվի մեծատառով: %s" - -#, c-format -msgid "E705: Variable name conflicts with existing function: %s" -msgstr "E705: Փոփոխականի անունով ֆունկցիա արդեն գոյություն ունի: %s" - -#, c-format -msgid "E706: Argument of %s must be a List, String or Dictionary" -msgstr "E706: %s-ի արգումենտը պետք է լինի ցանկ, տող կամ բառարան" - -#, c-format -msgid "E707: Function name conflicts with variable: %s" -msgstr "E707: Ֆունկցիայի անունը համընկնում է փոփոխականի անվան հետ: %s" - -msgid "E708: [:] must come last" -msgstr "E708: [:] պետք է լինի վերջում" - -msgid "E709: [:] requires a List or Blob value" -msgstr "E709: [:] պահանջում է ցանկ կամ բլոբ արժեք" - -msgid "E710: List value has more items than targets" -msgstr "E710: Ցանկի արժեքներն ունեն ավելի շատ էլեմենտներ քան նշաններ" - -msgid "E711: List value does not have enough items" -msgstr "E711: Ցանկի արժեքը չունի բավականաչափ էլեմենտներ" - -#, c-format -msgid "E712: Argument of %s must be a List or Dictionary" -msgstr "E712: %s֊ի արգումենտ պետք է լինի ցանկ կամ բառարան" - -msgid "E713: Cannot use empty key for Dictionary" -msgstr "E713: Անհնար է օգտագործել դատարակ բառարանի բանալի" - -msgid "E714: List required" -msgstr "E714: Ցանկ է անհրաժեշտ" - -msgid "E715: Dictionary required" -msgstr "E715: Բառարան է անհրաժեշտ" - -#, c-format -msgid "E716: Key not present in Dictionary: \"%s\"" -msgstr "E716: Բառարանում \"%s\" բանալին չի գտնվել" - -msgid "E717: Dictionary entry already exists" -msgstr "E717: Բառարանի էլեմենտն արդեն գոյություն ունի" - -msgid "E718: Funcref required" -msgstr "E718: Անհրաժեշտ է Funcref" - -#| msgid "E713: Cannot use empty key for Dictionary" -msgid "E719: Cannot slice a Dictionary" -msgstr "E719: Հնարավոր չէ կտրատել բառարանը" - -#, c-format -msgid "E720: Missing colon in Dictionary: %s" -msgstr "E720: Բառարանում բաց թողնված չակերտ: %s" - -#, c-format -msgid "E721: Duplicate key in Dictionary: \"%s\"" -msgstr "E721: Բառարանի բանալու կրկնություն: \"%s\"" - -#, c-format -msgid "E722: Missing comma in Dictionary: %s" -msgstr "E722: Բառարանում բաց թողնված ստորակետ %s" - -#, c-format -msgid "E723: Missing end of Dictionary '}': %s" -msgstr "E723: Բացակայող '}'ցանկի վերջում: %s" - -msgid "E724: Variable nested too deep for displaying" -msgstr "E724: Փոփոխականը շատ խորն է ներդրված ցուցադրման համար" - -#, c-format -msgid "E725: Calling dict function without Dictionary: %s" -msgstr "E725:dict ֆունկցիան կանչվել է առանց բառարանի: %s" - -msgid "E726: Stride is zero" -msgstr "E726: Քայլը զրո է" - -msgid "E727: Start past end" -msgstr "E727: Սկիզբ՝ վերջից հետո" - -msgid "E728: Using a Dictionary as a Number" -msgstr "E728: Բառարան է օգտագործվել ամբողջի փոխարեն" - -msgid "E729: Using a Funcref as a String" -msgstr "E729: Ֆունկցիայի հղում է օգտագործվել տողի փոխարեն" - -msgid "E730: Using a List as a String" -msgstr "E730: Ցանկ է օգտագործվել տողի փոխարեն" - -msgid "E731: Using a Dictionary as a String" -msgstr "E731: Բառարան է օգտագործվել տողի փոխարեն" - -msgid "E732: Using :endfor with :while" -msgstr "E732: :endfor :while֊ի հետ" - -msgid "E733: Using :endwhile with :for" -msgstr "E733: :endwhile :for֊ի հետ" - -#, c-format -msgid "E734: Wrong variable type for %s=" -msgstr "E734: Փոփոխականի սխալ տիպ %s=" - -msgid "E735: Can only compare Dictionary with Dictionary" -msgstr "E735: Բառարանը պետք է համեմատել միայն բառարանը հետ" - -msgid "E736: Invalid operation for Dictionary" -msgstr "E736: Բառարանի հետ չթույլատրված գործողություն" - -#, c-format -msgid "E737: Key already exists: %s" -msgstr "E737: Բանալին արդեն գոյություն ունի: %s" - -#, c-format -msgid "E738: Can't list variables for %s" -msgstr "E738: Հնարավոր չէ ցուցադրել %s֊ի փոփոխականնները" - -#, c-format -msgid "E739: Cannot create directory: %s" -msgstr "E739: Հնարավոր չէ ստեղծել թղթապանակ: %s" - -#, c-format -msgid "E740: Too many arguments for function %s" -msgstr "E740: %s֊ին տրված են աննախադեպ շատ Ֆունկցիայի արգումենտներ" - -msgid "E741: Value is locked" -msgstr "E741: Արժեքը բլոկավորված է" - -#, c-format -msgid "E741: Value is locked: %s" -msgstr "E741: %s արժեքը բլոկավորված է" - -msgid "E742: Cannot change value" -msgstr "E742: Անհնար է փոխել արժեքը" - -#, c-format -msgid "E742: Cannot change value of %s" -msgstr "E742: Անհնար է փոխել %s֊ի արժեքը" - -msgid "E743: Variable nested too deep for (un)lock" -msgstr "E743: Փոփոխականը շատ խորն է ներդրված բլոկավորման/ապաբլոկավորման համար" - -msgid "E744: NetBeans does not allow changes in read-only files" -msgstr "" -"E744: NetBeans֊ը չի թույլատրում փոփոխություններ միայն կարդալու ֆայլերում" - -msgid "E745: Using a List as a Number" -msgstr "E745: Ցանկ է օգտագործվել ամբողջի փոխարեն" - -#, c-format -msgid "E746: Function name does not match script file name: %s" -msgstr "E746: Ֆունկցիայի անունը չի համընկնում սկրիպտային ֆայլի անվան հետ: %s" - -msgid "E747: Cannot change directory, buffer is modified (add ! to override)" -msgstr "" -"E747: Հնարավոր չէ փոխել թղթապանակը, կա փոփոխված buffer (անցման համար " -"ավելցանել !)" - -msgid "E748: No previously used register" -msgstr "E748: Չկան նախկինում օգտագորխված ռեգիստրներ" - -msgid "E749: Empty buffer" -msgstr "E749: Դատարկ բուֆեր" - -msgid "E750: First use \":profile start {fname}\"" -msgstr "E750: Առաջին օգտագործում \":profile start {fname}\"" - -msgid "E751: Output file name must not have region name" -msgstr "E751: Ելքային ֆայլի անունը չպետք է պարունակի ռեգիոնի անուն" - -msgid "E752: No previous spell replacement" -msgstr "E752: Չկա նախկին ուղղագրման փոխարինում" - -#, c-format -msgid "E753: Not found: %s" -msgstr "E753: Չի հայտնաբերվել: %s" - -#, c-format -msgid "E754: Only up to %d regions supported" -msgstr "E754: Աջակցվում են մինչև %d ռեգիոններ" - -#, c-format -msgid "E755: Invalid region in %s" -msgstr "E755: Անվավեր ռեգիոն %s֊ում" - -msgid "E756: Spell checking is not possible" -msgstr "E756: Ուղղագրիչն անջատված է" - -msgid "E757: This does not look like a spell file" -msgstr "E757: Սա ուղղագրման ֆայլ չէ" - -msgid "E758: Truncated spell file" -msgstr "E758: Անավարտ ուղղագրման ֆայլ" - -msgid "E759: Format error in spell file" -msgstr "E759: Ֆորմատի սխալ՝ ուղղագրման ֆայլում" - -#, c-format -msgid "E760: No word count in %s" -msgstr "E760: %s-ում բառաքանակը տրված չէ" - -msgid "E761: Format error in affix file FOL, LOW or UPP" -msgstr "E761: Ֆորմատի սխալ FOL, LOW կամ UPP ֆայլերում" - -msgid "E762: Character in FOL, LOW or UPP is out of range" -msgstr "E762: FOL, LOW կամ UPP ֆայլերում տրված տառը դուրս է եկել դիապազոնցի" - -msgid "E763: Word characters differ between spell files" -msgstr "" -"E763: Տառերի քանակությունը չի համընկնում ուղղագրման ֆայլում սահմանված բառի " -"տառերի քանակությանը" - -#, c-format -msgid "E764: Option '%s' is not set" -msgstr "E764: '%s' կարգանշանը սահմանված չէ" - -#, c-format -msgid "E765: 'spellfile' does not have %d entries" -msgstr "E765: 'spellfile' չի պարունակում %d էլեմենտներ" - -msgid "E766: Insufficient arguments for printf()" -msgstr "E766: Անբավարար արգումենտնորի քանակ printf()-ի համար" - -msgid "E767: Too many arguments for printf()" -msgstr "E767: printf()-ին տրված են աննախադեպ շատ քանակությամբ արգումենտներ" - -#, c-format -msgid "E768: Swap file exists: %s (:silent! overrides)" -msgstr "" -"E768: սվեփ ֆայլը գոյություն ունի: %s (:silent! հարցերից խուսափելու համար)" - -#, c-format -msgid "E769: Missing ] after %s[" -msgstr "E769: Բացակայող ] после %s[" - -msgid "E770: Unsupported section in spell file" -msgstr "E770: Անծանոթ ենթագլուխ՝ ուղղագրման ֆայլում" - -msgid "E771: Old spell file, needs to be updated" -msgstr "E771: Ուղղագրման ֆայլը հին է, անհրաժեշտ է թարմացնել" - -msgid "E772: Spell file is for newer version of Vim" -msgstr "E772: Ուղղագրման ֆայլը նախատեսված է ավելի թարմ Vim-ի համար" - -#, c-format -msgid "E773: Symlink loop for \"%s\"" -msgstr "E773: Symlink-ի ինքնահղում \"%s\"" - -msgid "E774: 'operatorfunc' is empty" -msgstr "E774: 'operatorfunc'-ի արժեքը դատարկ է" - -msgid "E775: Eval feature not available" -msgstr "E775: Eval առանձնահատկությունը հասանելի չէ" - -msgid "E776: No location list" -msgstr "E776: Տեղակայման ցանկը բացակայում է" - -msgid "E777: String or List expected" -msgstr "E777: Սպասվում է ցանկ կամ տեղ" - -#, c-format -msgid "E778: This does not look like a .sug file: %s" -msgstr "E778: Նման չէ .sug ֆայլի: %s" - -#, c-format -msgid "E779: Old .sug file, needs to be updated: %s" -msgstr "E779: Հին .sug ֆայլ, անհրաժեշտ է թարմացում: %s" - -#, c-format -msgid "E780: .sug file is for newer version of Vim: %s" -msgstr "E780: .sug ֆայլը նախատեսված է ավելի թարմ Vim-ի համար: %s" - -#, c-format -msgid "E781: .sug file doesn't match .spl file: %s" -msgstr "E781: .sug ֆայլը չի համապատասխանում .spl: ֆայլի հետ %s" - -#, c-format -msgid "E782: Error while reading .sug file: %s" -msgstr "E782: .sug ֆայլի ընթերցման սխալ: %s" - -msgid "E783: Duplicate char in MAP entry" -msgstr "E783: Կրկնակի տառ MAP-ի էլեմենտում" - -msgid "E784: Cannot close last tab page" -msgstr "E784: Հնարավոր չէ փակել վերջին բացված թաբը" - -msgid "E785: complete() can only be used in Insert mode" -msgstr "E785: complete() կարող է օգտագործվել միայն զետեղման ռեժիմում" - -msgid "E786: Range not allowed" -msgstr "E786: Միջակայք թույլատրված չէ" - -msgid "E787: Buffer changed unexpectedly" -msgstr "E787: Բուֆֆերն անսպասելի փոփոխվել է" - -msgid "E788: Not allowed to edit another buffer now" -msgstr "E788: Այլ բուֆերի խմբագրում չի թույլատրվում հիմա" - -#, c-format -msgid "E789: Missing ']': %s" -msgstr "E789: Բացակայող ']': %s" - -msgid "E790: undojoin is not allowed after undo" -msgstr "E790: չեղարկման միավորումն անհնար է չեղարկումից հետո" - -msgid "E791: Empty keymap entry" -msgstr "E791: Դատարկ բանալիային համապատասխանեցում" - -msgid "E792: Empty menu name" -msgstr "E792: Մենյուի դատարկ էլեմենտ" - -msgid "E793: No other buffer in diff mode is modifiable" -msgstr "E793: Փոփոխելի բուֆերներ այլևս չկան" - -msgid "E794: Cannot set variable in the sandbox" -msgstr "E794: Հնարավոր չէ ստեղծել փոփոխական sandbox-ում" - -#, c-format -msgid "E794: Cannot set variable in the sandbox: \"%s\"" -msgstr "E794: Հնարավոր չէ ստեղծել փոփոխական sandbox֊ում: \"%s\"" - -msgid "E795: Cannot delete variable" -msgstr "E795: Հնարավոր չէ ջնջել փոփոխականը" - -#| msgid "E795: Cannot delete variable" -msgid "E795: Cannot delete variable %s" -msgstr "E795: Հնարավոր չէ ջնջել %s փոփոխականը" - -msgid "writing to device disabled with 'opendevice' option" -msgstr "սարքում գրելն արգելված է 'opendevice' կարգանշման միջոցով" - -msgid "E797: SpellFileMissing autocommand deleted buffer" -msgstr "" -"E797: Բուֆերը ջնջվել է SpellFileMissing ինքնահրամանի կատարման արդյունքում" - -#, c-format -msgid "E798: ID is reserved for \":match\": %d" -msgstr "E798: ID-ն վերապահված է \":match\"-ի համար՝ %d" - -#, c-format -msgid "E799: Invalid ID: %d (must be greater than or equal to 1)" -msgstr "E799: Անվավեր համար։ %d (համարը պետք է լինի 1-ից մեծ կամ հավասար)" - -msgid "" -"E800: Arabic cannot be used: Not enabled at compile time\n" -msgstr "" -"E800: Արաբերենը հնարավոր չէ օգտագործել, միացված չէ կառուղման ժամանակ\n" - -#| msgid "E1073: Name already defined: %s" -msgid "E801: ID already taken: %d" -msgstr "E801: ID-ն արդեն վերցված է՝ %d" - -#, c-format -msgid "E802: Invalid ID: %d (must be greater than or equal to 1)" -msgstr "E802: Անվավեր համար։ %d (համարը պետք է լինի 1-ից մեծ կամ հավասար)" - -#, c-format -msgid "E803: ID not found: %d" -msgstr "E803:: Համարը չի հայտնաբերվել: %d" - -#, no-c-format -msgid "E804: Cannot use '%' with Float" -msgstr "E804: Անհնար է օգտագործել '%'֊ը սահող կետով թվերի հետ" - -msgid "E805: Using a Float as a Number" -msgstr "E805: Սահող կետով թիվ է օգտագործվել ամբողջի փոխարեն" - -msgid "E806: Using a Float as a String" -msgstr "E806: Սահող կետով թվի օգտագործում` տողի փոխարեն" - -msgid "E807: Expected Float argument for printf()" -msgstr "E807: Սպասվում է սահող կետով արգումենտ printf()-ի համար" - -msgid "E808: Number or Float required" -msgstr "E808: Սահող կետով թիվ է անհրաժեշտ" - -msgid "E809: #< is not available without the +eval feature" -msgstr "E809: #< հասանելի չէ առանց +eval հատկության" - -msgid "E810: Cannot read or write temp files" -msgstr "E810: Հնարավոր չէ գրել կամ կարդալ ժամանակավոր ֆայլերում" - -msgid "E811: Not allowed to change buffer information now" -msgstr "E811: Հնարավոր չէ փոփոխել բուֆորի ինֆորմացիան" - -msgid "E812: Autocommands changed buffer or buffer name" -msgstr "E812: Ինքնահրամանները փոփոխել են բուֆերը կամ բուֆերի անունը" - -msgid "E813: Cannot close autocmd or popup window" -msgstr "E813: Հնարավոր չէ փակել ինքնահրամանը կամ սահապատը" - -msgid "E814: Cannot close window, only autocmd window would remain" -msgstr "" -"E814: Հնարավոր չէ փակել պատուհանը, միայն ինքնահրամանների պատուհանը կարող է " -"մնալ" - -msgid "" -"E815: Sorry, this command is disabled, the MzScheme libraries could not be " -"loaded." -msgstr "" -"E815: Ներողություն, այս հրամանն ապաակտիվացված է, հնարավոր չէ բեռնել MzScheme " -"գրադարանը." - -msgid "E816: Cannot read patch output" -msgstr "E816: Հնարավոր չէ կարդալ նմանակման ելքը" - -msgid "E817: Blowfish big/little endian use wrong" -msgstr "E817: Blowfish֊ին տրված մեծ/փոքր վերջավորության կարգը սխալ է" - -msgid "E818: sha256 test failed" -msgstr "E818: sha256 թեսթն անհաջող է ավարտվել" - -msgid "E819: Blowfish test failed" -msgstr "E819: Blowfish թեսթն անհաջող է ավարտվել" - -msgid "E820: sizeof(uint32_t) != 4" -msgstr "E820: sizeof(uint32_t) != 4" - -msgid "E821: File is encrypted with unknown method" -msgstr "E821: Ֆայլը կոդավորված է անծանոթ մեթոդներով" - -#, c-format -msgid "E822: Cannot open undo file for reading: %s" -msgstr "E822: Հնարավոր չէ բացել չեղարկման ֆայլն ընթերցման համար: %s" - -#, c-format -msgid "E823: Not an undo file: %s" -msgstr "E823: Չեղարկման ֆայլ չէ: %s" - -#, c-format -msgid "E824: Incompatible undo file: %s" -msgstr "E824: Անհամապատասխան չեղարկման ֆայլ: %s" - -#, c-format -msgid "E825: Corrupted undo file (%s): %s" -msgstr "E825: Վնասված չեղարկման ֆայլ (%s): %s" - -#, c-format -msgid "E826: Undo file decryption failed: %s" -msgstr "E826: Չեղարկման ֆայլի դեկոդավորումն ավարտվել է անհաջողությամբ: %s" - -#, c-format -msgid "E827: Undo file is encrypted: %s" -msgstr "E827: Չեղարկման ֆայլը կոդավորված է: %s" - -#, c-format -msgid "E828: Cannot open undo file for writing: %s" -msgstr "E828: Պահպանման համար հնարավոր չէ բացել չեղարկման ֆայլը: %s" - -#, c-format -msgid "E829: Write error in undo file: %s" -msgstr "E829: Չեղարկման ֆայլի ամրագրման սխալ: %s" - -#, c-format -msgid "E830: Undo number %ld not found" -msgstr "E830: Չեղարկման %ld համարը չի հայտնաբերվել" - -#, c-format -msgid "E832: Non-encrypted file has encrypted undo file: %s" -msgstr "E832: Չկոդավորված ֆայլն ունի կոդավորված չեղարկման ֆայլ: %s" - -#, c-format -msgid "" -"E833: %s is encrypted and this version of Vim does not support encryption" -msgstr "E833: %s֊ը կոդավորված է և Vim-ի այս տարբերակը կոդավորում չի աջակցում" - -msgid "E834: Conflicts with value of 'listchars'" -msgstr "E834: Կոնֆլիկտ՝ 'listchars'-ի արժեքում" - -msgid "E835: Conflicts with value of 'fillchars'" -msgstr "E835: Կոնֆլիկտ՝ 'fillchars'-ի արժեքում" - -msgid "E836: This Vim cannot execute :python after using :py3" -msgstr "" -"E836: Այս Vim֊ը չի կարող կատարել :python հրամանը :py3 հրամանի օգտագործումից " -"հետո" - -msgid "E837: This Vim cannot execute :py3 after using :python" -msgstr "" -"E837: Այս Vim֊ը չի կարող կատարել :py3 հրամանը :python հրամանի օգտագործումից " -"հետո" - -msgid "E838: NetBeans is not supported with this GUI" -msgstr "E838: NetBeans֊ը չի աջակցվում այս գրաֆիկական ինտերֆեյսով" - -msgid "E840: Completion function deleted text" -msgstr "E840: Ավտոմատ լրացման գործառույթը ջնջել է տեքստը" - -msgid "E841: Reserved name, cannot be used for user defined command" -msgstr "" -"E841: Ռեզերվացված անուն, չի կարելի օգտագործել օգտատիրոջ սահմանած հրամաններում" - -msgid "E842: No line number to use for \"\"" -msgstr "E842: տողի համարը տրված չէ \"\"-ի համար" - -msgid "E843: Error while updating swap file crypt" -msgstr "E843: Սխալ, սվեփ ֆայլի կոդավորման թարմացման ժամանակ" - -msgid "E844: Invalid cchar value" -msgstr "E844: cchar-ի անվավեր արժեք" - -msgid "E845: Insufficient memory, word list will be incomplete" -msgstr "E845: Անբավարար հիշողություն, բառալիստը կարող է անավարտ մնալ" - -msgid "E846: Key code not set" -msgstr "E846: Ստեղնի կոդը կարգավորված չէ" - -msgid "E847: Too many syntax includes" -msgstr "E847: Աննախադեպ շատ ուղղագրական կցումներ" - -msgid "E848: Too many syntax clusters" -msgstr "E848: Աննախադեպ շատ hամակարգեր" - -msgid "E849: Too many highlight and syntax groups" -msgstr "E849: Աննախադեպ շատ գունանշման բնորոշիչներ և ուղղագրական խմբեր" - -msgid "E850: Invalid register name" -msgstr "E850: Անվավեր ռեգիստր" - -msgid "E851: Failed to create a new process for the GUI" -msgstr "E851: Հնարավոր չէ ստեղծել նոր պրոցես գրաֆիկական ինտերֆեյսի համար" - -msgid "E852: The child process failed to start the GUI" -msgstr "E852: Ճուտ պրոցեսին չի հաջողվել սկսել գրաֆիկական ինտերֆեյսը" - -#, c-format -msgid "E853: Duplicate argument name: %s" -msgstr "E853: Կրկնված արգումենտի անուն: %s" - -msgid "E854: Path too long for completion" -msgstr "E854: Ճանապարհն անսպասելի երկար է ինքնահամալրման համար" - -msgid "E855: Autocommands caused command to abort" -msgstr "E855: Ինքնահրամմանները ստիպել են հրամանին անհաջող ավարտվել" - -msgid "" -"E856: \"assert_fails()\" second argument must be a string or a list with one " -"or two strings" -msgstr "" -"E856: \"assert_fails()\" երկրորդ արգումենտը պետք է լինի տող կամ ցուցակ մեկ " -"կամ երկու տողով" - -#, c-format -msgid "E857: Dictionary key \"%s\" required" -msgstr "E857: Բառարանի \"%s\" բանալին անհրաժեշտ է" - -msgid "E858: Eval did not return a valid python object" -msgstr "E858: Eval֊ը չի վերադարձրել վավեր Python օբյեկտ" - -msgid "E859: Failed to convert returned python object to a Vim value" -msgstr "E859: Հնարավոր չէ փոխակերպել վերադարձված python օբյեկտը՝ Vim արժեքի" - -msgid "E860: Need 'id' and 'type' or 'types' with 'both'" -msgstr "E860: Պետք է 'id' և 'type' կամ 'types' և 'both'" - -#| msgid "E810: Cannot read or write temp files" -msgid "E861: Cannot open a second popup with a terminal" -msgstr "E861: Հնարավոր չէ բացել երկրորդ թռուցիկ պատուհանը տերմինալով" - -msgid "E862: Cannot use g: here" -msgstr "E862: Հնարավոր չէ այստեղ օգտագործել g:֊ն" - -#| msgid "E813: Cannot close autocmd or popup window" -msgid "E863: Not allowed for a terminal in a popup window" -msgstr "E863: Չի թույլատրվում բացվող պատուհանում տերմինալի համար" - -#, no-c-format -msgid "" -"E864: \\%#= can only be followed by 0, 1, or 2: The automatic engine will be " -"used" -msgstr "" -"E864: \\%#=-ին կարող է հետևել միայն 0, 1 կամ 2: Ավտոմատ շարժիչը կօգտագործվի" - -msgid "E865: (NFA) Regexp end encountered prematurely" -msgstr "E865: (NFA) Ռեգուլյար արտահայտթության անսպասելի ավարտ" - -#, c-format -msgid "E866: (NFA regexp) Misplaced %c" -msgstr "E866: (NFA regexp) անսպասելի %c" - -#, c-format -msgid "E867: (NFA regexp) Unknown operator '\\z%c'" -msgstr "E867: (NFA regexp) անծանոթ հրաման '\\z%c'" - -#, c-format -msgid "E867: (NFA regexp) Unknown operator '\\%%%c'" -msgstr "E867: (NFA regexp) անծանոթ հրաման '\\%%%c'" - -msgid "E868: Error building NFA with equivalence class!" -msgstr "E868: Սխալ՝ NFA կառուցման ընթացքում !" - -#, c-format -msgid "E869: (NFA regexp) Unknown operator '\\@%c'" -msgstr "E869: (NFA regexp) անծանոթ օպերատոր '\\@%c'" - -msgid "E870: (NFA regexp) Error reading repetition limits" -msgstr "E870: (NFA regexp) Կրկնման սահմանափակման ընթերցման սխալ" - -msgid "E871: (NFA regexp) Can't have a multi follow a multi" -msgstr "E871: (NFA regexp) Բազմությունը չի կարող հետևել բազմությանը" - -msgid "E872: (NFA regexp) Too many '('" -msgstr "E872: (NFA regexp) աննախադեպ շատ '('" - -msgid "E873: (NFA regexp) proper termination error" -msgstr "E873: (NFA regexp) ավարտման սխալ" - -msgid "E874: (NFA regexp) Could not pop the stack!" -msgstr "E874: (NFA regexp) Հնարավոր չէ ընթերցել ստեկից!" - -msgid "" -"E875: (NFA regexp) (While converting from postfix to NFA), too many states " -"left on stack" -msgstr "" -"E875: (NFA regexp) ստեկում մնացելեն աննախադեպ շատ վիճակներ (պոստֆիքսից " -"NFAփոխակերպման ընթացքում)" - -msgid "E876: (NFA regexp) Not enough space to store the whole NFA" -msgstr "E876: (NFA regexp) Հիշողությունն անբավարար է՝ NFA֊ը պահպանելու համար" - -#, c-format -msgid "E877: (NFA regexp) Invalid character class: %d" -msgstr "E877: (NFA regexp) Անվավեր դաս : %d" - -msgid "E878: (NFA regexp) Could not allocate memory for branch traversal!" -msgstr "" -"E878: (NFA regexp) Ճյուղային այցելության համար հնարավոր չէ առանձնացնել " -"հիշողություն!" - -msgid "E879: (NFA regexp) Too many \\z(" -msgstr "E879: (NFA regexp) աննախադեպ շատ \\z(" - -msgid "E880: Can't handle SystemExit of python exception in vim" -msgstr "E880: Չի կարող կարգավորել SystemExit python բացառությունը vim-ում" - -msgid "E881: Line count changed unexpectedly" -msgstr "E881: Տողերի քանակն անսպասելիորեն փոփոխվել է" - -msgid "E882: Uniq compare function failed" -msgstr "E882: Անհաջող համեմատում դասավորման կանչի համար" - -msgid "" -"E883: Search pattern and expression register may not contain two or more " -"lines" -msgstr "" -"E883: Որոնման օրինակը և արտահայտությունների ռեգիստրը չեն կարող պարունակել " -"երկու կամ ավելի տող" - -#, c-format -msgid "E884: Function name cannot contain a colon: %s" -msgstr "E884: Ֆունկցիայի անունը չի կարող պարունակել ստորակետ: %s" - -#, c-format -msgid "E885: Not possible to change sign %s" -msgstr "E885: Հնարավոր չէ փոխել նշանը %s" - -#, c-format -msgid "E886: Can't rename viminfo file to %s!" -msgstr "E886: Անհնար է վերանվանել viminfo ֆայլը %s-ի!" - -msgid "" -"E887: Sorry, this command is disabled, the Python's site module could not be " -"loaded." -msgstr "" -"E887: Ներողություն, այս հրամանն անջատված է, Python գրադարանը հնարավոր չէ " -"բեռնել." - -#| msgid "E867: (NFA regexp) Unknown operator '\\z%c'" -msgid "E888: (NFA regexp) cannot repeat %s" -msgstr "E888: (NFA regexp) չի կարող կրկնել %s" - -msgid "E889: Number required" -msgstr "E889: Ամբողջ թիվ է անհրաժեշտ" - -#, c-format -msgid "E890: Trailing char after ']': %s]%s" -msgstr "E890: Ավելորդ նշաններ ']'-ից հետո: %s]%s" - -msgid "E891: Using a Funcref as a Float" -msgstr "E891: Ֆունկցիայի հղումն օգտագործվել է սահող կետով թվի փոխարեն" - -#| msgid "E891: Using a Funcref as a Float" -msgid "E892: Using a String as a Float" -msgstr "E892: Օգտագործելով լարը որպես բոց" - -#| msgid "E891: Using a Funcref as a Float" -msgid "E893: Using a List as a Float" -msgstr "E893: Ցուցակի օգտագործումը որպես բոց" - -#| msgid "E728: Using a Dictionary as a Number" -msgid "E894: Using a Dictionary as a Float" -msgstr "E894: Բառարանի օգտագործումը որպես բոց" - -msgid "" -"E895: Sorry, this command is disabled, the MzScheme's racket/base module " -"could not be loaded." -msgstr "" -"E895: Ներողություն, այ հրամանն անջատում է, հնարավոր չէ բեռնել MzScheme " -"գրադարանը." - -#, c-format -msgid "E896: Argument of %s must be a List, Dictionary or Blob" -msgstr "E896: %s֊ի արգումենտը պետք է լինի ցանկ կամ բառարան" - -msgid "E897: List or Blob required" -msgstr "E897: Ցանկ է անհրաժեշտ" - -msgid "E898: socket() in channel_connect()" -msgstr "E898: socket() channel_connect()-ում" - -#, c-format -msgid "E899: Argument of %s must be a List or Blob" -msgstr "E899: %s պարամետրը պետք է լինի ցանկ" - -msgid "E900: maxdepth must be non-negative number" -msgstr "E900: առավելագույն խորությունը պետք է լինի ոչ բացասական թիվ" - -#, c-format -msgid "E901: getaddrinfo() in channel_open(): %s" -msgstr "E901: getaddrinfo() channel_open(): %s" - -msgid "E901: gethostbyname() in channel_open()" -msgstr "E901: gethostbyname() channel_open()-ում" - -#| msgid "E254: Cannot allocate color %s" -msgid "E902: Cannot connect to port" -msgstr "E902: Հնարավոր չէ միանալ նավահանգիստին" - -msgid "E903: Received command with non-string argument" -msgstr "E903: ստացված հրամանը ոչ լարային արգումենտով" - -#| msgid "E904: Third argument for call must be a list" -msgid "E904: Last argument for expr/call must be a number" -msgstr "E904: expr/call-ի վերջին փաստարկը պետք է լինի թիվ" - -msgid "E904: Third argument for call must be a list" -msgstr "E904: 3-րդ արգումենտը պետք է լինի ցանկ" - -#| msgid "E160: Unknown sign command: %s" -msgid "E905: Received unknown command: %s" -msgstr "E905: ստացվել է անհայտ հրաման՝ %s" - -#| msgid "E663: At end of changelist" -msgid "E906: Not an open channel" -msgstr "E906: Բաց ալիք չէ" - -#| msgid "E891: Using a Funcref as a Float" -msgid "E907: Using a special value as a Float" -msgstr "E907: Հատուկ արժեքի օգտագործումը որպես Float" - -#| msgid "E806: Using a Float as a String" -msgid "E908: Using an invalid value as a String: %s" -msgstr "E908: Անվավեր արժեքի օգտագործումը որպես տող՝ %s" - -msgid "E909: Cannot index a special variable" -msgstr "E909: Անհնար է ինդեքսավորել հատուկ փոփոխականը" - -#| msgid "E805: Using a Float as a Number" -msgid "E910: Using a Job as a Number" -msgstr "E910: Աշխատանքի օգտագործումը որպես համար" - -#| msgid "E891: Using a Funcref as a Float" -msgid "E911: Using a Job as a Float" -msgstr "E911: Աշխատանքի օգտագործումը որպես բոց" - -msgid "E912: Cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel" -msgstr "" -"E912: Հնարավոր չէ օգտագործել ch_evalexpr()/ch_sendexpr() հումքի կամ nl ալիքով" - -#| msgid "E703: Using a Funcref as a Number" -msgid "E913: Using a Channel as a Number" -msgstr "E913: ալիքի օգտագործումը որպես համար" - -#| msgid "E891: Using a Funcref as a Float" -msgid "E914: Using a Channel as a Float" -msgstr "E914: ալիքի օգտագործումը որպես բոց" - -msgid "E915: in_io buffer requires in_buf or in_name to be set" -msgstr "E915: in_io բուֆերը պահանջում է տեղադրել in_buf կամ in_name" - -#| msgid "E543: Not a valid codepage" -msgid "E916: Not a valid job" -msgstr "E916: Վավեր աշխատանք չէ" - -#| msgid "E197: Cannot set language to \"%s\"" -msgid "E917: Cannot use a callback with %s()" -msgstr "E917: Հնարավոր չէ օգտագործել հետզանգ %s()-ով" - -#, c-format -msgid "E918: Buffer must be loaded: %s" -msgstr "E918: Բուֆերը չի բեռնվել: %s" - -#| msgid "not found in '%s': \"%s\"" -msgid "E919: Directory not found in '%s': \"%s\"" -msgstr "E919: '%s'-ում գրացուցակը չի գտնվել. \"%s\"" - -msgid "E920: _io file requires _name to be set" -msgstr "E920: _io ֆայլը պահանջում է սահմանել _name" - -#| msgid "E474: Invalid argument" -msgid "E921: Invalid callback argument" -msgstr "E921: Անվավեր հետադարձ արգումենտ" - -msgid "E923: Second argument of function() must be a list or a dict" -msgstr "E923: Ֆունկցիայի երկրորդ արգումենտը պետք է լինի ցանկ կամ բառարան" - -msgid "E924: Current window was closed" -msgstr "E924: Ընթացիկ պատուհանը փակ է" - -msgid "E925: Current quickfix list was changed" -msgstr "E925: ընթացիկ Quickfix ցուցակը փոխվել է" - -msgid "E926: Current location list was changed" -msgstr "E926: Ներկայիս տեղադրության ցանկը փոխվել է" - -#| msgid "E476: Invalid command: %s" -msgid "E927: Invalid action: '%s'" -msgstr "E927: Անվավեր գործողություն՝ '%s'" - -msgid "E928: String required" -msgstr "E928: Պահանջվում է տող" - -#, c-format -msgid "E929: Too many viminfo temp files, like %s!" -msgstr "E929: Չափազանց շատ viminfo ժամանակային ֆայլեր, օրինակ՝ %s!" - -msgid "E930: Cannot use :redir inside execute()" -msgstr "E930: Հնարավոր չէ օգտագործել :redir ներսում execute()" - -msgid "E931: Buffer cannot be registered" -msgstr "E931: Բուֆերը չի կարող գրանցվել" - -#, c-format -msgid "E932: Closure function should not be at top level: %s" -msgstr "E932: Փակման գործառույթը չպետք է լինի վերին մակարդակում՝ %s" - -#| msgid "E129: Function name required" -msgid "E933: Function was deleted: %s" -msgstr "E933: ֆունկցիան ջնջվել է՝ %s" - -msgid "E934: Cannot jump to a buffer that does not have a name" -msgstr "E934: Չի կարող անցնել բուֆեր, որն անուն չունի" - -#| msgid "E964: Invalid column number: %ld" -msgid "E935: Invalid submatch number: %d" -msgstr "E935: Անվավեր ենթահամընկնման համար: %d" - -#| msgid "E351: Cannot delete fold with current 'foldmethod'" -msgid "E936: Cannot delete the current group" -msgstr "E936: Հնարավոր չէ ջնջել ընթացիկ խումբը" - -#, c-format -msgid "E937: Attempt to delete a buffer that is in use: %s" -msgstr "E937: Փորձեք ջնջել օգտագործվող բուֆերը՝ %s" - -#, c-format -msgid "E938: Duplicate key in JSON: \"%s\"" -msgstr "E938: Բանալու կրկնություն: \"%s\"" - -msgid "E939: Positive count required" -msgstr "E939: Պահանջվում է դրական քանակ" - -#| msgid "E46: Cannot change read-only variable \"%s\"" -msgid "E940: Cannot lock or unlock variable %s" -msgstr "E940: Հնարավոր չէ կողպել կամ ապակողպել %s փոփոխականը" - -msgid "E941: Already started a server" -msgstr "E941: Արդեն գործարկել է սերվերը" - -#| msgid "E775: Eval feature not available" -msgid "E942: +clientserver feature not available" -msgstr "E942: +clientserver առանձնահատկությունը հասանելի չէ" - -#| msgid "E488: Trailing characters" -msgid "E944: Reverse range in character class" -msgstr "E944: Հակադարձ միջակայքը նիշերի դասում" - -msgid "E945: Range too large in character class" -msgstr "E945: Նիշերի դասի միջակայքը չափազանց մեծ է" - -msgid "E946: Cannot make a terminal with running job modifiable" -msgstr "E946: Հնարավոր չէ կատարել տերմինալ՝ փոփոխվող գործող աշխատանքով" - -#| msgid "E948: Job still running" -msgid "E947: Job still running in buffer \"%s\"" -msgstr "E947: Խնդիրը դեռևս կատարվում է \"%s\" բուֆերում" - -msgid "E948: Job still running" -msgstr "E948: դեռևս կատարվում է" - -#| msgid "E948: Job still running" -msgid "E948: Job still running (add ! to end the job)" -msgstr "" -"E948: Աշխատանքը դեռ աշխատում է (ավելացրե՛ք ! աշխատանքը ավարտելու համար)" - -#| msgid "E80: Error while writing" -msgid "E949: File changed while writing" -msgstr "E949: ֆայլը փոխվել է գրելիս" - -#| msgid "E1354: Cannot extend %s" -msgid "E950: Cannot convert between %s and %s" -msgstr "E950: Հնարավոր չէ փոխարկել %s-ի և %s-ի միջև" - -#, no-c-format -msgid "E951: \\% value too large" -msgstr "E951: \\% արժեքը մի քիչ երկար է" - -#| msgid "E855: Autocommands caused command to abort" -msgid "E952: Autocommand caused recursive behavior" -msgstr "E952: Ավտոհրաման առաջացրել է ռեկուրսիվ վարքագիծ" - -#, c-format -msgid "E953: File exists: %s" -msgstr "E953: Ֆայլն արդեն գոյություն ունի: %s" - -msgid "E954: 24-bit colors are not supported on this environment" -msgstr "E954: 24-բիթանոց գույները չեն ապահովվում այս միջավայրում" - -#| msgid "E94: No matching buffer for %s" -msgid "E955: Not a terminal buffer" -msgstr "E955: Տերմինալային բուֆեր չէ" - -#| msgid "E659: Cannot invoke Python recursively" -msgid "E956: Cannot use pattern recursively" -msgstr "E956: Նմուշը հնարավոր չէ օգտագործել ռեկուրսիվ" - -#| msgid "E966: Invalid line number: %ld" -msgid "E957: Invalid window number" -msgstr "E957: պատուհանի համարն անվավեր է" - -msgid "E958: Job already finished" -msgstr "E958: Աշխատանքն արդեն ավարտված է" - -#| msgid "E534: Invalid wide font" -msgid "E959: Invalid diff format." -msgstr "E959: Տարբերության անվավեր ձևաչափ:" - -msgid "E960: Problem creating the internal diff" -msgstr "E960: Ներքին տարբերություն ստեղծելու խնդիր" - -msgid "E961: No line number to use for \"\"" -msgstr "E961: Տողի համարը տրված չէ \"\"" - -#| msgid "E476: Invalid command: %s" -msgid "E962: Invalid action: '%s'" -msgstr "E962: Անվավեր գործողություն՝ '%s'" - -#, c-format -msgid "E963: Setting v:%s to value with wrong type" -msgstr "E963: v:%s-ի արժեքը սխալ տիպի սահմանում" - -#, c-format -msgid "E964: Invalid column number: %ld" -msgstr "E964: Անվավեր սյան համար: %ld" - -#| msgid "E379: Missing or empty directory name" -msgid "E965: Missing property type name" -msgstr "E965: Բացակայում է սեփականության տիպի անվանումը" - -#, c-format -msgid "E966: Invalid line number: %ld" -msgstr "E966: Անվավեր տողի համար: %ld" - -#| msgid "E593: Need at least %d lines" -msgid "E968: Need at least one of 'id' or 'type'" -msgstr "E968: Պետք է 'id' կամ 'type'-ից առնվազն մեկը" - -#, c-format -msgid "E969: Property type %s already defined" -msgstr "E969: հատկության տեսակը %s արդեն սահմանված է" - -#, c-format -msgid "E970: Unknown highlight group name: '%s'" -msgstr "E970: Անծանոթ գունանշման խումբ: '%s'" - -#| msgid "E429: File \"%s\" does not exist" -msgid "E971: Property type %s does not exist" -msgstr "E971: %s հատկության տեսակը գոյություն չունի" - -#| msgid "E711: List value does not have enough items" -msgid "E972: Blob value does not have the right number of bytes" -msgstr "E972: Blob արժեքը չունի բայթերի ճիշտ քանակ" - -msgid "E973: Blob literal should have an even number of hex characters" -msgstr "E973: Blob literal-ը պետք է ունենա զույգ թվով վեցանկյուն նիշ" - -#| msgid "E745: Using a List as a Number" -msgid "E974: Using a Blob as a Number" -msgstr "E974: բլբի օգտագործումը որպես թիվ" - -#| msgid "E891: Using a Funcref as a Float" -msgid "E975: Using a Blob as a Float" -msgstr "E975: Բլոբի օգտագործումը որպես բոց" - -#| msgid "E806: Using a Float as a String" -msgid "E976: Using a Blob as a String" -msgstr "E976: Բլոբի օգտագործումը որպես տող" - -#| msgid "E691: Can only compare List with List" -msgid "E977: Can only compare Blob with Blob" -msgstr "E977: Կարող է համեմատել միայն Blob-ը Blob-ի հետ" - -#| msgid "E692: Invalid operation for List" -msgid "E978: Invalid operation for Blob" -msgstr "E978: Անվավեր գործողություն Blob-ի համար" - -#| msgid "E684: List index out of range: %ld" -msgid "E979: Blob index out of range: %ld" -msgstr "E979: Blob ինդեքսը դուրս է տիրույթից՝ %ld" - -#| msgid "E519: Option not supported" -msgid "E980: Lowlevel input not supported" -msgstr "E980: Ցածր մակարդակի մուտքագրումը չի ապահովվում" - -msgid "E981: Command not allowed in rvim" -msgstr "E981: rvim֊ում չեն թույլատրվում վահանակի հրամաններ" - -msgid "E982: ConPTY is not available" -msgstr "E982: ConPTY հասանելի չէ" - -#, c-format -msgid "E983: Duplicate argument: %s" -msgstr "E983: Կրկնված արգումենտ: %s" - -msgid "E984: :scriptversion used outside of a sourced file" -msgstr "E984: :scriptversion հրամանը օգտագործվում է կցվող ֆայլից դուրս" - -#| msgid "E838: NetBeans is not supported with this GUI" -msgid "E985: .= is not supported with script version >= 2" -msgstr "E985: .= չի աջակցվում սկրիպտի տարբերակով >= 2" - -#| msgid "E428: Cannot go beyond last matching tag" -msgid "E986: Cannot modify the tag stack within tagfunc" -msgstr "E986: Հնարավոր չէ փոփոխել պիտակների կույտը tagfunc-ում" - -#| msgid "E178: Invalid default value for count" -msgid "E987: Invalid return value from tagfunc" -msgstr "E987: tagfunc-ից վերադարձված անվավեր արժեք" - -#| msgid "E25: GUI cannot be used: Not enabled at compile time" -msgid "E988: GUI cannot be used. Cannot execute gvim.exe." -msgstr "E988: GUI-ն չի կարող օգտագործվել: Հնարավոր չէ գործարկել gvim.exe-ը:" - -msgid "E989: Non-default argument follows default argument" -msgstr "E989: Ոչ լռելյայն արգումենտը հաջորդում է լռելյայն արգումենտին" - -#, c-format -msgid "E990: Missing end marker '%s'" -msgstr "E990: Բացակայող նշման վերջ %s" - -#| msgid "E862: Cannot use g: here" -msgid "E991: Cannot use =<< here" -msgstr "E991: Այստեղ հնարավոր չէ օգտագործել =<<" - -#| msgid "E520: Not allowed in a modeline" -msgid "E992: Not allowed in a modeline when 'modelineexpr' is off" -msgstr "E992: Չի թույլատրվում մոդելում, երբ 'modelineexpr' ն անջատված է" - -#| msgid "E813: Cannot close autocmd or popup window" -msgid "E993: Window %d is not a popup window" -msgstr "E993: %d պատուհանը բացվող պատուհան չէ" - -#| msgid "E48: Not allowed in sandbox" -msgid "E994: Not allowed in a popup window" -msgstr "E994: Չի թույլատրվում բացվող պատուհանում" - -#| msgid "E795: Cannot delete variable" -msgid "E995: Cannot modify existing variable" -msgstr "E995: Հնարավոր չէ փոփոխել գոյություն ունեցող փոփոխականը" - -#| msgid "E795: Cannot delete variable" -msgid "E996: Cannot lock a range" -msgstr "E996: Հնարավոր չէ կողպել միջակայքը" - -#| msgid "E1052: Cannot declare an option: %s" -msgid "E996: Cannot lock an option" -msgstr "E996: Հնարավոր չէ արգելափակել տարբերակը" - -#| msgid "E90: Cannot unload last buffer" -msgid "E996: Cannot lock a list or dict" -msgstr "E996: Հնարավոր չէ կողպել ցուցակը կամ թելադրանքը" - -#| msgid "E46: Cannot change read-only variable" -msgid "E996: Cannot lock an environment variable" -msgstr "E996: Հնարավոր չէ արգելափակել շրջակա միջավայրի փոփոխականը" - -#| msgid "E90: Cannot unload last buffer" -msgid "E996: Cannot lock a register" -msgstr "E996: Հնարավոր չէ արգելափակել գրանցամատյանը" - -#| msgid "E426: Tag not found: %s" -msgid "E997: Tabpage not found: %d" -msgstr "E997: ներդիրը չի գտնվել՝ %d" - -#, c-format -msgid "E998: Reduce of an empty %s with no initial value" -msgstr "E998: Կրճատել դատարկ %s առանց նախնական արժեքի" - -#| msgid "E519: Option not supported" -msgid "E999: scriptversion not supported: %d" -msgstr "E999: սցենարի տարբերակը չի աջակցվում՝ %d" - -#| msgid "E1122: Variable is locked: %s" -msgid "E1001: Variable not found: %s" -msgstr "E1001: փոփոխականը չի գտնվել՝ %s" - -#, c-format -msgid "E1002: Syntax error at %s" -msgstr "E1002: Ուղղագրական սխալ %s" - -#| msgid "E1027: Missing return statement" -msgid "E1003: Missing return value" -msgstr "E1003: վերադարձի արժեքը բացակայում է" - -#, c-format -msgid "E1004: White space required before and after '%s' at \"%s\"" -msgstr "E1004: '%s'-ում \"%s\"-ից առաջ և հետո պահանջվում է սպիտակ տարածություն" - -msgid "E1005: Too many argument types" -msgstr "E1005: Աննախադեպ շատ արգումենտի տիպեր" - -#| msgid "E1035: % requires number arguments" -msgid "E1006: %s is used as an argument" -msgstr "E1006: %s-ն օգտագործվում է որպես արգումենտ" - -#| msgid "Garbage after option argument" -msgid "E1007: Mandatory argument after optional argument" -msgstr "E1007: Պարտադիր փաստարկը կամընտիր փաստարկից հետո" - -#, c-format -msgid "E1008: Missing after %s" -msgstr "E1008: Բացակայող %s-ից հետո" - -#, c-format -msgid "E1009: Missing > after type: %s" -msgstr "E1009: Բացակայող > %s-ից հետո" - -#, c-format -msgid "E1010: Type not recognized: %s" -msgstr "E1010: Անծանոթ տիպ։ %s" - -#, c-format -msgid "E1011: Name too long: %s" -msgstr "E1011: Անունը մի քիչ երկար է: %s" - -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" -msgid "E1012: Type mismatch; expected %s but got %s" -msgstr "E1012: Տիպի անհամապատասխանություն; սպասվում էր %s, բայց ստացավ %s" - -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" -msgid "E1012: Type mismatch; expected %s but got %s in %s" -msgstr "" -"E1012: Տիպի անհամապատասխանություն; սպասվում էր %s, բայց ստացավ %s %s-ում" - -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" -msgid "E1013: Argument %d: type mismatch, expected %s but got %s" -msgstr "" -"E1013: արգումենտ %d. տեսակի անհամապատասխանություն, սպասվում էր %s, բայց " -"ստացավ %s" - -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" -msgid "E1013: Argument %d: type mismatch, expected %s but got %s in %s" -msgstr "" -"E1013: Փաստարկ %d. տիպի անհամապատասխանություն, սպասվում էր %s, բայց ստացավ " -"%s %s-ում" - -#, c-format -msgid "E1014: Invalid key: %s" -msgstr "E1014: Անվավեր բանալի: %s" - -#| msgid "E39: Number expected" -msgid "E1015: Name expected: %s" -msgstr "E1015: Անունը սպասվում է՝ %s" - -#| msgid "E1052: Cannot declare an option: %s" -msgid "E1016: Cannot declare a %s variable: %s" -msgstr "E1016: Հնարավոր չէ հայտարարել %s փոփոխական՝ %s" - -#| msgid "E1052: Cannot declare an option: %s" -msgid "E1016: Cannot declare an environment variable: %s" -msgstr "E1016: Հնարավոր չէ հայտարարել շրջակա միջավայրի փոփոխական՝ %s" - -#| msgid "E1073: Name already defined: %s" -msgid "E1017: Variable already declared: %s" -msgstr "E1017: փոփոխականն արդեն հայտարարված է՝ %s" - -#| msgid "E1061: Cannot find function %s" -msgid "E1018: Cannot assign to a constant: %s" -msgstr "E1018: Հնարավոր չէ վերագրել հաստատունին՝ %s" - -#| msgid "E691: Can only compare List with List" -msgid "E1019: Can only concatenate to string" -msgstr "E1019: Կարող է միանալ միայն լարին" - -#| msgid "E1052: Cannot declare an option: %s" -msgid "E1020: Cannot use an operator on a new variable: %s" -msgstr "E1020: հնարավոր չէ օպերատոր օգտագործել նոր փոփոխականի վրա՝ %s" - -#| msgid "E709: [:] requires a List or Blob value" -msgid "E1021: Const requires a value" -msgstr "E1021: Const-ը արժեք է պահանջում" - -#| msgid "E808: Number or Float required" -msgid "E1022: Type or initialization required" -msgstr "E1022: տեսակը կամ սկզբնավորումը պահանջվում է" - -#| msgid "E891: Using a Funcref as a Float" -msgid "E1023: Using a Number as a Bool: %lld" -msgstr "E1023: Օգտագործելով թիվը որպես Bool՝ %lld" - -#| msgid "E1324: Using an Object as a String" -msgid "E1024: Using a Number as a String" -msgstr "E1024: Օգտագործելով թիվը որպես տող" - -#| msgid "E168: :finish used outside of a sourced file" -msgid "E1025: Using } outside of a block scope" -msgstr "E1025: }-ի օգտագործումը բլոկի շրջանակից դուրս" - -msgid "E1026: Missing }" -msgstr "E1026: Բացակայող }." - -msgid "E1027: Missing return statement" -msgstr "E1027: Բացակայող return" - -#| msgid "E702: Sort compare function failed" -msgid "E1028: Compiling :def function failed" -msgstr "E1028: :def ֆունկցիան կազմելը ձախողվեց" - -#| msgid "E451: Expected }: %s" -msgid "E1029: Expected %s but got %s" -msgstr "E1029: Սպասվում էր %s, բայց ստացվեց %s" - -#| msgid "E1320: Using an Object as a Number" -msgid "E1030: Using a String as a Number: \"%s\"" -msgstr "E1030: Օգտագործելով տողը որպես թիվ՝ \"%s\"" - -#| msgid "E284: Cannot set IC values" -msgid "E1031: Cannot use void value" -msgstr "E1031: Չի կարող օգտագործել անվավեր արժեք" - -msgid "E1032: Missing :catch or :finally" -msgstr "E1032: Բացակայող :catch կամ :finally" - -msgid "E1033: Catch unreachable after catch-all" -msgstr "E1033: Բռնելն անհասանելի է ամեն ինչից հետո" - -#| msgid "E1354: Cannot extend %s" -msgid "E1034: Cannot use reserved name %s" -msgstr "E1034: Հնարավոր չէ օգտագործել վերապահված անունը %s" - -#, no-c-format -msgid "E1035: % requires number arguments" -msgstr "E1035: % պահանջում է թվային արգումենտ" - -#| msgid "E1035: % requires number arguments" -msgid "E1036: %c requires number or float arguments" -msgstr "E1036: %c-ը պահանջում է թվային կամ լողացող արգումենտներ" - -#| msgid "E804: Cannot use '%' with Float" -msgid "E1037: Cannot use \"%s\" with %s" -msgstr "E1037: Հնարավոր չէ օգտագործել \"%s\"-ը %s-ի հետ" - -#| msgid "E1399: Type can only be used in a script" -msgid "E1038: \"vim9script\" can only be used in a script" -msgstr "E1038: \"vim9script\" -ը կարող է օգտագործվել միայն սկրիպտում" - -msgid "E1039: \"vim9script\" must be the first command in a script" -msgstr "E1039: \"vim9script\" -ը պետք է լինի սկրիպտի առաջին հրամանը" - -msgid "E1040: Cannot use :scriptversion after :vim9script" -msgstr "E1040: Հնարավոր չէ օգտագործել :scriptversion-ը :vim9script-ից հետո" - -#| msgid "E1048: Item not found in script: %s" -msgid "E1041: Redefining script item: \"%s\"" -msgstr "E1041: Սկրիպտի տարրի վերասահմանում. \"%s\"" - -#| msgid "E1399: Type can only be used in a script" -msgid "E1042: Export can only be used in vim9script" -msgstr "E1042: Արտահանումը կարող է օգտագործվել միայն vim9script-ում" - -msgid "E1043: Invalid command after :export" -msgstr "E1043: Անվավեր հրամանի անուն :export-ից հետո" - -#| msgid "E474: Invalid argument" -msgid "E1044: Export with invalid argument" -msgstr "E1044: Արտահանել անվավեր արգումենտով" - -#, c-format -msgid "E1047: Syntax error in import: %s" -msgstr "E1047: Ուղղագրական սխալ %s" - -#, c-format -msgid "E1048: Item not found in script: %s" -msgstr "E1048: Նմուշը չի հայտնաբերվել: %s" - -#| msgid "E1048: Item not found in script: %s" -msgid "E1049: Item not exported in script: %s" -msgstr "E1049: Տարրը չի արտահանվել սկրիպտով՝ %s" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1050: Colon required before a range: %s" -msgstr "E1050: երկու կետ պահանջվում է ընդգրկույթից առաջ՝ %s" - -#| msgid "E1077: Missing argument type for %s" -msgid "E1051: Wrong argument type for +" -msgstr "E1051: +-ի համար սխալ արգումենտի տեսակ" - -#, c-format -msgid "E1052: Cannot declare an option: %s" -msgstr "E1052: Հնարավոր չէ հայտարարել կարգանշանը: %s" - -#, c-format -msgid "E1053: Could not import \"%s\"" -msgstr "E1053: Հնարավոր չէ բեռնել \"%s\"" - -#| msgid "E1073: Name already defined: %s" -msgid "E1054: Variable already declared in the script: %s" -msgstr "E1054: փոփոխականն արդեն հայտարարված է սկրիպտում՝ %s" - -#| msgid "E260: Missing name after ->" -msgid "E1055: Missing name after ..." -msgstr "E1055: Անունը բացակայում է ..." - -#| msgid "E451: Expected }: %s" -msgid "E1056: Expected a type: %s" -msgstr "E1056: Ակնկալվում էր տեսակ՝ %s" - -msgid "E1057: Missing :enddef" -msgstr "E1057: Հրամանը բացակայում է :enddef" - -msgid "E1058: Function nesting too deep" -msgstr "E1058: Ֆունկցիայի կանչը շատ է ներդրված" - -#, c-format -msgid "E1059: No white space allowed before colon: %s" -msgstr "E1059: երկու կետից առաջ սպիտակ տարածություն չի թույլատրվում՝ %s" - -#| msgid "E451: Expected }: %s" -msgid "E1060: Expected dot after name: %s" -msgstr "E1060: Ակնկալվող կետ անունից հետո՝ %s" - -#, c-format -msgid "E1061: Cannot find function %s" -msgstr "E1061: Անծանոթ ֆունկցիա: %s" - -msgid "E1062: Cannot index a Number" -msgstr "E1062: Անհնար է ինդեքսավորել թիվը" - -msgid "E1063: Type mismatch for v: variable" -msgstr "E1063: Փոփոխականի տիպի անհամապատասխանություն" - -msgid "E1064: Yank register changed while using it" -msgstr "E1064: Յանկ ռեգիստրը փոխվել է այն օգտագործելիս" - -#| msgid "E1146: Command not recognized: %s" -msgid "E1065: Command cannot be shortened: %s" -msgstr "E1065: հրամանը հնարավոր չէ կրճատել՝ %s" - -#| msgid "E1052: Cannot declare an option: %s" -msgid "E1066: Cannot declare a register: %s" -msgstr "E1066: հնարավոր չէ գրանցել՝ %s" - -#| msgid "E151: No match: %s" -msgid "E1067: Separator mismatch: %s" -msgstr "E1067: բաժանարարի անհամապատասխանություն՝ %s" - -#, c-format -msgid "E1068: No white space allowed before '%s': %s" -msgstr "E1068: '%s'-ից առաջ բացատ չի թույլատրվում: %s" - -#, c-format -msgid "E1069: White space required after '%s': %s" -msgstr "E1069: '%s'-ից հետո պահանջվում է տարածություն: %s" - -#| msgid "E1153: Invalid operation for %s" -msgid "E1071: Invalid string for :import: %s" -msgstr "E1071: Անվավեր տող :import՝ %s-ի համար" - -#| msgid "E691: Can only compare List with List" -msgid "E1072: Cannot compare %s with %s" -msgstr "E1072: Հնարավոր չէ համեմատել %s-ը %s-ի հետ" - -#, c-format -msgid "E1073: Name already defined: %s" -msgstr "E1073: Անունն արդեն սահմանված է: %s" - -#| msgid "E790: undojoin is not allowed after undo" -msgid "E1074: No white space allowed after dot" -msgstr "E1074: Կետից հետո տարածություն չի թույլատրվում" - -#| msgid "E1241: Separator not supported: %s" -msgid "E1075: Namespace not supported: %s" -msgstr "E1075: Անվանատարածքը չի աջակցվում՝ %s" - -#, c-format -msgid "E1077: Missing argument type for %s" -msgstr "E1077: Բացակայող արգումենտի տիպ: %s" - -msgid "E1078: Invalid command \"nested\", did you mean \"++nested\"?" -msgstr "E1078: \"nested\" հրամանը սխալ է, նկատի ունեիք \"++nested\"?" - -#| msgid "E794: Cannot set variable in the sandbox" -msgid "E1079: Cannot declare a variable on the command line" -msgstr "E1079: Հնարավոր չէ փոփոխական հայտարարել հրամանի տողում" - -msgid "E1080: Invalid assignment" -msgstr "E1080: Անվավեր վերագրում" - -#| msgid "E1148: Cannot index a %s" -msgid "E1081: Cannot unlet %s" -msgstr "E1081: Հնարավոր չէ ապասահմանել %s" - -#| msgid "E492: Not an editor command" -msgid "E1082: Command modifier without command" -msgstr "E1082: Հրամանի փոփոխիչ առանց հրամանի" - -msgid "E1083: Missing backtick" -msgstr "E1083: Բացակայող ')'" - -#| msgid "E1061: Cannot find function %s" -msgid "E1084: Cannot delete Vim9 script function %s" -msgstr "E1084: Հնարավոր չէ ջնջել Vim9 սկրիպտի ֆունկցիան %s" - -#| msgid "E108: No such variable: \"%s\"" -msgid "E1085: Not a callable type: %s" -msgstr "E1085: Չկանչելի տեսակ՝ %s" - -#| msgid "E909: Cannot index a special variable" -msgid "E1087: Cannot use an index when declaring a variable" -msgstr "E1087: փոփոխական հայտարարելիս չի կարող ինդեքս օգտագործել" - -msgid "E1088: Script cannot import itself" -msgstr "E1088: Սկրիպտը չի կարող ինքն իրեն ներմուծել" - -#, c-format -msgid "E1089: Unknown variable: %s" -msgstr "E1089: Չսահմանված փոփոխական: %s" - -#| msgid "E197: Cannot set language to \"%s\"" -msgid "E1090: Cannot assign to argument %s" -msgstr "E1090: Հնարավոր չէ վերագրել արգումենտին %s" - -#| msgid "E1146: Command not recognized: %s" -msgid "E1091: Function is not compiled: %s" -msgstr "E1091: Ֆունկցիան կազմված չէ՝ %s" - -#| msgid "E1062: Cannot index a Number" -msgid "E1092: Cannot nest :redir" -msgstr "E1092: Չի կարող բույն դնել :redir" - -#, c-format -msgid "E1093: Expected %d items but got %d" -msgstr "E1093: Սպասվում էր %d տարր, բայց ստացվեց %d" - -#| msgid "E1399: Type can only be used in a script" -msgid "E1094: Import can only be used in a script" -msgstr "E1094: Ներմուծումը կարող է օգտագործվել միայն սկրիպտում" - -#| msgid "E215: Illegal character after *: %s" -msgid "E1095: Unreachable code after :%s" -msgstr "E1095: անհասանելի կոդ հետևյալից հետո՝%s" - -msgid "E1096: Returning a value in a function without a return type" -msgstr "E1096: վերադարձ առանց վերադարձի տեսակի ֆունկցիայի արժեք" - -msgid "E1097: Line incomplete" -msgstr "E1097: Գիծը թերի է" - -#| msgid "E897: List or Blob required" -msgid "E1098: String, List or Blob required" -msgstr "E1098: Պահանջվում է տող, ցուցակ կամ բլիթ" - -#| msgid "E1089: Unknown variable: %s" -msgid "E1099: Unknown error while executing %s" -msgstr "E1099: անհայտ սխալ՝ %s-ն աշխատելիս" - -#, c-format -msgid "E1100: Command not supported in Vim9 script (missing :var?): %s" -msgstr "E1100: հրամանը չի աջակցվում Vim9 սկրիպտում (բացակայում է :var?): %s" - -#| msgid "E1052: Cannot declare an option: %s" -msgid "E1101: Cannot declare a script variable in a function: %s" -msgstr "E1101: Հնարավոր չէ սկրիպտի փոփոխական հայտարարել ֆունկցիայում՝ %s" - -#| msgid "E161: Breakpoint not found: %s" -msgid "E1102: Lambda function not found: %s" -msgstr "E1102: Lambda ֆունկցիան չի գտնվել՝ %s" - -msgid "E1103: Dictionary not set" -msgstr "E1103: Բառարանը սահմանված չէ" - -msgid "E1104: Missing >" -msgstr "E1104: Բացակայող '>'" - -#| msgid "E152: Cannot open %s for writing" -msgid "E1105: Cannot convert %s to string" -msgstr "E1105: Հնարավոր չէ փոխարկել %s-ը տողի" - -#, c-format -msgid "E1106: One argument too many" -msgid_plural "E1106: %d arguments too many" -msgstr[0] "E1106: Մեկ փաստարկ չափազանց շատ է" -msgstr[1] "E1106: %d արգումենտները չափազանց շատ են" - -#| msgid "E897: List or Blob required" -msgid "E1107: String, List, Dict or Blob required" -msgstr "E1107: Պահանջվում է տող, ցուցակ, թելադրանք կամ բշտիկ" - -#| msgid "E711: List value does not have enough items" -msgid "E1109: List item %d is not a List" -msgstr "E1109: Ցուցակի %d տարրը ցուցակ չէ" - -#| msgid "E711: List value does not have enough items" -msgid "E1110: List item %d does not contain 3 numbers" -msgstr "E1110: Ցանկի %d տարրը չի պարունակում 3 թվեր" - -#, c-format -msgid "E1111: List item %d range invalid" -msgstr "E1111: Ցանկի տարրի %d միջակայքն անվավեր է" - -#, c-format -msgid "E1112: List item %d cell width invalid" -msgstr "E1112: Ցանկի տարր %d բջիջի լայնությունը անվավեր է" - -#, c-format -msgid "E1113: Overlapping ranges for 0x%lx" -msgstr "E1113: համընկնող միջակայքեր 0x%lx-ի համար" - -#| msgid "E754: Only up to %d regions supported" -msgid "E1114: Only values of 0x80 and higher supported" -msgstr "E1114: Աջակցվում են միայն 0x80 և ավելի բարձր արժեքները" - -msgid "E1115: \"assert_fails()\" fourth argument must be a number" -msgstr "E1115: \"assert_fails()\" չորրորդ արգումենտը պետք է լինի թիվ" - -#| msgid "E899: Argument of %s must be a List or Blob" -msgid "E1116: \"assert_fails()\" fifth argument must be a string" -msgstr "E1116: \"assert_fails()\" հինգերորդ արգումենտը պետք է լինի տող" - -#| msgid "E804: Cannot use '%' with Float" -msgid "E1117: Cannot use ! with nested :def" -msgstr "E1117: Հնարավոր չէ օգտագործել: բույնով :def" - -#| msgid "E742: Cannot change value" -msgid "E1118: Cannot change locked list" -msgstr "E1118: Հնարավոր չէ փոխել կողպված ցուցակը" - -#| msgid "E165: Cannot go beyond last file" -msgid "E1119: Cannot change locked list item" -msgstr "E1119: Հնարավոր չէ փոխել ցանկի արգելափակված տարրը" - -#| msgid "E742: Cannot change value" -msgid "E1120: Cannot change dict" -msgstr "E1120: Հնարավոր չէ փոխել թելադրանքը" - -#| msgid "E742: Cannot change value" -msgid "E1121: Cannot change dict item" -msgstr "E1121: Հնարավոր չէ փոխել թելադրանքի տարրը" - -#, c-format -msgid "E1122: Variable is locked: %s" -msgstr "E1122: %s արժեքը բլոկավորված է" - -#| msgid "E417: Missing argument: %s" -msgid "E1123: Missing comma before argument: %s" -msgstr "E1123: արգումենտից առաջ բացակայում է ստորակետը՝ %s" - -#| msgid "E1399: Type can only be used in a script" -msgid "E1124: \"%s\" cannot be used in legacy Vim script" -msgstr "E1124: \"%s\"-ը չի կարող օգտագործվել հին Vim սկրիպտում" - -#| msgid "E1035: % requires number arguments" -msgid "E1125: Final requires a value" -msgstr "E1125: Վերջնական արժեքը արժեք է պահանջում" - -msgid "E1126: Cannot use :let in Vim9 script" -msgstr "E1126: Հնարավոր չէ օգտագործել :let-ը Vim9 սկրիպտում" - -#| msgid "E260: Missing name after ->" -msgid "E1127: Missing name after dot" -msgstr "E1127: Անունը կետից հետո բացակայում է" - -msgid "E1128: } without {" -msgstr "E1128: } առանց {" - -#| msgid "E529: Cannot set 'term' to empty string" -msgid "E1129: Throw with empty string" -msgstr "E1129: Նետում դատարկ տեքստով" - -#| msgid "E1362: Cannot use a non-null object" -msgid "E1130: Cannot add to null list" -msgstr "E1130: Չի կարող ավելացնել զրոյական ցուցակին" - -#| msgid "E1362: Cannot use a non-null object" -msgid "E1131: Cannot add to null blob" -msgstr "E1131: Հնարավոր չէ ավելացնել null blob-ին" - -#| msgid "E126: Missing :endfunction" -msgid "E1132: Missing function argument" -msgstr "E1132: Բացակայում է ֆունկցիայի արգումենտը" - -#| msgid "E1354: Cannot extend %s" -msgid "E1133: Cannot extend a null dict" -msgstr "E1133: Չի կարող երկարաձգել անվավեր հրամանը" - -#| msgid "E1354: Cannot extend %s" -msgid "E1134: Cannot extend a null list" -msgstr "E1134: Հնարավոր չէ ընդլայնել զրո ցուցակը" - -#, c-format -msgid "E1135: Using a String as a Bool: \"%s\"" -msgstr "E1135: Օգտագործելով տողը որպես Bool. \"%s\"" - -msgid "E1136: mapping must end with before second " -msgstr "E1136: քարտեզագրումը պետք է ավարտվի վայրկյանից առաջ" - -#| msgid "E805: Using a Float as a Number" -msgid "E1138: Using a Bool as a Number" -msgstr "E1138: Bool-ի օգտագործումը որպես թիվ" - -#| msgid "E1389: Missing name after implements" -msgid "E1139: Missing matching bracket after dict key" -msgstr "E1139: Դիկտիվ ստեղնից հետո բացակայում է համապատասխան փակագիծը" - -#| msgid "E1180: Variable arguments type must be a list: %s" -msgid "E1140: :for argument must be a sequence of lists" -msgstr "E1140: :for արգումենտը պետք է լինի ցուցակների հաջորդականություն" - -#| msgid "E714: List required" -msgid "E1141: Indexable type required" -msgstr "E1141: Պահանջվում է ինդեքսավորվող տեսակ" - -msgid "E1142: Calling test_garbagecollect_now() while v:testing is not set" -msgstr "" -"E1142: Կանչել test_garbagecollect_now(), մինչդեռ v:testing-ը սահմանված չէ" - -#, c-format -msgid "E1143: Empty expression: \"%s\"" -msgstr "E1143: Դատարկ արտահայտություն: \"%s\"" - -#, c-format -msgid "E1144: Command \"%s\" is not followed by white space: %s" -msgstr "E1144: \"%s\" հրամանին չի հաջորդում բացատը՝ %s" - -#| msgid "E990: Missing end marker '%s'" -msgid "E1145: Missing heredoc end marker: %s" -msgstr "E1145: heredoc վերջի նշիչը բացակայում է՝ %s" - -#, c-format -msgid "E1146: Command not recognized: %s" -msgstr "E1146: Անծանոթ հրաման։ %s" - -#| msgid "E1103: Dictionary not set" -msgid "E1147: List not set" -msgstr "E1147: Ցանկը սահմանված չէ" - -#, c-format -msgid "E1148: Cannot index a %s" -msgstr "E1148: Անհնար է ինդեքսավորել %s" - -#, c-format -msgid "E1149: Script variable is invalid after reload in function %s" -msgstr "E1149: Սկրիպտի փոփոխականն անվավեր է %s ֆունկցիայի վերաբեռնումից հետո" - -msgid "E1150: Script variable type changed" -msgstr "E1150: Սկրիպտի փոփոխականի տեսակը փոխվել է" - -#| msgid "E1152: Mismatched enddef" -msgid "E1151: Mismatched endfunction" -msgstr "E1151: անհամապատասխան վերջնական ֆունկցիա" - -msgid "E1152: Mismatched enddef" -msgstr "E1152: Չհամընկնող enddef" - -#, c-format -msgid "E1153: Invalid operation for %s" -msgstr "E1153: Չթույլատրված գործողություն %s" - -msgid "E1154: Divide by zero" -msgstr "E1154: Բաժանել զրոյի" - -msgid "E1155: Cannot define autocommands for ALL events" -msgstr "" -"E1155: Հնարավոր չէ սահմանել ինքնահրամանները բոլոր իրադարձությունների համար" - -#| msgid "E659: Cannot invoke Python recursively" -msgid "E1156: Cannot change the argument list recursively" -msgstr "E1156: Հնարավոր չէ փոխել արգումենտների ցանկը ռեկուրսիվորեն" - -msgid "E1157: Missing return type" -msgstr "E1157: Բացակայող վերադարձի տիպ" - -msgid "E1158: Cannot use flatten() in Vim9 script, use flattennew()" -msgstr "" -"E1158: Հնարավոր չէ օգտագործել flatten() Vim9 սկրիպտում, օգտագործել " -"flattennew()" - -#| msgid "E90: Cannot unload last buffer" -msgid "E1159: Cannot split a window when closing the buffer" -msgstr "E1159: Բուֆերը փակելիս հնարավոր չէ բաժանել պատուհանը" - -#| msgid "E909: Cannot index a special variable" -msgid "E1160: Cannot use a default for variable arguments" -msgstr "E1160: Չի կարող օգտագործել լռելյայն փոփոխական արգումենտների համար" - -#| msgid "E1148: Cannot index a %s" -msgid "E1161: Cannot json encode a %s" -msgstr "E1161: json-ը չի կարող կոդավորել %s" - -#, c-format -msgid "E1162: Register name must be one character: %s" -msgstr "E1162: Ռեգիստրի անունը պետք է լինի մեկ նիշ՝ %s" - -#, c-format -msgid "E1163: Variable %d: type mismatch, expected %s but got %s" -msgstr "" -"E1163: Փոփոխական %d: տիպի անհամապատասխանություն, սպասվում է %s, բայց տրվել է " -"%s" - -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" -msgid "E1163: Variable %d: type mismatch, expected %s but got %s in %s" -msgstr "" -"E1163: փոփոխական %d. տիպի անհամապատասխանություն, սպասվում էր %s, բայց ստացավ " -"%s %s-ում" - -#| msgid "E1356: \"super\" must be followed by a dot" -msgid "E1164: vim9cmd must be followed by a command" -msgstr "E1164: vim9cmd-ին պետք է հետևի հրաման" - -#| msgid "E1365: Cannot use a return type with the \"new\" method" -msgid "E1165: Cannot use a range with an assignment: %s" -msgstr "E1165: Հնարավոր չէ օգտագործել ընդգրկույթ հանձնարարությամբ՝ %s" - -#| msgid "E713: Cannot use empty key for Dictionary" -msgid "E1166: Cannot use a range with a dictionary" -msgstr "E1166: Հնարավոր չէ օգտագործել ընդգրկույթ բառարանով" - -#, c-format -msgid "E1167: Argument name shadows existing variable: %s" -msgstr "E1167: Արգումենտի անունը համընկնում է փոփոխականի անվան հետ: %s" - -#| msgid "E1167: Argument name shadows existing variable: %s" -msgid "E1168: Argument already declared in the script: %s" -msgstr "E1168: սկրիպտում արդեն հայտարարված արգումենտ. %s" - -#, c-format -msgid "E1169: Expression too recursive: %s" -msgstr "E1169: Արտահայտությունը շատ ռեկուրսիվ է: %s" - -msgid "E1170: Cannot use #{ to start a comment" -msgstr "E1170: Չի կարող օգտագործել #{ մեկնաբանություն սկսելու համար" - -#| msgid "E126: Missing :endfunction" -msgid "E1171: Missing } after inline function" -msgstr "E1171: Ներդիր ֆունկցիայից հետո բացակայում է }-ը" - -#| msgid "E794: Cannot set variable in the sandbox" -msgid "E1172: Cannot use default values in a lambda" -msgstr "E1172: Հնարավոր չէ օգտագործել լամբդայի լռելյայն արժեքները" - -#| msgid "E753: Not found: %s" -msgid "E1173: Text found after %s: %s" -msgstr "E1173: Տեքստը գտնվել է %s-ից հետո՝ %s" - -#| msgid "E1210: Number required for argument %d" -msgid "E1174: String required for argument %d" -msgstr "E1174: %d արգումենտի համար անհրաժեշտ է տող" - -#| msgid "E1210: Number required for argument %d" -msgid "E1175: Non-empty string required for argument %d" -msgstr "E1175: %d արգումենտի համար պահանջվում է ոչ դատարկ տող" - -msgid "E1176: Misplaced command modifier" -msgstr "E1176: սխալ տեղակայված հրամանի փոփոխիչ" - -#| msgid "E519: Option not supported" -msgid "E1177: For loop on %s not supported" -msgstr "E1177: For loop-ը %s-ում չի աջակցվում" - -#| msgid "E909: Cannot index a special variable" -msgid "E1178: Cannot lock or unlock a local variable" -msgstr "E1178: Հնարավոր չէ կողպել կամ ապակողպել տեղական փոփոխականը" - -#, c-format -msgid "" -"E1179: Failed to extract PWD from %s, check your shell's config related to " -"OSC 7" -msgstr "" -"E1179: Չհաջողվեց հանել PWD-ը %s-ից, ստուգեք ձեր վահանակի կազմաձևը՝ կապված " -"OSC 7-ի հետ" - -#, c-format -msgid "E1180: Variable arguments type must be a list: %s" -msgstr "E1180: Փոփոխական արգումնետների տիպը պետք է լինի ցանկ: %s" - -#| msgid "E862: Cannot use g: here" -msgid "E1181: Cannot use an underscore here" -msgstr "E1181: Այստեղ հնարավոր չէ օգտագործել ընդգծում" - -#| msgid "E127: Cannot redefine function %s: It is in use" -msgid "E1182: Cannot define a dict function in Vim9 script: %s" -msgstr "E1182: Vim9 սկրիպտում հնարավոր չէ դիկտի ֆունկցիա սահմանել՝ %s" - -#| msgid "E1365: Cannot use a return type with the \"new\" method" -msgid "E1183: Cannot use a range with an assignment operator: %s" -msgstr "E1183: Հնարավոր չէ օգտագործել ընդգրկույթ նշանակման օպերատորի հետ՝ %s" - -#| msgid "E846: Key code not set" -msgid "E1184: Blob not set" -msgstr "E1184: Բլոբը կարգավորված չէ" - -msgid "E1185: Missing :redir END" -msgstr "E1185: Հրամանը բացակայում է :redir END" - -#| msgid "E1169: Expression too recursive: %s" -msgid "E1186: Expression does not result in a value: %s" -msgstr "E1186: Արտահայտությունը չի բերում արժեք՝ %s" - -msgid "E1187: Failed to source defaults.vim" -msgstr "E1187: Չհաջողվեց մուտքագրել defaults.vim" - -msgid "E1188: Cannot open a terminal from the command line window" -msgstr "E1188: Հնարավոր չէ բացել տերմինալը հրամանի տողի պատուհանից" - -#| msgid "E794: Cannot set variable in the sandbox: \"%s\"" -msgid "E1189: Cannot use :legacy with this command: %s" -msgstr "E1189: Հնարավոր չէ օգտագործել :legacy այս հրամանով՝ %s" - -#, c-format -msgid "E1190: One argument too few" -msgid_plural "E1190: %d arguments too few" -msgstr[0] "E1190: Մեկ փաստարկ շատ քիչ է" -msgstr[1] "E1190: %d արգումենտները չափազանց քիչ են" - -#| msgid "E725: Calling dict function without Dictionary: %s" -msgid "E1191: Call to function that failed to compile: %s" -msgstr "E1191: Ֆունկցիայի կանչ, որը չի հաջողվել կոմպիլացնել՝ %s" - -msgid "E1192: Empty function name" -msgstr "E1192: Դատարկ ֆունկցիայի անուն" - -msgid "E1193: cryptmethod xchacha20 not built into this Vim" -msgstr "E1193: cryptmethod xchacha20-ը ներկառուցված չէ այս Vim-ում" - -msgid "E1194: Cannot encrypt header, not enough space" -msgstr "E1194: Հնարավոր չէ գաղտնագրել վերնագիրը, բավարար տարածք չկա" - -msgid "E1195: Cannot encrypt buffer, not enough space" -msgstr "E1195: Հնարավոր չէ գաղտնագրել բուֆերը, բավարար տարածք չկա" - -msgid "E1196: Cannot decrypt header, not enough space" -msgstr "E1196: Չի հաջողվում վերծանել վերնագիրը, բավարար տարածք չկա" - -#| msgid "E82: Cannot allocate any buffer, exiting..." -msgid "E1197: Cannot allocate_buffer for encryption" -msgstr "E1197: Հնարավոր չէ հատկացնել_բուֆեր կոդավորման համար" - -#| msgid "E1200: Decryption failed!" -msgid "E1198: Decryption failed: Header incomplete!" -msgstr "E1198: Ապակոդավորումը ձախողվեց. Գլխագիրն ամբողջական չէ!" - -msgid "E1199: Cannot decrypt buffer, not enough space" -msgstr "E1199: Հնարավոր չէ վերծանել բուֆերը, բավարար տարածք չկա" - -msgid "E1200: Decryption failed!" -msgstr "E1200: Չեղարկման ֆայլի ապակոդավորումն ավարտվել է անհաջողությամբ!" - -#| msgid "E1200: Decryption failed!" -msgid "E1201: Decryption failed: pre-mature end of file!" -msgstr "E1201: Ապակոդավորումը ձախողվեց. ֆայլի վաղաժամ ավարտ!" - -#, c-format -msgid "E1202: No white space allowed after '%s': %s" -msgstr "E1202: '%s'-ից հետո բացատ չի թույլատրվում: %s" - -#| msgid "E370: Could not load library %s: %s" -msgid "E1203: Dot not allowed after a %s: %s" -msgstr "E1203: %s-ից հետո կետը չի թույլատրվում. %s" - -#, c-format -msgid "E1204: No Number allowed after .: '\\%%%c'" -msgstr "E1204: '\\%%%c' հետո համարը չի թույլատրվում" - -msgid "E1205: No white space allowed between option and" -msgstr "E1205: Չի թույլատրվում սպիտակ տարածություն տարբերակի և" - -#, c-format -msgid "E1206: Dictionary required for argument %d" -msgstr "E1206: Անհրաժեշտ է բառարան %d-ի համար" - -#| msgid "E1169: Expression too recursive: %s" -msgid "E1207: Expression without an effect: %s" -msgstr "E1207: Արտահայտություն առանց էֆեկտի՝ %s" - -msgid "E1208: -complete used without allowing arguments" -msgstr "E1208: - Ամբողջական, օգտագործվում է առանց արգումենտներ թույլ տալու" - -#| msgid "E475: Invalid value for argument %s" -msgid "E1209: Invalid value for a line number: \"%s\"" -msgstr "E1209: Անվավեր արժեք տողի համարի համար: \"%s\"" - -#, c-format -msgid "E1210: Number required for argument %d" -msgstr "E1210: Անհրաժեշտ է թիվ %d-ի համար" - -#| msgid "E1210: Number required for argument %d" -msgid "E1211: List required for argument %d" -msgstr "E1211: ցանկը պահանջվում է արգումենտի համար %d" - -#| msgid "E1210: Number required for argument %d" -msgid "E1212: Bool required for argument %d" -msgstr "E1212: Բուլ պահանջվում է արգումենտի համար %d" - -#, c-format -msgid "E1213: Redefining imported item \"%s\"" -msgstr "E1213: ներմուծված \"%s\" տարրի վերասահմանում" - -#, c-format -msgid "E1214: Digraph must be just two characters: %s" -msgstr "E1214: Դիգրաֆը պետք է լինի ընդամենը երկու նիշ. %s" - -#, c-format -msgid "E1215: Digraph must be one character: %s" -msgstr "E1215: դիգրաֆը պետք է լինի մեկ նիշ՝ %s" - -msgid "" -"E1216: digraph_setlist() argument must be a list of lists with two items" -msgstr "" -"E1216: digraph_setlist() արգումենտը պետք է լինի երկու տարր ունեցող " -"ցուցակների ցանկ" - -#| msgid "E1210: Number required for argument %d" -msgid "E1217: Channel or Job required for argument %d" -msgstr "E1217: արգումենտի համար պահանջվում է ալիք կամ աշխատանք %d" - -#| msgid "E1210: Number required for argument %d" -msgid "E1218: Job required for argument %d" -msgstr "E1218: աշխատանք է պահանջվում արգումենտի համար %d" - -#| msgid "E1210: Number required for argument %d" -msgid "E1219: Float or Number required for argument %d" -msgstr "E1219: արգումենտի համար պահանջվում է float կամ համար %d" - -#| msgid "E1210: Number required for argument %d" -msgid "E1220: String or Number required for argument %d" -msgstr "E1220: %d արգումենտի համար պահանջվում է տող կամ համար" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1221: String or Blob required for argument %d" -msgstr "E1221: %d արգումենտի համար պահանջվում է տող կամ բլիթ" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1222: String or List required for argument %d" -msgstr "E1222: %d արգումենտի համար պահանջվում է տող կամ ցուցակ" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1223: String or Dictionary required for argument %d" -msgstr "E1223: %d արգումենտի համար պահանջվում է տող կամ բառարան" - -#| msgid "E1210: Number required for argument %d" -msgid "E1224: String, Number or List required for argument %d" -msgstr "E1224: %d արգումենտի համար պահանջվում է տող, համար կամ ցուցակ" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1225: String, List or Dictionary required for argument %d" -msgstr "E1225: %d արգումենտի համար պահանջվում է տող, ցուցակ կամ բառարան" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1226: List or Blob required for argument %d" -msgstr "E1226: Ցուցակ կամ Բլոբ պահանջվում է արգումենտի համար %d" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1227: List or Dictionary required for argument %d" -msgstr "E1227: արգումենտի համար պահանջվում է ցուցակ կամ բառարան %d" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1228: List, Dictionary or Blob required for argument %d" -msgstr "E1228: արգումենտի համար պահանջվում է ցուցակ, բառարան կամ բշտիկ %d" - -#, c-format -msgid "E1229: Expected dictionary for using key \"%s\", but got %s" -msgstr "" -"E1229: Բանալի \"%s\" օգտագործելու համար սպասվում էր բառարան, բայց ստացավ %s" - -#| msgid "E1200: Decryption failed!" -msgid "E1230: Encryption: sodium_mlock() failed" -msgstr "E1230: Կոդավորումը՝ sodium_mlock() ձախողվեց" - -#, c-format -msgid "E1231: Cannot use a bar to separate commands here: %s" -msgstr "" -"E1231: Հնարավոր չէ օգտագործել գիծ՝ հրամաններն այստեղ առանձնացնելու համար՝ %s" - -msgid "E1232: Argument of exists_compiled() must be a literal string" -msgstr "E1232: exists_compiled()-ի արգումենտը պետք է լինի տող" - -#| msgid "E785: complete() can only be used in Insert mode" -msgid "E1233: exists_compiled() can only be used in a :def function" -msgstr "" -"E1233: exists_compiled()-ը կարող է օգտագործվել միայն :def ֆունկցիայի մեջ" - -#| msgid "E1356: \"super\" must be followed by a dot" -msgid "E1234: legacy must be followed by a command" -msgstr "E1234: ժառանգությանը պետք է հետևի հրաման" - -#, c-format -msgid "E1236: Cannot use %s itself, it is imported" -msgstr "E1236: Չի կարող օգտագործել %s ինքնին, այն ներմուծված է" - -#, c-format -msgid "E1237: No such user-defined command in current buffer: %s" -msgstr "E1237: Հերթական բուֆերում չկա նման օգտատիրոջ սահմանած հրաման: %s" - -#| msgid "E1210: Number required for argument %d" -msgid "E1238: Blob required for argument %d" -msgstr "E1238: արգումենտի համար անհրաժեշտ է բլիթ %d" - -#| msgid "E1291: Invalid argument: %ld" -msgid "E1239: Invalid value for blob: %d" -msgstr "E1239: անվավեր արժեք blob-ի համար՝ %d" - -msgid "E1240: Resulting text too long" -msgstr "E1240: Տողն անսպասելի երկար է" - -#, c-format -msgid "E1241: Separator not supported: %s" -msgstr "E1241: Բաժանիչը չի աջակցվում: %s" - -#, c-format -msgid "E1242: No white space allowed before separator: %s" -msgstr "E1242: Չի թույլատրվում սպիտակ տարածություն բաժանարարից առաջ՝ %s" - -msgid "E1243: ASCII code not in 32-127 range" -msgstr "E1243: ASCII կոդը 32-127 միջակայքում չէ" - -#| msgid "E383: Invalid search string: %s" -msgid "E1244: Bad color string: %s" -msgstr "E1244: Վատ գույնի տող՝ %s" - -msgid "E1245: Cannot expand in a Vim9 function" -msgstr "E1245: Հնարավոր չէ ընդլայնել Vim9 ֆունկցիայի մեջ" - -#| msgid "E794: Cannot set variable in the sandbox: \"%s\"" -msgid "E1246: Cannot find variable to (un)lock: %s" -msgstr "E1246: Հնարավոր չէ գտնել փոփոխական (ապ)կողպելու համար՝ %s" - -msgid "E1247: Line number out of range" -msgstr "E1247: Տողի համարը միջակայքից անցել է" - -msgid "E1248: Closure called from invalid context" -msgstr "E1248: Փակումը կանչվել է անվավեր համատեքստից" - -msgid "E1249: Highlight group name too long" -msgstr "E1249: Գունանշման խմբի անունը շատ երկար է" - -#, c-format -msgid "E1250: Argument of %s must be a List, String, Dictionary or Blob" -msgstr "E1250: %s֊ի արգումենտը պետք է լինի ցանկ կամ բառարան" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1251: List, Dictionary, Blob or String required for argument %d" -msgstr "E1251: արգումենտի համար պահանջվում է ցուցակ, բառարան, բլոկ կամ տող %d" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1252: String, List or Blob required for argument %d" -msgstr "E1252: %d արգումենտի համար պահանջվում է տող, ցուցակ կամ բշտիկ" - -#| msgid "E794: Cannot set variable in the sandbox" -msgid "E1254: Cannot use script variable in for loop" -msgstr "E1254: Հնարավոր չէ օգտագործել սկրիպտի փոփոխական for loop-ում" - -msgid "E1255: mapping must end with " -msgstr "E1255: քարտեզագրումը պետք է ավարտվի" - -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1256: String or function required for argument %d" -msgstr "E1256: %d արգումենտի համար պահանջվում է տող կամ ֆունկցիա" - -#, c-format -msgid "E1257: Imported script must use \"as\" or end in .vim: %s" -msgstr "" -"E1257: Ներմուծված սկրիպտը պետք է օգտագործի \"as\" կամ վերջանա .vim-ով: %s" - -#| msgid "E253: Fontset name: %s" -msgid "E1258: No '.' after imported name: %s" -msgstr "E1258: Ոչ \"\": ներմուծված անունից հետո՝ %s" - -#| msgid "E1389: Missing name after implements" -msgid "E1259: Missing name after imported name: %s" -msgstr "E1259: Ներմուծված անունից հետո անունը բացակայում է՝ %s" - -#, c-format -msgid "E1260: Cannot unlet an imported item: %s" -msgstr "E1260: Հնարավոր չէ ապասահմանել ներմուծված տարրը՝ %s" - -msgid "E1261: Cannot import .vim without using \"as\"" -msgstr "E1261: Հնարավոր չէ ներմուծել .vim առանց \"as\" օգտագործելու" - -#| msgid "E625: Cannot open cscope database: %s" -msgid "E1262: Cannot import the same script twice: %s" -msgstr "E1262: Հնարավոր չէ նույն սկրիպտն երկու անգամ ներմուծել՝ %s" - -msgid "E1263: Cannot use name with # in Vim9 script, use export instead" -msgstr "" -"E1263: Vim9 սկրիպտում #-ով անունը հնարավոր չէ օգտագործել, փոխարենը " -"օգտագործեք արտահանումը" - -#, c-format -msgid "E1264: Autoload import cannot use absolute or relative path: %s" -msgstr "" -"E1264: Ավտոբեռնման ներմուծումը չի կարող օգտագործել բացարձակ կամ հարաբերական " -"ճանապարհ՝ %s" - -#| msgid "E862: Cannot use g: here" -msgid "E1265: Cannot use a partial here" -msgstr "E1265: Այստեղ հնարավոր չէ մասնակին օգտագործել" - -msgid "" -"E1266: Critical error in python3 initialization, check your python3 " -"installation" -msgstr "" -"E1266: Կրիտիկական սխալ python3 սկզբնավորման ժամանակ, ստուգեք ձեր python3 " -"տեղադրումը" - -#| msgid "E128: Function name must start with a capital or \"s:\": %s" -msgid "E1267: Function name must start with a capital: %s" -msgstr "E1267: Ֆունկցիայի անունը պետք է սկսվի մեծատառով՝ %s" - -#| msgid "E1048: Item not found in script: %s" -msgid "E1268: Cannot use s: in Vim9 script: %s" -msgstr "E1268: Հնարավոր չէ օգտագործել s: Vim9 սկրիպտում՝ %s" - -#| msgid "E794: Cannot set variable in the sandbox: \"%s\"" -msgid "E1269: Cannot create a Vim9 script variable in a function: %s" -msgstr "E1269: Հնարավոր չէ ստեղծել Vim9 սցենարի փոփոխական ֆունկցիայում՝ %s" - -msgid "E1270: Cannot use :s\\/sub/ in Vim9 script" -msgstr "E1270: Հնարավոր չէ օգտագործել :s\\/sub/ Vim9 սկրիպտում" - -#, c-format -msgid "E1271: Compiling closure without context: %s" -msgstr "E1271: Կազմում է փակումը առանց համատեքստի. %s" - -#| msgid "E120: Using not in a script context: %s" -msgid "E1272: Using type not in a script context: %s" -msgstr "E1272: Օգտագործելով տիպը ոչ սցենարի համատեքստում՝ %s" - -#, c-format -msgid "E1273: (NFA regexp) missing value in '\\%%%c'" -msgstr "E1273: (NFA regexp) անսպասելի '\\%%%c'" - -#| msgid "E498: No :source file name to substitute for \"\"" -msgid "E1274: No script file name to substitute for \"